Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 7784 → Rev 7785

/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