home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / ports / prtscr.asm < prev    next >
Assembly Source File  |  1994-10-30  |  4KB  |  126 lines

  1. .286
  2. code segment
  3. assume cs:code,ds:code
  4. org 100h
  5.  
  6. start:
  7.   jmp main                      ;saut dans le programme principal
  8.  
  9. ;Procédure residente :
  10.  
  11. print proc near                 ;dirige chaine ASCIIZ à la Pos ds:si sur LPT1
  12. print_loop:
  13.   xor ah,ah                     ;fonction 0
  14.   lodsb                         ;chercher signaux
  15.   or al,al                      ;prêt, si 0 comme terminaison
  16.   je fini
  17.   xor dx,dx                     ;sortie sur LPT1 
  18.   int 17h
  19.   jmp print_loop                ;signal suivant
  20. fini:
  21.   ret
  22. print endp
  23.  
  24. handler5 proc far               ;Handler pour interruption 5
  25.   push es                       ;sauver tous les registres utilisés
  26.   push ds
  27.   pusha
  28.  
  29.   mov ax,cs                     ;charger es avec segment PSP
  30.   mov es,ax
  31.   mov ds,ax                     ;la même chose avec segment de données dans segment code
  32.  
  33.   mov di,80h                    ;bloc de paramètres comme tampon
  34.   mov ah,1bh                    ;Fonction 1bh
  35.   xor bx,bx
  36.   int 10h                       ;pour savoir Video-Status
  37.  
  38.   cli
  39.  
  40.   mov al,byte ptr cs:[80h+22h]  ;chercher nombre de lignes sur écran
  41.   cmp al,25d
  42.   jbe normal                    ;s'il y a 25 lignes/écran, Routine normale
  43.  
  44.   lea si,Petit_caract          ;basculer sur police de 6 points
  45.   call print                    ;Code d'impression
  46.   jmp edition
  47.  
  48. normal:
  49.   lea si,Grand_caract           ;basculer sur police de 12 points
  50.   call print                    ;Code d'impression
  51.  
  52. edition:
  53.   sti
  54.   pushf
  55.   call dword ptr [oldint5]      ;activer sortie standard
  56.  
  57.   popa
  58.   pop ds
  59.   pop es
  60.   iret
  61. handler5 endp
  62.  
  63. oldint5: dd 0                   ;vecteur original
  64. Petit_caract:  db 1bh,'(s6V'   ;hauteur 6 points
  65.                 db 1bh,'&l12D'  ;12 lignes/Inch
  66.                 db 1bh,'(s12H'  ;12 signes/Inch
  67.                 db 0
  68. Grand_caract:    db 1bh,'(s12V' ;hauteur 12 points
  69.                 db 1bh,'&l6D'   ;6 signes/Inch
  70.                 db 1bh,'(s10H'  ;10 signes/Inch
  71.                 db 0
  72.  
  73. dernier:
  74.  
  75. main proc near
  76.   mov ax,3505h                  ;lire interruption 5
  77.   int 21h
  78.   mov di,bx                     ;es:di pointe sur le Handler présent
  79.   mov si,bx                     ;ds:si pointe sur le Handler de ce programme
  80.   mov cx,4                      ;comparer 8 bytes
  81.   repe cmpsw
  82.   jcxz desinstaller           ;toute de suite ?, alors désinstaller
  83.  
  84. installer:
  85.   mov word ptr oldint5,bx       ;sauver vecteur ancien
  86.   mov word ptr oldint5 + 2,es
  87.  
  88.   mov ax,2505h                  ;dévier l'interruption n° 5 
  89.   lea dx,handler5               ;charger Offset, le segment est déjà dans la ds
  90.   int 21h
  91.  
  92.   mov ax,ds:[2ch]               ;charger segment d'environment
  93.   mov es,ax                     ;après es
  94.   mov ah,49h                    ;et libérer
  95.   int 21h
  96.  
  97.   mov ah,9                      ;émission d'un message d'installation
  98.   lea dx,installe
  99.   int 21h
  100.   lea dx,dernier                 ;jusqu'au moment label reste le dernier résident
  101.   inc dx
  102.   int 27h
  103.  
  104. desinstaller:
  105.   mov ah,9                      ;émission d'un message de désinstallation
  106.   lea dx,desinstalle
  107.   int 21h
  108.  
  109.   push ds
  110.   lds dx,dword ptr es:[oldint5] ;ds:dx charger avec le vieux vecteur
  111.   mov ax,2505h                  ;positionner le vieux vecteur
  112.   int 21h
  113.   pop ds
  114.  
  115.   mov ah,49h                    ;libérer mémoire résidente
  116.   int 21h
  117.   int 20h                       ;et terminer
  118. main endp
  119.  
  120.  
  121. Installe:    db 'Une nouvelle fonction impression-écran a été installé',0dh,0ah,'$'
  122. Desinstalle:  db 'Impression-écran a été désinstallé',0dh,0ah,'$'
  123.  
  124. code ends
  125. end start
  126.