50 CLEAR 300          ' SUCKOUT! SEARCHES FOR STRINGS IN TEXT
100 GOSUB 1000     ' INITIALIZE
110 GOSUB 1200          ' GET USER NAME
120 GOSUB 1400          ' GET FILE NAME
130 GOSUB 1600          ' VIDEO OR PRINTER
140 GOSUB 1800          ' GET TARGET WORD
150 GOSUB 3000          ' PRINT HEADER IF PRINTER IS ACTIVATED
160 GOSUB 2000          ' FIND LINES WITH TARGETS IN THEM
170 GOSUB 3200          ' PRINT TAIL OF SEARCH IF PRINTER ON
180 GOTO 120
190 REM
1000 CLS           : REM     INITIALIZE
1010 FOR I= 0 TO 1023 STEP 15
1020 PRINT @ I,"SUCKOUT!";
1030 NEXT I
1040 NM$="RICK"
1050 PROG$=""
1060 EX$="C"
1070 A$="REM"
1080 ON ERROR GOTO 5000
1090 RETURN
1100 REM
1200 REM          GET USER NAME IF NEW
1210 PRINT:PRINT : PRINT"IS YOUR NAME ";NM$;"?"
1220 GOSUB 4000
1230 IF M=1 THEN 1260
1240 PRINT : PRINT"OK, WHAT IS YOUR NAME, THEN";
1250 INPUT NM$
1260 RETURN
1400 REM          GET FILE NAME OF TEXT UPON WHICH TO OPERATE
1410 IF PROG$="" THEN 1450
1412 PRINT:PRINT"DO YOU STILL WANT TO SEARCH THROUGH TEXT?"
1414 GOSUB 4000
1416 IF M=0 THEN END
1420 PRINT : PRINT NM$;", DO YOU STILL WANT TO WORK WITH ";PROG$;"?"
1430 GOSUB 4000
1440 IF M=1 THEN 1470
1450 PRINT NM$;" WHAT FILE NAME CAN I WORK ON";
1460 INPUT PROG$
1470 IF INSTR(PROG$,"/TXT")<>0 THEN 1500
1480 PRINT NM$;", FILE NAME MUST HAVE TXT EXTENSION"
1490 GOTO 1420
1500 RETURN
1600 REM          SEND OUTPUT TO PRINTER, VIDEO,, OR BOTH
1610 PRINT:PRINT NM$;", RIGHT NOW THE OUTPUT DEVICE IS ";
1620 IF EX$="C" THEN PRINT "CRT ONLY."
1630 IF EX$="P" THEN PRINT "PRINTER ONLY."
1640 IF EX$="B" THEN PRINT "BOTH CRT AND PRINTER."
1650 PRINT "IS THIS DESIGNATION OK WITH YOU?"
1660 GOSUB 4000
1670 IF M=1 THEN 1760
1680 PRINT:PRINT"OK, ";NM$;", WHAT WOULD YOU LIKE IT TO BE?"
1690 PRINT"TYPE INITIAL ONLY:  CRT,  PRINTER,  BOTH     "
1700 K$=INKEY$ : IF K$="" THEN 1700
1710 IF K$="C" THEN EX$="C" : IF K$="P" THEN EX$="P"
1720 IF K$="P" THEN EX$="P"
1730 IF K$="B" THEN EX$="B"
1740 IF K$<>"C" AND K$<>"P" AND K$<>"B" THEN 1700
1750 GOTO 1610
1760 RETURN
1800 REM          GET TARGET WORD FOR WHICH TO SEARCH
1810 PRINT:PRINT NM$;" RIGHT NOW THE TARGET WORD IS ";A$;"."
1820 PRINT"IS THIS OK WITH YOU?"
1830 GOSUB 4000
1840 IF M=1 THEN 1870
1850 PRINT:PRINT"OK, ";NM$;", FOR WHICH WORD DO I LOOK";
1860 INPUT A$
1870 RETURN
2000 REM          OPEN THE FILE IF POSSIBLE
2030 PRINT:PRINT"LOOKING FOR ";PROG$
2040 OPEN "I",1,PROG$
2050 PRINT"FOUND ";PROG$;", NOW I'M SEARCHING FOR ";A$:PRINT
2060 IF EOF(1) THEN 2120
2070 LINE INPUT#1,T$
2080 IF EX$="B" THEN GOSUB 2700     ' PRINT LINE ON BOTH
2090 IF EX$="C" THEN GOSUB 2800     ' PRINT LINE ON CRT
2100 IF EX$="P" THEN GOSUB 2900     ' PRINT LINE ON PRINTER
2110 GOTO 2060
2120 CLOSE
2130 PRINT:PRINT "OK, ";NM$;", I HAVE CLOSED THE FILE ";PROG$
2140 PRINT : PRINT : RETURN
2700 REM          PRINT RESULTS ON BOTH CRT AND PRINTER
2710 GOSUB 2800   ' PRINT ON CRT
2720 GOSUB 2900   ' PRINT IN PRINTER
2730 RETURN
2740 REM
2800 REM          SEARCH FOR TARGET WORD, PRINT LINE ON CRT
2810 IF INSTR(T$,A$) THEN PRINT T$
2820 RETURN
2830 REM
2900 REM          SEARCH FOR TARGET WORD, PRINT LINE ON PRINTER
2920 IF INSTR(T$,A$) THEN LPRINT T$
2930 RETURN
2940 REM
3000 REM          PRINT HEADINGS ON LINE PRINTER
3005 IF EX$="C" THEN RETURN
3010 IF PEEK(&H37E8)=191 THEN PRINT "LINE PRINTER NOT READY!"
3020 LPRINT STRING$(1,138):LPRINT STRING$(80,45)     ' 3 BLANK LINES
3030 LPRINT"SEARCHING THROUGH ";PROG$;" FOR ";
3040 LPRINT CHR$(34);A$;CHR$(34)
3050 LPRINT STRING$(2,138)
3060 RETURN
3200 REM          PUT TAIL ON LINE PRINTER SEARCH RESULTS
3205 IF EX$="C" THEN RETURN
3210 LPRINT STRING$(1,138)     ' BLANK LINE
3220 LPRINT"END OF SEARCH THROUGH ";PROG$;" FOR ";CHR$(34);A$;CHR$(34)
3230 LPRINT STRING$(2,138)     ' 2 BLANK LINES
3240 LPRINT STRING$(80,45)     ' DRAW A LINE
3250 LPRINT STRING$(1,138)     ' BLANK LINE
3260 RETURN
4000 REM          LOOK FOR YES OR NO ANSWER: YES -> M=1
4010 M=0
4020 K$=INKEY$ : IF K$="" THEN 4020
4030 IF K$<>"Y" THEN 4050
4040 M=1 : GOTO 4060
4050 IF K$<>"N" THEN 4020
4060 RETURN
4999 REM          RECOVER FROM BAD FILENAMES
5000 IF ERR/2+1<>53 AND ERR/2+1<>64 THEN 5050
5010 PRINT:PRINT"SORRY, ";NM$;", I COULDN'T FIND ";PROG$
5020 PRINT "HERE IS A LIST OF ALL FILES ON THIS DISK:"
5030 GOSUB 6000     'PRINT DIRECTORY
5040 RESUME 120
5050 STOP
6000 REM          FUTURE MACHINE-LANGUAGE SUBROUTINE TO
6010 REM          GET DIRECTORY FROM DISK AND PRINT IT
6020 PRINT"SURPRISE! I DON'T YET KNOW HOW TO PRODUCE"
6030 PRINT"THAT LIST FROM  'BASIC'."
6040 RETURN
