Subversion Repositories Kolibri OS

Rev

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

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