home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
ports
/
prtscr.asm
< prev
next >
Wrap
Assembly Source File
|
1994-10-30
|
4KB
|
126 lines
.286
code segment
assume cs:code,ds:code
org 100h
start:
jmp main ;saut dans le programme principal
;Procédure residente :
print proc near ;dirige chaine ASCIIZ à la Pos ds:si sur LPT1
print_loop:
xor ah,ah ;fonction 0
lodsb ;chercher signaux
or al,al ;prêt, si 0 comme terminaison
je fini
xor dx,dx ;sortie sur LPT1
int 17h
jmp print_loop ;signal suivant
fini:
ret
print endp
handler5 proc far ;Handler pour interruption 5
push es ;sauver tous les registres utilisés
push ds
pusha
mov ax,cs ;charger es avec segment PSP
mov es,ax
mov ds,ax ;la même chose avec segment de données dans segment code
mov di,80h ;bloc de paramètres comme tampon
mov ah,1bh ;Fonction 1bh
xor bx,bx
int 10h ;pour savoir Video-Status
cli
mov al,byte ptr cs:[80h+22h] ;chercher nombre de lignes sur écran
cmp al,25d
jbe normal ;s'il y a 25 lignes/écran, Routine normale
lea si,Petit_caract ;basculer sur police de 6 points
call print ;Code d'impression
jmp edition
normal:
lea si,Grand_caract ;basculer sur police de 12 points
call print ;Code d'impression
edition:
sti
pushf
call dword ptr [oldint5] ;activer sortie standard
popa
pop ds
pop es
iret
handler5 endp
oldint5: dd 0 ;vecteur original
Petit_caract: db 1bh,'(s6V' ;hauteur 6 points
db 1bh,'&l12D' ;12 lignes/Inch
db 1bh,'(s12H' ;12 signes/Inch
db 0
Grand_caract: db 1bh,'(s12V' ;hauteur 12 points
db 1bh,'&l6D' ;6 signes/Inch
db 1bh,'(s10H' ;10 signes/Inch
db 0
dernier:
main proc near
mov ax,3505h ;lire interruption 5
int 21h
mov di,bx ;es:di pointe sur le Handler présent
mov si,bx ;ds:si pointe sur le Handler de ce programme
mov cx,4 ;comparer 8 bytes
repe cmpsw
jcxz desinstaller ;toute de suite ?, alors désinstaller
installer:
mov word ptr oldint5,bx ;sauver vecteur ancien
mov word ptr oldint5 + 2,es
mov ax,2505h ;dévier l'interruption n° 5
lea dx,handler5 ;charger Offset, le segment est déjà dans la ds
int 21h
mov ax,ds:[2ch] ;charger segment d'environment
mov es,ax ;après es
mov ah,49h ;et libérer
int 21h
mov ah,9 ;émission d'un message d'installation
lea dx,installe
int 21h
lea dx,dernier ;jusqu'au moment label reste le dernier résident
inc dx
int 27h
desinstaller:
mov ah,9 ;émission d'un message de désinstallation
lea dx,desinstalle
int 21h
push ds
lds dx,dword ptr es:[oldint5] ;ds:dx charger avec le vieux vecteur
mov ax,2505h ;positionner le vieux vecteur
int 21h
pop ds
mov ah,49h ;libérer mémoire résidente
int 21h
int 20h ;et terminer
main endp
Installe: db 'Une nouvelle fonction impression-écran a été installé',0dh,0ah,'$'
Desinstalle: db 'Impression-écran a été désinstallé',0dh,0ah,'$'
code ends
end start