📄 util.c
字号:
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 + -