10 REM* ALLOWS GENERALIZED ENQUIRY BY EVERBODY, UPON XREF INDEX. 20 REM* PROTECTED PROGRAM, IN A000 LIBRARY. 30 REM*AUTHOR: MR. W. DODDS, APRIL/74, VSB. 40 REM* VERSION # 0. 50 REM******************** 60 REM DOCUMENTATION. 70 REM******************** 80 REM* FIXED SIZE RECORD LAYOUTS (NOT PROTECTED. IN A000 LIBRARY.). 90 REM* DESCRIPT/CAT: INDEXF- F$,D,C(1)...C(X)./ INDEXC- C$,D. 100 REM*** VARIABLES. 110 REM* C-CODES,D-DATE,S-SERVICE,V-VALID CODES,E-ERROR FLAG(1=YES). 120 REM* T-THRESHOLD DATE,F-FOUND FLAG(1=YES,M-MAX CATEGORIES. 130 REM* X-MAX CATEGORY CODES PER INDEX ENTRY,K-LOOP ETC COUNTER. 140 REM* N$-NAME,D$-DESCRIPT,F$-N$+D$,C$-CATEGORY,R$REPLY,R-SEARCH. 150 REM******************* 160 REM*** INTIALIZE. 170 REM******************* 180 FILES *,* 190 ASSIGN "$INDEXF",1,Z,"DESCRP" 200 ASSIGN "$INDEXC",2,Z,"CATGRY" 210 DIM V[999],C[10],R[10] 220 LET X=10 230 LET M=380 240 DIM F$[70],N$[6],D$[64],R$[40],C$[20] 241 LET Y=0 242 PRINT "DO YOU WANT INSTRUCTIONS"; 243 INPUT R$ 244 IF R$[1,1]="Y" THEN 247 245 IF R$[1,1]#"N" THEN 242 246 GOTO 248 247 LET Y=1 248 IF Y=0 THEN 380 250 PRINT "FROM CATEGORY CODES, RELEVANT PROGRAMS IN $LIBRARY CAN BE FOUND." 260 PRINT 270 PRINT "MOST PROGRAMS SELF EXPLAIN WHEN RUN OR ELSE LISTED. IF NOT, THEN" 280 PRINT "REFERENCES(ON HOW TO USE EACH OF THE PROGRAMS) CAN BE" 290 PRINT "SEEN BY VISITING THE COMPUTER CENTRE; OR ONE COPY PER" 300 PRINT "TEACHER WILL BE SENT TO SCHOOL, ON REQUEST, IF" 310 PRINT "POSSIBLE. PHONE 327-7300 FOR DETAILS, RESERVATIONS, ETC." 320 PRINT 330 PRINT "THE INDEX IS ALWAYS BEING IMPROVED." 340 PRINT "IF YOU WISH TO PROPOSE CHANGES/NEW DESCRIPTIONS,CODES,CATEGORIES," 350 PRINT "OR PROGRAMS; THEN GET-$FORMDX, RUN,& FILL IT IN, SEND TO," 360 PRINT "COMPUTER CENTRE, ROOM 219, JOHN OLIVER SEC. SCHOOL. PLEASE USE" 370 PRINT "STANDARD FORMAT, SUBMITTED PROGRAMS: GET-$FORMAL & RUN (EXAMPLE)." 380 PRINT LIN(2)"PAUSES OF ONE MINUTE MAY OCCUR WHILE INDEX IS BEING SEARCHED." 390 LET K=0 400 IF END #1 THEN 460 410 READ #1;F$,D 420 MAT READ #1;C 430 IF F$[1,1]=" " THEN 410 440 LET K=K+1 450 GOTO 410 460 PRINT "TOTAL NUMBER OF PROGRAMS IN THE INDEX IS NOW";K 470 PRINT LIN(1) 475 IF Y=0 THEN 560 480 PRINT "SERVICES:" 490 PRINT " 1 - LIST WHOLE SET OF CATEGORIES AND CODES." 500 PRINT " 2 - DO PARTIAL LIST OF CATEGORIES AND CODES." 510 PRINT " 3 - LIST XREF INDEX (PARTIAL). EXAMPLE: WHAT IS UNDER 'MATH' ?" 520 PRINT " 4 - SEARCH INDEX FOR SPECIFIC CODES. EG: WHAT IS UNDER 'ALGEBRA' ?" 530 PRINT " 5 - GET DESCRIPTION AND CODES FOR A SPECIFIED PROGRAM NAME." 540 PRINT " 6 - LIST ALL PROGRAMS CHANGED/NEW AS OF DATE SPECIFIED." 550 PRINT " 7 - END INDEX PROGRAM." 560 MAT V=ZER 570 LET K=1 580 IF END #2 THEN 665 590 READ #2;C$,D 600 IF C$[1,1]=" " THEN 640 610 IF C$[1,1]="*" THEN 640 620 LET V[K]=1 630 GOTO 650 640 LET V[K]=0 650 LET K=K+1 660 GOTO 590 665 IF Y=0 THEN 730 670 PRINT "FOR SERVICES 1 TO 4, YOU WILL BE ASKED IF YOU WANT" 680 PRINT "TO OBTAIN ONLY CHANGED/NEW ITEMS, SPECIFY OLDEST DATE" 690 PRINT "DESIRED. USE YYDDD FORMAT. THUS: 74158 (DAY 158, 1974)." 700 REM************************************************************** 710 REM *** M A I N L O G I C . 720 REM************************************************************** 730 PRINT LIN(1)"WHAT SERVICE NUMBER(1TO7) DO YOU WANT"; 740 INPUT S 750 IF S<1 OR S>7 OR S#INT(S) THEN 780 760 GOSUB S OF 850,900,1350,1650,1800,2050,3560 770 GOTO 730 780 PRINT "INVALID." 790 GOTO 730 800 REM************************************************************** 810 REM *** R O U T I N E S . 820 REM************************************************************** 830 REM 840 REM******************* 850 REM *** LIST CATEGORIES & CODES. 860 REM******************* 870 LET C0=1 880 LET C9=M 890 GOTO 910 900 GOSUB 2260 910 GOSUB 2560 920 PRINT LIN(3) 930 PRINT " CATEGORIES","JULIAN DATE:";TIM(2);TIM(3)+1900 940 PRINT LIN(1) 950 PRINT "CODES CLASSIFICATIONS" 960 PRINT "======= ===============" 970 PRINT LIN(2) 980 LET C=0 990 READ #2,1 1000 LET F=0 1010 IF END #2 THEN 1260 1020 READ #2;C$,D 1030 LET C=C+1 1040 IF CC9 THEN 1020 1050 IF D6 THEN 1990 1880 LET N$=" " 1890 LET N$[1,LEN(R$)]=R$ 1900 IF END #1 THEN 2010 1910 READ #1,1 1920 READ #1;F$,D 1930 MAT READ #1;C 1940 IF F$[1,6]#N$ THEN 1920 1950 PRINT LIN(2);"DESCRIPTION & CODES "; 1960 GOSUB 2660 1970 GOSUB 3060 1980 GOTO 2020 1990 PRINT "INVALID. "; 2000 GOTO 1820 2010 PRINT "NAME NOT FOUND IN INDEX." 2020 PRINT 2030 RETURN 2040 REM****************** 2050 REM ***LIST ALL PROGRAMS CHANGED/NEW AS OF DATE SPECIFIED. 2060 REM****************** 2070 GOSUB 2560 2080 PRINT LIN(3) 2090 PRINT " ","LIST OF ALL PROGRAMS CHANGED/NEW AS OF DATE";T 2100 GOSUB 2660 2110 PRINT 2120 IF END #1 THEN 2190 2130 READ #1,1 2140 READ #1;F$,D 2150 MAT READ #1;C 2160 IF D= C0 THEN 2390 2370 PRINT "INVALID. "; 2380 GOTO 2340 2390 LET C=C9 2400 GOSUB 2450 2410 IF E=0 THEN 2430 2420 GOTO 2340 2430 RETURN 2440 REM****************** 2450 REM*** CHECK VALIDITY OF CODE C. 2460 REM****************** 2470 FOR Z=1 TO M 2480 IF C=Z AND V[Z]=1 THEN 2530 2490 NEXT Z 2500 PRINT "INVALID. "; 2510 LET E=1 2520 GOTO 2540 2530 LET E=0 2540 RETURN 2550 REM****************** 2560 REM*** ASK IF CUTOFF DATE DESIRED. 2570 REM****************** 2580 REM 2590 PRINT "WHAT IS OLDEST DATE DESIRED (REPLY 0 IF ALL DATES)"; 2600 INPUT T 2610 IF (T>74110. AND T<(TIM(3)*1000+TIM(2)) AND T=INT(T)) OR T=0 THEN 2640 2620 PRINT "INVALID." 2630 GOTO 2590 2640 RETURN 2650 REM****************** 2660 REM***PRINT TITLES, FOR INDEX LISTS. 2670 REM****************** 2680 PRINT TAB(20)"UP TO DATE OF:"TIM(2);TIM(3)+1900 2690 PRINT LIN(2)"$ NAME DESCRIPTION OF PROGRAM"; 2700 PRINT " "; 2710 PRINT " CATEGORY CODES THAT APPLY" 2720 PRINT "====== ======================"; 2730 PRINT " "; 2740 PRINT " =========================" 2750 RETURN 2760 REM****************** 2770 REM*** LIST INDEX ENTRIES THAT MATCH R(K), K=1 TO X; IF D>=T 2780 REM****************** 2790 LET F=0 2800 IF END #1 THEN 3010 2810 READ #1,1 2820 READ #1;F$,D 2830 MAT READ #1;C 2840 IF D= 10 THEN 3160 3150 PRINT 3160 IF F$[39,70]=" " THEN 3180 3170 PRINT " ";F$[39,70] 3180 PRINT 3190 RETURN 3200 REM****************** 3210 REM*** GET CODES FOR SPECIAL SEARCH. 3220 REM****************** 3230 PRINT "WHICH COMBINATION OF UP TO TEN CATEGORY CODE NUMBERS DO" 3240 PRINT "YOU WANT, ALL OF WHICH MUST BE MATCHED, FOR SELECTIVELY" 3250 PRINT "LISTING AN INDEX ITEM. SPECIFY 0 TO INDICATE NO MORE." 3255 PRINT "JUST ONE CODE AT A TIME." 3260 MAT R=ZER 3270 PRINT 3280 FOR K=1 TO X 3290 IF K=1 THEN 3310 3300 PRINT "NEXT "; 3310 PRINT "CODE"; 3320 INPUT R[K] 3330 IF R[K]=0 AND K>1 THEN 3370 3340 GOSUB 3390 3350 IF E=1 THEN 3310 3360 NEXT K 3370 RETURN 3380 REM****************** 3390 REM*** VALIDITY CHECK ALL X CODES SPECIFIED, R(K). 3400 REM****************** 3410 IF K=1 AND R[K]=0 THEN 3530 3420 IF R[K]#INT(R[K]) THEN 3530 3430 IF R[K]<0 OR R[K]>M THEN 3530 3440 LET K3=0 3450 FOR K1=1 TO X 3460 IF R[K1]#R[K] THEN 3480 3470 LET K3=K3+1 3480 NEXT K1 3490 IF K3>1 THEN 3530 3500 LET C=R[K] 3510 GOSUB 2450 3520 IF E=0 THEN 3550 3530 PRINT "INVALID. "; 3540 LET E=1 3550 RETURN 3560 END