Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #code32 TRUE
  2.  
  3. char   os_name[8]   = {'M','E','N','U','E','T','0','1'};
  4. dword  os_version   = 0x00000001;
  5. dword  start_addr   = #main;
  6. dword  final_addr   = #stop+32;
  7. dword  alloc_mem    = 0x00100000;
  8. dword  x86esp_reg   = 0x0007fff0;
  9. dword  I_Param      = 0x0;
  10. dword  I_Icon       = 0x0;
  11. dword  skin_width;
  12.  
  13. #define evButton  3
  14. #define evKey     2
  15. #define evReDraw  1
  16. #define evNet     8
  17.  
  18. #define BT_DEL          0x80000000
  19. #define BT_HIDE         0x40000000
  20. #define BT_NOFRAME      0x20000000
  21.  
  22.  
  23.  
  24. inline fastcall dword WaitEvent(){
  25.  EAX = 10;              // wait here for event
  26.  $int 0x40
  27. }
  28.  
  29.  
  30. inline fastcall void ExitProcess(){
  31.  EAX = -1;              // close this program
  32.  $int 0x40
  33. }
  34.  
  35. inline fastcall word GetKey(){
  36.  EAX = 2;              // just read it key from buffer
  37.  $int  0x40
  38.  EAX = EAX >> 8;
  39. }
  40.  
  41. inline fastcall word GetButtonID(){
  42.  EAX = 17;            // Get ID
  43.  $int  0x40
  44.  EAX = EAX >> 8;
  45. }
  46.  
  47. inline fastcall dword GetSkinWidth()
  48. {
  49.         EAX = 48;
  50.         EBX = 4;
  51.         $int 0x40
  52. }
  53.  
  54. inline fastcall void DeleteButton(dword EDX)
  55. {
  56.         EAX = 8;
  57.         EDX += BT_DEL;
  58.         $int 0x40;
  59. }
  60.  
  61. inline fastcall dword strlen(dword EDI){
  62.         ECX=EAX=0;
  63.         ECX--;
  64.         $REPNE $SCASB
  65.         EAX-=2+ECX;
  66. }
  67.  
  68.  
  69. inline fastcall void WindowRedrawStatus(dword EBX){
  70.         EAX = 12;
  71.         $int 0x40
  72. }
  73.  
  74.  
  75. void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
  76. {
  77.         EBX = x << 16 + sizeX;
  78.         ECX = y << 16 + sizeY;
  79.         EDX = mainAreaType << 24 | mainAreaColour;
  80.         ESI = headerType << 24 | headerColour;
  81.         $xor eax,eax
  82.         $int 0x40
  83. }
  84.  
  85. void DefineButton(dword x,y,w,h,EDX,ESI)
  86. {
  87.         EAX = 8;
  88.         EBX = x<<16+w;
  89.         ECX = skin_width+y<<16+h;
  90.         $int 0x40
  91. }
  92.  
  93. void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
  94. {
  95.         EAX = 4;
  96.         EBX = x<<16+skin_width+y;
  97.         ECX = fontType<<24+color;
  98.         $int 0x40;
  99. }
  100.  
  101.  
  102. void DrawBar(dword x,y,w,h,EDX)
  103. {
  104.         EAX = 13;
  105.         EBX = x<<16+w;
  106.         ECX = skin_width+y<<16+h;
  107.         $int 0x40
  108. }
  109.  
  110.  
  111. void DrawRegion(dword x,y,width,height,color1)
  112. {
  113.         DrawBar(x,y,width,1,color1); //ïîëîñà ãîð ñâåðõó
  114.         DrawBar(x,y+height,width,1,color1); //ïîëîñà ãîð ñíèçó
  115.         DrawBar(x,y,1,height,color1); //ïîëîñà âåðò ñëåâà
  116.         DrawBar(x+width,y,1,height+1,color1); //ïîëîñà âåðò ñïðàâà
  117. }
  118.  
  119. void DrawFlatButton(dword x,y,width,height,id,color,text)
  120. {
  121.         DrawRegion(x,y,width,height,0x94AECE);
  122.         DrawBar(x+1,y+1,width-1,1,0xFFFFFF); //ïîëîñà ãîð áåëàÿ
  123.         DrawBar(x+1,y+height-1,width-2,1,0xC7C7C7); //òåíü âåðò
  124.         DrawBar(x+1,y+1,1,height-1,0xFFFFFF); //ïîëîñà âåðò áåëàÿ
  125.         DrawBar(x+width-1,y+2,1,height-2,0xC7C7C7); //òåíü âåðò
  126.         DrawBar(x+2,y+2,width-3,height-3,color); //çàëèâêà
  127.         IF (id<>0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //îïðåäåëÿåì êíîïêó
  128.         WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0);
  129. }
  130.  
  131.  
  132. void PutImage(dword buf,w,h,x,y)
  133. {
  134.         EDI=buf;
  135.         EAX = 7;
  136.         EBX = buf;
  137.         ECX = w<<16+h;
  138.         EDX = x<<16+y+skin_width;
  139.         $int 0x40
  140. }
  141.  
  142.  
  143. void copystr(dword s,d)
  144. {
  145.         $mov esi,s
  146.         $mov edi,d
  147.         $cld
  148. l1:
  149.         $lodsb
  150.         $stosb
  151.         $test al,al
  152.         $jnz l1
  153. }
  154.  
  155.  
  156. char    buffer[11]="";
  157. inline fastcall dword IntToStr(dword ESI)
  158. {
  159.      $mov     edi, #buffer
  160.      $mov     ecx, 10
  161.      $test     esi, esi
  162.      $jns     f1
  163.      $mov     al, '-'
  164.      $stosb
  165.      $neg     esi
  166. f1:
  167.      $mov     eax, esi
  168.      $push     -'0'
  169. f2:
  170.      $xor     edx, edx
  171.      $div     ecx
  172.      $push     edx
  173.      $test     eax, eax
  174.      $jnz     f2
  175. f3:
  176.      $pop     eax
  177.      $add     al, '0'
  178.      $stosb
  179.      $jnz     f3
  180.      $mov     eax, #buffer
  181.      $ret
  182. }
  183.