'===========================================================================
' Subject: CAPTURE/RESTORE SCREEN ROUTINE     Date: 06-22-98 (22:10)       
'  Author: Douglas Bunger                     Code: QB, QBasic, PDS        
'  Origin: www.public.usit.net/dbunger/..   Packet: TEXT.ABC
'===========================================================================
DEFINT A-Z
'==================================================
SUB DoScreen (w$, x1, y1, x2, y2) STATIC
DIM f(1000), b(1000), a$(1000)
'==================================================
' w$= "get" to capture a window
'     "rev" to reverse-video a windows text
'     "put" to restore the stored window
'
a = 0
IF LCASE$(w$) = "get" THEN
    IF (x2 - x1) * (y2 - y1) > 920 THEN BEEP: EXIT SUB
    y = (y2 - y1) \ 2
    FOR r = y1 TO y1 + y
        FOR c = x1 TO x2
            a = a + 1: a$(a) = CHR$(SCREEN(r, c, 0))
            z = SCREEN(r, c, 1): b(a) = z \ 16: f(a) = z - b(a) * 16
            d = y2 - (r - y1)
            a = a + 1: a$(a) = CHR$(SCREEN(d, c, 0))
            z = SCREEN(d, c, 1): b(a) = z \ 16: f(a) = z - b(a) * 16
        NEXT c
    NEXT r
END IF

IF LCASE$(w$) = "put" THEN
    FOR r = y1 TO y1 + y
        FOR c = x1 TO x2
            a = a + 1: COLOR f(a), b(a): LOCATE r, c: PRINT a$(a);
            d = y2 - (r - y1)
            a = a + 1: COLOR f(a), b(a): LOCATE d, c: PRINT a$(a);
        NEXT c
    NEXT r
END IF

IF LCASE$(w$) = "rev" THEN
    FOR r = y1 TO y1 + y
        FOR c = x1 TO x2
            a = a + 1: COLOR b(a), f(a): LOCATE r, c: PRINT a$(a);
            d = y2 - (r - y1)
            a = a + 1: COLOR b(a), f(a): LOCATE d, c: PRINT a$(a);
        NEXT c
    NEXT r
END IF

END SUB
