⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 errpkge.varargs

📁 seismic software,very useful
💻 VARARGS
字号:
/*---------------------------------------------------------------------- * Copyright (c) Colorado School of Mines, 1989. * All rights reserved. * * This code is part of SU.  SU stands for Seismic Unix, a processing line * developed at the Colorado School of Mines, partially based on Stanford * Exploration Project (SEP) software.  Inquiries should be addressed to: * *  Jack K. Cohen, Center for Wave Phenomena, Colorado School of Mines, *  Golden, CO 80401  (isis!csm9a!jkcohen) *---------------------------------------------------------------------- */#include <varargs.h>#include "par.h"/* errpkge - routines for reporting errors * * err     - print warning on application program error and die * warn    - print warning on application program error * syserr  - print warning on a system error and die * syswarn - print warning on a system error * * Returns: *	err  - void *	warn - void *	syserr  - void *	syswarn - int: errno * * Synopsis: *	void err(format, args) *	format - a printf format string ("\n" not needed) *      args   - the variables referenced in the format string * *	void warn(format, args) *	format - a printf format string ("\n" not needed) *      args   - the variables referenced in the format string * *	void syserr(format, args) *	format - a printf format string ("\n" not needed) usually *		 giving the name of the offending system call *      args   - the variables referenced in the format string, often *		 just an offending file name * *	int syswarn(format, args) *	format - a printf format string ("\n" not needed) usually *		 giving the name of the offending system call *      args   - the variables referenced in the format string, often *		 just an offending file name * * * Credits:  *	Kernighan and Pike, "The UNIX Programming Environment", page 207. *	Also Rochkind, "Advanced UNIX Programming", page 13. *	SEP: Jeff Thorson, Stew *	CWP: Shuki, Jack * * Examples: *	err("Cannot divide %f by %f", x, y); *	warn("fmax = %f exceeds half nyquist= %f", fmax, 0.25/dt); * *	if (-1 == (fd = open(xargv[1], O_RDONLY))) *		syserr("can't open %s", xargv[1]); *	... *	if (-1 == close(fd)) *		syserr("close failed"); * *	... *	if (-1 == (fd = open(xargv[j], O_RDONLY))) *		syswarn("can't open %s, processing next file", *			xargv[j]); *	continue; *	... * * *//* For syserr() and syswarn() */extern int errno, sys_nerr;extern char *sys_errlist[];void err(va_alist)va_dcl{	va_list args;	char *format;	if (EOF == fflush(stdout)) {		fprintf(stderr, "\nerr: fflush failed on stdout");	}	if (errno) syserr(va_alist);	fprintf(stderr, "\n%s: ", xargv[0]);	va_start(args);	format = va_arg(args, char *);	vfprintf(stderr, format, args);	va_end(args);	fprintf(stderr, "\n");	exit(EXIT_FAILURE);}void warn(va_alist)va_dcl{	va_list args;	char *format;	if (EOF == fflush(stdout)) {		fprintf(stderr, "\nwarn: fflush failed on stdout");	}	fprintf(stderr, "\n%s: ", xargv[0]);	va_start(args);	format = va_arg(args, char *);	vfprintf(stderr, format, args);	va_end(args);	fprintf(stderr, "\n");	return;}void syserr(va_alist)va_dcl{	va_list args;	char *format;	if (EOF == fflush(stdout)) {		err("syswarn: fflush failed on stdout");	}	fprintf(stderr, "\n%s: ", xargv[0]);	va_start(args);	format = va_arg(args, char *);	vfprintf(stderr, format, args);	va_end(args);	if (errno > 0 && errno < sys_nerr) { 		fprintf(stderr, " (%s)", sys_errlist[errno]);	}	fprintf(stderr, "\n");	exit(EXIT_FAILURE);}int syswarn(va_alist)va_dcl{	va_list args;	char *format;	if (EOF == fflush(stdout)) {		err("syswarn: fflush failed on stdout");	}	fprintf(stderr, "\n%s: ", xargv[0]);	va_start(args);	format = va_arg(args, char *);	vfprintf(stderr, format, args);	va_end(args);	if (errno > 0 && errno < sys_nerr) { 		fprintf(stderr, " (%s)", sys_errlist[errno]);	}	fprintf(stderr, "\n");	return errno;}#ifdef TESTmain(int argc, char **argv){	int fd;	float fmax, dt=0.004, nyq,  x=1.0, y=0.0;	initargs(argc, argv);	nyq = 1.0/(2.0*dt); fmax = nyq/2.0 + .01;	fprintf(stderr, "\nTrue values:\n");	fprintf(stderr, "fmax=%f, half nyquist=%f\n", fmax, 0.25/dt);	fprintf(stderr, "filename=%s\n", xargv[1]);	fprintf(stderr, "x=%f, y=%f\n\n", x, y); 	warn("warn: fmax = %f exceeds half nyquist= %f", fmax, 0.25/dt);  	if (-1 == (fd = open(xargv[1], O_RDONLY)))  		syswarn("syswarn: can't open %s", xargv[1]);   	err("err: Cannot divide %f by %f", x, y);	return EXIT_SUCCESS;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -