home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / SCRNBK.D < prev    next >
Text File  |  1988-07-11  |  3KB  |  137 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;-----------------------------------------
  4. ; S C R N B K  --  BACKUP THE CURRENT STATE OF THE VIDEO DISPLAY,
  5. ;           ASSUMING THAT IT IS IN TEXT MODE.
  6. ;
  7. ; Entry conditions:
  8. ;    AX points to the start of the video buffer
  9. ; Exit conditions:
  10. ;    DX Holds the old row/column position of the cursor
  11. ;    CX holds the cursor size
  12. ;    Assume AX,BX,CX,DX registers destroyed
  13. ;
  14. ;
  15. ; S C R N R S  --  RESTORES THE VIDEO TO THE PREVIOUS STATE.
  16. ;
  17. ; Entry conditions:
  18. ;    None
  19. ; Exit conditions:
  20. ;    Assume AX,BX,CX,DX registers destroyed
  21. ;
  22. SUBPGM    SCRNBK
  23. ;
  24. ;-------------------------===========================--------------------------
  25. ;-------------------------====< BEGIN EXECUTION >====--------------------------
  26. ;-------------------------===========================--------------------------
  27. ;
  28. BEGIN    SCRNBK
  29.     PUSH    DI            ; SAVE THE INDEXES
  30.     PUSH    ES
  31.     PUSH    DS
  32. ;
  33. ; MOVE THE BUFFER POINTER INTO DI
  34. ;
  35.     MOV    DI,AX            ; DI WILL POINT TO THE TARGET BUFFER
  36. ;
  37. ; GET & SAVE THE CURRENT VIDEO STATE
  38. ;
  39.     MOV    AH,0FH            ; GET THE CURRENT VIDEO DATA
  40.     INT    10H
  41.     MOV    [VIDPAGE],BH        ; SAVE THE PAGE
  42.     MOV    AH,03H
  43.     INT    10H
  44. ;
  45.     PUSH    DX            ; SAVE THE CURSOR & SCAN LINES
  46.     PUSH    CX
  47. ;
  48. ; SETUP THE SEGMENTS
  49. ;
  50.     PUSH    DS            ; PLACE DS IN ES
  51.     POP    ES
  52.     MOV    AX,0B000H
  53.     TEST    [CRTFLAG],01        ; MONO BOARD?
  54.     JE    BKSC_05            ; YES, CONTINUE ON...
  55.     MOV    AX,0B800H        ; NO, CGA
  56. ;
  57. BKSC_05:
  58.     MOV    DS,AX
  59. ;
  60. ; CALCUATE THE STARTING PAGE NUMBER
  61. ;
  62.     SUB    BL,BL
  63.     XCHG    BH,BL            ; PLACE THE PAGE # IN BL
  64.     MOV    AX,2048*2
  65.     MOV    CX,AX            ; MOVE A COPY FOR THE BLOCK MOVE
  66.     MUL    BX
  67.     MOV    SI,AX            ; SI POINTS TO START OF VID RAM
  68.     CLD
  69.     REP    MOVSB            ; BACK IT UP!!!
  70. ;
  71.     POP    CX            ; RETURN WITH THE X,Y & CURSOR SIZE
  72.     POP    DX
  73. ;
  74.     POP    DS
  75.     POP    ES
  76.     POP    DI
  77.     RETURN
  78. ;
  79. ;
  80. ;---------------------------------------
  81. ; S C R N R S  --  RESTORE THE SCREEN
  82. ;
  83. ; Entry conditions:
  84. ;    AX points to the screen backup buffer
  85. ;    DX holds the cursor X,Y coordinates
  86. ;    CX holds the cursor shape
  87. ; Exit conditions:
  88. ;    Assume all working registers modified
  89. ;
  90.     PUBLIC    SCRNRS
  91. SCRNRS    PROC
  92.     PUSH    ES            ; DO NOT DISTURB
  93.     PUSH    DX            ; SAVE THE ROW/COL & CURSOR SIZE
  94.     PUSH    CX
  95.     MOV    SI,AX            ; SI POINTS TO THE SCREEN BUFFER
  96. ;
  97. ; GET THE PROPER VIDEO SEGMENT
  98. ;
  99.     MOV    AX,0B000H
  100.     TEST    [CRTFLAG],01        ; MONO BOARD?
  101.     JE    RSSC_05            ; YES, CONTINUE ON...
  102.     MOV    AX,0B800H        ; NO, CGA
  103. ;
  104. RSSC_05:
  105.     MOV    ES,AX
  106. ;
  107. ; CALCULATE THE STARTING PAGE NUMBER
  108. ;
  109.     SUB    BH,BH
  110.     MOV    BL,[VIDPAGE]        ; BX = VIDEO PAGE
  111.     MOV    AX,2048*2
  112.     MOV    CX,AX            ; CX HOLDS THE SIZE TO BE MOVED
  113.     MUL    BX
  114.     MOV    DI,AX            ; DI POINTS TO START OF VID RAM
  115. ;
  116. ; MOVE IT...
  117. ;
  118.     CLD
  119.     REP    MOVSB            ; BACK IT UP!!!
  120. ;
  121. ; RESTORE THE PREVIOUS VIDEO STATE
  122. ;
  123.     POP    CX            ; GET THE CURSOR SIZE
  124.     POP    DX            ; GET THE ROW/COL
  125. ;
  126.     MOV    BH,[VIDPAGE]
  127.     MOV    AH,02H            ; SET THE CURSOR POSITION
  128.     INT    10H
  129. ;
  130.     POP    ES
  131.     RETURN
  132.  
  133. SCRNRS    ENDP
  134. ;
  135. ENDPGM    SCRNBK
  136. ;
  137.