Subversion Repositories Kolibri OS

Rev

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 ',0
-
 
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