feat: ajout d'une commande interne mode. Nombreuses nouvelles fonctions dans str0.
This commit is contained in:
parent
564853e762
commit
36a6efc333
420
prompt.asm
420
prompt.asm
|
@ -6,84 +6,131 @@ smart
|
||||||
org 0100h
|
org 0100h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
mov ah,2
|
mov ah,2
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,13
|
mov ah,13
|
||||||
mov si,offset msg
|
mov si,offset msg
|
||||||
int 47h
|
int 47h
|
||||||
|
xor bp,bp
|
||||||
|
mov dl,' '
|
||||||
|
call setdelimiter0
|
||||||
replay:
|
replay:
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
noret:
|
noret:
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,13
|
mov ah,13
|
||||||
mov si,offset prompt
|
mov si,offset prompt
|
||||||
int 47h
|
int 47h
|
||||||
mov di,offset buffer
|
mov di,offset buffer
|
||||||
waitchar:
|
waitchar:
|
||||||
mov ax,0
|
mov ax,0
|
||||||
int 16h
|
int 16h
|
||||||
cmp al,0Dh
|
cmp ah,59
|
||||||
je entere
|
jne norr
|
||||||
cmp di,offset buffer+256
|
cmp bp,0
|
||||||
je waitchar
|
je waitchar
|
||||||
mov [di],al
|
mov ah,13
|
||||||
inc di
|
mov si,cs:[bp-8]
|
||||||
mov dl,al
|
int 47h
|
||||||
mov ah,7
|
push cs
|
||||||
int 47h
|
pop es
|
||||||
jmp waitchar
|
call copy0
|
||||||
|
call getlength0
|
||||||
|
add di,cx
|
||||||
|
jmp waitchar
|
||||||
|
norr:
|
||||||
|
cmp al,0Dh
|
||||||
|
je entere
|
||||||
|
cmp di,offset buffer+256
|
||||||
|
je waitchar
|
||||||
|
mov [di],al
|
||||||
|
inc di
|
||||||
|
mov dl,al
|
||||||
|
mov ah,7
|
||||||
|
int 47h
|
||||||
|
jmp waitchar
|
||||||
entere:
|
entere:
|
||||||
mov byte ptr [di],0
|
mov byte ptr [di],0
|
||||||
mov si,offset buffer
|
mov si,offset buffer
|
||||||
cmp si,di
|
cmp si,di
|
||||||
je noret
|
je noret
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
call uppercase0
|
push cs
|
||||||
mov bx,offset commands
|
pop es
|
||||||
|
mov di,offset buffer2
|
||||||
|
xor cx,cx
|
||||||
|
call getitem0
|
||||||
|
mov si,di
|
||||||
|
call uppercase0
|
||||||
|
mov bx,offset commands
|
||||||
|
xor bp,bp
|
||||||
tre:
|
tre:
|
||||||
mov di,[bx]
|
mov di,[bx]
|
||||||
add bx,4
|
add bx,8
|
||||||
cmp di,0
|
cmp di,0
|
||||||
je error
|
je error
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
call cmpstr0
|
call evalue0
|
||||||
jne tre
|
cmp dx,bp
|
||||||
mov bx,[bx-2]
|
jb noadd
|
||||||
call bx
|
mov bp,dx
|
||||||
jmp replay
|
mov ax,bx
|
||||||
|
noadd:
|
||||||
|
call cmpstr0
|
||||||
|
jne tre
|
||||||
|
mov si,offset buffer
|
||||||
|
mov di,offset buffer2
|
||||||
|
call copy0
|
||||||
|
mov si,di
|
||||||
|
call uppercase0
|
||||||
|
xor cx,cx
|
||||||
|
inc cx
|
||||||
|
call getpointeritem0
|
||||||
|
cmp byte ptr [di-1],0
|
||||||
|
jne nopod
|
||||||
|
mov byte ptr [di],0
|
||||||
|
nopod:
|
||||||
|
mov si,di
|
||||||
|
mov di,[bx-4]
|
||||||
|
call checksyntax0
|
||||||
|
jc errorprec
|
||||||
|
mov bx,[bx-6]
|
||||||
|
call bx
|
||||||
|
jmp replay
|
||||||
error:
|
error:
|
||||||
push cs
|
mov bp,ax
|
||||||
pop es
|
push cs
|
||||||
mov dl,'.'
|
pop es
|
||||||
call searchchar0
|
mov dl,'.'
|
||||||
je noaddext
|
call searchchar0
|
||||||
mov di,offset buffer
|
je noaddext
|
||||||
mov si,offset extcom
|
mov di,offset buffer
|
||||||
call concat0
|
mov si,offset extcom
|
||||||
|
call concat0
|
||||||
noaddext:
|
noaddext:
|
||||||
mov si,offset buffer
|
mov si,offset buffer
|
||||||
push cs
|
push cs
|
||||||
mov ax,offset arrive
|
mov ax,offset arrive
|
||||||
push ax
|
push ax
|
||||||
mov di,offset vga
|
mov di,offset vga
|
||||||
mov ah,40
|
mov ah,40
|
||||||
int 47h
|
int 47h
|
||||||
mov ax,6000h
|
mov ax,6000h
|
||||||
mov es,ax
|
mov es,ax
|
||||||
push ax
|
push ax
|
||||||
mov di,0100h
|
mov di,0100h
|
||||||
push di
|
push di
|
||||||
mov ah,4
|
mov ah,4
|
||||||
int 48h
|
int 48h
|
||||||
jc reallyerror
|
jc reallyerror
|
||||||
push es
|
push es
|
||||||
push es
|
push es
|
||||||
push es
|
push es
|
||||||
|
@ -92,174 +139,125 @@ jc reallyerror
|
||||||
pop gs
|
pop gs
|
||||||
push 7202h
|
push 7202h
|
||||||
popf
|
popf
|
||||||
db 0CBh
|
db 0CBh
|
||||||
arrive:
|
arrive:
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
push cs
|
push cs
|
||||||
pop ds
|
pop ds
|
||||||
pop es
|
pop es
|
||||||
pop fs
|
pop fs
|
||||||
pop gs
|
pop gs
|
||||||
mov si,offset vga
|
mov si,offset vga
|
||||||
mov ah,41
|
mov ah,41
|
||||||
int 47h
|
int 47h
|
||||||
jmp replay
|
xor bp,bp
|
||||||
|
jmp replay
|
||||||
reallyerror:
|
reallyerror:
|
||||||
pop ax
|
pop ax
|
||||||
pop ax
|
pop ax
|
||||||
pop ax
|
pop ax
|
||||||
pop ax
|
pop ax
|
||||||
mov ah,13
|
mov ah,13
|
||||||
mov si,offset Error_Syntax
|
mov si,offset Error_Syntax
|
||||||
int 47h
|
int 47h
|
||||||
jmp replay
|
mov ah,13
|
||||||
|
mov si,cs:[bp-8]
|
||||||
|
int 47h
|
||||||
|
jmp replay
|
||||||
|
errorprec:
|
||||||
|
mov ah,13
|
||||||
|
mov si,offset derror
|
||||||
|
int 47h
|
||||||
|
jmp replay
|
||||||
|
|
||||||
Code_Exit:
|
Code_Exit:
|
||||||
pop ax
|
pop ax
|
||||||
db 0CBh
|
db 0CBh
|
||||||
|
|
||||||
Code_Version:
|
Code_Version:
|
||||||
mov ah,13
|
mov ah,13
|
||||||
mov si,offset Version_Text
|
mov si,offset Version_Text
|
||||||
int 47h
|
int 47h
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Version_Text db 'Cos 2000 version 1.1.1B by Nico',0
|
Version_Text db 'Cos 2000 version 1.1.1B by Nico',0
|
||||||
|
|
||||||
Code_Cls:
|
Code_Cls:
|
||||||
mov ah,2
|
mov ah,2
|
||||||
int 47h
|
int 47h
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Code_Reboot:
|
Code_Reboot:
|
||||||
push 0FFFFh
|
push 0FFFFh
|
||||||
push 00000h
|
push 00000h
|
||||||
db 0CBH
|
db 0CBH
|
||||||
|
|
||||||
Code_Command:
|
Code_Command:
|
||||||
mov bx,offset commands
|
mov bx,offset commands
|
||||||
showalls:
|
showalls:
|
||||||
mov si,[bx]
|
mov si,[bx]
|
||||||
add bx,4
|
add bx,8
|
||||||
cmp si,0
|
cmp si,0
|
||||||
je endoff
|
je endoff
|
||||||
mov ah,13
|
mov ah,13
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
jmp showalls
|
jmp showalls
|
||||||
endoff:
|
endoff:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
Code_Mode:
|
||||||
|
mov cx,0
|
||||||
|
call gettypeditem0
|
||||||
|
mov ah,0
|
||||||
|
mov al,dl
|
||||||
|
and al,1111b
|
||||||
|
int 47h
|
||||||
|
mov ah,2
|
||||||
|
int 47h
|
||||||
|
ret
|
||||||
|
|
||||||
extcom db '.EXE',0
|
extcom db '.EXE',0
|
||||||
|
|
||||||
commands dw Str_Exit ,Code_Exit
|
commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
|
||||||
dw Str_Version,Code_Version
|
dw Str_Version,Code_Version,Syn_Version,Help_Version
|
||||||
dw Str_Cls ,Code_Cls
|
dw Str_Cls ,Code_Cls ,Syn_Cls ,Help_Cls
|
||||||
dw Str_Reboot ,Code_Reboot
|
dw Str_Reboot ,Code_Reboot ,Syn_Reboot ,Help_Reboot
|
||||||
dw Str_Command,Code_Command
|
dw Str_Command,Code_Command,Syn_Command,Help_Command
|
||||||
|
dw Str_Mode ,Code_Mode ,Syn_Mode ,Help_Mode
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
|
|
||||||
Str_Exit db 'EXIT',0
|
Str_Exit db 'EXIT',0
|
||||||
Str_Version db 'VERSION',0
|
Str_Version db 'VERSION',0
|
||||||
Str_Cls db 'CLS',0
|
Str_Cls db 'CLS',0
|
||||||
Str_Reboot db 'REBOOT',0
|
Str_Reboot db 'REBOOT',0
|
||||||
Str_Command db 'COMMAND',0
|
Str_Command db 'COMMAND',0
|
||||||
|
Str_Mode db 'MODE',0
|
||||||
|
Syn_Exit db 0
|
||||||
|
Syn_Version db 0
|
||||||
|
Syn_Cls db 0
|
||||||
|
Syn_Reboot db 0
|
||||||
|
Syn_Command db 0
|
||||||
|
Syn_Mode db 'FFH',0
|
||||||
|
Help_Exit db 0
|
||||||
|
Help_Version db 0
|
||||||
|
Help_Cls db 0
|
||||||
|
Help_Reboot db 0
|
||||||
|
Help_Command db 0
|
||||||
|
Help_Mode db 0
|
||||||
|
|
||||||
Error_Syntax db 'Command or executable doesn''t exist !',0
|
derror db 'Syntax error',0
|
||||||
|
Error_Syntax db 'Command or executable doesn''t exist ! F1 for ',0
|
||||||
prompt db 'COS>',0
|
prompt db 'COS>',0
|
||||||
msg db 'Cos command interpretor V1.0',0
|
msg db 'Cos command interpretor V1.0',0
|
||||||
buffer db 255 dup (0)
|
|
||||||
|
|
||||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
include str0.asm
|
||||||
SearchChar0:
|
|
||||||
push ax cx di es
|
|
||||||
call GetLength0
|
|
||||||
push ds
|
|
||||||
pop es
|
|
||||||
mov di,si
|
|
||||||
mov al,dl
|
|
||||||
repne scasb
|
|
||||||
pop es di cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
buffer equ $
|
||||||
cmpstr0:
|
buffer2 equ $+256
|
||||||
push cx dx si di
|
vga equ $+512
|
||||||
call GetLength0
|
|
||||||
mov dx,cx
|
|
||||||
push ds si
|
|
||||||
push es
|
|
||||||
pop ds
|
|
||||||
mov si,di
|
|
||||||
call GetLength0
|
|
||||||
pop si ds
|
|
||||||
cmp cx,dx
|
|
||||||
jne NotEqual
|
|
||||||
repe cmpsb
|
|
||||||
NotEqual:
|
|
||||||
pop di si dx cx
|
|
||||||
ret
|
|
||||||
|
|
||||||
;met en majuscule la chaine ds:si
|
|
||||||
UpperCase0:
|
|
||||||
push si ax
|
|
||||||
UpperCase:
|
|
||||||
mov al,ds:[si]
|
|
||||||
inc si
|
|
||||||
cmp al,0
|
|
||||||
je EndUpperCase
|
|
||||||
cmp al,'a'
|
|
||||||
jb UpperCase
|
|
||||||
cmp al,'z'
|
|
||||||
ja UpperCase
|
|
||||||
sub byte ptr [si-1],'a'-'A'
|
|
||||||
jmp UpperCase
|
|
||||||
EndUpperCase:
|
|
||||||
clc
|
|
||||||
pop ax si
|
|
||||||
ret
|
|
||||||
|
|
||||||
;ConcatŠne le chaine ds:si avec es:di
|
|
||||||
Concat0:
|
|
||||||
push ax cx dx si di
|
|
||||||
call GetLength0
|
|
||||||
mov dx,cx
|
|
||||||
xchg si,di
|
|
||||||
push ds
|
|
||||||
push es
|
|
||||||
pop ds
|
|
||||||
call GetLength0
|
|
||||||
pop ds
|
|
||||||
xchg si,di
|
|
||||||
add di,cx
|
|
||||||
mov cx,dx
|
|
||||||
cld
|
|
||||||
rep movsb
|
|
||||||
mov al,0
|
|
||||||
stosb
|
|
||||||
pop di si dx cx ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
|
||||||
GetLength0:
|
|
||||||
push ax di es
|
|
||||||
push ds
|
|
||||||
pop es
|
|
||||||
mov di,si
|
|
||||||
mov al,0
|
|
||||||
mov cx,0FFFFh
|
|
||||||
cld
|
|
||||||
repne scasb
|
|
||||||
neg cx
|
|
||||||
dec cx
|
|
||||||
dec cx
|
|
||||||
pop es di ax
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
vga db 0
|
|
||||||
end start
|
end start
|
||||||
|
|
632
str0.asm
632
str0.asm
|
@ -1,22 +1,381 @@
|
||||||
;Librairie qui prend en charge le format de STR ASCIIZ
|
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||||
.model tiny
|
;# nombre 9
|
||||||
.486
|
;@ str 8
|
||||||
smart
|
;& file 7
|
||||||
.code
|
|
||||||
|
|
||||||
org 0100h
|
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||||
|
CheckSyntax0:
|
||||||
|
push ax bx dx bp si di ds es
|
||||||
|
push es di
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov di,offset temp2
|
||||||
|
call copy0
|
||||||
|
mov si,di
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
pop di es
|
||||||
|
call getdelimiter0
|
||||||
|
mov bp,dx
|
||||||
|
mov dl,' '
|
||||||
|
call setdelimiter0
|
||||||
|
call compressdelimiter0
|
||||||
|
call uppercase0
|
||||||
|
call getnbitems0
|
||||||
|
;call xch
|
||||||
|
;mov ax,cx
|
||||||
|
;call getnbitem0
|
||||||
|
;call xch
|
||||||
|
;cmp ax,cx
|
||||||
|
;call xch
|
||||||
|
;jne notequalatall
|
||||||
|
mov bx,cx
|
||||||
|
xor cx,cx
|
||||||
|
itemer:
|
||||||
|
call whatisitem0
|
||||||
|
mov dx,ax
|
||||||
|
call xch
|
||||||
|
call whatisitem0
|
||||||
|
call xch
|
||||||
|
cmp ax,dx
|
||||||
|
jne prob
|
||||||
|
cmp al,6
|
||||||
|
jb equal
|
||||||
|
call cmpitems0
|
||||||
|
je equal
|
||||||
|
prob:
|
||||||
|
cmp dl,4
|
||||||
|
ja nosize
|
||||||
|
cmp al,8
|
||||||
|
je equal
|
||||||
|
cmp al,4
|
||||||
|
jne notequalatall
|
||||||
|
cmp dh,ah
|
||||||
|
ja notequalatall
|
||||||
|
jmp equal
|
||||||
|
nosize:
|
||||||
|
cmp al,7
|
||||||
|
jne noname
|
||||||
|
cmp ah,0
|
||||||
|
jne notequalatall
|
||||||
|
jmp equal
|
||||||
|
noname:
|
||||||
|
cmp al,8
|
||||||
|
je equal
|
||||||
|
jmp notequalatall
|
||||||
|
equal:
|
||||||
|
inc cx
|
||||||
|
cmp cx,bx
|
||||||
|
jne itemer
|
||||||
|
cld
|
||||||
|
ackno:
|
||||||
|
mov dx,bp
|
||||||
|
call setdelimiter0
|
||||||
|
pop es ds di si bp dx bx ax
|
||||||
|
ret
|
||||||
|
notequalatall:
|
||||||
|
stc
|
||||||
|
jmp ackno
|
||||||
|
xch:
|
||||||
|
push ds
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
pop es
|
||||||
|
xchg si,di
|
||||||
|
ret
|
||||||
|
|
||||||
start:
|
temp2 db 256 dup (0)
|
||||||
mov di,offset set
|
|
||||||
mov si,offset set
|
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||||
mov bx,7
|
Cmpitems0:
|
||||||
mov cx,5
|
push cx dx si di
|
||||||
call delete0
|
push cx di
|
||||||
|
call getpointeritem0
|
||||||
|
mov si,di
|
||||||
|
xor cx,cx
|
||||||
|
inc cx
|
||||||
|
call getpointeritem0
|
||||||
|
mov dx,di
|
||||||
|
sub dx,si
|
||||||
|
dec cx
|
||||||
|
pop di cx
|
||||||
|
push ds si
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
mov si,di
|
||||||
|
call getpointeritem0
|
||||||
|
pop si ds
|
||||||
|
mov cx,dx
|
||||||
|
rep cmpsb
|
||||||
|
pop di si dx cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||||
|
gettypeditem0:
|
||||||
|
push bx cx si
|
||||||
|
call getpointeritem0
|
||||||
|
mov si,di
|
||||||
|
xor cx,cx
|
||||||
|
inc cl
|
||||||
|
call getpointeritem0
|
||||||
|
mov bx,di
|
||||||
|
dec bx
|
||||||
|
mov cl,0
|
||||||
|
xchg cl,ds:[bx]
|
||||||
|
call gettyped0
|
||||||
|
xchg cl,ds:[bx]
|
||||||
|
pop si cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie ds:si dans edx si nb et dans es:di si str ou name
|
||||||
|
gettyped0:
|
||||||
|
push ax
|
||||||
|
call whatis0
|
||||||
|
cmp al,5
|
||||||
|
jb number
|
||||||
|
cmp al,6
|
||||||
|
je pointer
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
call getpointeritem0
|
||||||
|
jmp endofGettypeditem0
|
||||||
|
number:
|
||||||
|
mov edx,cs:lastnumber
|
||||||
|
jmp endofgettypeditem0
|
||||||
|
pointer:
|
||||||
|
call str0toadress
|
||||||
|
endofgettypeditem0:
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie dans ax le type de la str0 point‚e par ds:si ‚l‚ment cx
|
||||||
|
whatisitem0:
|
||||||
|
push bx cx si di
|
||||||
|
call getpointeritem0
|
||||||
|
mov si,di
|
||||||
|
xor cx,cx
|
||||||
|
inc cl
|
||||||
|
call getpointeritem0
|
||||||
|
mov bx,di
|
||||||
|
dec bx
|
||||||
|
mov cl,0
|
||||||
|
xchg cl,ds:[bx]
|
||||||
|
call whatis0
|
||||||
|
xchg cl,ds:[bx]
|
||||||
|
pop di si cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie dans ax le type de la str0 point‚e par ds:si
|
||||||
|
;High Low
|
||||||
|
;0 variable 4 hex
|
||||||
|
;1 byte 3 dec
|
||||||
|
;2 word 2 oct
|
||||||
|
;3 3 octets 1 bin
|
||||||
|
;4 dword 5 adresse
|
||||||
|
;5 5 octets 6 name
|
||||||
|
;6 ... 7 str
|
||||||
|
whatis0:
|
||||||
|
push bx cx edx
|
||||||
|
mov cl,2
|
||||||
|
call str0isbase
|
||||||
|
jnc finbase
|
||||||
|
mov cl,8
|
||||||
|
call str0isbase
|
||||||
|
jnc finbase
|
||||||
|
mov cl,10
|
||||||
|
call str0isbase
|
||||||
|
jnc finbase
|
||||||
|
mov cl,16
|
||||||
|
call str0isbase
|
||||||
|
jc testadress
|
||||||
|
finbase:
|
||||||
|
mov bx,cx
|
||||||
|
xor ch,ch
|
||||||
|
mov al,cs:[bx+offset basenn-2]
|
||||||
|
call str0toint
|
||||||
|
mov cs:Lastnumber,edx
|
||||||
|
cmp edx,0000FFFFh
|
||||||
|
ja bits32
|
||||||
|
cmp dx,00FFh
|
||||||
|
ja bits16
|
||||||
|
mov ah,1
|
||||||
|
jmp endofwhat
|
||||||
|
bits16:
|
||||||
|
mov ah,2
|
||||||
|
jmp endofwhat
|
||||||
|
bits32:
|
||||||
|
mov ah,3
|
||||||
|
jmp endofwhat
|
||||||
|
testadress:
|
||||||
|
call str0isadress
|
||||||
|
jc testname
|
||||||
|
mov ax,0005h
|
||||||
|
jmp endofwhat
|
||||||
|
testname:
|
||||||
|
call str0isname
|
||||||
|
jc testvarstr
|
||||||
|
mov al,07h
|
||||||
|
call getlength0
|
||||||
|
cmp byte ptr [si],'&'
|
||||||
|
jne real
|
||||||
|
mov cl,0
|
||||||
|
real:
|
||||||
|
mov ah,cl
|
||||||
|
jmp endofwhat
|
||||||
|
testvarstr:
|
||||||
|
cmp byte ptr [si],'@'
|
||||||
|
jne testnumber
|
||||||
|
mov al,08h
|
||||||
|
call getlength0
|
||||||
|
mov ah,cl
|
||||||
|
jmp endofwhat
|
||||||
|
testnumber:
|
||||||
|
cmp byte ptr [si],'#'
|
||||||
|
jne isstr
|
||||||
|
call getlength0
|
||||||
|
cmp cl,1
|
||||||
|
ja isstr
|
||||||
|
mov ax,0009h
|
||||||
|
jmp endofwhat
|
||||||
|
isstr:
|
||||||
|
mov al,06h
|
||||||
|
call getlength0
|
||||||
|
dec cl
|
||||||
|
mov ah,cl
|
||||||
|
endofwhat:
|
||||||
|
pop edx cx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
Lastnumber dd 0
|
||||||
|
|
||||||
|
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||||
|
str0isadress:
|
||||||
|
;push
|
||||||
|
stc
|
||||||
|
;pop
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie en es:di le pointeur str0 ds:si
|
||||||
|
Str0toAdress:
|
||||||
|
;push
|
||||||
|
stc
|
||||||
|
;pop
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie non carry si la str ds:si point‚e peut ˆtre un nom de fichier
|
||||||
|
str0isname:
|
||||||
|
push ax si di
|
||||||
|
isname:
|
||||||
|
mov al,[si]
|
||||||
|
inc si
|
||||||
|
cmp al,0
|
||||||
|
je itsok
|
||||||
|
mov di,offset non
|
||||||
|
verify:
|
||||||
|
mov ah,[di]
|
||||||
|
inc di
|
||||||
|
cmp ah,0FFh
|
||||||
|
je isname
|
||||||
|
cmp ah,al
|
||||||
|
jne verify
|
||||||
|
stc
|
||||||
|
jmp itsdead
|
||||||
|
itsok:
|
||||||
|
clc
|
||||||
|
itsdead:
|
||||||
|
pop di si ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
non db '/<>|@#',01,0FFh
|
||||||
|
|
||||||
|
;Renvoie non carry si le texte point‚ par si est de la base cl
|
||||||
|
str0isbase:
|
||||||
|
push ax cx si di es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov ah,cl
|
||||||
|
isstrbase:
|
||||||
|
mov al,[si]
|
||||||
|
cmp al,0
|
||||||
|
je okbase
|
||||||
|
mov cl,ah
|
||||||
|
xor ch,ch
|
||||||
|
mov di,cx
|
||||||
|
cmp al,es:[di-2+offset basen]
|
||||||
|
je verifbase
|
||||||
|
xor ch,ch
|
||||||
|
inc cl
|
||||||
|
mov di,offset base
|
||||||
|
cld
|
||||||
|
repne scasb
|
||||||
|
cmp cx,0
|
||||||
|
je nobase
|
||||||
|
inc si
|
||||||
|
jmp isstrbase
|
||||||
|
okbase:
|
||||||
|
clc
|
||||||
|
endbase:
|
||||||
|
pop es di si cx ax
|
||||||
|
ret
|
||||||
|
verifbase:
|
||||||
|
cmp byte ptr [si+1],0
|
||||||
|
je okbase
|
||||||
|
nobase:
|
||||||
|
stc
|
||||||
|
jmp endbase
|
||||||
|
|
||||||
|
temp dw 0
|
||||||
|
|
||||||
|
;Converti un str de base cl en int dans edx
|
||||||
|
str0toint:
|
||||||
|
push eax bx ecx si edi ebp es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov ah,cl
|
||||||
|
mov cs:temp,si
|
||||||
|
gotos:
|
||||||
|
cmp byte ptr [si+1], 0
|
||||||
|
je oklo
|
||||||
|
inc si
|
||||||
|
jmp gotos
|
||||||
|
oklo:
|
||||||
|
mov edi,1
|
||||||
|
xor ebp,ebp
|
||||||
|
mov bl,cl
|
||||||
|
baseto:
|
||||||
|
cmp si,cs:temp
|
||||||
|
jb endbaseto
|
||||||
|
mov al,[si]
|
||||||
|
xor ecx,ecx
|
||||||
|
mov cl,bl
|
||||||
|
inc cl
|
||||||
|
push di
|
||||||
|
mov di,offset base
|
||||||
|
cld
|
||||||
|
repne scasb
|
||||||
|
pop di
|
||||||
|
jne noop
|
||||||
|
sub cl,bl
|
||||||
|
neg cl
|
||||||
|
mov eax,edi
|
||||||
|
mul ecx
|
||||||
|
add ebp,eax
|
||||||
|
mov eax,edi
|
||||||
|
mov cl,bl
|
||||||
|
mul ecx
|
||||||
|
mov edi,eax
|
||||||
|
noop:
|
||||||
|
dec si
|
||||||
|
jmp baseto
|
||||||
|
endbaseto:
|
||||||
|
mov edx,ebp
|
||||||
|
pop es ebp edi si ecx bx eax
|
||||||
ret
|
ret
|
||||||
|
base db '0123456789ABCDEF'
|
||||||
set db 'Essai de string',0
|
basen db 'B O D H'
|
||||||
set2 db 'epais',0
|
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||||
tre db 30 dup (0)
|
|
||||||
|
|
||||||
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
||||||
Left0:
|
Left0:
|
||||||
|
@ -67,6 +426,24 @@ Fill0:
|
||||||
pop es di si cx bx ax
|
pop es di si cx bx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Remplace tout les caractŠres al de ds:si par des caractŠres dl
|
||||||
|
ReplaceAllchar0:
|
||||||
|
push ax cx di es
|
||||||
|
call GetLength0
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
findandchange:
|
||||||
|
repne scasb
|
||||||
|
cmp cx,0
|
||||||
|
je endofchange
|
||||||
|
mov es:[di-1],dl
|
||||||
|
jmp findandchange
|
||||||
|
endofchange:
|
||||||
|
pop es di cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
;Recherche un caractŠre dl dans la chaŒne ds:si
|
||||||
SearchChar0:
|
SearchChar0:
|
||||||
push ax cx di es
|
push ax cx di es
|
||||||
|
@ -79,6 +456,32 @@ SearchChar0:
|
||||||
pop es di cx ax
|
pop es di cx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Inverse la chaine point‚e en ds:si
|
||||||
|
invert0:
|
||||||
|
push ax cx si di es
|
||||||
|
call GetLength0
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
add di,cx
|
||||||
|
dec di
|
||||||
|
revert:
|
||||||
|
mov al,[si]
|
||||||
|
xchg al,es:[di]
|
||||||
|
mov [si],al
|
||||||
|
inc si
|
||||||
|
dec di
|
||||||
|
cmp si,di
|
||||||
|
je finishinvert
|
||||||
|
dec di
|
||||||
|
cmp si,di
|
||||||
|
je finishinvert
|
||||||
|
inc di
|
||||||
|
jmp revert
|
||||||
|
finishinvert:
|
||||||
|
pop es di si cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
||||||
cmpstr0:
|
cmpstr0:
|
||||||
push cx dx si di
|
push cx dx si di
|
||||||
|
@ -97,6 +500,42 @@ NotEqual:
|
||||||
pop di si dx cx
|
pop di si dx cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal et renvoie le nb de caractŠre egaux dans dx
|
||||||
|
evalue0:
|
||||||
|
push cx si di
|
||||||
|
push ds si
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
mov si,di
|
||||||
|
call GetLength0
|
||||||
|
pop si ds
|
||||||
|
mov dx,cx
|
||||||
|
repe cmpsb
|
||||||
|
pushf
|
||||||
|
sub dx,cx
|
||||||
|
popf
|
||||||
|
pop di si cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;Insert une chaine ds:si en es:di a partir du caractŠre cx
|
||||||
|
insert0:
|
||||||
|
push cx di si
|
||||||
|
add di,cx
|
||||||
|
call getlength0
|
||||||
|
push si di ds
|
||||||
|
push es
|
||||||
|
pop ds
|
||||||
|
mov si,di
|
||||||
|
add di,cx
|
||||||
|
call copy20
|
||||||
|
pop ds di si
|
||||||
|
cld
|
||||||
|
inc di
|
||||||
|
rep movsb
|
||||||
|
pop si di cx
|
||||||
|
ret
|
||||||
|
|
||||||
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
||||||
delete0:
|
delete0:
|
||||||
push cx dx si di es
|
push cx dx si di es
|
||||||
|
@ -105,16 +544,18 @@ delete0:
|
||||||
mov dx,cx
|
mov dx,cx
|
||||||
call getlength0
|
call getlength0
|
||||||
sub cx,dx
|
sub cx,dx
|
||||||
neg cx
|
sub cx,bx
|
||||||
mov di,si
|
inc cx
|
||||||
add si,bx
|
add si,bx
|
||||||
|
mov di,si
|
||||||
|
add si,dx
|
||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
pop es di si dx cx
|
pop es di si dx cx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;Copie une chaine de ds:si en es:di
|
;Copie une chaine de ds:si en es:di
|
||||||
Copy:
|
Copy0:
|
||||||
push ax cx si di
|
push ax cx si di
|
||||||
call GetLength0
|
call GetLength0
|
||||||
cld
|
cld
|
||||||
|
@ -124,6 +565,19 @@ Copy:
|
||||||
pop di si cx ax
|
pop di si cx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Copie une chaine de ds:si en es:di
|
||||||
|
Copy20:
|
||||||
|
push ax cx si di
|
||||||
|
call GetLength0
|
||||||
|
cld
|
||||||
|
add si,cx
|
||||||
|
add di,cx
|
||||||
|
inc cx
|
||||||
|
std
|
||||||
|
rep movsb
|
||||||
|
pop di si cx ax
|
||||||
|
ret
|
||||||
|
|
||||||
;ConcatŠne le chaine ds:si avec es:di
|
;ConcatŠne le chaine ds:si avec es:di
|
||||||
Concat0:
|
Concat0:
|
||||||
push ax cx dx si di
|
push ax cx dx si di
|
||||||
|
@ -145,6 +599,146 @@ Concat0:
|
||||||
pop di si dx cx ax
|
pop di si dx cx ax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Met DL comme d‚limiteur par d‚faut
|
||||||
|
SetDelimiter0:
|
||||||
|
mov cs:delim,dl
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie le d‚limiteur par d‚faut dans dl
|
||||||
|
GetDelimiter0:
|
||||||
|
mov dl,cs:delim
|
||||||
|
ret
|
||||||
|
delim db 0
|
||||||
|
|
||||||
|
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:si
|
||||||
|
CompressDelimiter0:
|
||||||
|
push ax dx si di es
|
||||||
|
call Getlength0
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
mov al,cs:delim
|
||||||
|
xor dx,dx
|
||||||
|
Compressitems:
|
||||||
|
repne scasb
|
||||||
|
inc dx
|
||||||
|
againcomp:
|
||||||
|
cmp [di],al
|
||||||
|
jne nosup
|
||||||
|
mov si,di
|
||||||
|
mov bx,0
|
||||||
|
push cx
|
||||||
|
mov cx,1
|
||||||
|
call delete0
|
||||||
|
pop cx
|
||||||
|
jmp againcomp
|
||||||
|
nosup:
|
||||||
|
cmp cx,0
|
||||||
|
jne compressitems
|
||||||
|
mov cx,dx
|
||||||
|
pop es di si dx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Met le nombre d'‚l‚ments … cx
|
||||||
|
Setnbitems0:
|
||||||
|
push ax cx dx di es
|
||||||
|
mov dx,cx
|
||||||
|
call Getnbitems0
|
||||||
|
cmp cx,dx
|
||||||
|
je noadjust
|
||||||
|
ja subsome
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
sub cx,dx
|
||||||
|
neg cx
|
||||||
|
push cx
|
||||||
|
call getlength0
|
||||||
|
add di,cx
|
||||||
|
pop cx
|
||||||
|
mov al,cs:delim
|
||||||
|
mov ah,'a'
|
||||||
|
rep stosw
|
||||||
|
mov al,0
|
||||||
|
stosb
|
||||||
|
jmp noadjust
|
||||||
|
subsome:
|
||||||
|
mov cx,dx
|
||||||
|
call GetPointeritem0
|
||||||
|
dec di
|
||||||
|
mov byte ptr [di],0
|
||||||
|
noadjust:
|
||||||
|
pop es di dx cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie la taille dx de l'‚l‚ment cx
|
||||||
|
Getitemsize:
|
||||||
|
push cx di
|
||||||
|
call getpointeritem0
|
||||||
|
mov dx,di
|
||||||
|
inc cx
|
||||||
|
call getpointeritem0
|
||||||
|
sub dx,di
|
||||||
|
neg dx
|
||||||
|
dec dx
|
||||||
|
pop di cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie en es:di l'‚l‚ment cx de ds:si
|
||||||
|
Getitem0:
|
||||||
|
push si di cx ax
|
||||||
|
push di
|
||||||
|
call getPointeritem0
|
||||||
|
call getitemsize
|
||||||
|
mov si,di
|
||||||
|
pop di
|
||||||
|
mov cx,dx
|
||||||
|
rep movsb
|
||||||
|
mov al,0
|
||||||
|
stosb
|
||||||
|
pop ax cx di si
|
||||||
|
ret
|
||||||
|
|
||||||
|
;renvoi un pointeur di sur l'‚l‚ment cx de ds:si
|
||||||
|
GetPointeritem0:
|
||||||
|
push ax bx cx dx es
|
||||||
|
mov bx,cx
|
||||||
|
call Getlength0
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
mov al,cs:delim
|
||||||
|
xor dx,dx
|
||||||
|
Countnbitems:
|
||||||
|
cmp bx,dx
|
||||||
|
je finishpointer
|
||||||
|
repne scasb
|
||||||
|
inc dx
|
||||||
|
cmp cx,0
|
||||||
|
jne countnbitems
|
||||||
|
inc di
|
||||||
|
finishpointer:
|
||||||
|
pop es dx cx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Renvoie le nombre d'‚l‚ments cx de ds:si
|
||||||
|
GetNbitems0:
|
||||||
|
push ax dx di es
|
||||||
|
call Getlength0
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
mov di,si
|
||||||
|
mov al,cs:delim
|
||||||
|
xor dx,dx
|
||||||
|
Countitems:
|
||||||
|
repne scasb
|
||||||
|
inc dx
|
||||||
|
cmp cx,0
|
||||||
|
jne countitems
|
||||||
|
mov cx,dx
|
||||||
|
pop es di dx ax
|
||||||
|
ret
|
||||||
|
|
||||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
||||||
GetLength0:
|
GetLength0:
|
||||||
push ax di es
|
push ax di es
|
||||||
|
@ -249,5 +843,3 @@ EndInvertCase:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end start
|
|
||||||
|
|
|
@ -1018,7 +1018,7 @@ rep movsd
|
||||||
pop cx eax
|
pop cx eax
|
||||||
|
|
||||||
loadbmp:
|
loadbmp:
|
||||||
push ax bx cx dx bp ds
|
push ax bx cx dx ds
|
||||||
mov ax,ds:[18]
|
mov ax,ds:[18]
|
||||||
mov si,ax
|
mov si,ax
|
||||||
shr ax,2
|
shr ax,2
|
||||||
|
@ -1066,7 +1066,7 @@ dec dx
|
||||||
inc bl
|
inc bl
|
||||||
dec cl
|
dec cl
|
||||||
jnz palettemake
|
jnz palettemake
|
||||||
pop ds bp dx cx bx ax
|
pop ds dx cx bx ax
|
||||||
ret
|
ret
|
||||||
sizeh dw 0
|
sizeh dw 0
|
||||||
sizev dw 0
|
sizev dw 0
|
||||||
|
|
Loading…
Reference in New Issue