home *** CD-ROM | disk | FTP | other *** search
-
-
- DECLARE SUB FASTPRT (TOP$, ROW%, COL%, ATTR%)
- DEFINT A-Z
-
- DEFSNG A-Z
- '************************** WINDOW SUBROUTINE *************************
- ' Modified 3/23/87 to eliminate shadow routine and parameter...WAD.
- SUB MAKEWIND (ULR%, ULC%, LRR%, LRC%, FRAME%, FORE%, BACK%, GROW%, LABEL$) STATIC
- DEFINT A-Z
- IF GROW = 0 THEN GOSUB STD: GOTO DONE
- '-------------------- Growing Window Module ---------------------------
- X1 = ULC + INT((LRC - ULC) / 2)
- X2 = LRC - INT((LRC - ULC) / 2)
- Y1 = ULR + INT((LRR - ULR) / 2)
- Y2 = LRR - INT((LRR - ULR) / 2)
- NXT: IF X1 > ULC THEN X1 = X1 - 3: IF X1 < ULC THEN X1 = ULC
- IF X2 < LRC THEN X2 = X2 + 3: IF X2 > LRC THEN X2 = LRC
- IF Y1 > ULR THEN Y1 = Y1 - 1
- IF Y2 < LRR THEN Y2 = Y2 + 1
- GOSUB SETUP
- IF (X1 = ULC) AND (X2 = LRC) AND (Y1 = ULR) AND Y2 = (LRR) THEN GOTO DONE ELSE GOTO NXT
- DONE: GROW = 0
- EXIT SUB
- '------------------- Regular Window Module ----------------------------
- STD: X1 = ULC: X2 = LRC: Y1 = ULR: Y2 = LRR
- SETUP: ATTR = (BACK AND 7) * 16 + FORE
- IF FRAME = 0 THEN GOSUB NOFRAME ELSE ON FRAME GOSUB H1V1, H2V2, H1V2, H2V1
- IF LABEL$ = "" OR LEN(LABEL$) > (LEN(TOP$) - 5) THEN GOTO SHADE
- MID$(TOP$, 2) = "[" + LABEL$ + "]"
- SHADE: '---------------------------- Shadow Module --(Deleted)----------------
-
- MAKE: '------------------------ Produce Window Module -----------------------
- ROW = Y1 - 1: COL = X1 - 1
- CALL FASTPRT(TOP$, ROW, COL, ATTR)
- FOR I = Y1 TO Y2
- ROW = I: COL = X1 - 1
- CALL FASTPRT(MIDL$, ROW, COL, ATTR)
- NEXT I
- ROW = Y2 + 1: COL = X1 - 1
- CALL FASTPRT(BOTTM$, ROW, COL, ATTR)
- RETURN
- H1V1: '--------------- Single Line Frame ---------------------
- TOP$ = CHR$(218) + STRING$((X2 - X1) + 1, 196) + CHR$(191)
- MIDL$ = CHR$(179) + STRING$((X2 - X1) + 1, 32) + CHR$(179)
- BOTTM$ = CHR$(192) + STRING$((X2 - X1) + 1, 196) + CHR$(217)
- RETURN
- H2V2: '--------------- Double Line Frame ----------------------
- TOP$ = CHR$(201) + STRING$((X2 - X1) + 1, 205) + CHR$(187)
- MIDL$ = CHR$(186) + STRING$((X2 - X1) + 1, 32) + CHR$(186)
- BOTTM$ = CHR$(200) + STRING$((X2 - X1) + 1, 205) + CHR$(188)
- RETURN
- H1V2: '---- Double Vertical, Single Horizontal Line Frame ----
- TOP$ = CHR$(214) + STRING$((X2 - X1) + 1, 196) + CHR$(183)
- MIDL$ = CHR$(186) + STRING$((X2 - X1) + 1, 32) + CHR$(186)
- BOTTM$ = CHR$(211) + STRING$((X2 - X1) + 1, 196) + CHR$(189)
- RETURN
- H2V1: '---- Double Horizontal, Single Vertical Line Frame ----
- TOP$ = CHR$(213) + STRING$((X2 - X1) + 1, 205) + CHR$(184)
- MIDL$ = CHR$(179) + STRING$((X2 - X1) + 1, 32) + CHR$(179)
- BOTTM$ = CHR$(212) + STRING$((X2 - X1) + 1, 205) + CHR$(190)
- RETURN
-
- NOFRAME: '---------------- No Frame ----------------------------
-
- TOP$ = SPACE$((X2 - X1) + 3)
- MIDL$ = TOP$
- BOTTM$ = TOP$
- RETURN
-
- END SUB
-
- SUB SCROLL (ULR%, ULC%, LRR%, LRC%, LINES%, DIR%, NEWMSG$) STATIC
-
- 'Modified 3/23/87 By WAD to prevent altering the window coordinates
- 'passed to scroll. ULR,ULC,LRR & LRC are now not changed!
-
- 'Adjust for 0 reference of parameters for BIOS call
- SULR% = ULR% - 1
- SULC% = ULC% - 1
- SLRR% = LRR% - 1
- SLRC% = LRC% - 1
-
- DIM INARRY%(7), OUTARRY%(7)
-
- 'Prepare INARRY% variables with data for SCROLL BIOS CALL
-
- 'Determine if SCROLL UP (6) or SCROLL DOWN (7) Service
-
- IF DIR% = 1 THEN INARRY%(0) = 1536 ELSE IF DIR% = -1 THEN INARRY%(0) = 1792 ELSE EXIT SUB
- 'Service 6 = 6 shifted 8 = 1536, Service 7 = 7 shifted 4 = 1792
- 'Service goes in AH register
-
- INARRY%(0) = INARRY%(0) + LINES%
- 'Lines goes in AL register
-
- INARRY%(1) = SCREEN(SULR%, SULC%, 1) * 256
- 'BH = Color Attribute of window
-
- INARRY%(2) = (SULR% * 256) + SULC%
- 'CH=SULR, CL=SULC
-
- INARRY%(3) = (SLRR% * 256) + SLRC%
- 'DH=LRR, DL=LRC
-
- INARRY%(4) = 0: INARRY%(5) = 0: INARRY%(6) = 0: INARRY%(7) = 0
- 'All other registers empty
-
- 'Perform Scroll
- INTRRPT% = 16: 'Video BIOS Interrupt
-
- CALL INT86OLD(INTRRPT%, INARRY%(), OUTARRY%())
-
- 'Determine if NEWMSG$ goes on top or bottom line
-
- IF DIR% = 1 THEN ROW% = SLRR% + 1 ELSE IF DIR% = -1 THEN ROW% = SULR% + 1
- COL% = SULC% + 1
- ATTR% = SCREEN(SULR%, SULC%, 1)
-
- CALL FASTPRT(NEWMSG$, ROW%, COL%, ATTR%)
-
- END SUB
-
-