Subversion Repositories Kolibri OS

Rev

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

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