Initial commit

This commit is contained in:
2026-04-06 19:02:09 +08:00
commit d186d7dcc7
743 changed files with 521821 additions and 0 deletions

953
MyCode/Gui/MyLongString.cpp Normal file
View File

@@ -0,0 +1,953 @@
#include "math.h"
#include "my_font.h"
#include "MyLongString.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 TMyLongString::Clear(void)
{
Text[0] = 0;
Text[1] = 0;
Text[2] = 0;
}
void TMyLongString::Insert(const char *source, int Pst)
{
//dMYSTRING_LENGTH
int i,x;
unsigned int ilen, len;
unsigned int sp;
const char *aP = source;
x = GetEndPst();
if(x <= Pst){
AddOnStr(source);
return;
}
for(i=0; i<dMYLONGSTRING_LENGTH; i++)TmpChar[i] = 0;
sp = GetLength();
x =0;
for(i=Pst+1; i<sp; i++){
TmpChar[x] = Text[i];
x++;
}
Text[Pst+1] = 0;
AddOnStr(source);
AddOnStr(TmpChar);
Text[dMYLONGSTRING_LENGTH - 1] = 0;
}
void TMyLongString::Insert(char *source, int Pst)
{
//dMYSTRING_LENGTH
int i,x;
unsigned int ilen, len;
unsigned int sp;
char *aP = source;
x = GetEndPst();
if(x <= Pst){
AddOnStr(source);
return;
}
for(i=0; i<dMYLONGSTRING_LENGTH; i++)TmpChar[i] = 0;
sp = GetLength();
x =0;
for(i=Pst+1; i<sp; i++){
TmpChar[x] = Text[i];
x++;
}
Text[Pst+1] = 0;
AddOnStr(source);
AddOnStr(TmpChar);
Text[dMYLONGSTRING_LENGTH - 1] = 0;
}
unsigned int TMyLongString::Delete(int Pst)
{
//dMYSTRING_LENGTH
unsigned int i;
unsigned int ilen;
unsigned int sp;
for(i=0; i<dMYLONGSTRING_LENGTH; i++)TmpChar[i] = 0;
sp = 0;
for(i=Pst+1; i < (dMYLONGSTRING_LENGTH-1); i++){
TmpChar[sp] = Text[i];
if(TmpChar[sp] == 0)break;
sp++;
}
if(Pst == -1){
Clear();
ilen = 0;
}else
if(Pst == 0){
Clear();
ilen = 1;
}else{
if( (Text[Pst] & 0x80) == 0){
//this is AscII
Text[Pst] = 0;
ilen = 1;
}else{
Text[Pst-1] = 0;
Text[Pst] = 0;
ilen = 2;
}
}
AddOnStr(TmpChar);
return ilen;
}
void TMyLongString::FromStr(const char *source)
{
unsigned int i;
unsigned int len;
len = dMYLONGSTRING_LENGTH -1;
for(i=0; i<len; i++){
Text[i]=source[i];
if(source[i] == 0)break;
}
Text[len] = 0;
}
void TMyLongString::FromStr(char *source)
{
unsigned int i;
unsigned int len;
len = dMYLONGSTRING_LENGTH -1;
for(i=0; i<len; i++){
Text[i]=source[i];
if(source[i] == 0)break;
}
Text[len] = 0;
}
int TMyLongString::GetEndPst(void)
{
unsigned int i;
if(Text[0] == 0)return -1;
for(i=1;i<dMYLONGSTRING_LENGTH;i++){
if(Text[i] == 0){
return i-1;
}
}
return -1;
}
int TMyLongString::GetLength(void)
{
return GetEndPst() + 1;
}
void TMyLongString::AddOnStr(const char *source)
{
unsigned int i;
unsigned int d=0;
for(i=GetEndPst()+1; i<(dMYLONGSTRING_LENGTH-1); i++){
Text[i]=source[d];
if(source[d] == 0)break;
d++;
}
Text[dMYLONGSTRING_LENGTH-1]=0;
}
void TMyLongString::AddOnStr( char *source)
{
unsigned int i;
unsigned int d=0;
for(i=GetEndPst()+1; i<(dMYLONGSTRING_LENGTH-1); i++){
Text[i]=source[d];
if(source[d] == 0)break;
d++;
}
Text[dMYLONGSTRING_LENGTH-1]=0;
}
void TMyLongString::ToStr(char *Dest, unsigned int len)
{
unsigned int i;
unsigned int limited;
if(len<(dMYLONGSTRING_LENGTH-1)) limited=len; else limited=dMYLONGSTRING_LENGTH-1;
i = sizeof(Text);
if(i<limited) limited = i;
for(i=0; i<limited; i++){
Dest[i] = Text[i];
if(Text[i] == 0)break;
}
Dest[i] = 0;
}
void TMyLongString::FromInt(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 TMyLongString::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 TMyLongString::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 TMyLongString::AddOnDgMax6(unsigned int data)
{
unsigned int d,e,i,pst, IsFound;
pst = GetEndPst() +1;
if(pst > (dMYLONGSTRING_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 TMyLongString::AddOn6Dg(unsigned int data)
{
unsigned int d,e,i,pst;
pst = GetEndPst() +1;
if(pst > (dMYLONGSTRING_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 TMyLongString::AddOn4Dg(unsigned int data)
{
unsigned int d,e,i,pst;
pst = GetEndPst() +1;
if(pst > (dMYLONGSTRING_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 TMyLongString::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 TMyLongString::AddOn3Dg(unsigned int data)
{
unsigned int i,pst;
unsigned int d,e;
pst = GetEndPst() +1;
if(pst > (dMYLONGSTRING_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 TMyLongString::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 TMyLongString::AddOn2Dg(unsigned int data)
{
unsigned int i,pst;
unsigned int d,e;
pst = GetEndPst() +1;
if(pst > (dMYLONGSTRING_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 TMyLongString::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 TMyLongString::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 TMyLongString::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 TMyLongString::sFromStr(char *source, char *dest)
{
unsigned int i;
unsigned int len;
len = dMYLONGSTRING_LENGTH -1;
for(i=0; i<len; i++){
dest[i]=source[i];
if(dest[i] == 0){
break;
}
}
}
void TMyLongString::sFromStr(const char *source, char *dest)
{
unsigned int i;
unsigned int len;
len = dMYLONGSTRING_LENGTH -1;
for(i=0; i<len; i++){
dest[i]=source[i];
if(dest[i] == 0){
break;
}
}
}
void TMyLongString::sFrom3Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
d = data/100;
e = d % 10;
dest[0] = e + '0';
d = data/10;
e = d % 10;
dest[1] = e + '0';
e = data % 10;
dest[2] = e + '0';
dest[3] = 0;
dest[4] = 0;
}
void TMyLongString::sFrom4Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
d = data/1000;
e = d % 10;
dest[0] = e + '0';
d = data/100;
e = d % 10;
dest[1] = e + '0';
d = data/10;
e = d % 10;
dest[2] = e + '0';
e = data % 10;
dest[3] = e + '0';
dest[4] = 0;
dest[5] = 0;
}
void TMyLongString::sAddOnStr(const char *source, char *dest)
{
unsigned int i;
unsigned int d=0;
int len = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)len++;
else break;
}
for(i=len; i<(dMYLONGSTRING_LENGTH-1); i++){
dest[i]=source[d];
if(source[d] == 0)break;
d++;
}
}
void TMyLongString::sAddOnDgMax6(unsigned int data, char *dest)
{
unsigned int d,e,i,pst, IsFound;
pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_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 TMyLongString::sAddOn5Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
int pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_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 TMyLongString::sAddOn4Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
int pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_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 TMyLongString::sAddOn3Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
int pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_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 TMyLongString::sAddOn1Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
int pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_LENGTH - 5))return;
e = data % 10;
dest[pst] = e + '0';
dest[pst+1] = 0;
}
void TMyLongString::sAddOn2Dg(unsigned int data, char *dest)
{
unsigned int i;
unsigned int d,e;
int pst = 0;
for(i=0; i<(dMYLONGSTRING_LENGTH-1); i++){
if(dest[i] != 0)pst++;
else break;
}
pst;
if(pst > (dMYLONGSTRING_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 TMyLongString::sGetLen(char *source)
{
int i,aLen;
aLen = 0;
for(i=0; i<1024; i++){
if(*source !=0 ){
aLen++;
}else{
break;
}
source++;
}
return aLen;
}
void TMyLongString::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 TMyLongString::sClear(char *dest)
{
dest[0] = 0;
dest[1] = 0;
dest[2] = 0;
dest[3] = 0;
}
int TMyLongString::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;
}