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

📄 util.c

📁 API
💻 C
📖 第 1 页 / 共 2 页
字号:
	case	'8':
		return("捌");
	case	'9':
		return("玖");
	default:
		return("**");
	}
}

print_upper(fee)
double	fee;
{
	int	i, len;
	char	*upper_str();
	char	ustr[128];

	strcpy(ustr, upper_str(fee));
	printf("%s", ustr);
}

/*
 *	将金额用','号分割显示
 */
zut_draw_money(moneystr, mstr)
char	*moneystr;
char	*mstr;
{
	int	mmm[10];
	char	mm[128]; /* old: int mm; */
	int	i, cnt;
	char	s[10];
	int	len;
	char	flag = 0;

		
#ifdef moneyISint
	mm = money;

	mmm[0] = mm % 100;
	mm /= 100;
	cnt = 1;
	while (mm >= 1000) {
		mmm[cnt++] = mm % 1000;
		mm = mm/1000;
	}
	mmm[cnt] = mm;
#else
	
	strcpy(mm, zut_trunc_lr_space(moneystr));
	if (mm[0] == '-') {
		flag = 1;
		strcpy(mm, &mm[1]);
	} else if (mm[0] == '+') {
		flag = 0;
		strcpy(mm, &mm[1]);
	} else
		flag = 0;
	
	for (i = 0; i < (int)strlen(mm); i++) {
		if (mm[i] < '0' || mm[i] > '9') {
			sprintf(mstr, "0.00");
			return;
		}
	}

	for (i = 0; i < (int)strlen(mm); i++) {
		if (mm[i] != '0')
			break;
	}
	strcpy(mm, &mm[i]);

	len = (int)strlen(mm);

	if (len <= 2) {
		mmm[0] = atoi(mm);
		mm[0] = '\0';
	} else {
		mmm[0] = atoi(&mm[len-2]);
		mm[len-2] = '\0';
	}
		
	cnt = 1;
	while ((len=(int)strlen(mm)) > 3) {
		mmm[cnt++] = atoi(&mm[len-3]);
		mm[len-3] = '\0';
	}
	mmm[cnt] = atoi(mm);
		
#endif

	if (flag == 1)
		sprintf(mstr, "-%d", mmm[cnt]);
	else
		sprintf(mstr, "%d", mmm[cnt]);

	if (cnt == 1) {
		sprintf(s, ".%02d", mmm[0]);
		strcat(mstr, s);
		return;
	}

	for (i = cnt-1; i >= 1; i--) {
		sprintf(s, ",%03d", mmm[i]);
		strcat(mstr, s);
	}
	sprintf(s, ".%02d", mmm[0]);
	strcat(mstr, s);
	return;
}

zut_begin_errmsg()
{
	sprintf(GV_errfile, "/usr/tmp/Err_%d", getpid());
	if ((GV_errfp = fopen(GV_errfile, "w+")) == NULL) {
		printf("错误记录文件%s无法创建!\n", GV_errfile);
		return(-1001);
	}
	return(0);
}

/* VARARGS2 */
zut_errmsg(errname, shouldquit, s, a, b, c, d, e, f, g, h, i, j, k, l, m)
char	*errname;
char	shouldquit;
char	*s;
long	a, b, c, d, e, f, g, h, i, j, k, l, m;
{

	if (GV_errfp == NULL) {
		if (zut_begin_errmsg() != 0)
			GV_errfp = NULL;
	}
	if (GV_errfp == NULL) {
		fflush(stdout);
	
		if (errname != NULL) {
			fprintf(stdout, "%s: ", errname);
		}
		fprintf(stdout, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
		fprintf(stdout, "\n");
		if (shouldquit == 1) {
			fflush(stdout);
			zut_quit(1);
		}
	} else {
		fflush(GV_errfp);
	
		if (errname != NULL) {
			fprintf(GV_errfp, "%s: ", errname);
		}
		fprintf(GV_errfp, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
		fprintf(GV_errfp, "\n");
		if (shouldquit == 1) {
			fflush(GV_errfp);
			zut_quit(1);
		}
	}
}

/*
 * The messages are listed in increasing order of seriousness.
 *
 * First are warnings.
 */

/* VARARGS1 */
zut_warning(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
char	*s;
long	a, b, c, d, e, f, g, h, i, j, k, l, m;
{
	zut_errmsg("Warning", 0, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
}

/*
 * Errors are a little worse, they mean something is wrong,
 * but not so bad that processing can't continue.
 *
 * The routine "erecover" is called to recover from the error,
 * a default routine is provided that does nothing.
 */

/* VARARGS1 */
zut_error(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
char	*s;
long	a, b, c, d, e, f, g, h, i, j, k, l, m;
{
	zut_errmsg("Error", 0, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
}

/*
 * Non-recoverable user error.
 */

/* VARARGS1 */
zut_fatal(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
char	*s;
long	a, b, c, d, e, f, g, h, i, j, k, l, m;
{
	zut_errmsg("Fatal error", 1, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
}

/*
 * Panics indicate an internal program error.
 */

/* VARARGS1 */
zut_panic(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
char	*s;
long	a, b, c, d, e, f, g, h, i, j, k, l, m;
{
    zut_errmsg("Panic", 1, s, a, b, c, d, e, f, g, h, i, j, k, l, m);
}

zut_quit(r)
int	r;
{
	if (GV_errfp != NULL) {
		fclose(GV_errfp);
		printf("程序出错! 详细信息见记录文件%s\n", GV_errfile);
	}
	exit(r);
}


char	*
zut_mkstring(va_alist)
va_dcl
{
	char	msgbuf[BUFSIZ];
	char	*fmt;
	va_list	vargs;

	va_start(vargs);
	fmt = va_arg(vargs, char *);
#ifndef	NO_VPRINTF
	(void) vsprintf(msgbuf, fmt, vargs);
#else
	{
		FILE	foo;
		foo.__cnt = BUFSIZ;
		foo.__base = foo.__ptr = (unsigned char *)msgbuf;
/*
		foo.__flag = _IOWRT + _IOSTRG;
*/
		foo.__flag = _IOWRT;
		(void) _doprnt(fmt, vargs, &foo);
		*foo.__ptr = ' ';
	}
#endif
	va_end(vargs);

	return (strdup(msgbuf));
}

/*
#ifdef zgx980319
*/
#ifndef zgx980824
static jmp_buf	pos;
static char	alarm_flag = 0;

zut_clear_stdin()
{
	void	clear_stdin_alarmfun();

	signal(SIGALRM, SIG_IGN);
	while(1) {
		alarm_flag = 0;
		setjmp(pos);
		signal(SIGALRM, clear_stdin_alarmfun);
		if (alarm_flag == 1) {
			alarm_flag = 0;
			alarm(0);
			break;
		}
		alarm(1);
		getc(stdin);
		alarm(0);
	}
	signal(SIGALRM, SIG_IGN);
}

void clear_stdin_alarmfun()
{
	alarm(0);
	signal(SIGALRM, SIG_IGN);
	alarm_flag = 1;
	longjmp(pos, 1);
}
#else
zut_clear_stdin()
{
	FILE	*fstdin;
	
	fstdin = stdin;

	__filbuf(fstdin);
	zut_error("_cnt=%d\t\n_base=%s\n_ptr=%s\n", fstdin->__cnt, fstdin->__base, fstdin->__ptr);
	fstdin->__cnt = 0;
}

#endif

char	*
zut_add_money(money1, money2, result)
char	*money1, *money2;
char	*result;
{
	int	i, j;
	int	len1, len2, len;
	int	cflag = 0, ii;
	char	m1[100], m2[100], m[100];

	for (i = 0; i < strlen(money1); i++)
		m[i] = money1[strlen(money1)-i-1];
	m[i] = '\0';
	strcpy(m1, zut_trunc_lr_space(m));
	for (i = 0; i < strlen(money2); i++)
		m[i] = money2[strlen(money2)-i-1];
	m[i] = '\0';
	strcpy(m2, zut_trunc_lr_space(m));

	len1 = strlen(m1);
	len2 = strlen(m2);

	if (len1 < len2) {
		for (i = len1; i < len2; i++)
			m1[i] = '0';
		m1[i++] = '\0';
	} else if (len1 > len2) {
		for (i = len2; i < len1; i++)
			m2[i] = '0';
		m2[i++] = '\0';
	}

	cflag = 0;
	for (i = 0; i < strlen(m1); i++) {
		ii = (m1[i] - '0') + (m2[i] - '0') + cflag;
		result[i] = ii % 10 + '0';
		cflag = ii / 10;
	}
	if (cflag != 0) {
		result[i++] = cflag + '0';
	}

	result[i] = '\0';

	for (i = 0; i < strlen(result); i++)
		m[i] = result[strlen(result)-i-1];
	m[i] = '\0';
	strcpy(result, zut_trunc_lr_space(m));
	return(result);
}

#ifdef zgx981010
char	*
zut_sub_money(money1, money2, result)
char	*money1, *money2;
char	*result;
{
	int	i, j;
	int	len1, len2, len;
	int	cflag = 0, ii;
	char	m1[100], m2[100], m[100];

	for (i = 0; i < strlen(money1); i++)
		m[i] = money1[strlen(money1)-i-1];
	m[i] = '\0';
	strcpy(m1, zut_trunc_lr_space(m));
	for (i = 0; i < strlen(money2); i++)
		m[i] = money2[strlen(money2)-i-1];
	m[i] = '\0';
	strcpy(m2, zut_trunc_lr_space(m));

	len1 = strlen(m1);
	len2 = strlen(m2);

	if (len1 < len2) {
		for (i = len1; i < len2; i++)
			m1[i] = '0';
		m1[i++] = '\0';
	} else if (len1 > len2) {
		for (i = len2; i < len1; i++)
			m2[i] = '0';
		m2[i++] = '\0';
	}

	cflag = 0;
	for (i = 0; i < strlen(m1); i++) {
		ii = (m1[i] - '0') - (m2[i] - '0') - cflag;
		result[i] = ii % 10 + '0';
		cflag = ii / 10;
	}
	if (cflag != 0) {
		result[i++] = cflag + '0';
	}

	result[i] = '\0';

	for (i = 0; i < strlen(result); i++)
		m[i] = result[strlen(result)-i-1];
	m[i] = '\0';
	strcpy(result, zut_trunc_lr_space(m));
	return(result);
}
#endif

/* 求x的y次方值 */
zut_power(x, y)
int	x, y;
{
	int	i;
	int	result;

	result = 1;

	for (i = 0; i < y; i++)
		result = result * x;
	return(result);
}

/*
 * 计算两个数字字符串之间间隔的个数, num为可以变化的低位位数,
 * 也即若num=5, 则若间隔数大于等于10的5次方即100000时报错
 */
zut_count_no(start, end, num)
char	*start;
char	*end;
short	num;
{
	short	len;
	short	flag;
	char	ss[128];
	char	ee[128];

	if (num >= 10)
		return(0);
	if (!zut_is_all_digit(start))
		return(0);
	if (!zut_is_all_digit(end))
		return(0);

	len = strlen(start);
	if (len < strlen(end))
		len = strlen(end);

	if (len < 10) {	/* 若整型能表示的数 */
		if (atoi(start) > atoi(end))
			return(-(atoi(start) - atoi(end) + 1));

		else
			return(atoi(end) - atoi(start) + 1);
	}
		
	sprintf(ss, "%0*s", len, start);
	sprintf(ee, "%0*s", len, end);
	if (strcmp(ss, ee) > 0)
		flag = -1;
	else
		flag = 1;

	if (strncmp(ss, ee, len - num - 1) != 0)
		return(flag * (zut_power(10, num) + 2));
	strcpy(ss, &ss[len-num-1]);
	strcpy(ee, &ee[len-num-1]);
	if ((atoi(ee) - atoi(ss)) < -zut_power(10, num))
		return(flag * (zut_power(10, num) + 1));
	if ((atoi(ee) - atoi(ss)) > zut_power(10, num))
		return(flag * (zut_power(10, num) + 1));

	if (atoi(ee) < atoi(ss))
		return(-(atoi(ss) - atoi(ee) + 1));

	return(atoi(ee) - atoi(ss) + 1);
}

/*
 * 将数字字符串start加上整数num后放入end中
 * num不可大于10的9次方
 */
zut_add_no(start, num, end)
char	*start;
int	num;
char	*end;
{
	short	len;
	char	ss[128];
	char	ee[128];
	char	v_char[256];

	strcpy(v_char, start);
	if (num >= zut_power(10, 9)) {
		strcpy(end, v_char);
		return(-1);
	}
	if (!zut_is_all_digit(start)) {
		strcpy(end, v_char);
		return(-1);
	}

	len = strlen(start);

	if (len < 10) {	/* 若整型能表示的数 */
		sprintf(end, "%0*ld", len, atoi(start)+num);
		return(0);
	}
		
	strncpy(v_char, start, len - 9 - 1);
	v_char[len-9-1] = '\0';
	strcpy(ss, &start[len-9-1]);
	sprintf(ee, "%0*ld", 10, atoi(ss) + num);
	sprintf(end, "%s%s", v_char, ee);
	return(0);
}

/*
 * 将数字字符串start减去整数num后放入end中
 * num不可大于10的9次方
 */
zut_sub_no(start, num, end)
char	*start;
int	num;
char	*end;
{
	short	len;
	char	ss[128];
	char	ee[128];
	char	v_char[256];

	strcpy(v_char, start);
	if (num >= zut_power(10, 9)) {
		strcpy(end, v_char);
		return(-1);
	}
	if (!zut_is_all_digit(start)) {
		strcpy(end, v_char);
		return(-1);
	}

	len = strlen(start);

	if (len < 10) {	/* 若整型能表示的数 */
		sprintf(end, "%0*ld", len, atoi(start)-num);
		return(0);
	}
		
	strncpy(v_char, start, len - 9 - 1);
	v_char[len-9-1] = '\0';
	strcpy(ss, &start[len-9-1]);
	sprintf(ee, "%0*ld", 10, atoi(ss) - num);
	sprintf(end, "%s%s", v_char, ee);
	return(0);
}

#ifdef zgx010520_added
#else
killproc(prog_name, sig)
char	*prog_name;
int	sig;
{
	char	buf[256];
	char	*tmpfile;
	int	i, j;
	int	pid;
	FILE	*fp;
	char	name[64];
	char	no_prog = 1;
	
	tmpfile = tempnam("/tmp", "nas_");	/* 在/tmp下产生一个临时文件 */

	sprintf ( buf , "ps -e | grep \"%s\"| awk '{ print $1 \" \" $4 }' > %s", prog_name, tmpfile);
	//printf("cmd=%s", buf);
	if (system(buf) < 0)
		return(-1);

	if ((fp = fopen (tmpfile, "r") ) == NULL)
		return(-1);
		
	no_prog = 1;
	while (!feof(fp)) {
		if (fgets(buf, 256, fp) == NULL)
			break;
		sscanf (buf,"%d %s", &pid, name);
		if (!strcmp(prog_name, name)) {
			if (sig == 0)	/* 若是信号0,则查询进程号 */
				printf("%d\t%s\n", pid, name);
			else
				kill(pid, sig);
			no_prog = 0;
		}
	}
	unlink(tmpfile);
	if (no_prog)
		return(-2);
	return(0);
}

char *get_workdir()
{
	char	*wkdir;

	wkdir = (char *)getenv("WORKDIR");
	if (wkdir != NULL)
		return(wkdir);

	return("/usr/bts");
}
#endif


del_all_space(str)
char	*str;
{
	int	j;

	/*
	 * 去掉前面的空格
	 */
	for (j = 0; j < strlen(str); j++)
		if (str[j] != ' ' && str[j] != '\t')
			break;
	strcpy(str, &str[j]);

	/*
	 * 去掉后面的空格
	 */
	for (j = strlen(str)-1; j >= 0; j--)
		if (str[j] != ' ' && str[j] != '\t')
			break;
	str[j+1] = '\0';
}

del_NL_CR(str)
char	*str;
{
	int	j;

	/*
	 * 去掉后面的"\n\r"
	 */
	for (j = strlen(str) - 1; j >= 0; j--)
		if (str[j] != '\n' && str[j] != '\r')
			break;
	str[j+1] = '\0';
}

⌨️ 快捷键说明

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