Subversion Repositories Kolibri OS

Rev

Rev 31 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 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,b {         ; mike.dld
127
 if (~a eq)&(~b eq)
128
   mpack reg,a,b
129
 else if (~a eq)&(b eq)
130
   mov reg,a
131
 end if
132
}
133
 
134
macro mcall a,b,c,d,e,f {   ; mike.dld
135
 __mov eax,a
136
 __mov ebx,b
137
 __mov ecx,c
138
 __mov edx,d
139
 __mov esi,e
140
 __mov edi,f
141
 int   0x40
142
}
143
 
144
 
145
 
146
 
147
 
148
 
149
; optimize the code for size
150
__regs fix 
151
 
152
macro add arg1,arg2
153
 {
154
   if (arg2 eqtype 0)
155
      if (arg2) = 1
156
         inc arg1
157
      else
158
         add arg1,arg2
159
      end if
160
   else
161
      add arg1,arg2
162
   end if
163
 }
164
 
165
macro sub arg1,arg2
166
 {
167
   if (arg2 eqtype 0)
168
      if (arg2) = 1
169
         dec arg1
170
      else
171
         sub arg1,arg2
172
      end if
173
   else
174
      sub arg1,arg2
175
   end if
176
 }
177
 
178
macro mov arg1,arg2
179
 {
180
   if (arg1 in __regs) & (arg2 eqtype 0)
181
      if (arg2) = 0
182
         xor arg1,arg1
183
      else if (arg2) = 1
184
         xor arg1,arg1
185
         inc arg1
186
      else if (arg2) = -1
187
         or  arg1,-1
188
      else if (arg2) > -128 & (arg2) < 128
189
         push arg2
190
         pop  arg1
191
      else
192
         mov  arg1,arg2
193
      end if
194
   else
195
      mov arg1,arg2
196
   end if
197
 }
198
 
199
 
51 mikedld 200
; structure definition helper
201
macro struct name, [arg]
31 halyavin 202
 {
51 mikedld 203
  common
204
   name@struct equ name
205
   struc name arg {
31 halyavin 206
 }
207
 
51 mikedld 208
macro struct_helper name
209
 {
210
  match xname,name
211
  \{
212
   virtual at 0
213
   xname xname
214
   sizeof.#xname = $ - xname
215
   name equ sizeof.#xname
216
   end virtual
217
  \}
218
 }
219
 
220
ends fix } struct_helper name@struct
221
 
31 halyavin 222
; structures used in MeOS
51 mikedld 223
struct process_information
31 halyavin 224
  .cpu_usage               dd ?  ; +0
225
  .window_stack_position   dw ?  ; +4
226
  .window_stack_value      dw ?  ; +6
227
  .not_used1               dw ?  ; +8
228
  .process_name            rb 12 ; +10
229
  .memory_start            dd ?  ; +22
230
  .used_memory             dd ?  ; +26
231
  .PID                     dd ?  ; +30
232
  .x_start                 dd ?  ; +34
233
  .y_start                 dd ?  ; +38
234
  .x_size                  dd ?  ; +42
235
  .y_size                  dd ?  ; +46
236
  .slot_state              dw ?  ; +50
237
  rb (1024-52)
51 mikedld 238
ends
31 halyavin 239
 
51 mikedld 240
struct system_colors
31 halyavin 241
  .frame            dd ?
242
  .grab             dd ?
243
  .grab_button      dd ?
244
  .grab_button_text dd ?
245
  .grab_text        dd ?
246
  .work             dd ?
247
  .work_button      dd ?
248
  .work_button_text dd ?
249
  .work_text        dd ?
250
  .work_graph       dd ?
51 mikedld 251
ends
31 halyavin 252
 
253
 
254
; constants
255
 
256
; events
257
EV_IDLE        = 0
258
EV_TIMER       = 0
259
EV_REDRAW      = 1
260
EV_KEY         = 2
261
EV_BUTTON      = 3
262
EV_EXIT        = 4
263
EV_BACKGROUND  = 5
264
EV_MOUSE       = 6
265
EV_IPC         = 7
266
EV_STACK       = 8
267
 
268
; event mask bits for function 40
269
EVM_REDRAW     =        1b
270
EVM_KEY        =       10b
271
EVM_BUTTON     =      100b
272
EVM_EXIT       =     1000b
273
EVM_BACKGROUND =    10000b
274
EVM_MOUSE      =   100000b
275
EVM_IPC        =  1000000b
276
EVM_STACK      = 10000000b