Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
806 Lrz 1
;заголовок приложения
2
use32                ; транслятор, использующий 32 разрядных команды
3
    org 0x0                ; базовый адрес кода, всегда 0x0
4
    db 'MENUET01'        ; идентификатор исполняемого файла (8 байт)
5
    dd 0x1                ; версия формата заголовка исполняемого файла
6
    dd start                ; адрес, на который система передаёт управление
7
                        ; после загрузки приложения в память
8
    dd i_end                ; размер приложения
9
    dd mem                  ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
10
    dd mem                  ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
11
    dd 0x0              ; указатель на строку с параметрами.
12
    dd way_of_ini
13
include 'macros.inc'
14
include 'editbox_ex.mac'
15
start:
16
;Get way for ini file.
17
        mov     edi,way_of_ini
18
        mov     ecx,1024
19
        xor     eax,eax
20
        cld
21
        repne   scasb
22
        test    ecx,ecx
23
        jz      @f
24
 
25
        mov     esi,1024
26
        sub     esi,ecx
27
        mov     ecx,esi
28
        std
29
        mov     al,'/'
30
        repne   scasb
31
        test    ecx,ecx
32
        jz      next_way
33
        add     edi,2
34
@@:
35
        mov     esi,ini_file
36
        cld
37
 
38
@@:     lodsb
39
        test    al,al
40
        jz      @f
41
        stosb
42
        jmp     @b
43
 
44
@@:     xor     eax,eax
45
        stosb
46
 
47
; load DLL
48
        mov     ecx,way_of_ini
49
        mov     eax, 68
50
        mov     ebx, 19
51
        mcall
52
        test    eax, eax
53
        jz      next_way
54
        jmp     import_init_
55
next_way:
56
        mov     ecx,ini_file
57
        mov     eax, 68
58
        mov     ebx, 19
59
        mcall
60
        test    eax, eax
61
        jz      exit
62
 
63
 
64
 
65
import_init_:
66
; initialize import
67
        mov     edx, eax
68
        mov     esi,myimport
69
import_loop:
70
        lodsd
71
        test    eax, eax
72
        jz      import_done
73
        push    edx
74
import_find:
75
        mov     ebx, [edx]
76
        test    ebx, ebx
77
        jz      exit;import_not_found
78
        push    eax
79
@@:
80
        mov     cl, [eax]
81
        cmp     cl, [ebx]
82
        jnz     import_find_next
83
        test    cl, cl
84
        jz      import_found
85
        inc     eax
86
        inc     ebx
87
        jmp     @b
88
import_find_next:
89
        pop     eax
90
        add     edx, 8
91
        jmp     import_find
92
import_found:
93
        pop     eax
94
        mov     eax, [edx+4]
95
        mov     [esi-4], eax
96
        pop     edx
97
        jmp     import_loop
98
import_done:
99
 
100
        mcall   40,0x27         ;установить маску для ожидаемых событий
101
red_win:
102
    call draw_window            ;первоначально необходимо нарисовать окно
103
align 4
104
still:                          ;основной обработчик
105
        mcall   10              ;Ожидать события
106
        dec  eax
107
        jz   red_win
108
        dec  eax
109
        jz   key
110
        dec  eax
111
        jz   button
112
 
113
        push    dword edit1
114
        call    [edit_box_mouse]
115
 
116
        push    dword edit2
117
        call    [edit_box_mouse]
118
 
119
        push    dword check1
120
        call    [check_box_mouse]
121
 
122
        push    dword check2
123
        call    [check_box_mouse]
124
 
125
        push    dword Option_boxs
126
        call    [option_box_mouse]
127
 
128
        push    dword Option_boxs2
129
        call    [option_box_mouse]
130
 
131
        jmp still    ;если ничего из перечисленного то снова в цикл
132
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
133
button:
134
        mcall   17      ;получить идентификатор нажатой клавиши
135
        test ah,ah      ;если в ah 0, то перейти на обработчик событий still
136
        jz  still
137
exit:   mcall   -1
138
key:
139
        mcall   2       ;загрузим значение 2 в регистор eax и получим код нажатой клавиши
140
 
141
        push    dword edit1
142
        call    [edit_box_key]
143
 
144
        push    dword edit2
145
        call    [edit_box_key]
146
 
147
        jmp still
148
 
149
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
150
align 4
151
draw_window:            ;рисование окна приложения
152
        mcall   12,1
153
        mcall   0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
154
 
155
        push    dword edit1
156
        call    [edit_box_draw]
157
 
158
        push    dword edit2
159
        call    [edit_box_draw]
160
 
161
        push    dword check1
162
        call    [check_box_draw]
163
 
164
        push    dword check2
165
        call    [check_box_draw]
166
 
167
        push    dword Option_boxs
168
        call    [option_box_draw]
169
 
170
        push    dword Option_boxs2
171
        call    [option_box_draw]
172
 
173
        mcall   12,2
174
    ret
175
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
176
;DATA данные
177
ini_file db '/sys/lib/box_lib.obj',0
178
myimport:
179
 
180
edit_box_draw   dd      aEdit_box_draw
181
edit_box_key    dd      aEdit_box_key
182
edit_box_mouse  dd      aEdit_box_mouse
183
version_ed      dd      aVersion_ed
184
 
185
check_box_draw  dd      aCheck_box_draw
186
check_box_mouse dd      aCheck_box_mouse
187
version_ch      dd      aVersion_ch
188
 
189
option_box_draw  dd      aOption_box_draw
190
option_box_mouse dd      aOption_box_mouse
191
version_op       dd      aVersion_op
192
 
193
                dd      0
194
                dd      0
195
 
196
aEdit_box_draw  db 'edit_box',0
197
aEdit_box_key   db 'edit_box_key',0
198
aEdit_box_mouse db 'edit_box_mouse',0
199
aVersion_ed     db 'version_ed',0
200
 
201
aCheck_box_draw  db 'check_box_draw',0
202
aCheck_box_mouse db 'check_box_mouse',0
203
aVersion_ch      db 'version_ch',0
204
 
205
aOption_box_draw  db 'option_box_draw',0
206
aOption_box_mouse db 'option_box_mouse',0
207
aVersion_op       db 'version_op',0
208
 
209
 
210
 
211
 
212
check1 check_box 10,45,6,12,0x80AABBCC,0,0,check_text,14,ch_flag_en
213
check2 check_box 10,60,6,12,0x80AABBCC,0,0,check_text2,15
214
 
215
edit1 edit_box 350,3,5,0xffffff,0x6f9480,0,0xAABBCC,0,308,hed,ed_focus,hed_end-hed-1,hed_end-hed-1
216
edit2 edit_box 350,3,25,0xffffff,0x6a9480,0,0,0,99,ed_buffer,ed_figure_only
217
 
218
op1 option_box option_group1,10,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
219
op2 option_box option_group1,10,105,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
220
op3 option_box option_group1,10,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
221
op11 option_box option_group2,120,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
222
op12 option_box option_group2,120,105,6,12,0xffffff,0,0,op_text.2,op_text.e2-op_text.2
223
op13 option_box option_group2,120,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
224
 
225
option_group1   dd op1  ;указатели, они отображаются по умолчанию, когда выводится
226
option_group2   dd op12 ;приложение
227
Option_boxs     dd  op1,op2,op3,0
228
Option_boxs2    dd  op11,op12,op13,0
229
hed db   'BOXs load from lib  date 27.09.2007',0
230
hed_end:
231
rb  256
232
check_text db 'First checkbox'
233
check_text2 db 'Second checkbox'
234
op_text:                ; Сопровождающий текст для чек боксов
235
.1 db 'Option_Box #1'
236
.e1:
237
.2 db 'Option_Box #2'
238
.e2:
239
.3 db 'Option_Box #3'
240
.e3:
241
ed_buffer       rb 100
242
way_of_ini      rb 1024
243
i_end:
244
rb 1024
245
mem: