Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4867 leency 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
 }
57
MEOS_APP_END fix meos_app_end
58
 
59
 
60
; macro for defining multiline text data
61
struc mstr [sstring]
62
 {
63
  forward
64
    local ssize
65
    virtual at 0
66
      db sstring
67
      ssize = $
68
    end virtual
69
    dd ssize
70
    db sstring
71
  common
72
    dd -1
73
 }
74
 
75
 
76
; strings
77
macro sz name,[data] {       ; from MFAR [mike.dld]
78
  common
79
   if used name
80
    label name
81
   end if
82
  forward
83
   if used name
84
    db data
85
   end if
86
  common
87
   if used name
88
    .size = $-name
89
   end if
90
}
91
 
92
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
93
  common
94
    label name
95
  forward
96
   if lang eq lng
97
    db data
98
   end if
99
  common
100
    .size = $-name
101
}
102
 
103
 
104
 
105
; easy system call macro
106
macro mpack dest, hsrc, lsrc
107
{
108
  if (hsrc eqtype 0) & (lsrc eqtype 0)
109
    mov dest, (hsrc) shl 16 + lsrc
110
  else
111
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
112
      mov dest, (hsrc) shl 16
113
      add dest, lsrc
114
    else
115
      mov dest, hsrc
116
      shl dest, 16
117
      add dest, lsrc
118
    end if
119
  end if
120
}
121
 
122
macro __mov reg,a,b {         ; mike.dld
123
 if (~a eq)&(~b eq)
124
   mpack reg,a,b
125
 else if (~a eq)&(b eq)
126
   mov reg,a
127
 end if
128
}
129
 
130
macro mcall a,b,c,d,e,f {   ; mike.dld
131
 __mov eax,a
132
 __mov ebx,b
133
 __mov ecx,c
134
 __mov edx,d
135
 __mov esi,e
136
 __mov edi,f
137
 int   0x40
138
}
139
 
140
 
141
 
142
; language for programs
143
;lang fix ru ; ru en fr ge fi
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)
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
  rb (1024-52)
223
 }
224
struct process_information
225
 
226
struc system_colors
227
 {
228
  .frame            dd ?
229
  .grab             dd ?
6196 leency 230
  .work_3d_dark      dd ?
231
  .work_3d_light dd ?
4867 leency 232
  .grab_text        dd ?
233
  .work             dd ?
234
  .work_button      dd ?
235
  .work_button_text dd ?
236
  .work_text        dd ?
237
  .work_graph       dd ?
238
 }
239
struct system_colors
240
 
241
 
242
; constants
243
 
244
; events
245
EV_IDLE        = 0
246
EV_TIMER       = 0
247
EV_REDRAW      = 1
248
EV_KEY         = 2
249
EV_BUTTON      = 3
250
EV_EXIT        = 4
251
EV_BACKGROUND  = 5
252
EV_MOUSE       = 6
253
EV_IPC         = 7
254
EV_STACK       = 8
255
 
256
; event mask bits for function 40
257
EVM_REDRAW     =        1b
258
EVM_KEY        =       10b
259
EVM_BUTTON     =      100b
260
EVM_EXIT       =     1000b
261
EVM_BACKGROUND =    10000b
262
EVM_MOUSE      =   100000b
263
EVM_IPC        =  1000000b
264
EVM_STACK      = 10000000b