home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG090.ASM < prev    next >
Assembly Source File  |  1988-04-10  |  3KB  |  86 lines

  1.  
  2. ;************************************************************************
  3. ; Terminate and stay resident program to intercept INT 5, caused by     *
  4. ; <Shift>+<PrtSc>, and to save graphics screen into a file.             *
  5. ;************************************************************************
  6.  
  7.  
  8. ;_TEXT     SEGMENT BYTE PUBLIC 'CODE'
  9. ;          ASSUME  CS:_TEXT,DS:_TEXT
  10. ;          ASSUME  ES:_TEXT,SS:_TEXT
  11.  
  12. ;         ORG   100H
  13.           JMP   Init_Dump
  14.  
  15.         ;*****************************************************
  16.         ; This is where we get when the <Shift>+<PrtSc> is detected
  17.         ;*****************************************************
  18.  
  19. Print_Int       PROC FAR
  20.         STI
  21.         PUSH    AX                      ;Save registers
  22.         PUSH    BX
  23.         PUSH    CX
  24.         PUSH    DX
  25.  
  26.         CALL    _Screen_Dump            ;Call routine to save video buffer
  27.  
  28.         POP     DX                      ;Restore registers
  29.         POP     CX
  30.         POP     BX
  31.         POP     AX
  32.         IRET
  33. Print_Int       ENDP
  34.  
  35.         ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  36.         ;INSERT THE SCREEN_DUMP ROUTINE HERE
  37.         ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  38. Last_Byte:
  39.         ;***************************************************************
  40.         ; THIS IS THE INITIALIZATION DONE ONLY WHEN LOADED INTO MEMORY
  41.         ;***************************************************************
  42.  
  43. Message   DB    "Screen Dump Utility Loaded",0Ah,0Dh,0
  44.  
  45. Init_Dump:
  46.  
  47.         ;--- Print a message telling user that we are installed
  48.  
  49.         PUSH    CS                      ;Fetch pointer to sign on message
  50.         POP     DS
  51.         LEA     SI,Message
  52.         MOV     BH,0                    ;Use BIOS to print the message
  53.         MOV     BL,7
  54.         LODSB                           ;Fetch first character of message
  55. Write:  MOV     AH,0EH                  ;Output the next character
  56.         INT     10H                     ;using BIOS function E
  57.         LODSB                           ;Fetch next character of the message
  58.         CMP     AL,0                    ;Is it the terminating zero?
  59.         JNZ     WRITE                   ;...No, go output next one
  60.  
  61.         ;--- Use DOS services to revector Interrupt 5
  62.  
  63.         MOV     BX,CS                   ;Use service 25 to set vector 5
  64.         MOV     DS,BX
  65.         MOV     DX,OFFSET Print_Int
  66.         MOV     AL,05H
  67.         MOV     AH,25H
  68.         INT     21H
  69.  
  70.         ;Terminate but stay resident
  71.  
  72.         MOV     BX,CS                   ;Use DOS service 31 to leave us residen
  73.         MOV     DS,BX
  74.         MOV     DX,OFFSET Last_Byte
  75.         SHR     DX,1
  76.         SHR     DX,1
  77.         SHR     DX,1
  78.         SHR     DX,1
  79.         INC     DX
  80.         MOV     AX,3100H
  81.         INT     21H
  82.  
  83.         RET
  84. ;_TEXT   ENDS
  85. ;       END
  86.