Subversion Repositories Kolibri OS

Rev

Blame | 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.  }
  57. MEOS_APP_END fix meos_app_end
  58.  
  59.  
  60. ; macro for defining multiline text data
  61. struc mstr [sstring]
  62.  {
  63.   forward
  64.     local ssize
  65.     virtual at 0
  66.       db sstring
  67.       ssize = $
  68.     end virtual
  69.     dd ssize
  70.     db sstring
  71.   common
  72.     dd -1
  73.  }
  74.  
  75.  
  76. ; strings
  77. macro sz name,[data] {       ; from MFAR [mike.dld]
  78.   common
  79.    if used name
  80.     label name
  81.    end if
  82.   forward
  83.    if used name
  84.     db data
  85.    end if
  86.   common
  87.    if used name
  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.    end if
  97.   forward
  98.    if (used name)&(lang eq lng)
  99.     db data
  100.    end if
  101.   common
  102.    if used name
  103.     .size = $-name
  104.    end if
  105. }
  106.  
  107.  
  108.  
  109. ; easy system call macro
  110. macro mpack dest, hsrc, lsrc
  111. {
  112.   if (hsrc eqtype 0) & (lsrc eqtype 0)
  113.     mov dest, (hsrc) shl 16 + lsrc
  114.   else
  115.     if (hsrc eqtype 0) & (~lsrc eqtype 0)
  116.       mov dest, (hsrc) shl 16
  117.       add dest, lsrc
  118.     else
  119.       mov dest, hsrc
  120.       shl dest, 16
  121.       add dest, lsrc
  122.     end if
  123.   end if
  124. }
  125.  
  126. macro __mov reg,a {         ; mike.dld
  127.  if ~a eq
  128.    mov reg,a
  129.  end if
  130. }
  131.  
  132. __CPU_type      equ     p5
  133. SYSENTER_VAR    equ     0
  134.  
  135. macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
  136.  local  ..ret_point
  137.  __mov eax,a
  138.  __mov ebx,b
  139.  __mov ecx,c
  140.  __mov edx,d
  141.  __mov esi,e
  142.  __mov edi,f
  143.  
  144.  if __CPU_type eq p5
  145.         int     0x40
  146.  else
  147.   if __CPU_type eq p6
  148.         push    ebp
  149.         mov     ebp, esp
  150.         push    ..ret_point     ; it may be 2 or 5 byte
  151.         sysenter
  152.  ..ret_point:
  153.         pop     edx
  154.         pop     ecx
  155.  
  156.   else
  157.    if __CPU_type eq k6
  158.         push    ecx
  159.         syscall
  160.         pop     ecx
  161.    else
  162.         display 'ERROR : unknown CPU type'
  163.         int     0x40
  164.    end if
  165.   end if
  166.  end if
  167. }
  168.  
  169.  
  170. ; language for programs
  171. lang fix ru ; ru en fr ge fi
  172.  
  173.  
  174.  
  175. ; optimize the code for size
  176. __regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
  177.  
  178. macro add arg1,arg2
  179.  {
  180.    if (arg2 eqtype 0)
  181.       if (arg2) = 1
  182.          inc arg1
  183.       else
  184.          add arg1,arg2
  185.       end if
  186.    else
  187.       add arg1,arg2
  188.    end if
  189.  }
  190.  
  191. macro sub arg1,arg2
  192.  {
  193.    if (arg2 eqtype 0)
  194.       if (arg2) = 1
  195.          dec arg1
  196.       else
  197.          sub arg1,arg2
  198.       end if
  199.    else
  200.       sub arg1,arg2
  201.    end if
  202.  }
  203.  
  204. macro mov arg1,arg2
  205.  {
  206.    if (arg1 in __regs) & (arg2 eqtype 0)
  207.       if (arg2) = 0
  208.          xor arg1,arg1
  209.       else if (arg2) = 1
  210.          xor arg1,arg1
  211.          inc arg1
  212.       else if (arg2) = -1
  213.          or  arg1,-1
  214.       else if (arg2) > -128 & (arg2) < 128
  215.          push arg2
  216.          pop  arg1
  217.       else
  218.          mov  arg1,arg2
  219.       end if
  220.    else
  221.       mov arg1,arg2
  222.    end if
  223.  }
  224.  
  225.  
  226. macro struct name
  227.  {
  228.   virtual at 0
  229.    name name
  230.    sizeof.#name = $ - name
  231.   end virtual
  232.  }
  233.  
  234. ; structures used in MeOS
  235. struc process_information
  236.  {
  237.   .cpu_usage               dd ?  ; +0
  238.   .window_stack_position   dw ?  ; +4
  239.   .window_stack_value      dw ?  ; +6
  240.   .not_used1               dw ?  ; +8
  241.   .process_name            rb 12 ; +10
  242.   .memory_start            dd ?  ; +22
  243.   .used_memory             dd ?  ; +26
  244.   .PID                     dd ?  ; +30
  245.   .x_start                 dd ?  ; +34
  246.   .y_start                 dd ?  ; +38
  247.   .x_size                  dd ?  ; +42
  248.   .y_size                  dd ?  ; +46
  249.   .slot_state              dw ?  ; +50
  250.   rb (1024-52)
  251.  }
  252. struct process_information
  253.  
  254. struc system_colors
  255.  {
  256.   .frame            dd ?
  257.   .grab             dd ?
  258.   .grab_button      dd ?
  259.   .grab_button_text dd ?
  260.   .grab_text        dd ?
  261.   .work             dd ?
  262.   .work_button      dd ?
  263.   .work_button_text dd ?
  264.   .work_text        dd ?
  265.   .work_graph       dd ?
  266.  }
  267. struct system_colors
  268.  
  269.  
  270. ; constants
  271.  
  272. ; events
  273. EV_IDLE        = 0
  274. EV_TIMER       = 0
  275. EV_REDRAW      = 1
  276. EV_KEY         = 2
  277. EV_BUTTON      = 3
  278. EV_EXIT        = 4
  279. EV_BACKGROUND  = 5
  280. EV_MOUSE       = 6
  281. EV_IPC         = 7
  282. EV_STACK       = 8
  283.  
  284. ; event mask bits for function 40
  285. EVM_REDRAW     =        1b
  286. EVM_KEY        =       10b
  287. EVM_BUTTON     =      100b
  288. EVM_EXIT       =     1000b
  289. EVM_BACKGROUND =    10000b
  290. EVM_MOUSE      =   100000b
  291. EVM_IPC        =  1000000b
  292. EVM_STACK      = 10000000b
  293.