home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / window / pwez70 / dempart2.bas < prev    next >
Encoding:
BASIC Source File  |  1994-02-01  |  33.6 KB  |  868 lines

  1. '!!! ---------------------------------------------------------------------!!!
  2. '!!!   NOTE: THIS MODULE MUST BE LOADED WITH DEMO.BAS AS THE MAIN MODULE  !!!
  3. '!!! ---------------------------------------------------------------------!!!
  4. '----------  MUST BE IN ANY MODULE USING "FINDDIR" DIRECTORY ROUTINE --------
  5. TYPE DIREC
  6.   SIZE AS LONG              ' SIZE
  7.   DATE AS STRING * 10       ' DATE
  8.   TIME AS STRING * 6        ' TIME
  9.   ATTR AS INTEGER           ' ATTRIBUTE
  10. END TYPE
  11. COMMON SHARED /DIRECTORY/ DIREC$(), DIRINFO() AS DIREC
  12. '----------------------------------------------------------------------------
  13. DECLARE SUB B4INPT (INPTEXIT$, RESTRICT$)
  14. DECLARE SUB B4SCRL (EXIT$, MARK$, TAGCOL%, NOREFRESH%)
  15. DECLARE SUB BOXW (TR%, LC%, WD%, NR%, BORDER%)
  16. DECLARE FUNCTION CHOICEBAR% (Choice$(), TR%, LC%, WD%, ATTR%, HATTR%, EXIT$)
  17. DECLARE FUNCTION CHOICEWIND% (TITLE$, TX$(), CH$(), TR%, LC%, ATTR%, HCOL%, ESCEXIT%, BORDER%)
  18. DECLARE SUB CHNGPULL (BAR%, WIND%, ATTR%)
  19. DECLARE SUB CHNGWIND (W%)
  20. DECLARE SUB CLRWIND ()
  21. DECLARE SUB CUROFF ()
  22. DECLARE SUB DELWIND (W%)
  23. DECLARE SUB DISKSIZE (DISK%, DISKSZE&, FREESPACE&)
  24. DECLARE SUB DOSOUND ()
  25. DECLARE FUNCTION FINDPATH$ ()
  26. DECLARE SUB FINDDIR (PATH$, TYPE$, F%)
  27. DECLARE SUB GETANS (TEXT$, Choice$, ANS$, TR%, LC%, WATTR%, FATTR%, BORDER%)
  28. DECLARE FUNCTION GETCUR& ()
  29. DECLARE FUNCTION GETDISK% ()
  30. DECLARE FUNCTION HIBACK% (ONOFF%)
  31. DECLARE SUB INFOFIXED (FIXED$)
  32. DECLARE SUB INFOLINE (TR%, LC%, WD%, ATTR%)
  33. DECLARE SUB INPTINIT (DTYPE%, ISDOT%, STARTAT1%, NOBLANK%, SND%)
  34. DECLARE SUB INPTWIND (PROMPT$, CODE$, TR%, LC%, WD%, WATTR%, FATTR%, RTRN$, RK%, BUT%, BRD%)
  35. DECLARE FUNCTION GETAKEY% ()
  36. DECLARE FUNCTION LBUTTON% ()
  37. DECLARE SUB LINEW (ROW%, TYP%)
  38. DECLARE SUB MAKEFIELD (SCRN%, FLD%, SCODE%, STR%, SLC%, SWD%, SBASEATTR%, SACTATTR%, MATTR%, RES$, EXTO$, HOT%, CURPOS%, BRACKET%)
  39. DECLARE SUB MAKEWIND (W%, LABEL$, TR%, LC%, WD%, NR%, ATTR%, BORDER%)
  40. DECLARE FUNCTION MARKED% (RTRN$, START%)
  41. DECLARE FUNCTION MOUSECOL% ()
  42. DECLARE SUB MOUSEINIT ()
  43. DECLARE FUNCTION MOUSEINMULT% (MULTSCRN%)
  44. DECLARE FUNCTION MOUSEINWIND% (WIND%)
  45. DECLARE SUB MOUSELIMITS (TROW%, BROW%, LCOL%, RCOL%)
  46. DECLARE FUNCTION MOUSEON% (ONFLAF%)
  47. DECLARE SUB MOUSEPOS (ROW%, COL%)
  48. DECLARE FUNCTION MOUSEROW% ()
  49. DECLARE SUB MOUSESHOW ()
  50. DECLARE SUB MULTINPT (SCRN%, TOFLD%, OPT$, FROMFLD%, RKEY%, RTRN$(), SELFLD%)
  51. DECLARE FUNCTION WVAL& (S$)
  52. DECLARE SUB NEWCOLOR (ATTR%)
  53. DECLARE FUNCTION PEEKASM& (S&, O&, BYVAL N%)
  54. DECLARE SUB PRINTINFO (I$)
  55. DECLARE SUB PRINTW (TEXT$, TR%, LC%)
  56. DECLARE SUB PRINTWHOT (TEXT$, TR%, LC%, HOTCHAR%, ATTR%)
  57. DECLARE SUB PULLDOWN (INFO$(), A%, B%, EXIT$, RKEY%, ATTR%, HATTR%, BORDER%)
  58. DECLARE FUNCTION RBUTTON% ()
  59. DECLARE SUB RESAVE ()
  60. DECLARE SUB RSTRINFO (DELFLAG%)
  61. DECLARE SUB RSTRINPT (DELFLAG%)
  62. DECLARE SUB RSTRPULL (RSTRMBAR%)
  63. DECLARE SUB RSTRWIND (W%, DELFLAG%)
  64. DECLARE SUB SAVEWIND (W%, TR%, LC%, WD%, NR%)
  65. DECLARE SUB SCRLWIND (LIST$(), INFO$(), TOPLINE$, ENTRIES%, RTRN$, RTRN%, LI%, FC%, RKEY%, HIATTR%, SCROLLBAR%, BUT%)
  66. DECLARE SUB SCROLLPRINT (PRE$, POST$, TR%, LC%, LENGTH%, ATTR%)
  67. DECLARE SUB SETCUR (C&)
  68. DECLARE SUB SETDISK (DRIVE%, BADFLAG%)
  69. DECLARE SUB SETINPT (SCRN%, DISPLAYLEN%, EXIT$, HOTCOL%)
  70. DECLARE SUB SETPULL (TR%, LC%, WD%, PWIND$())
  71. DECLARE SUB SETWIND (FAST%, SND%, SHADCOL%, NOHIGH%, BRACKETATTR%)
  72. DECLARE SUB UPDATEFIELD (SCRN%, FLD%, TEXT$)
  73. DECLARE FUNCTION WAVAIL% (W%)
  74. DECLARE SUB WINDSTATUS ()
  75. '---------------------------------------------------------------------------
  76. DECLARE FUNCTION COL% (A%)
  77. DECLARE SUB PRINTFILEINFO ()
  78. DECLARE FUNCTION FINDDRV% ()
  79. DECLARE FUNCTION FINDSUB% ()
  80. DECLARE FUNCTION FINDFILE% ()
  81. DECLARE SUB MESSAGE (M%)
  82.  
  83. DIM SHARED PATH$, OLDPATH$, FOUNDFILE$, OLDDR%, MODE$, I$(0), SPEC$
  84. DIM SHARED DISKERROR%, NUMFILES%, NUMSUBS%, LASTGOODPATH$, WASERR%
  85. DIM SHARED FIL$(X%), SUBDIR$(X%), VOLUMN$, FILENUM%
  86.  
  87. MULTDATA:
  88.  
  89. DATA 10000,6,5,10,15,15,15,0,0,0, ,
  90. DATA 10040,8,5,10,15,15,15,0,0,0, ,
  91. DATA 10001,6,20,10,15,15,15,0,0,0, ,
  92. DATA 10002,6,35,10,15,15,15,0,0,0, ,
  93. DATA 30007,6,58,12,15,15,15,0,0,0, ,
  94. DATA 30007,8,58,12,15,15,15,0,0,0, ,
  95. DATA 10017,11,5,20,15,15,15,0,0,0, ,
  96. DATA 10027,11,31,20,15,15,15,0,0,0, ,
  97. DATA 10007,11,55,20,15,15,15,0,0,0, ,
  98. DATA 11017,16,22,1,15,15,15,0,0,0,MF,
  99. DATA 11017,16,38,1,15,15,15,0,0,0,YN,
  100. DATA 11000,16,60,3,15,15,15,0,0,0, ,
  101. DATA 11000,16,64,2,15,15,15,0,0,0, ,
  102. DATA 11000,16,67,3,15,15,15,0,0,0, ,
  103. DATA 11000,21,23,6,15,15,15,0,0,0, ,
  104. DATA 11000,21,38,6,15,15,15,0,0,0, ,
  105. DATA 100,21,53,7,15,15,15,0,0,0, ,
  106. DATA 30107,24,15,11,112,112,15,0,0,0, ,
  107. DATA 30107,24,55,12,112,112,15,0,0,0, ,
  108. DATA 9999
  109.  
  110. DATA 30000,6,4,3,112,112,112,0,2,1, ,       : ' Click
  111. DATA 30000,7,4,3,112,112,112,0,2,1, ,       : ' Beep
  112. DATA 30000,8,4,3,112,112,112,0,2,1, ,       : ' No sound
  113. DATA 30000,12,4,5,112,112,112,0,2,1, ,      : ' Slow print
  114. DATA 30000,6,28,3,112,112,112,0,2,1, ,      : ' Start of text
  115. DATA 30000,7, 28,3,112,112,112,0,2,1, ,     : ' End of text
  116. DATA 30000,11,28,3,112,112,112,0,2,1, ,     : ' Erase and print
  117. DATA 30000,12,28,3,112,112,112,0,2,1, ,     : ' Prints
  118. DATA 30000,16,28,3,112,112,112,0,2,1, ,     : ' Make default snd
  119. DATA 30000,17,28,3,112,112,112,0,2,1, ,     : ' No sound"
  120. DATA 30000,21,28,3,112,112,112,0,2,1, ,     : ' As a period
  121. DATA 30000,22,28,3,112,112,112,0,2,1, ,     : ' As a comma
  122. DATA 10007,7,65,10,15,15,15,0,0,1, ,        : ' Text
  123. DATA 10030,10,65,10,15,15,15,0,0,1, ,       : ' Number
  124. DATA 10008,13,65,10,15,15,15,0,0,1, ,       : ' Date
  125. DATA 30007,15,65,9,112,112,15,0,3,1, ,      : ' < SOUND >
  126. DATA 30007,18,65,10,112,7,7,0,5,1, ,        : ' < Ok >
  127. DATA 30007,21,65,10,112,7,7,0,3,1, ,        : ' < Cancel >
  128. DATA 9999
  129.  
  130. DATA 10007,8,26,41,112,112,112,0,0,0, ,F    : 'Find What:
  131. DATA 10007,11,26,41,112,112,112,0,0,0, ,T   : 'Change To:
  132. DATA 30007,14,13,25,112,112,112,5,2,0, ,M   : 'Match Upper/Lowercase
  133. DATA 30007,15,13,25,112,112,112,5,2,0, ,W   : 'Whole Word
  134. DATA 30007,14,45,21,112,112,112,5,2,0, ,1   : 'Active Window
  135. DATA 30007,15,45,21,112,112,112,5,2,0, ,2   : 'Current Module
  136. DATA 30007,16,45,21,112,112,112,5,2,0, ,3   : 'All Modules
  137. DATA 30007,19,13,19,112,112,7,12,3,1, ,V    : 'Find and Verify
  138. DATA 30007,19,33,14,112,112,7,3,3,1, ,C     : 'Change All
  139. DATA 30007,19,48,10,112,112,7,0,3,1, ,      : 'Cancel
  140. DATA 30007,19,59,8,112,112,7,3,3,1, ,H      : 'Help
  141. DATA 9999
  142.  
  143. DATA 10007,5,14,32,15,15,15,0,0,0, ,        : ' name - upper case
  144. DATA 10007,7,14,32,15,15,15,0,0,0, ,        : ' address - upper case
  145. DATA 10007,9,14,32,15,15,15,0,0,0, ,        : ' address - upper case
  146. DATA 10007,11,14,32,15,15,15,0,0,0, ,       : ' city/state - upper case
  147. DATA 10010,13,14,5,15,15,15,0,0,0, ,        : ' zip - padded w/0's
  148. DATA 10008,5,56,10,15,15,15,0,0,0, ,        : ' date
  149. DATA 10017,7,69,1,15,15,15,0,0,0,YN,        : ' registered user ( Y or N )
  150. DATA 10000,9,69,5,15,15,15,0,0,0, ,         : ' registration number
  151. DATA 10017,13,69,1,15,15,15,0,0,0,YN,       : ' US or CANADA ( Y or N )
  152. DATA 30007,15,25,20,15,15,15,0,0,0, ,       : ' programming language
  153. DATA 30007,15,58,20,15,15,15,0,0,0, ,       : ' disk size
  154. DATA 11017,17,33,1,15,15,15,0,0,0,YN,       : ' hard copy docs ( Y or N )
  155. DATA 10007,22,24,20,15,15,15,0,0,0,123456789 0,  : ' Visa/MC card number
  156. DATA 10007,22,63,5,15,15,15,0,0,0,1234567890/,   : ' expiration date
  157. DATA 30107,2,7,11,112,112,15,0,0,0, ,       : ' F1=ABORT (mouse selectable)
  158. DATA 30107,2,62,13,112,112,15,0,0,0, ,      : ' F10=PRINT (mouse selectable)
  159. DATA 9999
  160.  
  161. DERROR:
  162.   CALL MESSAGE(0)
  163.   SELECT CASE ERR
  164.     CASE 24, 57, 71, 72
  165.       E$ = "DISK ERROR"
  166.     CASE 52, 64, 75, 76
  167.       E$ = "FILE SPEC ERROR"
  168.     CASE ELSE
  169.   END SELECT
  170.   REDIM C$(2), T$(0)
  171.   C$(1) = "Retry": C$(2) = "Abort"
  172.   A% = COL%(31)
  173.   X% = CHOICEWIND%("@        " + E$ + "        ", T$(), C$(), 7, 100, A%, 0, 0, 112)
  174.   IF X% = 1 THEN CALL MESSAGE(1): RESUME
  175.   DISKERROR% = 1: WASERR% = ERR: RESUME NEXT
  176.  
  177. SUB CHOICEDEMO
  178.   A% = COL%(31): IF A% = 15 THEN A% = 112: B% = 15 ELSE B% = 12
  179.   PRINTINFO " TAB to a selection and press ENTER or the SPACE BAR or use the MOUSE."
  180.   REDIM C$(5), T$(10)
  181.   FOR X% = 65 TO 69: C$(X% - 64) = CHR$(X%) + LCASE$(STRING$(5, X%)): NEXT
  182.   T$(1) = " 1. One to ten choices are permitted."
  183.   T$(2) = " 2. The windows width and length are automatically set."
  184.   T$(3) = " 3. Hot character selection is available."
  185.   T$(4) = " 4. The area under the choice window is saved and restored on exit"
  186.   T$(5) = " 5. Selection can be made via the keyboard or the MOUSE."
  187.   T$(6) = " 6. Segmenting lines are permitted."
  188.   T$(7) = "-"
  189.   T$(9) = "@** Text can be automatically centered **"
  190.   J% = CHOICEWIND%("@** Choice Window **", T$(), C$(), 100, 100, A%, B%, 1, 111)
  191.   IF J% <> 27 THEN
  192.     REDIM C$(1), T$(1)
  193.     PRINTINFO " Select OK...."
  194.     C$(1) = "OK": T$(1) = "@" + CHR$(J% + 64) + LCASE$(STRING$(5, J% + 64))
  195.     J% = CHOICEWIND%("   Your choice was...   ", T$(), C$(), 100, 100, 112, 0, 1, 112)
  196.   END IF
  197. END SUB
  198.  
  199. FUNCTION FINDDRV% STATIC
  200.  
  201. '---------------------------------------------------------------------------
  202. ' look for drives only on first pass through this function
  203.  
  204.  IF PASS% = 0 THEN                           ' 1st pass only
  205.    DR$ = SPACE$(26)                          ' room for 26 drive letters
  206.    EQUIP& = PEEKASM&(64, 16, 2)              ' to see if B: is installed
  207.    IF (EQUIP& AND 1) = 1 THEN
  208.       IF 1 + (EQUIP& AND 192) \ 64 = 1 THEN NOB% = 66 ' NOB%=66 if no B: drv
  209.    END IF
  210.    DRIVES% = 0                                 ' counter for number of drives
  211.    FOR X% = 65 TO 90                           '
  212.      IF X% <> NOB% THEN                        ' skip if X%=2 and NOB%=2
  213.        CALL SETDISK(X% - 64, BAD%)             ' check for valid drive
  214.        IF BAD% <> 1 THEN                       ' not valid - no more checks
  215.           DRIVES% = DRIVES% + 1                ' increment drive counter
  216.           MID$(DR$, DRIVES%, 1) = CHR$(X%)     ' place drive letter in DR$
  217.        END IF
  218.      END IF
  219.    NEXT
  220.    REDIM DRV$(DRIVES%)                          ' DIM to number of drives
  221.    FOR X% = 1 TO DRIVES%
  222.      DRV$(X%) = "[-" + MID$(DR$, X%, 1) + "-]"  ' make scroll window list
  223.    NEXT
  224.    CALL SETDISK(OLDDR%, B%)           ' make original default drive active
  225.   END IF
  226. '---------------------------------------------------------------------------
  227. DO
  228.   RTRN% = 0
  229.   CHNGWIND 3                                    ' this scroll window active
  230.   CALL B4SCRL("EOMCRT", "", 0, 0)               ' set exit keys
  231.   RKEY% = -1
  232.   CALL SCRLWIND(DRV$(), I$(), "", DRIVES%, MODE$, RTRN%, LI%, 1, RKEY%, -1, 1, 0)
  233.  
  234.   IF RKEY% = 13 THEN
  235.      ' ENTER or double MOUSE click
  236.  
  237.     ' make selected drivv active
  238.     CALL SETDISK(ASC(MID$(DRV$(RTRN%), 3, 1)) - 64, B%)
  239.  
  240.     ON ERROR GOTO DERROR                                 ' for FINDPATH$
  241.     CALL MESSAGE(1)                                      ' reading message
  242.     PATH$ = FINDPATH$                                    ' get drive path
  243.     ON ERROR GOTO 0
  244.     IF DISKERROR% = 1 THEN                               ' disk error
  245.        DISKERROR% = 0: FINDDRV% = 100: EXIT FUNCTION     ' abort selected
  246.     END IF
  247.     IF PATH$ <> OLDPATH$ THEN
  248.       ' new drive was selected so there is different path
  249.  
  250.       ON ERROR GOTO DERROR                               ' about to read disk
  251.       DISKSIZE ASC(PATH$) - 64, DISKSZE&, FREESPACE&     ' get disk info
  252.       ON ERROR GOTO 0
  253.       IF DISKERROR% = 1 THEN                             ' disk error
  254.          DISKERROR% = 0: FINDDRV% = 100: EXIT FUNCTION   ' abort selected
  255.       END IF
  256.       CHNGWIND 4                                         ' full screen window
  257.       P$ = SPACE$(15): P1$ = P$
  258.       LSET P$ = STR$(DISKSZE&)
  259.       LSET P1$ = STR$(FREESPACE&)
  260.       CALL PRINTW(P$, 17, 21)                            ' print disk bytes
  261.       CALL PRINTW(P1$, 17, 61)                           ' print free bytes
  262.       MODE$ = "NV"                     ' view - exit with scroll bar ereasd
  263.       J% = FINDFILE%                   ' find the files
  264.       J% = FINDSUB%                    ' find the sub directories
  265.       MODE$ = "N"                      ' mode back to not view only
  266.       CALL PRINTFILEINFO               ' erases any displayed file info
  267.       OLDPATH$ = PATH$                 ' to check for future path changes
  268.     END IF
  269.     CALL MESSAGE(0)                    ' erase "reading" message
  270.   END IF
  271. LOOP WHILE RKEY% = 13
  272.  
  273. FINDDRV% = RKEY%                       ' "exit" key in FINDDRV%
  274.  
  275. END FUNCTION
  276.  
  277. FUNCTION FINDFILE% STATIC
  278.  
  279.   RKEY% = 0                                ' no exit key
  280.   CHNGWIND 1                             ' make this the active window
  281.   IF OLDPATH$ <> PATH$ THEN
  282.      ' only if the path has changed
  283.  
  284.      FOUNDFILE$ = ""                     ' new path no selected file
  285.      ON ERROR GOTO DERROR
  286.      CALL FINDDIR(LEFT$(PATH$, 3) + "*.*", "LV", F%)
  287.      IF F% <> 0 THEN VOLUMN$ = DIREC$(F%)
  288.      CALL FINDDIR(PATH$ + SPEC$, "AHSROL", NFIL%)   ' find all files
  289.      ON ERROR GOTO 0
  290.      IF DISKERROR% = 1 THEN              ' was a disk error
  291.        PATH$ = LASTGOODPATH$             ' restore last good path
  292.        DISKERROR% = 0: FINDFILE% = 100: EXIT FUNCTION   ' abort selected
  293.      END IF
  294.      FIL% = NFIL%                     ' FIL% = number of found files
  295.      NUMFILES% = FIL%                 ' NUMFILES% shared with GETFILE
  296.      NR% = 0                          ' tells B4SCRL refresh the scroll wind
  297.      RTRN% = 1                        ' start on first file
  298.      LI% = 1                          ' on line 1
  299.      CLRWIND                          ' clear the scroll window
  300.      REDIM FIL$(FIL%)                 ' make scroll window entries.
  301.      X% = 1
  302.      FOR X% = 1 TO FIL%
  303.       SWAP FIL$(X%), DIREC$(X%)       ' "       "
  304.      NEXT
  305.      ERASE DIREC$                     ' get the memory back
  306.   ELSE                                ' no new path.
  307.      NR% = 1                          ' tell B4SCRL no need to refresh wind
  308.   END IF
  309.      
  310.   IF MODE$ = "N" THEN MODE$ = "SN"
  311.      
  312.   IF FIL% <> 0 THEN
  313.     ' only if there are files
  314.     ' set exit keys - determine if scroll window is refreshed. enter scroll wind
  315.      CALL B4SCRL("OEMCRT", "", 0, NR%)
  316.      SCROLLPRINT "", "", 8, 9, 0, 112
  317.      RKEY% = -1
  318.  
  319.      CALL SCRLWIND(FIL$(), I$(), "", FIL%, MODE$, RTRN%, LI%, 1, RKEY%, -1, 1, 0)
  320.      IF MODE$ = "SN" THEN
  321.        FILENUM% = RTRN%
  322.        FOUNDFILE$ = FIL$(RTRN%)
  323.      END IF
  324.      IF RKEY% = 13 THEN
  325.        ' ENTER selected or double MOUSE click
  326.        CALL PRINTFILEINFO                      ' erase last selected file info
  327.        FOUNDFILE$ = FIL$(RTRN%)                ' new selected file
  328.        P$ = SPACE$(12)
  329.        LSET P$ = FOUNDFILE$
  330.        PRINTW FOUNDFILE$, 5, 8
  331.        P1$ = SPACE$(8)
  332.        LSET P1$ = STR$(DIRINFO(RTRN%).SIZE)
  333.        CALL PRINTW("Bytes:" + P1$, 5, 25)                ' print file size
  334.        CALL PRINTW("Date:" + DIRINFO(RTRN%).DATE, 5, 45) ' print file date
  335.        CALL PRINTW("Time:" + DIRINFO(RTRN%).TIME, 5, 64) ' print file time
  336.      END IF
  337.     END IF
  338.    FINDFILE% = RKEY%                               ' "exit" key in FINDFILE%
  339.    IF MODE$ = "SN" THEN MODE$ = "N"
  340.  
  341. END FUNCTION
  342.  
  343. FUNCTION FINDSUB% STATIC
  344.  
  345. RKEY% = 0                                      ' no exit key
  346. GOSUB GETSUBS                                  ' get any sub directories
  347.  
  348. DO
  349.   CHNGWIND 2                                   ' make this window active
  350.   IF NR% = 0 THEN CLRWIND                      ' clear it if to be refreshed
  351.   IF SUBDIR% <> 0 THEN
  352.      ' sub GETSUBS found some subs
  353.  
  354.      ' set exit keys and determine if window is to be refreshed - enter wind
  355.      RKEY% = -1
  356.      CALL B4SCRL("OEMCRT", "", 0, NR%)
  357.      CALL SCRLWIND(SUBDIR$(), I$(), "", SUBDIR%, MODE$, RTRN%, LI%, 1, RKEY%, -1, 1, 0)
  358.  
  359.      IF RKEY% = 13 THEN
  360.         ' ENTER selected or double MOUSE click
  361.  
  362.         IF SUBDIR$(RTRN%) = ".." THEN
  363.           ' go "up" the dir tree
  364.  
  365.           DO
  366.             PATH$ = LEFT$(PATH$, LEN(PATH$) - 1)
  367.             IF RIGHT$(PATH$, 1) = "\" THEN
  368.               PATH$ = LEFT$(PATH$, LEN(PATH$))
  369.               EXIT DO
  370.             END IF
  371.           LOOP
  372.         ELSE
  373.           'add selected dir to existing to existing path
  374.           PATH$ = PATH$ + SUBDIR$(RTRN%) + "\"
  375.           END IF
  376.           CALL MESSAGE(1)           ' "reading" message
  377.           GOSUB GETSUBS             ' find subs based on selection
  378.           MODE$ = "NV"              ' call to FINDFILE% is view only
  379.           J% = FINDFILE%            ' get the files for the new path
  380.           CALL MESSAGE(0)           ' erase the message
  381.           MODE$ = "N"               ' mode no longer view only
  382.           CALL PRINTFILEINFO        ' erase any exiting file infp
  383.           OLDPATH$ = PATH$
  384.         END IF
  385.   END IF
  386. LOOP WHILE RKEY% = 13
  387.  
  388. FINDSUB% = RKEY%                  ' return with "exit" key in FINDSUB%
  389.  
  390. EXIT FUNCTION
  391.  
  392. '---------------------------------------------------------------------------
  393. ' get any sub directories
  394.  
  395. GETSUBS:
  396.  IF PATH$ <> OLDPATH$ THEN
  397.    ' only if the path has changed
  398.    ON ERROR GOTO DERROR
  399.    CALL FINDDIR(PATH$ + "*.*", "D", F%)   ' find all dirs
  400.    ON ERROR GOTO 0
  401.    IF DISKERROR% = 1 THEN                ' was a disk error
  402.       DISKERROR% = 0: FINDSUB% = 100     ' abort was selected
  403.       PATH$ = OLDPATH$                   ' error, so restore the old path
  404.       EXIT FUNCTION                      ' and get ot
  405.    END IF
  406.    LASTGOODPATH$ = PATH$                 ' save the path
  407.    IF F% > 0 THEN
  408.      ' dirs were found
  409.  
  410.      IF DIREC$(1) = "." THEN
  411.         SUBDIR% = F% - 1: START% = 2     ' not using the root dir
  412.      ELSE
  413.         SUBDIR% = F%: START% = 1         ' path was changed to root dir
  414.      END IF
  415.      REDIM SUBDIR$(SUBDIR%)              ' to hold sub-directories
  416.      Y% = 1
  417.      FOR X% = START% TO F%
  418.         SWAP SUBDIR$(Y%), DIREC$(X%)     ' put sub dirs in SUBDIR%()
  419.         Y% = Y% + 1
  420.      NEXT
  421.      ERASE DIREC$                        ' get the memory back
  422.    ELSE
  423.      SUBDIR% = 0                         ' no sub dirs found
  424.    END IF
  425.    NUMSUBS% = SUBDIR%                    ' for GETFILE%
  426.    NR% = 0                               ' tell B4SCRL to refresh wind
  427.    RTRN% = 1                             ' start on first entry
  428.  ELSE
  429.    NR% = 1                               ' no new path - don't refresh wind
  430.  END IF
  431. RETURN
  432.  
  433. END FUNCTION
  434.  
  435. SUB GETANSDEMO
  436.  
  437.   A% = COL%(95)        ' COLOR GRAY/PURPLE OR B/W
  438.  
  439.   ' MAKE WINDOW 1 AND PRINT IN SAME.
  440.  
  441.   MAKEWIND 1, "@***** Get Answer Window Demonstration *****", 4, 100, 72, 9, A%, 132
  442.   PRINTW "Get answer  windows are used to ask a question and wait for a single", 1, 100
  443.   PRINTW "key response.  They can also be used to pause a program and wait for", 2, 100
  444.   PRINTW "any key to be pressed.  Prompts may be windowed or un-windowed.  The", 3, 100
  445.   PRINTW "area under the prompt or window is restored on exit. If the response", 4, 100
  446.   PRINTW "is displayed, ENTER must be pressed to accept it....", 5, 2
  447.   PRINTINFO " Press Y or N.  Press ENTER to accept...."
  448.  
  449.   ' Y, N or ESC are valid responses.. Displays "N" on entry as ANS$ = "N"
  450.  
  451.   ANS$ = "N"
  452.   GETANS "Are you sure? (Y/N) " + S$, "YN", ANS$, 13, 100, A%, 15, 32
  453.   IF ANS$ <> CHR$(27) THEN
  454.     IF ANS$ = "Y" THEN TEMP$ = "YES" ELSE TEMP$ = "NO"
  455.     GOSUB REPLY
  456.  
  457.     PRINTINFO " Press A, B or C..."
  458.     ' A, B, C or ESC are valid.  No fiels displayed on entry as ABS$ = ""
  459.     ANS$ = ""
  460.     GETANS "Press A, B or C to continue" + S$, "ABC", ANS$, 13, 100, A%, 0, 32
  461.   END IF
  462.   IF ANS$ <> CHR$(27) THEN
  463.     TEMP$ = ANS$: GOSUB REPLY
  464.   END IF
  465.   RSTRWIND 1, 1
  466.   EXIT SUB
  467.  
  468. REPLY:
  469.   PRINTINFO " Press any key....."
  470.   GETANS "Your reply was: " + TEMP$ + ".   Press any key...", "", "", 13, 100, A% + 128, 0, 32
  471. RETURN
  472.  
  473. END SUB
  474.  
  475. SUB GETFILE (P$, F$, RKEY%) STATIC
  476.  
  477.   WASERR% = 0                            ' start no errors
  478.   A% = COL%(31)                          ' color or b/w
  479.   CALL MAKEWIND(4, "@[ Select a file ]", 1, 1, 80, 25, 112, 102)
  480.   OLDDR% = GETDISK%                      ' save existing default drive
  481.   ON ERROR GOTO DERROR
  482.   PATH$ = FINDPATH$                      ' get existing path
  483.   DISKSIZE OLDDR%, DISKSZE&, FREESPACE&  ' and existing disk size/ free space
  484.   ON ERROR GOTO 0
  485.   IF DISKERROR% = 1 THEN                 ' was a disk error
  486.     DISKERROR% = 0                       ' abort was selected
  487.     GOTO GETOUT
  488.   END IF
  489.   CALL PRINTW("DISK BYTES:" + STR$(DISKSZE&), 17, 10)   ' print disk bytes
  490.   CALL PRINTW("FREE BYTES:" + STR$(FREESPACE&), 17, 50) ' print free bytes
  491.   CALL PRINTW("ID:", 3, 2)
  492.   CALL PRINTW("Path:", 4, 2)             ' print in full screen window
  493.   CALL PRINTW("File:", 5, 2)             ' "
  494.   CALL LINEW(18, 1)                      ' "
  495.   CALL LINEW(20, 1)                      ' "
  496.   '-------------------------------------------------------------------------
  497.   ' make the three windows to be used as scroll windows
  498.  
  499.   CALL MAKEWIND(1, "@Files", 10, 10, 16, 9, A%, 101)
  500.   CALL MAKEWIND(2, "@Directories", 10, 36, 16, 9, A%, 101)
  501.   CALL MAKEWIND(3, "@Drives", 10, 61, 10, 9, A%, 101)
  502.  
  503.   '-------------------------------------------------------------------------
  504.   ' print/update scroll windows -- print choicebar
  505.  
  506.   SPEC$ = "*.*"              ' start with all files
  507.   GOSUB UPDATEALL            ' update scroll windows and choice bar
  508.   WASERR% = 0
  509.   '-------------------------------------------------------------------------
  510.   LOOKIN% = 1                ' start in FILE SPEC: input window
  511.  
  512.   ' for info-line
  513.   I$ = " Press ENTER or DOUBLE CLICK MOUSE to select.   Press tab to move."
  514.  
  515. DO
  516.   SELECT CASE LOOKIN%
  517.  
  518.     CASE 1               ' file spec input window
  519.       CALL PRINTINFO(" Enter a file spec. ( EX: *.BAS / *.DOC ).  ENTER accepts - TAB moves.")
  520.       GOSUB GETSPEC
  521.       IF RKEY% = 14 OR RKEY% = 15 THEN LOOKIN% = 2  ' TAB or SHIFT+TAB
  522.     CASE 2               ' files scroll window
  523.       INFOFIXED I$
  524.       GOSUB GETFILES
  525.       IF RKEY% = 15 OR RKEY% = 0 THEN LOOKIN% = 3   ' TAB "view" or no entries
  526.       IF RKEY% = 14 THEN LOOKIN% = 1                ' SHIFT/TAB
  527.       IF RKEY% = 13 THEN RKEY% = 1                  ' SAME AS <OK>
  528.  
  529.     CASE 3               ' directory scroll window
  530.       INFOFIXED I$
  531.       GOSUB GETDIRS
  532.       IF RKEY% = 15 OR RKEY% = 0 THEN LOOKIN% = 4   ' TAB "view" or no entries
  533.       IF RKEY% = 14 THEN LOOKIN% = 2                ' SHIFT/TAB
  534.  
  535.     CASE 4               ' drives scroll window
  536.       INFOFIXED I$
  537.       GOSUB GETDRVS
  538.       IF RKEY% = 15 OR RKEY% = 0 THEN LOOKIN% = 5   ' TAB "view" or no entries
  539.       IF RKEY% = 14 THEN LOOKIN% = 3                ' SHIFT/TAB
  540.  
  541.     CASE 5               ' < OK >, < CANCEL > choicebar
  542.       CALL PRINTINFO(" Select OK to accept or CANCEL to cancel.")
  543.       GOSUB GETCHOICE
  544.       IF RKEY% = 15 OR RKEY% = 0 THEN LOOKIN% = 1   ' TAB or "view"
  545.       IF RKEY% = 14 THEN LOOKIN% = 4                ' SHIFT/TAB
  546.   END SELECT
  547.  
  548.   INFOFIXED ""           ' erase infoline fixed string
  549.  
  550.   ' rkey% = 200 if left mouse button pressed out of window, field or choicebar.
  551.   IF RKEY% = 200 THEN GOSUB PROCESSMOUSE
  552.  
  553. LOOP WHILE RKEY% <> 27 AND RKEY% <> 1  ' do until ESC, < CANCEL > or < OK >
  554.  
  555. SETDISK OLDDR%, J%                ' default drive back to original drive
  556. GETOUT:
  557. P$ = PATH$                        ' returned path
  558. F$ = FOUNDFILE$                   ' returned file
  559. CHNGWIND 4: LINEW 19, 0           ' erase < - OK - >, < CANCEL >
  560. IF F$ <> "" AND RKEY% = 1 THEN
  561.    PRINTW F$, 5, 8
  562.    P1$ = STR$(DIRINFO(FILENUM%).SIZE)
  563.    CALL PRINTW("Bytes:" + P1$, 5, 25)                ' print file size
  564.    CALL PRINTW("Date:" + DIRINFO(FILENUM%).DATE, 5, 45) ' print file date
  565.    CALL PRINTW("Time:" + DIRINFO(FILENUM%).TIME, 5, 64) ' print file time
  566. END IF
  567.  
  568. FOR X% = 1 TO 3: DELWIND X%: NEXT ' delete scroll windows from window mem.
  569. CALL RSTRINPT(0)                  ' deactivate active input wind (FILE SPEC)
  570. ERASE FIL$, SUBDIR$, DIRINFO
  571. EXIT SUB
  572.  
  573. '---------------------------------------------------------------------------
  574. GETDRVS:
  575.   RKEY% = FINDDRV%             ' drive scroll window
  576. RETURN
  577. '---------------------------------------------------------------------------
  578. GETDIRS:
  579.   RKEY% = FINDSUB%             ' directory scroll window
  580. RETURN
  581. '---------------------------------------------------------------------------
  582. GETFILES:
  583.   RKEY% = FINDFILE%            ' files scroll window
  584. RETURN
  585. '---------------------------------------------------------------------------
  586. ' go to scroll window, choicebar or input window if left mouse button is
  587. ' pressed with mouse cursor in same.
  588.  
  589. PROCESSMOUSE:
  590.   DO WHILE LBUTTON% = 1
  591.    IF MOUSEINWIND%(1) > 0 AND NUMFILES% > 0 THEN LOOKIN% = 2: EXIT DO
  592.    IF MOUSEINWIND%(2) > 0 AND NUMSUBS% > 0 THEN LOOKIN% = 3: EXIT DO
  593.    IF MOUSEINWIND%(3) > 0 THEN LOOKIN% = 4: EXIT DO
  594.    IF MOUSEINWIND%(21) > 0 THEN LOOKIN% = 1: EXIT DO
  595.    IF MOUSEROW% = 22 THEN LOOKIN% = 5: EXIT DO
  596.  LOOP
  597. RETURN
  598. '---------------------------------------------------------------------------
  599. GETSPEC:
  600.   OLDSPEC$ = SPEC$
  601.   CALL B4INPT(EXIT$, "")
  602.   CALL INPTWIND("File Spec: ", "A", 4, 100, 5, 112, 112, SPEC$, RKEY%, 0, 1)
  603.   IF SPEC$ = "" THEN SPEC$ = "*.*"
  604.   IF RKEY% <> 27 AND SPEC$ <> OLDSPEC$ THEN
  605.      ' file spec has changed
  606.      RR% = RKEY%                    ' save exit key
  607.      GOSUB UPDATEALL                ' update all scroll windows
  608.      RKEY% = RR%                    ' restore exit key
  609.      IF WASERR% > 74 THEN SPEC$ = OLDSPEC$: WASERR% = 0
  610.   END IF
  611. RETURN
  612. '---------------------------------------------------------------------------
  613. GETCHOICE:
  614.   REDIM C$(2): C$(1) = "- OK -": C$(2) = "CANCEL"
  615.   RKEY% = CHOICEBAR%(C$(), 22, 15, 50, 112, 1, EXIT$)
  616.   IF RKEY% = 2 THEN RKEY% = 27
  617. RETURN
  618. '---------------------------------------------------------------------------
  619. UPDATEALL:
  620.    EXIT$ = "VIEW"   ' view only for choice bar.  enter and exit to display
  621.    GOSUB GETCHOICE
  622.    CALL MESSAGE(1)
  623.    MODE$ = "VN"     ' view scroll windows ( enter-exit ) no scroll bar on exit
  624.    OLDPATH$ = ""    ' scroll windows update when OLDPATH$ <> PATH$
  625.    GOSUB GETFILES
  626.    IF WASERR% = 0 THEN
  627.      GOSUB GETDIRS
  628.      GOSUB GETDRVS
  629.    END IF
  630.    CALL MESSAGE(0)
  631.  
  632.   ' scroll windows/ choicebar/ input window will be active when entered.
  633.  
  634.    MODE$ = "N"        ' exit scroll windows with scroll bar erased.
  635.    EXIT$ = "OTE"       ' mouse out of/ TAB / SHIFT TAB exit
  636.                       ' CHOICEBAR and INPTWIND.
  637.  
  638.    CALL PRINTFILEINFO
  639.    OLDPATH$ = PATH$   ' no scroll windows update if OLDPATH$ = PATH$
  640.  
  641. RETURN
  642. '---------------------------------------------------------------------------
  643.  
  644. END SUB
  645.  
  646. SUB MESSAGE (M%)
  647.   IF M% = 1 THEN
  648.     CALL MAKEWIND(5, "", 4, 100, 38, 3, 15, 2)
  649.     CALL PRINTW("Reading directory tree....", 1, 100)
  650.   ELSE
  651.     RSTRWIND 5, 1
  652.   END IF
  653. END SUB
  654.  
  655. SUB MULTINPUTDEMO2
  656.      RSTRINFO 0                               ' RESTORE AREA UNDER INFOLINE
  657.      INFOLINE 0, 0, 0, 15
  658.      C& = GETCUR&
  659.  
  660.      A% = COL%(23): IF A% = 15 THEN A% = 112  ' A%= COLOR -- B/W
  661.      STATIC CHNGRTRN$(), ONSEARCH%, NOTFIRSTPASS%, HOTCOL%
  662.      IF NOTFIRSTPASS% = 0 THEN
  663.         REDIM CHNGRTRN$(11)                       ' FOR "CHANGE" MULTINPT
  664.         CHNGRTRN$(3) = "[ ] Match Upper/Lowercase"
  665.         CHNGRTRN$(4) = "[ ] Whole Word"
  666.         CHNGRTRN$(5) = "(" + CHR$(4) + ") 1. Active Window"
  667.         CHNGRTRN$(6) = "( ) 2. Current Module"
  668.         CHNGRTRN$(7) = "( ) 3. All Modules"
  669.         CHNGRTRN$(8) = "< Find and Verify >"
  670.         CHNGRTRN$(9) = "< Change All >"
  671.         CHNGRTRN$(10) = "< Cancel >"
  672.         CHNGRTRN$(11) = "< Help >"
  673.         ONSEARCH% = 5
  674.         NOTFIRSTPASS% = 1
  675.      END IF
  676.  
  677.      ' PRINT THE INPUT SCREEN IN WINDOW 15
  678.  
  679.      MAKEWIND 15, "@Multi-field Input.  Extensive use of fixed choice fields.", 1, 1, 80, 25, A%, 102
  680.      MAKEWIND 0, "@ Change ", 6, 100, 59, 15, 112, 11
  681.      LINEW 12, 1
  682.  
  683.      IF DEMONOHI% = 1 THEN HOTCOL% = 7 ELSE HOTCOL% = 127
  684.  
  685.      CALL BOXW(1, 14, 43, 3, 1)
  686.      PRINTWHOT "Find What:", 2, 2, 1, HOTCOL%
  687.  
  688.      CALL BOXW(4, 14, 43, 3, 1)
  689.      PRINTWHOT "Change To:", 5, 2, 8, HOTCOL%
  690.  
  691.      CALL BOXW(7, 32, 25, 5, 1)
  692.      PRINTW " Search ", 7, 40
  693.      TOFLD% = 1                   ' START IN FIELD ONE.
  694.      FROMFLD% = 0                 ' UPDATE ALL FIELDS.
  695.  
  696. CHANGE:
  697.      ' CURSOR TO FIELD 5 TO 7.  THIS IS THE "SEARCH" SCOPE
  698.  
  699.      IF TOFLD% > 4 AND TOFLD% < 8 THEN
  700.          TOFLD% = ONSEARCH%
  701.      END IF
  702.  
  703.      SELECT CASE TOFLD%                         ' PU INSTRUCTIONS IN A$
  704.        CASE 1, 2                                ' ON ACTIVE (TOFLD%) FIELD.
  705.          A$ = "Input data."
  706.        CASE 3, 4
  707.          A$ = "Press SPACE BAR to change."
  708.        CASE 5, 6, 7
  709.          A$ = "Press UP/DOWN arrow keys to change."
  710.        CASE 8 TO 11
  711.          A$ = "Press SPACE BAR/ENTER to select."
  712.        CASE ELSE
  713.          A$ = ""
  714.      END SELECT
  715.      A$ = A$ + " TAB = next field. ESC/ENTER exits."
  716.  
  717.      PRINTINFO " " + A$
  718.  
  719.      ' GET MULTIFIELD INPUT.  TOFLD% = THE ACTIVE FIELD ON ENTRY.  FROMFLD%
  720.      ' REPRESENTS THE FIELD WHICH IS ACTIVE ON EXIT
  721.  
  722.      MULTINPT 3, TOFLD%, "U", FROMFLD%, RK%, CHNGRTRN$(), 0
  723.  
  724.      IF RK% = 50 THEN RK% = 100                  ' key character selection
  725.      IF RK% = 300 THEN GOTO CHANGE               ' mouse release out of field
  726.      IF RK% = 100 THEN FROMFLD% = TOFLD%
  727.  
  728.      IF FROMFLD% > 4 AND FROMFLD% < 8 THEN        ' Cursor from search window.
  729.        IF RK% = 16 OR RK% = 19 OR RK% = 100 THEN  ' Was UP or DOWN arrow.
  730.          IF RK% < 100 THEN
  731.            IF TOFLD% = 4 THEN TOFLD% = 7          ' Keep cursor in the
  732.            IF TOFLD% = 8 THEN TOFLD% = 5          ' search window.
  733.          END IF
  734.          MID$(CHNGRTRN$(ONSEARCH%), 2, 1) = " "   ' make it a blank
  735.          FROMFLD% = ONSEARCH%                     ' blank this field
  736.          ONSEARCH% = TOFLD%
  737.          MID$(CHNGRTRN$(TOFLD%), 2, 1) = CHR$(4)  ' Only one choice is permitted.
  738.         END IF
  739.         IF RK% = 14 THEN TOFLD% = 4               ' Was SHIFT TAB
  740.         IF RK% = 15 THEN TOFLD% = 8               ' Was TAB
  741.      END IF
  742.  
  743.      SELECT CASE RK%
  744.    
  745.         ' RETURN CAUSED EXIT.
  746.  
  747.         CASE 13
  748.           PICK$ = "ENTER"
  749.           IF FROMFLD% >= 7 THEN PICK$ = CHNGRTRN$(FROMFLD%)
  750.           GOTO PRINTRESULTS
  751.  
  752.         ' ESC CAUSED EXIT.
  753.         CASE 27
  754.           PICK$ = "ESC"
  755.           GOTO PRINTRESULTS
  756.  
  757.         ' SPACE BAR CAUSED EXIT.
  758.         CASE 32, 100
  759.           IF FROMFLD% = 3 OR FROMFLD% = 4 THEN     ' EXITING FIELD 3 OR 4
  760.              IF MID$(CHNGRTRN$(FROMFLD%), 2, 1) = " " THEN
  761.                 X$ = "X"
  762.              ELSE
  763.                 X$ = " "
  764.              END IF
  765.              MID$(CHNGRTRN$(FROMFLD%), 2, 1) = X$
  766.  
  767.              'IF CHNGRTRN$(FROMFLD%) = "" THEN CHNGRTRN$(FROMFLD%) = "X" ELSE CHNGRTRN$(FROMFLD%) = ""
  768.           ELSEIF FROMFLD% > 7 THEN              ' EXITING FIELD 8,9,10,11
  769.              PICK$ = CHNGRTRN$(FROMFLD%)
  770.              GOTO PRINTRESULTS
  771.           ELSE                                  ' FIELD 5,6,7
  772.           'NOTHING
  773.           END IF
  774.          
  775.         CASE ELSE
  776.      END SELECT
  777.  
  778.      GOTO CHANGE
  779.  
  780. PRINTRESULTS:
  781.  
  782.      ' PRINT THE RESULTS IN WINDOW 1.  GETANS WAITS FOR ANY KEY.
  783.      REDIM T$(9)
  784.      T$(1) = SPACE$(55)
  785.      T$(2) = " Find What: = " + CHNGRTRN$(1)
  786.      T$(3) = " Change To:  = " + CHNGRTRN$(2)
  787.      IF MID$(CHNGRTRN$(3), 2, 1) = " " THEN S$ = "No" ELSE S$ = "Yes"
  788.      T$(4) = " Match Upper/Lowercase = " + S$
  789.      IF MID$(CHNGRTRN$(4), 2, 1) = " " THEN S$ = "No" ELSE S$ = "Yes"
  790.      T$(5) = " Whole Word = " + S$
  791.      SELECT CASE ONSEARCH%
  792.        CASE 5
  793.         S$ = "Active Window"
  794.        CASE 6
  795.         S$ = "Current Module"
  796.        CASE ELSE
  797.         S$ = "All Modules"
  798.      END SELECT
  799.      T$(7) = " Search Criteria = " + S$
  800.      T$(9) = " Exit was via ...." + PICK$
  801.      REDIM Choice$(1)
  802.      Choice$(1) = "OK"
  803.      PRINTINFO " Select OK to proceed..........."
  804.  
  805.      A% = CHOICEWIND%("@Results", T$(), Choice$(), 6, 11, 112, 15, 1, 111)
  806.  
  807.      SETCUR (C&)
  808.  
  809.      ' RESTORING WINDOW 15 RESTORES THE SCREEN TO IT'S
  810.      ' STATE BEFORE THIS SUB WAS CALLED.
  811.  
  812.      RSTRWIND 15, 1
  813.      INFOLINE 0, 0, 0, COL%(31)
  814.  
  815. END SUB
  816.  
  817. SUB MULTSETUP (SCRN%)
  818.  
  819. '-- set up mult-input screens 1 to 4
  820.  
  821. CALL SETINPT(1, 25, "01", -1)     ' Mult sample 1
  822. CALL SETINPT(2, 25, "EO", 15)     ' control panel
  823. CALL SETINPT(3, 25, "E", 15)      ' look familiar ( find / change )
  824. CALL SETINPT(4, 25, "10", -1)     ' order form
  825.  
  826. '-- read data for mult-input screen 1 to 4
  827.  
  828. RESTORE MULTDATA:                 ' DATA is in DEMPAT2.BAS module level code
  829. FOR S% = 1 TO 4
  830.   FOR F% = 1 TO 30
  831.     READ CD%: IF CD% = 9999 THEN EXIT FOR
  832.     READ R%                      ' field row
  833.     READ C%                      ' field column
  834.     READ W%                      ' field withh
  835.     READ BC%                     ' field in-active color
  836.     READ AC%                     ' field active color
  837.     READ MC%                     ' field  "mouse active" color
  838.     READ HP%                     ' field key character position ( if used )
  839.     READ CP%                     ' field cursor position ( if used )
  840.     READ BK%                     ' field brackets ( 1=yes  0=no )
  841.     READ RES$                    ' field restrict string (if used)
  842.     READ GOTO$                   ' field goto character ( if used )
  843.  
  844.     '-- "set up fields for mult-input screens 1 to 4
  845.  
  846.     CALL MAKEFIELD(S%, F%, CD%, R%, C%, W%, BC%, AC%, MC%, RES$, GOTO$, HP%, CP%, BK%)
  847.   NEXT
  848. NEXT
  849.  
  850. END SUB
  851.  
  852. SUB PRINTFILEINFO
  853.   ' print the path in the full screen window
  854.  
  855.   CALL CHNGWIND(4)                ' make full screen window active
  856.   P$ = SPACE$(64)
  857.   V$ = SPACE$(12)
  858.   LSET V$ = VOLUMN$
  859.   LSET P$ = PATH$
  860.   CALL PRINTW(P$, 4, 8)           ' print the path in it
  861.   CALL PRINTW(V$, 3, 6)           ' print the VOLUMN
  862.   IF OLDPATH$ <> PATH$ THEN       ' if it's a new path
  863.     P$ = SPACE$(12)               ' erase all existing file info
  864.     CALL PRINTW(P$, 5, 8)         ' " "
  865.   END IF
  866. END SUB
  867.  
  868.