Rev 529 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 529 | Rev 551 | ||
---|---|---|---|
1 | ; project name: SYSTREE FILE COPIER |
1 | ; project name: SYSTREE FILE COPIER |
2 | ; version: 1.2 |
2 | ; version: 1.2 |
3 | ; Mario79 23/10/06 |
3 | ; Mario79 23/10/06 |
4 | ; |
4 | ; |
5 | ; version: 1.1b |
5 | ; version: 1.1b |
6 | ; last update: 18/07/2004 |
6 | ; last update: 18/07/2004 |
7 | ; compiler: FASM 1.52 |
7 | ; compiler: FASM 1.52 |
8 | ; written by: Ivan Poddubny |
8 | ; written by: Ivan Poddubny |
9 | ; e-mail: ivan-yar@bk.ru |
9 | ; e-mail: ivan-yar@bk.ru |
10 | ; copying-policy: GPL |
10 | ; copying-policy: GPL |
11 | 11 | ||
12 | ; History: |
12 | ; History: |
13 | ; 23/10/06 application use function 70 |
13 | ; 23/10/06 application use function 70 |
14 | ; 18/07/2004 strings using "lsz" macro + french language (not 100%!) |
14 | ; 18/07/2004 strings using "lsz" macro + french language (not 100%!) |
15 | ; 04/06/2004 Bugfix for memory - thanks to Ville |
15 | ; 04/06/2004 Bugfix for memory - thanks to Ville |
16 | ; ... |
16 | ; ... |
17 | 17 | ||
18 | use32 |
18 | use32 |
19 | org 0x0 |
19 | org 0x0 |
20 | 20 | ||
21 | db 'MENUET01' ; 8 byte id |
21 | db 'MENUET01' ; 8 byte id |
22 | dd 0x01 ; header version |
22 | dd 0x01 ; header version |
23 | dd START ; start of code |
23 | dd START ; start of code |
24 | dd I_END ; size of image |
24 | dd I_END ; size of image |
25 | dd 0x10000 ; memory for app |
25 | dd 0x10000 ; memory for app |
26 | dd 0x10000 ; esp |
26 | dd 0x10000 ; esp |
27 | dd 0x0 , 0x0 ; I_Param , I_Icon |
27 | dd 0x0 , 0x0 ; I_Param , I_Icon |
28 | 28 | ||
29 | include 'lang.inc' |
29 | include 'lang.inc' |
30 | include '..\..\..\macros.inc' ; very useful stuff for MeOS |
30 | include '..\..\..\macros.inc' ; very useful stuff for MeOS |
31 | STRLEN = 48 ; maximal length of filename |
31 | STRLEN = 48 ; maximal length of filename |
32 | 32 | ||
33 | 33 | ||
34 | START: ; start of execution |
34 | START: ; start of execution |
35 | 35 | ||
36 | red: |
36 | red: |
37 | call draw_window ; at first, draw the window |
37 | call draw_window ; at first, draw the window |
38 | 38 | ||
39 | still: ; main cycle of application begins here |
39 | still: ; main cycle of application begins here |
40 | 40 | ||
41 | mov eax,10 ; wait here for event |
41 | mov eax,10 ; wait here for event |
42 | mcall |
42 | mcall |
43 | 43 | ||
44 | dec eax ; redraw request ? |
44 | dec eax ; redraw request ? |
45 | jz red |
45 | jz red |
46 | dec eax ; key in buffer ? |
46 | dec eax ; key in buffer ? |
47 | jz key |
47 | jz key |
48 | dec eax ; button in buffer ? |
48 | dec eax ; button in buffer ? |
49 | jz button |
49 | jz button |
50 | 50 | ||
51 | jmp still |
51 | jmp still |
52 | 52 | ||
53 | key: ; key event handler |
53 | key: ; key event handler |
54 | mov eax,2 ; just read it and ignore |
54 | mov eax,2 ; just read it and ignore |
55 | mcall |
55 | mcall |
56 | jmp still ; return to main loop |
56 | jmp still ; return to main loop |
57 | 57 | ||
58 | button: ; button |
58 | button: ; button |
59 | mov eax,17 ; get id |
59 | mov eax,17 ; get id |
60 | mcall |
60 | mcall |
61 | 61 | ||
62 | cmp ah,1 ; button id=1 ? (close_btn) |
62 | cmp ah,1 ; button id=1 ? (close_btn) |
63 | jz close |
63 | jz close |
64 | 64 | ||
65 | cmp ah,2 ; copy ? |
65 | cmp ah,2 ; copy ? |
66 | je copy_file |
66 | je copy_file |
67 | 67 | ||
68 | ; read_string: |
68 | ; read_string: |
69 | 69 | ||
70 | cmp ah,5 ; user pressed dest button ? |
70 | cmp ah,5 ; user pressed dest button ? |
71 | jz dstbtn |
71 | jz dstbtn |
72 | cmp ah,4 ; user pressed src button ? |
72 | cmp ah,4 ; user pressed src button ? |
73 | jnz still |
73 | jnz still |
74 | 74 | ||
75 | srcbtn: |
75 | srcbtn: |
76 | mov [addr],dword source_info.name ;source |
76 | mov [addr],dword source_info.name ;source |
77 | mov [ya],dword 36 |
77 | mov [ya],dword 36 |
78 | jmp rk |
78 | jmp rk |
79 | dstbtn: |
79 | dstbtn: |
80 | mov [addr],dword dest_info.name ;destination |
80 | mov [addr],dword dest_info.name ;destination |
81 | mov [ya],dword 36+16 |
81 | mov [ya],dword 36+16 |
82 | 82 | ||
83 | rk: |
83 | rk: |
84 | mov edi,[addr] ; load the address of the string |
84 | mov edi,[addr] ; load the address of the string |
85 | mov al,0 ; the symbol we will search for |
85 | mov al,0 ; the symbol we will search for |
86 | mov ecx,STRLEN+1 ; length of the string (+1) |
86 | mov ecx,STRLEN+1 ; length of the string (+1) |
87 | cld ; search forward |
87 | cld ; search forward |
88 | repne scasb ; do search now |
88 | repne scasb ; do search now |
89 | inc ecx ; we've found a zero or ecx became 0 |
89 | inc ecx ; we've found a zero or ecx became 0 |
90 | mov eax,STRLEN+1 |
90 | mov eax,STRLEN+1 |
91 | sub eax,ecx ; eax = address of <0> character |
91 | sub eax,ecx ; eax = address of <0> character |
92 | mov [temp],eax ; position |
92 | mov [temp],eax ; position |
93 | 93 | ||
94 | call print_text |
94 | call print_text |
95 | 95 | ||
96 | mov edi,[addr] ; address of string |
96 | mov edi,[addr] ; address of string |
97 | add edi,[temp] ; cursor position |
97 | add edi,[temp] ; cursor position |
98 | 98 | ||
99 | .waitev: |
99 | .waitev: |
100 | mov eax,10 |
100 | mov eax,10 |
101 | mcall |
101 | mcall |
102 | cmp eax,2 |
102 | cmp eax,2 |
103 | jnz still |
103 | jnz still |
104 | ; mov eax,2 |
104 | ; mov eax,2 |
105 | mcall |
105 | mcall |
106 | shr eax,8 |
106 | shr eax,8 |
107 | cmp eax,8 |
107 | cmp eax,8 |
108 | jnz .nobs ; BACKSPACE |
108 | jnz .nobs ; BACKSPACE |
109 | cmp edi,[addr] |
109 | cmp edi,[addr] |
110 | jz .waitev |
110 | jz .waitev |
111 | dec edi |
111 | dec edi |
112 | mov [edi],byte 0 |
112 | mov [edi],byte 0 |
113 | call print_text |
113 | call print_text |
114 | jmp .waitev |
114 | jmp .waitev |
115 | .nobs: |
115 | .nobs: |
116 | cmp eax,13 ; ENTER |
116 | cmp eax,13 ; ENTER |
117 | je still |
117 | je still |
118 | cmp eax,192 |
118 | cmp eax,192 |
119 | jne .noclear |
119 | jne .noclear |
120 | xor al,al |
120 | xor al,al |
121 | mov edi,[addr] |
121 | mov edi,[addr] |
122 | mov ecx,STRLEN |
122 | mov ecx,STRLEN |
123 | rep stosb |
123 | rep stosb |
124 | mov edi,[addr] |
124 | mov edi,[addr] |
125 | call print_text |
125 | call print_text |
126 | jmp .waitev |
126 | jmp .waitev |
127 | 127 | ||
128 | .noclear: |
128 | .noclear: |
129 | mov [edi],al |
129 | mov [edi],al |
130 | 130 | ||
131 | call print_text |
131 | call print_text |
132 | 132 | ||
133 | inc edi |
133 | inc edi |
134 | mov esi,[addr] |
134 | mov esi,[addr] |
135 | add esi,STRLEN |
135 | add esi,STRLEN |
136 | cmp esi,edi |
136 | cmp esi,edi |
137 | jnz .waitev |
137 | jnz .waitev |
138 | 138 | ||
139 | jmp still |
139 | jmp still |
140 | 140 | ||
141 | 141 | ||
142 | close: |
142 | close: |
143 | or eax,-1 ; close program |
143 | or eax,-1 ; close program |
144 | mcall |
144 | mcall |
145 | 145 | ||
146 | 146 | ||
147 | ;==================================================== |
147 | ;==================================================== |
148 | ; copy_file |
148 | ; copy_file |
149 | ; This piece of code copies src file to dst file, |
149 | ; This piece of code copies src file to dst file, |
150 | ; then it pass the control to copy_error routine, |
150 | ; then it pass the control to copy_error routine, |
151 | ; which returns to the main cycle of the app. |
151 | ; which returns to the main cycle of the app. |
152 | ; It's NOT a function! It's reached by direct jump |
152 | ; It's NOT a function! It's reached by direct jump |
153 | ; from the button handler. |
153 | ; from the button handler. |
154 | ;==================================================== |
154 | ;==================================================== |
155 | copy_file: |
155 | copy_file: |
156 | ; at first we must get the size of the source file |
156 | ; at first we must get the size of the source file |
157 | mcall 70, get_param_info |
157 | mcall 70, get_param_info |
158 | 158 | ||
159 | ; now eax contains error code |
159 | ; now eax contains error code |
160 | test eax,eax ; check if eax is equal to zero (success) |
160 | test eax,eax ; check if eax is equal to zero (success) |
161 | jne copy_error ; print error code now |
161 | jne copy_error ; print error code now |
162 | 162 | ||
163 | ; allocate memory |
163 | ; allocate memory |
164 | mov ecx,[param_info+32] ;ebx |
164 | mov ecx,[param_info+32] ;ebx |
165 | add ecx,0x10000 ; size of memory needed = 0x10000+filesize |
165 | add ecx,0x10000 ; size of memory needed = 0x10000+filesize |
166 | mov eax,64 ; func 64 |
166 | mov eax,64 ; func 64 |
167 | mov ebx,1 ; resize application memory |
167 | mov ebx,1 ; resize application memory |
168 | mcall |
168 | mcall |
169 | 169 | ||
170 | ; check if alloc function failed |
170 | ; check if alloc function failed |
171 | test eax,eax ; non-zero value means error |
171 | test eax,eax ; non-zero value means error |
172 | je .ok_memory |
172 | je .ok_memory |
173 | mov eax,5 ; error 5 - out of memory |
173 | mov eax,5 ; error 5 - out of memory |
174 | jmp copy_error ; print error code now |
174 | jmp copy_error ; print error code now |
175 | .ok_memory: |
175 | .ok_memory: |
176 | 176 | ||
177 | ; save size to source_info |
177 | ; save size to source_info |
178 | mov ebx,[param_info+32] |
178 | mov ebx,[param_info+32] |
179 | mov [source_info.size],ebx ; read the source file |
179 | mov [source_info.size],ebx ; read the source file |
180 | mcall 70,source_info |
180 | mcall 70,source_info |
181 | 181 | ||
182 | ; now eax contains error code |
182 | ; now eax contains error code |
183 | test eax,eax ; check if eax is equal to zero (success) |
183 | test eax,eax ; check if eax is equal to zero (success) |
184 | jne copy_error ; print error code now |
184 | jne copy_error ; print error code now |
185 | 185 | ||
186 | ; file size in bytes |
186 | ; file size in bytes |
187 | mov [dest_info.size],ebx |
187 | mov [dest_info.size],ebx |
188 | 188 | ||
189 | ; save loaded file |
189 | ; save loaded file |
190 | mcall 70,dest_info |
190 | mcall 70,dest_info |
191 | 191 | ||
192 | ; now eax contains error code |
192 | ; now eax contains error code |
193 | test eax,eax |
193 | test eax,eax |
194 | jne copy_error |
194 | jne copy_error |
195 | 195 | ||
196 | ; return to the initial amount of memory |
196 | ; return to the initial amount of memory |
197 | mov eax,64 |
197 | mov eax,64 |
198 | mov ebx,1 |
198 | mov ebx,1 |
199 | mov ecx,0x10000 |
199 | mov ecx,0x10000 |
200 | mcall |
200 | mcall |
201 | 201 | ||
202 | xor eax,eax ; eax = message number (0-OK) |
202 | xor eax,eax ; eax = message number (0-OK) |
203 | 203 | ||
204 | 204 | ||
205 | ; print message now |
205 | ; print message now |
206 | copy_error: |
206 | copy_error: |
207 | mov edi,eax |
207 | mov edi,eax |
208 | mov eax,4 |
208 | mov eax,4 |
209 | mov ebx,20*65536+83 |
209 | mov ebx,20*65536+83 |
210 | mov ecx,0x10ff0000 |
210 | mov ecx,0x10ff0000 |
211 | mov edx,[errors+edi*8] |
211 | mov edx,[errors+edi*8] |
212 | mov esi,[errors+edi*8+4] |
212 | mov esi,[errors+edi*8+4] |
213 | mcall |
213 | mcall |
214 | jmp still |
214 | jmp still |
215 | 215 | ||
216 | 216 | ||
217 | ; print strings (source & destination) |
217 | ; print strings (source & destination) |
218 | print_text: |
218 | print_text: |
219 | mov eax,13 |
219 | mov eax,13 |
220 | mov ebx,107*65536+STRLEN*6 |
220 | mov ebx,107*65536+STRLEN*6 |
221 | mov ecx,[ya] |
221 | mov ecx,[ya] |
222 | shl ecx,16 |
222 | shl ecx,16 |
223 | add ecx,9 |
223 | add ecx,9 |
224 | mov edx,0xf2f2f2 |
224 | mov edx,0xf2f2f2 |
225 | mcall |
225 | mcall |
226 | 226 | ||
227 | mov eax,4 |
227 | mov eax,4 |
228 | mov ebx,109*65536 |
228 | mov ebx,109*65536 |
229 | add ebx,[ya] |
229 | add ebx,[ya] |
230 | xor ecx,ecx |
230 | xor ecx,ecx |
231 | mov edx,[addr] |
231 | mov edx,[addr] |
232 | mov esi,STRLEN |
232 | mov esi,STRLEN |
233 | mcall |
233 | mcall |
234 | 234 | ||
235 | ret |
235 | ret |
236 | 236 | ||
237 | 237 | ||
238 | ; ********************************************* |
238 | ; ********************************************* |
239 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
239 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
240 | ; ********************************************* |
240 | ; ********************************************* |
241 | 241 | ||
242 | 242 | ||
243 | draw_window: |
243 | draw_window: |
244 | 244 | ||
245 | mov eax, 12 ; function 12:tell os about windowdraw |
245 | mov eax, 12 ; function 12:tell os about windowdraw |
246 | mov ebx, 1 ; 1, start of draw |
246 | mov ebx, 1 ; 1, start of draw |
247 | mcall |
247 | mcall |
248 | 248 | ||
249 | ; DRAW WINDOW |
249 | ; DRAW WINDOW |
250 | xor eax, eax ; function 0 : define and draw window |
250 | xor eax, eax ; function 0 : define and draw window |
251 | mov ebx, 160*65536+415 ; [x start] *65536 + [x size] |
251 | mov ebx, 160*65536+415 ; [x start] *65536 + [x size] |
252 | mov ecx, 160*65536+100 ; [y start] *65536 + [y size] |
252 | mov ecx, 160*65536+100 ; [y start] *65536 + [y size] |
253 | mov edx, 0x13DDDDDD ; color of work area RRGGBB |
253 | mov edx, 0x14DDDDDD ; color of work area RRGGBB |
254 | mov edi, title ; WINDOW LABEL |
254 | mov edi, title ; WINDOW LABEL |
255 | mcall |
255 | mcall |
256 | 256 | ||
257 | mov eax, 8 ; COPY BUTTON |
257 | mov eax, 8 ; COPY BUTTON |
258 | mov ebx, 20*65536+375 |
258 | mov ebx, 20*65536+375 |
259 | mov ecx, 63*65536+16 |
259 | mov ecx, 63*65536+16 |
260 | mov edx, 2 |
260 | mov edx, 2 |
261 | mov esi, 0xCCCCCC |
261 | mov esi, 0xCCCCCC |
262 | mcall |
262 | mcall |
263 | 263 | ||
264 | mov ebx, 105*65536+290 |
264 | mov ebx, 105*65536+290 |
265 | mov ecx, 33*65536+12 |
265 | mov ecx, 33*65536+12 |
266 | mov edx, 4 |
266 | mov edx, 4 |
267 | mov esi, 0xEBEBEB |
267 | mov esi, 0xEBEBEB |
268 | mcall |
268 | mcall |
269 | 269 | ||
270 | mov ebx, 105*65536+290 |
270 | mov ebx, 105*65536+290 |
271 | mov ecx, 49*65536+12 |
271 | mov ecx, 49*65536+12 |
272 | mov edx, 5 |
272 | mov edx, 5 |
273 | mov esi, 0xEBEBEB |
273 | mov esi, 0xEBEBEB |
274 | mcall |
274 | mcall |
275 | 275 | ||
276 | mov esi, source_info.name ;source |
276 | mov esi, source_info.name ;source |
277 | mov edi, text+14 |
277 | mov edi, text+14 |
278 | mov ecx, STRLEN |
278 | mov ecx, STRLEN |
279 | rep movsb |
279 | rep movsb |
280 | 280 | ||
281 | mov esi, dest_info.name ;destination |
281 | mov esi, dest_info.name ;destination |
282 | mov edi, text+STRLEN+59-45+14 |
282 | mov edi, text+STRLEN+59-45+14 |
283 | mov ecx, STRLEN |
283 | mov ecx, STRLEN |
284 | rep movsb |
284 | rep movsb |
285 | 285 | ||
286 | mov ebx, 25*65536+36 ; print filenames |
286 | mov ebx, 25*65536+36 ; print filenames |
287 | xor ecx, ecx |
287 | xor ecx, ecx |
288 | mov edx, text |
288 | mov edx, text |
289 | mov esi, STRLEN+59-45 |
289 | mov esi, STRLEN+59-45 |
290 | newline: |
290 | newline: |
291 | mov eax, 4 |
291 | mov eax, 4 |
292 | mcall |
292 | mcall |
293 | add ebx, 16 |
293 | add ebx, 16 |
294 | add edx, STRLEN+59-45 |
294 | add edx, STRLEN+59-45 |
295 | cmp [edx], byte 'x' |
295 | cmp [edx], byte 'x' |
296 | jnz newline |
296 | jnz newline |
297 | 297 | ||
298 | mov eax, 12 ; function 12:tell os about windowdraw |
298 | mov eax, 12 ; function 12:tell os about windowdraw |
299 | mov ebx, 2 ; 2, end of draw |
299 | mov ebx, 2 ; 2, end of draw |
300 | mcall |
300 | mcall |
301 | 301 | ||
302 | ret |
302 | ret |
303 | 303 | ||
304 | 304 | ||
305 | ; DATA AREA |
305 | ; DATA AREA |
306 | get_param_info: |
306 | get_param_info: |
307 | .subfunction dd 5 ; 5 - get parameters of file |
307 | .subfunction dd 5 ; 5 - get parameters of file |
308 | .start dd 0 ; rezerved |
308 | .start dd 0 ; rezerved |
309 | .size_high dd 0 ; rezerved |
309 | .size_high dd 0 ; rezerved |
310 | .size dd 0 ; rezerved |
310 | .size dd 0 ; rezerved |
311 | .return dd param_info |
311 | .return dd param_info |
312 | .name: |
312 | .name: |
313 | db 0 |
313 | db 0 |
314 | dd source_info.name |
314 | dd source_info.name |
315 | 315 | ||
316 | source_info: ; SOURCE FILEINFO |
316 | source_info: ; SOURCE FILEINFO |
317 | .subfunction dd 0 ; 0=READ |
317 | .subfunction dd 0 ; 0=READ |
318 | .start dd 0 |
318 | .start dd 0 |
319 | .size_high dd 0 |
319 | .size_high dd 0 |
320 | .size dd 0 |
320 | .size dd 0 |
321 | .return dd 0x10000 |
321 | .return dd 0x10000 |
322 | .name: |
322 | .name: |
323 | db '/hd0/1/kernel/kernel.mnt',0 ; ASCIIZ dir & filename |
323 | db '/hd0/1/kernel/kernel.mnt',0 ; ASCIIZ dir & filename |
324 | times (STRLEN-24) db 0 |
324 | times (STRLEN-24) db 0 |
325 | 325 | ||
326 | dest_info: ; DESTINATION FILEINFO |
326 | dest_info: ; DESTINATION FILEINFO |
327 | .subfunction dd 2 ; 0=WRITE |
327 | .subfunction dd 2 ; 0=WRITE |
328 | .start dd 0 |
328 | .start dd 0 |
329 | .size_high dd 0 |
329 | .size_high dd 0 |
330 | .size dd 0 |
330 | .size dd 0 |
331 | .return dd 0x10000 |
331 | .return dd 0x10000 |
332 | .name: |
332 | .name: |
333 | db '/sys/kernel.mnt',0 ; ASCIIZ dir & filename |
333 | db '/sys/kernel.mnt',0 ; ASCIIZ dir & filename |
334 | times (STRLEN-16) db 0 |
334 | times (STRLEN-16) db 0 |
335 | 335 | ||
336 | param_info: |
336 | param_info: |
337 | rb 40 |
337 | rb 40 |
338 | 338 | ||
339 | 339 | ||
340 | ;align 4 |
340 | ;align 4 |
341 | ;source_info: ; SOURCE FILEINFO |
341 | ;source_info: ; SOURCE FILEINFO |
342 | ; .mode dd 0 ; read file |
342 | ; .mode dd 0 ; read file |
343 | ; .start_block dd 0x0 ; block to read |
343 | ; .start_block dd 0x0 ; block to read |
344 | ; .blocks dd 0x700 ; num of blocks |
344 | ; .blocks dd 0x700 ; num of blocks |
345 | ; .address dd 0x20000 |
345 | ; .address dd 0x20000 |
346 | ; .workarea dd 0x10000 |
346 | ; .workarea dd 0x10000 |
347 | ; source db '/HD/1/KERNEL/KERNEL.MNT',0 |
347 | ; source db '/HD/1/KERNEL/KERNEL.MNT',0 |
348 | ; times (STRLEN-23) db 0 |
348 | ; times (STRLEN-23) db 0 |
349 | ; |
349 | ; |
350 | ;dest_info: ; DESTINATION FILEINFO |
350 | ;dest_info: ; DESTINATION FILEINFO |
351 | ; .mode dd 1 ; write |
351 | ; .mode dd 1 ; write |
352 | ; .notused dd 0x0 ; not used |
352 | ; .notused dd 0x0 ; not used |
353 | ; .bytes2write dd 0 ; bytes to write |
353 | ; .bytes2write dd 0 ; bytes to write |
354 | ; .address dd 0x20000 |
354 | ; .address dd 0x20000 |
355 | ; .workarea dd 0x10000 |
355 | ; .workarea dd 0x10000 |
356 | ; destination db '/RD/1/KERNEL.MNT',0 |
356 | ; destination db '/RD/1/KERNEL.MNT',0 |
357 | ; times (STRLEN-16) db 0 |
357 | ; times (STRLEN-16) db 0 |
358 | 358 | ||
359 | align 4 |
359 | align 4 |
360 | addr dd 0x0 |
360 | addr dd 0x0 |
361 | ya dd 0x0 |
361 | ya dd 0x0 |
362 | temp dd 0 |
362 | temp dd 0 |
363 | 363 | ||
364 | 364 | ||
365 | lsz text,\ |
365 | lsz text,\ |
366 | ru, ' : | ®áá¨ï, à®á« ¢«ì ',\ |
366 | ru, ' : | ®áá¨ï, à®á« ¢«ì ',\ |
367 | ru, ' : | ®¤¤ã¡ë© ¢ , ivan-yar@bk.ru ',\ |
367 | ru, ' : | ®¤¤ã¡ë© ¢ , ivan-yar@bk.ru ',\ |
368 | ru, ' ',\ |
368 | ru, ' ',\ |
369 | ru, 'x',\ ; <- END MARKER, DONT DELETE |
369 | ru, 'x',\ ; <- END MARKER, DONT DELETE |
370 | \ |
370 | \ |
371 | en, 'SOURCE: | Russia, Yaroslavl ',\ |
371 | en, 'SOURCE: | Russia, Yaroslavl ',\ |
372 | en, 'DESTINATION: | Poddubny Ivan, ivan-yar@bk.ru ',\ |
372 | en, 'DESTINATION: | Poddubny Ivan, ivan-yar@bk.ru ',\ |
373 | en, ' COPY SOURCE -> DESTINATION ',\ |
373 | en, ' COPY SOURCE -> DESTINATION ',\ |
374 | en, 'x',\ ; <- END MARKER, DONT DELETE |
374 | en, 'x',\ ; <- END MARKER, DONT DELETE |
375 | \ |
375 | \ |
376 | de, 'QUELLE: | Russia, Yaroslavl ',\ |
376 | de, 'QUELLE: | Russia, Yaroslavl ',\ |
377 | de, 'ZIEL: | Poddubny Ivan, ivan-yar@bk.ru ',\ |
377 | de, 'ZIEL: | Poddubny Ivan, ivan-yar@bk.ru ',\ |
378 | de, ' KOPIERE QUELLE -> ZIEL ',\ |
378 | de, ' KOPIERE QUELLE -> ZIEL ',\ |
379 | de, 'x',\ ; <- END MARKER, DONT DELETE |
379 | de, 'x',\ ; <- END MARKER, DONT DELETE |
380 | \ |
380 | \ |
381 | fr, 'SOURCE: | ',\ |
381 | fr, 'SOURCE: | ',\ |
382 | fr, 'DESTINATION: | ',\ |
382 | fr, 'DESTINATION: | ',\ |
383 | fr, ' COPIER ',\ |
383 | fr, ' COPIER ',\ |
384 | fr, 'x' |
384 | fr, 'x' |
385 | 385 | ||
386 | 386 | ||
387 | lsz title,\ |
387 | lsz title,\ |
388 | ru, ' ',\ |
388 | ru, ' ',\ |
389 | en, 'SYSTREE FILE COPIER',\ |
389 | en, 'SYSTREE FILE COPIER',\ |
390 | de, 'SYSTREE DATEIKOPIERER',\ |
390 | de, 'SYSTREE DATEIKOPIERER',\ |
391 | fr, 'COPIER LE FICHIER' |
391 | fr, 'COPIER LE FICHIER' |
392 | 392 | ||
393 | 393 | ||
394 | ; This macro is used to define a string table in format |
394 | ; This macro is used to define a string table in format |
395 | macro strtbl name,[string] |
395 | macro strtbl name,[string] |
396 | { |
396 | { |
397 | common |
397 | common |
398 | label name dword |
398 | label name dword |
399 | forward |
399 | forward |
400 | local str,size |
400 | local str,size |
401 | dd str,size |
401 | dd str,size |
402 | forward |
402 | forward |
403 | str db string |
403 | str db string |
404 | size = $ - str |
404 | size = $ - str |
405 | } |
405 | } |
406 | 406 | ||
407 | if lang eq ru |
407 | if lang eq ru |
408 | strtbl errors,\ |
408 | strtbl errors,\ |
409 | "ä ©« ᪮¯¨à®¢ ãᯥè®",\ |
409 | "ä ©« ᪮¯¨à®¢ ãᯥè®",\ |
410 | "(ç⥨¥) ¥ § ¤ ¡ § ¦¤",\ |
410 | "(ç⥨¥) ¥ § ¤ ¡ § ¦¤",\ |
411 | "(ç⥨¥) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
411 | "(ç⥨¥) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
412 | "(ç⥨¥) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
412 | "(ç⥨¥) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
413 | "(ç⥨¥) ¥ § ¤ à §¤¥« ¦¤",\ |
413 | "(ç⥨¥) ¥ § ¤ à §¤¥« ¦¤",\ |
414 | "¥¤®áâ â®ç® ¯ ¬ïâ¨",\ |
414 | "¥¤®áâ â®ç® ¯ ¬ïâ¨",\ |
415 | "(ç⥨¥) ª®¥æ ä ©« ",\ |
415 | "(ç⥨¥) ª®¥æ ä ©« ",\ |
416 | "(ç⥨¥) ¥¨§¢¥áâ ï ®è¨¡ª ",\ |
416 | "(ç⥨¥) ¥¨§¢¥áâ ï ®è¨¡ª ",\ |
417 | "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
417 | "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
418 | "(§ ¯¨áì) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
418 | "(§ ¯¨áì) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
419 | "(§ ¯¨áì) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
419 | "(§ ¯¨áì) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
420 | "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
420 | "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
421 | "?",\ |
421 | "?",\ |
422 | "(§ ¯¨áì) ä ©« ¥ ©¤¥",\ |
422 | "(§ ¯¨áì) ä ©« ¥ ©¤¥",\ |
423 | "(§ ¯¨áì) ¥¨§¢¥áâ ï ®è¨¡ª " |
423 | "(§ ¯¨áì) ¥¨§¢¥áâ ï ®è¨¡ª " |
424 | else if lang eq en |
424 | else if lang eq en |
425 | strtbl errors,\ |
425 | strtbl errors,\ |
426 | "Success!",\ |
426 | "Success!",\ |
427 | "(read) no hd base or partition defined",\ |
427 | "(read) no hd base or partition defined",\ |
428 | "(read) unsupported file system",\ |
428 | "(read) unsupported file system",\ |
429 | "(read) unknown file system",\ |
429 | "(read) unknown file system",\ |
430 | "(read) hd partition not defined",\ |
430 | "(read) hd partition not defined",\ |
431 | "out of memory",\ |
431 | "out of memory",\ |
432 | "(read) end of file",\ |
432 | "(read) end of file",\ |
433 | "(read) unknown error",\ |
433 | "(read) unknown error",\ |
434 | "(write) no hd base or partition defined",\ |
434 | "(write) no hd base or partition defined",\ |
435 | "(write) unsupported file system",\ |
435 | "(write) unsupported file system",\ |
436 | "(write) unknown file system",\ |
436 | "(write) unknown file system",\ |
437 | "(write) hd partition not defined",\ |
437 | "(write) hd partition not defined",\ |
438 | "?",\ |
438 | "?",\ |
439 | "(write) end of file",\ |
439 | "(write) end of file",\ |
440 | "(write) unknown error" |
440 | "(write) unknown error" |
441 | else |
441 | else |
442 | strtbl errors,\ |
442 | strtbl errors,\ |
443 | "Erfolgreich!",\ |
443 | "Erfolgreich!",\ |
444 | "(lesen) Keine Festplatte oder Partition definiert",\ |
444 | "(lesen) Keine Festplatte oder Partition definiert",\ |
445 | "(lesen) Dateisystem nicht unterstuetzt",\ |
445 | "(lesen) Dateisystem nicht unterstuetzt",\ |
446 | "(lesen) Unbekanntes Dateisystem",\ |
446 | "(lesen) Unbekanntes Dateisystem",\ |
447 | "(lesen) Keine Partition definiert",\ |
447 | "(lesen) Keine Partition definiert",\ |
448 | "Zu wenig Speicher",\ |
448 | "Zu wenig Speicher",\ |
449 | "(lesen) Dateiende erreicht",\ |
449 | "(lesen) Dateiende erreicht",\ |
450 | "(lesen) Unbekanner Fehler",\ |
450 | "(lesen) Unbekanner Fehler",\ |
451 | "(schreiben) Keine Festplatte oder Partition definiert",\ |
451 | "(schreiben) Keine Festplatte oder Partition definiert",\ |
452 | "(schreiben) Dateisystem nicht unterstuetzt",\ |
452 | "(schreiben) Dateisystem nicht unterstuetzt",\ |
453 | "(schreiben) Unbekanntes Dateisystem",\ |
453 | "(schreiben) Unbekanntes Dateisystem",\ |
454 | "(schreiben) Keine Partition definiert",\ |
454 | "(schreiben) Keine Partition definiert",\ |
455 | "?",\ |
455 | "?",\ |
456 | "(schreiben) Dateiende erreicht",\ |
456 | "(schreiben) Dateiende erreicht",\ |
457 | "(schreiben) Unbekanner Fehler" |
457 | "(schreiben) Unbekanner Fehler" |
458 | end if |
458 | end if |
459 | 459 | ||
460 | I_END:->->->0> |
460 | I_END:->->->0> |