home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib33b.dsk / SEARCH.DEMO.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  56 lines

  1. 10  REM  **********************
  2. 20  REM  *    SEARCH.DEMO     *
  3. 30  REM  *  BY BOB SHOFTSTALL *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  TEXT : HOME : INVERSE : PRINT " SEARCH DEMO ";: NORMAL 
  9. 90  PRINT " BY BOB SHOFTSTALL": PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": PRINT :X$ = "TO CONTINUE"
  10. 100 KEY =  -16384:KS =  -16368: REM  * KEYBOARD CHARACTER AND STROBE
  11. 110 Q$ =  CHR$(34): REM  * QUOTATION MARK
  12. 120 SEARCH = 768
  13. 130  ONERR  GOTO 490
  14. 140  PRINT  CHR$(4)"BLOAD INSEARCH"
  15. 150  GOSUB 460
  16. 160  REM  * TEST ROUTINE
  17. 170  PRINT "HERE'S THE TEST:": PRINT :X$ = "TO SEARCH"
  18. 180 A$ = "THIS IS A TEST OF INSEARCH. ENTER ANY SUB-STRING OF THIS STRING. THEN ALL OCCURRENCES WILL BE DETECTED AND THEIR POSITIONS LISTED.": GOSUB 310
  19. 190  PRINT : INPUT "ENTER SUB-STRING (B$) >>";B$: PRINT : PRINT 
  20. 200 Z = 1:X = 0: REM  FIRST POSITION AND FOUND TOTAL
  21. 210  CALL SEARCH,A$,B$,Z
  22. 220  IF X  THEN 250: REM  SKIP NEXT TWO LINES IF MULTIPLE OCCURENCES
  23. 230  IF Z = 0  THEN  PRINT  CHR$(7);"B$ IS NOT A SUB-STRING OF A$": GOTO 290
  24. 240  IF Z >0  THEN  PRINT "B$ IS A SUBSTRING AT POSITION(S)": PRINT : GOTO 260
  25. 250  IF Z = 0  THEN 280
  26. 260  IF  PEEK(36) > PEEK(33) -6  THEN  PRINT : PRINT : REM  LET'S NOT WRAP AROUND
  27. 270  PRINT "  ";Z;:Z = Z +1:X = X +1: GOTO 210: REM  START NEXT POSITION
  28. 280  PRINT : PRINT : PRINT Q$;B$;Q$;" WAS FOUND ";X;" TIME";: IF X >1  THEN  PRINT "S"
  29. 290  PRINT : GOSUB 460: GOTO 170: REM  GET KEYPRESS AND DO IT AGAIN
  30. 300  REM  * TEXT OUTPUT FORMATTING ROUTINE
  31. 310 START = 1:WIDTH =  PEEK(33): REM  TEXT SCREEN WIDTH
  32. 320  IF WIDTH >70  THEN  PRINT 
  33. 330  IF  LEN(A$) <WI +1  THEN WI =  LEN(A$): GOTO 380
  34. 340  IF  MID$ (A$,ST +WI,1) = " "  THEN 380
  35. 350 WI = WI -1
  36. 360  IF WI = 1  THEN WI =  PEEK(33): GOTO 340
  37. 370  GOTO 340
  38. 380  PRINT  MID$ (A$,ST,WI);
  39. 390  IF WI < > PEEK(33)  THEN  PRINT 
  40. 400 ST = ST +WI +1
  41. 410  IF ST > LEN(A$)  THEN  PRINT : RETURN 
  42. 420 WI =  PEEK(33)
  43. 430  IF ST +WI -1 > LEN(A$)  THEN WI =  LEN(A$) -ST +1: GOTO 380
  44. 440  GOTO 340
  45. 450  REM  * WAIT FOR KEY PRESS
  46. 460  VTAB 24: INVERSE : PRINT  SPC( 2);"RETURN--";X$; SPC( 3);" ESCAPE--EXIT"; SPC( 2);: NORMAL : WAIT KEY,128: ON  PEEK(KEY) = 155 GOTO 480: GET Z$
  47. 470  HOME : PRINT : RETURN 
  48. 480 X =  PEEK(KS): HOME : END : REM  CLEAR KEYBOARD AND SCREEN
  49. 490  POKE 216,0:E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): CALL  -3288
  50. 500  HOME : VTAB 10
  51. 510  IF E = 6  THEN  PRINT "FILE NOT FOUND ON THIS DISK": GOTO 540
  52. 520  IF E = 8  THEN  PRINT "I/O ERROR--CHECK DRIVE DOOR": GOTO 540
  53. 530  PRINT "ERROR "E" IN LINE "EL
  54. 540  PRINT "RETURN TO TRY AGAIN, ESCAPE TO QUIT";: GET Z$
  55. 550  PRINT : ON Z$ < > CHR$(27) GOTO 130
  56. 560  END