/* ** ** function.c ** ** Functions for data conversion, tools. ** */ #include "../include/includes.h" void SafeFree(void *pmem) { if (pmem != NULL) free(pmem); } /* ** Exchange between a and b */ void Exchange(long a, long b) { long c; c = a; a = b; b = c; } int ByteLength(BYTE *bcd, int c) { int length=0; while (*bcd++ != c) { length ++; // if(length>64) break; } return length+1; } /* ** Fill string 'c' into last area of 'str'. */ /* void StringCat(char *str, char *c, int slen) { if (strlen(str) >= slen) return; while (strlen(str) < slen) strcat(str, c); str[slen] = 0; } */ /* ** Cut string while match character c. */ void StringCut(char *str, int c) { if (toupper(*str) == toupper(c)) *str=0; while (str && *str++) if (toupper(*str) == toupper(c)) { *str = 0; break; } } /* void Bstr2Hstr(char *cptr) { char s[] = ""; unsigned int i, j = 0; while (cptr && *cptr && strchr("01", *cptr)) { i = *cptr++ - '0'; j <<= 1; j |= (i & 0x01); } sprintf(s, "%x", j); cptr = (char *) s; } void bitstring(char *str, long byze, int biz, int strwid) { int i, j; j = strwid - (biz + (biz >> 2)- (biz % 4 ? 0 : 1)); for (i = 0; i < j; i++) *str++ = ' '; while (--biz >= 0) { *str++ = ((byze >> biz) & 1) + '0'; // // if (!(biz % 4) && biz) // *str++ = ' '; // } *str = '\0'; } */ /* ** Binary string convert to int. */ /* unsigned int Bstr2Int(char *cptr) { unsigned int i, j = 0; while (cptr && *cptr && strchr("01", *cptr)) { i = *cptr++ - '0'; j <<= 1; j |= (i & 0x01); } return(j); } */ /* void AsciiToBcd (BYTE *bcd_buf, const char *ascii_buf, int len) { int i; char ch; for (i=0; i='a') ch -= 'a' - 10; else if (ch>='A') ch -= 'A' - 10; else ch -= '0'; if (i & 1) *(bcd_buf++) |= ch & 0x0f; else *bcd_buf = ch << 4; } } */ /* Convert data from left-aligned compact BCD form to ASCII form. */ /* void BcdToAscii (char *ascii_buf, const BYTE *bcd_buf, int len) { int i; char ch; for (i=0; i> 4; ascii_buf[i] = ch + ((ch > 9)? 'A'-10 : '0'); } ascii_buf[i] = '\0'; } */ /* Convert data from ASCII form to right-aligned compact BCD form. */ /* void AsciiToRbcd (BYTE *bcd_buf, const char *ascii_buf, int len) { int i; char ch; if (len > 0) memset(bcd_buf ,0,len/2); for (i=0; i='a') ch -= 'a' - 10; else if (ch>='A') ch -= 'A' - 10; else ch -= '0'; if ((len - i) & 1) *(bcd_buf++) |= ch & 0x0f; else *bcd_buf = ch << 4; } } */ /* Convert data from right-aligned compact BCD form to ASCII form. */ /* void RbcdToAscii (char *ascii_buf, const BYTE *bcd_buf, int len) { int i; char ch; for (i=0; i> 4; ascii_buf[i] = ch + ((ch > 9)? 'A'-10 : '0'); } ascii_buf[i] = '\0'; } */ /* Convert number to compact BCD, the number must in the range from 0 to 99. */ /* BYTE IntToBcd (int n) { return ((n / 10) << 4) | (n % 10); } */ /* Convert number from compact BCD. */ /* int BcdToInt (BYTE n) { return (n >> 4) * 10 + (n & 0x0f); } */ /* Copy charaters, then append a null character to array pointed by dst. */ /* void CopyToString (char *dst, const char *src, int len) { if (len) memcpy(dst, src, len); dst[len] = '\0'; } */ char * FormatOutput(char *sp, size_t size, int len, int c) { char buf[1024]; int i, j=0; strcpy(buf, sp); for(i=0; i='a') ch -= 'a' - 10; else if (ch>='A') ch -= 'A' - 10; else ch -= '0'; if(i%2==0) { *bcd_buf = ch & 0x0f; ; } else { *(bcd_buf) |= ((ch&0x0f) <<4 ) ; bcd_buf ++; } } } /* Convert data from right-aligned compact BCD form to ASCII form. */ void ppsBcdToAsciiR (char *ascii_buf, const BYTE *bcd_buf, int len) { int i; char ch; for (i=0; i 9)? 'A'-10 : '0'); ch = bcd_buf[i]>> 4; ascii_buf[i*2+1] = ch + ((ch > 9)? 'A'-10 : '0'); } ascii_buf[len] = '\0'; } int AsciiToMsisdn(char *charin, u_char *msgout, int len) { u_char tmpbuf[64]; char msgin[64]; int msglen; if(len>18) return 0; memcpy(msgin,charin,len); msglen = len; if(len%2!=0){ msgin[len] = 'f'; msgin[len+1] = 0x00; msglen = len+1; } ppsAsciiToBcdR(tmpbuf,msgin,msglen); msgout[0] = msglen/2; msgout[1] = 0x91; if(tmpbuf[0] !=0x19 && tmpbuf[0] != 0x18) { msgout[0] ++; memcpy(msgout+2,tmpbuf,msglen/2); } else { memcpy(msgout+2,tmpbuf+1,msglen/2); } return 1; } void GetVersionID(char *cversion, BYTE *version) { int i,start,len,index; char buf[3][32]={"","",""}; start = 0,index = 0; len = strlen(cversion); for(i=0;i