Subversion Repositories Kolibri OS

Rev

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

  1. :void ExitProcess()
  2. {
  3.         EAX = -1;
  4.         $int 0x40
  5. }
  6.  
  7. :f70 write_file_70;
  8. :int CreateFile(dword data_size, buffer, file_path)
  9. {
  10.         write_file_70.func = 2;
  11.         write_file_70.param1 = 0;
  12.         write_file_70.param2 = 0;
  13.         write_file_70.param3 = data_size;
  14.         write_file_70.param4 = buffer;
  15.         write_file_70.rezerv = 0;
  16.         write_file_70.name = file_path;
  17.         $mov eax,70
  18.         $mov ebx,#write_file_70.func
  19.         $int 0x40
  20. }
  21.  
  22. :int AddFile(dword begin,data_size, buffer, file_path)
  23. {
  24.         write_file_70.func = 3;
  25.         write_file_70.param1 = begin;
  26.         write_file_70.param2 = 0;
  27.         write_file_70.param3 = data_size;
  28.         write_file_70.param4 = buffer;
  29.         write_file_70.rezerv = 0;
  30.         write_file_70.name = file_path;
  31.         $mov eax,70
  32.         $mov ebx,#write_file_70.func
  33.         $int 0x40
  34. }
  35.  
  36. dword malloc(dword size)
  37. {
  38.         $push    ebx
  39.         $push    ecx
  40.  
  41.         $mov     eax, 68
  42.         $mov     ebx, 12
  43.         $mov     ecx, size
  44.         $int     0x40
  45.    
  46.         $pop     ecx
  47.         $pop     ebx
  48.         return  EAX;
  49. }
  50. dword free(dword mptr)
  51. {
  52.         $push    ebx
  53.         $push    ecx
  54.        
  55.         $mov     eax, 68
  56.         $mov     ebx, 13
  57.         $mov     ecx, mptr
  58.         $test    ecx, ecx
  59.         $jz      end0
  60.         $int     0x40
  61.    @end0:
  62.         $pop     ecx
  63.         $pop     ebx
  64.         return 0;
  65. }
  66. stdcall dword realloc(dword mptr, size)
  67. {
  68.         $push    ebx
  69.         $push    ecx
  70.         $push    edx
  71.  
  72.         $mov     eax, 68
  73.         $mov     ebx, 20
  74.         $mov     ecx, size
  75.         $mov     edx, mptr
  76.         $int     0x40
  77.  
  78.         $pop     edx
  79.         $pop     ecx
  80.         $pop     ebx
  81.         return   EAX;
  82. }
  83.  
  84. :void memcpy(dword x,y,size)
  85. {
  86.         dword ost = 0;
  87.         dword del = 0;
  88.         del = size/4;
  89.         ost = size%4;
  90.         WHILE(del)
  91.         {
  92.                 DSDWORD[x] = DSDWORD[y];
  93.                 del--;
  94.                 x+=4;
  95.                 y+=4;
  96.         }
  97.         IF(ost>1)
  98.         {
  99.                 DSWORD[x] = DSWORD[y];
  100.                 x+=2;
  101.                 y+=2;
  102.                 ost-=2;
  103.         }
  104.         IF(ost==1) DSBYTE[x] = DSBYTE[y];
  105. }
  106.  
  107. :dword sleep(dword x)
  108. {
  109.         EAX = 5;
  110.         EBX = x;
  111.         $int 0x40
  112. }
  113. :dword memInit()
  114. {
  115.         $push    ebx
  116.         $mov     eax, 68
  117.         $mov     ebx, 11
  118.         $int     0x40
  119.    
  120.         $pop     ebx
  121.         return  EAX;
  122. }
  123.  
  124.  
  125. :dword itoa(signed long number,dword p)
  126. {
  127.         dword ret=0;
  128.         byte cmd=0;
  129.         long mask=0;
  130.         long tmp=0;
  131.         IF(!number)
  132.         {
  133.                 DSBYTE[p] = '0';
  134.                 p++;
  135.                 DSBYTE[p] = 0;
  136.                 return 1;
  137.         }
  138.         mask = 1000000000;
  139.         cmd = 1;
  140.         if(!number){
  141.                         ESBYTE[p] = '0';
  142.                         ESBYTE[p+1] = 0;
  143.                         return p;
  144.         }
  145.         ret = p;
  146.         if(number<0)
  147.         {
  148.                         $neg number
  149.                         ESBYTE[p] = '-';
  150.                         $inc p
  151.         }
  152.         while(mask)
  153.         {
  154.                         tmp = number / mask;
  155.                         tmp = tmp%10;
  156.                    
  157.                         if(cmd){
  158.                                         if(tmp){
  159.                                                         ESBYTE[p] = tmp + '0';
  160.                                                         $inc p
  161.                                                         cmd = 0;
  162.                                         }
  163.                         }
  164.                         else {
  165.                                         ESBYTE[p] = tmp + '0';
  166.                                         $inc p
  167.                         }
  168.                         mask /= 10;
  169.         }
  170.         ESBYTE[p] = 0;
  171.         return p - ret;
  172. }
  173.  
  174. :dword strcpy(dword s1,s2)
  175. {
  176.         X = s1;
  177.         WHILE(DSBYTE[s2])
  178.         {
  179.                 DSBYTE[s1] = DSBYTE[s2];
  180.                 s1++;
  181.                 s2++;
  182.         }
  183.         RETURN s1-X;
  184. }
  185. :dword strlcpy(dword s1,s2,l)
  186. {
  187.         X = l;
  188.         WHILE(l)
  189.         {
  190.                 DSBYTE[s1] = DSBYTE[s2];
  191.                 s1++;
  192.                 s2++;
  193.                 l--;
  194.         }
  195.         RETURN X;
  196. }
  197.  
  198. :dword _str(dword v)
  199. {
  200.         SWITCH(DSBYTE[v+4])
  201.         {
  202.                 CASE PY_STR:
  203.                         RETURN DSDWORD[v];
  204.                 CASE PY_BOOL:
  205.                         IF(DSDWORD[v]) RETURN "True";
  206.                         RETURN "False";
  207.         }
  208.        
  209. }
  210.  
  211. :dword stack = 0;
  212. :dword popStack()
  213. {
  214.         stack-=4;
  215.         RETURN DSDWORD[stack];
  216. }
  217. :void pushStack(dword x)
  218. {
  219.         dword tmp = 0;
  220.         IF(!DSDWORD[stack]) tmp = malloc(30);
  221.         ELSE tmp = DSDWORD[stack];
  222.         IF(x) memcpy(tmp,x,30);
  223.         DSDWORD[stack] = tmp;
  224.         stack+=4;
  225. }
  226.  
  227. :dword stackFast = 0;
  228. :dword beginStackFast = 0;
  229. :dword popFast()
  230. {
  231.         stackFast-=4;
  232.         RETURN DSDWORD[stackFast];
  233. }
  234. :void pushFast(dword x)
  235. {
  236.         dword tmp = 0;
  237.         IF(!DSDWORD[stackFast]) tmp = malloc(30);
  238.         ELSE tmp = DSDWORD[stackFast];
  239.         IF(x) memcpy(tmp,x,30);
  240.         DSDWORD[stackFast] = tmp;
  241.         stackFast+=4;
  242. }
  243.  
  244. :dword stackLoop = 0;
  245. :dword popLoop()
  246. {
  247.         stackLoop-=4;
  248.         RETURN DSDWORD[stackLoop];
  249. }
  250. :void pushLoop(dword x)
  251. {
  252.         DSDWORD[stackLoop] = x;
  253.         stackLoop+=4;
  254. }
  255.  
  256. :void checkType(dword x,y)
  257. {
  258.         IF(DSBYTE[x+4]!=DSBYTE[y+4])
  259.         {
  260.                 _stdout("Error type!");
  261.                 ExitProcess();
  262.         }
  263. }
  264.  
  265. :void sprintf(dword str, ...)
  266. {
  267.         //S = DSBYTE[format];
  268.         X = DSDWORD[ESP]-ESP-8;
  269.         X += ESP;
  270.         A = DSDWORD[X];
  271.         X-=4;
  272.         B = DSDWORD[X];
  273.         S = DSBYTE[B];
  274.         while(S)
  275.         {
  276.                 if(S=='%')
  277.                 {
  278.                         B++;
  279.                         S = DSBYTE[B];
  280.                         IF(S=='s')
  281.                         {
  282.                                 X-=4;
  283.                                 strcpy(A,DSDWORD[X]);
  284.                                 A+=EAX;
  285.                                 B++;
  286.                                 S = DSBYTE[B];
  287.                                 continue;
  288.                         }
  289.                         IF(S=='c')
  290.                         {
  291.                                 X-=4;
  292.                                 EAX = DSDWORD[X];
  293.                                 test(EAX,1);
  294.                                 A++;
  295.                                 B++;
  296.                                 S = DSBYTE[B];
  297.                                 continue;
  298.                         }
  299.                         ELSE IF(S=='d')
  300.                         {
  301.                                
  302.                         }
  303.                         ELSE
  304.                         {
  305.                                 DSBYTE[A] = S;
  306.                                 A++;
  307.                         }
  308.                 }
  309.                 else
  310.                 {
  311.                         DSBYTE[A] = S;
  312.                         A++;
  313.                 }
  314.                 B++;
  315.                 S = DSBYTE[B];
  316.         }
  317. }
  318.  
  319. :byte BUFTST[15] = {0};
  320. :void test1(dword x,y)
  321. {
  322.  
  323.         IF(y)
  324.         {
  325.                 itoa(x,#BUFTST);
  326.                 _stdout(#BUFTST);
  327.         }
  328.         ELSE _stdout(x);
  329.         EAX = -1;
  330.         $int 0x40;
  331. }
  332.  
  333. :void test2(dword x,y)
  334. {
  335.         _stdout("[");
  336.         IF(y)
  337.         {
  338.                 itoa(x,#BUFTST);
  339.                 _stdout(#BUFTST);
  340.         }
  341.         ELSE _stdout(x);
  342.         _stdout("]");
  343. }
  344.  
  345.  
  346.  
  347. :void ______INIT______()
  348. {
  349.         dword o = 0;
  350.         dword o2 = 0;
  351.         memInit();
  352.  
  353.         stack = malloc(1000);
  354.         beginStack = stack;
  355.         stackFast = malloc(1000);
  356.         beginStackFast = stackFast;
  357.         stackLoop = malloc(1000);
  358.         TEMP = malloc(500);
  359.        
  360.         //o = malloc(16*4);
  361.         //memcpy(o,"test123456789",9);
  362.  
  363.         //test(123);
  364.         //sprintf(TEMP,"asd%sa=%c123","ok",123);
  365.         //test(TEMP,0);
  366.        
  367.         //importLibrary("console");
  368.         main();
  369.         ExitProcess();
  370. }
  371.  
  372. :void ______STOP______()
  373. {
  374.         ExitProcess();
  375. }