home *** CD-ROM | disk | FTP | other *** search
- DEFINT A-Z ' THIS AFFECTS ENTIRE PROGRAM
-
- MW = 30
- SCRNARRAY = 8000
-
- DIM WROW(MW),WROWS(MW),WCOL(MW),WCOLS(MW),WATTR(MW)
- DIM WSHDW(MW),WLSTX(MW),WLSTY(MW),SCRN(SCRNARRAY),WPTR(MW)
-
- SUB MAKEWINDOW(ROW,COL,ROWS,COLS,ATTR,BATTR,BRDRSEL,SHADOW,ZOOM) STATIC
- SHARED WROW(),WROWS(),WCOL(),WCOLS(),WATTR(),WBATTR(),WBRDR(),WSHDW()
- SHARED WLSTX(),WLSTY(),SCRN(),WPTR(),IDX
- LOCAL R1,R2,C1,C2,COLRATIO,WSIZE
- SELECT CASE SHADOW
- REM LEFT
- CASE = 1,3
- C1=COL-2:C2=COLS+2:R2=ROWS+1
- REM RIGHT
- CASE = 2,4
- C1=COL:C2=COLS+2:R2=ROWS+1
- CASE ELSE
- C1=COL:C2=COLS:R2=ROWS
- END SELECT
- WSIZE=(R2*C2)*2
- WLSTX(IDX)=CSRLIN:WLSTY(IDX)=POS
- IDX=IDX+1
- WPTR(IDX+1)=WPTR(IDX)+WSIZE+1:WROW(IDX)=ROW:WCOL(IDX)=COL
- WROWS(IDX)=ROWS:WCOLS(IDX)=COLS:WATTR(IDX)=ATTR:WSHDW(IDX)=SHADOW
- CALL TBWSAVE(ROW,C1,R2,C2,SCRN(WPTR(IDX)))
- IF ZOOM=1 THEN
- R1=ROW+(ROWS\2):R2=ROW+ROWS-(ROWS\2):C1=COL+(COLS\2)
- C2=COL+COLS-(COLS\2):COLRATIO=(COLS\ROWS)+1
- IF COLRATIO>4 THEN COLRATIO=4
- DO
- IF R1>ROW THEN R1=R1-1
- IF R2<(ROW+ROWS) THEN R2=R2+1
- IF C1>COL THEN C1=C1-COLRATIO
- IF C1<COL THEN C1=COL
- IF C2<(COL+COLS) THEN C2=C2+COLRATIO
- IF C2>(COL+COLS) THEN C2=COL+COLS
- CALL TBWBOX(R1,C1,R2-R1,C2-C1,ATTR,BATTR,BRDRSEL)
- LOOP UNTIL C1=COL AND C2=COL+COLS AND R1=ROW AND R2=ROW+ROWS
- ELSE
- CALL TBWBOX(ROW,COL,ROWS,COLS,ATTR,BATTR,BRDRSEL)
- END IF
- SELECT CASE SHADOW
- REM LEFT
- CASE = 1
- CALL TBWFILL(ROW+1,COL-2,ROWS-1,2,ASC(" "),0)
- CALL TBWFILL(ROW+ROWS,COL-2,1,COLS,ASC(" "),0)
- REM RIGHT
- CASE = 2
- CALL TBWFILL(ROW+1,COL+COLS,ROWS-1,2,ASC(" "),0)
- CALL TBWFILL(ROW+ROWS,COL+2,1,COLS,ASC(" "),0)
- CASE = 3
- CALL TBWATTR(ROW+1,COL-2,ROWS-1,2,FNATTR(8,0))
- CALL TBWATTR(ROW+ROWS,COL-2,1,COLS,FNATTR(8,0))
- REM RIGHT
- CASE = 4
- CALL TBWATTR(ROW+1,COL+COLS,ROWS-1,2,FNATTR(8,0))
- CALL TBWATTR(ROW+ROWS,COL+2,1,COLS,FNATTR(8,0))
- END SELECT
- END SUB
-
- SUB TITLEWINDOW(DIR,ATTR,TITLE$) STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),IDX
- SELECT CASE DIR
- REM UPPERLEFT
- CASE = 1
- CALL TBWPRINT(WROW(IDX),WCOL(IDX)+2,TITLE$,ATTR)
- REM UPPERCENTER
- CASE = 2
- CALL TBWPRINTC(WROW(IDX),WCOL(IDX),WCOL(IDX)+WCOLS(IDX)-1,TITLE$,ATTR)
- REM UPPERRIGHT
- CASE = 3
- CALL TBWPRINT(WROW(IDX),WCOL(IDX)+WCOLS(IDX)-LEN(TITLE$)-2,TITLE$,ATTR)
- REM LOWERLEFT
- CASE = 4
- CALL TBWPRINT(WROW(IDX)+WROWS(IDX)-1,WCOL(IDX)+2,TITLE$,ATTR)
- REM LOWERCENTER
- CASE = 5
- CALL TBWPRINTC(WROW(IDX)+WROWS(IDX)-1,WCOL(IDX),WCOL(IDX)+WCOLS(IDX)-1,TITLE$,ATTR)
- REM LOWERRIGHT
- CASE = 6
- CALL TBWPRINT(WROW(IDX)+WROWS(IDX)-1,WCOL(IDX)+WCOLS(IDX)-LEN(TITLE$)-2,TITLE$,ATTR)
- END SELECT
- END SUB
-
- SUB REMOVEWINDOW STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),WSHDW(),WLSTX(),WLSTY(),SCRN(),WPTR(),IDX
- IF IDX=0 THEN
- PRINT "IDX = 0"
- ELSE
- SELECT CASE WSHDW(IDX)
- CASE = 1,3
- CALL TBWREST(WROW(IDX),WCOL(IDX)-2,WROWS(IDX)+1,WCOLS(IDX)+2,SCRN(WPTR(IDX)))
- CASE = 2,4
- CALL TBWREST(WROW(IDX),WCOL(IDX),WROWS(IDX)+1,WCOLS(IDX)+2,SCRN(WPTR(IDX)))
- CASE ELSE
- CALL TBWREST(WROW(IDX),WCOL(IDX),WROWS(IDX),WCOLS(IDX),SCRN(WPTR(IDX)))
- END SELECT
- IDX = IDX -1
- LOCATE WLSTX(IDX),WLSTY(IDX)
- END IF
- END SUB
-
- SUB TBWBOX(ROW,COL,ROWS,COLS,ATTR,BATTR,BRDRSEL) STATIC
- IF ROWS>2 AND COLS>2 THEN
- IF BRDRSEL>0 AND BRDRSEL<6 THEN
- ON BRDRSEL GOSUB SINGLE,DOUBLE,MIXED12,MIXED21,DOUBLELEFTARROW
- CALL TBWPRINT(ROW,COL,TL$,BATTR)
- CALL TBWFILL (ROW,COL+1,1,COLS-2,ASC(HL$),BATTR)
- CALL TBWPRINT(ROW,COL+COLS-1,TR$,BATTR)
- CALL TBWFILL (ROW+1,COL,ROWS-2,1,ASC(VL$),BATTR)
- CALL TBWFILL (ROW+1,COL+COLS-1,ROWS-2,1,ASC(VL$),BATTR)
- CALL TBWPRINT(ROW+ROWS-1,COL,BL$,BATTR)
- CALL TBWFILL (ROW+ROWS-1,COL+1,1,COLS-2,ASC(HL$),BATTR)
- CALL TBWPRINT(ROW+ROWS-1,COL+COLS-1,BR$,BATTR)
- CALL TBWFILL (ROW+1,COL+1,ROWS-2,COLS-2,ASC(" "),ATTR)
- ELSE
- CALL TBWFILL (ROW,COL,ROWS,COLS,ASC(" "),ATTR)
- END IF
- END IF
- EXIT SUB
-
- SINGLE:
- TL$=CHR$(218):TR$=CHR$(191)
- BL$=CHR$(192):BR$=CHR$(217)
- HL$=CHR$(196):VL$=CHR$(179)
- RETURN
- DOUBLE:
- TL$=CHR$(201):TR$=CHR$(187)
- BL$=CHR$(200):BR$=CHR$(188)
- HL$=CHR$(205):VL$=CHR$(186)
- RETURN
- MIXED12:
- TL$=CHR$(214):TR$=CHR$(183)
- BL$=CHR$(211):BR$=CHR$(189)
- HL$=CHR$(196):VL$=CHR$(186)
- RETURN
- MIXED21:
- TL$=CHR$(213):TR$=CHR$(184)
- BL$=CHR$(212):BR$=CHR$(190)
- HL$=CHR$(205):VL$=CHR$(179)
- RETURN
- DOUBLELEFTARROW:
- TL$=CHR$( 17):TR$=CHR$(187)
- BL$=CHR$(200):BR$=CHR$(188)
- HL$=CHR$(205):VL$=CHR$(186)
- RETURN
- END SUB
-
- SUB CLEARWINDOW STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),WATTR(),IDX
- CALL TBWFILL (WROW(IDX)+1,WCOL(IDX)+1,WROWS(IDX)-2,WCOLS(IDX)-2,ASC(" "),WATTR(IDX))
- END SUB
-
- SUB PRTWINDOW(ROW,COL,STRDAT$) STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),WATTR(),IDX
- CALL TBWPRINT(WROW(IDX)+ROW,WCOL(IDX)+COL,STRDAT$,WATTR(IDX))
- END SUB
-
- SUB PRTCWINDOW(ROW,STRDAT$) STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),WATTR(),IDX
- CALL TBWPRINTC(WROW(IDX)+ROW,WCOL(IDX),WCOL(IDX)+WCOLS(IDX),STRDAT$,WATTR(IDX))
- END SUB
-
- SUB WINDOWXY(ROW,COL) STATIC
- SHARED WROW(),WCOL(),WROWS(),WCOLS(),WATTR(),IDX
- LOCATE WROW(IDX)+ROW,WCOL(IDX)+COL
- END SUB
-
- SUB TEXTBORDER(ATTR)
- OUT &H03D9,ATTR
- END SUB
-
- SUB MAKEMENU STATIC
- SHARED WROW(),WROWS(),WCOL(),WCOLS(),WATTR(),WSHDW(),SCRN(),WPTR(),IDX
- SHARED ITEM$(),ITEMCOUNT,STARTPOS,CURNTPOS
- LOCAL DONE
- DONE = 0
- FOR MLOOP = 1 TO ITEMCOUNT
- CALL TBWPRINTC(WROW(IDX)+MLOOP,WCOL(IDX),WCOL(IDX)+WCOLS(IDX),ITEM$(MLOOP),WATTR(IDX))
- NEXT
- IF CURNTPOS = 0 THEN IF STARTPOS = 0 THEN CURNTPOS = 1 ELSE CURNTPOS = STARTPOS
- DO
- CALL TBWATTR(WROW(IDX)+CURNTPOS,WCOL(IDX)+1,1,WCOLS(IDX)-2,FNATTR%(0,7))
- WHILE NOT INSTAT
- WEND
- ANS$=INKEY$
- IF LEN(ANS$)=2 THEN ANS$=RIGHT$(ANS$,1)
- CALL TBWATTR(WROW(IDX)+CURNTPOS,WCOL(IDX)+1,1,WCOLS(IDX)-2,WATTR(IDX))
- SELECT CASE ANS$
- CASE CHR$(72),CHR$(75),"-","8","4"
- DECR CURNTPOS
- CASE CHR$(80),CHR$(77),"+","2","6"
- INCR CURNTPOS
- CASE CHR$(13)
- DONE = -1
- CASE CHR$(27)
- CURNTPOS=0
- DONE = -1
- CASE ELSE
- CURNTPOS = CURNTPOS
- END SELECT
- IF CURNTPOS > ITEMCOUNT THEN CURNTPOS = 1
- IF CURNTPOS < 1 THEN CURNTPOS = ITEMCOUNT
- LOOP UNTIL DONE
- END SUB
-
- DEF FNATTR(FORE,BACK)
- LOCAL TEMP
- TEMP=(BACK*16)+FORE
- IF FORE>15 THEN TEMP = TEMP + 112
- FNATTR = TEMP
- END DEF
-
- SUB TBWPRINT INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HC4,&H7E,&H0A,&H26,&H8B,&H0D,&H81,&HE1,&HFF
- $INLINE &H7F,&HE3,&H5B,&H51,&H8B,&H16,&H00,&H00,&H52,&HB4,&H0F,&HCD,&H10,&H3C
- $INLINE &H07,&H75,&H08,&HBB,&H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8
- $INLINE &HBA,&HDA,&H03,&H53,&H07,&H52,&H33,&HDB,&H8A,&HDC,&HC5,&H76,&H12,&H8B
- $INLINE &H04,&H48,&HF7,&HE3,&HD1,&HE0,&HC5,&H76,&H0E,&H8B,&H1C,&H4B,&HD1,&HE3
- $INLINE &H03,&HD8,&H8B,&HFB,&HC5,&H76,&H06,&H8B,&H1C,&HC5,&H76,&H0A,&H8B,&H74
- $INLINE &H02,&H5A,&H1F,&H59,&HFC,&HFA,&HEC,&HA8,&H01,&H75,&HFB,&HEC,&HA8,&H01
- $INLINE &H74,&HFB,&HA4,&H26,&H88,&H1D,&H47,&HE2,&HEF,&HFB,&H07,&H1F,&H5D
- END SUB
-
- SUB TBWPRINTC INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HC4,&H7E,&H0A,&H26,&H8B,&H0D,&H81,&HE1,&HFF
- $INLINE &H7F,&HE3,&H6A,&H51,&H8B,&H16,&H00,&H00,&H52,&HB4,&H0F,&HCD,&H10,&H3C
- $INLINE &H07,&H75,&H08,&HBB,&H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8
- $INLINE &HBA,&HDA,&H03,&H53,&H07,&H52,&H33,&HDB,&H8A,&HDC,&HC5,&H76,&H16,&H8B
- $INLINE &H04,&H48,&HF7,&HE3,&HD1,&HE0,&HC5,&H76,&H12,&H8A,&H1C,&HC5,&H76,&H0E
- $INLINE &H8A,&H3C,&H02,&HDF,&H32,&HFF,&HD1,&HEB,&HD1,&HE9,&H2B,&HD9,&H4B,&HD1
- $INLINE &HE3,&H03,&HD8,&H8B,&HFB,&HC5,&H76,&H06,&H8B,&H1C,&HC5,&H76,&H0A,&H8B
- $INLINE &H74,&H02,&H5A,&H1F,&H59,&HFC,&HFA,&HEC,&HA8,&H01,&H75,&HFB,&HEC,&HA8
- $INLINE &H01,&H74,&HFB,&HA4,&H26,&H88,&H1D,&H47,&HE2,&HEF,&HFB,&H07,&H1F,&H5D
- END SUB
-
- SUB TBWFILL INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HB4,&H0F,&HCD,&H10,&H3C,&H07,&H75,&H08,&HBB
- $INLINE &H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8,&HBA,&HDA,&H03,&H53
- $INLINE &H07,&HC5,&H76,&H12,&H8B,&H0C,&H51,&H52,&H33,&HDB,&H8A,&HDC,&HC5,&H76
- $INLINE &H1A,&H8B,&H04,&H48,&HF7,&HE3,&HD1,&HE0,&HC5,&H76,&H16,&H8B,&H1C,&H4B
- $INLINE &HD1,&HE3,&H03,&HD8,&H8B,&HFB,&HC5,&H76,&H0A,&H8B,&H04,&H8A,&HD8,&HC5
- $INLINE &H76,&H06,&H8B,&H04,&H8A,&HE0,&HFC,&HC5,&H76,&H0E,&H8B,&H34,&H5A,&H57
- $INLINE &H8B,&HCE,&HFA,&HEC,&HA8,&H01,&H75,&HFB,&HEC,&HA8,&H01,&H74,&HFB,&H8A
- $INLINE &HC3,&HAB,&HE2,&HF1,&HFB,&H5F,&H59,&H49,&HE3,&H07,&H51,&H81,&HC7,&HA0
- $INLINE &H00,&HEB,&HE0,&H07,&H1F,&H5D
- END SUB
-
- SUB TBWATTR INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HB4,&H0F,&HCD,&H10,&H3C,&H07,&H75,&H08,&HBB
- $INLINE &H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8,&HBA,&HDA,&H03,&H53
- $INLINE &H07,&HC5,&H76,&H0E,&H8B,&H0C,&H51,&H52,&H33,&HDB,&H8A,&HDC,&HC5,&H76
- $INLINE &H16,&H8B,&H04,&H48,&HF7,&HE3,&HD1,&HE0,&HC5,&H76,&H12,&H8B,&H1C,&H4B
- $INLINE &HD1,&HE3,&H03,&HD8,&H8B,&HFB,&HC5,&H76,&H06,&H8B,&H1C,&HFC,&HC5,&H76
- $INLINE &H0A,&H8B,&H34,&H5A,&H57,&HFA,&H8B,&HCE,&H47,&HEC,&HA8,&H01,&H75,&HFB
- $INLINE &HEC,&HA8,&H01,&H74,&HFB,&H8A,&HC3,&HAA,&HE2,&HF0,&HFB,&H5F,&H59,&H49
- $INLINE &HE3,&H07,&H51,&H81,&HC7,&HA0,&H00,&HEB,&HDF,&H07,&H1F,&H5D
- END SUB
-
- SUB TBWSAVE INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HB4,&H0F,&HCD,&H10,&H3C,&H07,&H75,&H08,&HBB
- $INLINE &H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8,&HBA,&HDA,&H03,&H53
- $INLINE &H1F,&HC4,&H7E,&H0E,&H26,&H8B,&H0D,&H51,&H52,&H33,&HDB,&H8A,&HDC,&HC4
- $INLINE &H7E,&H16,&H26,&H8B,&H05,&H48,&HF7,&HE3,&HD1,&HE0,&HC4,&H7E,&H12,&H26
- $INLINE &H8B,&H1D,&H4B,&HD1,&HE3,&H03,&HD8,&H8B,&HF3,&HC4,&H7E,&H0A,&H26,&H8B
- $INLINE &H1D,&HC4,&H7E,&H06,&HFC,&H5A,&H56,&HFA,&H8B,&HCB,&HEC,&HA8,&H01,&H75
- $INLINE &HFB,&HEC,&HA8,&H01,&H74,&HFB,&HA5,&HE2,&HF3,&HFB,&H5E,&H59,&H49,&HE3
- $INLINE &H07,&H51,&H81,&HC6,&HA0,&H00,&HEB,&HE2,&H07,&H1F,&H5D
- END SUB
-
- SUB TBWREST INLINE
- $INLINE &H55,&H8B,&HEC,&H1E,&H06,&HB4,&H0F,&HCD,&H10,&H3C,&H07,&H75,&H08,&HBB
- $INLINE &H00,&HB0,&HBA,&HBA,&H03,&HEB,&H06,&HBB,&H00,&HB8,&HBA,&HDA,&H03,&H53
- $INLINE &H07,&HC5,&H76,&H0E,&H8B,&H0C,&H51,&H52,&H33,&HDB,&H8A,&HDC,&HC5,&H76
- $INLINE &H16,&H8B,&H04,&H48,&HF7,&HE3,&HD1,&HE0,&HC5,&H76,&H12,&H8B,&H1C,&H4B
- $INLINE &HD1,&HE3,&H03,&HD8,&H8B,&HFB,&HC5,&H76,&H0A,&H8B,&H1C,&HC5,&H76,&H06
- $INLINE &HFC,&H5A,&H57,&HFA,&H8B,&HCB,&HEC,&HA8,&H01,&H75,&HFB,&HEC,&HA8,&H01
- $INLINE &H74,&HFB,&HA5,&HE2,&HF3,&HFB,&H5F,&H59,&H49,&HE3,&H07,&H51,&H81,&HC7
- $INLINE &HA0,&H00,&HEB,&HE2,&H07,&H1F,&H5D
- END SUB
-
-