#include "math.h" #include "my_font.h" #include "my_string.h" static void reverse(char *str, int n) { int p = 0, q = n-1; char t; while (p < q) { t = str[p]; str[p] = str[q]; str[q] = t; p++; q--; } } void TMyString::Clear(void) { Text[0] = '\0'; Text[1] = '\0'; Text[2] = '\0'; } int TMyString::Insert(const char *source, int Pst) { //dMYSTRING_LENGTH int i,x; unsigned int ilen, len; int sp; const char *aP = source; x = GetEndPst(); if(x <= Pst){ AddOnStr(source); sp = GetEndPst(); return sp; } for(i=0; i0){ e = d % 10; TmpChar[i] = e + '0'; i++; d /= 10; } if(sig){ d = i; while(i>0){ Text[d-i] = TmpChar[i-1]; i--; } Text[d] = 0; }else{ d = i; while(i>0){ Text[d-i+1] = TmpChar[i-1]; i--; } Text[0] = '-'; Text[d+1] = 0; } } } void TMyString::FromUInt(unsigned int data) { unsigned int i; unsigned int sig; unsigned int d,e; for(i=0;i<32;i++)TmpChar[i] = 0; if(data < 0){ sig = 0; d = (unsigned int)(0 - data); }else{ sig = 1; d = (unsigned int)data; } if(d == 0){ Text[0] = '0'; Text[1] = 0; }else{ i = 0; while(d>0){ e = d % 10; TmpChar[i] = e + '0'; i++; d /= 10; } if(sig){ d = i; while(i>0){ Text[d-i] = TmpChar[i-1]; i--; } Text[d] = 0; }else{ d = i; while(i>0){ Text[d-i+1] = TmpChar[i-1]; i--; } Text[0] = '-'; Text[d+1] = 0; } } } void TMyString::sFromUInt(unsigned int data, unsigned char *Text) { unsigned int i; unsigned int sig; unsigned int d,e; char aTmpChar[32]; for(i=0;i<32;i++)aTmpChar[i] = 0; sig = 1; d = data; if(d == 0){ Text[0] = '0'; Text[1] = 0; }else{ i = 0; while(d>0){ e = d % 10; aTmpChar[i] = e + '0'; i++; d /= 10; } if(sig){ d = i; e = i; while(i>0){ Text[e-i] = aTmpChar[i-1]; i--; } Text[d] = 0; } } } void TMyString::FromUInt4Dg(unsigned int data) { unsigned int d,e; d = data/1000; e = d % 10; Text[0] = e + '0'; d = data/100; e = d % 10; Text[1] = e + '0'; d = data/10; e = d % 10; Text[2] = e + '0'; e = data % 10; Text[3] = e + '0'; Text[4] = 0; } void TMyString::FromUInt6Dg(unsigned int data) { unsigned int d,e; d = data/100000; e = d % 10; Text[0] = e + '0'; d = data/10000; e = d % 10; Text[1] = e + '0'; d = data/1000; e = d % 10; Text[2] = e + '0'; d = data/100; e = d % 10; Text[3] = e + '0'; d = data/10; e = d % 10; Text[4] = e + '0'; e = data % 10; Text[5] = e + '0'; Text[6] = 0; } void TMyString::FromUInt8Dg(unsigned int data) { unsigned int d,e; d = data/10000000; e = d % 10; Text[0] = e + '0'; d = data/1000000; e = d % 10; Text[1] = e + '0'; d = data/100000; e = d % 10; Text[2] = e + '0'; d = data/10000; e = d % 10; Text[3] = e + '0'; d = data/1000; e = d % 10; Text[4] = e + '0'; d = data/100; e = d % 10; Text[5] = e + '0'; d = data/10; e = d % 10; Text[6] = e + '0'; e = data % 10; Text[7] = e + '0'; Text[8] = 0; } void TMyString::AddOnDgMax6(unsigned int data) { unsigned int d,e,i,pst, IsFound; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 8))return; IsFound = 0; d = data/100000; e = d % 10; if(e>0){ Text[pst] = e + '0'; pst++; IsFound = 1; } d = data/10000; e = d % 10; if((e>0)||(IsFound)){ Text[pst] = e + '0'; pst++; IsFound = 1; } d = data/1000; e = d % 10; if((e>0)||(IsFound)){ Text[pst] = e + '0'; pst++; IsFound = 1; } d = data/100; e = d % 10; if((e>0)||(IsFound)){ Text[pst] = e + '0'; pst++; IsFound = 1; } d = data/10; e = d % 10; if((e>0)||(IsFound)){ Text[pst] = e + '0'; pst++; IsFound = 1; } e = data % 10; Text[pst++] = e + '0'; Text[pst++] = 0; Text[pst++] = 0; } void TMyString::AddOn8Dg(unsigned int data) { unsigned int d,e,i,pst; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 10))return; d = data/10000000; e = d % 10; Text[pst] = e + '0'; d = data/1000000; e = d % 10; Text[pst+1] = e + '0'; d = data/100000; e = d % 10; Text[pst+2] = e + '0'; d = data/10000; e = d % 10; Text[pst+3] = e + '0'; d = data/1000; e = d % 10; Text[pst+4] = e + '0'; d = data/100; e = d % 10; Text[pst+5] = e + '0'; d = data/10; e = d % 10; Text[pst+6] = e + '0'; e = data % 10; Text[pst+7] = e + '0'; Text[pst+8] = 0; } void TMyString::AddOn6Dg(unsigned int data) { unsigned int d,e,i,pst; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 8))return; d = data/100000; e = d % 10; Text[pst] = e + '0'; d = data/10000; e = d % 10; Text[pst+1] = e + '0'; d = data/1000; e = d % 10; Text[pst+2] = e + '0'; d = data/100; e = d % 10; Text[pst+3] = e + '0'; d = data/10; e = d % 10; Text[pst+4] = e + '0'; e = data % 10; Text[pst+5] = e + '0'; Text[pst+6] = 0; } void TMyString::AddOn4Dg(unsigned int data) { unsigned int d,e,i,pst; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 6))return; d = data/1000; e = d % 10; Text[pst] = e + '0'; d = data/100; e = d % 10; Text[pst+1] = e + '0'; d = data/10; e = d % 10; Text[pst+2] = e + '0'; e = data % 10; Text[pst+3] = e + '0'; Text[pst+4] = 0; } void TMyString::FromUInt3Dg(unsigned int data) { unsigned int i; unsigned int d,e; d = data/100; e = d % 10; Text[0] = e + '0'; d = data/10; e = d % 10; Text[1] = e + '0'; e = data % 10; Text[2] = e + '0'; Text[3] = 0; Text[4] = 0; } void TMyString::AddOn3Dg(unsigned int data) { unsigned int i,pst; unsigned int d,e; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 5))return; d = data/100; e = d % 10; Text[pst] = e + '0'; d = data/10; e = d % 10; Text[pst+1] = e + '0'; e = data % 10; Text[pst+2] = e + '0'; Text[pst+3] = 0; Text[pst+4] = 0; } void TMyString::FromUInt2Dg(unsigned int data) { unsigned int i; unsigned int d,e; d = data/10; Text[0] = d + '0'; e = data % 10; Text[1] = e + '0'; Text[2] = 0; Text[3] = 0; } void TMyString::AddOn2Dg(unsigned int data) { unsigned int i,pst; unsigned int d,e; pst = GetEndPst() +1; if(pst > (dMYSTRING_LENGTH - 4))return; d = data/10; Text[pst] = d + '0'; e = data % 10; Text[pst+1] = e + '0'; Text[pst+2] = 0; Text[pst+3] = 0; } void TMyString::FormFloat(float fd) { //unsigned int ava_bit = 0; float f = fd; unsigned int sig; signed int i = 0; signed int n = (int)f; if(f < 0){ sig = 0; f *= -1; }else{ sig = 1; } n = (unsigned int)f; f -= n; i = 0; do{ Text[i++] = n % 10 + '0'; n /= 10; }while(n > 0); if(0 == sig) Text[i++] = '-'; reverse(Text , i); Text[i++] = '.'; n = 0; do{ int t = (int)(f * 10); Text[i++] = t + '0'; f = f * 10 - t; n++; }while(f > 0 && n < 9); Text[i] = '\0'; } int TMyString::ToInteger(void) { signed int Result; unsigned int i; unsigned int sig; if(Text[0] == '-'){ sig = 0; i = 1; }else{ sig = 1; i = 0; } Result = 0; while(1){ if(Text[i] < '0' || Text[i] > '9'){ if(Text[i] == 0) break; Result = 0; break; }else{ Result *= 10; Result += Text[i] - '0'; } i++; } if(sig == 0) Result = 0 - Result; return Result; } float TMyString::ToFloat(void) { float Result; float f; unsigned int i; unsigned int sig; unsigned int dot_found = 0; signed int Decimal_counts = 0; unsigned int valid_char_counts = 0; if(Text[0] == '-'){ sig = 0; i = 1; }else{ sig = 1; i = 0; } Result = 0; dot_found = 0; Decimal_counts = 0; while(1){ if((Text[i] < '0' || Text[i] > '9') && (Text[i] != '.')){ if(Text[i] != 0){ Result = 0; break; }else{ break; } }else{ if(Text[i] == '.'){ dot_found++; }else{ if(Text[i] == '0'){ if(valid_char_counts)valid_char_counts++; }else{ valid_char_counts++; } if(dot_found == 0){ Result *= 10; Result += Text[i] - '0'; }else if(dot_found == 1){ Decimal_counts -=1; if(valid_char_counts > 12)break; // f = (Text[i] - '0') * pow(10,Decimal_counts); Result += f; }else{ // error '0.0.' more then one dot found Result = 0; break; } } } i++; } if(sig == 0) Result *= -1; return Result; } //Static function----------------> void TMyString::sFromStr(char *source, char *dest) { unsigned int i; unsigned int len; len = dMYSTRING_LENGTH -1; for(i=0; i= 32)break; dest[i]=source[d]; if(source[d] == 0)break; d++; s++; } dest[i] = '\0'; } void TMyString::sAddOnStrL32(char *source, char *dest) { unsigned int s; unsigned int i; unsigned int d=0; int len = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)len++; else break; } s = 0; for(i=len; i<(dMYSTRING_LENGTH-1); i++){ if(s >= 32)break; dest[i]=source[d]; if(source[d] == 0)break; d++; s++; } dest[i] = '\0'; } void TMyString::sAddOnDgMax6(unsigned int data, char *dest) { unsigned int d,e,i,pst, IsFound; pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 8))return; IsFound = 0; d = data/100000; e = d % 10; if(e>0){ dest[pst] = e + '0'; pst++; IsFound = 1; } d = data/10000; e = d % 10; if((e>0)||(IsFound)){ dest[pst] = e + '0'; pst++; IsFound = 1; } d = data/1000; e = d % 10; if((e>0)||(IsFound)){ dest[pst] = e + '0'; pst++; IsFound = 1; } d = data/100; e = d % 10; if((e>0)||(IsFound)){ dest[pst] = e + '0'; pst++; IsFound = 1; } d = data/10; e = d % 10; if((e>0)||(IsFound)){ dest[pst] = e + '0'; pst++; IsFound = 1; } e = data % 10; dest[pst++] = e + '0'; dest[pst++] = 0; dest[pst++] = 0; } void TMyString::sAddOn8Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 10))return; d = data/10000000; e = d % 10; dest[pst] = e + '0'; d = data/1000000; e = d % 10; dest[pst+1] = e + '0'; d = data/100000; e = d % 10; dest[pst+2] = e + '0'; d = data/10000; e = d % 10; dest[pst+3] = e + '0'; d = data/1000; e = d % 10; dest[pst+4] = e + '0'; d = data/100; e = d % 10; dest[pst+5] = e + '0'; d = data/10; e = d % 10; dest[pst+6] = e + '0'; e = data % 10; dest[pst+7] = e + '0'; dest[pst+8] = 0; } void TMyString::sAddOn7Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 9))return; d = data/1000000; e = d % 10; dest[pst] = e + '0'; d = data/100000; e = d % 10; dest[pst+1] = e + '0'; d = data/10000; e = d % 10; dest[pst+2] = e + '0'; d = data/1000; e = d % 10; dest[pst+3] = e + '0'; d = data/100; e = d % 10; dest[pst+4] = e + '0'; d = data/10; e = d % 10; dest[pst+5] = e + '0'; e = data % 10; dest[pst+6] = e + '0'; dest[pst+7] = 0; } void TMyString::sAddOn6Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 8))return; d = data/100000; e = d % 10; dest[pst] = e + '0'; d = data/10000; e = d % 10; dest[pst+1] = e + '0'; d = data/1000; e = d % 10; dest[pst+2] = e + '0'; d = data/100; e = d % 10; dest[pst+3] = e + '0'; d = data/10; e = d % 10; dest[pst+4] = e + '0'; e = data % 10; dest[pst+5] = e + '0'; dest[pst+6] = 0; } void TMyString::sAddOn5Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 7))return; d = data/10000; e = d % 10; dest[pst] = e + '0'; d = data/1000; e = d % 10; dest[pst+1] = e + '0'; d = data/100; e = d % 10; dest[pst+2] = e + '0'; d = data/10; e = d % 10; dest[pst+3] = e + '0'; e = data % 10; dest[pst+4] = e + '0'; dest[pst+5] = 0; } void TMyString::sAddOn4Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 7))return; d = data/1000; e = d % 10; dest[pst] = e + '0'; d = data/100; e = d % 10; dest[pst+1] = e + '0'; d = data/10; e = d % 10; dest[pst+2] = e + '0'; e = data % 10; dest[pst+3] = e + '0'; dest[pst+4] = 0; } void TMyString::sAddOn3Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 5))return; d = data/100; e = d % 10; dest[pst] = e + '0'; d = data/10; e = d % 10; dest[pst+1] = e + '0'; e = data % 10; dest[pst+2] = e + '0'; dest[pst+3] = 0; } void TMyString::sAddOn1Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 5))return; e = data % 10; dest[pst] = e + '0'; dest[pst+1] = 0; } void TMyString::sAddOn_N_Dg(int aN, unsigned int d, char *dest) { switch(aN){ case 1: sAddOn1Dg(d,dest);break; case 2: sAddOn2Dg(d,dest);break; case 3: sAddOn3Dg(d,dest);break; case 4: sAddOn4Dg(d,dest);break; case 5: sAddOn5Dg(d,dest);break; case 6: sAddOn6Dg(d,dest);break; case 7: sAddOn7Dg(d,dest);break; case 8: sAddOn8Dg(d,dest);break; } } void TMyString::sAddOn2Dg(unsigned int data, char *dest) { unsigned int i; unsigned int d,e; int pst = 0; for(i=0; i<(dMYSTRING_LENGTH-1); i++){ if(dest[i] != 0)pst++; else break; } pst; if(pst > (dMYSTRING_LENGTH - 5))return; d = data/10; e = d % 10; dest[pst] = e + '0'; e = data % 10; dest[pst+1] = e + '0'; dest[pst+2] = 0; } int TMyString::sGetLen(char *source) { int i,aLen; aLen = 0; for(i=0; i<1024; i++){ if(*source !=0 ){ aLen++; }else{ break; } source++; } return aLen; } void TMyString::FillFixLen(unsigned int aLen) { unsigned int len, i; len = sGetLen(Text); for(i=len; i< aLen; i++){ Text[i] = ' '; } Text[aLen] = 0; } void TMyString::sFillFixLen(char *source, unsigned int aLen) { unsigned int len, i; len = sGetLen(source); for(i=len; i< aLen; i++){ source[i] = ' '; } source[aLen] = 0; } void TMyString::BrokeFixLen(int aLen) { int i; int aFirst; int FoundCnStart; aFirst = 0; FoundCnStart = 0; for(i=0; i-1){ Text[i] = 0; } } } void TMyString::sBrokeFixLen(char *source, int aLen) { int i; int aFirst; int FoundCnStart; aFirst = 0; FoundCnStart = 0; for(i=0; i-1){ source[i] = 0; } } } void TMyString::sClear(char *dest) { dest[0] = 0; dest[1] = 0; dest[2] = 0; dest[3] = 0; } int TMyString::sToInteger(char *Src) { signed int Result; unsigned int i; unsigned int sig; if(Src[0] == '-'){ sig = 0; i = 1; }else{ sig = 1; i = 0; } Result = 0; while(1){ if(Src[i] < '0' || Src[i] > '9'){ if(Src[i] == 0) break; Result = 0; break; }else{ Result *= 10; Result += Src[i] - '0'; } i++; } if(sig == 0) Result = 0 - Result; return Result; } int TMyString::sCompStr32Char(char *pStr1, char *pStr2) { for(int i=0; i<32; i++){ if(pStr1[i] != pStr2[i])return -1; if(pStr1[i] == 0){ break; } } return 0; }