home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 September / Image.iso / pcplus / handson / wilfw107 / pathfind.bas < prev    next >
Encoding:
BASIC Source File  |  1995-06-22  |  3.9 KB  |  209 lines

  1. DECLARE SUB Rfield (Field$, Min%, Max%, Permitted$)
  2. DECLARE SUB InPath (Field$)
  3. DIM SHARED BAD$
  4. ON ERROR GOTO RESUMENEXT
  5. RESUMENEXT:
  6.  IF ERR THEN
  7.   BAD$ = "X"
  8.   RESUME NEXT
  9.  END IF
  10.  
  11.  
  12.  
  13. CLS
  14. SCREEN 9
  15. COLOR 4, 3
  16. PRINT SPACE$(30); "P A T H F I N D E R"
  17. PRINT
  18. PRINT SPACE$(10); "Your PATH is "; UCASE$(ENVIRON$("PATH"))
  19. PRINT
  20. DO
  21.  LOCATE , 3
  22.  COLOR 14
  23.  CALL Rfield(File$, 0, 11, "*C")
  24.  I% = LEN(File$)
  25.  IF LEN(File$) THEN
  26.   CALL InPath(File$)
  27.   LOCATE , 20
  28.   COLOR 8
  29.   IF File$ <> "" THEN
  30.    PRINT "Found at ";
  31.    COLOR 14
  32.    PRINT File$
  33.   ELSE
  34.    PRINT "Not found in path"
  35.   END IF
  36.  END IF
  37. LOOP WHILE I%
  38.  
  39. SYSTEM
  40.  
  41.  
  42. SUB InPath (Field$)
  43.  
  44.  x$ = ".;" + ENVIRON$("PATH")
  45.  IF RIGHT$(x$, 1) <> ";" THEN x$ = x$ + ";"
  46.  I% = 1
  47.  DO
  48.   J% = INSTR(I%, x$, ";")
  49.   IF J% THEN
  50.    Y$ = UCASE$(MID$(x$, I%, J% - I%))
  51.    I% = J% + 1
  52.    IF RIGHT$(Y$, 1) <> "\" THEN Y$ = Y$ + "\"
  53.    F$ = Y$ + Field$
  54.    BAD$ = ""
  55.    OPEN "I", 1, F$
  56.    IF BAD$ = "" THEN
  57.     CLOSE 1
  58.     EXIT DO
  59.    END IF
  60.    F$ = ""
  61.   END IF
  62.  LOOP WHILE J%
  63.  BAD$ = ""
  64.  Field$ = F$
  65.  
  66.  
  67. END SUB
  68.  
  69. SUB Rfield (Field$, Min%, Max%, Permitted$)
  70.  
  71. ' locate the field on the screen
  72. atRow% = CSRLIN
  73. atCol% = POS(x)
  74.  
  75. ' clear the field on the screen
  76. Field$ = ""
  77. PRINT CHR$(219); SPACE$(Max%);
  78.  
  79. ' set the brake and loop until done
  80. Brake% = 1
  81.  
  82. WHILE Brake%
  83.  
  84. ' get a keystroke
  85.  x$ = ""
  86.  WHILE LEN(x$) = 0
  87.   x$ = INKEY$
  88.  WEND
  89.  
  90. ' convert to uppercase if specified
  91.  IF INSTR(Permitted$, "C") THEN x$ = UCASE$(x$)
  92.  oldLen% = LEN(Field$)
  93.  
  94. ' test for permitted keystroke
  95.  Good% = 0
  96.  IF INSTR(Permitted$, ".") THEN
  97.   IF x$ = "." THEN
  98.    IF INSTR(Field$, ".") = 0 THEN Good% = 1
  99.   END IF
  100.  END IF
  101.  IF INSTR(UCASE$(Permitted$), "N") THEN
  102.   IF INSTR("0123456789", x$) THEN Good% = 1
  103.  END IF
  104.  IF INSTR(UCASE$(Permitted$), "S") THEN
  105.   IF x$ = " " THEN Good% = 1
  106.  END IF
  107.  IF INSTR(UCASE$(Permitted$), "X") THEN
  108.   IF INSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZ", UCASE$(x$)) THEN
  109.    Good% = 1
  110.   END IF
  111.  END IF
  112.  IF INSTR(UCASE$(Permitted$), "Y") THEN
  113.   IF INSTR("YyNy", x$) THEN Good% = 1
  114.  END IF
  115.  
  116. '************************
  117. ' NEW CODE
  118.  
  119.  IF INSTR(Permitted$, "*") THEN
  120.   IF x$ = CHR$(8) OR x$ = CHR$(13) OR x$ = CHR$(27) THEN
  121.   ELSE
  122.    Good% = 1
  123.   END IF
  124.  END IF
  125. '
  126. ' END NEW CODE
  127. '************************
  128.  
  129.  IF Good% THEN
  130.   Field$ = Field$ + x$
  131.   IF INSTR(Field$, ".") THEN
  132.    NewMax% = Max% + 1
  133.   ELSE
  134.    NewMax% = Max%
  135.   END IF
  136.   Field$ = MID$(Field$, 1, NewMax%)
  137.  END IF
  138.  
  139. ' handle Bkspace
  140.  IF ASC(x$) = 8 AND LEN(Field$) THEN
  141.   Field$ = MID$(Field$, 1, LEN(Field$) - 1)
  142.  END IF
  143.  
  144. ' calculate significant digits
  145.  Signif$ = Field$ + "X"
  146.  WHILE INSTR(" 0", MID$(Signif$, 1, 1))
  147.   Signif$ = MID$(Signif$, 2)
  148.  WEND
  149.  IF INSTR(Signif$, ".") THEN
  150.   SignifLen% = LEN(Signif$) - 2
  151.  ELSE
  152.   SignifLen% = LEN(Signif$) - 1
  153.  END IF
  154.  
  155. ' handle Enter
  156.  IF ASC(x$) = 13 AND SignifLen% >= Min% THEN
  157.   oldLen% = LEN(Field$) + 1
  158.   Brake% = 0
  159.  END IF
  160.  
  161. ' handle Esc
  162.  IF ASC(x$) = 27 THEN
  163.   LOCATE atRow%, atCol%
  164.   PRINT CHR$(219); SPACE$(Max%);
  165.   Field$ = ""
  166.   IF INSTR(UCASE$(Permitted$), "E") THEN
  167.    RETURN
  168.   END IF
  169.  END IF
  170.  
  171. ' reprint if change, or beep if no change
  172.  IF oldLen% = LEN(Field$) THEN
  173.   BEEP
  174.  ELSE
  175.   LOCATE atRow%, atCol%
  176.   IF INSTR(UCASE$(Permitted$), "P") THEN
  177.    PRINT STRING$(LEN(Field$), 254); CHR$(219); " ";
  178.   ELSE
  179.    PRINT Field$; CHR$(219); " ";
  180.   END IF
  181.  END IF
  182.  
  183. ' check for auto-Enter
  184.  IF INSTR(UCASE$(Permitted$), "A") THEN
  185.   IF SignifLen% = Max% THEN
  186.    Brake% = 0
  187.   END IF
  188.  END IF
  189. WEND
  190.  
  191. ' justify if required
  192. IF INSTR(UCASE$(Permitted$), "J") THEN
  193.  WHILE MID$(Field$, 1, 1) = "0"
  194.   Field$ = MID$(Field$, 2)
  195.  WEND
  196.  Field$ = RIGHT$(SPACE$(NewMax%) + Field$, NewMax%)
  197. END IF
  198.  
  199. ' reprint, deleting the cursor
  200. LOCATE atRow%, atCol%
  201. IF INSTR(UCASE$(Permitted$), "P") THEN
  202.  PRINT STRING$(LEN(Field$), 254); " ";
  203. ELSE
  204.  PRINT Field$; " ";
  205. END IF
  206.  
  207. END SUB
  208.  
  209.