Subversion Repositories Kolibri OS

Rev

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

Rev 5941 Rev 5942
1
@^ fix macro comment {
1
@^ fix macro comment {
2
^@ fix }
2
^@ fix }
3
 
3
 
4
; -------------------------
4
; -------------------------
5
macro library [lname,fname]
5
macro library [lname,fname]
6
{
6
{
7
  forward
7
  forward
8
    dd __#lname#_library_table__,__#lname#_library_name__
8
    dd __#lname#_library_table__,__#lname#_library_name__
9
  common
9
  common
10
    dd 0
10
    dd 0
11
  forward
11
  forward
12
    align 4
12
    align 4
13
    __#lname#_library_name__ db fname,0
13
    __#lname#_library_name__ db fname,0
14
}
14
}
15
 
15
 
16
macro import lname,[name,sname]
16
macro import lname,[name,sname]
17
{
17
{
18
  common
18
  common
19
    align 4
19
    align 4
20
    __#lname#_library_table__:
20
    __#lname#_library_table__:
21
  forward
21
  forward
22
    if used name
22
    if used name
23
      name dd __#name#_import_name__
23
      name dd __#name#_import_name__
24
    end if
24
    end if
25
  common
25
  common
26
    dd 0
26
    dd 0
27
  forward
27
  forward
28
    if used name
28
    if used name
29
      align 4
29
      align 4
30
      __#name#_import_name__ db sname,0
30
      __#name#_import_name__ db sname,0
31
    end if
31
    end if
32
}
32
}
33
 
33
 
34
macro export [name,sname]
34
macro export [name,sname]
35
{
35
{
36
  forward
36
  forward
37
    dd __#name#_export_name__,name
37
    dd __#name#_export_name__,name
38
  common
38
  common
39
    dd 0
39
    dd 0
40
  forward
40
  forward
41
    align 4
41
    align 4
42
    __#name#_export_name__ db sname,0
42
    __#name#_export_name__ db sname,0
43
}
43
}
44
; -------------------------
44
; -------------------------
45
 
45
 
46
macro m2m dest,src {
46
macro m2m dest,src {
47
 push src
47
 push src
48
 pop  dest
48
 pop  dest
49
}
49
}
50
 
50
 
51
 
51
 
52
macro iglobal {
52
macro iglobal {
53
  IGlobals equ IGlobals,
53
  IGlobals equ IGlobals,
54
  macro __IGlobalBlock { }
54
  macro __IGlobalBlock { }
55
  
55
  
56
macro uglobal {
56
macro uglobal {
57
  UGlobals equ UGlobals,
57
  UGlobals equ UGlobals,
58
  macro __UGlobalBlock { }
58
  macro __UGlobalBlock { }
59
 
59
 
60
endg fix }      ; Use endg for ending iglobal and uglobal blocks.
60
endg fix }      ; Use endg for ending iglobal and uglobal blocks.
61
 
61
 
62
 
62
 
63
macro IncludeIGlobals{
63
macro IncludeIGlobals{
64
  macro IGlobals dummy,[n] \{ __IGlobalBlock
64
  macro IGlobals dummy,[n] \{ __IGlobalBlock
65
     purge __IGlobalBlock  \}
65
     purge __IGlobalBlock  \}
66
  match I, IGlobals \{ I \} }
66
  match I, IGlobals \{ I \} }
67
 
67
 
68
macro IncludeUGlobals{
68
macro IncludeUGlobals{
69
  macro UGlobals dummy,[n] \{
69
  macro UGlobals dummy,[n] \{
70
    \common
70
    \common
71
      \local begin, size
71
      \local begin, size
72
      begin = $
72
      begin = $
73
      virtual at $
73
      virtual at $
74
    \forward
74
    \forward
75
      __UGlobalBlock
75
      __UGlobalBlock
76
      purge __UGlobalBlock
76
      purge __UGlobalBlock
77
    \common
77
    \common
78
      size = $ - begin
78
      size = $ - begin
79
    end virtual
79
    end virtual
80
    rb size
80
    rb size
81
  \}
81
  \}
82
  match U, UGlobals \{ U \} }
82
  match U, UGlobals \{ U \} }
83
 
83
 
84
uglobal
84
uglobal
85
endg
85
endg
86
  
86
  
87
iglobal
87
iglobal
88
endg
88
endg
89
 
89
 
90
 
90
 
91
; new application structure
91
; new application structure
92
macro meos_app_start
92
macro meos_app_start
93
 {
93
 {
94
  use32
94
  use32
95
  org 0x0
95
  org 0x0
96
 
96
 
97
  db 'MENUET01'
97
  db 'MENUET01'
98
  dd 0x01
98
  dd 0x01
99
  dd __start
99
  dd __start
100
  dd __end
100
  dd __end
101
  dd __memory
101
  dd __memory
102
  dd __stack
102
  dd __stack
103
 
103
 
104
  if used __params & ~defined __params
104
  if used __params & ~defined __params
105
    dd __params
105
    dd __params
106
  else
106
  else
107
    dd 0x0
107
    dd 0x0
108
  end if
108
  end if
109
 
109
 
110
  dd 0x0
110
  dd 0x0
111
 }
111
 }
112
MEOS_APP_START fix meos_app_start
112
MEOS_APP_START fix meos_app_start
113
 
113
 
114
macro code
114
macro code
115
 {
115
 {
116
  __start:
116
  __start:
117
 }
117
 }
118
CODE fix code
118
CODE fix code
119
 
119
 
120
macro data
120
macro data
121
 {
121
 {
122
  __data:
122
  __data:
123
  IncludeIGlobals
123
  IncludeIGlobals
124
 }
124
 }
125
DATA fix data
125
DATA fix data
126
 
126
 
127
macro udata
127
macro udata
128
 {
128
 {
129
  if used __params & ~defined __params
129
  if used __params & ~defined __params
130
    __params:
130
    __params:
131
      db 0
131
      db 0
132
    __end:
132
    __end:
133
      rb 255
133
      rb 255
134
  else
134
  else
135
    __end:
135
    __end:
136
  end if
136
  end if
137
  __udata:
137
  __udata:
138
  IncludeUGlobals
138
  IncludeUGlobals
139
 }
139
 }
140
UDATA fix udata
140
UDATA fix udata
141
 
141
 
142
macro meos_app_end
142
macro meos_app_end
143
 {
143
 {
144
  align 32
144
  align 32
145
  rb 2048
145
  rb 2048
146
  __stack:
146
  __stack:
147
  __memory:
147
  __memory:
148
 }
148
 }
149
MEOS_APP_END fix meos_app_end
149
MEOS_APP_END fix meos_app_end
150
 
150
 
151
 
151
 
152
; macro for defining multiline text data
152
; macro for defining multiline text data
153
struc mstr [sstring]
153
struc mstr [sstring]
154
 {
154
 {
155
  forward
155
  forward
156
    local ssize
156
    local ssize
157
    virtual at 0
157
    virtual at 0
158
      db sstring
158
      db sstring
159
      ssize = $
159
      ssize = $
160
    end virtual
160
    end virtual
161
    dd ssize
161
    dd ssize
162
    db sstring
162
    db sstring
163
  common
163
  common
164
    dd -1
164
    dd -1
165
 }
165
 }
166
 
166
 
167
; macro for defining multiline text data
167
; macro for defining multiline text data
168
struc mls [sstring]
168
struc mls [sstring]
169
 {
169
 {
170
  forward
170
  forward
171
    local ssize
171
    local ssize
172
    virtual at 0
172
    virtual at 0
173
      db sstring  ; mod
173
      db sstring  ; mod
174
      ssize = $
174
      ssize = $
175
    end virtual
175
    end virtual
176
    db ssize
176
    db ssize
177
    db sstring
177
    db sstring
178
  common
178
  common
179
    db -1         ; mod
179
    db -1         ; mod
180
 }
180
 }
181
 
181
 
182
 
182
 
183
 
183
 
184
; strings
184
; strings
185
macro sz name,[data] {       ; from MFAR [mike.dld]
185
macro sz name,[data] {       ; from MFAR [mike.dld]
186
 common
186
 common
187
  if used name
187
  if used name
188
   name db data
188
   name db data
189
   .size = $-name
189
   .size = $-name
190
  end if
190
  end if
191
}
191
}
192
 
192
 
193
macro szZ name,[data] {      ; same as sz, but with 0 at the end of line (ASCIIZ string) [dunkaist]
193
macro szZ name,[data] {      ; same as sz, but with 0 at the end of line (ASCIIZ string) [dunkaist]
194
 common
194
 common
195
  if used name
195
  if used name
196
   name db data,0
196
   name db data,0
197
   .size = $-name-1
197
   .size = $-name-1
198
  end if
198
  end if
199
}
199
}
200
sz0 fix szZ
200
sz0 fix szZ
201
 
201
 
202
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
202
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
203
 common
203
 common
204
  if used name
204
  if used name
205
   label name
205
   label name
206
 forward
206
 forward
207
  if lang eq lng
207
  if lang eq lng
208
   db data
208
   db data
209
  end if
209
  end if
210
 common
210
 common
211
   .size = $-name
211
   .size = $-name
212
  end if
212
  end if
213
}
213
}
214
 
214
 
215
macro szc name,elsz,[data] {         ; from MFAR [mike.dld]
215
macro szc name,elsz,[data] {         ; from MFAR [mike.dld]
216
 common
216
 common
217
  local s,m
217
  local s,m
218
  m = 0
218
  m = 0
219
  if used name
219
  if used name
220
   label name
220
   label name
221
 forward
221
 forward
222
   virtual at 0
222
   virtual at 0
223
    db data
223
    db data
224
    s = $
224
    s = $
225
   end virtual
225
   end virtual
226
   d#elsz s
226
   d#elsz s
227
   if m < s
227
   if m < s
228
    m = s
228
    m = s
229
   end if
229
   end if
230
   db data
230
   db data
231
 common
231
 common
232
   .size = $-name
232
   .size = $-name
233
   .maxl = m
233
   .maxl = m
234
  end if
234
  end if
235
}
235
}
236
 
236
 
237
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
237
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
238
 common
238
 common
239
  local s,m,c
239
  local s,m,c
240
  m = 0
240
  m = 0
241
  c = 0
241
  c = 0
242
  if used name
242
  if used name
243
   label name
243
   label name
244
 forward
244
 forward
245
  if lang eq lng
245
  if lang eq lng
246
   virtual at 0
246
   virtual at 0
247
    db data
247
    db data
248
    s = $
248
    s = $
249
   end virtual
249
   end virtual
250
   d#elsz s
250
   d#elsz s
251
   if m < s
251
   if m < s
252
    m = s
252
    m = s
253
   end if
253
   end if
254
   db data
254
   db data
255
   c = c+1
255
   c = c+1
256
  end if
256
  end if
257
 common
257
 common
258
   .size  = $-name
258
   .size  = $-name
259
   .maxl  = m
259
   .maxl  = m
260
   .count = c
260
   .count = c
261
  end if
261
  end if
262
}
262
}
263
 
263
 
264
 
264
 
265
; easy system call macro
265
; easy system call macro
266
macro mpack dest, hsrc, lsrc
266
macro mpack dest, hsrc, lsrc
267
{
267
{
268
  if (hsrc eqtype 0) & (lsrc eqtype 0)
268
  if (hsrc eqtype 0) & (lsrc eqtype 0)
269
    mov dest, (hsrc) shl 16 + lsrc
269
    mov dest, (hsrc) shl 16 + lsrc
270
  else
270
  else
271
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
271
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
272
      mov dest, (hsrc) shl 16
272
      mov dest, (hsrc) shl 16
273
      add dest, lsrc
273
      add dest, lsrc
274
    else
274
    else
275
      mov dest, hsrc
275
      mov dest, hsrc
276
      shl dest, 16
276
      shl dest, 16
277
      add dest, lsrc
277
      add dest, lsrc
278
    end if
278
    end if
279
  end if
279
  end if
280
}
280
}
281
 
281
 
282
macro __mov reg,a,b {       ; mike.dld
282
macro __mov reg,a,b {       ; mike.dld
283
 if (~a eq)&(~b eq)
283
 if (~a eq)&(~b eq)
284
   mpack reg,a,b
284
   mpack reg,a,b
285
 else if (~a eq)&(b eq)
285
 else if (~a eq)&(b eq)
286
   mov reg,a
286
   mov reg,a
287
 end if
287
 end if
288
}
288
}
289
 
289
 
290
 
290
 
291
include 'config.inc'
291
include 'config.inc'
292
;__CPU_type equ p5
292
;__CPU_type equ p5
293
SYSENTER_VAR    equ 0
293
SYSENTER_VAR    equ 0
294
 
294
 
295
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
295
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
296
 local  ..ret_point
296
 local  ..ret_point
297
 __mov eax,a
297
 __mov eax,a
298
 __mov ebx,b
298
 __mov ebx,b
299
 __mov ecx,c
299
 __mov ecx,c
300
 __mov edx,d
300
 __mov edx,d
301
 __mov esi,e
301
 __mov esi,e
302
 __mov edi,f
302
 __mov edi,f
303
 
303
 
304
 if __CPU_type eq p5
304
 if __CPU_type eq p5
305
        int     0x40
305
        int     0x40
306
 else
306
 else
307
  if __CPU_type eq p6
307
  if __CPU_type eq p6
308
        push    ebp
308
        push    ebp
309
        mov     ebp, esp
309
        mov     ebp, esp
310
        push    ..ret_point     ; it may be 2 or 5 byte
310
        push    ..ret_point     ; it may be 2 or 5 byte
311
        sysenter
311
        sysenter
312
 ..ret_point:
312
 ..ret_point:
313
        pop     edx
313
        pop     edx
314
        pop     ecx
314
        pop     ecx
315
 
315
 
316
  else
316
  else
317
   if __CPU_type eq k6
317
   if __CPU_type eq k6
318
        push    ecx
318
        push    ecx
319
        syscall
319
        syscall
320
        pop     ecx
320
        pop     ecx
321
   else
321
   else
322
        display 'ERROR : unknown CPU type (set to p5)', 10, 13
322
        display 'ERROR : unknown CPU type (set to p5)', 10, 13
323
        __CPU_type equ p5
323
        __CPU_type equ p5
324
        int     0x40
324
        int     0x40
325
   end if
325
   end if
326
  end if
326
  end if
327
 end if
327
 end if
328
}
328
}
329
 
329
 
330
 
330
 
331
; -------------------------
331
; -------------------------
332
macro header a,[b] {
332
macro header a,[b] {
333
 common
333
 common
334
  use32
334
  use32
335
  org 0
335
  org 0
336
  db 'MENUET',a
336
  db 'MENUET',a
337
 forward
337
 forward
338
  if b eq
338
  if b eq
339
   dd 0
339
   dd 0
340
  else
340
  else
341
   dd b
341
   dd b
342
  end if }
342
  end if }
343
macro section name { align 16
343
macro section name { align 16
344
 label name }
344
 label name }
345
macro func name {
345
macro func name {
346
 if ~used name
346
 if ~used name
347
  display 'FUNC NOT USED: ',`name,13,10
347
  display 'FUNC NOT USED: ',`name,13,10
348
 else
348
 else
349
  align 4
349
  align 4
350
  name:
350
  name:
351
  ;diff16 `name,0,name
351
  ;diff16 `name,0,name
352
;pushad
352
;pushad
353
;pushfd
353
;pushfd
354
;dps `name
354
;dps `name
355
;newline
355
;newline
356
;mcall 5,1
356
;mcall 5,1
357
;popfd
357
;popfd
358
;popad
358
;popad
359
}
359
}
360
macro endf { end if }
360
macro endf { end if }
361
 
361
 
362
macro diff16 title,l1,l2
362
macro diff16 title,l1,l2
363
 {
363
 {
364
  local s,d
364
  local s,d
365
  s = l2-l1
365
  s = l2-l1
366
  display title,': 0x'
366
  display title,': 0x'
367
  repeat 8
367
  repeat 8
368
   d = '0' + s shr ((8-%) shl 2) and $0F
368
   d = '0' + s shr ((8-%) shl 2) and $0F
369
   if d > '9'
369
   if d > '9'
370
    d = d + 'A'-'9'-1
370
    d = d + 'A'-'9'-1
371
   end if
371
   end if
372
   display d
372
   display d
373
  end repeat
373
  end repeat
374
  display 13,10
374
  display 13,10
375
 }
375
 }
376
 
376
 
377
macro diff10 title,l1,l2
377
macro diff10 title,l1,l2
378
 {
378
 {
379
  local s,d,z,m
379
  local s,d,z,m
380
  s = l2-l1
380
  s = l2-l1
381
  z = 0
381
  z = 0
382
  m = 1000000000
382
  m = 1000000000
383
  display title,': '
383
  display title,': '
384
  repeat 10
384
  repeat 10
385
   d = '0' + s / m
385
   d = '0' + s / m
386
   s = s - (s/m)*m
386
   s = s - (s/m)*m
387
   m = m / 10
387
   m = m / 10
388
   if d <> '0'
388
   if d <> '0'
389
    z = 1
389
    z = 1
390
   end if
390
   end if
391
   if z <> 0
391
   if z <> 0
392
    display d
392
    display d
393
   end if
393
   end if
394
  end repeat
394
  end repeat
395
  display 13,10
395
  display 13,10
396
 }
396
 }
397
 
397
 
398
; optimize the code for size
398
; optimize the code for size
399
__regs fix 
399
__regs fix 
400
 
-
 
401
macro cmp arg1,arg2
-
 
402
{
-
 
403
  if (arg1 in __regs) & (arg2 eqtype 0)
-
 
404
    if (arg2) = 0
-
 
405
      test arg1,arg1
-
 
406
    else
-
 
407
      cmp arg1,arg2
-
 
408
    end if
-
 
409
  else
-
 
410
    cmp arg1,arg2
-
 
411
  end if
-
 
412
}
-
 
413
 
-
 
414
macro add arg1,arg2
-
 
415
 {
-
 
416
   if (arg2 eqtype 0)
-
 
417
      if (arg2) = 1
-
 
418
     inc arg1
-
 
419
      else
-
 
420
     add arg1,arg2
-
 
421
      end if
-
 
422
   else
-
 
423
      add arg1,arg2
-
 
424
   end if
-
 
425
 }
-
 
426
 
-
 
427
macro sub arg1,arg2
-
 
428
 {
-
 
429
   if (arg2 eqtype 0)
-
 
430
      if (arg2) = 1
-
 
431
     dec arg1
-
 
432
      else
-
 
433
     sub arg1,arg2
-
 
434
      end if
-
 
435
   else
-
 
436
      sub arg1,arg2
-
 
437
   end if
-
 
438
 }
-
 
439
 
400
 
440
macro mov arg1,arg2
401
macro mov arg1,arg2
441
 {
402
 {
442
   if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
403
   if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
443
      if (arg2) = 0
404
      if (arg2) = 0
444
     xor arg1,arg1
405
     xor arg1,arg1
445
      else if (arg2) = 1
406
      else if (arg2) = 1
446
     xor arg1,arg1
407
     xor arg1,arg1
447
     inc arg1
408
     inc arg1
448
      else if (arg2) = -1
409
      else if (arg2) = -1
449
     or  arg1,-1
410
     or  arg1,-1
450
      else if (arg2) > -128 & (arg2) < 128
411
      else if (arg2) > -128 & (arg2) < 128
451
     push arg2
412
     push arg2
452
     pop  arg1
413
     pop  arg1
453
      else
414
      else
454
     mov  arg1,arg2
415
     mov  arg1,arg2
455
      end if
416
      end if
456
   else
417
   else
457
      mov arg1,arg2
418
      mov arg1,arg2
458
   end if
419
   end if
459
 }
420
 }
460
 
421
 
461
 
422
 
462
macro RGB [a] {
423
macro RGB [a] {
463
 common
424
 common
464
  match (r=,g=,b),a \{
425
  match (r=,g=,b),a \{
465
   \dd ((r) shl 16) or ((g) shl 8) or (b)
426
   \dd ((r) shl 16) or ((g) shl 8) or (b)
466
  \}
427
  \}
467
}
428
}
468
 
429
 
469
 
430
 
470
struc POINT _t,_dx,_dy {
431
struc POINT _t,_dx,_dy {
471
 .x _t _dx
432
 .x _t _dx
472
 .y _t _dy
433
 .y _t _dy
473
}
434
}
474
 
435
 
475
; structure definition helper
436
; structure definition helper
476
include 'struct.inc'
437
include 'struct.inc'
477
 
438
 
478
struct RECT
439
struct RECT
479
  left   dd ?
440
  left   dd ?
480
  top    dd ?
441
  top    dd ?
481
  right  dd ?
442
  right  dd ?
482
  bottom dd ?
443
  bottom dd ?
483
ends
444
ends
484
 
445
 
485
struct BOX
446
struct BOX
486
  left   dd ?
447
  left   dd ?
487
  top    dd ?
448
  top    dd ?
488
  width  dd ?
449
  width  dd ?
489
  height dd ?
450
  height dd ?
490
ends
451
ends
491
 
452
 
492
; structures used in KolibriOS
453
; structures used in KolibriOS
493
struct process_information
454
struct process_information
494
  cpu_usage               dd ?  ; +0
455
  cpu_usage               dd ?  ; +0
495
  window_stack_position   dw ?  ; +4
456
  window_stack_position   dw ?  ; +4
496
  window_stack_value      dw ?  ; +6
457
  window_stack_value      dw ?  ; +6
497
                          dw ?  ; +8
458
                          dw ?  ; +8
498
  process_name            rb 12 ; +10
459
  process_name            rb 12 ; +10
499
  memory_start            dd ?  ; +22
460
  memory_start            dd ?  ; +22
500
  used_memory             dd ?  ; +26
461
  used_memory             dd ?  ; +26
501
  PID                     dd ?  ; +30
462
  PID                     dd ?  ; +30
502
  box                     BOX   ; +34
463
  box                     BOX   ; +34
503
  slot_state              dw ?  ; +50
464
  slot_state              dw ?  ; +50
504
                          dw ?  ; +52
465
                          dw ?  ; +52
505
  client_box              BOX   ; +54
466
  client_box              BOX   ; +54
506
  wnd_state               db ?  ; +70
467
  wnd_state               db ?  ; +70
507
  rb (1024-71)
468
  rb (1024-71)
508
ends
469
ends
509
 
470
 
510
struct system_colors
471
struct system_colors
511
  frame            dd ?
472
  frame            dd ?
512
  grab             dd ?
473
  grab             dd ?
513
  grab_button      dd ?
474
  grab_button      dd ?
514
  grab_button_text dd ?
475
  grab_button_text dd ?
515
  grab_text        dd ?
476
  grab_text        dd ?
516
  work             dd ?
477
  work             dd ?
517
  work_button      dd ?
478
  work_button      dd ?
518
  work_button_text dd ?
479
  work_button_text dd ?
519
  work_text        dd ?
480
  work_text        dd ?
520
  work_graph       dd ?
481
  work_graph       dd ?
521
ends
482
ends
522
 
483
 
523
struct sys_colors_new
484
struct sys_colors_new
524
  menu_body      dd ?
485
  menu_body      dd ?
525
  3d_face        dd ?
486
  3d_face        dd ?
526
  3d_dark        dd ?
487
  3d_dark        dd ?
527
  3d_light       dd ?
488
  3d_light       dd ?
528
  win_title      dd ?
489
  win_title      dd ?
529
  win_body       dd ?
490
  win_body       dd ?
530
  btn_face       dd ?
491
  btn_face       dd ?
531
  btn_text       dd ?
492
  btn_text       dd ?
532
  win_text       dd ?
493
  win_text       dd ?
533
  panel_frame    dd ?
494
  panel_frame    dd ?
534
  win_face       dd ?
495
  win_face       dd ?
535
  win_inface     dd ?
496
  win_inface     dd ?
536
  win_frame      dd ?
497
  win_frame      dd ?
537
  win_inframe    dd ?
498
  win_inframe    dd ?
538
  win_border     dd ?
499
  win_border     dd ?
539
  win_inborder   dd ?
500
  win_inborder   dd ?
540
  win_graytext   dd ?
501
  win_graytext   dd ?
541
  menu_frame     dd ?
502
  menu_frame     dd ?
542
  menu_text      dd ?
503
  menu_text      dd ?
543
  panel_body     dd ?
504
  panel_body     dd ?
544
  panel_text     dd ?
505
  panel_text     dd ?
545
  hint_frame     dd ?
506
  hint_frame     dd ?
546
  hint_body      dd ?
507
  hint_body      dd ?
547
  hint_text      dd ?
508
  hint_text      dd ?
548
  btn_inface     dd ?
509
  btn_inface     dd ?
549
  btn_fcface     dd ?
510
  btn_fcface     dd ?
550
  btn_frame      dd ?
511
  btn_frame      dd ?
551
  btn_inframe    dd ?
512
  btn_inframe    dd ?
552
  btn_fcframe    dd ?
513
  btn_fcframe    dd ?
553
  btn_intext     dd ?
514
  btn_intext     dd ?
554
  btn_fctext     dd ?
515
  btn_fctext     dd ?
555
  gui_shadow     dd ?
516
  gui_shadow     dd ?
556
  gui_face       dd ?
517
  gui_face       dd ?
557
  gui_inface     dd ?
518
  gui_inface     dd ?
558
  gui_fcface     dd ?
519
  gui_fcface     dd ?
559
  gui_frame      dd ?
520
  gui_frame      dd ?
560
  gui_inframe    dd ?
521
  gui_inframe    dd ?
561
  gui_fcframe    dd ?
522
  gui_fcframe    dd ?
562
  gui_text       dd ?
523
  gui_text       dd ?
563
  gui_intext     dd ?
524
  gui_intext     dd ?
564
  gui_fctext     dd ?
525
  gui_fctext     dd ?
565
  gui_select     dd ?
526
  gui_select     dd ?
566
  res_var_a      dd ?
527
  res_var_a      dd ?
567
  res_var_b      dd ?
528
  res_var_b      dd ?
568
  res_var_c      dd ?
529
  res_var_c      dd ?
569
  res_var_d      dd ?
530
  res_var_d      dd ?
570
  res_var_e      dd ?
531
  res_var_e      dd ?
571
  res_var_f      dd ?
532
  res_var_f      dd ?
572
ends
533
ends
573
 
534
 
574
struct FILEDATE
535
struct FILEDATE
575
  Second db ?
536
  Second db ?
576
  Minute db ?
537
  Minute db ?
577
  Hour   db ?
538
  Hour   db ?
578
         db ?
539
         db ?
579
  Day    db ?
540
  Day    db ?
580
  Month  db ?
541
  Month  db ?
581
  Year   dw ?
542
  Year   dw ?
582
ends
543
ends
583
 
544
 
584
struct FILEINFO
545
struct FILEINFO
585
  Attributes dd ?
546
  Attributes dd ?
586
  IsUnicode  db ?
547
  IsUnicode  db ?
587
             db 3 dup(?)
548
             db 3 dup(?)
588
  DateCreate FILEDATE
549
  DateCreate FILEDATE
589
  DateAccess FILEDATE
550
  DateAccess FILEDATE
590
  DateModify FILEDATE
551
  DateModify FILEDATE
591
  Size       dq ?
552
  Size       dq ?
592
ends
553
ends
593
 
554
 
594
cmove   fix     cmovz
555
cmove   fix     cmovz
595
 
556
 
596
macro cmovz reg1, reg2 {
557
macro cmovz reg1, reg2 {
597
 
558
 
598
        local   ..jumpaddr
559
        local   ..jumpaddr
599
 
560
 
600
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
561
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
601
        jnz     ..jumpaddr
562
        jnz     ..jumpaddr
602
        mov     reg1, reg2
563
        mov     reg1, reg2
603
  ..jumpaddr:
564
  ..jumpaddr:
604
else
565
else
605
        cmovz   reg1, reg2
566
        cmovz   reg1, reg2
606
end if
567
end if
607
 
568
 
608
}
569
}
609
 
570
 
610
cmovne  fix     cmovnz
571
cmovne  fix     cmovnz
611
 
572
 
612
macro cmovnz reg1, reg2 {
573
macro cmovnz reg1, reg2 {
613
 
574
 
614
        local   ..jumpaddr
575
        local   ..jumpaddr
615
 
576
 
616
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
577
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
617
        jz      ..jumpaddr
578
        jz      ..jumpaddr
618
        mov     reg1, reg2
579
        mov     reg1, reg2
619
  ..jumpaddr:
580
  ..jumpaddr:
620
else
581
else
621
        cmovnz  reg1, reg2
582
        cmovnz  reg1, reg2
622
end if
583
end if
623
 
584
 
624
}
585
}
625
 
586
 
626
macro cmovg reg1, reg2 {
587
macro cmovg reg1, reg2 {
627
 
588
 
628
        local   ..jumpaddr
589
        local   ..jumpaddr
629
 
590
 
630
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
591
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
631
        jle     ..jumpaddr
592
        jle     ..jumpaddr
632
        mov     reg1, reg2
593
        mov     reg1, reg2
633
  ..jumpaddr:
594
  ..jumpaddr:
634
else
595
else
635
        cmovg   reg1, reg2
596
        cmovg   reg1, reg2
636
end if
597
end if
637
}
598
}
638
 
599
 
639
macro cmovl reg1, reg2 {
600
macro cmovl reg1, reg2 {
640
 
601
 
641
        local   ..jumpaddr
602
        local   ..jumpaddr
642
 
603
 
643
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
604
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
644
        jge     ..jumpaddr
605
        jge     ..jumpaddr
645
        mov     reg1, reg2
606
        mov     reg1, reg2
646
  ..jumpaddr:
607
  ..jumpaddr:
647
else
608
else
648
        cmovl   reg1, reg2
609
        cmovl   reg1, reg2
649
end if
610
end if
650
}
611
}
651
 
612
 
652
; constants
613
; constants
653
 
614
 
654
; events
615
; events
655
EV_IDLE        = 0
616
EV_IDLE        = 0
656
EV_TIMER       = 0
617
EV_TIMER       = 0
657
EV_REDRAW      = 1
618
EV_REDRAW      = 1
658
EV_KEY         = 2
619
EV_KEY         = 2
659
EV_BUTTON      = 3
620
EV_BUTTON      = 3
660
EV_EXIT        = 4
621
EV_EXIT        = 4
661
EV_BACKGROUND  = 5
622
EV_BACKGROUND  = 5
662
EV_MOUSE       = 6
623
EV_MOUSE       = 6
663
EV_IPC         = 7
624
EV_IPC         = 7
664
EV_STACK       = 8
625
EV_STACK       = 8
665
 
626
 
666
; event mask bits for function 40
627
; event mask bits for function 40
667
EVM_REDRAW     =          1b
628
EVM_REDRAW     =          1b
668
EVM_KEY        =         10b
629
EVM_KEY        =         10b
669
EVM_BUTTON     =        100b
630
EVM_BUTTON     =        100b
670
EVM_EXIT       =       1000b
631
EVM_EXIT       =       1000b
671
EVM_BACKGROUND =      10000b
632
EVM_BACKGROUND =      10000b
672
EVM_MOUSE      =     100000b
633
EVM_MOUSE      =     100000b
673
EVM_IPC        =    1000000b
634
EVM_IPC        =    1000000b
674
EVM_STACK      =   10000000b
635
EVM_STACK      =   10000000b
675
EVM_DEBUG      =  100000000b
636
EVM_DEBUG      =  100000000b
676
EVM_STACK2     = 1000000000b
637
EVM_STACK2     = 1000000000b
677
 
638
 
678
EVM_MOUSE_FILTER = 0x80000000
639
EVM_MOUSE_FILTER = 0x80000000
679
EVM_CURSOR_FILTER = 0x40000000
640
EVM_CURSOR_FILTER = 0x40000000