Subversion Repositories Kolibri OS

Rev

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

Rev 7785 Rev 7988
1
use32
1
use32
2
    org     0
2
    org     0
3
    db	    'MENUET01'
3
    db	    'MENUET01'
4
    dd	    1, @ENTRY, @end, @memory, @stack, @params, 0
4
    dd	    1, @ENTRY, @end, @memory, @stack, @params, 0
5
 
5
 
6
    include "../../macros.inc"
6
    include "../../macros.inc"
7
    include "../../proc32.inc"
7
    include "../../proc32.inc"
8
    include "../../dll.inc"
8
    include "../../dll.inc"
9
;    include "../../debug.inc"
9
;    include "../../debug.inc"
10
    include "../../string.inc"
10
    include "../../string.inc"
11
    
11
    
12
    include "notify.inc"
12
    include "notify.inc"
13
 
13
 
14
 LINEH	    equ 12
14
 LINEH	    equ 12
15
 MARGIN     equ 12
15
 MARGIN     equ 12
16
 ICONS	    equ 11
16
 ICONS	    equ 11
17
 
17
 
18
;-------------------------------------------------------------------------------
18
;-------------------------------------------------------------------------------
19
 
19
 
20
 @ENTRY:
20
 @ENTRY:
21
;; INIT HEAP
21
;; INIT HEAP
22
    mcall   68, 11
22
    mcall   68, 11
23
 
23
 
24
;; SAVE FOCUSED WINDOW
24
;; SAVE FOCUSED WINDOW
25
    mcall   18, 7
25
    mcall   18, 7
26
    mov     ecx, eax
26
    mov     ecx, eax
27
    mcall   9, buffer
27
    mcall   9, buffer
28
    m2m     dword [prev_pid], dword [buffer + 30]
28
    m2m     dword [prev_pid], dword [buffer + 30]
29
 
29
 
30
;; MAKE IT ALWAYS ON TOP
30
;; MAKE IT ALWAYS ON TOP
31
    mcall   18, 25, 2, -1, 1
31
    mcall   18, 25, 2, -1, 1
32
 
32
 
33
;; SET STD PARAMS, IF IT NEEDS
33
;; SET STD PARAMS, IF IT NEEDS
34
    mov     eax, @params
34
    mov     eax, @params
35
    cmpne   byte [@params], 0, @f
35
    cmpne   byte [@params], 0, @f
36
    mov     eax, sz_std
36
    mov     eax, sz_std
37
  @@:
37
  @@:
38
    mov     [params.source], eax
38
    mov     [params.source], eax
39
 
39
 
40
;; PARSE ARGUMENTS
40
;; PARSE ARGUMENTS
41
    mov     esi, 0
41
    mov     esi, 0
42
    call    parse_text
42
    call    parse_text
43
    call    parse_flags
43
    call    parse_flags
44
    movzx   ebx, [params.icon]
44
    movzx   ebx, [params.icon]
45
 
45
 
46
;; GET PID
46
;; GET PID
47
    mcall   9, buffer, -1
47
    mcall   9, buffer, -1
48
    mov     eax, dword [buffer + 30]
48
    mov     eax, dword [buffer + 30]
49
 
49
 
50
;; CONVERT PID TO STR
50
;; CONVERT PID TO STR
51
    mov     ebx, 10
51
    mov     ebx, 10
52
    mov     ecx, 0
52
    mov     ecx, 0
53
  @@:
53
  @@:
54
    mov     edx, 0
54
    mov     edx, 0
55
    div     ebx
55
    div     ebx
56
    push    edx
56
    push    edx
57
    inc     ecx
57
    inc     ecx
58
    cmpne   eax, 0, @b
58
    cmpne   eax, 0, @b
59
 
59
 
60
    mov     ebx, ctrl.name
60
    mov     ebx, ctrl.name
61
  @@:
61
  @@:
62
    pop     eax
62
    pop     eax
63
    add     al, "0"
63
    add     al, "0"
64
    mov     [ebx], al
64
    mov     [ebx], al
65
    inc     ebx
65
    inc     ebx
66
    loop    @b
66
    loop    @b
67
 
67
 
68
    mov     dword [ebx + 0], "-NOT"
68
    mov     dword [ebx + 0], "-NOT"
69
    mov     dword [ebx + 4], "IFY"
69
    mov     dword [ebx + 4], "IFY"
70
 
70
 
71
;; LOAD LIBRARIES
71
;; LOAD LIBRARIES
72
    stdcall dll.Load, @imports
72
    stdcall dll.Load, @imports
73
 
73
 
74
;; GET SIZE OF ICONS
74
;; GET SIZE OF ICONS
75
    mcall   70, fi
75
    mcall   70, fi
76
    mov     edx, dword [buffer + 32]
76
    mov     edx, dword [buffer + 32]
77
    shl     edx, 2
77
    shl     edx, 2
78
 
78
 
79
;; ALLOCATE MEMORY FOR THIS
79
;; ALLOCATE MEMORY FOR THIS
80
    stdcall mem.Alloc, edx
80
    stdcall mem.Alloc, edx
81
    mov     [img_data.rgb_obj], eax
81
    mov     [img_data.file], eax
82
 
82
 
83
;; READ ICONS
83
;; READ ICONS
84
    mov     dword [fi + 00], 0
84
    mov     dword [fi + 00], 0
85
    mov     dword [fi + 12], edx
85
    mov     dword [fi + 12], edx
86
    mov     dword [fi + 16], eax
86
    mov     dword [fi + 16], eax
87
    mcall   70, fi
87
    mcall   70, fi
88
 
88
 
89
;; DECODE ICONS
89
;; DECODE ICONS
90
    stdcall dword [img.decode], dword [img_data.rgb_obj], ebx, 0
90
    stdcall dword [img.decode], dword [img_data.file], ebx, 0
91
    mov     dword [img_data.obj], eax
91
    mov     dword [img_data.obj], eax
92
    stdcall dword [img.to_rgb], dword [img_data.obj], dword [img_data.rgb_obj]
-
 
93
    stdcall dword [img.destroy], dword [img_data.obj]
-
 
94
 
-
 
95
 
-
 
96
 
92
 
97
;; CALC HEIGHT
93
;; CALC HEIGHT
98
    mov     eax, [text.lines]
94
    mov     eax, [text.lines]
99
    add     eax, 2
95
    add     eax, 2
100
    imul    eax, LINEH
96
    imul    eax, LINEH
101
    mov     [window.height], eax
97
    mov     [window.height], eax
102
 
98
 
103
;; CALC OFFSET OF TEXT
99
;; CALC OFFSET OF TEXT
104
    mov     dword [text.offset], MARGIN
100
    mov     dword [text.offset], MARGIN
105
    cmpe    byte [params.icon], 0, @f
101
    cmpe    byte [params.icon], 0, @f
106
    add     dword [text.offset], MARGIN + 24
102
    add     dword [text.offset], MARGIN + 24
107
  @@:
103
  @@:
108
 
104
 
109
;; CALC WIDTH
105
;; CALC WIDTH
110
    mov     eax, [text.max_len]
106
    mov     eax, [text.max_len]
111
    imul    eax, 6
107
    imul    eax, 6
112
    add     eax, MARGIN
108
    add     eax, MARGIN
113
    add     eax, [text.offset]
109
    add     eax, [text.offset]
114
    mov     [window.width], eax
110
    mov     [window.width], eax
115
 
111
 
116
    mcall   14
112
    mcall   14
117
    mov     ebx, eax
113
    mov     ebx, eax
118
    movzx   ebx, bx
114
    movzx   ebx, bx
119
    mov     [scr.height], ebx
115
    mov     [scr.height], ebx
120
    shr     eax, 16
116
    shr     eax, 16
121
    mov     [scr.width], eax
117
    mov     [scr.width], eax
122
    sub     eax, [window.width]
118
    sub     eax, [window.width]
123
    sub     eax, LINEH
119
    sub     eax, LINEH
124
    mov     [window.x], eax
120
    mov     [window.x], eax
125
 
121
 
126
;; CALC PBAR
122
;; CALC PBAR
127
    mov     eax, [window.width]
123
    mov     eax, [window.width]
128
    sub     eax, [text.offset]
124
    sub     eax, [text.offset]
129
    sub     eax, MARGIN
125
    sub     eax, MARGIN
130
    mov     [pbar.width], eax
126
    mov     [pbar.width], eax
131
 
127
 
132
;; CALC Y
128
;; CALC Y
133
    mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS AND WRITE
129
    mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS AND WRITE
134
    add     eax, 512
130
    add     eax, 512
135
    mov     [shm], eax
131
    mov     [shm], eax
136
 
132
 
137
 s_search:
133
 s_search:
138
    mov     eax, [shm]
134
    mov     eax, [shm]
139
 
135
 
140
    mov     ebx, 0
136
    mov     ebx, 0
141
    mov     ecx, [text.lines]
137
    mov     ecx, [text.lines]
142
    add     ecx, 3
138
    add     ecx, 3
143
 
139
 
144
    push    eax ebx
140
    push    eax ebx
145
 
141
 
146
    mov     eax, [scr.height]
142
    mov     eax, [scr.height]
147
    mov     edx, 0
143
    mov     edx, 0
148
    mov     ebx, LINEH
144
    mov     ebx, LINEH
149
    div     ebx
145
    div     ebx
150
    mov     edx, eax
146
    mov     edx, eax
151
    add     edx, [shm]
147
    add     edx, [shm]
152
    sub     edx, ecx
148
    sub     edx, ecx
153
    inc     edx
149
    inc     edx
154
 
150
 
155
    pop     ebx eax
151
    pop     ebx eax
156
 
152
 
157
 s_area:
153
 s_area:
158
    cmpe    [eax], byte 1, .is_1
154
    cmpe    [eax], byte 1, .is_1
159
 
155
 
160
 .is_0:
156
 .is_0:
161
    inc     ebx
157
    inc     ebx
162
    cmpe    ebx, ecx, s_ok
158
    cmpe    ebx, ecx, s_ok
163
    jmp     .next
159
    jmp     .next
164
 
160
 
165
 .is_1:
161
 .is_1:
166
    mov     ebx, 0
162
    mov     ebx, 0
167
 
163
 
168
 .next:
164
 .next:
169
    inc     eax
165
    inc     eax
170
    cmple   eax, edx, s_area
166
    cmple   eax, edx, s_area
171
 
167
 
172
    mcall   5, 10
168
    mcall   5, 10
173
    jmp     s_search
169
    jmp     s_search
174
 
170
 
175
 s_ok:
171
 s_ok:
176
    sub     eax, ecx
172
    sub     eax, ecx
177
    inc     eax
173
    inc     eax
178
    mov     [shm.our], eax
174
    mov     [shm.our], eax
179
 
175
 
180
    mov     edx, eax
176
    mov     edx, eax
181
    sub     edx, [shm]
177
    sub     edx, [shm]
182
    inc     edx
178
    inc     edx
183
    imul    edx, LINEH
179
    imul    edx, LINEH
184
    mov     [window.y], edx
180
    mov     [window.y], edx
185
 
181
 
186
    push    eax ebx
182
    push    eax ebx
187
    mcall   48, 5
183
    mcall   48, 5
188
    shr     ebx, 16
184
    shr     ebx, 16
189
    add     [window.y], ebx
185
    add     [window.y], ebx
190
    pop     ebx eax
186
    pop     ebx eax
191
 
187
 
192
  @@:
188
  @@:
193
    mov     [eax], byte 1
189
    mov     [eax], byte 1
194
    inc     eax
190
    inc     eax
195
    loop    @b
191
    loop    @b
196
 
192
 
197
 ;----------------------------
193
 ;----------------------------
198
 
194
 
199
;; SET EVENT MASK
195
;; SET EVENT MASK
200
    mcall   40, 101b
196
    mcall   40, 101b
201
 
197
 
202
;; INIT TIMER
198
;; INIT TIMER
203
    mov     eax, 60
199
    mov     eax, 60
204
    imul    eax, [text.lines]
200
    imul    eax, [text.lines]
205
    mov     [timer], eax
201
    mov     [timer], eax
206
    mov     dword [timer.step], 1
202
    mov     dword [timer.step], 1
207
    cmpne   byte [params.atcl], 1, @f
203
    cmpne   byte [params.atcl], 1, @f
208
    mov     dword [timer.step], 0
204
    mov     dword [timer.step], 0
209
  @@:
205
  @@:
210
 
206
 
211
;; INIT WINDOW
207
;; INIT WINDOW
212
    call    init_window
208
    call    init_window
213
 
209
 
214
;; RESTORE FOCUS
210
;; RESTORE FOCUS
215
    mcall   18, 21, [prev_pid]
211
    mcall   18, 21, [prev_pid]
216
    mov     ecx, eax
212
    mov     ecx, eax
217
    mcall   18, 3
213
    mcall   18, 3
218
 
214
 
219
    jmp     redraw
215
    jmp     redraw
220
 
216
 
221
 ;----------------------------
217
 ;----------------------------
222
 
218
 
223
 update:
219
 update:
224
    mcall   23, 10
220
    mcall   23, 10
225
    cmpe    al, EV_REDRAW, redraw
221
    cmpe    al, EV_REDRAW, redraw
226
    cmpe    al, EV_BUTTON, button
222
    cmpe    al, EV_BUTTON, button
227
 
223
 
228
    mov     edi, update
224
    mov     edi, update
229
 
225
 
230
;; TRY OPEN CONTROLLER
226
;; TRY OPEN CONTROLLER
231
    cmpe    byte [params.ctrl], 1, .fail_controller_open
227
    cmpe    byte [params.ctrl], 1, .fail_controller_open
232
    mcall   68, 22, ctrl.name, , 0x01
228
    mcall   68, 22, ctrl.name, , 0x01
233
    cmpe    eax, 0, .fail_controller_open
229
    cmpe    eax, 0, .fail_controller_open
234
    mov     byte [params.ctrl], 1
230
    mov     byte [params.ctrl], 1
235
    mov     [ctrl.addr], eax
231
    mov     [ctrl.addr], eax
236
 
232
 
237
;; COPY TEXT TO CTRL
233
;; COPY TEXT TO CTRL
238
    add     eax, NTCTRL_TEXT
234
    add     eax, NTCTRL_TEXT
239
    mov     ebx, text.buffer
235
    mov     ebx, text.buffer
240
 
236
 
241
    mov     ecx, [text.lines]
237
    mov     ecx, [text.lines]
242
    cmpne   byte [params.pbar], 1, @f
238
    cmpne   byte [params.pbar], 1, @f
243
    dec     ecx
239
    dec     ecx
244
  @@:
240
  @@:
245
 
241
 
246
 .copy_start:
242
 .copy_start:
247
    cmpe     ecx, 0, .copy_end
243
    cmpe     ecx, 0, .copy_end
248
    mov      dl, [ebx]
244
    mov      dl, [ebx]
249
    cmpne    dl, 0, @f
245
    cmpne    dl, 0, @f
250
    mov      dl, 10
246
    mov      dl, 10
251
    dec      ecx
247
    dec      ecx
252
  @@:
248
  @@:
253
    mov      [eax], dl
249
    mov      [eax], dl
254
    inc      eax
250
    inc      eax
255
    inc      ebx
251
    inc      ebx
256
    jmp      .copy_start
252
    jmp      .copy_start
257
 .copy_end:
253
 .copy_end:
258
    mov      byte [eax - 1], 0
254
    mov      byte [eax - 1], 0
259
 
255
 
260
;; COPY FLAGS TO CTRL
256
;; COPY FLAGS TO CTRL
261
    mov      eax, [ctrl.addr]
257
    mov      eax, [ctrl.addr]
262
    add      eax, NTCTRL_ICON
258
    add      eax, NTCTRL_ICON
263
    mov      dl, [params.icon]
259
    mov      dl, [params.icon]
264
    mov      [eax], dl
260
    mov      [eax], dl
265
 
261
 
266
    mov      eax, [ctrl.addr]
262
    mov      eax, [ctrl.addr]
267
    add      eax, NTCTRL_TITLE
263
    add      eax, NTCTRL_TITLE
268
    mov      dl,  [params.title]
264
    mov      dl,  [params.title]
269
    mov      [eax], dl
265
    mov      [eax], dl
270
 
266
 
271
;; SET CONTROLLER READY
267
;; SET CONTROLLER READY
272
    mov     eax, [ctrl.addr]
268
    mov     eax, [ctrl.addr]
273
    add     eax, NTCTRL_READY
269
    add     eax, NTCTRL_READY
274
    mov     byte [eax], 1
270
    mov     byte [eax], 1
275
 .fail_controller_open:
271
 .fail_controller_open:
276
 
272
 
277
 
273
 
278
    cmpe    [params.ctrl], 0, .no_ctrl
274
    cmpe    [params.ctrl], 0, .no_ctrl
279
;; TEST TEXT
275
;; TEST TEXT
280
    mov     eax, [ctrl.addr]
276
    mov     eax, [ctrl.addr]
281
    add     eax, NTCTRL_APPLY_TEXT
277
    add     eax, NTCTRL_APPLY_TEXT
282
    cmpne   byte [eax], 1, @f
278
    cmpne   byte [eax], 1, @f
283
    mov     byte [eax], 0
279
    mov     byte [eax], 0
284
 
280
 
285
    mov     eax, [ctrl.addr]
281
    mov     eax, [ctrl.addr]
286
    add     eax, NTCTRL_TEXT
282
    add     eax, NTCTRL_TEXT
287
    mov     esi, 1
283
    mov     esi, 1
288
    call    parse_text
284
    call    parse_text
289
 
285
 
290
    mov     edi, redraw
286
    mov     edi, redraw
291
  @@:
287
  @@:
292
 
288
 
293
;; TEST ICON
289
;; TEST ICON
294
    mov     eax, [ctrl.addr]
290
    mov     eax, [ctrl.addr]
295
    add     eax, NTCTRL_APPLY_ICON
291
    add     eax, NTCTRL_APPLY_ICON
296
    cmpne   byte [eax], 1, @f
292
    cmpne   byte [eax], 1, @f
297
    mov     byte [eax], 0
293
    mov     byte [eax], 0
298
 
294
 
299
    mov     eax, [ctrl.addr]
295
    mov     eax, [ctrl.addr]
300
    add     eax, NTCTRL_ICON
296
    add     eax, NTCTRL_ICON
301
    mov     dl, [eax]
297
    mov     dl, [eax]
302
    mov     [params.icon], dl
298
    mov     [params.icon], dl
303
 
299
 
304
    mov     edi, redraw
300
    mov     edi, redraw
305
  @@:
301
  @@:
306
 
302
 
307
;; TEST TITLE
303
;; TEST TITLE
308
    mov     eax, [ctrl.addr]
304
    mov     eax, [ctrl.addr]
309
    add     eax, NTCTRL_APPLY_TITLE
305
    add     eax, NTCTRL_APPLY_TITLE
310
    cmpne   byte [eax], 1, @f
306
    cmpne   byte [eax], 1, @f
311
    mov     byte [eax], 0
307
    mov     byte [eax], 0
312
 
308
 
313
    mov     eax, [ctrl.addr]
309
    mov     eax, [ctrl.addr]
314
    add     eax, NTCTRL_TITLE
310
    add     eax, NTCTRL_TITLE
315
    mov     dl, [eax]
311
    mov     dl, [eax]
316
    mov     [params.title], dl
312
    mov     [params.title], dl
317
 
313
 
318
    mov     edi, redraw
314
    mov     edi, redraw
319
  @@:
315
  @@:
320
 
316
 
321
;; TEST PBAR
317
;; TEST PBAR
322
    mov     eax, [ctrl.addr]
318
    mov     eax, [ctrl.addr]
323
    add     eax, NTCTRL_APPLY_PBAR
319
    add     eax, NTCTRL_APPLY_PBAR
324
    cmpne   byte [eax], 1, @f
320
    cmpne   byte [eax], 1, @f
325
    mov     byte [eax], 0
321
    mov     byte [eax], 0
326
 
322
 
327
    mov     eax, [ctrl.addr]
323
    mov     eax, [ctrl.addr]
328
    add     eax, NTCTRL_PBAR_CUR
324
    add     eax, NTCTRL_PBAR_CUR
329
    mov     edx, [eax]
325
    mov     edx, [eax]
330
    mov     [pbar.cur_val], edx
326
    mov     [pbar.cur_val], edx
331
 
327
 
332
    mov     eax, [ctrl.addr]
328
    mov     eax, [ctrl.addr]
333
    add     eax, NTCTRL_PBAR_MAX
329
    add     eax, NTCTRL_PBAR_MAX
334
    mov     edx, [eax]
330
    mov     edx, [eax]
335
    mov     [pbar.max_val], edx
331
    mov     [pbar.max_val], edx
336
 
332
 
337
    call    calc_fill_width
333
    call    calc_fill_width
338
 
334
 
339
    mov     edi, redraw
335
    mov     edi, redraw
340
  @@:
336
  @@:
341
 
337
 
342
;; TEST CLOSE
338
;; TEST CLOSE
343
    mov     eax, [ctrl.addr]
339
    mov     eax, [ctrl.addr]
344
    add     eax, NTCTRL_CLOSE
340
    add     eax, NTCTRL_CLOSE
345
    cmpe    byte [eax], 1, exit
341
    cmpe    byte [eax], 1, exit
346
 
342
 
347
 .no_ctrl:
343
 .no_ctrl:
348
 
344
 
349
    mov     eax, [timer.step]
345
    mov     eax, [timer.step]
350
    sub     [timer], eax
346
    sub     [timer], eax
351
    cmpe    [timer], dword 0, exit
347
    cmpe    [timer], dword 0, exit
352
    jmp     edi
348
    jmp     edi
353
 
349
 
354
 ;----------------------------
350
 ;----------------------------
355
 
351
 
356
 exit:
352
 exit:
357
    mov     eax, [shm.our]
353
    mov     eax, [shm.our]
358
    mov     ecx, [text.lines]
354
    mov     ecx, [text.lines]
359
    add     ecx, 3
355
    add     ecx, 3
360
  @@:
356
  @@:
361
    mov     [eax], byte 0
357
    mov     [eax], byte 0
362
    inc     eax
358
    inc     eax
363
    loop    @b
359
    loop    @b
364
 
360
 
365
    mcall   68, 23, sz_shname
361
    mcall   68, 23, sz_shname
366
 
362
 
367
    mcall   -1
363
    mcall   -1
368
 
364
 
369
 ;----------------------------
365
 ;----------------------------
370
 
366
 
371
 button:
367
 button:
372
    mcall   17
368
    mcall   17
373
    cmpe    byte [params.clcl], 0, exit
369
    cmpe    byte [params.clcl], 0, exit
374
    jmp     update
370
    jmp     update
375
 
371
 
376
 ;----------------------------
372
 ;----------------------------
377
 
373
 
378
 redraw:
374
 redraw:
379
    call    draw_window
375
    call    draw_window
380
    call    draw_text
376
    call    draw_text
381
    call    draw_pbar
377
    call    draw_pbar
382
 
378
 
383
    jmp     update
379
    jmp     update
384
 
380
 
385
 ;----------------------------
381
 ;----------------------------
386
 
382
 
387
 draw_window:
383
 draw_window:
388
    call    init_window
384
    call    init_window
389
 
385
 
390
    movzx   ebx, bx
386
    movzx   ebx, bx
391
    movzx   ecx, cx
387
    movzx   ecx, cx
392
    inc     ebx
388
    inc     ebx
393
    inc     ecx
389
    inc     ecx
394
    mcall   8, , , 0x61000001
390
    mcall   8, , , 0x61000001
395
 
391
 
396
    mov     eax, 13
392
    mov     eax, 13
397
    mov     ebx, [window.width]
393
    mov     ebx, [window.width]
398
    mov     edx, 0x222222
394
    mov     edx, 0x222222
399
 
395
 
400
    cmpe    [first_draw], byte 1, .draw_full
396
    cmpe    [first_draw], byte 1, .draw_full
401
    mov     [first_draw], byte 1
397
    mov     [first_draw], byte 1
402
    mov     esi, [window.height]
398
    mov     esi, [window.height]
403
    mov     ecx, LINEH
399
    mov     ecx, LINEH
404
  @@:
400
  @@:
405
    mcall
401
    mcall
406
    add     ecx, LINEH shl 16
402
    add     ecx, LINEH shl 16
407
    sub     esi, LINEH
403
    sub     esi, LINEH
408
    push    eax ebx
404
    push    eax ebx
409
    mcall   5, 1
405
    mcall   5, 1
410
    pop     ebx eax
406
    pop     ebx eax
411
    cmpne   esi, 0, @b
407
    cmpne   esi, 0, @b
412
 
408
 
413
 .draw_full:
409
 .draw_full:
414
    mcall
410
    mcall
415
 
411
 
416
    mcall   , , 1, 0x121212
412
    mcall   , , 1, 0x121212
417
 
413
 
418
    mov     ecx, [window.height]
414
    mov     ecx, [window.height]
419
    dec     ecx
415
    dec     ecx
420
    shl     ecx, 16
416
    shl     ecx, 16
421
    inc     ecx
417
    inc     ecx
422
    mcall
418
    mcall
423
 
419
 
424
    mcall   , 1, [window.width]
420
    mcall   , 1, [window.width]
425
 
421
 
426
    mov     ebx, [window.width]
422
    mov     ebx, [window.width]
427
    dec     ebx
423
    dec     ebx
428
    shl     ebx, 16
424
    shl     ebx, 16
429
    inc     ebx
425
    inc     ebx
430
    mcall
426
    mcall
431
 
427
 
432
    mcall   1, 1, 1
428
    mcall   1, 1, 1
433
    mov     ebx, [window.width]
429
    mov     ebx, [window.width]
434
    sub     ebx, 2
430
    sub     ebx, 2
435
    mcall
431
    mcall
436
    mov     ecx, [window.height]
432
    mov     ecx, [window.height]
437
    sub     ecx, 2
433
    sub     ecx, 2
438
    mcall
434
    mcall
439
    mov     ebx, 1
435
    mov     ebx, 1
440
    mcall
436
    mcall
441
 
437
 
442
 ;-----
438
 ;-----
443
 
439
 
444
    mov     ecx, [scr.width]
440
    mov     ecx, [scr.width]
445
    inc     ecx
441
    inc     ecx
446
 
442
 
447
    mov     eax, 35
443
    mov     eax, 35
448
    mov     ebx, ecx
444
    mov     ebx, ecx
449
    imul    ebx, [window.y]
445
    imul    ebx, [window.y]
450
    add     ebx, [window.x]
446
    add     ebx, [window.x]
451
    dec     ebx
447
    dec     ebx
452
    mcall
448
    mcall
453
    push    eax
449
    push    eax
454
 
450
 
455
    mov     eax, 35
451
    mov     eax, 35
456
    add     ebx, [window.width]
452
    add     ebx, [window.width]
457
    add     ebx, 2
453
    add     ebx, 2
458
    mcall
454
    mcall
459
    push    eax
455
    push    eax
460
 
456
 
461
    mov     eax, 35
457
    mov     eax, 35
462
    mov     edx, ecx
458
    mov     edx, ecx
463
    mov     esi, [window.height]
459
    mov     esi, [window.height]
464
    dec     esi
460
    dec     esi
465
    imul    edx, esi
461
    imul    edx, esi
466
    add     ebx, edx
462
    add     ebx, edx
467
    mcall
463
    mcall
468
    push    eax
464
    push    eax
469
 
465
 
470
    mov     eax, 35
466
    mov     eax, 35
471
    sub     ebx, [window.width]
467
    sub     ebx, [window.width]
472
    sub     ebx, 2
468
    sub     ebx, 2
473
    mcall
469
    mcall
474
    push    eax
470
    push    eax
475
 
471
 
476
 ;-----
472
 ;-----
477
 
473
 
478
    mov     eax, 1
474
    mov     eax, 1
479
 
475
 
480
    pop     edx
476
    pop     edx
481
    mov     ecx, [window.height]
477
    mov     ecx, [window.height]
482
    dec     ecx
478
    dec     ecx
483
    mcall   , 0
479
    mcall   , 0
484
 
480
 
485
    pop     edx
481
    pop     edx
486
    mov     ebx, [window.width]
482
    mov     ebx, [window.width]
487
    dec     ebx
483
    dec     ebx
488
    mcall
484
    mcall
489
 
485
 
490
    pop     edx
486
    pop     edx
491
    mcall   , , 0
487
    mcall   , , 0
492
 
488
 
493
    pop     edx
489
    pop     edx
494
    mcall   , 0
490
    mcall   , 0
495
 
491
 
496
 ;-----
492
 ;-----
497
 
493
 
498
    cmpe    byte [params.icon], 0, @f
494
    cmpe    byte [params.icon], 0, @f
499
    movzx   ebx, byte [params.icon]
495
    movzx   ebx, byte [params.icon]
500
    dec     ebx
496
    dec     ebx
501
    imul    ebx, 24 * 24 * 3
497
    imul    ebx, 24
502
    add     ebx, [img_data.rgb_obj]
-
 
503
 
498
 
504
    mov     edx, [window.height]
499
    mov     edx, [window.height]
505
    shr     edx, 1
500
    shr     edx, 1
506
    sub     edx, 12
501
    sub     edx, 12
507
    add     edx, LINEH shl 16
-
 
508
 
502
	
509
    mcall   7, , <24, 24>
503
	stdcall dword [img.draw], dword [img_data.obj], 12, edx, 24, 24, 0, ebx
510
  @@:
504
  @@:
511
 
505
 
512
    ret
506
    ret
513
 
507
 
514
 ;----------------------------
508
 ;----------------------------
515
 
509
 
516
 draw_text:
510
 draw_text:
517
    mov     esi, [text.lines]
511
    mov     esi, [text.lines]
518
 
512
 
519
    cmpne   byte [params.pbar], 1, @f
513
    cmpne   byte [params.pbar], 1, @f
520
    dec     esi
514
    dec     esi
521
  @@:
515
  @@:
522
 
516
 
523
    mov     eax, 4
517
    mov     eax, 4
524
    mov     ebx, [text.offset]
518
    mov     ebx, [text.offset]
525
    shl     ebx, 16
519
    shl     ebx, 16
526
    add     ebx, LINEH + (LINEH - 6) / 2
520
    add     ebx, LINEH + (LINEH - 6) / 2
527
    mov     edx, text.buffer
521
    mov     edx, text.buffer
528
 
522
 
529
 .draw_lines:
523
 .draw_lines:
530
    mov     ecx, 0x80111111
524
    mov     ecx, 0x80111111
531
 
525
 
532
    add     ebx, 0x00010000
526
    add     ebx, 0x00010000
533
    dec     ebx
527
    dec     ebx
534
    mcall
528
    mcall
535
    add     ebx, 2
529
    add     ebx, 2
536
    mcall
530
    mcall
537
    sub     ebx, 0x00020000
531
    sub     ebx, 0x00020000
538
    mcall
532
    mcall
539
    sub     ebx, 2
533
    sub     ebx, 2
540
    mcall
534
    mcall
541
 
535
 
542
    add     ebx, 0x00010001
536
    add     ebx, 0x00010001
543
    mov     ecx, 0x80D0D0D0
537
    mov     ecx, 0x80D0D0D0
544
    mcall
538
    mcall
545
 
539
 
546
    add     ebx, LINEH
540
    add     ebx, LINEH
547
    dec     esi
541
    dec     esi
548
    cmpe    esi, 0, .draw_lines.end
542
    cmpe    esi, 0, .draw_lines.end
549
 
543
 
550
    inc     edx
544
    inc     edx
551
  @@:
545
  @@:
552
    cmpe    [edx], byte 0, @f
546
    cmpe    [edx], byte 0, @f
553
    inc     edx
547
    inc     edx
554
    jmp     @b
548
    jmp     @b
555
  @@:
549
  @@:
556
    inc     edx
550
    inc     edx
557
    jmp     .draw_lines
551
    jmp     .draw_lines
558
 
552
 
559
 .draw_lines.end:
553
 .draw_lines.end:
560
 
554
 
561
    cmpne   byte [params.title], 1, @f
555
    cmpne   byte [params.title], 1, @f
562
    mov     edx, text.buffer
556
    mov     edx, text.buffer
563
    mov     ecx, 0x80111111
557
    mov     ecx, 0x80111111
564
    and     ebx, 0xFFFF0000
558
    and     ebx, 0xFFFF0000
565
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
559
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
566
    mcall
560
    mcall
567
 
561
 
568
    mov     ecx, 0x80FFFFFF
562
    mov     ecx, 0x80FFFFFF
569
    sub     ebx, 0x00010000
563
    sub     ebx, 0x00010000
570
    mcall
564
    mcall
571
  @@:
565
  @@:
572
 
566
 
573
    ret
567
    ret
574
 
568
 
575
 ;----------------------------
569
 ;----------------------------
576
 
570
 
577
 draw_pbar:
571
 draw_pbar:
578
    cmpne   byte [params.pbar], 1, .exit
572
    cmpne   byte [params.pbar], 1, .exit
579
    mov     esi, 0xFF0000
573
    mov     esi, 0xFF0000
580
    mov     ecx, LINEH
574
    mov     ecx, LINEH
581
    imul    ecx, [text.lines]
575
    imul    ecx, [text.lines]
582
    shl     ecx, 16
576
    shl     ecx, 16
583
    add     ecx, (LINEH / 2) shl 16 + 8
577
    add     ecx, (LINEH / 2) shl 16 + 8
584
    mcall   13, <[text.offset], [pbar.width]>, , 0x555555
578
    mcall   13, <[text.offset], [pbar.width]>, , 0x555555
585
 
579
 
586
    sub     ecx, -(1 shl 16) + 2
580
    sub     ecx, -(1 shl 16) + 2
587
 
581
 
588
    mov     bx, word [pbar.f_width]
582
    mov     bx, word [pbar.f_width]
589
    add     ebx, 1 shl 16
583
    add     ebx, 1 shl 16
590
 
584
 
591
    mcall     , , , 0x999999
585
    mcall     , , , 0x999999
592
    mov     cx, 1
586
    mov     cx, 1
593
    mcall     , , , 0xAAAAAA
587
    mcall     , , , 0xAAAAAA
594
    mov     cx, 6
588
    mov     cx, 6
595
    mov     bx, 1
589
    mov     bx, 1
596
    mcall
590
    mcall
597
 .exit:
591
 .exit:
598
    ret
592
    ret
599
 
593
 
600
 ;----------------------------
594
 ;----------------------------
601
 
595
 
602
 init_window:
596
 init_window:
603
    dec     dword [window.width]
597
    dec     dword [window.width]
604
    dec     dword [window.height]
598
    dec     dword [window.height]
605
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
599
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
606
    inc     dword [window.width]
600
    inc     dword [window.width]
607
    inc     dword [window.height]
601
    inc     dword [window.height]
608
 
602
 
609
    ret
603
    ret
610
 
604
 
611
 ;----------------------------
605
 ;----------------------------
612
 
606
 
613
 parse_text:
607
 parse_text:
614
    mov     dword [text.lines], 1
608
    mov     dword [text.lines], 1
615
    cmpne   byte [params.pbar], 1, @f
609
    cmpne   byte [params.pbar], 1, @f
616
    inc     dword [text.lines]
610
    inc     dword [text.lines]
617
  @@:
611
  @@:
618
 
612
 
619
    mov     dword [text.max_len], 0
613
    mov     dword [text.max_len], 0
620
    mov     ebx, text.buffer
614
    mov     ebx, text.buffer
621
    mov     ecx, 0
615
    mov     ecx, 0
622
    mov     dl, 0
616
    mov     dl, 0
623
    mov     dh, 0
617
    mov     dh, 0
624
 
618
 
625
    cmpe    esi, 1, .parse_loop
619
    cmpe    esi, 1, .parse_loop
626
    cmpne   byte [eax], "'", @f
620
    cmpne   byte [eax], "'", @f
627
    mov     dl, "'"
621
    mov     dl, "'"
628
    mov     dh, 1
622
    mov     dh, 1
629
  @@:
623
  @@:
630
    cmpne   byte [eax], '"', @f
624
    cmpne   byte [eax], '"', @f
631
    mov     dl, '"'
625
    mov     dl, '"'
632
    mov     dh, 1
626
    mov     dh, 1
633
  @@:
627
  @@:
634
    cmpne   dh, 1, @f
628
    cmpne   dh, 1, @f
635
    inc     eax
629
    inc     eax
636
  @@:
630
  @@:
637
 
631
 
638
 .parse_loop:
632
 .parse_loop:
639
    cmpe    byte [eax],  0, .parse_loop.end
633
    cmpe    byte [eax],  0, .parse_loop.end
640
    cmpe    byte [eax], dl, .parse_loop.end
634
    cmpe    byte [eax], dl, .parse_loop.end
641
 
635
 
642
    cmpe    byte [eax], 10, .newline
636
    cmpe    byte [eax], 10, .newline
643
    cmpe    esi, 1, .next_set_char
637
    cmpe    esi, 1, .next_set_char
644
    cmpne   byte [eax], "\", @f
638
    cmpne   byte [eax], "\", @f
645
    cmpe    byte [eax + 1], dl, .quote
639
    cmpe    byte [eax + 1], dl, .quote
646
    cmpe    byte [eax + 1], "n", .newline_esc
640
    cmpe    byte [eax + 1], "n", .newline_esc
647
    jmp     @f
641
    jmp     @f
648
 
642
 
649
 .quote:
643
 .quote:
650
    inc     eax
644
    inc     eax
651
    jmp     .next_set_char
645
    jmp     .next_set_char
652
 
646
 
653
 .newline_esc:
647
 .newline_esc:
654
    inc     eax
648
    inc     eax
655
 
649
 
656
 .newline:
650
 .newline:
657
    mov     byte [ebx], 0
651
    mov     byte [ebx], 0
658
    cmple   ecx, dword [text.max_len], .skip_max_len
652
    cmple   ecx, dword [text.max_len], .skip_max_len
659
    mov     dword [text.max_len], ecx
653
    mov     dword [text.max_len], ecx
660
 .skip_max_len:
654
 .skip_max_len:
661
    mov     ecx, 0
655
    mov     ecx, 0
662
    inc     dword [text.lines]
656
    inc     dword [text.lines]
663
    jmp     .next
657
    jmp     .next
664
  @@:
658
  @@:
665
 
659
 
666
 .next_set_char:
660
 .next_set_char:
667
    mov     dh, [eax]
661
    mov     dh, [eax]
668
    mov     [ebx], dh
662
    mov     [ebx], dh
669
 
663
 
670
 .next:
664
 .next:
671
    inc     eax
665
    inc     eax
672
    inc     ebx
666
    inc     ebx
673
    inc     ecx
667
    inc     ecx
674
    jmp     .parse_loop
668
    jmp     .parse_loop
675
 .parse_loop.end:
669
 .parse_loop.end:
676
 
670
 
677
    cmple   ecx, dword [text.max_len], @f
671
    cmple   ecx, dword [text.max_len], @f
678
    mov     dword [text.max_len], ecx
672
    mov     dword [text.max_len], ecx
679
  @@:
673
  @@:
680
 
674
 
681
    cmpge   [text.max_len], dword 25, @f
675
    cmpge   [text.max_len], dword 25, @f
682
    mov     [text.max_len], dword 25
676
    mov     [text.max_len], dword 25
683
  @@:
677
  @@:
684
 
678
 
685
    mov     [ebx], byte 0
679
    mov     [ebx], byte 0
686
 
680
 
687
    ret
681
    ret
688
 
682
 
689
 ;----------------------------
683
 ;----------------------------
690
 
684
 
691
 parse_flags:
685
 parse_flags:
692
    mov     byte [params.atcl], 0
686
    mov     byte [params.atcl], 0
693
    mov     byte [params.title], 0
687
    mov     byte [params.title], 0
694
    mov     byte [params.icon], 0
688
    mov     byte [params.icon], 0
695
 
689
 
696
 .loop:
690
 .loop:
697
    mov     dl, [eax]
691
    mov     dl, [eax]
698
 
692
 
699
    cmpe    dl, 0, .exit
693
    cmpe    dl, 0, .exit
700
    cmpe    dl, "d", .set_atcl
694
    cmpe    dl, "d", .set_atcl
701
    cmpe    dl, "c", .set_clcl
695
    cmpe    dl, "c", .set_clcl
702
    cmpe    dl, "t", .set_title
696
    cmpe    dl, "t", .set_title
703
    cmpe    dl, "p", .set_pbar
697
    cmpe    dl, "p", .set_pbar
704
 
698
 
705
    mov     bl, 1
699
    mov     bl, 1
706
    mov     ecx, sz_icons
700
    mov     ecx, sz_icons
707
  @@:
701
  @@:
708
    cmpe    dl, [ecx], .set_icon
702
    cmpe    dl, [ecx], .set_icon
709
    inc     bl
703
    inc     bl
710
    inc     ecx
704
    inc     ecx
711
    cmpne   [ecx], byte 0, @b
705
    cmpne   [ecx], byte 0, @b
712
    jmp     .next_char
706
    jmp     .next_char
713
 
707
 
714
 .set_atcl:
708
 .set_atcl:
715
    mov     byte [params.atcl], 1
709
    mov     byte [params.atcl], 1
716
    jmp     .next_char
710
    jmp     .next_char
717
 
711
 
718
 .set_clcl:
712
 .set_clcl:
719
    mov     byte [params.clcl], 1
713
    mov     byte [params.clcl], 1
720
    jmp     .next_char
714
    jmp     .next_char
721
 
715
 
722
 .set_title:
716
 .set_title:
723
    mov     byte [params.title], 1
717
    mov     byte [params.title], 1
724
    jmp     .next_char
718
    jmp     .next_char
725
 
719
 
726
 .set_pbar:
720
 .set_pbar:
727
    mov     byte [params.pbar], 1
721
    mov     byte [params.pbar], 1
728
    inc     dword [text.lines]
722
    inc     dword [text.lines]
729
    jmp     .next_char
723
    jmp     .next_char
730
 
724
 
731
 .set_icon:
725
 .set_icon:
732
    mov     [params.icon], bl
726
    mov     [params.icon], bl
733
 
727
 
734
 .next_char:
728
 .next_char:
735
    inc     eax
729
    inc     eax
736
    jmp     .loop
730
    jmp     .loop
737
 
731
 
738
 .exit:
732
 .exit:
739
    ret
733
    ret
740
 
734
 
741
 ;----------------------------
735
 ;----------------------------
742
 
736
 
743
 calc_fill_width:
737
 calc_fill_width:
744
    mov     eax, [pbar.cur_val]
738
    mov     eax, [pbar.cur_val]
745
    cmpng   eax, [pbar.max_val], @f
739
    cmpng   eax, [pbar.max_val], @f
746
    mov     eax, [pbar.max_val]
740
    mov     eax, [pbar.max_val]
747
  @@:
741
  @@:
748
    cmpnl   eax, 0, @f
742
    cmpnl   eax, 0, @f
749
    mov     eax, 0
743
    mov     eax, 0
750
  @@:
744
  @@:
751
 
745
 
752
    mov     ebx, [pbar.width]
746
    mov     ebx, [pbar.width]
753
    sub     ebx, 2
747
    sub     ebx, 2
754
    imul    eax, ebx
748
    imul    eax, ebx
755
    mov     edx, 0
749
    mov     edx, 0
756
    mov     ebx, [pbar.max_val]
750
    mov     ebx, [pbar.max_val]
757
    div     ebx
751
    div     ebx
758
    mov     [pbar.f_width], eax
752
    mov     [pbar.f_width], eax
759
    ret
753
    ret
760
 
754
 
761
 ;----------------------------
755
 ;----------------------------
762
 
756
 
763
 @imports:
757
 @imports:
764
    library img, "libimg.obj"
758
    library img, "libimg.obj"
765
    import  img, img.to_rgb,  "img_to_rgb2", \
759
    import  img, img.to_rgb,  "img_to_rgb2", \
766
		 img.decode,  "img_decode",  \
760
		 img.decode,  "img_decode",  \
767
		 img.destroy, "img_destroy"
761
		 img.draw, "img_draw"
768
 
762
 
769
 ;----------------------------
763
 ;----------------------------
770
 
764
 
771
 sz_icons   db "AEWONIFCMDS", 0
765
 sz_icons   db "AEWONIFCMDS", 0
772
 sz_ifile   db "/sys/notify3.png", 0
766
 sz_ifile   db "/sys/notify3.png", 0
773
 sz_shname  db "notify-mem-v01", 0
767
 sz_shname  db "notify-mem-v01", 0
774
 sz_std     db "'NOTIFY 3\n",                 \
768
 sz_std     db "'NOTIFY 3\n",                 \
775
	       "d - disable auto-closing\n",  \
769
	       "d - disable auto-closing\n",  \
776
	       "c - disable click-closing\n", \
770
	       "c - disable click-closing\n", \
777
	       "p - use progressbar\n",       \
771
	       "p - use progressbar\n",       \
778
	       "t - title\n",		      \
772
	       "t - title\n",		      \
779
	       " \n",			      \
773
	       " \n",			      \
780
	       "ICONS:\n",		      \
774
	       "ICONS:\n",		      \
781
	       "A - application\n",	      \
775
	       "A - application\n",	      \
782
	       "E - error\n",		      \
776
	       "E - error\n",		      \
783
	       "W - warning\n", 	      \
777
	       "W - warning\n", 	      \
784
	       "O - ok\n",		      \
778
	       "O - ok\n",		      \
785
	       "N - network\n", 	      \
779
	       "N - network\n", 	      \
786
	       "I - info\n",		      \
780
	       "I - info\n",		      \
787
	       "F - folder\n",		      \
781
	       "F - folder\n",		      \
788
	       "C - component\n",	      \
782
	       "C - component\n",	      \
789
	       "M - mail\n",		      \
783
	       "M - mail\n",		      \
790
	       "D - download\n",	      \
784
	       "D - download\n",	      \
791
	       "S - audio player",	      \
785
	       "S - audio player",	      \
792
	       "' -td", 0
786
	       "' -td", 0
793
 
787
 
794
 fi:
788
 fi:
795
	    dd 5
789
	    dd 5
796
	    dd 0, 0, 0
790
	    dd 0, 0, 0
797
	    dd buffer
791
	    dd buffer
798
	    db 0
792
	    db 0
799
	    dd sz_ifile
793
	    dd sz_ifile
800
 
794
 
801
 ;----------------------------
795
 ;----------------------------
802
 
796
 
803
 @end:
797
 @end:
804
 
798
 
805
;=====================================================================
799
;=====================================================================
806
 
800
 
807
 window:
801
 window:
808
 .x	   rd 1
802
 .x	   rd 1
809
 .y	   rd 1
803
 .y	   rd 1
810
 .width    rd 1
804
 .width    rd 1
811
 .height   rd 1
805
 .height   rd 1
812
 
806
 
813
 scr:
807
 scr:
814
 .width    rd 1
808
 .width    rd 1
815
 .height   rd 1
809
 .height   rd 1
816
 
810
 
817
 text:
811
 text:
818
 .buffer   rb 2048
812
 .buffer   rb 2048
819
 .lines    rd 1
813
 .lines    rd 1
820
 .max_len  rd 1
814
 .max_len  rd 1
821
 .offset   rd 1
815
 .offset   rd 1
822
 
816
 
823
 params:
817
 params:
824
 .source   rd 1
818
 .source   rd 1
825
 .atcl	   rb 1
819
 .atcl	   rb 1
826
 .clcl	   rb 1
820
 .clcl	   rb 1
827
 .title    rb 1
821
 .title    rb 1
828
 .pbar	   rb 1
822
 .pbar	   rb 1
829
 .icon	   rb 1
823
 .icon	   rb 1
830
 .ctrl	   rb 1
824
 .ctrl	   rb 1
831
 
825
 
832
 img_data:
826
 img_data:
833
 .rgb_obj  rd 1
827
 .file  rd 1
834
 .obj	   rd 1
828
 .obj	   rd 1
835
 
829
 
836
 timer:
830
 timer:
837
 .value    rd 1
831
 .value    rd 1
838
 .step	   rd 1
832
 .step	   rd 1
839
 
833
 
840
 shm:
834
 shm:
841
 .addr	   rd 1
835
 .addr	   rd 1
842
 .our	   rd 1
836
 .our	   rd 1
843
 
837
 
844
 ctrl:
838
 ctrl:
845
 .name	   rb 31
839
 .name	   rb 31
846
 .addr	   rd 1
840
 .addr	   rd 1
847
 
841
 
848
 pbar:
842
 pbar:
849
 .width    rd 1
843
 .width    rd 1
850
 .cur_val  rd 1
844
 .cur_val  rd 1
851
 .max_val  rd 1
845
 .max_val  rd 1
852
 .f_width  rd 1
846
 .f_width  rd 1
853
 
847
 
854
 buffer     rb 1024
848
 buffer     rb 1024
855
 first_draw rb 1
849
 first_draw rb 1
856
 prev_pid   rd 1
850
 prev_pid   rd 1
857
 
851
 
858
;=====================================================================
852
;=====================================================================
859
	    rb 2048
853
	    rb 2048
860
 @stack:
854
 @stack:
861
 @params    rb 2048
855
 @params    rb 2048
862
 
856
 
863
 @memory:
857
 @memory: