Subversion Repositories Kolibri OS

Rev

Rev 1937 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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