Rev 109 | Rev 305 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 109 | Rev 205 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; <--- description ---> |
1 | window_y=88 |
2 | ; compiler: FASM 1.54 |
- | |
3 | ; name: MenuetOS RUN |
- | |
4 | ; version: 0.02 |
2 | ;window_x=320 |
5 | ; last update: 28/09/2004 |
- | |
6 | ; written by: Ivan Poddubny |
- | |
7 | ; e-mail: ivan-yar@bk.ru |
- | |
8 | - | ||
9 | - | ||
10 | ; <--- include all MeOS stuff ---> |
- | |
11 | include "lang.inc" |
3 | window_x=450 |
12 | include "macros.inc" |
4 | include 'macros.inc' |
13 | ;;;lang fix en |
5 | meos_header par |
14 | - | ||
15 | - | ||
16 | ; <--- start of MenuetOS application ---> |
- | |
17 | MEOS_APP_START |
6 | use_edit_box |
18 | - | ||
19 | ;include "DEBUG.INC" |
7 | use_txt_button |
20 | 8 | app_start |
|
21 | ; <--- start of code ---> |
9 | cmp [par],byte 0 |
22 | CODE |
10 | jne read_par |
23 | call draw_window ; at first create and draw the window |
11 | set_events_mask evm_mouse+evm_button+evm_key+evm_redraw |
24 | 12 | red: |
|
25 | wait_event: ; main cycle |
- | |
26 | mcall 10 |
13 | get_sys_colors sc |
27 | - | ||
28 | cmp eax, 1 ; if event == 1 |
14 | set_sys_colors_txt_button run_but,sc |
29 | je redraw ; jump to redraw handler |
15 | push dword [sc.work_graph] |
30 | cmp eax, 2 ; else if event == 2 |
- | |
31 | je key ; jump to key handler |
- | |
32 | cmp eax, 3 ; else if event == 3 |
- | |
33 | je button ; jump to button handler |
- | |
34 | - | ||
35 | jmp wait_event ; else return to the start of main cycle |
- | |
36 | - | ||
37 | - | ||
38 | redraw: ; redraw event handler |
16 | pop [input_fn.focus_border_color] |
39 | call draw_window |
17 | call draw_window |
- | 18 | still: |
|
40 | jmp wait_event |
19 | wait_event red,key,button,mouse,,still |
41 | 20 | key: |
|
42 | - | ||
43 | key: ; key event handler |
- | |
44 | mcall 2 |
21 | get_key |
45 | - | ||
46 | cmp ah, 13 |
22 | cmp ah,13 |
47 | je _run |
23 | je run |
48 | cmp ah, 8 |
- | |
49 | je .backspace |
- | |
50 | - | ||
51 | mov bl, ah |
- | |
52 | mov eax, [position] |
- | |
53 | mov [filename + eax], bl |
- | |
54 | inc [position] |
24 | key_edit_box input_fn |
55 | call draw_string |
- | |
56 | - | ||
57 | jmp wait_event |
25 | jmp still |
58 | - | ||
59 | .backspace: |
26 | button: |
60 | xor eax, eax |
- | |
61 | cmp [position], eax |
- | |
62 | je wait_event |
- | |
63 | dec [position] |
27 | get_pressed_button |
64 | call draw_string |
- | |
65 | jmp wait_event |
- | |
66 | - | ||
67 | - | ||
68 | button: ; button event handler |
- | |
69 | mcall 17 |
- | |
70 | - | ||
71 | cmp ah, 10 |
28 | dec ah |
72 | je _run |
29 | jz close |
73 | - | ||
74 | dec ah |
30 | dec ah |
- | 31 | jz run |
|
- | 32 | jmp still |
|
- | 33 | mouse: |
|
75 | jne wait_event ; return if button id != 1 |
34 | mouse_edit_box input_fn |
- | 35 | jmp still |
|
- | 36 | ||
- | 37 | read_par: |
|
- | 38 | mov esi,par |
|
- | 39 | mov edi,fn |
|
- | 40 | mov ecx,256 |
|
- | 41 | rep movsb |
|
- | 42 | run: |
|
- | 43 | xor eax,eax |
|
- | 44 | mov edi,file_info.name |
|
- | 45 | mov ecx,512 |
|
- | 46 | rep stosb |
|
- | 47 | mov edi,run_par |
|
- | 48 | mov ecx,256 |
|
- | 49 | rep stosb |
|
- | 50 | ||
- | 51 | mov esi,fn |
|
- | 52 | mov edi,file_info.name |
|
- | 53 | cmp [esi],byte '"' |
|
- | 54 | je copy_fn_with_spaces |
|
- | 55 | copy_fn: |
|
- | 56 | cmp [esi],byte ' ' |
|
- | 57 | je .stop |
|
- | 58 | cmp [esi],byte 0 |
|
- | 59 | je .stop |
|
- | 60 | mov al,[esi] |
|
- | 61 | mov [edi],al |
|
- | 62 | inc esi |
|
- | 63 | inc edi |
|
- | 64 | jmp copy_fn |
|
- | 65 | .stop: |
|
- | 66 | ||
- | 67 | jmp copy_par |
|
- | 68 | ||
- | 69 | copy_fn_with_spaces: |
|
- | 70 | inc esi |
|
- | 71 | @@: |
|
- | 72 | cmp [esi],byte '"' |
|
- | 73 | je .stop |
|
- | 74 | cmp [esi],byte 0 |
|
- | 75 | je .stop |
|
- | 76 | mov al,[esi] |
|
- | 77 | mov [edi],al |
|
- | 78 | inc esi |
|
- | 79 | inc edi |
|
- | 80 | jmp @b |
|
- | 81 | .stop: |
|
- | 82 | ||
- | 83 | copy_par: |
|
- | 84 | @@: |
|
- | 85 | inc esi |
|
- | 86 | cmp [esi],byte ' ' |
|
- | 87 | je @b |
|
- | 88 | mov edi,run_par |
|
- | 89 | @@: |
|
- | 90 | cmp [esi],byte 0 |
|
- | 91 | je .stop |
|
- | 92 | mov al,[esi] |
|
- | 93 | mov [edi],al |
|
- | 94 | inc esi |
|
- | 95 | inc edi |
|
- | 96 | jmp @b |
|
- | 97 | .stop: |
|
Line 76... | Line 98... | ||
76 | 98 | ||
77 | _exit: |
99 | mov eax,70 |
78 | or eax, -1 ; exit application |
100 | mov ebx,file_info |
Line -... | Line 101... | ||
- | 101 | int 0x40 |
|
- | 102 | ||
- | 103 | ;cmp eax,0 |
|
- | 104 | ;jg error |
|
- | 105 | bt eax,31 |
|
- | 106 | je error |
|
- | 107 | jmp still |
|
Line 79... | Line 108... | ||
79 | int 0x40 |
108 | close: |
80 | - | ||
81 | - | ||
82 | _run: |
- | |
83 | mcall 58, fileinfo |
- | |
84 | ; dps "58th function returned " |
- | |
Line -... | Line 109... | ||
- | 109 | app_close |
|
- | 110 | ||
- | 111 | error: |
|
- | 112 | ||
- | 113 | macro cmp_err code,text_ptr |
|
- | 114 | { |
|
- | 115 | cmp al,code |
|
- | 116 | jne @f |
|
- | 117 | mov [status],text_ptr |
|
Line 85... | Line -... | ||
85 | ; dpd eax |
- | |
86 | ; newline |
- | |
87 | jmp _exit |
- | |
88 | - | ||
89 | - | ||
90 | draw_window: |
- | |
91 | mcall 12, 1 |
118 | ;jmp .draw_status |
92 | - | ||
93 | mcall 14 |
- | |
94 | and eax, 0xFFFF |
- | |
95 | sub eax, 100 |
- | |
96 | shl eax, 16 |
- | |
97 | add eax, 80 |
- | |
98 | mov ecx, eax |
- | |
99 | - | ||
100 | mov ebx, 148*65536+400 ; (window_cx)*65536+(window_sx) |
- | |
101 | mov edx, 0x03DDDDDD ; work area color & window type 3 |
- | |
102 | mcall 0 |
- | |
103 | - | ||
104 | mov ebx, 8*65536+8 ; coordinates |
- | |
105 | mov ecx, 0x10ffffff ; color & font N1 |
- | |
106 | mov edx, header ; address of text |
- | |
107 | mov esi, header.size ; length of text |
- | |
108 | mcall 4 |
- | |
109 | - | ||
110 | mpack ebx, 10, 26 |
- | |
111 | mov ecx, 0 |
- | |
112 | mov edx, message |
- | |
113 | mov esi, message.size |
- | |
114 | mcall |
- | |
115 | - | ||
116 | mpack ebx, 385-(runbtn.size*6), runbtn.size*6+4 |
- | |
117 | mpack ecx, 56, 14 |
- | |
118 | mov edx, 10 |
- | |
119 | mov esi, 0xa0a0a0 |
- | |
120 | mcall 8 |
- | |
121 | - | ||
122 | ; mpack ebx, 385-runbtn.size*6-findbtn.size*6-8, findbtn.size*6+4 |
119 | @@: |
123 | ; inc edx |
- | |
124 | ; mcall 8 |
- | |
125 | - | ||
126 | ; mpack ebx, 388-runbtn.size*6-findbtn.size*6-7, 59 |
- | |
127 | ; mov ecx, 0 |
- | |
128 | ; mov edx, findbtn |
- | |
129 | ; mov esi, findbtn.size |
- | |
130 | ; mcall 4 |
- | |
131 | - | ||
132 | mpack ebx, 388-runbtn.size*6, 59 |
- | |
133 | mov ecx, 0 |
- | |
134 | mov edx, runbtn |
- | |
135 | mov esi, runbtn.size |
- | |
136 | mcall 4 |
- | |
Line -... | Line 120... | ||
- | 120 | } |
|
Line 137... | Line -... | ||
137 | - | ||
138 | call draw_string |
- | |
139 | - | ||
140 | mcall 12, 2 |
- | |
141 | ret |
- | |
142 | - | ||
143 | - | ||
144 | draw_string: |
- | |
145 | mpack ebx, 10, 380 |
- | |
146 | mpack ecx, 38, 14 |
121 | neg eax |
147 | mov edx, 0xA0A0A0 |
- | |
148 | mcall 13 |
- | |
Line -... | Line 122... | ||
- | 122 | ||
Line -... | Line 123... | ||
- | 123 | ;test al,al |
|
Line 149... | Line 124... | ||
149 | 124 | ;jz close |
|
150 | mpack ebx, 14, 41 |
- | |
Line 151... | Line 125... | ||
151 | mov ecx, 0 |
125 | |
Line 152... | Line -... | ||
152 | mov edx, filename |
- | |
153 | mov esi, [position] |
- | |
154 | mcall 4 |
126 | cmp_err 3,bad_file_sys |
Line 155... | Line -... | ||
155 | ret |
- | |
156 | - | ||
157 | 127 | ||
Line 158... | Line 128... | ||
158 | 128 | cmp_err 5,file_not_find |
|
159 | ; <--- initialised data ---> |
129 | |
160 | DATA |
130 | cmp_err 9,bad_fat_table |
Line -... | Line 131... | ||
- | 131 | ||
- | 132 | cmp_err 10,acces_denyied |
|
161 | 133 | ||
- | 134 | cmp_err 11,device_error |
|
162 | position dd filename.size |
135 | |
- | 136 | cmp_err 30,out_of_memory |
|
- | 137 | ||
- | 138 | cmp_err 31,file_not_executable |
|
- | 139 | ||
- | 140 | cmp_err 32,many_processes |
|
- | 141 | ||
- | 142 | .draw_status: |
|
- | 143 | call draw_status |
|
- | 144 | jmp still |
|
- | 145 | ||
- | 146 | draw_window: |
|
163 | 147 | start_draw_window |
|
- | 148 | get_screen_size |
|
Line -... | Line 149... | ||
- | 149 | mov cx,ax |
|
Line -... | Line 150... | ||
- | 150 | sub cx,window_y+20 |
|
164 | lsz header,\ |
151 | shl ecx,16 |
165 | ru, " ¯ã᪠¯à®£à ¬¬ë",\ |
152 | mov cx,window_y |
166 | en, "Start program" |
153 | shr eax,16 |
- | 154 | mov bx,ax |
|
- | 155 | sub bx,window_x |
|
- | 156 | shl ebx,15 |
|
- | 157 | mov bx,window_x |
|
- | 158 | mov edx,[sc.work] |
|
167 | 159 | or edx,0x03000000 |
|
- | 160 | xor eax,eax |
|
168 | lsz message,\ |
161 | xor esi,esi |
- | 162 | xor edi,edi |
|
169 | ru, "¢¥¤¨â¥ ¯ãâì ª ä ©«ã:",\ |
163 | int 0x40 |
- | 164 | ||
- | 165 | get_procinfo app |
|
Line 170... | Line 166... | ||
170 | en, "Enter path to file:" |
166 | |
171 | 167 | mov ax,[app.width] |
|
Line -... | Line 168... | ||
- | 168 | sub ax,20 |
|
Line 172... | Line 169... | ||
172 | ; lsz findbtn,\ |
169 | mov [input_fn.width],ax |
173 | ; ru, " ©â¨...",\ |
170 | mov [run_but.width],ax |
174 | ; en, "Find..." |
- | |
Line -... | Line 171... | ||
- | 171 | ||
- | 172 | mov bx,5 |
|
- | 173 | shl ebx,16 |
|
- | 174 | mov bx,ax |
|
- | 175 | add bx,15 |
|
- | 176 | mov cx,70 |
|
- | 177 | push cx |
|
- | 178 | shl ecx,16 |
|
- | 179 | pop cx |
|
- | 180 | mov edx,[sc.work_graph] |
|
- | 181 | mov eax,38 |
|
- | 182 | int 0x40 |
|
- | 183 | ||
- | 184 | draw_edit_box input_fn |
|
- | 185 | draw_txt_button run_but |
|
- | 186 | ||
- | 187 | call draw_status_text |
|
- | 188 | ||
- | 189 | stop_draw_window |
|
- | 190 | ret |
|
Line 175... | Line -... | ||
175 | - | ||
176 | lsz runbtn,\ |
- | |
177 | ru, " ¯ãáâ¨âì",\ |
191 | |
- | 192 | draw_status: |
|
- | 193 | mov ebx,5*65536+(window_x-5-5) |
|
- | 194 | mov ecx,(window_y-16)*65536+12 |
|
- | 195 | mov edx,[sc.work] |
|
- | 196 | mov eax,13 |
|
- | 197 | int 0x40 |
|
- | 198 | draw_status_text: |
|
- | 199 | mov edx,[status] |
|
- | 200 | xor esi,esi |
|
- | 201 | @@: |
|
- | 202 | cmp [edx+esi],byte 0 |
|
- | 203 | je @f |
|
- | 204 | inc esi |
|
- | 205 | jmp @b |
|
- | 206 | @@: |
|
- | 207 | mov eax,4 |
|
- | 208 | mov ebx,10*65536+(window_y-14) |
|
- | 209 | mov ecx,[sc.work_text] |
|
- | 210 | int 0x40 |
|
- | 211 | ret |
|
- | 212 | ||
- | 213 | run_but txt_button 0,10,15,50,2,0,0,run_but_text, |
|
- | 214 | if lang eq ru |
|
- | 215 | run_but_text db '',0 |
|
- | 216 | else |
|
- | 217 | run_but_text db 'RUN',0 |
|
- | 218 | end if |
|
- | 219 | input_fn edit_box 0,10,30,0xffffff,0,0xaaaaaa,0,511,fn,ed_focus+\ |
|
- | 220 | ed_always_focus |
|
- | 221 | ||
- | 222 | if lang eq ru |
|
- | 223 | hello db '¢¥¤¨â¥ ¯®«ë© ¯ãâì ª ä ©«ã ¨ ¦¬¨â¥ Enter',0 |
|
- | 224 | bad_file_sys db '¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ',0 ; 3 |
|
- | 225 | file_not_find db ' ©« ¥ ©¤¥',0 ; 5 |
|
- | 226 | bad_fat_table db ' ¡«¨æ FAT à §àãè¥ ',0 ; 9 |
|
- | 227 | acces_denyied db '®áâ㯠§ ¯à¥é¥',0 ; 10 |
|
- | 228 | device_error db '訡ª ãáâனá⢠',0 ; 11 |
|
- | 229 | out_of_memory db '¥¤®áâ â®ç® ¯ ¬ïâ¨',0 ; 30 |
|
- | 230 | file_not_executable db ' ©« ¥ ï¥âáï ¨á¯®«ï¥¬ë¬',0 ; 31 |
|
- | 231 | many_processes db '«¨èª®¬ ¬®£® ¯à®æ¥áᮢ',0 ; 32 |
|
- | 232 | else |
|
- | 233 | hello db 'Enter full path to file and press |
|
- | 234 | bad_file_sys db 'Unknown file system',0 ; 3 |
|
- | 235 | file_not_find db 'File not found',0 ; 5 |
|
- | 236 | bad_fat_table db 'FAT table corrupted',0 ; 9 |
|
- | 237 | acces_denyied db 'Access denied',0 ; 10 |
|
- | 238 | device_error db 'Device error',0 ; 11 |
|
- | 239 | out_of_memory db 'Out of memory',0 ; 30 |
|
- | 240 | file_not_executable db 'File is not executable',0 ; 31 |
|
178 | en, "Run" |
241 | many_processes db 'Too many processes',0 ; 32 |