#include <exec/types.h>
#include <exec/memory.h>

extern struct Library        *RetinaBase;

char *formattext(ULONG num, ULONG basemem, ULONG allmem, char format[])
{
    int     i=0,
            j=0;
    char    temp_str_1[64];
    static char temp_str[256];

    while(format[i]!=0)
    {
        if(format[i]=='%')
        {
            ULONG   dummy=0;
            UBYTE   dummy_2=0,
                    dummy_1=0,
                    dummy_3=0;
            i++;
            if(format[i]=='t'){dummy_2=1;i++;}
            if(format[i]=='T'){dummy_2=4;i++;}
            if(format[i]=='k'){dummy_1=1;i++;}
            if(format[i]=='m'){dummy_1=2;i++;}
            if(format[i]=='o'){dummy_3=1;i++;}
            if(format[i]=='%'){dummy_2=3;i++;}
            switch(format[i])
            {
                case    'd':
                        dummy=num; i++;
                        break;
                case    'b':
                        dummy=basemem; i++;
                        break;
                case    'a':
                        dummy=allmem; i++;
                        break;
                case    'p':
                        dummy_2=2; dummy=num; i++;
                        break;
            }
            if(dummy_3==1)dummy=allmem-dummy;
            if(dummy_1==1)dummy=dummy>>10;
            if(dummy_1==2)dummy=dummy>>20;
            switch(dummy_2)
            {
                case    4:
                        dummy_2=long_2_string_with_thousand(dummy,&temp_str_1[0],'.');
                        for(dummy_1=0;dummy_1<dummy_2;dummy_1++) temp_str[j++]=temp_str_1[dummy_1];
                        break;
                case    1:
                        dummy_2=long_2_string_with_thousand(dummy,&temp_str_1[0],',');
                        for(dummy_1=0;dummy_1<dummy_2;dummy_1++) temp_str[j++]=temp_str_1[dummy_1];
                        break;
                case    2:
                        dummy_2=0;
                        sprintf_exec(&temp_str_1[0],"%ld",(((dummy>>8)*100)/((allmem>>8)+1)) );
                        while ((temp_str_1[dummy_2] != 0)&(dummy_2<64)) temp_str[j++]=temp_str_1[dummy_2++];
                        break;
                case    0:
                        dummy_2=0;
                        sprintf_exec(&temp_str_1[0],"%ld",dummy);
                        while ((temp_str_1[dummy_2] != 0)&(dummy_2<64)) temp_str[j++]=temp_str_1[dummy_2++];
                        break;
                case    3:
                        temp_str[j++]='%';
                        break;
            }
        }
        else temp_str[j++]=format[i++];
    }
    temp_str[j++]=0;
    return(temp_str);
}


char *formatinfotext(char format[])
{
    int     i=0,j=0;
    char    temp_str_1[14];
    static  char temp_str[256];

    while(format[i]!=0)
    {
        if(format[i]=='%')
        {
            ULONG   dummy=0,
                    dummy_1=0;
            UBYTE   dummy_2=0;
            WORD    dummy_3=0;
            i++;
            if(format[i]=='t'){dummy_3=1;i++;};
            if(format[i]=='T'){dummy_3=2;i++;};
            if(format[i]=='k'){dummy_2=TRUE;i++;};
            if(format[i]=='l'){dummy_1=MEMF_LARGEST;i++;};
            if(format[i]=='a'){dummy_1=MEMF_TOTAL;i++;};
            switch(format[i])
            {
                case    'o':
                        dummy=AvailMem(dummy_1); i++;
                        break;
                case    'c':
                        dummy=AvailMem(MEMF_CHIP|dummy_1); i++;
                        break;
                case    'f':
                        dummy=AvailMem(MEMF_FAST|dummy_1); i++;
                        break;
                case    'r':
                        if(RetinaBase)dummy=Retina_AvailMem(dummy_1); i++;
                        break;
            }
            if(dummy_2)dummy=dummy>>10;
            switch(dummy_3)
            {
                case    1:
                        dummy_2=long_2_string_with_thousand(dummy,&temp_str_1[0],',');
                        for(dummy_1=0;dummy_1<dummy_2;dummy_1++) temp_str[j++]=temp_str_1[dummy_1];
                        break;
                case    2:
                        dummy_2=long_2_string_with_thousand(dummy,&temp_str_1[0],'.');
                        for(dummy_1=0;dummy_1<dummy_2;dummy_1++) temp_str[j++]=temp_str_1[dummy_1];
                        break;
                default :
                        dummy_1=0;
                        sprintf_exec(&temp_str_1[0],"%ld",dummy);
                        while (temp_str_1[dummy_1] != '\0') temp_str[j++]=temp_str_1[dummy_1++];
                        break;
            }
        }
        else temp_str[j++]=format[i++];
    }
    temp_str[j++]=0;
    return(temp_str);
}

