/programs/develop/cmd/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm cmd.asm cmd |
@pause |
/programs/develop/cmd/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm cmd.asm cmd |
@pause |
/programs/develop/cmd/trunk/cmd.asm |
---|
0,0 → 1,2967 |
; 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" |
START: |
call cmdexist |
call draw |
call fill |
call clearcmd |
call autoexec |
call ppr |
call cursor |
still: |
mov eax,10 |
int 0x40 |
cmp eax,1 |
je re |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
jmp still |
button: |
mov eax,17 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
add dword [ypos],6 |
ret |
draw: |
mov eax,12 |
mov ebx,1 |
int 0x40 |
mov eax,0 |
mov ebx,100*65536+492 |
mov ecx,100*65536+280 |
mov edx,0 |
mov esi,0x805080d0 |
mov edi,0x005080d0 |
int 0x40 |
mov eax,4 |
mov ebx,8*65536+8 |
mov ecx,0x10ddeeff |
mov edx,title |
mov esi,title_end-title |
int 0x40 |
mov eax,8 |
mov ebx,(492-19)*65536+12 |
mov ecx,5*65536+12 |
mov edx,1 |
mov esi,0x6688dd |
int 0x40 |
mov eax,12 |
mov ebx,2 |
int 0x40 |
ret |
print: |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov ecx,0x00ddeeff |
mov edx,smb |
mov esi,1 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
loopls: |
inc dword [blockcnt] |
mov eax,34 |
mov ebx,0 |
mov ecx,0 |
mov edx,0 |
add edx,dword [blockcnt] |
mov esi,1 |
mov edi,tic_table+7000 |
int 0x40 |
mov ecx,16 |
loop40: |
push ecx |
cld |
mov ecx,8 |
mov edi,filename |
mov esi,tic_table |
add esi,dword [lscnt] |
rep movsb |
add dword [lscnt],8 |
mov edi,filename+8 |
mov esi,ddot |
movsb |
cld |
mov ecx,3 |
mov edi,filename+9 |
mov esi,tic_table |
add esi,dword [lscnt] |
rep movsb |
cmp byte [filename+10],0 |
jne no_fn_space1 |
mov edi,filename+10 |
mov esi,dzero |
movsb |
no_fn_space1: |
cmp byte [filename],0xe5 ; deleted file |
je no_newline |
cmp byte [filename],0xf ; long fat32 filename |
je no_newline |
cmp byte [filename],0x10 ; folder |
je no_newline |
cmp word [filename],'AK' |
jne filename_ok |
cmp byte [filename+3],'e' |
jne filename_ok |
cmp byte [filename+5],'y' |
jne filename_ok |
cmp byte [filename+7],'a' |
jne filename_ok |
cmp byte [filename+10],'s' |
jne filename_ok |
jmp no_newline |
filename_ok: |
mov eax,6 |
mov ebx,filename |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
int 0x40 |
cmp eax,4294967295 |
jne ls_print |
jmp no_newline |
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 |
pop ecx |
dec ecx |
cmp ecx,0 |
jne loop40 |
cmp dword [blockcnt],16 |
je ls_end |
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 [blockcnt],0 |
mov dword [lscnt],8024 |
mov byte [lscntf],0 |
mov byte [lscntx],0 |
cmp byte [callp],1 |
je go |
jmp ecmd2 |
ls_print: |
mov edi,filename+8 |
mov esi,fill1 |
movsb |
mov eax,4 |
mov ebx,[ypos] |
shl ebx,16 |
add ebx,[xpos] |
mov edx,filename |
mov ecx,0x00ddeeff |
mov esi,12 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
mov dword [count2],eax |
ll1: |
inc dword [pn] |
mov eax,9 |
mov ebx,tic_table |
mov ecx,[pn] |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
ret |
pause2: |
call newline |
mov edx,mess1 |
call printf |
mov eax,10 |
int 0x40 |
red3: |
cmp eax,2 |
je back |
cmp eax,3 |
je exit |
call draw |
call red |
mov eax,10 |
int 0x40 |
jmp red3 |
back: |
mov eax,2 |
int 0x40 |
cmp ah,27 |
je checmd |
ret |
exit: |
mov eax,-1 |
int 0x40 |
checmd: |
cmp byte [callp],1 |
je ecmd3 |
jmp ecmd |
err: |
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,27 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
cmp eax,4294967295 |
jne alreadyexist |
mov eax,6 |
mov ebx,tic_table+9000 |
mov ecx,0 |
mov edx,-1 |
mov esi,tic_table+25000 |
int 0x40 |
mov dword [filesize],eax |
mov eax,33 |
mov ebx,tic_table+9100 |
mov ecx,tic_table+25000 |
mov edx,dword [filesize] |
mov esi,0 |
int 0x40 |
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 |
int 0x40 |
cmp eax,4294967295 |
je no_ok1 |
mov eax,32 |
mov ebx,tic_table+9000 |
int 0x40 |
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 |
int 0x40 |
cmp eax,4294967295 |
je nosuchfile2 |
mov eax,32 |
mov ebx,tic_table+400 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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] |
int 0x40 |
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 |
int 0x40 |
cmp eax,ecx |
jb nosuchprocess |
mov eax,18 |
mov ebx,2 |
mov edx,0 |
int 0x40 |
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] |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
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 eax,19 |
mov ebx,tic_table+400 |
mov ecx,tic_table+800 |
int 0x40 |
cmp eax,0xfffffff0 |
jb cmd_ok |
jmp err |
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+486 |
mov ecx,24*65536+250 |
mov edx,0 |
int 0x40 |
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 |
int 0x40 |
mov eax,5 |
mov ebx,200 |
int 0x40 |
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 eax,19 |
mov ebx,tic_table+600 |
mov ecx,0 |
int 0x40 |
cmp eax,0xfffffff0 |
jb cmd_ok_1 |
jmp err |
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 |
int 0x40 |
call clearipc |
mov eax,40 |
mov ebx,01000111b |
int 0x40 |
mov eax,23 |
mov ebx,10 |
int 0x40 |
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 |
int 0x40 |
mov ecx,eax |
loopfindipc: |
push ecx |
mov eax,9 |
mov ebx,tic_table+100000 |
int 0x40 |
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 |
int 0x40 |
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] |
int 0x40 |
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 |
int 0x40 |
mov eax,10 |
int 0x40 |
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 |
int 0x40 |
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 |
int 0x40 |
cmp eax,1 |
je reipc2 |
cmp eax,3 |
je exit |
cmp eax,2 |
je ipckeypressed |
jmp ipckey |
ipckeypressed: |
mov eax,2 |
int 0x40 |
mov byte [ipckeyvalue],ah |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [ipcpid] |
mov edx,ipckeyvalue |
mov esi,1 |
int 0x40 |
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 |
int 0x40 |
mov ecx,eax |
loopex: |
push ecx |
mov eax,9 |
mov ebx,I_END |
int 0x40 |
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 |
title: |
db 'CMD - Command line interpreter' |
title_end: |
smb_cursor db '|' |
prompt db 'CMD>>' |
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! ' |
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 |
filename db ' ',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 |
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: |
tic_table: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/develop/cmd/trunk/cmdipc.inc |
---|
0,0 → 1,221 |
include "macros.inc" |
initipc: |
mov eax,9 |
mov ebx,prc |
mov ecx,-1 |
int 0x40 |
mov ecx,eax |
loop1: |
push ecx |
mov eax,9 |
mov ebx,prc |
int 0x40 |
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 |
int 0x40 |
call initcmd |
waitcmdinit: |
mov eax,40 |
mov ebx,01000000b |
int 0x40 |
mov eax,23 |
mov ebx,100 |
int 0x40 |
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] |
int 0x40 |
ret |
pause1: |
mov eax,5 |
mov ebx,1 |
int 0x40 |
ret |
exit: |
mov eax,-1 |
int 0x40 |
cls: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipccls |
mov esi,4 |
int 0x40 |
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 |
int 0x40 |
call pause1 |
ret |
eol: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipceol |
mov esi,4 |
int 0x40 |
call pause1 |
ret |
initcmd: |
mov eax,60 |
mov ebx,2 |
mov ecx,dword [cmdpid] |
mov edx,ipckey |
mov esi,4 |
int 0x40 |
mov eax,60 |
mov ebx,1 |
mov ecx,ipcb |
mov edx,28 |
int 0x40 |
cld |
mov ecx,28 |
mov edi,ipcb |
mov esi,ipcc |
rep movsb |
ret |
getkey: |
call initcmd |
waitagain: |
mov eax,40 |
mov ebx,01000000b |
int 0x40 |
mov eax,10 |
int 0x40 |
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 |
int 0x40 |
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 |
/programs/develop/cmd/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/develop/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 (õîòÿ âîçìîæíî è äðóãîå). |
Äëÿ ýòîãî, ê âàøåé ïðîãðàììå âàì íåîáõðäèìî ïîäêëþ÷èòü ôàéë |
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 |