?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. #ifndef __ADDITIONS
  2. #define __ADDITIONS
  3. #include <put_get_mem_atm.h>
  4. #define dospage                         63
  5.  
  6. 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'};
  7. static u8 output_x;
  8. static u8 output_y;
  9. static u8 save_output_x;
  10. static u8 pcharmask=0;
  11.  
  12. //┬√ўшёы хЄ ътрфЁрЄэ√щ ъюЁхэ№
  13. unsigned int lsqrt(unsigned long arg)
  14. {
  15. static char count=16;
  16. unsigned long res=0,tmp=0;
  17.         if(arg!=0){
  18.                 if(!(arg&0xFF000000)){arg<<=8;count-=4;}
  19.  
  20.  
  21.                 res=1;
  22.                 while((tmp<1)&&(count)){
  23.                         count--;
  24.                         if(arg&0x80000000UL)tmp|=2;
  25.                         if(arg&0x40000000UL)tmp|=1;
  26.  
  27.                         arg<<=2;
  28.  
  29.  
  30.                 };
  31.                 tmp--;
  32.                 for(count;count;count--){
  33.                         tmp<<=2;
  34.                         res<<=1;
  35.  
  36.                         if(arg&0x80000000UL)tmp|=2;
  37.                         if(arg&0x40000000UL)tmp|=1;
  38.                         arg<<=2;
  39.  
  40.                         if( tmp>=((res<<1)|1)){
  41.                                 tmp-=((res<<1)|1);
  42.                                 res|=1;
  43.                         }
  44.                        
  45.                 }
  46.         }
  47.         return (unsigned int)res;
  48. }
  49. //╧ЁхюсЁрчєхЄ ўшёыю т ёЄЁюъє
  50. void itoa(i16 val, u8* buf)
  51. {
  52.     static u8 *p;                
  53.     static  u8 *firstdig;          
  54.     static i8 temp;              
  55.     static i8 digval;        
  56.         static u8 a;
  57.         for(a=0;a<16;a++)buf[a]=0;
  58.        
  59.     p = buf;
  60.     firstdig = p;          
  61.  
  62.     do {
  63.         digval = (unsigned) (val % 10);
  64.         val /= 10;      
  65.  
  66.        
  67.         if (digval > 9)*p++ = (char) (digval - 10 + 'a');
  68.         else *p++ = (char) (digval + '0');      
  69.  
  70.     }
  71.         while (val > 0);
  72.          
  73.     *p-- = '\0';            
  74.  
  75.     do
  76.         {
  77.         temp = *p;
  78.         *p = *firstdig;
  79.         *firstdig = temp;  
  80.         --p;
  81.         ++firstdig;        
  82.     } while (firstdig < p);
  83. }
  84.  
  85. //┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь X,Y
  86. //─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
  87. //pcharmask - єърч√трхЄ ёяюёюс Ёшёютъш ёшьтюыр.
  88. // хёыш pcharmask=0 Єю ёшьтюы ЁшёєхЄё  схч єўхЄр яЁючЁрўэюую ЎтхЄр
  89. // хёыш pcharmask=1 Єю ёшьтюы ЁшёєхЄё  ё ьрёъющ
  90. void put_char_xy(u8 n, u8 x,u8 y,u8 pcharmask)
  91. {
  92.  if(n>=' ')
  93.         {
  94.                 if(pcharmask==0)draw_tile(x,y,n-' ');
  95.                 else draw_tile_key(x,y,n-' ');
  96.         }
  97.  
  98. }
  99. //┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь output_x ш output_y
  100. //─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
  101. //╧Ёшьхэ хЄё  т ЇєэъЎшш put_str
  102.  
  103. void put_char(u8 n)
  104. {
  105.         if(n>=' ')
  106.         {
  107.                 if(pcharmask==0)draw_tile(output_x,output_y,n-' ');
  108.                 else draw_tile_key(output_x,output_y,n-' ');
  109.         }
  110.  
  111.         ++output_x;
  112.  
  113.         if(output_x==39||n=='\n')
  114.         {
  115.                 output_x=save_output_x;
  116.                 ++output_y;
  117.         if(output_y==24) output_y=1;
  118.         }
  119. }
  120. //┬√тюфшЄ ёЄЁюъє яю ъююЁфшэрЄрь output_x ш output_y
  121. //┬√тюф тхф╕Єё  °ЁшЇЄюь fnt, уфх fnt - эюьхЁ шчюсЁрцхэш 
  122. void put_str(u8* str,u8 fnt)
  123. {
  124.  
  125.   static u8 i;
  126.   select_image(fnt);
  127.   save_output_x=output_x;
  128.   while(1)
  129.   {
  130.     i=*str++;
  131.     if(!i) break;
  132.         else if(i=='\0') break;
  133.         else if(i=='^') break;
  134.         else put_char(i);
  135.   }
  136. }
  137.  
  138. //┬ючтЁр∙рхЄ фышэє ёЄЁюъш
  139. u16 strlen (u8 * str)
  140. {
  141.         static u8 a,i;
  142.         a=0;
  143.         while(1)
  144.         {
  145.                 i=*str++;
  146.                 if(!i) break;
  147.                 if(i=='\0') break;
  148.                 if(i=='^') break;
  149.                 a++;
  150.         }
  151.         return a;
  152. }
  153. //ёЁртэхэшх ёЄЁюъ
  154. //┬ючтЁр∙ хЄ 1 хёыш ёЄЁюър 2 > ёЄЁюъш 1
  155. //┬ючтЁр∙ хЄ -1 хёыш ёЄЁюър 1 > ёЄЁюъш 2
  156. //┬ючтЁр∙ хЄ 0 хёыш ёЄЁюъш Ёртэ√
  157. i8 strcmp(u8 *str1, u8 *str2)
  158. {      
  159.         static u8 a,l1,l2;
  160.         l1=strlen(str1);
  161.         l2=strlen(str2);
  162.         if(l1>l2) return -1;
  163.         else if(l1<l2) return 1;
  164.         else
  165.         {
  166.                 for(a=0;a<l1;a++)
  167.                 {
  168.                         if(*(str1+a)<*(str2+a)) return 1;
  169.                         if(*(str1+a)>*(str2+a)) return -1;
  170.                 }
  171.         }
  172.         return 0;
  173. }
  174. //╧ЁютюфшЄ ъюэърЄшэрЎш■ ёЄЁюъ.
  175. //╧Ёшёюхфшэ хЄ buf2 ъ buf1
  176. void strcat(u8 *buf1,u8 *buf2)
  177. {
  178.         static u16 a;
  179.         static u16 b;
  180.         static u8 *bb,flag;
  181.         static u8 i;
  182.         a=0;
  183.         bb=buf1;
  184.  
  185.         while(1)
  186.         {
  187.                 i=*bb++;
  188.                 if(i=='^' || i==0) break;
  189.                 else
  190.                 {
  191.                         a++;
  192.                 }
  193.         }
  194.         bb=buf2;
  195.         b=0;
  196.  
  197.         while(1)
  198.         {
  199.                 i=*bb++;
  200.                 if(!i || i=='^'||i=='\0') break;
  201.                 else
  202.                 {
  203.                         *(buf1+a+b)=i;
  204.                         b++;
  205.                 }
  206.                
  207.         }
  208.         *(buf1+a+b)=0;
  209. }
  210. //╬ст чър ЇєэъЎшш 3d13
  211. //pg - ёЄЁрэшЎр ё ъюЄюЁющ сєфхЄ тхёЄшё№ юсьхэ фрээ√ьш
  212. //operation - эюьхЁ юяхЁрЎшш
  213. //blocks - ъюышўхёЄтю ёўшЄ√трхь√ї сыюъют
  214. //sector - эрўры№э√щ ёхъЄюЁ ёўшЄ√трэш 
  215. //track - эрўры№эр  фюЁюцър ёўшЄ√трэш 
  216. //begin_page - ёьх∙хэшх эр ёЄЁрэшЎх
  217. void DOS(u8 pg, u8 operation,u8 blocks, u8 sector, u8 track, u16 begin_page)  __naked
  218.         {
  219.                         __asm
  220.                         push ix
  221.                         ld      ix,#0
  222.                         add     ix,sp
  223.                        
  224.                         ld a,4 (ix)
  225.                         ex af,af
  226.                        
  227.                         ld c,5 (ix)
  228.                         ld b,6 (ix)
  229.                         ld e,7 (ix)
  230.                         ld d,8 (ix)
  231.                         ld l,9 (ix)
  232.                         ld h,10 (ix)
  233.                         call #_DOS_3D13
  234.                        
  235.                         pop ix
  236.                         ret
  237.                         __endasm;
  238.         }
  239. //╟руЁєчър Їрщыр ё фшёър т ёЄЁрэшЎє ярь Єш/ т√уЁєчър ёЄЁрэшЎ√ т Їрщы (═ютщ Їрщы эх ёючфр╕Єё ,юэ єцх фюыцхэ с√Є№ эр фшёъх).
  240. //filename - шь  Їрщыр
  241. //page - эюьхЁ ёЄЁрэшЎ√ ё ъюЄюЁющ сєфхЄ тёхёЄшё№ юсьхэ
  242. //0 - ёюїЁрэхэшх эр фшёъ
  243. //1 - чруЁєчър ё фшёър
  244. // т ЇєэъЎшш шёяюы№чєхЄё  defined чэрўхэшх dospage, ъюЄюЁюх єърч√трхЄ эр ёЄЁрэшЎє т ярь Єш т ъюЄюЁє■ єфхЄ тЁхьхээю
  245. // чряшёрэю чэрўхэшх эєыхтющ фюЁюцъш
  246.         void load_file(u8 *filename,u8 page,u8 saveload)
  247.         {
  248.                 static u8 buf[16];
  249.                 static u8 a;
  250.                 static u16 c;
  251.                 vsync();
  252.                 DOS(#0x7f-dospage,5,7,0,0,32768);//яЁюўЄхь эєыхтє■ фюЁюцъє
  253.                 vsync();
  254.                 buf[8]='^';
  255.                 c=0;
  256.                
  257.                 while(strcmp(buf,filename)!=0 && c<1792)
  258.                 {
  259.                         for(a=0;a<16;a++)
  260.                         {
  261.                                 buf[a]=get_mem(dospage,32768+a+c);
  262.                         }
  263.                         buf[8]='^';
  264.                         c+=16;
  265.                 }
  266.                 vsync();
  267.                 if(saveload==1)
  268.                 {
  269.                         DOS(#0x7f-page,5,buf[13],buf[14],buf[15],32768);
  270.                 }
  271.                 else
  272.                 {
  273.                         DOS(#0x7f-page,6,1,buf[14],buf[15],32768);
  274.                 }
  275.                 vsync();
  276.         }
  277. #endif