//#ifdef OS_WINDOWS #ifdef _WIN32 #include #include #include #else #include #include #include #endif /*#else #endif*/ #include #include #include #include #include "basefunc.h" #include extern char IniFilePath[256]; void DebugPrint(char *szDebug) { //#ifdef OS_WINDOWS #ifdef _WIN32 OutputDebugString((WCHAR*)szDebug); OutputDebugString((WCHAR*)"\n"); #else printf("%s\n", szDebug); #endif } int CmpString(const u_char *str1, const u_char *str2) { size_t i, len; len = strlen((const char*)str1); if(len != strlen((const char*)str2)) { return 0; } for (i = 0; i < len; i++) { if(toupper(str1[i]) != toupper(str2[i])) { return 0; } } return 1; } int CmpString2(const char *str1, const char *str2) { size_t i, len; len = strlen(str1); if(len != strlen(str2)) { return 0; } for (i = 0; i < len; i++) { if(toupper(str1[i]) != toupper(str2[i])) { return 0; } } return 1; } #ifdef OS_UNIX char *strupr(char *str) { char *ptr = str; while (*ptr != '\0') { if (islower(*ptr)) *ptr = toupper(*ptr); ptr++; } return str; } #endif BOOL IsRemarkLine(const char *str) { int i, iLen; BOOL bRetVal; bRetVal = FALSE; iLen = strlen(str); for(i=0; i sizeof(buf)) return FALSE; if( IsNetSequence() ) { for( i=0; i sizeof(buf)) { return FALSE; } if(IsNetSequence() == FALSE) { for( i=0; iYear = tmptr->tm_year + 1900; ptrDateTime->Month = tmptr->tm_mon + 1; ptrDateTime->Day = tmptr->tm_mday; ptrDateTime->Hour = tmptr->tm_hour; ptrDateTime->Min = tmptr->tm_min; ptrDateTime->Sec = tmptr->tm_sec; ptrDateTime->mSec = msec; ptrDateTime->WeekDay = tmptr->tm_wday; ptrDateTime->MonthDay = tmptr->tm_mday; return TRUE; } //******************************************************************** //* 设置系统时间函数 * //*参数: DAY_TIME : 时间缓冲区 * //*返回值:BOOL retval : 是否成功 * //******************************************************************** //BOOL SetLocalTimeEx(DAY_TIME *ptrDateTime) void SetLocalTimeEx(DAY_TIME *ptrDateTime) { #ifdef _WIN32 SYSTEMTIME systime; BOOL bRetVal; systime.wYear = ptrDateTime->Year; systime.wMonth = ptrDateTime->Month; //systime.wDayOfWeek = ptrDateTime->wDayOfWeek; systime.wDay = ptrDateTime->Day; systime.wHour = ptrDateTime->Hour; systime.wMinute = ptrDateTime->Min; systime.wSecond = ptrDateTime->Sec; systime.wMilliseconds = ptrDateTime->mSec; bRetVal = SetLocalTime(&systime); //if(!bRetVal) return FALSE; //else return TRUE; #else //int ret; //pid_t pid; //char szCmdLine[256]; //sprintf(szCmdLine, "date %02d%02d%02d%02d%04d.%02d", // ptrDateTime->Month, // ptrDateTime->Day, // ptrDateTime->Hour, // ptrDateTime->Min, // ptrDateTime->Year, // ptrDateTime->Sec); //pid = vfork(); //if(pid == 0) //{ // ret = system (szCmdLine); //执行date命令设置时间 // exit(0); // //return exit(0); // //if(ret == 0) // //return TRUE; // //else // // return FALSE; //} ////else return TRUE; struct tm tm_st; time_t tm_t; tm_st.tm_year = ptrDateTime->Year - 1900; tm_st.tm_mon = ptrDateTime->Month - 1; tm_st.tm_mday = ptrDateTime->Day; tm_st.tm_hour = ptrDateTime->Hour; tm_st.tm_min = ptrDateTime->Min; tm_st.tm_sec = ptrDateTime->Sec; //printf("TIP_(%04d): %02d/%02d/%04d_%02d:%02d:%02d.\n", // getpid(), tm_st.tm_mon+1, tm_st.tm_mday, tm_st.tm_year+1900, // tm_st.tm_hour, tm_st.tm_min, tm_st.tm_sec); tm_t = mktime(&tm_st); if(tm_t > 0) { stime(&tm_t); //printf("TIP_(%04d): set time is ok.\n", getpid()); } #endif } _int64 SystemTimeToMillseconds(DAY_TIME *lpTime, int i8HourOffset) { _int64 iMilliseconds; time_t iTime; struct tm changetm; //struct tm *testtm; iMilliseconds=0; changetm.tm_hour = lpTime->Hour; changetm.tm_mday = lpTime->Day; changetm.tm_min = lpTime->Min; changetm.tm_mon = lpTime->Month - 1; changetm.tm_sec = lpTime->Sec; changetm.tm_year = lpTime->Year - 1900; changetm.tm_isdst = -1; iTime = mktime(&changetm); //testtm = localtime( &iTime ); if(iTime == (time_t)-1) return 0; iMilliseconds = iTime - i8HourOffset * 3600 * 8; iMilliseconds = iMilliseconds*1000 + lpTime->mSec; return iMilliseconds; } void LogRunRecord(char *pstrLogMsg, char *pstrfilename) { int ilen; DAY_TIME sCurtime; char szFileName[256]; #ifdef _WIN32 FILE *fp; GetLocalTimeEx(&sCurtime); //getcwd(szFileName, sizeof(szFileName)-16); if(pstrfilename == NULL) { sprintf(szFileName, "%s/%04d%02d%02d.log", IniFilePath, sCurtime.Year, sCurtime.Month, sCurtime.Day); } else { ilen = strlen(pstrfilename); if((ilen < 3) || (ilen >= (sizeof(szFileName)-1))) { sprintf(szFileName, "%s/%04d%02d%02d.log", IniFilePath, sCurtime.Year, sCurtime.Month, sCurtime.Day); } else { strcpy(szFileName, pstrfilename); } } fp = fopen(szFileName, "ab"); if(fp != NULL) { fwrite(pstrLogMsg, sizeof(char), strlen(pstrLogMsg)+1, fp); fclose(fp); } #else int fp; GetLocalTimeEx(&sCurtime); if(pstrfilename == NULL) { sprintf(szFileName, "/log/%04d%02d%02d.log", IniFilePath, sCurtime.Year, sCurtime.Month, sCurtime.Day); } else { ilen = strlen(pstrfilename); if((ilen < 3) || (ilen >= (sizeof(szFileName)-1))) { sprintf(szFileName, "/log/%04d%02d%02d.log", IniFilePath, sCurtime.Year, sCurtime.Month, sCurtime.Day); } else { strcpy(szFileName, pstrfilename); } } fp = open(szFileName, O_CREAT|O_RDWR|O_APPEND); if(fp < 0) { printf("TIP_(%04d): open %s is Failed.\n", getpid(), szFileName); } else { ilen = strlen(pstrLogMsg); write(fp, pstrLogMsg, ilen); close(fp); } #endif } BOOL CheckTcpIpAddr(char *addr) { int d; char *ptr; if(strlen(addr) < 7) return FALSE; if(strlen(addr) > 20) return FALSE; d = atoi(addr); if((d < 0) || (d > 255)) { return FALSE; } ptr = strstr(addr, "."); if(ptr == NULL) { return FALSE; } ptr++; d = atoi(ptr); if((d < 0) || (d > 255)) { return FALSE; } ptr = strstr(ptr, "."); if(ptr == NULL) { return FALSE; } ptr++; d = atoi(ptr); if((d < 0) || (d > 255)) { return FALSE; } ptr = strstr(ptr, "."); if(ptr == NULL) { return FALSE; } ptr++; d = atoi(ptr); if((d < 0) || (d > 255)) { return FALSE; } return TRUE; } WORD CalCheckout(u_char *buf, int len) { int i; WORD sum; sum = 0; for(i = 0; i < len; i++) { sum += buf[i]; } return sum; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // wen 2005.10.19 增加基本函数 int IsHexChar(u_char c) { if((c >= '0') && (c <= '9')) return 1; if((c >= 'A') && (c <= 'F')) return 1; if((c >= 'a') && (c <= 'f')) return 1; return 0; } int HexToDec(u_char c) { if((c >= '0') && (c <= '9')) return (c - '0'); if((c >= 'A') && (c <= 'F')) return (c - 'A' + 10); if((c >= 'a') && (c <= 'f')) return (c - 'a' + 10); return 0; } u_long atoul(char *buf) { int j, len; u_long val; char szbuf[256]; if(!buf) return 0; if(strlen(buf) == 0) return 0; if(buf[0] != '-') strcpy(szbuf, buf); else strcpy(szbuf, &buf[1]); val = 0; len = strlen(szbuf); if((szbuf[0] == '0') && ((szbuf[1] == 'x')||(szbuf[1]=='X'))) { for(j = 2; j < len; j++) { if(IsHexChar(szbuf[j]) == 0) break; val = val * 16 + HexToDec(szbuf[j]); } } else { for(j = 0; j < len; j++) { if((szbuf[j] < '0') || (szbuf[j] > '9')) break; val = val*10 + (szbuf[j] - '0'); } } return val; } /* ! \brief 删除字符串中的空格、制表符以及注释符 \param str[in/out] -- 要删除的字符串指针 \返回值 retval-- 处理后的字符串长度 */ int StringCutSpace(char *str) { int i, j, flag, len; char *ptr; if(!str) return 0; len = (int)strlen(str); if(len == 0) return 0; j = 0; flag = 0; for(i = 0; i < len; i++) { // 在双引号" "中的字符串不进行去空格和制表符的处理 if(str[i] == '\"') { flag = flag ? 0 : 1; continue; } if(flag == 0) { if((str[i] == ' ') || (str[i] == '\t')) continue; } str[j++] = str[i]; } str[j] = 0; ptr = strstr(str, "//"); if(ptr != NULL) *ptr = 0x00; ptr = strstr(str, "/*"); if(ptr != NULL) *ptr = 0x00; ptr = strstr(str, "\n"); if(ptr != NULL) *ptr = 0x00; ptr = strstr(str, "\r"); if(ptr != NULL) *ptr = 0x00; ptr = strstr(str, "#"); if(ptr != NULL) *ptr = 0x00; return strlen(str); } void StringToUpper(char *buf) { int i, len; if(!buf) return; len = strlen(buf); for(i = 0; i < len; i++) { //buf[i] = toupper(buf[i]); if((buf[i] >= 'a') && (buf[i] <= 'z')) { buf[i] -= 32; } } //printf("wen: Upperchar=%s\n", buf); } void StringToLower(char *buf) { int i, len; if(!buf) return; len = strlen(buf); for(i = 0; i < len; i++) { //buf[i] = tolower(buf[i]); if((buf[i] >= 'A') && (buf[i] <= 'Z')) { buf[i] += 32; } } //printf("wen: Lowerchar=%s\n", buf); } void PrintFormatMessage(int iMsgClass, char *ptrMsg) { /* int ilen; char szMsg[256]; if(ptrMsg == NULL) { return; } ilen = strlen(ptrMsg); if(ilen > 200) { ptrMsg[200] = 0; } switch(iMsgClass) { // !输出信息级别为警告信息 case MSG_CLASS_WARN: sprintf(szMsg, "WARN(%04d): %s\n", getpid(), ptrMsg); break; /* !输出信息级别为错误信息 case MSG_CLASS_ERROR: sprintf(szMsg, "ERR_(%04d): %s\n", getpid(), ptrMsg); break; /* !输出信息级别为提示信息 case MSG_CLASS_TIP: default: sprintf(szMsg, "TIP_(%04d): %s\n", getpid(), ptrMsg); break; } #ifdef OS_WINDOWS OutputDebugString(szMsg); #else printf("%s", szMsg); #endif*/ } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 超时判断 BOOL JudgeTimeOut(DAY_TIME *pStartTime, int iTimeOutSeconds) { int iDays, iVal1, iVal2; int iAllSeconds; DAY_TIME sCurTime; GetLocalTimeEx(&sCurTime); iDays = sCurTime.Day - pStartTime->Day; if((iDays < 0) || abs(iDays) > 1) { return TRUE; } iVal1 = sCurTime.Hour*3600 + sCurTime.Min*60 + sCurTime.Sec; iVal2 = pStartTime->Hour*3600 + pStartTime->Min*60 + pStartTime->Sec; iAllSeconds = iVal1 - iVal2; if(iAllSeconds < 0) { iAllSeconds += 24*3600; } if(iAllSeconds < iTimeOutSeconds) { return FALSE; } return TRUE; } // CRC校验表计算函数 void CalcCRCTableEx(WORD *pwCrcTable, WORD wDivisor) { int i, j, k; WORD ench; for ( i = 0; i < 256; i++ ) { ench = 0; for(k=0; k<8; k++) { if(i & (0x01<>k); } for ( j = 0; j < 8; j++ ) { if ( (ench & 0x8000) != 0 ) { ench = ench << 1; ench = ench ^ wDivisor; } else { ench = ench << 1; } } pwCrcTable[i]=0; for(k=0; k<16; k++) { if(ench & (0x0001<>k); } } } // 计算校验和 BYTE CalcAllDataLpc(BYTE *pData, int iLen) { int i; BYTE retval; retval = pData[0]; for(i=1; i