Subversion Repositories Kolibri OS

Rev

Rev 1805 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; new application structure
  2. macro meos_app_start
  3.  {
  4.   use32
  5.   org 0x0
  6.  
  7.   db 'MENUET01'
  8.   dd 0x01
  9.   dd __start
  10.   dd __end
  11.   dd __memory
  12.   dd __stack
  13.  
  14.   if used __params & ~defined __params
  15.     dd __params
  16.   else
  17.     dd 0x0
  18.   end if
  19.  
  20.   dd 0x0
  21.  }
  22. MEOS_APP_START fix meos_app_start
  23.  
  24. macro code
  25.  {
  26.   __start:
  27.  }
  28. CODE fix code
  29.  
  30. macro data
  31.  {
  32.   __data:
  33.  }
  34. DATA fix data
  35.  
  36. macro udata
  37.  {
  38.   if used __params & ~defined __params
  39.     __params:
  40.       db 0
  41.     __end:
  42.       rb 255
  43.   else
  44.     __end:
  45.   end if
  46.   __udata:
  47.  }
  48. UDATA fix udata
  49.  
  50. macro meos_app_end
  51.  {
  52.   align 32
  53.   rb 2048
  54.   __stack:
  55.   __memory:
  56.   __end:
  57.  }
  58. MEOS_APP_END fix meos_app_end
  59.  
  60.  
  61. ; macro for defining multiline text data
  62. struc mstr [sstring]
  63.  {
  64.   forward
  65.     local ssize
  66.     virtual at 0
  67.       db sstring
  68.       ssize = $
  69.     end virtual
  70.     dd ssize
  71.     db sstring
  72.   common
  73.     dd -1
  74.  }
  75.  
  76.  
  77. ; strings
  78. macro sz name,[data] {       ; from MFAR [mike.dld]
  79.   common
  80.    if used name
  81.     label name
  82.    end if
  83.   forward
  84.    if used name
  85.     db data
  86.    end if
  87.   common
  88.    if used name
  89.     .size = $-name
  90.    end if
  91. }
  92.  
  93. macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
  94.   common
  95.    if used name
  96.     label name
  97.    end if
  98.   forward
  99.    if (used name)&(lang eq lng)
  100.     db data
  101.    end if
  102.   common
  103.    if used name
  104.     .size = $-name
  105.    end if
  106. }
  107.  
  108.  
  109.  
  110. ; easy system call macro
  111. macro mpack dest, hsrc, lsrc
  112. {
  113.   if (hsrc eqtype 0) & (lsrc eqtype 0)
  114.     mov dest, (hsrc) shl 16 + lsrc
  115.   else
  116.     if (hsrc eqtype 0) & (~lsrc eqtype 0)
  117.       mov dest, (hsrc) shl 16
  118.       add dest, lsrc
  119.     else
  120.       mov dest, hsrc
  121.       shl dest, 16
  122.       add dest, lsrc
  123.     end if
  124.   end if
  125. }
  126.  
  127. macro __mov reg,a,b {         ; mike.dld
  128.  if (~a eq)&(~b eq)
  129.    mpack reg,a,b
  130.  else if (~a eq)&(b eq)
  131.    mov reg,a
  132.  end if
  133. }
  134.  
  135. macro mcall a,b,c,d,e,f {   ; mike.dld
  136.  __mov eax,a
  137.  __mov ebx,b
  138.  __mov ecx,c
  139.  __mov edx,d
  140.  __mov esi,e
  141.  __mov edi,f
  142.  int   0x40
  143. }
  144.  
  145.  
  146.  
  147. ; optimize the code for size
  148. __regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
  149.  
  150. macro add arg1,arg2
  151.  {
  152.    if (arg2 eqtype 0)
  153.       if (arg2) = 1
  154.          inc arg1
  155.       else
  156.          add arg1,arg2
  157.       end if
  158.    else
  159.       add arg1,arg2
  160.    end if
  161.  }
  162.  
  163. macro sub arg1,arg2
  164.  {
  165.    if (arg2 eqtype 0)
  166.       if (arg2) = 1
  167.          dec arg1
  168.       else
  169.          sub arg1,arg2
  170.       end if
  171.    else
  172.       sub arg1,arg2
  173.    end if
  174.  }
  175.  
  176. macro mov arg1,arg2
  177.  {
  178.    if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
  179.       if (arg2) = 0
  180.          xor arg1,arg1
  181.       else if (arg2) = 1
  182.          xor arg1,arg1
  183.          inc arg1
  184.       else if (arg2) = -1
  185.          or  arg1,-1
  186.       else if (arg2) > -128 & (arg2) < 128
  187.          push arg2
  188.          pop  arg1
  189.       else
  190.          mov  arg1,arg2
  191.       end if
  192.    else
  193.       mov arg1,arg2
  194.    end if
  195.  }
  196.  
  197.  
  198. macro struct name
  199.  {
  200.   virtual at 0
  201.    name name
  202.    sizeof.#name = $ - name
  203.   end virtual
  204.  }
  205.  
  206. ; structures used in MeOS
  207. struc process_information
  208.  {
  209.   .cpu_usage               dd ?  ; +0
  210.   .window_stack_position   dw ?  ; +4
  211.   .window_stack_value      dw ?  ; +6
  212.   .not_used1               dw ?  ; +8
  213.   .process_name            rb 12 ; +10
  214.   .memory_start            dd ?  ; +22
  215.   .used_memory             dd ?  ; +26
  216.   .PID                     dd ?  ; +30
  217.   .x_start                 dd ?  ; +34
  218.   .y_start                 dd ?  ; +38
  219.   .x_size                  dd ?  ; +42
  220.   .y_size                  dd ?  ; +46
  221.   .slot_state              dw ?  ; +50
  222.                            dw ?  ; +52 - reserved
  223.   .client_left             dd ?  ; +54
  224.   .client_top              dd ?  ; +58
  225.   .client_width            dd ?  ; +62
  226.   .client_height           dd ?  ; +66
  227.   .wnd_state               db ?  ; +70
  228.   rb (1024-71)
  229.  }
  230. struct process_information
  231.  
  232. struc system_colors
  233.  {
  234.   .frame            dd ?
  235.   .grab             dd ?
  236.   .work_3d_dark      dd ?
  237.   .work_3d_light dd ?
  238.   .grab_text        dd ?
  239.   .work             dd ?
  240.   .work_button      dd ?
  241.   .work_button_text dd ?
  242.   .work_text        dd ?
  243.   .work_graph       dd ?
  244.  }
  245. struct system_colors
  246.  
  247.  
  248. ; constants
  249.  
  250. ; events
  251. EV_IDLE        = 0
  252. EV_TIMER       = 0
  253. EV_REDRAW      = 1
  254. EV_KEY         = 2
  255. EV_BUTTON      = 3
  256. EV_EXIT        = 4
  257. EV_BACKGROUND  = 5
  258. EV_MOUSE       = 6
  259. EV_IPC         = 7
  260. EV_STACK       = 8
  261.  
  262. ; event mask bits for function 40
  263. EVM_REDRAW     =        1b
  264. EVM_KEY        =       10b
  265. EVM_BUTTON     =      100b
  266. EVM_EXIT       =     1000b
  267. EVM_BACKGROUND =    10000b
  268. EVM_MOUSE      =   100000b
  269. EVM_IPC        =  1000000b
  270. EVM_STACK      = 10000000b