Subversion Repositories Kolibri OS

Rev

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

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