10  IF  ERROR  THEN 320
20  REM HELP - WRITTEN BY DAVID SHAYER  SMHS  3/27/80
30  REM
40  REM FILE FORMAT - A STANDARD ENTRY IN THE FILE 'HELPF'
50  REM
60  REM NAME OF PROGRAM
70  REM SUBJECT
80  REM DESCRIPTION
90  REM DESCRIPTION
100  REM NULL STRING
110  REM
120  REM THE NAME CAN ONLY BE 6 CHARACTERS
130  REM THE SUBJECT NAME SHOULDN'T BE MORE THAN 11 CHARACTERS
140  REM THE DESCRIPTION CAN BE AS MANY LINES AS NEEDED, BUT
150  REM EACH LINE SHOULD BE NO  LONGER  THAN  50 CHARACTERS.
160  REM IT IS VERY VERY VERY IMPORTANT THAT NO LINE IS MORE
170  REM THAN 50 CHARACTERS LONG.
180  REM THE LAST ENTRY MUST BE A NULL STRING, WHICH TELLS
190  REM THE PROGRAM THAT THE ENTRY IS DONE.
200  REM
210  B=BRK(0)
215  PRINT LIN(1);"Welcome to the Educational Library."
217  PRINT "Type '//STOP' to exit."
220  DIM A$[255],B$[255],C$[255],T$[72]
230  FILES *HELPF
240  SYSTEM T$,"TIM"
250  IF T$[3,4]="00" THEN 1480
260  REM
270  PRINT LIN(1);"Option (1-5 or ?): ";
280  IF  ERROR  THEN 320
290  LINPUT A$
300  A$=UOS$(A$)
310  IF POS("//SSTOEXIBYE",A$[1,3])=0 THEN 330
315  PRINT LIN(1);"Thank you for using the Educational Library."
317  IF T$[3,4]="00" THEN 2660
320  SYSTEM X,"BYE"
330  IF A$[1,3]="//H" THEN 340
335  IF A$[1,1]#"?" THEN 400
340  PRINT LIN(1);"Available options:";LIN(1)
345  PRINT "(1) - List all programs with descriptions"
350  PRINT "(2) - List all programs of a given subject"
355  PRINT "(3) - Explanation of a specific program"
360  PRINT "(4) - List the subjects currently available"
365  PRINT "(5) - Execute a specific program"
370  PRINT LIN(1);"To exit, type '//STOP' and press the 'RETURN' key.";LIN(1)
390  GOTO 270
400  CONVERT A$ TO C,1594
410  READ #1,1
420  GOSUB C OF 440,630,920,1190,1320
430  GOTO 270
440  REM ----- LIST OF ALL PROGRAMS -----
450  IF  END #1 THEN 610
460  PRINT LIN(3)
470  A=0
480  READ #1;A$,B$
490  A=A+1
500  IF A/10#INT(A/10) THEN 560
510  PRINT LIN(1);"Continue (Y/N)? ";
520  LINPUT C$
530  PRINT 
540  C$=UOS$(C$)
550  IF C$[1,1]="N" THEN 620
560  PRINT A$;TAB(6);"-";B$;TAB(18);":";
570  READ #1;A$
580  IF LEN(A$)=0 THEN 480
590  PRINT TAB(20);A$
600  GOTO 570
610  PRINT LIN(3)
620  RETURN 
630  REM ----- LIST OF CERTAIN SUBJECT -----
640  PRINT "Subject (or '?'): ";
650  LINPUT C$
660  C$=UOS$(C$)
670  IF POS("//SSTOEXIBYE",C$[1,4])=0 THEN 690
675  IF T$[2,4]="00" THEN 2660
680  SYSTEM X,"BYE"
690  IF C$[1,3]="//H" THEN 700
695  IF C$[1,1]#"?" THEN 730
700  PRINT LIN(1);"Enter the subject for which you want a list of corresponding"
705  PRINT "programs.  For a list of subjects currently available, press"
710  PRINT "'RETURN' and then enter command 4.  Type '//STOP' to exit."
715  PRINT 
720  GOTO 640
730  IF LEN(C$)=0 THEN 910
740  PRINT LIN(2);"-----  ";C$;"  -----";LIN(1)
750  Z=0
760  IF  END #1 THEN 880
770  READ #1;A$,B$
780  IF B$=C$ THEN 820
790  READ #1;A$
800  IF LEN(A$)=0 THEN 770
810  GOTO 790
820  PRINT A$;TAB(7);": ";
830  Z=1
840  READ #1;A$
850  IF LEN(A$)=0 THEN 770
860  PRINT TAB(9);A$
870  GOTO 840
880  IF Z=1 THEN 900
890  PRINT LIN(1);"There are no programs under the subject of '"C$"'."
895  PRINT "Enter option 4 for a list of subjects currently available."
900  PRINT LIN(2)
910  RETURN 
920  REM ----- INFO ON SPECIFIC PROGRAM -----
930  PRINT "Program name (or '?'): ";
940  LINPUT C$
950  C$=UOS$(C$)
960  IF POS("//SSTOEXIBYE",C$[1,3])=0 THEN 975
965  IF T$[3,4]="00" THEN 2660
970  SYSTEM X,"BYE"
975  IF C$[1,1]="?" THEN 990
980  IF C$#"//HELP" THEN 1010
990  PRINT LIN(1);"Enter the name of the program you wish information on."
995  PRINT "For a list of available programs, press 'RETURN' and"
997  PRINT "select option 5.  Type '//STOP' to exit."
998  PRINT 
1000  GOTO 930
1010  IF LEN(C$)=0 THEN 1180
1020  IF  END #1 THEN 1150
1030  Z=0
1040  READ #1;A$,B$
1050  IF A$=C$ THEN 1090
1060  READ #1;A$
1070  IF LEN(A$)=0 THEN 1040
1080  GOTO 1060
1090  PRINT LIN(2);A$;TAB(6);"-";B$;TAB(18);":";
1100  Z=1
1110  READ #1;A$
1120  IF LEN(A$)=0 THEN 1150
1130  PRINT TAB(20);A$
1140  GOTO 1110
1150  IF Z=1 THEN 1170
1160  PRINT LIN(1);"There is no program entitled '"C$"'.  Use option one for"
1161  PRINT "a complete list of available programs.  Type '//STOP' to exit.";LIN(2)
1170  PRINT LIN(2)
1180  RETURN 
1190  REM ----- LIST OF AVAILIBLE SUBJECTS -----
1200  A$=""
1210  PRINT LIN(3);"-----  AVAILIBLE SUBJECTS -----";LIN(1)
1220  IF  END #1 THEN 1300
1230  READ #1;B$,C$
1240  READ #1;B$
1250  IF LEN(B$)#0 THEN 1240
1260  IF POS(A$,C$)#0 THEN 1230
1270  PRINT C$
1280  A$[LEN(A$)+1]=C$
1290  GOTO 1230
1300  PRINT LIN(2)
1310  RETURN 
1320  REM ----- CHAIN TO A PROGRAM -----
1330  PRINT "Program name (or '?'): ";
1340  A$="*"
1350  LINPUT A$[2]
1360  A$=UOS$(A$)
1370  IF POS("//SSTOEXIBYE",A$[2,4])=0 THEN 1385
1375  IF T$[3,4]="00" THEN 2660
1380  SYSTEM X,"BYE"
1385  IF A$[2,2]="?" THEN 1400
1390  IF A$#"//HELP" THEN 1420
1400  PRINT LIN(1);"Enter the name of the program you wish to run.  For a"
1402  PRINT "complete list of programs, select option one.  Type"
1405  PRINT "'//STOP' to exit."
1407  PRINT 
1410  GOTO 1330
1420  IF LEN(A$)=0 THEN 1470
1430  IF POS("HELP1",A$[1,(LEN(A$) MIN 5)]) THEN 1460
1440  PRINT LIN(1)
1450  CHAIN R,A$
1460  PRINT "That program is not available."
1470  RETURN 
1480  REM ----- SPECIAL OPTIONS AVAILIBLE FROM PRIVILIGED ACCOUNTS -----
1490  B=BRK(1)
1500  PRINT LIN(1);"Supervisor option (1-4 or '?'): ";
1510  LINPUT A$
1520  A$=UOS$(A$)
1530  IF POS("//SSTOEXIBYE",A$[1,3])=0 THEN 1545
1540  STOP 
1545  IF A$[1,1]="?" THEN 1560
1550  IF A$#"//HELP" THEN 1640
1560  PRINT LIN(1);"Available options:"
1570  PRINT LIN(1);"(1) - Normal user operation w/BRK=1"
1580  PRINT "(2) - List of programs in the file not in the account"
1590  PRINT "(3) - List of programs in the library not in the file"
1600  PRINT "(4) - Check file for format errors"
1610  PRINT LIN(1);"Note:  Options 2, 3 and 4 may take up to 1 minute to execute.";LIN(1)
1620  GOSUB 2610
1630  GOTO 1500
1640  CONVERT A$ TO X,3370
1650  READ #1,1
1660  IF X=1 THEN 260
1670  GOSUB X-1 OF 1690,1880,2120
1680  GOTO 1500
1690  REM ----- PROGRAMS IN FILE NOT IN LIBRARY -----
1700  PRINT LIN(2);"Programs in the file not in the library:";LIN(1)
1710  IF  END #1 THEN 1840
1720  C$="GRO-"
1730  Z=0
1740  READ #1;A$
1750  C$[5]=A$
1760  SYSTEM B$,C$
1770  B$=B$[1,POS(B$," ")-1 MAX 1]
1780  IF B$=A$ THEN 1810
1790  Z=1
1800  PRINT A$
1810  READ #1;A$
1820  IF LEN(A$)=0 THEN 1740
1830  GOTO 1810
1840  IF Z=1 THEN 1860
1850  PRINT "No discrepancies found."
1860  PRINT LIN(2)
1870  RETURN 
1880  REM ----- PROGRAMS IN LIBRARY NOT IN FILE -----
1890  PRINT LIN(2);"Programs in the library not in the file:";LIN(1)
1900  Z=0
1910  C$="GRO-"
1920  SYSTEM B$,C$
1930  IF B$[1,1]=" " THEN 2080
1940  C$[5]=B$[1,6]
1950  C$[10,10]=CHR$(NUM(C$[10,10])+1)
1960  IF POS(" C",B$[8,8])=0 THEN 1920
1970  B$=B$[1,POS(B$," ")-1 MIN 6]
1980  IF  END #1 THEN 2050
1990  READ #1,1
2000  READ #1;A$
2010  IF A$=B$ THEN 1920
2020  READ #1;A$
2030  IF LEN(A$)=0 THEN 2000
2040  GOTO 2020
2050  PRINT B$
2060  Z=1
2070  GOTO 1920
2080  IF Z=1 THEN 2100
2090  PRINT "No discrepancies found."
2100  PRINT LIN(2)
2110  RETURN 
2120  REM ----- CHECK FILE FOR ERRORS -----
2130  PRINT LIN(2);"Checking file for format errors.";LIN(1)
2140  IF  END #1 THEN 2590
2150  Z=I=0
2160  REM -- PROGRAM NAME --
2170  READ #1;A$
2180  I=I+1
2190  IF LEN(A$)>0 THEN 2230
2200  PRINT "Item #";I,"Expecting program name, found null string."
2210  Z=1
2220  GOTO 2170
2230  IF LEN(A$)<7 THEN 2270
2240  PRINT A$;"  Item #";I,"Program name is more than 6 characters long."
2250  Z=1
2260  REM -- SUBJECT --
2270  READ #1;B$
2280  I=I+1
2290  IF LEN(B$)>0 THEN 2330
2300  PRINT A$;"  Item #";I,"Expecting subject, found null string."
2310  Z=1
2320  GOTO 2170
2330  IF LEN(B$)<11 THEN 2370
2340  PRINT A$;"  Item #";I,"Subject length is more than 11 characters."
2350  Z=1
2360  REM -- DESCRIPTION --
2370  READ #1;B$
2380  I=I+1
2390  IF LEN(B$)>0 THEN 2520
2400  PRINT A$;"  Item #";I,"No description of program."
2410  Z=1
2420  READ #1;B$
2430  IF LEN(B$)>0 THEN 2570
2440  I=I+1
2450  PRINT A$;"  Item #";I,"2 null strings in a row - One must be deleted."
2460  READ #1;B$
2470  I=I+1
2480  IF LEN(B$)>0 THEN 2500
2490  GOTO 2450
2500  A$=B$
2510  GOTO 2170
2520  IF LEN(B$)<51 THEN 2550
2530  PRINT A$;"  Item #";I,"Description is more than 50 characters per line."
2540  Z=1
2550  READ #1;B$
2560  I=I+1
2570  IF LEN(B$)=0 THEN 2170
2580  GOTO 2550
2590  IF Z=1 THEN 2610
2600  PRINT "No format errors found."
2610  PRINT LIN(2);"ALL DATA IS CONTAINED IN FILE 'HELPF.L100'."
2620  PRINT "THIS IS AN UNNUBERED EDITOR TEXT FILE, AND SHOULD BE"
2630  PRINT "MODIFIED ONLY WITH $EDITOR. FILE FORMAT IS LISTED"
2640  PRINT "IN THE BEGINNING OF *HELP."
2650  RETURN 
2660  END 
