Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

#ifndef __ADDITIONS
#define __ADDITIONS
#include <put_get_mem_atm.h>
#define dospage                         63

static u8 code_to_char[]={' ','z','x','c','v','a','s','d','f','g','q','w','e','r','t','1','2','3','4','5','0','9','8','7','6','p','o','i','u','y',' ','l','k','j','h',' ',' ','m','n','b'};
static u8 output_x;
static u8 output_y;
static u8 save_output_x;
static u8 pcharmask=0;

//┬√ўшёы хЄ ътрфЁрЄэ√щ ъюЁхэ№
unsigned int lsqrt(unsigned long arg)
{
static char count=16;
unsigned long res=0,tmp=0;
        if(arg!=0){
                if(!(arg&0xFF000000)){arg<<=8;count-=4;}


                res=1;
                while((tmp<1)&&(count)){
                        count--;
                        if(arg&0x80000000UL)tmp|=2;
                        if(arg&0x40000000UL)tmp|=1;

                        arg<<=2;


                };
                tmp--;
                for(count;count;count--){
                        tmp<<=2;
                        res<<=1;

                        if(arg&0x80000000UL)tmp|=2;
                        if(arg&0x40000000UL)tmp|=1;
                        arg<<=2;

                        if( tmp>=((res<<1)|1)){
                                tmp-=((res<<1)|1);
                                res|=1;
                        }
                       
                }
        }
        return (unsigned int)res;
}
//╧ЁхюсЁрчєхЄ ўшёыю т ёЄЁюъє
void itoa(i16 val, u8* buf)
{
    static u8 *p;                
    static  u8 *firstdig;          
    static i8 temp;              
    static i8 digval;        
        static u8 a;
        for(a=0;a<16;a++)buf[a]=0;
       
    p = buf;
    firstdig = p;          
 
    do {
        digval = (unsigned) (val % 10);
        val /= 10;      
 
       
        if (digval > 9)*p++ = (char) (digval - 10 + 'a');
        else *p++ = (char) (digval + '0');      
 
    }
        while (val > 0);
         
    *p-- = '\0';            
 
    do
        {
        temp = *p;
        *p = *firstdig;
        *firstdig = temp;  
        --p;
        ++firstdig;        
    } while (firstdig < p);
}

//┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь X,Y
//─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
//pcharmask - єърч√трхЄ ёяюёюс Ёшёютъш ёшьтюыр.
// хёыш pcharmask=0 Єю ёшьтюы ЁшёєхЄё  схч єўхЄр яЁючЁрўэюую ЎтхЄр
// хёыш pcharmask=1 Єю ёшьтюы ЁшёєхЄё  ё ьрёъющ
void put_char_xy(u8 n, u8 x,u8 y,u8 pcharmask)
{
 if(n>=' ')
        {
                if(pcharmask==0)draw_tile(x,y,n-' ');
                else draw_tile_key(x,y,n-' ');
        }

}
//┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь output_x ш output_y
//─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
//╧Ёшьхэ хЄё  т ЇєэъЎшш put_str

void put_char(u8 n)
{
        if(n>=' ')
        {
                if(pcharmask==0)draw_tile(output_x,output_y,n-' ');
                else draw_tile_key(output_x,output_y,n-' ');
        }

        ++output_x;

        if(output_x==39||n=='\n')
        {
                output_x=save_output_x;
                ++output_y;
        if(output_y==24) output_y=1;
        }
}
//┬√тюфшЄ ёЄЁюъє яю ъююЁфшэрЄрь output_x ш output_y
//┬√тюф тхф╕Єё  °ЁшЇЄюь fnt, уфх fnt - эюьхЁ шчюсЁрцхэш 
void put_str(u8* str,u8 fnt)
{

  static u8 i;
  select_image(fnt);
  save_output_x=output_x;
  while(1)
  {
    i=*str++;
    if(!i) break;
        else if(i=='\0') break;
        else if(i=='^') break;
        else put_char(i);
  }
}

//┬ючтЁр∙рхЄ фышэє ёЄЁюъш
u16 strlen (u8 * str)
{
        static u8 a,i;
        a=0;
        while(1)
        {
                i=*str++;
                if(!i) break;
                if(i=='\0') break;
                if(i=='^') break;
                a++;
        }
        return a;
}
//ёЁртэхэшх ёЄЁюъ
//┬ючтЁр∙ хЄ 1 хёыш ёЄЁюър 2 > ёЄЁюъш 1
//┬ючтЁр∙ хЄ -1 хёыш ёЄЁюър 1 > ёЄЁюъш 2
//┬ючтЁр∙ хЄ 0 хёыш ёЄЁюъш Ёртэ√
i8 strcmp(u8 *str1, u8 *str2)
{      
        static u8 a,l1,l2;
        l1=strlen(str1);
        l2=strlen(str2);
        if(l1>l2) return -1;
        else if(l1<l2) return 1;
        else
        {
                for(a=0;a<l1;a++)
                {
                        if(*(str1+a)<*(str2+a)) return 1;
                        if(*(str1+a)>*(str2+a)) return -1;
                }
        }
        return 0;
}
//╧ЁютюфшЄ ъюэърЄшэрЎш■ ёЄЁюъ.
//╧Ёшёюхфшэ хЄ buf2 ъ buf1
void strcat(u8 *buf1,u8 *buf2)
{
        static u16 a;
        static u16 b;
        static u8 *bb,flag;
        static u8 i;
        a=0;
        bb=buf1;

        while(1)
        {
                i=*bb++;
                if(i=='^' || i==0) break;
                else
                {
                        a++;
                }
        }
        bb=buf2;
        b=0;

        while(1)
        {
                i=*bb++;
                if(!i || i=='^'||i=='\0') break;
                else
                {
                        *(buf1+a+b)=i;
                        b++;
                }
               
        }
        *(buf1+a+b)=0;
}
//╬ст чър ЇєэъЎшш 3d13
//pg - ёЄЁрэшЎр ё ъюЄюЁющ сєфхЄ тхёЄшё№ юсьхэ фрээ√ьш
//operation - эюьхЁ юяхЁрЎшш
//blocks - ъюышўхёЄтю ёўшЄ√трхь√ї сыюъют
//sector - эрўры№э√щ ёхъЄюЁ ёўшЄ√трэш 
//track - эрўры№эр  фюЁюцър ёўшЄ√трэш 
//begin_page - ёьх∙хэшх эр ёЄЁрэшЎх
void DOS(u8 pg, u8 operation,u8 blocks, u8 sector, u8 track, u16 begin_page)  __naked
        {
                        __asm
                        push ix
                        ld      ix,#0
                        add     ix,sp
                       
                        ld a,4 (ix)
                        ex af,af
                       
                        ld c,5 (ix)
                        ld b,6 (ix)
                        ld e,7 (ix)
                        ld d,8 (ix)
                        ld l,9 (ix)
                        ld h,10 (ix)
                        call #_DOS_3D13
                       
                        pop ix
                        ret
                        __endasm;
        }
//╟руЁєчър Їрщыр ё фшёър т ёЄЁрэшЎє ярь Єш/ т√уЁєчър ёЄЁрэшЎ√ т Їрщы (═ютщ Їрщы эх ёючфр╕Єё ,юэ єцх фюыцхэ с√Є№ эр фшёъх).
//filename - шь  Їрщыр
//page - эюьхЁ ёЄЁрэшЎ√ ё ъюЄюЁющ сєфхЄ тёхёЄшё№ юсьхэ
//0 - ёюїЁрэхэшх эр фшёъ
//1 - чруЁєчър ё фшёър
// т ЇєэъЎшш шёяюы№чєхЄё  defined чэрўхэшх dospage, ъюЄюЁюх єърч√трхЄ эр ёЄЁрэшЎє т ярь Єш т ъюЄюЁє■ єфхЄ тЁхьхээю
// чряшёрэю чэрўхэшх эєыхтющ фюЁюцъш
        void load_file(u8 *filename,u8 page,u8 saveload)
        {
                static u8 buf[16];
                static u8 a;
                static u16 c;
                vsync();
                DOS(#0x7f-dospage,5,7,0,0,32768);//яЁюўЄхь эєыхтє■ фюЁюцъє
                vsync();
                buf[8]='^';
                c=0;
               
                while(strcmp(buf,filename)!=0 && c<1792)
                {
                        for(a=0;a<16;a++)
                        {
                                buf[a]=get_mem(dospage,32768+a+c);
                        }
                        buf[8]='^';
                        c+=16;
                }
                vsync();
                if(saveload==1)
                {
                        DOS(#0x7f-page,5,buf[13],buf[14],buf[15],32768);
                }
                else
                {
                        DOS(#0x7f-page,6,1,buf[14],buf[15],32768);
                }
                vsync();
        }
#endif