/programs/other/outdated/cmd/trunk/cmd.asm |
---|
0,0 → 1,2963 |
; CMD - Command line interpreter |
; copyleft Chemist dmitry_gt@tut.by |
; |
; Compile with FASM for Menuet |
; |
; |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x300000 |
dd 0x7fff0 |
dd 0x0 |
dd 0x0 |
include "..\..\..\..\macros.inc" |
include "lang.inc" |
START: |
call cmdexist |
call draw |
call fill |
call clearcmd |
call autoexec |
call ppr |
call cursor |
still: |
mov eax,10 |
mcall |
cmp eax,1 |
je re |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
jmp still |
button: |
mov eax,17 |
mcall |
cmp ah,1 |
jne noclose |
jmp exit |
noclose: |
jmp still |
re: |
call draw |
call red |
jmp still |
red: |
call cls1 |
mov dword [xpos],24 |
mov dword [linev],2000 |
mov eax,dword [ypos] |
push eax |
mov dword [ypos],6 |
mov ecx,dword [lpress] |
loop1: |
push ecx |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,tic_table |
add edx,dword [linev] |
mov esi,81 |
mcall |
add dword [xpos],10 |
add dword [linev],81 |
pop ecx |
loop loop1 |
sub dword [xpos],10 |
no_line: |
pop eax |
mov dword [ypos],eax |
no_red: |
ret |
key: |
mov eax,2 |
mcall |
cmp ah,27 |
jne no_escape |
mov dword [ypos],42 |
call clearstr |
call ppr |
mov dword [count],0 |
call cursor |
jmp still |
no_escape: |
cmp ah,178 |
jne no_aup |
cmp dword [count],0 |
jne no_aup |
cmp dword [oldcount],0 |
je no_aup |
call clearsum |
sub dword [ypos],6 |
cld |
mov ecx,81 |
mov edi,tic_table+600 |
mov esi,tic_table+900 |
rep movsb |
cld |
mov ecx,dword [oldcount] |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+600 |
rep movsb |
call red |
mov eax,dword [oldcount] |
mov dword [count],eax |
add dword [linen],eax |
add dword [linel],eax |
mov ebx,6 |
imul ebx,eax |
add dword [ypos],ebx |
call cursor |
jmp still |
no_aup: |
cmp ah,8 |
jne no_backspace |
cmp dword [count],0 |
je still |
cmp dword [count],0 |
je no_backspace |
call clearsum |
sub dword [ypos],12 |
call clearsum |
sub dword [ypos],6 |
call cursor |
dec dword [count] |
jmp still |
no_backspace: |
cmp ah,13 |
jne no_enter |
cmp dword [count],0 |
jne enter_ok |
call clearsum |
jmp ecmd2 |
enter_ok: |
call checkcmd |
cmp byte [tic_table+600],'/' |
jne no_script |
cmp dword [count],1 |
je nparam5 |
jmp command |
no_script: |
call oldcmd |
call checkprg |
jmp ecmd2 |
no_enter: |
cmp ah,176 ; Arrow keys, HOME, END, and DEL are unsupported now |
je still |
cmp ah,179 |
je still |
cmp ah,177 |
je still |
cmp ah,178 |
je still |
cmp ah,182 |
je still |
cmp ah,180 |
je still |
cmp ah,181 |
je still |
cmp dword [count],74 |
je still |
mov byte [smb],ah |
mov edi,tic_table+600 |
add edi,dword [count] |
mov esi,smb |
movsb |
inc dword [count] |
call clearsum |
sub dword [ypos],6 |
call print |
add dword [ypos],6 |
call cursor |
jmp still |
clearstr: |
mov dword [ypos],6 |
mov dword [clr],480 |
call clear |
mov eax,dword [linel] |
sub dword [linen],eax |
mov dword [linel],0 |
mov ecx,eax |
push eax |
loop4: |
push ecx |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,fill1 |
movsb |
inc dword [linen] |
pop ecx |
loop loop4 |
pop eax |
sub dword [linen],eax |
mov dword [ypos],42 |
ret |
clearsum: |
mov dword [clr],6 |
call clear |
dec dword [linen] |
dec dword [linel] |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,fill1 |
movsb |
ret |
clear: |
mov eax,13 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[clr] |
mov ecx,[xpos] |
shl ecx,16 |
add ecx,9 |
mov edx,0 |
mcall |
add dword [ypos],6 |
ret |
draw: |
mov eax,12 |
mov ebx,1 |
mcall |
mov eax,0 |
mov ebx,100*65536+492 |
mov ecx,100*65536+280 |
mov edx,0x13000000 |
mov edi,title |
mcall |
mov eax,12 |
mov ebx,2 |
mcall |
ret |
print: |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,smb |
mov esi,1 |
mcall |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,smb |
movsb |
inc dword [linen] |
inc dword [linel] |
ret |
cursor: |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,smb_cursor |
mov esi,1 |
mcall |
mov edi,tic_table |
mov esi,smb_cursor |
add edi,dword [linen] |
movsb |
inc dword [linen] |
inc dword [linel] |
ret |
ppr: |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,prompt |
mov esi,5 |
mcall |
mov dword [ypos],42 |
cld |
mov ecx,5 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,prompt |
rep movsb |
add dword [linen],6 |
add dword [linel],6 |
ret |
help: |
cmp byte [callp],1 |
je gonext8 |
call clearsum |
gonext8: |
call newline |
call newline |
mov edx,h1 |
call printf |
call newline |
mov edx,h2 |
call printf |
call newline |
call newline |
mov edx,h3 |
call printf |
call newline |
call newline |
mov edx,h4 |
call printf |
call newline |
mov edx,h5 |
call printf |
call newline |
mov edx,h6 |
call printf |
call newline |
mov edx,h7 |
call printf |
call newline |
call newline |
mov edx,h8 |
call printf |
call newline |
mov edx,h9 |
call printf |
call newline |
mov edx,h10 |
call printf |
call newline |
mov edx,h11 |
call printf |
call newline |
mov edx,h12 |
call printf |
call newline |
mov edx,h13 |
call printf |
call newline |
call newline |
mov edx,h14 |
call printf |
call newline |
call newline |
mov edx,h15 |
call printf |
call newline |
mov edx,h16 |
call printf |
call newline |
cmp byte [callp],1 |
je go |
jmp ecmd |
ver: |
cmp byte [callp],1 |
je gonext7 |
call clearsum |
gonext7: |
call newline |
mov edx,about |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
pause1: |
cmp byte [callp],1 |
je gonext1 |
call clearsum |
gonext1: |
call pause2 |
cmp byte [callp],1 |
je go |
jmp ecmd |
ls: |
call oldcmd |
call cls2 |
and dword [dirinfo+4], 0 |
loopls: |
mov eax, 70 |
mov ebx, dirinfo |
mcall |
inc dword [dirinfo+4] |
cmp ebx, 1 |
jnz ls_end |
mov esi, direntry_buffer+32+40 |
mov edi, filename |
@@: |
lodsb |
stosb |
test al, al |
jnz @b |
@@: |
cmp edi, filename+12 |
jae ls_print |
stosb |
jmp @b |
ls_print_done: |
inc byte [lscntf] |
add dword [ypos],96 |
cmp byte [lscntf],5 |
jne no_newline |
mov byte [lscntf],0 |
inc byte [lscntx] |
cmp byte [lscntx],23 |
je pause2n |
mov dword [ypos],6 |
call newline |
no_newline: |
add dword [lscnt],24 |
jmp no_pause2 |
pause2n: |
mov byte [lscntx],0 |
call newline |
call pause2 |
call cls2 |
mov dword [lscnt],8024 |
jmp loopls |
no_pause2: |
mov dword [lscnt],8024 |
jmp loopls |
ls_end: |
mov dword [lscnt],8024 |
mov byte [lscntf],0 |
mov byte [lscntx],0 |
cmp byte [callp],1 |
je go |
jmp ecmd2 |
ls_print: |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov edx,filename |
mov ecx,0x00ddeeff |
mov esi,12 |
mcall |
cld |
mov ecx,12 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,filename |
rep movsb |
add dword [linen],16 |
add dword [linel],16 |
jmp ls_print_done |
lscheck: |
cmp byte [callp],1 |
je gonext9 |
call clearsum |
gonext9: |
sub dword [count],3 |
cld |
mov ecx,dword [count] |
mov edi,tic_table+400 |
mov esi,tic_table+600 |
add esi,3 |
rep movsb |
mov ebx,tic_table+400 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+400 |
mov ecx,70 |
strup2: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup2 |
pop eax ecx edi esi |
mov ecx,dword [count] |
looplsc: |
cmp byte [tic_table+400+ecx],'.' |
je chdot |
loop looplsc |
jmp chnodot |
chdot: |
mov ebx,dword [count] |
cld |
mov ecx,5 |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,dzero |
rep movsb |
mov eax,6 |
mov ebx,tic_table+400 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je nosuchfile |
jmp lschok |
chnodot: |
mov ebx,dword [count] |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
mov eax,6 |
mov ebx,tic_table+400 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je nosuchfile |
mov edi,tic_table+400 |
add edi,dword [count] |
mov esi,fill1 |
movsb |
lschok: |
call newline |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov edx,tic_table+400 |
mov esi,12 |
mov ecx,0x00ddeeff |
mcall |
cld |
mov ecx,12 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+400 |
rep movsb |
add dword [linen],12 |
add dword [linel],12 |
add dword [count],3 |
cmp byte [callp],1 |
je go |
jmp ecmd |
ps: |
call oldcmd |
call cls2 |
call newline |
mov edx,proc_head |
call printf |
call newline |
mov edx,proc_hd11 |
call printf |
call newline |
call newline |
mov eax,9 |
mov ebx,tic_table |
mov ecx,1 |
mcall |
mov dword [count2],eax |
ll1: |
inc dword [pn] |
mov eax,9 |
mov ebx,tic_table |
mov ecx,[pn] |
mcall |
mov ebx,[tic_table+30] |
mov dword [fnumb],4 |
mov dword [ypos],6 |
call decnumb |
cld |
mov ecx,4 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+200 |
rep movsb |
add dword [linen],5 |
add dword [linel],5 |
cld |
mov ecx,11 |
mov esi,tic_table+10 |
mov edi,pname |
rep movsb |
mov dword [ypos],36 |
mov edx,pname |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov esi,12 |
mcall |
cld |
mov ecx,11 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,pname |
rep movsb |
add dword [linen],10 |
add dword [linel],10 |
mov dword [ypos],94 |
mov ebx,[tic_table+22] |
mov dword [fnumb],8 |
call decnumb |
cld |
mov ecx,8 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+200 |
rep movsb |
add dword [linen],10 |
add dword [linel],10 |
mov dword [ypos],154 |
mov ebx,[tic_table+26] |
mov dword [fnumb],8 |
call decnumb |
cld |
mov ecx,8 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+200 |
rep movsb |
add dword [linen],12 |
add dword [linel],12 |
mov dword [ypos],228 |
mov ebx,[pn] |
mov dword [fnumb],4 |
call decnumb |
cld |
mov ecx,4 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+200 |
rep movsb |
add dword [linel],4 |
add dword [linen],4 |
call newline |
mov dword [ypos],60 |
cmp dword [xpos],254 |
jne nscreen |
call pause2 |
call cls2 |
mov dword [xpos],24 |
call newline |
mov dword [ypos],60 |
mov edx,proc_head |
call printf |
call newline |
mov edx,proc_hd11 |
call printf |
call newline |
call newline |
nscreen: |
mov eax, dword [count2] |
cmp dword [pn],eax |
jne ll1 |
mov dword [pn],0 |
cmp byte [callp],1 |
je go |
jmp ecmd2 |
printn: |
mov eax,47 |
shl ebx,16 |
mov edx,[ypos] |
shl edx,16 |
add edx,[xpos] |
mov esi,0x00ddeeff |
mcall |
ret |
pause2: |
call newline |
mov edx,mess1 |
call printf |
mov eax,10 |
mcall |
red3: |
cmp eax,2 |
je back |
cmp eax,3 |
je exit |
call draw |
call red |
mov eax,10 |
mcall |
jmp red3 |
back: |
mov eax,2 |
mcall |
cmp ah,27 |
je checmd |
ret |
exit: |
mov eax,-1 |
mcall |
checmd: |
cmp byte [callp],1 |
je ecmd3 |
jmp ecmd |
errr: |
call clearsum |
call newline |
call ppr |
cmp dword [count],0 |
je ecmd1 |
mov edx,err1 |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov esi,33 |
mcall |
cld |
mov ecx,27 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,err1 |
rep movsb |
add dword [linen],27 |
add dword [linel],27 |
call clearcmd |
jmp cmd_ok2 |
nparam: |
cmp byte [callp],1 |
je gonext4 |
call clearsum |
gonext4: |
call newline |
mov edx,mess2 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
nparam2: |
cmp byte [callp],1 |
je gonext3 |
call clearsum |
gonext3: |
call newline |
mov edx,mess5 |
call printf |
cmp byte [callp],0 |
je ecmd |
jmp go |
cp: |
cmp byte [callp],1 |
je gonext10 |
call clearsum |
gonext10: |
sub dword [count],3 |
cld |
mov ecx,dword [count] |
mov edi,tic_table+400 |
mov esi,tic_table+600 |
add esi,3 |
rep movsb |
mov ecx,12 |
loop50: |
cmp byte [tic_table+400+ecx],'+' |
je file2 |
loop loop50 |
add dword [count],3 |
jmp nparam3 |
file2: |
mov dword [f1len],ecx |
inc ecx |
mov ebx,ecx |
cld |
mov edi,tic_table+9000 |
mov esi,tic_table+400 |
rep movsb |
mov ecx,12 |
mov edi,tic_table+9100 |
mov esi,tic_table+400 |
add esi,ebx |
rep movsb |
mov ebx,tic_table+9000 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+9000 |
mov ecx,12 |
strup3: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup3 |
pop eax ecx edi esi |
mov ecx,dword [f1len] |
loopcp: |
cmp byte [tic_table+9000+ecx],'.' |
je chdotcp |
loop loopcp |
jmp chnodotcp |
chdotcp: |
mov ebx,dword [f1len] |
cld |
mov ecx,4 |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,dzero |
rep movsb |
jmp gocp1 |
chnodotcp: |
mov ebx,dword [f1len] |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
gocp1: |
mov eax,6 |
mov ebx,tic_table+9000 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je nosuchfile |
mov dword [filesize],eax |
mov ebx,tic_table+9100 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+9100 |
mov ecx,12 |
strup4: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup4 |
pop eax ecx edi esi |
mov ebx,dword [f1len] |
mov ecx,dword [count] |
sub ecx,ebx |
mov dword [f2len],ecx |
loopcp2: |
cmp byte [tic_table+9100+ecx],'.' |
je chdotcp2 |
loop loopcp2 |
jmp chnodotcp2 |
chdotcp2: |
mov ebx,dword [f2len] |
cld |
mov ecx,4 |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,dzero |
rep movsb |
jmp gocp2 |
chnodotcp2: |
mov ebx,dword [f2len] |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
gocp2: |
mov eax,6 |
mov ebx,tic_table+9100 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
jne alreadyexist |
mov eax,33 |
mov ebx,tic_table+9100 |
mov ecx,tic_table+25000 |
mov edx,dword [filesize] |
mov esi,0 |
mcall |
cmp eax,0 |
jne no_ok |
mov eax,6 |
mov ebx,tic_table+9100 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je no_ok |
call newline |
mov edx,mess11 |
call printf |
jmp cp_end |
no_ok: |
call newline |
mov edx,mess12 |
call printf |
cp_end: |
add dword [count],3 |
cmp byte [callp],1 |
je go |
jmp ecmd |
alreadyexist: |
add dword [count],3 |
call newline |
mov edx,mess13 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
rn: |
cmp byte [callp],1 |
je gonext11 |
call clearsum |
gonext11: |
sub dword [count],3 |
cld |
mov ecx,dword [count] |
mov edi,tic_table+400 |
mov esi,tic_table+600 |
add esi,3 |
rep movsb |
mov ecx,12 |
loop51: |
push ecx |
cmp byte [tic_table+400+ecx],'+' |
je file3 |
pop ecx |
loop loop51 |
add dword [count],3 |
jmp nparam4 |
file3: |
mov dword [f1len],ecx |
inc ecx |
mov ebx,ecx |
cld |
mov edi,tic_table+9000 |
mov esi,tic_table+400 |
rep movsb |
mov ecx,12 |
mov edi,tic_table+9100 |
mov esi,tic_table+400 |
add esi,ebx |
rep movsb |
mov ebx,tic_table+9000 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+9000 |
mov ecx,12 |
strup5: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup5 |
pop eax ecx edi esi |
mov ecx,dword [f1len] |
looprn: |
cmp byte [tic_table+9000+ecx],'.' |
je chdotrn |
loop looprn |
jmp chnodotrn |
chdotrn: |
mov ebx,dword [f1len] |
cld |
mov ecx,4 |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,dzero |
rep movsb |
jmp gorn1 |
chnodotrn: |
mov ebx,dword [f1len] |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+9000 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
gorn1: |
mov eax,6 |
mov ebx,tic_table+9000 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je nosuchfile |
mov ebx,tic_table+9100 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+9100 |
mov ecx,12 |
strup6: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup6 |
pop eax ecx edi esi |
mov ebx,dword [f1len] |
mov ecx,dword [count] |
sub ecx,ebx |
mov dword [f2len],ecx |
looprn2: |
cmp byte [tic_table+9100+ecx],'.' |
je chdotrn2 |
loop looprn2 |
jmp chnodotrn2 |
chdotrn2: |
mov ebx,dword [f2len] |
cld |
mov ecx,4 |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,dzero |
rep movsb |
jmp gorn2 |
chnodotrn2: |
mov ebx,dword [f2len] |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+9100 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
gorn2: |
mov eax,6 |
mov ebx,tic_table+9100 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
jne alreadyexist |
mov eax,6 |
mov ebx,tic_table+9000 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
mov dword [filesize],eax |
mov eax,33 |
mov ebx,tic_table+9100 |
mov ecx,tic_table+25000 |
mov edx,dword [filesize] |
mov esi,0 |
mcall |
cmp eax,0 |
jne no_ok1 |
mov eax,6 |
mov ebx,tic_table+9100 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je no_ok1 |
mov eax,32 |
mov ebx,tic_table+9000 |
mcall |
call newline |
mov edx,mess14 |
call printf |
jmp rn_end |
no_ok1: |
call newline |
mov edx,mess15 |
call printf |
rn_end: |
add dword [count],3 |
cmp byte [callp],1 |
je go |
jmp ecmd |
del: |
cmp byte [callp],1 |
je gonext12 |
call clearsum |
gonext12: |
sub dword [count],4 |
cld |
mov ecx,dword [count] |
mov edi,tic_table+400 |
mov esi,tic_table+600 |
add esi,4 |
rep movsb |
mov ebx,tic_table+400 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+400 |
mov ecx,70 |
strup1: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup1 |
pop eax ecx edi esi |
mov ecx,dword [count] |
loopdel: |
cmp byte [tic_table+400+ecx],'.' |
je chdotdel |
loop loopdel |
jmp chnodotdel |
chdotdel: |
mov ebx,dword [count] |
cld |
mov ecx,4 |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,dzero |
rep movsb |
jmp godel |
chnodotdel: |
mov ebx,dword [count] |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,ddot |
movsb |
inc ebx |
cld |
mov ecx,3 |
mov edi,tic_table+400 |
add edi,ebx |
mov esi,fill3 |
rep movsb |
godel: |
mov eax,6 |
mov ebx,tic_table+400 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
mcall |
cmp eax,4294967295 |
je nosuchfile2 |
mov eax,32 |
mov ebx,tic_table+400 |
mcall |
call newline |
mov edx,mess6 |
call printf |
add dword [count],4 |
del_end: |
add dword [count],4 |
cmp byte [callp],1 |
je go |
jmp ecmd |
nosuchfile: |
add dword [count],3 |
call newline |
mov edx,mess7 |
call printf |
cmp byte [callp],0 |
je ecmd |
jmp go |
nosuchfile2: |
add dword [count],4 |
call newline |
mov edx,mess7 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
nosuchfile3: |
inc dword [count] |
call newline |
mov edx,mess7 |
call printf |
jmp ecmd |
autoexec: |
mov eax,6 |
mov ebx,autoexfile |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+15000 |
mcall |
cmp eax,4294967295 |
je noaxfile |
sub dword [linen],81 |
sub dword [xpos],10 |
dec dword [lpress] |
jmp autolabel |
noaxfile: |
ret |
command: |
call clearsum |
dec dword [count] |
cld |
mov ecx,dword [count] |
mov edi,filename |
mov esi,tic_table+601 |
rep movsb |
mov ebx,filename |
push esi edi ecx eax |
mov esi,ebx |
mov edi,filename |
mov ecx,12 |
strup7: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup7 |
pop eax ecx edi esi |
cld |
mov ecx,4 |
mov edi,filename+8 |
mov esi,dcmd |
rep movsb |
mov eax,6 |
mov ebx,filename |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+15000 |
mcall |
cmp eax,4294967295 |
je nosuchfile3 |
autolabel: |
mov dword [filesize2],eax |
mov byte [callp],1 |
go: |
call clearcmd |
gonext: |
cmp dword [filesize2],0 |
je ecmd3 |
mov ebx,tic_table |
add ebx,dword [readcnt] |
cmp byte [ebx],13 |
je read |
inc dword [readcnt] |
inc dword [readcnt2] |
dec dword [filesize2] |
jmp gonext |
read: |
mov ecx,dword [readcnt2] |
mov ebx,0 |
mov edx,dword [readcnt] |
sub edx,dword [readcnt2] |
loop60: |
push ecx |
mov edi,tic_table+600 |
add edi,ebx |
mov esi,tic_table |
add esi,edx |
movsb |
inc ebx |
inc edx |
pop ecx |
loop loop60 |
mov eax,dword [readcnt2] |
mov dword [count],eax |
mov dword [readcnt2],0 |
add dword [readcnt],2 |
jmp checkcmd |
decnumb: |
cmp dword [fnumb],4 |
je go1 |
call divide |
mov dword [n8],edx |
mov ebx,eax |
call divide |
mov dword [n7],edx |
mov ebx,eax |
call divide |
mov dword [n6],edx |
mov ebx,eax |
call divide |
mov dword [n5],edx |
mov ebx,eax |
go1: |
call divide |
mov dword [n4],edx |
mov ebx,eax |
call divide |
mov dword [n3],edx |
mov ebx,eax |
call divide |
mov dword [n2],edx |
mov ebx,eax |
call divide |
mov dword [n1],edx |
add dword [n1],48 |
add dword [n2],48 |
add dword [n3],48 |
add dword [n4],48 |
cmp dword [fnumb],4 |
je go2 |
add dword [n5],48 |
add dword [n6],48 |
add dword [n7],48 |
add dword [n8],48 |
go2: |
mov edi,tic_table+200 |
mov esi,n1 |
movsb |
mov edi,tic_table+201 |
mov esi,n2 |
movsb |
mov edi,tic_table+202 |
mov esi,n3 |
movsb |
mov edi,tic_table+203 |
mov esi,n4 |
movsb |
cmp dword [fnumb],4 |
je go4 |
mov edi,tic_table+204 |
mov esi,n5 |
movsb |
mov edi,tic_table+205 |
mov esi,n6 |
movsb |
mov edi,tic_table+206 |
mov esi,n7 |
movsb |
mov edi,tic_table+207 |
mov esi,n8 |
movsb |
go4: |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,tic_table+200 |
mov esi,dword [fnumb] |
mcall |
ret |
divide: |
mov eax,ebx |
xor edx,edx |
mov ecx,10 |
div ecx |
ret |
kill: |
mov eax,0 |
mov ebx,0 |
mov ecx,0 |
mov edx,0 |
mov al, byte [tic_table+608] |
mov bl, byte [tic_table+607] |
mov cl, byte [tic_table+606] |
mov dl, byte [tic_table+605] |
sub al,48 |
sub bl,48 |
sub cl,48 |
sub dl,48 |
imul ebx,10 |
imul ecx,100 |
imul edx,1000 |
mov esi,0 |
add esi,eax |
add esi,ebx |
add esi,ecx |
add esi,edx |
mov ecx,esi |
mov eax,9 |
mov ebx,tic_table |
mcall |
cmp eax,ecx |
jb nosuchprocess |
mov eax,18 |
mov ebx,2 |
mov edx,0 |
mcall |
call clearsum |
call newline |
mov edx,mess3 |
call printf |
call newline |
mov edx,mess4 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
ecmd1: |
sub dword [xpos],10 |
jmp ecmd |
nosuchprocess: |
call clearsum |
call newline |
mov edx,mess8 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
echoeol: |
cmp byte [callp],1 |
je gonext15 |
call clearsum |
gonext15: |
call newline |
cmp byte [callp],1 |
je go |
jmp ecmd |
echo: |
cmp byte [callp],1 |
je gonext13 |
call clearsum |
gonext13: |
sub dword [count],5 |
cld |
mov ecx,dword [count] |
mov edi,tic_table+300 |
mov esi,tic_table+600 |
add esi,5 |
rep movsb |
call newline |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov edx,tic_table+300 |
mov ecx,0x00ddeeff |
mov esi,dword [count] |
mcall |
cld |
mov ecx,dword [count] |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+300 |
rep movsb |
mov eax,dword [count] |
add dword [linen],eax |
add dword [linel],eax |
add dword [count],5 |
cmp byte [callp],1 |
je go |
jmp ecmd |
printf: |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov esi,45 |
mcall |
cld |
mov ecx,45 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,edx |
rep movsb |
add dword [linen],46 |
add dword [linel],46 |
add dword [ypos],6 |
ret |
printipc: |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov esi,79 |
mcall |
cld |
mov ecx,79 |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,edx |
rep movsb |
add dword [linen],80 |
add dword [linel],80 |
mov dword [ypos],480 |
ret |
clearcmd: |
cld |
mov ecx,80 |
mov edi,tic_table+600 |
mov esi,tic_table+500 |
rep movsb |
mov ecx,80 |
mov edi,tic_table+400 |
mov esi,tic_table+500 |
rep movsb |
mov ecx,81 |
mov edi,tic_table+800 |
mov [esi],byte 'x' |
rep movsb |
mov ecx,12 |
mov edi,filename |
mov esi,pname |
rep movsb |
mov dword [count],0 |
mov dword [pn],0 |
mov dword [blockcnt],0 |
mov dword [lscnt],8024 |
ret |
oldcmd: |
mov eax,dword [count] |
mov dword [oldcount],eax |
cld |
mov ecx,81 |
mov edi,tic_table+900 |
mov esi,tic_table+500 |
rep movsb |
cld |
mov ecx,81 |
mov edi,tic_table+900 |
mov esi,tic_table+600 |
rep movsb |
ret |
ecmd: |
call oldcmd |
call clearcmd |
call newline |
call ppr |
call cursor |
jmp still |
ecmd2: |
call clearcmd |
call newline |
call ppr |
call cursor |
jmp still |
ecmd3: |
call clearcmd |
call newline |
call ppr |
call cursor |
mov dword [readcnt],15000 |
mov dword [readcnt2],0 |
mov byte [callp],0 |
mov dword [filesize2],0 |
jmp still |
chparam: |
pop ecx |
mov eax,ecx |
mov edx,eax |
push edx |
inc eax |
cld |
mov edi,tic_table+400 |
mov esi,tic_table+600 |
rep movsb |
mov ecx,dword [count] |
sub ecx,eax |
cld |
mov edi,tic_table+800 |
mov esi,tic_table+600 |
add esi,eax |
rep movsb |
pop edx |
mov dword [ipccount],edx |
cld |
mov ecx,11 |
mov edi,tic_table+400 |
add edi,edx |
mov esi,qspace |
rep movsb |
mov ebx,tic_table+400 |
mov ecx,tic_table+800 |
call start_rd_app |
cmp eax,0xfffffff0 |
jb cmd_ok |
jmp errr |
cls: |
call oldcmd |
call cls2 |
cmp byte [callp],0 |
jne needret |
call clearcmd |
call ppr |
call cursor |
jmp still |
needret: |
sub dword [linen],81 |
dec dword [lpress] |
sub dword [xpos],10 |
jmp gonext |
cls1: |
mov eax,13 |
mov ebx,6*65536+483 |
mov ecx,24*65536+250 |
mov edx,0 |
mcall |
ret |
cls2: |
mov dword [linen],2000 |
mov ecx,2025 |
loop2: |
push ecx |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,fill1 |
movsb |
inc dword [linen] |
pop ecx |
loop loop2 |
mov dword [linel],0 |
mov dword [linen],2000 |
mov dword [linev],2000 |
mov dword [xpos],24 |
mov dword [ypos],6 |
mov dword [lpress],1 |
mov dword [stnum],1 |
call cls1 |
ret |
chscr: |
cmp dword [xpos],264 |
jne no_scr |
mov dword [cnt_loop1],4500 |
mov dword [cnt_loop2],2000 |
mov ecx,2025 |
loop10: |
push ecx |
mov edi,tic_table |
add edi,dword [cnt_loop1] |
mov esi,tic_table |
add esi,dword [cnt_loop2] |
movsb |
inc dword [cnt_loop1] |
inc dword [cnt_loop2] |
pop ecx |
loop loop10 |
mov dword [cnt_loop1],2000 |
mov ecx,2025 |
loop11: |
push ecx |
mov edi,tic_table |
add edi,dword [cnt_loop1] |
mov esi,fill1 |
movsb |
inc dword [cnt_loop1] |
pop ecx |
loop loop11 |
mov dword [cnt_loop1],2000 |
mov dword [cnt_loop2],4581 |
mov ecx,1944 |
loop12: |
push ecx |
mov edi,tic_table |
add edi,dword [cnt_loop1] |
mov esi,tic_table |
add esi,dword [cnt_loop2] |
movsb |
inc dword [cnt_loop1] |
inc dword [cnt_loop2] |
pop ecx |
loop loop12 |
dec dword [lpress] |
sub dword [linen],81 |
mov dword [xpos],264 |
mov dword [ypos],6 |
mov dword [clr],480 |
call clear |
call red |
no_scr: |
ret |
newline: |
call chscr |
push edx |
mov edx,81 |
sub edx,dword [linel] |
add dword [linen],edx |
pop edx |
inc dword [lpress] |
mov dword [linel],0 |
add dword [xpos],10 |
ret |
fill: |
cld |
mov ecx,81 |
mov edi,tic_table+500 |
mov esi,fill1 |
rep movsb |
ret |
nparam3: |
cmp byte [callp],1 |
je gonext5 |
call clearsum |
gonext5: |
call newline |
mov edx,mess9 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
nparam4: |
cmp byte [callp],1 |
je gonext6 |
call clearsum |
gonext6: |
call newline |
mov edx,mess0 |
call printf |
cmp byte [callp],1 |
je go |
jmp ecmd |
nparam5: |
cmp byte [callp],1 |
je gonext14 |
call clearsum |
gonext14: |
call newline |
mov edx,mess16 |
call printf |
jmp ecmd |
endscr: |
cmp byte [callp],1 |
je ecmd3 |
call clearsum |
call newline |
mov edx,mess17 |
call printf |
jmp ecmd |
checkcmd: |
cmp dword [tic_table+600],'help' |
jne no_help |
cmp dword [count],4 |
jne no_help |
jmp help |
no_help: |
cmp dword [tic_table+600],'exit' |
jne no_exit |
cmp dword [count],4 |
jne no_exit |
jmp exit |
no_exit: |
cmp word [tic_table+600],'ve' |
jne no_ver |
cmp byte [tic_table+602],'r' |
jne no_ver |
cmp dword [count],3 |
jne no_ver |
jmp ver |
no_ver: |
cmp word [tic_table+600],'cl' |
jne no_cls |
cmp byte [tic_table+602],'s' |
jne no_cls |
cmp dword [count],3 |
jne no_cls |
jmp cls |
no_cls: |
cmp dword [tic_table+600],'shut' |
jne no_shutdown |
cmp dword [tic_table+604],'down' |
jne no_shutdown |
cmp dword [count],8 |
jne no_shutdown |
mov eax,18 |
mov ebx,1 |
mcall |
mov eax,5 |
mov ebx,200 |
mcall |
no_shutdown: |
cmp word [tic_table+600],'ps' |
jne no_ps |
cmp dword [count],2 |
je ps |
no_ps: |
cmp dword [tic_table+600],'kill' |
jne no_kill |
cmp byte [tic_table+604],' ' |
jne no_kill |
cmp dword [count],9 |
je kill |
jmp nparam |
no_kill: |
cmp dword [tic_table+600],'paus' |
jne no_pause |
cmp byte [tic_table+604],'e' |
jne no_pause |
cmp dword [count],5 |
je pause1 |
no_pause: |
cmp dword [tic_table+600],'echo' |
jne no_echo |
cmp dword [count],4 |
je echoeol |
cmp byte [tic_table+604],' ' |
je echo |
no_echo: |
cmp word [tic_table+600],'de' |
jne no_del |
cmp byte [tic_table+602],'l' |
jne no_del |
cmp byte [tic_table+603],' ' |
jne no_del |
cmp dword [count],3 |
je nparam2 |
cmp dword [count],4 |
je nparam2 |
jmp del |
no_del: |
cmp word [tic_table+600],'ls' |
jne no_ls |
cmp dword [count],2 |
je ls |
cmp dword [count],3 |
je ls |
jmp lscheck |
no_ls: |
cmp word [tic_table+600],'cp' |
jne no_cp |
cmp dword [count],2 |
je nparam3 |
cmp dword [count],3 |
je nparam3 |
cmp dword [count],4 |
je nparam3 |
cmp dword [count],5 |
je nparam3 |
cmp byte [tic_table+602],' ' |
jne no_cp |
jmp cp |
no_cp: |
cmp word [tic_table+600],'rn' |
jne no_rn |
cmp dword [count],2 |
je nparam4 |
cmp dword [count],3 |
je nparam4 |
cmp dword [count],4 |
je nparam4 |
cmp dword [count],5 |
je nparam4 |
cmp byte [tic_table+602],' ' |
jne no_rn |
jmp rn |
no_rn: |
cmp dword [tic_table+600],'ends' |
jne no_end |
cmp dword [count],4 |
je endscr |
no_end: |
cmp byte [callp],1 |
je checkprg |
ret |
checkprg: |
mov ebx,tic_table+600 |
push esi edi ecx eax |
mov esi,ebx |
mov edi,tic_table+600 |
mov ecx,74 |
strup: |
mov al,[esi] |
cmp al,'A' |
jb @f |
cmp al,'z' |
ja @f |
cmp al,'a' |
jb @f |
add al,-0x20 |
@@: |
mov [edi],al |
inc esi |
inc edi |
dec ecx |
jnz strup |
pop eax ecx edi esi |
mov ecx,dword [count] |
loop20: |
push ecx |
cmp byte [tic_table+600+ecx],'&' |
je chparam |
pop ecx |
loop loop20 |
cld |
mov ecx,11 |
mov edi,tic_table+600 |
add edi,dword [count] |
mov esi,qspace |
rep movsb |
mov ebx,tic_table+600 |
mov ecx,0 |
call start_rd_app |
cmp eax,0xfffffff0 |
jb cmd_ok_1 |
jmp errr |
cmd_ok_1: |
mov eax,dword [count] |
mov dword [ipccount],eax |
cmd_ok: |
mov eax,60 |
mov ebx,1 |
mov ecx,ipcb |
mov edx,118 |
mcall |
call clearipc |
mov eax,40 |
mov ebx,01000111b |
mcall |
mov eax,23 |
mov ebx,10 |
mcall |
cmp eax,7 |
jne noipc |
cmp byte [callp],1 |
je printipcprgname |
call clearsum |
ipccontinue: |
mov eax,9 |
mov ebx,tic_table+100000 |
mov ecx,-1 |
mcall |
mov ecx,eax |
loopfindipc: |
push ecx |
mov eax,9 |
mov ebx,tic_table+100000 |
mcall |
mov bl,[tic_table+600] |
cmp byte [tic_table+100000+10],bl |
jne goonipc |
cmp dword [ipccount],1 |
je ipcfinished |
mov bl,[tic_table+601] |
cmp byte [tic_table+100000+11],bl |
jne goonipc |
cmp dword [ipccount],2 |
je ipcfinished |
mov bl,[tic_table+602] |
cmp byte [tic_table+100000+12],bl |
jne goonipc |
cmp dword [ipccount],3 |
je ipcfinished |
mov bl,[tic_table+603] |
cmp byte [tic_table+100000+13],bl |
jne goonipc |
cmp dword [ipccount],4 |
je ipcfinished |
mov bl,[tic_table+604] |
cmp byte [tic_table+100000+14],bl |
jne goonipc |
cmp dword [ipccount],5 |
je ipcfinished |
mov bl,[tic_table+605] |
cmp byte [tic_table+100000+15],bl |
jne goonipc |
cmp dword [ipccount],6 |
je ipcfinished |
mov bl,[tic_table+606] |
cmp byte [tic_table+100000+16],bl |
jne goonipc |
cmp dword [ipccount],7 |
je ipcfinished |
mov bl,[tic_table+607] |
cmp byte [tic_table+100000+17],bl |
jne goonipc |
goonipc: |
pop ecx |
dec ecx |
jnz loopfindipc |
ipcfinished: |
mov ebx,[tic_table+100000+30] |
mov dword [ipcpid],ebx |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [ipcpid] |
mov edx,ddot |
mov esi,1 |
mcall |
call newline |
call clearipc |
jmp waitipc |
printipcprgname: |
call newline |
call printcmd |
jmp ipccontinue |
noipc: |
cmp byte [callp],1 |
je prtcmd |
call clearsum |
jmp cmd_ok2 |
printcmd: |
mov eax,4 |
mov ebx,6 |
shl ebx,16 |
add ebx,[xpos] |
mov edx,tic_table+600 |
mov ecx,0x00ddeeff |
mov esi,dword [count] |
mcall |
cld |
mov ecx,dword [count] |
mov edi,tic_table |
add edi,dword [linen] |
mov esi,tic_table+600 |
rep movsb |
mov eax,dword [count] |
add dword [linen],eax |
add dword [linel],eax |
ret |
prtcmd: |
call newline |
call printcmd |
jmp go |
cmd_ok2: |
cmp byte [callp],1 |
je go |
ret |
waitipc: |
mov eax,40 |
mov ebx,01000111b |
mcall |
mov eax,10 |
mcall |
cmp eax,7 |
je ipcok |
cmp eax,1 |
je reipc |
cmp eax,3 |
je exit |
cmp eax,2 |
je keyipc |
jmp waitipc |
keyipc: |
mov eax,2 |
mcall |
jmp waitipc |
reipc: |
call draw |
call red |
jmp waitipc |
clearipc: |
cld |
mov ecx,118 |
mov edi,ipcb |
mov esi,ipcc |
rep movsb |
ret |
ipcok: |
cmp dword [ipcb+16],'~ccc' |
je ipccls |
cmp dword [ipcb+16],'~eee' |
je endipc |
cmp dword [ipcb+16],'~lll' |
je ipcline |
cmp dword [ipcb+16],'~ppp' |
je ipcprint |
cmp dword [ipcb+16],'~kkk' |
je ipckey |
jmp waitipc |
reipc2: |
call draw |
call red |
ipckey: |
mov eax,10 |
mcall |
cmp eax,1 |
je reipc2 |
cmp eax,3 |
je exit |
cmp eax,2 |
je ipckeypressed |
jmp ipckey |
ipckeypressed: |
mov eax,2 |
mcall |
mov byte [ipckeyvalue],ah |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [ipcpid] |
mov edx,ipckeyvalue |
mov esi,1 |
mcall |
call clearipc |
jmp waitipc |
ipccls: |
call cls2 |
call clearipc |
jmp waitipc |
ipcline: |
call newline |
call clearipc |
jmp waitipc |
ipcprint: |
mov edx,ipcb+20 |
call printipc |
call clearipc |
jmp waitipc |
endipc: |
cmp byte [callp],1 |
je go |
call clearsum |
jmp ecmd |
cmdexist: |
mov eax,9 |
mov ebx,tic_table |
mov ecx,-1 |
mcall |
mov ecx,eax |
loopex: |
push ecx |
mov eax,9 |
mov ebx,I_END |
mcall |
cmp word [I_END+10],'CM' |
jne no_cmd |
cmp byte [I_END+12],'D' |
jne no_cmd |
inc byte [cmd_ex] |
cmp byte [cmd_ex],2 |
je exit |
no_cmd: |
pop ecx |
loop loopex |
ret |
start_rd_app: |
push edi |
mov edi, fileinfo_buffer |
mov eax, '/rd/' |
stosd |
mov ax, '1/' |
stosw |
push esi |
mov esi, ebx |
movsd |
movsd |
pop esi |
@@: |
dec edi |
cmp byte [edi], ' ' |
jz @b |
mov byte [edi+1], 0 |
pop edi |
mov eax, 70 |
mov ebx, fileinfo_start |
mov [ebx+8], ecx |
mcall |
ret |
fileinfo_start: |
dd 7 |
dd 0 |
dd ? |
dd 0 |
dd 0 |
db 0 |
dd fileinfo_buffer |
title db 'CMD - Command line interpreter',0 |
smb_cursor db '|' |
prompt db 'CMD>>' |
if lang eq de |
h1 db ' CMD - Command line interpreter version 0.26 ' |
h2 db ' copyleft Chemist - dmitry_gt@tut.by ' |
h3 db ' Verfuegbare Kommandos: ' |
h4 db ' HELP - Zeoigt diesen Text LS - Zeigt Dateien' |
h5 db ' EXIT - Programmende CP - Kopiert Datei' |
h6 db ' CLS - Loescht Bildschirm PS - Processinfo ' |
h7 db ' KILL - Process beenden RN - File umnennen' |
h8 db ' VER - Zeigt Programmversion ' |
h9 db ' DEL - Loescht Datei von Ramdisk ' |
h10 db ' SHUTDOWN - KolibriOS beenden ' |
h11 db ' PAUSE - Auf Taste warten ' |
h12 db ' ECHO - Schreibt Text auf Ausgabe ' |
h13 db ' ENDS - Scriptende ' |
h14 db ' /[filename] - Script starten ' |
h15 db ' Parameter mit "&" angeben: ' |
h16 db ' tinypad&cmd.asm - oeffnet cmd.asm ' |
about db 'Command Line Interpreter version 0.26 ' |
err1 db 'Kommando oder Dateiname unbekannt' |
proc_head db ' PID Name Start Laenge Proc_NUMB ' |
proc_hd11 db '-------------------------------------------- ' |
mess1 db 'Taste druecken fuer weiter (ESC - abbrechen)..' |
mess2 db 'Bitte 4 Byte Prozessnummer angeben (nicht PID)' |
mess3 db 'Prozess mit angegebenere Nummer erfolgreich ' |
mess4 db 'beendet. ' |
mess5 db 'Verwendung: del [Dateiname] ' |
mess6 db 'Angegebene Datei erfolgreich geloescht. ' |
mess7 db 'Datei nicht gefunden! ' |
mess8 db 'Prozess nicht gefunden! ' |
mess9 db 'Verwendung: cp [Quelle+Ziel] ' |
mess0 db 'Verwendung: rn [Quelle+Ziel] ' |
mess11 db 'Datei erfolgreich kopiert ' |
mess12 db 'ERROR: Kann Datei nicht kopieren! ' |
mess13 db 'ERROR: Datei existiert bereits! ' |
mess14 db 'Datei erfolgreich umbenannt ' |
mess15 db 'ERROR: Kann Datei nicht umbenennen! ' |
mess16 db 'Scriptname erwartet! ' |
mess17 db 'Dieses Kommando ist nur in Scripts zulaessig! ' |
else |
h1 db ' CMD - Command line interpreter version 0.26 ' |
h2 db ' copyleft Chemist - dmitry_gt@tut.by ' |
h3 db ' Available commands: ' |
h4 db ' HELP - Display this text LS - List files ' |
h5 db ' EXIT - Exit Programm CP - Copy file ' |
h6 db ' CLS - Clear Screen PS - Process info ' |
h7 db ' KILL - Kill Process RN - Rename File ' |
h8 db ' VER - Display programm version ' |
h9 db ' DEL - Delete file from ramdisk ' |
h10 db ' SHUTDOWN - Quit Menuet ' |
h11 db ' PAUSE - Wait for keypress ' |
h12 db ' ECHO - Print text to screen ' |
h13 db ' ENDS - End script ' |
h14 db ' /[filename] - Execute script ' |
h15 db ' Use & symbol to enter params: ' |
h16 db ' tinypad&cmd.asm - open cmd.asm ' |
about db 'Command Line Interpreter version 0.26 ' |
err1 db 'Unknown command or filename ' |
proc_head db ' PID Name Start Length Proc_NUMB ' |
proc_hd11 db '-------------------------------------------- ' |
mess1 db 'Press any key to continue (ESC - Cancel)... ' |
mess2 db 'Plz specify a 4 byte process number (not PID) ' |
mess3 db 'Process with number you specified has been ' |
mess4 db 'terminated. ' |
mess5 db 'Usage: del [filename] ' |
mess6 db 'Filename you specified has been deleted. ' |
mess7 db 'No such file! ' |
mess8 db 'No such process! ' |
mess9 db 'Usage: cp [source_file+destination_file] ' |
mess0 db 'Usage: rn [source_file+destination_file] ' |
mess11 db 'File successfully copied ' |
mess12 db 'ERROR: Can not copy file! ' |
mess13 db 'ERROR: Output file alredy exist! ' |
mess14 db 'File successfully renamed ' |
mess15 db 'ERROR: Can not rename file! ' |
mess16 db 'You must specify a command script filename! ' |
mess17 db 'This command is available only in scripts! ' |
end if |
linen dd 2000 |
lpress dd 1 |
linel dd 0 |
linev dd 2000 |
stnum dd 1 |
rdstat dd 0 |
ypos dd 6 |
xpos dd 24 |
count dd 0 |
clr dd 0 |
smb db 0 |
pn dd 0 |
count2 dd 0 |
count3 dd 9 |
oldcount dd 0 |
oldcount1 dd 0 |
fnumb dd 0 |
n1 dd 0 |
n2 dd 0 |
n3 dd 0 |
n4 dd 0 |
n5 dd 0 |
n6 dd 0 |
n7 dd 0 |
n8 dd 0 |
ddot db '.' |
dcmd db '.CMD',0 |
cnt_loop1 dd 0 |
cnt_loop2 dd 0 |
lscnt dd 8024 |
blockcnt dd 0 |
lscntf db 0 |
lscntx db 0 |
filesize dd 0 |
filesize2 dd 0 |
readcnt dd 15000 |
readcnt2 dd 0 |
callp db 0 |
callp2 db 0 |
fill1 db ' ' |
fill3 db ' ',0 |
pname db ' ',0 |
autoexfile db 'AUTOEXEC.CMD',0 |
dzero db 0,0,0,0 |
qspace db ' ' |
f1len dd 0 |
f2len dd 0 |
ipcpid dd 0 |
ipckeyvalue db 0 |
ipccount dd 0 |
cmd_ex db 0 |
dirinfo: |
dd 1 |
dd 0 |
dd 0 |
dd 1 |
dd direntry_buffer |
db '/sys',0 |
ipcb: |
db 0 |
db 0,0,0 |
dd 8 |
times 110 db 0 |
ipcc: |
db 0 |
db 0,0,0 |
dd 8 |
times 110 db 0 |
I_END: |
fileinfo_buffer rb 64 |
direntry_buffer rb 32+304 |
filename rb 260 |
tic_table: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/other/outdated/cmd/trunk/examples/AUTOEXEC.CMD |
---|
0,0 → 1,5 |
ver |
echo Type 'help' for help. Type '/example' for additional information (RUS) |
echo |
ends |
/programs/other/outdated/cmd/trunk/examples/EXAMPLE.CMD |
---|
0,0 → 1,35 |
cls |
echo |
echo â® ¯à®á⥩訩 ¯à¨¬¥à ¨á¯®«ï¥¬®£® áªà¨¯â ¤«ï ¨â¥à¯à¥â â®à ª®¬ ¤®© |
echo áâப¨ CMD ¢¥àᨨ 0.24 |
echo ᯮ«ì§ã©â¥ ª®¬ ¤ë echo ¨ pause ¤«ï ¢ë¢®¤ ⥪áâ ¨ ¢®§¬®¦®á⨠|
echo ¢§ ¨¬®¤¥©á⢨ï á ¯®«ì§®¢ ⥫¥¬. |
echo á¢ï§¨ á ¥¤®áâ â®ç®© ¤®à ¡®âª®© ¨â¥à¯à¥â â®à ¨ ¬¥å ¨§¬ ¨á¯®«¥¨ï |
echo áªà¨¯â®¢ ¦¥« â¥«ì® á®§¤ ¢ âì áªà¨¯âë ⮫쪮 ¢ TINYPAD'e ¨ ¥ ¨§¬¥ïâì 㦥 |
echo á®åà ñë© à ¬¤¨áª ä ©«, ¯à¨í⮬ ¥ ®áâ ¢«ïâì ¯®á«¥ ª®¬ ¤ ¥ã¦ëå |
echo ᨬ¢®«®¢ ( ¯à¨¬¥à, ¯à®¡¥«ë). |
echo |
echo ਬ¥à ¢ë¯®«¥¨ï ¯à®á⥩襩 ¯à ªâ¨ç¥áª®© § ¤ ç¨ á ¯®¬®éìî ¨á¯®«ï¥¬ëå |
echo áªà¨¯â®¢: |
echo |
echo ¦¬¨â¥ «î¡ãî ª« ¢¨èã ¤«ï ⮣®, ç⮡ë ᮧ¤ âì § ¯ áãî ª®¯¨î ä ©« CMD.ASM |
pause |
cp cmd.asm+cmd.bak |
echo |
echo ¥¯¥àì ¦¬¨â¥ «î¡ãî ª« ¢¨èã ¤«ï ⮣®, çâ®¡ë ¢ë¢¥á⨠¨¬ï ⮫쪮 çâ® |
echo ᮧ¤ ®£® ä ©« íªà ¨ 㤮á⮢¥à¨âìáï ¢ ¥£® ¯à¨áãâá⢨¨ /RD/1 |
pause |
ls cmd.bak |
echo |
echo ¥¯¥àì ¦¬¨â¥ «î¡ãî ª« ¢¨èã ¤«ï ⮣®, ç⮡ë 㤠«¨âì ⮫쪮 ç⮠ᮧ¤ ë© |
echo ä ©« CMD.BAK á à ¬¤¨áª . |
pause |
del cmd.bak |
echo |
echo ਠ¢ë§®¢¥ ª®¬ ¤ë PAUSE ¢ë ¬®¦¥â¥ ¦ âì ª« ¢¨èã ESCAPE, çâ®¡ë ¯à¥à¢ âì |
echo à ¡®âã áªà¨¯â . 믮«¥¨¥ ¢¥è¨å ª®¬ ¤ ¢ ¤ ®© ¢¥àᨨ 㦥 ॠ«¨§®¢ ®. |
echo ᯮ«ì§®¢ ¨¥ ᨬ¢®« '/' ¢ áªà¨¯â å ¥ ॠ«¨§®¢ ®. ¤ ®© ¢¥àᨨ |
echo ª®¬ ¤ë¥ áªà¨¯âë ४®¬¥¤ã¥âáï § ¢¥àè âì ª®¬ ¤®© ends. |
echo ¤¨â¥ ®¡®¢«¥¨©. |
echo |
ends |
/programs/other/outdated/cmd/trunk/examples/HELLO.ASM |
---|
0,0 → 1,70 |
; Hello, World! - Programm example for CMD shell |
; Compile with FASM for Menuet |
; |
; You must run this program from CMD shell only |
; |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x100000 |
dd 0x7fff0 |
dd 0x0 |
dd 0x0 |
include "CMDIPC.INC" ; ®¤ª«îç¨âì ä ©« CMDIPC.INC |
START: |
call initipc ; ¨¨æ¨ «¨§¨à®¢ âì ¤«ï à ¡®âë á CMD |
mov eax,26 ; «¨ áâப¨ |
mov ebx,hello_text ; ª § ⥫ì áâபã |
call print ; 뢥á⨠áâபã |
again: |
call getkey ; ¦¨¤ âì ¦ â¨ï ª« ¢¨è¨ ¨ áç¨â âì ¥¥ ¢ key |
cmp byte [key],'Y' ; ãâ ¯à®£à ¬¬ ¯à®¢¥àï¥â, ¦ â «¨ ã¦. ª« ¢¨è |
je goodday |
cmp byte [key],'y' |
je goodday |
cmp byte [key],'N' |
je goodmorning |
cmp byte [key],'n' |
je goodmorning |
jmp again ; ᫨ ã¦. ª« ¢¨è ¥ ¦ â , â® áç¨â âì ª« ¢¨èã |
; § ®¢® |
goodday: ; 뢥á⨠¯à¨¢¥âá⢨¥ Good Day, World! |
call eol ; யãáâ¨âì áâபã |
mov eax,16 |
mov ebx,text4 |
call print |
call eol ; யãáâ¨âì áâபã |
jmp endipc ; ¢¥àè¨âì ¯à®£à ¬¬ã |
goodmorning: ; 뢥á⨠¯à¨¢¥âá⢨¥ Good Morning, World! |
call eol |
mov eax,20 |
mov ebx,text5 |
call print |
call eol |
jmp endipc ; ¢¥àé¨âì ¯à®£à ¬¬ã |
hello_text db 'Is it after 12 noon? [Y\N]?' |
text4 db 'Good day, World!' |
text5 db 'Good morning, World!' |
I_END: |
/programs/other/outdated/cmd/trunk/examples/PARAM.ASM |
---|
0,0 → 1,55 |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x100000 |
dd 0x7fff0 |
dd I_PARAM ; 㪠§ â¥«ì ¯ à ¬¥âàë |
include "CMDIPC.INC" ; ®¤ª«îç¨âì ä ©« CMDIPC.INC |
START: |
call initipc ; ¨¨æ¨ «¨§¨à®¢ âì ¤«ï à ¡®âë á CMD |
mov eax,47 ; ¢ë¢¥á⨠ᮮ¡é¥¨¥ |
mov ebx,mess |
call print |
call eol ; ¯à®¯ãáâ¨âì áâபã |
call eol |
cmp [I_PARAM],byte 0 ; ¯à®¢¥à¨âì, ¥áâì «¨ ¯ à ¬¥âàë |
jz noparam |
mov eax,43 |
mov ebx,mess1 |
call print |
call eol |
mov eax,30 ; ¢ë¢¥á⨠¯ à ¬¥âàë |
mov ebx,I_PARAM |
call print |
jmp end1 ; ¯¥à¥å®¤ ¢ ª®¥æ ¯à®£à ¬¬ë |
noparam: |
mov eax,40 ; ¢ë¢¥á⨠ᮮ¡é¥¨¥ ® ⮬, çâ® ¥â ¯ à ¬¥â஢ |
mov ebx,mess2 |
call print |
end1: |
jmp endipc ; § ¢¥àè¨âì ¯à®£à ¬¬ã |
mess db 'PARAM.ASM - Test params in IPC programs for CMD' |
mess1 db 'This program was started with this params: ' |
mess2 db 'This program was started without params!' |
I_PARAM db 0 |
I_END: |
/programs/other/outdated/cmd/trunk/examples |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/other/outdated/cmd/trunk/readme.txt |
---|
0,0 → 1,381 |
CMD - Èíòåðïðåòàòîð êîìàíäíîé ñòðîêè äëÿ Menuet |
Íàïèñàíî by Chemist dmitry_gt@tut.by |
Âåðñèÿ 0.27 |
Ðóññêèé òåêñò íåìíîãî ïîíèæå. |
----------------------------------------------------------------------- |
CMD - Command Line Interpreter for Menuet |
Copyleft Chemist - dmitry_gt@tut.by |
Version 0.27 |
As my english is not well, I will tell a few words about this |
program. It supports 14 commands, such as cp (copy file), |
rn (rename file), ps (process list), kill (kill process) etc. |
You can type 'help' after starting this shell to examine with |
other commands. Also it uses several special symbols, such as |
&, /, . and +. Use & sumbol to enter params. For example, |
type tinypad&cmd.asm to open cmd.asm file in tinypad editor. |
/ symbol is used to run special command scripts for CMD. |
It's syntax is: /filename without extension (For example, |
type /autoexec to execute autoexec.cmd file for CMD). And + |
symbol is used in cp and rn commands. You must type |
cp example.asm+example.bak to copy example.asm file to |
example.bak. Use dot to launch program, if CMD command and |
other external command match. For example, type help for |
'help' command or type .help to run 'help' program. |
This shell supports executeing special command |
scripts (something like .BAT files in MS-DOS). This files |
have an .CMD extinsion and u must use / symbol to execute it. |
U can use any CMD commands and filenames in this scripts. |
But you can't run other scripts from any CMD script (/ symbol). |
I recommed to use tipypad editor to edit this scripts and do |
not leave spaces and other symbols after commands in the script |
file, because it's executeing is not very developed yet. |
And it's strongly recommended to use ends command in the end |
of the script, because there are some problems with redrawing |
the window after executing scripts without this command. |
Every time when you launch CMD autoexec.cmd file automatically |
executes. You can edit or delete this file if you want. |
This version of CMD shell supports IPC. It mean, than you can |
write your own programs for this shell. Look at .ASM files in |
the Examples directory in this archive. I think that you will |
understand them without any difficulties. Do not forget, that |
you need CMDIPC.ASM file to compile this sources. It's |
recommended to compile it with MACROS.INC file (included in |
this archieve) to make their size smaller. |
And now about some bugs etc. |
---------------------------- |
I've noticed, that there are some difficulties with files with |
1 or 2 symbols in extension. I recommend do not use such files |
not only in CMD, but almost in every programs in MeOS. It's |
possible to create such file in tinypad, and then (in MS-DOS or |
Windows) Scandisk will find errors in filenames etc. CMD do |
not support properly such filenames now. |
In CMDIPC.INC and CMD.ASM I used 5-th function (pause), because |
I need it when CMD communicates with IPC programs. It's |
even possible, that it will not enough 1/100 sec. on slow PC's, |
because CMD need this time to finish IPC-command from other |
IPC-program. U can change ebx value in CMDIPC.ASM in pause1: |
if you want. But it slows communication betwen CMD and |
IPC-programs for CMD. I hope, that you understand my words. :) |
Now (in this version) you can launch only one CMD shell. |
Because it's difficult to make communication betwen several |
copyes of CMD in memory and IPC-programs. I will solve this |
problem in future. |
I've tested this shell only on Ivan Poddubny's russian |
distributive. Also I recommend you to use it. :) CMD shell |
is included into this distributive (but possible not it's |
final version). |
Source code of this program is not optimized yet. I have such |
manner of programming from my childhood that my source code |
is not very "compact" |
etc. ;-) |
And now other information: |
-------------------------- |
I do not want CMD design to change. I like white symbols on |
the black background. If you want to change the source and |
redistribute it, please, do not change it's design. :) |
If you will find some bugs or you have some wishes (or even you |
correct some mistakes in my english texts) - |
email me: dmitry_gt@tut.by |
And this program is distributed "as is". Use it on your own |
risk. ;-) |
And again - my English is not well. :) |
That's all! |
19.06.2004, |
Chemist |
Now russian text :) |
----------------------------------------------------------------------- |
Äîñòóïíûå êîìàíäû: |
ls [filename] - âûâîä ñïèñêà ôàéëîâ. Åñëè ïîñëå êîìàíäû |
óêàçàòü èìÿ ôàéëà, òî êîìàíäà ïðîâåðèò åãî |
íà íàëè÷èå. |
cp [source_file+destination_file] - êîìàíäà äëÿ |
êîïèðîâàíèÿ ôàéëîâ. Ïðîâåðÿåò ôàéëû íà |
íàëè÷èå, è â ñëó÷àå îøèáêè âûâîäèò |
ñîîòâåòñòâóþùèå ñîîáùåíèÿ. |
rn [source_file+destination_file] - êîìàíäà äëÿ |
ïåðåèìåíîâàíèÿ ôàéëîâ. Òàê æå |
ïðîâåðÿåò ôàéëû íà íàëè÷èå, è â |
ñëó÷àå îøèáêè âûâîäèò ñîîòâåòñòâóþùèå |
ñîîáùåíèÿ. |
ps - âûâîä èíôîðìàöèè î ïðîöåññàõ â ñèñòåìå. |
kill - ïðåðâàòü ïðîöåññ â ñèñòåìå. Âíèìàíèå, |
ïîñëå êîìàíäû ñëåäóåò ââîäèòü 4-õ |
çíà÷íûé íîìåð ïðîöåññà, à íå PID. Íîìåð |
ïðîöåññà óêàçàí â ïîñëåäíåé êîëîíêå ïðè |
âûçîâå êîìàíäû ps. |
help - âûâîä êðàòêîé ñïðàâî÷íîé èíôîðìàöèè. |
ver - âûâîä èñïîëüçóåìîé âåðñèè èíòåðïðåòàòîðà. |
cls - î÷èñòêà ýêðàíà. |
exit - âûõîä èç èíòåðïðåòàòîðà. |
del [filename] - óäàëèòü ôàéë ñ ðàìäèñêà. Ïðè îòñóòñòâèè |
çàïðàøèâàåìîãî ôàéëà áóäåò âûâåäåíî |
ñîîòâåòñòâóþùèå ñîîáùåíèå îá îøèáêå. |
shutdown - çàâåðøèòü ðàáîòó ñèñòåìû. |
pause - îæèäàòü íàæàòèå êëàâèøè. Èñïîëüçóåòñÿ äëÿ |
"âçàèìîäåéñòâèÿ" ïîëüçîâàòåëÿ ñ êîìàíäíûìè |
ñêðèïòàìè äëÿ êîíñîëè (èíòåðïðåòàòîðà). |
Íàïðèìåð, ìîæíî èñïîëüçîâàòü äàííûé ñêðèïò |
echo Do you want to delete cmd.asm? |
pause |
del cmd.asm |
äëÿ òîãî, ÷òîáû ïîèíòåðåñîâàòüñÿ ìíåíèåì |
ïîëüçîâàòåëÿ, õî÷åò ëè îí óäàëèòü ôàéë cmd.asm |
èëè ïðåðâàòü ðàáîòó ñêðèïòà. |
pause >nul Òî æå ñàìîå, òîëüêî áåç âûâîäà ñòðîêè |
'Press ane key to continue (ESC - cancel)' |
echo [text] - âûâîä òåêñòà íà ýêðàí. Ïðåäíàçíà÷åíà äëÿ |
ïîäà÷è ïîëüçîâàòåëþ èíôîðìàöèè èç êîìàíäíîãî |
ñêðèïòà. Åñëè ââåñòè êîìàíäó echo áåç òåêñòà, |
òî ýòî ïðîñòî âûçîâåò ïåðåõîä íà ñëåäóþùóþ |
ñòðîêó. |
ends - êîìàíäà, äîñòóïíàÿ òîëüêî èç èñïîëíÿåìûõ |
ñêðèïòîâ. Ñëóæèò äëÿ èõ êîððåêòíîãî çàâåðøåíèÿ, |
ò.ê. èíîãäà êîìàíäíûå ñêðèïòû, ó êîòîðûõ â |
êîíöå ñòîÿëè íåíóæíûå ïðîáåëû èëè ñèìâîëû EOL, |
âûçûâàëè ïðîáëåìû ñ ïåðåðèñîâêîé îêíà. Ñêîðåå |
âñåãî ýòà êîìàíäà ïðèñóòñòâóåò â êîíñîëè |
âðåìåííî è áóäåò óáðàíà ïîñëå ðåøåíèÿ ýòîé |
ïðîáëåìû. |
----------------------------------------------------------------------- |
Óïðàâëÿþùèå ñèìâîëû: |
/[êîìàíäíûé ñêðèïò] - ïðåäíàçíà÷åí äëÿ âûçîâà íà èñïîëíåíèå |
êîìàíäíîãî ñêðèïòà èç êîíñîëè. Íå ìîæåò |
èñïîëüçîâàòüñÿ â íåïîñðåäñòâåííî â ñàìèõ |
êîìàíäíûõ ñêðèïòàõ. Åñëè ðàñøèðåíèå èñïîë- |
íÿåìîãî ñêðèïòà .cmd, òî åãî óêàçûâàòü |
íåîáÿçàòåëüíî. |
& - äàííûé ñèìâîë èñïîëüçóåòñÿ äëÿ ïåðåäà÷è âûçûâàåìîé |
ïðîãðàììå ïàðàìåòðîâ. Íàïðèìåð, êîìàíäà tinypad&cmd.asm |
ïåðåäàñò ïðîãðàììå tinypad ïàðàìåòð cmd.asm, |
ñîîòâåòñòâåííî, tinypad îòêðîåò ôàéë cmd.asm. |
+ - ðàçäåëÿåò èìåíà èñõîäíîãî è ðåçóëüòèðóþùåãî ôàéëîâ â |
êîìàíäàõ cp è rn. |
. - çàïóñêàåò óêàçàííóþ ïîñëå òî÷êè ïðîãðàììó, äàæå åñëè îíà |
ñîâïàäàåò ñ êîìàíäîé CMD. Íàïðèìåð, help - âûïîëíèòü |
êîìàíäó 'help', íî .help - çàïóñòèòü âíåøíþþ ïðîãðàììó |
'help' (õîòÿ òàêîé ïîêà âðîäå è íåòó :). |
----------------------------------------------------------------------- |
Íàâèãàöèÿ ïî êîíñîëè: |
Äëÿ ðåäàêòèðîâàíèÿ êîìàíäíîé ñòðîêè èñïîëüçóþòñÿ êëàâèøè ESC, |
BACKSPACE. ESC - äëÿ óäàëåíèÿ âñåé êîìàíäíîé ñòðîêè, |
BACKSPACE - äëÿ óäàëåíèÿ ïîñëåäíåãî ââåäåííîãî ñèìâîëà. Ïî |
ìîåìó ìíåíèþ, èñïîëüçîâàíèå òàêèõ êëàâèø, êàê HOME, END, ARROW |
KEY etc. íå èìååò ñìûñëà, ò.ê. ââîäèìûå êîìàíäû ñëèøêîì |
ïðîñòû è íå òðåáóþò ïîäðîáíîãî ðåäàêòèðîâàíèÿ. Ïîýòîìó ÿ |
îñòàâèë âñå ïðèìåðíî òàê, êàê áûëî â MS-DOS 6.22. |
Êëàâèøà UPARROW èñïîëüçóåòñÿ äëÿ ïîâòîðà ïîñëåäíåé ââåäåííîé |
êîìàíäû. |
----------------------------------------------------------------------- |
Èñïîëüçîâàíèå IPC âî âíåøíèõ ïðîãðàììàõ: |
Âû ìîæåòå ïèñàòü ïðîãðàììû, âçàèìîäåéñòâóþùèå ñ CMD ÷åðåç IPC. |
 îñíîâíîì, ÿ ïîëàãàþ, ýòî ìîæåò ïðèãîäèòñÿ äëÿ íàïèñàíèÿ |
êîíñîëüíûõ ïðèëîæåíèé äëÿ ñàìîãî CMD (õîòÿ âîçìîæíî è äðóãîå). |
Äëÿ ýòîãî, ê âàøåé ïðîãðàììå âàì íåîáõîj äèìî ïîäêëþ÷èòü ôàéë |
CMDIPC.INC (Åñòåñòâåííî, îò ýòîãî ðàçìåð ïðîãðàììû ïîñëå |
êîìïèëÿöèè íåñêîëüêî óâåëè÷èòñÿ). Ïîñëå ýòîãî âàì ñòàíóò |
äîñòóïíû 6 ôóíêöèè IPC, êîòîðûå âû ìîæåòå âûçûâàòü ñ ïîìîùüþ |
call èç ñâîåé æå ïðîãðàììû. Âîò èõ îïèñàíèå: |
--------------------------------------------------------------- |
initipc - èíèöèàëèçàöèÿ IPC äëÿ ðàáîòû ñ CMD. |
call initipc - èíèöèàëèçèðîâàòü IPC äëÿ ðàáîòû ñ CMD. |
ÂÍÈÌÀÍÈÅ! Èñïîëüçóéòå â ñàìîì íà÷àëå ïðîãðàììû. CMD áóäåò æäàòü |
òîëüêî 10/100 ñåêóíäû äëÿ òîãî, ÷òîáû ïîëó÷èòü |
ñîîáùåíèå ïî IPC (õîòÿ ýòîãî âïîëíå äîñòàòî÷íî). |
--------------------------------------------------------------- |
print - âûâåñòè ñòðîêó â ýêðàí CMD. |
mov eax,strlen |
mov ebx,string |
call print |
Ãäå strlen - äëèíà ñòðîêè â áàéòàõ, |
string - óêàçàòåëü íà ñòðîêó. |
call print - âûâîä ñòðîêè. |
--------------------------------------------------------------- |
cls - î÷èñòèòü ýêðàí CMD. |
call cls - âûçâàòü î÷èñòêó ýêðàíà. |
--------------------------------------------------------------- |
eol - ïðîïóñòèòü ñòðîêó. |
call eol - âûçâàòü ïðîïóñê ñòðîêè. |
--------------------------------------------------------------- |
getkey - ñ÷èòàòü êîä íàæàòîé êëàâèøè â CMD. |
call getkey - îæèäàòü íàæàòèÿ êëàâèøè è ñ÷èòàòü åå êîä. |
Âûâîä: byte [key] - êîä íàæàòîé êëàâèøè. |
ÂÍÈÌÀÍÈÅ: Ïîñëå çàïóñêà ïðîãðàììû èç CMD, êîòîðàÿ |
ïîääåðæèâàåò IPC, òî îêíî CMD àêòèâèðóåòñÿ ñðàçó |
ïîñëå çàïóñêà ïðîãðàììû. Ïîýòîìó, óæå íå íóæíî |
òûêàòü ìûøêîé íà îêíî äëÿ òîãî, ÷òîáû ââåñòè |
÷òî-íèáóäü â êîíñîëü, êàê ýòî áûëî â ïðîøëûõ âåðñèÿõ. |
--------------------------------------------------------------- |
endipc - Çàâåðøèòü ðàáîòó IPC-ïðîãðàììû. |
call endipc - çàâåðøèòü ïðîãðàììó. |
--------------------------------------------------------------- |
Âîîáùåì, âû ìîæåòå ïîñìîòðåòü ôàéë HELLO.ASM, êîòîðûé ëåæèò â |
ýòîì àðõèâå. Òàì âñå äîëæíî áûòü ïîíÿòíî. Åñòåñòâåííî, íèêòî |
âàì íå ìåøàåò èñïîëüçîâàòü ïàðàìåòðû â IPC-ïðîãðàììàõ äëÿ CMD. |
Ñìîòðèòå ïðèìåð PARAM.ASM. |
Êñòàòè, â ñàìîì CMD è â CMDIPC.INC èñïîëüçóåòñÿ 5-ÿ ôóíêöèÿ |
(ïàóçà) äëÿ òîãî, ÷òîáû äàòü âðåìÿ äðóã-äðóãó âûïîëíèòü |
òðåáóåìûå îò íèõ ÷åðåç IPC äåéñòâèÿ. È åñëè ó âàñ êîìï ñèëüíî |
òîðìîçíþ÷èé, òî âîçìîæíî, âûäåëåííîãî âðåìåíè áóäåò |
íåäîñòàòî÷íî. Ýòî íå ñëîæíî ïîëå÷èòü, óâåëè÷èâ çíà÷åíèå |
ebx ïåðåä âûçîâîì ôóíêöèè ÿäðà (eax,5 - ïàóçà). Â ïðîòèâíîì |
ñëó÷àå ìîãóò ïîâûëåòàòü âûçîâû IPC èëè ÷òî-íèáóäü âîîáùå |
çàâèñíåò (ïåðâîå - âåðîÿòíåå). Íî, åñòåñòâåííî, íè÷åãî |
ñòðàøíîãî â ýòîì íåò. ;-) |
----------------------------------------------------------------------- |
Èçâåñòíûå îøèáêè è íåäîðàáîòêè: |
Ïðè ðàáîòå ñ êîíñîëüþ CMD è ñèñòåìîé MenuetOS âîîáùå, ÿ |
çàìåòèë, ÷òî íåêîòîðûå ñîçäàííûå â Menuet ôàéëû íå |
âîñïðèíèìàþòñÿ MS-DOS. Ýòî â ïåðâóþ î÷åðåäü êàñàåòñÿ ôàéëîâ, |
ñ èìåíàìè òèïà 1.1, b.bb è ò.ä. Ïîýòîìó âîçìîæíû ðàçëè÷íûå |
òóïèêîâûå ñèòóàöèè ïðè âçàèìîäåéñòâèè ñîçäàííûõ èëè |
êîïèðîâàííûõ ôàéëîâ â MeOS ñ âîñïðèÿòèåì èõ â MS-DOS è Windows |
ñèñòåìàõ. È êàñàåòñÿ ýòî íå òîëüêî CMD, íî, íàïðèìåð, è |
òèíèïàäà. Ïîýòîìó ÿ ðåêîìåíäóþ èñïîëüçîâàòü â Menuet ôàéëû èëè |
áåç ðàñøèðåíèÿ âîîáùå, èëè ñ ïîëíûì ðàñøèðåíèåì (çàíèìàþùèì |
âñå 3 áàéòà, ò.å. filename.ext, à íå filename.ex). Â ïðèíöèïå |
ìåõàíèçì êîìàíä LS, LS èìÿ_ôàéëà, CP, DEL è RN èçìåíåí, íî |
ïîêà íåò ñîâìåñòèìîñòè ìåæäó ðàçëè÷íûìè ïðîãðàììàìè, |
ðàáîòàþùèìè ñ ôàéëàìè â Menuet. Ò.å. äàæå âîçìîæíî, |
÷òî âû íå ñìîæåòå ðàáîòàòü â êîíñîëè ñ ôàéëîì, ñîçäàííîì â |
òèíèïàäå, à ïîòîì skandisk âîîáùå âûäàñò îøèáêó ïðè ïðîâåðêå |
ôàéëîâîé ñòðóêòóðû äèñêåòû, êîãäà íàòêíåòñÿ íà ýòîò ôàéë, è îí |
íå áóäåò ÷èòàåì èç windows èëè MS-DOS.  ïðèíöèïå, ÿ òåñòèðîâàë |
ïðîãðàììó òîëüêî íà ìîåì PC, ïîýòîìó âîçìîæíî âñ¸. :) |
P.S. Êîìàíäà LS ïîêàæåò ïîëíîñòüþ âñå ôàéëû íà ðàìäèñêå, â òîì |
÷èñëå òå, êîòîðûå ñîçäàíû íåïðàâèëüíî è íå áóäóò ðàáîòàòü â |
MS-DOS, LS èìÿ_ôàéëà è ò.ä. ìîæåò óæå èõ íå çàìåòèòü. Â |
ïðèíöèïå òàêàÿ æå êàðòèíà áóäåò è â windows. Ò.å. âû ñìîæåòå |
ëèöåçðåòü èìåíà ýòèõ ôàéëîâ, íàïðèìåð, â windows commander'e, |
íî áëîêíîò èõ íå îòêðîåò. |
Äëÿ òîãî, ÷òîáû äàòü âðåìÿ CMD îáðàáîòàòü IPC-çàïðîñ, â |
CMDIPC.ASM ìíå ïðèøëîñü èñïîëüçîâàòü 5-þ ôóíêöèþ (ïàóçà), |
ïîýòîìó íåìíîãî çàìåäëÿåòñÿ âðåìÿ ïîëó÷åíèÿ íîâûõ IPC-çàïðîñîâ. |
 äàííîé âåðñèè âû íå ìîæåòå çàïóñêàòü áîëüøå îäíîãî |
òåðìèíàëà CMD îäíîâðåìåííî. Ýòî ñâÿçàíî ñ òåì, ÷òî ÿ åùå íå |
äîáàâèë âîçìîæíîñòè ðàáîòû íåñêîëüêèõ êîíñîëåé ñ |
IPC-ïðîãðàììàìè îäíîâðåìåííî. |
Êîä ïðîãðàììû íà äàííûé ìîìåíò íåîïòèìèçèðîâàí. |
etc. :) |
----------------------------------------------------------------------- |
Âìåñòå ñ ïðîãðàììîé ïîñòàâëÿåòñÿ ôàéë autoexec.cmd, êîòîðûé |
àâòîìàòè÷åñêè èñïîëíÿåòñÿ ïðè çàïóñêå èíòåðïðåòàòîðà. Åãî |
ìîæíî óäàëèòü ïðè íåíàäîáíîñòè. |
Äëÿ âûçîâà ïðèìåðà èñïîëíÿåìîãî ñêðèïòà íàáåðèòå /example |
Âñâÿçè ñ ìîëîäîñòüþ è ÷àñòè÷íîé íåäîðàáîòàííîñòè ñàìîé |
ïðîãðàììû âîçìîæíû îøèáêè â å¸ ðàáîòå, î êîòîðûõ ïðîñüáà |
ñîîáùàòü íà dmitry_gt@tut.by |
 áëèæàéøåå âðåìÿ íå ïëàíèðóåòñÿ íîâûõ íîâîââåäåíèé â êîíñîëü, |
ò.ê. íà å¸ äîðàáîòêó óõîäèò ìíîãî âðåìåíè è ÿ ñ÷èòàþ, ÷òî îíà |
è íà äàííûé ìîìåíò áîëåå-ìåíåå ôóíêöèîíàëüíà (â ìàñøòàáàõ |
MenuetOS, êîíå÷íî). ß ñ÷èòàþ, ÷òî ðàöèîíàëüíåå áóäåò ñêîíöåíò- |
ðèðîâàòüñÿ íà óñòðàíåíèè áàãîâ è íåäîðàáîòîê â ïðîãðàììå. |
Åñëè êòî-íèáóäü ïîæåëàåò äîäåëàòü ïðîãðàììó, òî ÿ áû ïîïðîñèë |
íå èçìåíÿòü å¸ äèçàéí (ìíå îí íðàâèòñÿ ;-) ). |
Î âñåõ îøèáêàõ ( òîì ÷èñëå ãðàììàòè÷åñêèõ â àíãëèéñêîì òåêñòå) |
ïðîñüáà ñîîáùàòü íà dmitry_gt@tut.by |
È åùå çàáûë ñêàçàòü, òî ïðîãðàììà ðàñïðîñòðàíÿåòñÿ "as is", è |
àâòîð íå íåñåò îòâåòñòâåííîñòè çà âîçìîæíûé óùåðá, ïðè÷èíåííûé |
ïðîãðàììîé. |
19.06.2004, |
Chemist |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/other/outdated/cmd/trunk/build_en.bat |
---|
0,0 → 1,5 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm cmd.asm cmd |
@erase lang.inc |
@pause |
/programs/other/outdated/cmd/trunk/build_ge.bat |
---|
0,0 → 1,5 |
@erase lang.inc |
@echo lang fix de >lang.inc |
@fasm cmd.asm cmd |
@erase lang.inc |
@pause |
/programs/other/outdated/cmd/trunk/cmdipc.inc |
---|
0,0 → 1,221 |
include "..\..\..\macros.inc" |
initipc: |
mov eax,9 |
mov ebx,prc |
mov ecx,-1 |
mcall |
mov ecx,eax |
loop1: |
push ecx |
mov eax,9 |
mov ebx,prc |
mcall |
cmp word [prc+10],'CM' |
jne no_cmd |
cmp byte [prc+12],'D' |
jne no_cmd |
mov ebx,[prc+30] |
mov dword [cmdpid],ebx |
mov dword [cmdnumb],ecx |
no_cmd: |
pop ecx |
loop loop1 |
cmp dword [cmdpid],0 |
jne no_exit |
jmp exit |
no_exit: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,printf |
mov esi,4 |
mcall |
call initcmd |
waitcmdinit: |
mov eax,40 |
mov ebx,01000000b |
mcall |
mov eax,23 |
mov ebx,100 |
mcall |
cmp eax,7 |
je cmd_ok |
jmp exit |
cmd_ok: |
cmp byte [ipcb+16],'.' |
jne exit |
mov eax,18 |
mov ebx,3 |
mov ecx,dword [cmdnumb] |
mcall |
ret |
pause1: |
mov eax,5 |
mov ebx,1 |
mcall |
ret |
exit: |
or eax,-1 |
mcall |
cls: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipccls |
mov esi,4 |
mcall |
call pause1 |
ret |
print: |
mov ecx,84 |
loopprt: |
mov edi,stripc |
add edi,ecx |
mov esi,fill_symbol |
movsb |
loop loopprt |
cld |
mov ecx,4 |
mov edi,stripc |
mov esi,printf |
rep movsb |
cld |
mov edx,79 |
sub edx,eax |
mov ecx,79 |
sub ecx,edx |
mov edi,stripc+4 |
mov esi,ebx |
rep movsb |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,stripc |
mov esi,84 |
mcall |
call pause1 |
ret |
eol: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipceol |
mov esi,4 |
mcall |
call pause1 |
ret |
initcmd: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipckey |
mov esi,4 |
mcall |
mov eax,60 |
mov ebx,1 |
mov ecx,ipcb |
mov edx,28 |
mcall |
cld |
mov ecx,28 |
mov edi,ipcb |
mov esi,ipcc |
rep movsb |
ret |
getkey: |
call initcmd |
waitagain: |
mov eax,40 |
mov ebx,01000000b |
mcall |
mov eax,10 |
mcall |
cmp eax,7 |
jne waitagain |
mov edi,key |
mov esi,ipcb+16 |
movsb |
ret |
endipc: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipcend |
mov esi,4 |
mcall |
jmp exit |
cmdpid dd 0 |
cmdnumb dd 0 |
printf db '~ppp' |
ipceol db '~lll' |
ipcend db '~eee' |
ipccls db '~ccc' |
ipckey db '~kkk' |
key db 0 |
ipcb: |
db 0 |
db 0,0,0 |
dd 8 |
times 20 db 0 |
ipcc: |
db 0 |
db 0,0,0 |
dd 8 |
times 20 db 0 |
stripc: times 84 db 0 |
fill_symbol db 0 |
prc: times 52 db 0 |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |