home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION MSELECT (ROW, COL, OPT, OPT$())
- CLS
- DIM OPT$(9)
- DIM DEFAULTS(6)
- DIM NEWSET$(6)
- DEFAULTS$(1) = "COM2:"
- DEFAULTS$(2) = "9600 "
- DEFAULTS$(3) = "8-N-1"
- DEFAULTS$(4) = "Disable"
- DEFAULTS$(5) = "Mono"
- DEFAULTS$(6) = "Auto"
- OPEN "MAIN.MNU" FOR INPUT AS #1
- PRINT CHR$(218); STRING$(78, 196); CHR$(191);
- FOR X = 2 TO 23
- INPUT #1, TEXT$
- NLEN = 78 - LEN(TEXT$)
- PRINT CHR$(179); TEXT$; STRING$(NLEN, " "); CHR$(179);
- NEXT X
- PRINT CHR$(192); STRING$(78, 196); CHR$(217);
- OPEN "CONFIG.SET" FOR INPUT AS #2
- FOR X = 1 TO 6
- INPUT #2, NEWSET$(X)
- NEXT X
- CLOSE #2
- GOSUB 9000 '* Print Defaults
- DONE = 0
- WHILE DONE = 0
- GOSUB 8000: GOSUB 1000: COPT = NEW.OPT
- SELECT CASE COPT
- CASE IS = 1 '*Comm Port
- GOSUB 2000: GOSUB 1000
- NEWSET$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 4: PRINT NEWSET$(COPT)
- CASE IS = 2 '* Speed
- GOSUB 3000: GOSUB 1000
- NEWSET$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 15: PRINT NEWSET$(COPT)
- CASE IS = 3 '*Parity
- GOSUB 4000: GOSUB 1000
- NEWOPT$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 24: PRINT NEWSET$(COPT)
- CASE IS = 4 '*Mouse
- GOSUB 5000: GOSUB 1000
- NEWSET$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 33: PRINT NEWSET$(COPT)
- CASE IS = 5 '*Video
- GOSUB 6000: GOSUB 1000
- NEWSET$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 45: PRINT NEWSET$(COPT)
- CASE IS = 6 '*Setup
- OPT$(1) = " Auto"
- OPT$(2) = "Manual"
- OPT = 2: COL = 58: GOSUB 1000
- NEWSET$(COPT) = OPT$(NEW.OPT)
- LOCATE 16, 58: PRINT NEWSET$(COPT)
- CASE IS = 8 '*File Changes
- OPT$(1) = "File Changes"
- OPT$(2) = "Cancel "
- OPT = 2: COL = 35: GOSUB 1000
- IF NEW.OPT = 1 THEN
- OPEN "CONFIG.SET" FOR OUTPUT AS #2
- FOR FLE = 1 TO 6
- IF NEWSET$(FLE) = "" THEN
- PRINT #2, DEFAULTS$(FLE)
- ELSE
- PRINT #2, NEWSET$(FLE)
- END IF
- NEXT FLE
- CLS : DONE = 1
- END IF
- CASE IS = 7 '*Restore Defaults
- OPT$(1) = "Restore Defaults"
- OPT$(2) = "Cancel "
- OPT = 2: COL = 35: GOSUB 1000
- IF NEW.OPT = 1 THEN
- FOR RST = 1 TO 6
- NEWSET$(RST) = DEFAULTS$(RST)
- NEXT RST
- GOSUB 9000
- END IF
- CASE IS = 9
- OPT$(1) = "Exit Without Changing"
- OPT$(2) = "Continue with Changes"
- OPT = 2: COL = 35: GOSUB 1000
- IF NEW.OPT = 1 THEN
- CLS : DONE = 1
- END IF
- END SELECT
- WEND
- CLEAR
- CLOSE
- END
- 1000 '*** Selection option
- '***
- NEW.OPT = MSELECT(ROW, COL, OPT, OPT$())
- RETURN
- 2000 '*** Com Options
- OPT$(1) = "COM1:"
- OPT$(2) = "COM2:"
- OPT$(3) = "COM3:"
- OPT$(4) = "COM4:"
- OPT$(5) = "COM5:"
- OPT$(6) = "COM6:"
- OPT$(7) = "COM7:"
- OPT$(8) = "COM8:"
- OPT = 8: ROW = 15: COL = 4
- RETURN
- 3000 '*** Speed Options
- OPT$(1) = " 300"
- OPT$(2) = " 1200"
- OPT$(3) = " 2400"
- OPT$(4) = " 4800"
- OPT$(5) = " 9600"
- OPT$(6) = "19200"
- OPT = 6: ROW = 15: COL = 16
- RETURN
- 4000 '* Parity Options
- OPT$(1) = "8,N,1"
- OPT$(2) = "E,7,1"
- OPT = 2: ROW = 15: COL = 24
- RETURN
- 5000 '* Mouse Options
- OPT$(1) = " ENABLE"
- OPT$(2) = "DISABLE"
- OPT = 2: ROW = 15: COL = 33
- RETURN
- 6000 '* Video Options
- OPT$(1) = "Mono"
- OPT$(2) = "EGA"
- OPT$(3) = "CGA"
- OPT$(4) = "VGA"
- OPT = 4: ROW = 15: COL = 45
- RETURN
- 7000 '* Setup Screen
- OPT$(1) = " Auto"
- OPT$(2) = "Manual"
- OPT = 2: ROW = 15: COL = 58
- RETURN
- 8000 '* Menu Selections
- OPT$(1) = "Comm Port"
- OPT$(2) = "Baud"
- OPT$(3) = "Parity"
- OPT$(4) = "Mouse"
- OPT$(5) = "Video"
- OPT$(6) = "Setup Screen (Auto/Manual)"
- OPT$(7) = "Restore Default Settings"
- OPT$(8) = "Exit and Save Current Settings"
- OPT$(9) = "Exit without Saving Changes"
- OPT = 9: ROW = 4: COL = 4
- RETURN
- 9000 '*** Restore Defaults
- LOCATE 16, 4: PRINT NEWSET$(1)
- LOCATE 16, 16: PRINT NEWSET$(2)
- LOCATE 16, 24: PRINT NEWSET$(3)
- LOCATE 16, 33: PRINT NEWSET$(4)
- LOCATE 16, 45: PRINT NEWSET$(5)
- LOCATE 16, 58: PRINT NEWSET$(6)
- RETURN
-
- FUNCTION MSELECT (ROW, column, OPT, OPT$())
- CHOICE = 1 ' Default choice
- DONE = 0 ' 0 is logical false
- heightInRows = 25
- widthInColumns = 80
- IF OPT < 1 THEN
- MSELECT = 0
- EXIT FUNCTION
- END IF
- IF OPT > UBOUND(OPT$) - LBOUND(OPT$) + 1 THEN OPT = UBOUND(OPT$) - LBOUND(OPT$) + 1
- max = 0
- FOR k = LBOUND(OPT$) TO LBOUND(OPT$) + OPT - 1
- IF LEN(RTRIM$(OPT$(k))) > max THEN max = LEN(RTRIM$(OPT$(k)))
- NEXT k
- IF ROW < 1 THEN ROW = 1
- IF column < 1 THEN column = 1
- IF ROW + OPT + 1 > heightInRows THEN ROW = heightInRows - OPT - 1
- IF max > widthInColumns - 2 THEN max = widthInColumns - 2
- IF column + 2 + max > widthInColumns THEN column = widthInColumns - 2 - max
- ' IF column + 3 > widthInColumns THEN column = widthInColumns - 3
- ' IF column + 2 + max > 80 THEN max = 80 - column - 2
- row1 = ROW
- column1 = column
- h = OPT + 2
- w = max + 1 + 2
- a = SCREEN(1, 1)
- DEF SEG = &HB000
- b = PEEK(0)
- DEF SEG = &HB800
- c = PEEK(0)
- IF a = b AND c = 255 THEN
- offset& = &HB000
- ELSE
- offset& = &HB800
- END IF
- DEF SEG = offset&
- scrn$ = CHR$(column1) + CHR$(row1) + CHR$(w) + CHR$(h)
- scrn$ = scrn$ + SPACE$(w * h)
- obyte = (row1 - 1) * 160 + (column1 - 1) * 2
- m = 5
- FOR rowNum = row1 TO row1 + h - 1
- byte = obyte
- FOR columnNum = column1 TO column1 + w - 1
- MID$(scrn$, m, 1) = CHR$(PEEK(byte))
- byte = byte + 2
- m = m + 1
- NEXT columnNum
- obyte = obyte + 160
- NEXT rowNum
- height = OPT
- wdth = max + 1
- blank = 1
- IF blank THEN
- FOR rowNum = ROW TO ROW + height + 1
- LOCATE rowNum, column
- PRINT SPACE$(wdth + 2);
- NEXT rowNum
- END IF
- LOCATE ROW, column
- PRINT CHR$(218); STRING$(wdth, CHR$(196)); CHR$(191);
- FOR nrow = ROW + 1 TO ROW + height
- LOCATE nrow, column
- PRINT CHR$(179);
- LOCATE nrow, column + wdth + 1
- PRINT CHR$(179);
- NEXT nrow
- LOCATE ROW + height + 1, column
- PRINT CHR$(192); STRING$(wdth, CHR$(196)); CHR$(217);
- LOCATE ROW + 1, column + 1
- FOR optNum = 1 TO OPT
- LOCATE ROW + optNum, column + 2
- PRINT LEFT$(OPT$(optNum), max);
- NEXT optNum
- DO WHILE NOT DONE
- LOCATE ROW + CHOICE, column + 1
- PRINT ">";
- LOCATE ROW + CHOICE, column + 1, 0
- a$ = INKEY$
- IF a$ = CHR$(13) OR a$ = CHR$(27) THEN
- PRINT " ";
- DONE = -1
- ELSEIF LEN(a$) = 2 THEN
- SELECT CASE ASC(MID$(a$, 2, 1))
- CASE 27: CHOICE = 0
- CASE 71, 73: CHOICE = 1
- CASE 72: IF CHOICE > 1 THEN CHOICE = CHOICE - 1
- CASE 79, 81: CHOICE = OPT
- CASE 80: IF CHOICE < OPT THEN CHOICE = CHOICE + 1
- CASE ELSE
- END SELECT
- PRINT " ";
- END IF
- LOOP
- DEF SEG = offset&
- column1 = ASC(MID$(scrn$, 1, 1))
- row1 = ASC(MID$(scrn$, 2, 1))
- wdth = ASC(MID$(scrn$, 3, 1))
- hght = ASC(MID$(scrn$, 4, 1))
- m = 5
- obyte = (row1 - 1) * 160 + (column1 - 1) * 2
- FOR ROW = row1 TO row1 + hght - 1
- LOCATE ROW, column1
- byte = obyte
- FOR column = column1 TO column1 + wdth - 1
- POKE byte, ASC(MID$(scrn$, m, 1))
- byte = byte + 2
- m = m + 1
- NEXT column
- obyte = obyte + 160
- NEXT ROW
- MSELECT = CHOICE
- END FUNCTION
-
-