Subversion Repositories Kolibri OS

Rev

Rev 122 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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