Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 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 
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