home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / basic / PICULATE.ZIP / PCONFIG.BAS next >
Encoding:
BASIC Source File  |  1992-08-21  |  7.5 KB  |  273 lines

  1. DECLARE FUNCTION MSELECT (ROW, COL, OPT, OPT$())
  2. CLS
  3. DIM OPT$(9)
  4. DIM DEFAULTS(6)
  5. DIM NEWSET$(6)
  6. DEFAULTS$(1) = "COM2:"
  7. DEFAULTS$(2) = "9600 "
  8. DEFAULTS$(3) = "8-N-1"
  9. DEFAULTS$(4) = "Disable"
  10. DEFAULTS$(5) = "Mono"
  11. DEFAULTS$(6) = "Auto"
  12. OPEN "MAIN.MNU" FOR INPUT AS #1
  13. PRINT CHR$(218); STRING$(78, 196); CHR$(191);
  14. FOR X = 2 TO 23
  15.   INPUT #1, TEXT$
  16.   NLEN = 78 - LEN(TEXT$)
  17.   PRINT CHR$(179); TEXT$; STRING$(NLEN, " "); CHR$(179);
  18. NEXT X
  19. PRINT CHR$(192); STRING$(78, 196); CHR$(217);
  20. OPEN "CONFIG.SET" FOR INPUT AS #2
  21. FOR X = 1 TO 6
  22.   INPUT #2, NEWSET$(X)
  23. NEXT X
  24. CLOSE #2
  25. GOSUB 9000 '* Print Defaults
  26. DONE = 0
  27. WHILE DONE = 0
  28.   GOSUB 8000: GOSUB 1000: COPT = NEW.OPT
  29.   SELECT CASE COPT
  30.     CASE IS = 1 '*Comm Port
  31.       GOSUB 2000: GOSUB 1000
  32.       NEWSET$(COPT) = OPT$(NEW.OPT)
  33.       LOCATE 16, 4: PRINT NEWSET$(COPT)
  34.     CASE IS = 2 '* Speed
  35.       GOSUB 3000: GOSUB 1000
  36.       NEWSET$(COPT) = OPT$(NEW.OPT)
  37.       LOCATE 16, 15: PRINT NEWSET$(COPT)
  38.     CASE IS = 3 '*Parity
  39.       GOSUB 4000: GOSUB 1000
  40.       NEWOPT$(COPT) = OPT$(NEW.OPT)
  41.       LOCATE 16, 24: PRINT NEWSET$(COPT)
  42.     CASE IS = 4 '*Mouse
  43.        GOSUB 5000: GOSUB 1000
  44.        NEWSET$(COPT) = OPT$(NEW.OPT)
  45.        LOCATE 16, 33: PRINT NEWSET$(COPT)
  46.        CASE IS = 5 '*Video
  47.        GOSUB 6000: GOSUB 1000
  48.        NEWSET$(COPT) = OPT$(NEW.OPT)
  49.        LOCATE 16, 45: PRINT NEWSET$(COPT)
  50.      CASE IS = 6 '*Setup
  51.        OPT$(1) = "  Auto"
  52.        OPT$(2) = "Manual"
  53.        OPT = 2: COL = 58: GOSUB 1000
  54.        NEWSET$(COPT) = OPT$(NEW.OPT)
  55.        LOCATE 16, 58: PRINT NEWSET$(COPT)
  56.     CASE IS = 8 '*File Changes
  57.        OPT$(1) = "File Changes"
  58.        OPT$(2) = "Cancel      "
  59.        OPT = 2: COL = 35: GOSUB 1000
  60.        IF NEW.OPT = 1 THEN
  61.           OPEN "CONFIG.SET" FOR OUTPUT AS #2
  62.           FOR FLE = 1 TO 6
  63.             IF NEWSET$(FLE) = "" THEN
  64.                PRINT #2, DEFAULTS$(FLE)
  65.             ELSE
  66.                PRINT #2, NEWSET$(FLE)
  67.             END IF
  68.           NEXT FLE
  69.           CLS : DONE = 1
  70.        END IF
  71.     CASE IS = 7 '*Restore Defaults
  72.        OPT$(1) = "Restore Defaults"
  73.        OPT$(2) = "Cancel "
  74.        OPT = 2: COL = 35: GOSUB 1000
  75.        IF NEW.OPT = 1 THEN
  76.           FOR RST = 1 TO 6
  77.             NEWSET$(RST) = DEFAULTS$(RST)
  78.           NEXT RST
  79.           GOSUB 9000
  80.        END IF
  81.      CASE IS = 9
  82.        OPT$(1) = "Exit Without Changing"
  83.        OPT$(2) = "Continue with Changes"
  84.        OPT = 2: COL = 35: GOSUB 1000
  85.        IF NEW.OPT = 1 THEN
  86.           CLS : DONE = 1
  87.        END IF
  88.      END SELECT
  89. WEND
  90. CLEAR
  91. CLOSE
  92. END
  93. 1000 '*** Selection option
  94.      '***
  95.       NEW.OPT = MSELECT(ROW, COL, OPT, OPT$())
  96.       RETURN
  97. 2000 '*** Com Options
  98.       OPT$(1) = "COM1:"
  99.       OPT$(2) = "COM2:"
  100.       OPT$(3) = "COM3:"
  101.       OPT$(4) = "COM4:"
  102.       OPT$(5) = "COM5:"
  103.       OPT$(6) = "COM6:"
  104.       OPT$(7) = "COM7:"
  105.       OPT$(8) = "COM8:"
  106.       OPT = 8:  ROW = 15: COL = 4
  107.       RETURN
  108. 3000 '*** Speed Options
  109.       OPT$(1) = "  300"
  110.       OPT$(2) = " 1200"
  111.       OPT$(3) = " 2400"
  112.       OPT$(4) = " 4800"
  113.       OPT$(5) = " 9600"
  114.       OPT$(6) = "19200"
  115.       OPT = 6: ROW = 15: COL = 16
  116.       RETURN
  117. 4000 '* Parity Options
  118.       OPT$(1) = "8,N,1"
  119.       OPT$(2) = "E,7,1"
  120.       OPT = 2: ROW = 15: COL = 24
  121.       RETURN
  122. 5000 '* Mouse Options
  123.       OPT$(1) = " ENABLE"
  124.       OPT$(2) = "DISABLE"
  125.       OPT = 2: ROW = 15: COL = 33
  126.       RETURN
  127. 6000 '* Video Options
  128.       OPT$(1) = "Mono"
  129.       OPT$(2) = "EGA"
  130.       OPT$(3) = "CGA"
  131.       OPT$(4) = "VGA"
  132.       OPT = 4: ROW = 15: COL = 45
  133.       RETURN
  134. 7000 '* Setup Screen
  135.       OPT$(1) = "  Auto"
  136.       OPT$(2) = "Manual"
  137.       OPT = 2: ROW = 15: COL = 58
  138.       RETURN
  139. 8000 '* Menu Selections
  140.       OPT$(1) = "Comm Port"
  141.       OPT$(2) = "Baud"
  142.       OPT$(3) = "Parity"
  143.       OPT$(4) = "Mouse"
  144.       OPT$(5) = "Video"
  145.       OPT$(6) = "Setup Screen (Auto/Manual)"
  146.       OPT$(7) = "Restore Default Settings"
  147.       OPT$(8) = "Exit and Save Current Settings"
  148.       OPT$(9) = "Exit without Saving Changes"
  149.       OPT = 9: ROW = 4: COL = 4
  150.       RETURN
  151. 9000 '*** Restore Defaults
  152.       LOCATE 16, 4: PRINT NEWSET$(1)
  153.       LOCATE 16, 16: PRINT NEWSET$(2)
  154.       LOCATE 16, 24: PRINT NEWSET$(3)
  155.       LOCATE 16, 33: PRINT NEWSET$(4)
  156.       LOCATE 16, 45: PRINT NEWSET$(5)
  157.       LOCATE 16, 58: PRINT NEWSET$(6)
  158.       RETURN
  159.  
  160. FUNCTION MSELECT (ROW, column, OPT, OPT$())
  161.   CHOICE = 1     ' Default choice
  162.   DONE = 0       ' 0 is logical false
  163.   heightInRows = 25
  164.   widthInColumns = 80
  165.   IF OPT < 1 THEN
  166.     MSELECT = 0
  167.     EXIT FUNCTION
  168.   END IF
  169.   IF OPT > UBOUND(OPT$) - LBOUND(OPT$) + 1 THEN OPT = UBOUND(OPT$) - LBOUND(OPT$) + 1
  170.   max = 0
  171.   FOR k = LBOUND(OPT$) TO LBOUND(OPT$) + OPT - 1
  172.     IF LEN(RTRIM$(OPT$(k))) > max THEN max = LEN(RTRIM$(OPT$(k)))
  173.   NEXT k
  174.   IF ROW < 1 THEN ROW = 1
  175.   IF column < 1 THEN column = 1
  176.   IF ROW + OPT + 1 > heightInRows THEN ROW = heightInRows - OPT - 1
  177.   IF max > widthInColumns - 2 THEN max = widthInColumns - 2
  178.   IF column + 2 + max > widthInColumns THEN column = widthInColumns - 2 - max
  179. '  IF column + 3 > widthInColumns THEN column = widthInColumns - 3
  180. '  IF column + 2 + max > 80 THEN max = 80 - column - 2
  181.   row1 = ROW
  182.   column1 = column
  183.   h = OPT + 2
  184.   w = max + 1 + 2
  185.   a = SCREEN(1, 1)
  186.   DEF SEG = &HB000
  187.   b = PEEK(0)
  188.   DEF SEG = &HB800
  189.   c = PEEK(0)
  190.   IF a = b AND c = 255 THEN
  191.       offset& = &HB000
  192.     ELSE
  193.       offset& = &HB800
  194.   END IF
  195.   DEF SEG = offset&
  196.   scrn$ = CHR$(column1) + CHR$(row1) + CHR$(w) + CHR$(h)
  197.   scrn$ = scrn$ + SPACE$(w * h)
  198.   obyte = (row1 - 1) * 160 + (column1 - 1) * 2
  199.   m = 5
  200.   FOR rowNum = row1 TO row1 + h - 1
  201.     byte = obyte
  202.     FOR columnNum = column1 TO column1 + w - 1
  203.       MID$(scrn$, m, 1) = CHR$(PEEK(byte))
  204.       byte = byte + 2
  205.       m = m + 1
  206.     NEXT columnNum
  207.     obyte = obyte + 160
  208.   NEXT rowNum
  209.   height = OPT
  210.   wdth = max + 1
  211.   blank = 1
  212.   IF blank THEN
  213.     FOR rowNum = ROW TO ROW + height + 1
  214.       LOCATE rowNum, column
  215.       PRINT SPACE$(wdth + 2);
  216.     NEXT rowNum
  217.   END IF
  218.   LOCATE ROW, column
  219.   PRINT CHR$(218); STRING$(wdth, CHR$(196)); CHR$(191);
  220.   FOR nrow = ROW + 1 TO ROW + height
  221.     LOCATE nrow, column
  222.     PRINT CHR$(179);
  223.     LOCATE nrow, column + wdth + 1
  224.     PRINT CHR$(179);
  225.   NEXT nrow
  226.   LOCATE ROW + height + 1, column
  227.   PRINT CHR$(192); STRING$(wdth, CHR$(196)); CHR$(217);
  228.   LOCATE ROW + 1, column + 1
  229.   FOR optNum = 1 TO OPT
  230.     LOCATE ROW + optNum, column + 2
  231.     PRINT LEFT$(OPT$(optNum), max);
  232.   NEXT optNum
  233.   DO WHILE NOT DONE
  234.     LOCATE ROW + CHOICE, column + 1
  235.     PRINT ">";
  236.     LOCATE ROW + CHOICE, column + 1, 0
  237.     a$ = INKEY$
  238.     IF a$ = CHR$(13) OR a$ = CHR$(27) THEN
  239.         PRINT " ";
  240.         DONE = -1
  241.       ELSEIF LEN(a$) = 2 THEN
  242.         SELECT CASE ASC(MID$(a$, 2, 1))
  243.           CASE 27: CHOICE = 0
  244.           CASE 71, 73: CHOICE = 1
  245.           CASE 72: IF CHOICE > 1 THEN CHOICE = CHOICE - 1
  246.           CASE 79, 81: CHOICE = OPT
  247.           CASE 80: IF CHOICE < OPT THEN CHOICE = CHOICE + 1
  248.           CASE ELSE
  249.         END SELECT
  250.         PRINT " ";
  251.     END IF
  252.   LOOP
  253.   DEF SEG = offset&
  254.   column1 = ASC(MID$(scrn$, 1, 1))
  255.   row1 = ASC(MID$(scrn$, 2, 1))
  256.   wdth = ASC(MID$(scrn$, 3, 1))
  257.   hght = ASC(MID$(scrn$, 4, 1))
  258.   m = 5
  259.   obyte = (row1 - 1) * 160 + (column1 - 1) * 2
  260.   FOR ROW = row1 TO row1 + hght - 1
  261.     LOCATE ROW, column1
  262.     byte = obyte
  263.     FOR column = column1 TO column1 + wdth - 1
  264.       POKE byte, ASC(MID$(scrn$, m, 1))
  265.       byte = byte + 2
  266.       m = m + 1
  267.     NEXT column
  268.     obyte = obyte + 160
  269.   NEXT ROW
  270.   MSELECT = CHOICE
  271. END FUNCTION
  272.  
  273.