home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Black Box 4
/
BlackBox.cdr
/
progbas
/
baswind4.arj
/
BASWIND4.BAS
< prev
next >
Wrap
BASIC Source File
|
1987-12-26
|
5KB
|
124 lines
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