2004-11-30 20:30:30 +01:00
.model tiny
2004-06-12 23:34:04 +02:00
.486
smart
.code
2004-11-30 20:30:30 +01:00
org 0h
2004-06-12 23:34:04 +02:00
include .. \ include \ fat.h
2004-11-10 12:54:51 +01:00
include .. \ include \ mem.h
include .. \ include \ di vers.h
2004-06-12 23:34:04 +02:00
start:
2004-11-30 20:30:30 +01:00
header exe < , 1 , 0 ,,, offset imports ,, >
2004-11-29 23:41:00 +01:00
realstart:
push offset msginit
call [ print ]
2004-06-12 23:34:04 +02:00
xor bp , bp
mov dl , ' '
call setdelimiter0
replay:
mov ah , 6
int 47h
noret:
mov ah , 6
int 47h
2004-11-30 20:30:30 +01:00
mov ah , 16
mov di , offset di r
int 48h
2004-11-29 23:41:00 +01:00
push offset prompt
call [ print ]
2004-06-12 23:34:04 +02:00
mov di , offset buffer
waitchar:
mov ax , 0
int 16h
2004-11-11 18:03:41 +01:00
call convertfr
2004-06-12 23:34:04 +02:00
cmp ah , 59
jne norr
cmp bp , 0
je waitchar
2004-11-30 20:30:30 +01:00
push word ptr cs : [ bp - 8 ]
2004-11-29 23:41:00 +01:00
call [ print ]
2004-06-12 23:34:04 +02:00
push cs
2004-11-30 20:30:30 +01:00
pop es
2004-06-12 23:34:04 +02:00
call copy0
call getlength0
add di , cx
jmp waitchar
norr:
2004-11-30 20:30:30 +01:00
cmp al , 0dh ;entr<74> e
2004-06-12 23:34:04 +02:00
je entere
2004-11-30 20:30:30 +01:00
cmp al , 08h ;backspace
2004-11-10 17:50:43 +01:00
je backspace
2004-11-30 20:30:30 +01:00
cmp al , 27 ;echap
2004-11-10 17:50:43 +01:00
je es cape
2004-11-10 12:54:51 +01:00
cmp al , ' '
jb waitchar
2004-06-12 23:34:04 +02:00
cmp di , offset buffer + 256
je waitchar
mov [ di ], al
inc di
2004-11-29 23:41:00 +01:00
push ax
call [ showchar ]
2004-06-12 23:34:04 +02:00
jmp waitchar
2004-11-10 17:50:43 +01:00
escape:
cmp di , offset buffer
je waitchar
2004-11-29 23:41:00 +01:00
mov ah , 24
2004-11-10 17:50:43 +01:00
int 47h
mov dx , offset buffer
mov cx , di
sub cx , dx
js waitchar
je waitchar
sub bh , cl
2004-11-29 23:41:00 +01:00
mov ah , 25
2004-11-10 17:50:43 +01:00
int 47h
mov di , offset buffer
mov byte ptr [ di ], 0
backspace:
cmp di , offset buffer
je waitchar
2004-11-29 23:41:00 +01:00
mov ah , 24
2004-11-10 17:50:43 +01:00
int 47h
dec bh
2004-11-29 23:41:00 +01:00
mov ah , 25
2004-11-10 17:50:43 +01:00
int 47h
2004-11-29 23:41:00 +01:00
push ' '
call [ showchar ]
mov ah , 25
2004-11-10 17:50:43 +01:00
int 47h
dec di
mov byte ptr [ di ], 0
jmp waitchar
2004-06-12 23:34:04 +02:00
entere:
mov byte ptr [ di ], 0
mov si , offset buffer
cmp si , di
je noret
mov ah , 6
int 47h
push cs
pop es
mov di , offset buffer2
xor cx , cx
call getitem0
mov si , di
call uppercase0
mov bx , offset commands
xor bp , bp
tre:
mov di ,[ bx ]
add bx , 8
cmp di , 0
je error
push cs
2004-11-30 20:30:30 +01:00
pop es
2004-06-12 23:34:04 +02:00
call evalue0
cmp dx , bp
jb noadd
mov bp , dx
mov ax , bx
2004-11-30 20:30:30 +01:00
noadd:
2004-06-12 23:34:04 +02:00
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 ch ecksyntax0
jc errorprec
mov bx ,[ bx - 6 ]
call bx
jmp replay
error:
mov bp , ax
push cs
2004-11-30 20:30:30 +01:00
pop es
2004-06-12 23:34:04 +02:00
mov dl , '.'
call searchchar0
je noaddext
mov di , offset buffer
mov si , offset extcom
call concat0
noaddext:
mov si , offset buffer
2004-10-30 21:54:49 +02:00
mov ah , 18
2004-06-12 23:34:04 +02:00
int 48h
jc reallyerror
xor bp , bp
jmp replay
reallyerror:
2004-11-30 20:30:30 +01:00
push offset error_syntax
2004-11-29 23:41:00 +01:00
call [ print ]
2004-11-30 20:30:30 +01:00
push word ptr cs : [ bp - 8 ]
2004-11-29 23:41:00 +01:00
call [ print ]
2004-06-12 23:34:04 +02:00
jmp replay
errorprec:
2004-11-29 23:41:00 +01:00
push offset derror
call [ print ]
2004-06-12 23:34:04 +02:00
jmp replay
2004-11-30 20:30:30 +01:00
code_exit:
2004-06-12 23:34:04 +02:00
pop ax
2004-11-29 23:41:00 +01:00
retf
2004-11-30 20:30:30 +01:00
code_version:
push offset version_text
2004-11-29 23:41:00 +01:00
call [ print ]
2004-06-12 23:34:04 +02:00
ret
2004-11-30 20:30:30 +01:00
version_text db 'Cos 2000 version 1.4Fr par \c04MrNop' , 0
code_cls:
2004-06-12 23:34:04 +02:00
mov ah , 2
int 47h
ret
2004-11-30 20:30:30 +01:00
code_reboot:
push 0ffffh
2004-06-12 23:34:04 +02:00
push 00000h
2004-11-30 20:30:30 +01:00
retf
code_command:
push offset def
call [ print ]
2004-06-12 23:34:04 +02:00
mov bx , offset commands
showalls:
add bx , 8
2004-11-30 20:30:30 +01:00
cmp word ptr [ bx ], 0
2004-06-12 23:34:04 +02:00
je endoff
2004-11-30 20:30:30 +01:00
push word ptr [ bx + 4 ]
push word ptr [ bx + 6 ]
push word ptr [ bx ]
push offset commandes
2004-11-29 23:41:00 +01:00
call [ print ]
2004-06-12 23:34:04 +02:00
jmp showalls
endoff:
ret
2004-11-30 20:30:30 +01:00
def db 'Liste des commandes internes\l\l' , 0
commandes db '%0 \h10:\h12%0 \h70%0\l' , 0
code_mode:
2004-06-12 23:34:04 +02:00
mov cx , 0
call gettypeditem0
mov ah , 0
mov al , dl
and al , 1111b
int 47h
mov ah , 2
int 47h
ret
2004-11-30 20:30:30 +01:00
code_dir:
mov ah , 12
int 48h
push edx
mov ah , 11
mov di , offset nomdisque
int 48h
push di
push offset present
call [ print ]
xor bp , bp
mov di , offset bufferentry
mov ah , 7
int 48h
jc nofiles
2004-06-12 23:34:04 +02:00
go:
2004-11-30 20:30:30 +01:00
push word ptr [ di + entries.fileattr ]
push dword ptr [ di + entries.filesize ]
push word ptr [ di + entries.filetime ]
push word ptr [ di + entries.filedate ]
push word ptr [ di + entries.filetimecrea ]
push word ptr [ di + entries.filedatecrea ]
push di
push offset line
call [ print ]
inc bp
mov ah , 8
int 48h
jnc go
2004-06-12 23:34:04 +02:00
nofiles:
2004-11-30 20:30:30 +01:00
push ebp
push offset filess
call [ print ]
ret
nomdisque db 13 dup ( 0 )
bufferentry db 512 dup ( 0 )
present db '\c02Le volume insere est nomme %0, Numero de serie : %hD\l\l' , 0
line db '\c07%n %d %t %d %t %z %a\l' , 0
filess db '\l\l\c02%u Fichier(s) au total\l' , 0
2004-06-12 23:34:04 +02:00
code_cd:
2004-11-30 20:30:30 +01:00
mov cx , 0
2004-06-12 23:34:04 +02:00
call gettypeditem0
2004-11-30 20:30:30 +01:00
push di
push offset ch anging
call [ print ]
mov si , di
mov ah , 13
int 48h
jnc okchange
push offset errorchanging
call [ print ]
2004-06-12 23:34:04 +02:00
okchange:
2004-11-30 20:30:30 +01:00
ret
changing db 'Changement de repertoire vers %0\l' , 0
2004-11-29 23:41:00 +01:00
errorchanging db '\c04Impossible d' 'atteindre ce dossier' , 0
2004-11-30 20:30:30 +01:00
code_kill:
mov cx , 0
call gettypeditem0
push di
push offset killing
call [ print ]
mov si , di
mov ah , 5
int 49h
jc nochanged
mov ah , 1
int 49h
jnc okchanged
nochanged:
push offset errorkilling
call [ print ]
okchanged:
ret
killing db 'Fermeture du processus %0\l' , 0
errorkilling db '\c04Impossible de fermer ce processus' , 0
2004-06-12 23:34:04 +02:00
code_refresh:
2004-11-30 20:30:30 +01:00
mov ah , 3
int 48h
jnc okrefresh
push offset errorrefreshing
call [ print ]
ret
2004-06-12 23:34:04 +02:00
okrefresh:
2004-11-30 20:30:30 +01:00
mov ah , 12
int 48h
push edx
mov ah , 11
mov di , offset nomdisque
int 48h
push di
push offset present
call [ print ]
ret
2004-11-29 23:41:00 +01:00
errorrefreshing db '\c04Impossible de lire le support' , 0
2004-11-30 20:30:30 +01:00
extcom db '.CE' , 0
2004-06-12 23:34:04 +02:00
2004-11-30 20:30:30 +01:00
code_mem:
push offset msg
call [ print ]
xor ebx , ebx
xor cx , cx
2004-11-10 12:54:51 +01:00
listmcb:
2004-11-30 20:30:30 +01:00
mov ah , 4
int 49h
jc fino
inc cx
2004-11-29 23:41:00 +01:00
;placement m<> moire
2004-11-30 20:30:30 +01:00
mov dx , gs
inc dx
inc dx
push edx
2004-11-29 23:41:00 +01:00
;parent
2004-11-30 20:30:30 +01:00
cmp gs : [ mb.reference ], 0
jne next
push cs
push offset none
add bx , gs :[ mb.sizes ]
jmp suitemn
2004-11-29 23:41:00 +01:00
next:
2004-11-30 20:30:30 +01:00
mov dx , gs : [ mb.reference ]
dec dx
dec dx
push dx
push offset mb.names
2004-11-29 23:41:00 +01:00
suitemn:
;Resident
2004-11-30 20:30:30 +01:00
cmp gs : [ mb.isresident ], true
jne notresident
push offset resident
jmp suitelistmcb
2004-11-10 12:54:51 +01:00
notresident:
2004-11-30 20:30:30 +01:00
push offset nonresident
2004-11-10 12:54:51 +01:00
suitelistmcb:
2004-11-29 23:41:00 +01:00
;taille memoire
2004-11-30 20:30:30 +01:00
xor edx , edx
mov dx , gs : [ mb.sizes ]
shl edx , 4
push 6
push edx
2004-11-29 23:41:00 +01:00
;nom
2004-11-30 20:30:30 +01:00
push gs
push offset mb.names
push offset line2
call [ print ]
jmp listmcb
2004-11-10 12:54:51 +01:00
fino:
2004-11-30 20:30:30 +01:00
shl ebx , 4
push ebx
push offset fin
call [ print ]
ret
resident db "oui" , 0
nonresident db "non" , 0
line2 db "%0P\h15%w\h24%0\h30%0P\h46%hW\l" , 0
fin db "\l\l\c02%u octets de memoire disponible\l" , 0
msg db "Plan de la memoire\l\lNom Taille Res Parent Mem\l" , 0
none db "." , 0
2004-11-10 12:54:51 +01:00
2004-11-11 18:03:41 +01:00
;converti le jeux scancode/ascii en fr ax->ax
convertfr:
2004-11-30 20:30:30 +01:00
push dx si
mov si , offset fr
2004-11-11 18:03:41 +01:00
searchtouch:
2004-11-30 20:30:30 +01:00
mov dx , cs : [ si ]
cmp dx , 0
je endofconv
add si , 4
cmp dx , ax
jne searchtouch
mov ax , cs : [ si - 2 ]
2004-11-11 18:03:41 +01:00
endofconv:
2004-11-30 20:30:30 +01:00
pop dx si
ret
2004-06-12 23:34:04 +02:00
2004-11-30 20:30:30 +01:00
fr: db '1' , 02 , '&' , 02
db '!' , 02 , '1' , 02
db '2' , 03 , '<27> ' , 03
db '@' , 03 , '2' , 03
db '3' , 04 , '"' , 04
db '#' , 04 , '3' , 04
db '4' , 05 , 39 , 05
db '$' , 05 , '4' , 05
db '5' , 06 , '(' , 06
db '%' , 06 , '5' , 06
db '6' , 07 , '-' , 07
db '^' , 07 , '6' , 07
db '7' , 08 , '<27> ' , 08
db '&' , 08 , '7' , 08
db '8' , 09 , '_' , 09
db '*' , 09 , '8' , 09
db '9' , 10 , '<27> ' , 10
db '(' , 10 , '9' , 10
db '0' , 11 , '<27> ' , 11
db ')' , 11 , '0' , 11
db '-' , 12 , ')' , 12
db '_' , 12 , '<27> ' , 12
db 'Q' , 16 , 'A' , 16
db 'q' , 16 , 'a' , 16
db 'W' , 17 , 'Z' , 17
db 'w' , 17 , 'z' , 17
db '{' , 26 , '<27> ' , 26
db '[' , 26 , '<27> ' , 26
db ']' , 27 , '$' , 27
db '}' , 27 , '<27> ' , 27
db 'A' , 30 , 'Q' , 30
db 'a' , 30 , 'q' , 30
db ':' , 39 , 'M' , 39
db ';' , 39 , 'm' , 39
db 39 , 40 , '<27> ' , 40
db '"' , 40 , '%' , 40
db 00 , 40 , '%' , 40
db '\', 43, ' * ' , 43
db '|' , 43 , '<27> ' , 43
db 'Z' , 44 , 'W' , 44
db 'z' , 44 , 'w' , 44
db 'm' , 50 , ',' , 50
db 'M' , 50 , '?' , 50
db ',' , 51 , ';' , 51
db '<' , 51 , '.' , 51
db '.' , 52 , ':' , 52
db '>' , 52 , '/' , 52
db '?' , 53 , '<27> ' , 53
db '/' , 53 , '!' , 53
db '\', 86, ' < ' , 86
db '|' , 86 , '>' , 86
db 00 , 79h , '~' , 03
db 00 , 7ah , '#' , 04
db 00 , 7bh , '{' , 05
db 00 , 7ch , '[' , 06
db 00 , 7dh , '|' , 07
db 00 , 7eh , '`' , 08
db 00 , 7fh , '\' , 09
db 00 , 80h , '^' , 10
db 00 , 81h , '@' , 11
db 00 , 82h , ']' , 12
db 00 , 83h , '}' , 13
db 00 , 00 , 00 , 00
commands dw str_exit , code_exit , syn_exit , help_exit
dw str_version , code_version , syn_version , help_version
dw str_cls , code_cls , syn_cls , help_cls
dw str_reboot , code_reboot , syn_reboot , help_reboot
dw str_command , code_command , syn_command , help_command
dw str_mode , code_mode , syn_mode , help_mode
dw str_dir , code_dir , syn_dir , help_dir
dw str_refresh , code_refresh , syn_refresh , help_refresh
dw str_cd , code_cd , syn_cd , help_cd
dw str_mem , code_mem , syn_mem , help_mem
dw str_kill , code_kill , syn_kill , help_kill
dw 0
str_exit db 'QUIT' , 0
str_version db 'VERS' , 0
str_cls db 'CLEAR' , 0
str_reboot db 'REBOOT' , 0
str_command db 'CMDS' , 0
str_mode db 'MODE' , 0
str_dir db 'DIR' , 0
str_refresh db 'DISK' , 0
str_cd db 'CD' , 0
str_mem db 'MEM' , 0
str_kill db 'KILL' , 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
syn_dir db 0
syn_refresh db 0
syn_cd db '@' , 0
syn_mem db 0
syn_kill db '@' , 0
help_exit db 'Permet de quitter l' 'interpreteur' , 0
help_version db 'Affiche la version de COS' , 0
help_cls db 'Efface l' 'ecran' , 0
help_reboot db 'Redemarre l' 'ordinateur' , 0
help_command db 'Affiche le detail des commandes' , 0
help_mode db 'Modifie le mode video en cours' , 0
help_dir db 'Affiche le contenu du repertoire courant' , 0
help_refresh db 'Lit le support disquette insere' , 0
help_cd db 'Change le repertoire courant' , 0
help_mem db 'Affiche le plan de la memoire' , 0
help_kill db 'Termine le processus cible' , 0
derror db '\c04Erreur de Syntaxe !' , 0
error_syntax db '\c04La commande ou l' 'executable n' 'existe pas ! F1 pour ' , 0
prompt db '\c07>' , 0
msginit db '\m02\e\c07\l\lInterpreteur de commande COS V1.9\lSous license \c05GPL\c07 - Ecrit par \c04MrNop\l\c07Utilisez la commande CMDS pour connaitres les commandes disponibles\l' , 0
include str0.asm
dir db 32 dup ( 0 )
buffer db 128 dup ( 0 )
buffer2 db 128 dup ( 0 )
2004-06-12 23:34:04 +02:00
2004-11-29 23:41:00 +01:00
imports:
2004-11-30 20:30:30 +01:00
db "VIDEO.LIB::print" , 0
print dd 0
db "VIDEO.LIB::showhex" , 0
showhex dd 0
db "VIDEO.LIB::showchar" , 0
showchar dd 0
dw 0
end start