📄 mbbase.c
字号:
/* File name : mbbase.h Content : basic funtion Author : mubin Date : 2004-06-03*/#include "mbbase.h"void MbDoNothing(void){}void MbAssert(char *FileName, int LineNo){ fflush(stdout); fprintf(stderr, "Assertion failed: %s,line %d\n", FileName, LineNo); fflush(stderr); abort();}void MbDeb(char *FileName, int LineNo, char *str, ...){ va_list vargs; va_start(vargs, str ); fflush(stdout); printf("***GPRS Communication!!*****DEBUG: (%s %d)", FileName,LineNo); vprintf(str, vargs); printf("\n"); fflush(stdout); va_end(vargs); return;}void MbPrt(char *FileName, int LineNo, char *str, ...){ va_list vargs; va_start(vargs, str); fflush(stdout); printf("\n####INFOR: (%s %d)", FileName, LineNo); vprintf(str, vargs); printf("\n"); fflush(stdout); va_end(vargs); return;}void MbErr(char *FileName, int LineNo, char *str, ...){ va_list vargs; va_start(vargs, str ); fflush(stdout); printf("\n!!!!!!!!ERROR: (%s %d)", FileName, LineNo); vprintf(str, vargs); printf("\n"); fflush(stdout); va_end(vargs); return;}void MbSysErr(char *FileName, int LineNo, int ErrNo , char *str,...){ va_list vargs; va_start(vargs, str ); fflush(stdout); printf("\n!!!!!!!!SYSTEM ERROR (%s) : (%s %d)", \ strerror(ErrNo), FileName, LineNo); vprintf(str, vargs); printf("\n"); fflush(stdout); va_end(vargs); return;}void MbDump(unsigned char *data, int count){ int i; for (i = 0; i < count; i++){ printf("0x%02X", data[i]); if (((i + 1) % 0x10) == 0){ printf("\n"); }else{ printf(" "); } } printf("\n");}void MbDumpStr(char *data, int count){ char *tmp_data; tmp_data = (char*)malloc( sizeof(char) * (count+1)); memcpy(tmp_data, data, count); tmp_data[count] = '\0'; printf("%s\n", tmp_data); free(tmp_data); return;}int MbGetSeqNo(char *FileName){ FILE *f; int i, c1,c2,c3, SeqNoTemp; static int SeqNo[SEQ_CACHE]; static int arrIndex =SEQ_CACHE; MB_ASSERT(FileName != NULL); if(arrIndex == SEQ_CACHE){ arrIndex = 0; f = fopen(FileName, "rt"); if(f != NULL){ c1 = fgetc(f); c2 = fgetc(f); c3 = fgetc(f); SeqNoTemp = ((c1*256)+c2)*256 + c3; fclose(f); }else{ SeqNoTemp = 1; } for(i=0;i<SEQ_CACHE; i++){ if (SeqNoTemp > SEQ_MAX) SeqNoTemp = 1; SeqNo[arrIndex+i] = SeqNoTemp++; } f = fopen(FileName, "wt"); if(SeqNoTemp > SEQ_MAX) SeqNoTemp = 1; c1 = SeqNoTemp/(256*256); c2 = SeqNoTemp/256; c3 = SeqNoTemp % 256; fputc(c1, f); fputc(c2, f); fputc(c3, f); fclose(f); return SeqNo[arrIndex++]; }else{ return SeqNo[arrIndex++]; }}int MbGetInvoiceNo(char *FileName){ FILE *f; int i, c1,c2,c3, SeqNoTemp; static int SeqNo[INVOICE_CACHE]; static int arrIndex =INVOICE_CACHE; MB_ASSERT(FileName != NULL); if(arrIndex == INVOICE_CACHE){ arrIndex = 0; f = fopen(FileName, "rt"); if(f != NULL){ c1 = fgetc(f); c2 = fgetc(f); c3 = fgetc(f); SeqNoTemp = ((c1*256)+c2)*256 + c3; fclose(f); }else{ SeqNoTemp = 1; } for(i=0;i < INVOICE_CACHE; i++){ if (SeqNoTemp > INVOICE_MAX) SeqNoTemp = 1; SeqNo[arrIndex+i] = SeqNoTemp++; } f = fopen(FileName, "wt"); if(SeqNoTemp > INVOICE_MAX) SeqNoTemp = 1; c1 = SeqNoTemp/(256*256); c2 = SeqNoTemp/256; c3 = SeqNoTemp % 256; fputc(c1, f); fputc(c2, f); fputc(c3, f); fclose(f); return SeqNo[arrIndex++]; }else{ return SeqNo[arrIndex++]; }}void MbLocalTime(time_t *t, struct tm *tm){ MB_ASSERT( t != NULL && tm != NULL ); #ifdef _REENTRANT localtime_r(t, tm); #else memcpy(tm, localtime(t), sizeof(struct tm)); #endif}void MbToday(char *s){ time_t t; struct tm tm; MB_ASSERT( s != NULL ); t = time(NULL); MbLocalTime(&t, &tm); sprintf(s, "%4d%02d%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);}static void AmtCat(char *AmtStr, char *s, size_t len, size_t *CurLen, size_t MaxLen){ if( MaxLen % 2 != 0 ) MaxLen--; if( *CurLen == MaxLen ) return; if( len + *CurLen > MaxLen ){ memcpy(AmtStr + *CurLen, s, MaxLen - *CurLen); *CurLen = MaxLen; } else{ memcpy(AmtStr + *CurLen, s, len); *CurLen += len; }}void MbCapAmt(double amt, char *AmtStr, int MaxLen){ static char *text1 = "壹贰叁肆伍陆柒捌玖"; static char *text2 = "拾万仟佰拾亿仟佰拾万仟佰拾元"; char TmpStr[100]; int i, j, flag; size_t CurLen; MB_ASSERT( amt >= 0 && amt < 1e15 && AmtStr != NULL && MaxLen > 0 ); memset(AmtStr, ' ', MaxLen); AmtStr[MaxLen] = MB_EOS; CurLen = 0; sprintf(TmpStr, "%017.2f", amt); if( memcmp(TmpStr, "00000000000000.00", 17) == 0 ){ AmtCat(AmtStr, "零元整", 6, &CurLen, MaxLen); return; } if( memcmp(TmpStr, "00000000000000", 14) != 0 ){ for(j = 0, flag = 1, i = 0; i < 14; i++){ if( flag == 1 && TmpStr[i] == '0' ) continue; flag = 0; if( TmpStr[i] != '0' ){ if( j > 0 ){ AmtCat(AmtStr, "零", 2, &CurLen, MaxLen); j = 0; } AmtCat(AmtStr, text1 + ( TmpStr[i] - '1' ) * 2, 2, &CurLen, MaxLen); AmtCat(AmtStr, text2 + i * 2, 2, &CurLen, MaxLen); } else{ if( i == 1 || i == 5 || i == 13 || ( i == 9 && j < 3 ) ) AmtCat(AmtStr, text2 + i * 2, 2, &CurLen, MaxLen); j++; } } } i = 15; if( TmpStr[i] != '0' ){ AmtCat(AmtStr, text1 + ( TmpStr[i] - '1') * 2, 2, &CurLen, MaxLen); AmtCat(AmtStr, "角", 2, &CurLen, MaxLen); } i++; if( TmpStr[i] != '0' ){ AmtCat(AmtStr, text1 + ( TmpStr[i] - '1' ) * 2, 2, &CurLen, MaxLen); AmtCat(AmtStr, "分", 2, &CurLen, MaxLen); } else AmtCat(AmtStr, "整", 2, &CurLen, MaxLen);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -