Subversion Repositories Kolibri OS

Rev

Rev 9604 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
485 heavyiron 1
@^ fix macro comment {
2
^@ fix }
3
 
8056 leency 4
; --------------------------
4795 Akyltist 5
macro library [lname,fname]
6
{
7
  forward
8
    dd __#lname#_library_table__,__#lname#_library_name__
9
  common
10
    dd 0
11
  forward
12
    align 4
13
    __#lname#_library_name__ db fname,0
14
}
485 heavyiron 15
 
4795 Akyltist 16
macro import lname,[name,sname]
17
{
18
  common
19
    align 4
20
    __#lname#_library_table__:
21
  forward
22
    if used name
23
      name dd __#name#_import_name__
24
    end if
25
  common
26
    dd 0
27
  forward
28
    if used name
29
      align 4
30
      __#name#_import_name__ db sname,0
31
    end if
32
}
33
 
34
macro export [name,sname]
35
{
36
  forward
37
    dd __#name#_export_name__,name
38
  common
39
    dd 0
40
  forward
41
    align 4
42
    __#name#_export_name__ db sname,0
43
}
44
; -------------------------
45
 
485 heavyiron 46
macro m2m dest,src {
47
 push src
48
 pop  dest
49
}
50
 
51
 
52
macro iglobal {
53
  IGlobals equ IGlobals,
54
  macro __IGlobalBlock { }
7134 dunkaist 55
 
485 heavyiron 56
macro uglobal {
57
  UGlobals equ UGlobals,
58
  macro __UGlobalBlock { }
59
 
60
endg fix }      ; Use endg for ending iglobal and uglobal blocks.
61
 
62
 
63
macro IncludeIGlobals{
64
  macro IGlobals dummy,[n] \{ __IGlobalBlock
65
     purge __IGlobalBlock  \}
66
  match I, IGlobals \{ I \} }
67
 
68
macro IncludeUGlobals{
69
  macro UGlobals dummy,[n] \{
70
    \common
71
      \local begin, size
72
      begin = $
73
      virtual at $
74
    \forward
75
      __UGlobalBlock
76
      purge __UGlobalBlock
77
    \common
78
      size = $ - begin
79
    end virtual
80
    rb size
81
  \}
82
  match U, UGlobals \{ U \} }
83
 
84
uglobal
85
endg
7134 dunkaist 86
 
485 heavyiron 87
iglobal
88
endg
89
 
90
 
91
; new application structure
92
macro meos_app_start
93
 {
94
  use32
95
  org 0x0
96
 
97
  db 'MENUET01'
98
  dd 0x01
99
  dd __start
100
  dd __end
101
  dd __memory
102
  dd __stack
103
 
104
  if used __params & ~defined __params
105
    dd __params
106
  else
107
    dd 0x0
108
  end if
109
 
110
  dd 0x0
111
 }
112
MEOS_APP_START fix meos_app_start
8162 maxcodehac 113
KOS_APP_START fix meos_app_start
485 heavyiron 114
 
115
macro code
116
 {
117
  __start:
118
 }
119
CODE fix code
120
 
121
macro data
122
 {
123
  __data:
124
  IncludeIGlobals
125
 }
126
DATA fix data
127
 
128
macro udata
129
 {
130
  if used __params & ~defined __params
131
    __params:
132
      db 0
133
    __end:
134
      rb 255
135
  else
136
    __end:
137
  end if
138
  __udata:
139
  IncludeUGlobals
140
 }
141
UDATA fix udata
142
 
143
macro meos_app_end
144
 {
145
  align 32
146
  rb 2048
147
  __stack:
148
  __memory:
149
 }
150
MEOS_APP_END fix meos_app_end
8162 maxcodehac 151
KOS_APP_END fix meos_app_end
485 heavyiron 152
 
153
 
154
; macro for defining multiline text data
155
struc mstr [sstring]
156
 {
157
  forward
158
    local ssize
159
    virtual at 0
160
      db sstring
161
      ssize = $
162
    end virtual
163
    dd ssize
164
    db sstring
165
  common
166
    dd -1
167
 }
168
 
169
; macro for defining multiline text data
170
struc mls [sstring]
171
 {
172
  forward
173
    local ssize
174
    virtual at 0
175
      db sstring  ; mod
176
      ssize = $
177
    end virtual
178
    db ssize
179
    db sstring
180
  common
181
    db -1         ; mod
182
 }
183
 
184
 
185
 
186
; strings
7774 leency 187
macro sz name,[data] {       ; [mike.dld]
485 heavyiron 188
 common
189
  if used name
190
   name db data
191
   .size = $-name
192
  end if
193
}
194
 
5943 pathoswith 195
macro szZ name,[data] {      ; same as sz, but for zero terminated string [dunkaist]
1567 dunkaist 196
 common
197
  if used name
198
   name db data,0
199
   .size = $-name-1
200
  end if
201
}
202
sz0 fix szZ
203
 
7774 leency 204
macro lsz name,[lng,data] {  ; [mike.dld]
485 heavyiron 205
 common
206
  if used name
207
   label name
208
 forward
209
  if lang eq lng
210
   db data
211
  end if
212
 common
213
   .size = $-name
214
  end if
215
}
216
 
7774 leency 217
macro szc name,elsz,[data] {     ; [mike.dld]
485 heavyiron 218
 common
219
  local s,m
220
  m = 0
221
  if used name
222
   label name
223
 forward
224
   virtual at 0
225
    db data
226
    s = $
227
   end virtual
228
   d#elsz s
229
   if m < s
230
    m = s
231
   end if
232
   db data
233
 common
234
   .size = $-name
235
   .maxl = m
236
  end if
237
}
238
 
7774 leency 239
macro lszc name,elsz,[lng,data] {  ; [mike.dld]
485 heavyiron 240
 common
241
  local s,m,c
242
  m = 0
243
  c = 0
244
  if used name
245
   label name
246
 forward
247
  if lang eq lng
248
   virtual at 0
249
    db data
250
    s = $
251
   end virtual
252
   d#elsz s
253
   if m < s
254
    m = s
255
   end if
256
   db data
257
   c = c+1
258
  end if
259
 common
260
   .size  = $-name
261
   .maxl  = m
262
   .count = c
263
  end if
264
}
265
 
266
 
267
; easy system call macro
268
macro mpack dest, hsrc, lsrc
269
{
270
  if (hsrc eqtype 0) & (lsrc eqtype 0)
271
    mov dest, (hsrc) shl 16 + lsrc
272
  else
273
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
274
      mov dest, (hsrc) shl 16
275
      add dest, lsrc
276
    else