Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1805 yogev_ezra 1
; new application structure
2
macro meos_app_start
3
 {
4
  use32
5
  org 0x0
6
 
7
  db 'MENUET01'
8
  dd 0x01
9
  dd __start
10
  dd __end
11
  dd __memory
12
  dd __stack
13
 
14
  if used __params & ~defined __params
15
    dd __params
16
  else
17
    dd 0x0
18
  end if
19
 
20
  dd 0x0
21
 }
22
MEOS_APP_START fix meos_app_start
23
 
24
macro code
25
 {
26
  __start:
27
 }
28
CODE fix code
29
 
30
macro data
31
 {
32
  __data:
33
 }
34
DATA fix data
35
 
36
macro udata
37
 {
38
  if used __params & ~defined __params
39
    __params:
40
      db 0
41
    __end:
42
      rb 255
43
  else
44
    __end:
45
  end if
46
  __udata:
47
 }
48
UDATA fix udata
49
 
50
macro meos_app_end
51
 {
52
  align 32
53
  rb 2048
54
  __stack:
55
  __memory:
56
  __end:
57
 }
58
MEOS_APP_END fix meos_app_end
59
 
60
 
61
; macro for defining multiline text data
62
struc mstr [sstring]
63
 {
64
  forward
65
    local ssize
66
    virtual at 0
67
      db sstring
68
      ssize = $
69
    end virtual
70
    dd ssize
71
    db sstring
72
  common
73
    dd -1
74
 }
75
 
76
 
77
; strings
78
macro sz name,[data] {       ; from MFAR [mike.dld]
79
  common
80
   if used name
81
    label name
82
   end if
83
  forward
84
   if used name
85
    db data
86
   end if
87
  common
88
   if used name
89
    .size = $-name
90
   end if
91
}
92
 
93
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
94
  common
95
   if used name
96
    label name
97
   end if
98
  forward
99
   if (used name)&(lang eq lng)
100
    db data
101
   end if
102
  common
103
   if used name
104
    .size = $-name
105
   end if
106
}
107
 
108
 
109
 
110
; easy system call macro
111
macro mpack dest, hsrc, lsrc
112
{
113
  if (hsrc eqtype 0) & (lsrc eqtype 0)
114
    mov dest, (hsrc) shl 16 + lsrc
115
  else
116
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
117
      mov dest, (hsrc) shl 16
118
      add dest, lsrc
119
    else
120
      mov dest, hsrc
121
      shl dest, 16
122
      add dest, lsrc
123
    end if
124
  end if
125
}
126
 
127
macro __mov reg,a,b {         ; mike.dld
128
 if (~a eq)&(~b eq)
129
   mpack reg,a,b
130
 else if (~a eq)&(b eq)
131
   mov reg,a
132
 end if
133
}
134
 
135
macro mcall a,b,c,d,e,f {   ; mike.dld
136
 __mov eax,a
137
 __mov ebx,b
138
 __mov ecx,c
139
 __mov edx,d
140
 __mov esi,e
141
 __mov edi,f
142
 int   0x40
143
}
144
 
145
 
146
 
147
; optimize the code for size
148
__regs fix 
149
 
150
macro add arg1,arg2
151
 {
152
   if (arg2 eqtype 0)
153
      if (arg2) = 1
154
         inc arg1
155
      else
156
         add arg1,arg2
157
      end if
158
   else
159
      add arg1,arg2
160
   end if
161
 }
162
 
163
macro sub arg1,arg2
164
 {
165
   if (arg2 eqtype 0)
166
      if (arg2) = 1
167
         dec arg1
168
      else
169
         sub arg1,arg2
170
      end if
171
   else
172
      sub arg1,arg2
173
   end if
174
 }
175
 
176
macro mov arg1,arg2
177
 {
178
   if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
179
      if (arg2) = 0
180
         xor arg1,arg1
181
      else if (arg2) = 1
182
         xor arg1,arg1
183
         inc arg1
184
      else if (arg2) = -1
185
         or  arg1,-1
186
      else if (arg2) > -128 & (arg2) < 128
187
         push arg2
188
         pop  arg1
189
      else
190
         mov  arg1,arg2
191
      end if
192
   else
193
      mov arg1,arg2
194
   end if
195
 }
196
 
197
 
198
macro struct name
199
 {
200
  virtual at 0
201
   name name
202
   sizeof.#name = $ - name
203
  end virtual
204
 }
205
 
206
; structures used in MeOS
207
struc process_information
208
 {
209
  .cpu_usage               dd ?  ; +0
210
  .window_stack_position   dw ?  ; +4
211
  .window_stack_value      dw ?  ; +6
212
  .not_used1               dw ?  ; +8
213
  .process_name            rb 12 ; +10
214
  .memory_start            dd ?  ; +22
215
  .used_memory             dd ?  ; +26
216
  .PID                     dd ?  ; +30
217
  .x_start                 dd ?  ; +34
218
  .y_start                 dd ?  ; +38
219
  .x_size                  dd ?  ; +42
220
  .y_size                  dd ?  ; +46
221
  .slot_state              dw ?  ; +50
222
                           dw ?  ; +52 - reserved
223
  .client_left             dd ?  ; +54
224
  .client_top              dd ?  ; +58
225
  .client_width            dd ?  ; +62
226
  .client_height           dd ?  ; +66
227
  .wnd_state               db ?  ; +70
228
  rb (1024-71)
229
 }
230
struct process_information
231
 
232
struc system_colors
233
 {
234
  .frame            dd ?
235
  .grab             dd ?
6196 leency 236
  .work_3d_dark      dd ?
237
  .work_3d_light dd ?
1805 yogev_ezra 238
  .grab_text        dd ?
239
  .work             dd ?
240
  .work_button      dd ?
241
  .work_button_text dd ?
242
  .work_text        dd ?
243
  .work_graph       dd ?
244
 }
245
struct system_colors
246
 
247
 
248
; constants
249
 
250
; events
251
EV_IDLE        = 0
252
EV_TIMER       = 0
253
EV_REDRAW      = 1
254
EV_KEY         = 2
255
EV_BUTTON      = 3
256
EV_EXIT        = 4
257
EV_BACKGROUND  = 5
258
EV_MOUSE       = 6
259
EV_IPC         = 7
260
EV_STACK       = 8
261
 
262
; event mask bits for function 40
263
EVM_REDRAW     =        1b
264
EVM_KEY        =       10b
265
EVM_BUTTON     =      100b
266
EVM_EXIT       =     1000b
267
EVM_BACKGROUND =    10000b
268
EVM_MOUSE      =   100000b
269
EVM_IPC        =  1000000b
270
EVM_STACK      = 10000000b