Subversion Repositories Kolibri OS

Rev

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

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