Subversion Repositories Kolibri OS

Rev

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

  1. ; language for programs
  2. lang fix en ; ru en fr ge fi
  3.  
  4. @^ fix macro comment {
  5. ^@ fix }
  6.  
  7. ; strings
  8. macro sz name,[data] {       ; from MFAR [mike.dld]
  9.  common
  10.   if used name
  11.    name db data
  12.    .size = $-name
  13.   end if
  14. }
  15.  
  16. macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
  17.  common
  18.   if used name
  19.    label name
  20.  forward
  21.   if lang eq lng
  22.    db data
  23.   end if
  24.  common
  25.    .size = $-name
  26.   end if
  27. }
  28.  
  29. macro szc name,elsz,[data] {         ; from MFAR [mike.dld]
  30.  common
  31.   local s,m
  32.   m = 0
  33.   if used name
  34.    label name
  35.    virtual at 0
  36.     db data
  37.     s = $
  38.    end virtual
  39.    d#elsz s
  40.    if m < s
  41.     m = s
  42.    end if
  43.    db data
  44.    .size = $-name
  45.    .maxl = m
  46.   end if
  47. }
  48.  
  49. macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
  50.  common
  51.   local s,m
  52.   m = 0
  53.   if used name
  54.    label name
  55.  forward
  56.   if lang eq lng
  57.    virtual at 0
  58.     db data
  59.     s = $
  60.    end virtual
  61.    d#elsz s
  62.    if m < s
  63.     m = s
  64.    end if
  65.    db data
  66.   end if
  67.  common
  68.    .size = $-name
  69.    .maxl = m
  70.   end if
  71. }
  72.  
  73.  
  74. ; easy system call macro
  75. macro mpack dest, hsrc, lsrc
  76. {
  77.   if (hsrc eqtype 0) & (lsrc eqtype 0)
  78.     mov dest, (hsrc) shl 16 + lsrc
  79.   else
  80.     if (hsrc eqtype 0) & (~lsrc eqtype 0)
  81.       mov dest, (hsrc) shl 16
  82.       add dest, lsrc
  83.     else
  84.       mov dest, hsrc
  85.       shl dest, 16
  86.       add dest, lsrc
  87.     end if
  88.   end if
  89. }
  90.  
  91. macro __mov reg,a,b {       ; mike.dld
  92.  if (~a eq)&(~b eq)
  93.    mpack reg,a,b
  94.  else if (~a eq)&(b eq)
  95.    mov reg,a
  96.  end if
  97. }
  98.  
  99. macro mcall a,b,c,d,e,f {   ; mike.dld
  100.  __mov eax,a
  101.  __mov ebx,b
  102.  __mov ecx,c
  103.  __mov edx,d
  104.  __mov esi,e
  105.  __mov edi,f
  106.  int   0x40
  107. }
  108.  
  109. ; -------------------------
  110. macro header a,[b] {
  111.  common
  112.   use32
  113.   org 0
  114.   db 'MENUET',a
  115.  forward
  116.   if b eq
  117.    dd 0
  118.   else
  119.    dd b
  120.   end if }
  121. macro section name,algn
  122.  {
  123.   local boundary
  124.   boundary = 16
  125.   if ~algn eq
  126.    boundary = algn
  127.   end if
  128.   align boundary
  129.   label name
  130.  }
  131. macro func name {
  132.  if ~used name
  133.   display 'FUNC NOT USED: ',`name,13,10
  134.  else
  135.   align 4
  136.   name:
  137. ;pushad
  138. ;pushfd
  139. ;dps `name
  140. ;newline
  141. ;mcall 5,1
  142. ;popfd
  143. ;popad
  144. }
  145. macro endf { end if }
  146.  
  147. macro jif _op1,_cond,_op2,_label,_op
  148.  {
  149.   if _op eq
  150.    cmp _op1,_op2
  151.   else
  152.    _op _op1,_op2
  153.   end if
  154.   j#_cond _label
  155.  }
  156.  
  157. macro diff16 title,l1,l2
  158.  {
  159.   local s,d
  160.   s = l2-l1
  161.   display title,': 0x'
  162.   repeat 8
  163.    d = '0' + s shr ((8-%) shl 2) and $0F
  164.    if d > '9'
  165.     d = d + 'A'-'9'-1
  166.    end if
  167.    display d
  168.   end repeat
  169.   display 13,10
  170.  }
  171.  
  172. macro diff10 title,l1,l2
  173.  {
  174.   local s,d,z,m
  175.   s = l2-l1
  176.   z = 0
  177.   m = 1000000000
  178.   display title,': '
  179.   repeat 10
  180.    d = '0' + s / m
  181.    s = s - (s/m)*m
  182.    m = m / 10
  183.    if d <> '0'
  184.     z = 1
  185.    end if
  186.    if z <> 0
  187.     display d
  188.    end if
  189.   end repeat
  190.   display 13,10
  191.  }
  192.  
  193. ; optimize the code for size
  194. __regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
  195.  
  196. macro add arg1,arg2
  197.  {
  198.    if (arg2 eqtype 0)
  199.       if (arg2) = 1
  200.          inc arg1
  201.       else
  202.          add arg1,arg2
  203.       end if
  204.    else
  205.       add arg1,arg2
  206.    end if
  207.  }
  208.  
  209. macro sub arg1,arg2
  210.  {
  211.    if (arg2 eqtype 0)
  212.       if (arg2) = 1
  213.          dec arg1
  214.       else
  215.          sub arg1,arg2
  216.       end if
  217.    else
  218.       sub arg1,arg2
  219.    end if
  220.  }
  221.  
  222. macro mov arg1,arg2
  223.  {
  224.    if (arg1 in __regs) & (arg2 eqtype 0)
  225.       if (arg2) = 0
  226.          xor arg1,arg1
  227.       else if (arg2) = 1
  228.          xor arg1,arg1
  229.          inc arg1
  230.       else if (arg2) = -1
  231.          or  arg1,-1
  232.       else if (arg2) > -128 & (arg2) < 128
  233.          push arg2
  234.          pop  arg1
  235.       else
  236.          mov  arg1,arg2
  237.       end if
  238.    else
  239.       mov arg1,arg2
  240.    end if
  241.  }
  242.  
  243.  
  244. struc POINT _t,_dx,_dy {
  245.  .x _t _dx
  246.  .y _t _dy
  247. }
  248.  
  249. ; structure definition helper
  250. macro struct name, [arg]
  251.  {
  252.   common
  253.    name@struct fix name
  254.    struc name arg {
  255.  }
  256.  
  257. macro struct_helper name
  258.  {
  259.    virtual at 0
  260.    name name
  261.    sizeof.#name = $ - name
  262.    name equ sizeof.#name
  263.    end virtual
  264.  }
  265.  
  266. ends fix } struct_helper name@struct
  267.  
  268. macro union [def]
  269.  {
  270.    common size@union = 0
  271.           origin@union = $
  272.    forward virtual
  273.             def
  274.             if $-origin@union > size@union
  275.              size@union = $-origin@union
  276.             end if
  277.            end virtual
  278.    common rb size@union
  279.  }
  280.  
  281. ; structures used in MeOS
  282. struc process_information
  283. {
  284.   .cpu_usage               dd ?  ; +0
  285.   .window_stack_position   dw ?  ; +4
  286.   .window_stack_value      dw ?  ; +6
  287.   .not_used1               dw ?  ; +8
  288.   .process_name            rb 12 ; +10
  289.   .memory_start            dd ?  ; +22
  290.   .used_memory             dd ?  ; +26
  291.   .PID                     dd ?  ; +30
  292.   .x_start                 dd ?  ; +34
  293.   .y_start                 dd ?  ; +38
  294.   .x_size                  dd ?  ; +42
  295.   .y_size                  dd ?  ; +46
  296.   .slot_state              dw ?  ; +50
  297.   rb (1024-52)
  298. }
  299.  
  300. struc system_colors
  301. {
  302.   .frame            dd ?
  303.   .grab             dd ?
  304.   .work_3d_dark     dd ?
  305.   .work_3d_light dd ?
  306.   .grab_text        dd ?
  307.   .work             dd ?
  308.   .work_button      dd ?
  309.   .work_button_text dd ?
  310.   .work_text        dd ?
  311.   .work_graph       dd ?
  312. }
  313.  
  314.  
  315. ; constants
  316.  
  317. ; events
  318. EV_IDLE        = 0
  319. EV_TIMER       = 0
  320. EV_REDRAW      = 1
  321. EV_KEY         = 2
  322. EV_BUTTON      = 3
  323. EV_EXIT        = 4
  324. EV_BACKGROUND  = 5
  325. EV_MOUSE       = 6
  326. EV_IPC         = 7
  327. EV_STACK       = 8
  328.  
  329. ; event mask bits for function 40
  330. EVM_REDRAW     =        1b
  331. EVM_KEY        =       10b
  332. EVM_BUTTON     =      100b
  333. EVM_EXIT       =     1000b
  334. EVM_BACKGROUND =    10000b
  335. EVM_MOUSE      =   100000b
  336. EVM_IPC        =  1000000b
  337. EVM_STACK      = 10000000b