Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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. ; language for programs
  77. lang fix ru ; ru en fr ge fi
  78.  
  79.  
  80. ; code profiling
  81. macro STARTTIMER
  82.  {
  83.   push ecx
  84.   push ebx
  85.   rdtsc
  86.   push edx
  87.   push eax
  88.  }
  89.  
  90. macro STOPTIMER ;edx:eax = cpu cycles ellapsed
  91.  {
  92.   rdtsc
  93.   pop ebx
  94.   pop ecx
  95.   clc
  96.   sbb eax,ebx
  97.   sbb edx,ecx
  98.   pop ebx
  99.   pop ecx
  100.  }
  101.  
  102.  
  103. ; optimize the code for size
  104. macro add arg1,arg2
  105.  {
  106.    if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
  107.       if arg2 eqtype 0
  108.          if (arg2) = 1
  109.             inc arg1
  110.          else
  111.             add arg1,arg2
  112.          end if
  113.       else
  114.          add arg1,arg2
  115.       end if
  116.    else
  117.       add arg1,arg2
  118.    end if
  119.  }
  120.  
  121. macro sub arg1,arg2
  122.  {
  123.    if arg2 eqtype 0
  124.       if (arg2) = 1
  125.          dec arg1
  126.       else
  127.          sub arg1,arg2
  128.       end if
  129.    else
  130.       sub arg1,arg2
  131.    end if
  132.  }
  133.  
  134. macro mov arg1,arg2
  135.  {
  136.    if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
  137.       if arg2 eqtype 0
  138.          if (arg2) = 0
  139.             xor arg1,arg1
  140.          else if (arg2) = 1
  141.             xor arg1,arg1
  142.             inc arg1
  143.          else if (arg2) = -1
  144.             or  arg1,-1
  145.          else if (arg2) > -128 & (arg2) < 128
  146.             push arg2
  147.             pop  arg1
  148.          else
  149.             mov arg1,arg2
  150.          end if
  151.       else
  152.          mov arg1,arg2
  153.       end if
  154.    else
  155.       mov arg1,arg2
  156.    end if
  157.  }
  158.  
  159.  
  160. macro struct name
  161.  {
  162.   virtual at 0
  163.    name name
  164.    sizeof.#name = $ - name
  165.   end virtual
  166.  }
  167.  
  168.  
  169. ; structures used in MeOS
  170. struc process_information
  171.  {
  172.   .cpu_usage               dd ?  ; +0
  173.   .window_stack_position   dw ?  ; +4
  174.   .window_stack_value      dw ?  ; +6
  175.   .not_used1               dw ?  ; +8
  176.   .process_name            rb 12 ; +10
  177.   .memory_start            dd ?  ; +22
  178.   .used_memory             dd ?  ; +26
  179.   .PID                     dd ?  ; +30
  180.   .x_start                 dd ?  ; +34
  181.   .y_start                 dd ?  ; +38
  182.   .x_size                  dd ?  ; +42
  183.   .y_size                  dd ?  ; +46
  184.   .slot_state              dw ?  ; +50
  185.   rb (1024-52)
  186.  }
  187. struct process_information
  188.  
  189. struc system_colors
  190.  {
  191.   .frame            dd ?
  192.   .grab             dd ?
  193.   .grab_button      dd ?
  194.   .grab_button_text dd ?
  195.   .grab_text        dd ?
  196.   .work             dd ?
  197.   .work_button      dd ?
  198.   .work_button_text dd ?
  199.   .work_text        dd ?
  200.   .work_graph       dd ?
  201.  }
  202. struct system_colors
  203.  
  204.  
  205. ; constants
  206.  
  207. ; events
  208. EV_IDLE        = 0
  209. EV_TIMER       = 0
  210. EV_REDRAW      = 1
  211. EV_KEY         = 2
  212. EV_BUTTON      = 3
  213. EV_EXIT        = 4
  214. EV_BACKGROUND  = 5
  215. EV_MOUSE       = 6
  216. EV_IPC         = 7
  217. EV_STACK       = 8
  218.  
  219. ; event mask bits for function 40
  220. EVM_REDRAW     =        1b
  221. EVM_KEY        =       10b
  222. EVM_BUTTON     =      100b
  223. EVM_EXIT       =     1000b
  224. EVM_BACKGROUND =    10000b
  225. EVM_MOUSE      =   100000b
  226. EVM_IPC        =  1000000b
  227. EVM_STACK      = 10000000b