1 ! ! G R A D S 10 ! NOT COPYRIGHTED Written for RSTS-E, Version 6C, EDIT 03 by Dr. John S. Abma, Professor of Psychology and Coordinator or Academic Computing, Wittenberg University, Springfield, Ohio, 45501 Neither the author nor Wittenberg University assumes any responsibility for the use of this program. 20 ! This is the original version, submitted to DECUS in July, 1978 100 ! PROGRAM DESCRIPTION The program provides for maintaining records on graduates from academic departments in small colleges. The file will hold 200 names. 110 ! Mailing labels are printed out for all classes, or for selected graduating class. There is a program provided to ZERO the file called GRADZE, supplied along with this main program. 300 ! I/O CHANNEL DESCRIPTION CHANNEL #1 IS RECORD I/O, WITH HEADER RECORD, BLOCKED WITH TWO LOGICAL RECORDS PER DISC RECORD. THE LENGTH OF THE LOGICAL RECORD IS 215 CHARACTERS, LEAVING AN EXPANSION POSSIBILITY OF 41 CHARACTERS 400 ! VARIABLES USED A$ A FIELDED STRING, COMBINATION OF OTHER FIELDS FROM 75 TO 256 CHARACTERS A1$ A FIELDED STRING; NAME OF PERSON ENTERED, 26 CHARACTERS A1$() NAME OF PERSON ENTERED, WRITTEN FROM RECORD A2$ A FIELDED STRING; STREET ADDRESS, 20 CHARACTERS A2$() STREET ADDRESS, WRITTEN FROM RECORD A3$ A FIELDED STRING; CITY, STATE, ZIP, 26 CHARACTERS A3$() CITY, STATE, ZIP, WRITTEN FROM RECORD A4$ A FIELDED STRING; FIRST LINE OF INFORMATION, 70 CHARACTERS A5$ A FIELDED STRING; SECOND LINE OF INFORMATION, 70 CHARACTERS 410 ! B$ HEADER RECORD VARIABLE; NUMBER OF LOGICAL RECORDS, 2 CHARACTERS B% SETS VALUE OF B$ B1$, B2$, B3$, B4$, B5$ THESE ARE INPUT STRINGS, LSET AS A1$,A2$,A3$,A4$,A5$ D$ OFFSET VARIABLE D% DUMMY LOOPING VARIABLE D1% INPUT VARIABLE; NUMBER OF LINES TO SKIP BETWEEN MAILING LABELS F% FLAG IN SORT 420 ! I$ HEADER RECORD VARIABLE; OFFSET COEFFICIENT I% SETS VALUE OF I$ J% RECORD NUMBER TO GET L% INSTRING VARIABLE SEARCHING FOR COMMA , AFTER LAST NAME M% NUMBER OF ENTRIES TO LIST OR PRINT LABELS FOR M1% SUBSCRIPT IDENTIFYING INDIVIDUAL ENTRY N% AN ENTRY NUMBER N1% TOTAL NUMBER OF ENTRIES IN FILE O$ USER OPTION 430 ! O% VALUE OF AN INSTRING FUNCTION O1$ USER OPTION T$ SWAPPING VARIABLE IN SORT Y$ A FIELDED VARIABLE; GRADUATING CLASS YEAR Y$() GRADUATING CLASS YEAR READ FROM RECORD Y1$ INPUT STRING SETS VALUE OF Y$ 900 DIM Y$(200%),A1$(200%),A2$(200%),A3$(200%) ! Two-hundred addressess can be printed. 1000 ON ERROR GOTO 19000 1010 OPEN 'GRADS.FIL' AS FILE 1%, FILESIZE 100% 1040 PRINT 'E = ENTER' \ PRINT 'C = CHANGE' \ PRINT 'D = DELETE' \ PRINT 'P = PRINT LABELS' \ PRINT 'L = LIST' \ PRINT 'S = SORT ALPHABETICALLY' \ PRINT 'F = FINISHED' 1045 PRINT \PRINT 'E = C = D = P = L = S = F = ' \ PRINT 'Enter Change Delete Pnt Labs List Sort Finished' 1050 INPUT O$ \ O%=0% \ GOTO 1060 IF O$='' \ O%=INSTR(1%,'ECDPLSF',O$) \ ON O% GOSUB 10000,11000,12000,13000,15000,15100,32760 IF O% 1060 PRINT 'Type one of the letters indicated' UNLESS O% \ GOTO 1045 10000 ! ! ***** ENTER ***** ! 10010 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ \ B%=CVT$%(B$) \ I%=CVT$%(I$) 10042 B%=B%+1% IF I% \ IF I% THEN I%=0% ELSE I%=1% 10044 LSET B$=CVT%$(B%) \ LSET I$=CVT%$(I%) \ PUT #1% RECORD 1% 10046 N%=2*(B%-1%)+I% \ PRINT 'ENTRY #';N%+1% 10060 GET #1% RECORD B%+1% \ FIELD #1%, I%*256% AS D$, 26% AS A1$, 20% AS A2$, 26% AS A3$, 3% AS Y$,70% AS A4$, 70% AS A5$ 10140 PRINT 'CLASS YEAR' \ INPUT LINE Y1$ \ Y1$=LEFT(Y1$,3%) \ LSET Y$=Y1$ 10150 PRINT 'NAME (LAST, MR. FIRST I.)' \ INPUT LINE B1$ 10152 L%=0% \ L%=INSTR(1%,B1$,',') \ GOTO 10154 IF L% \ PRINT 'Please type a comma , after the last name.' \ GOTO 10150 10154 B1$=LEFT(B1$,LEN(B1$)-2%) \ LSET A1$=B1$ 10160 PRINT 'STREET ADDRESS' \ INPUT LINE B2$ \ B2$=LEFT(B2$,LEN(B2$)-2%) \ LSET A2$=B2$ 10180 PRINT 'CITY, STATE, ZIP' \ INPUT LINE B3$ \ B3$=LEFT(B3$,LEN(B3$)-2%) \ LSET A3$=B3$ 10200 PRINT 'MAJOR, ADVISOR, GPA, AWARDS, OTHER' \ INPUT LINE B4$ \ B4$=LEFT(B4$,LEN(B4$)-2%) \ LSET A4$=B4$ 10210 PRINT 'GRAD SCHOOL, SUPPORT $, OTHER' \ INPUT LINE B5$ \ B5$=LEFT(B5$,LEN(B5$)-2%) \ LSET A5$=B5$ 10220 PUT #1% RECORD B%+1% 10900 RETURN 11000 ! ! ***** CHANGES ***** ! 11001 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ \ B%=CVT$%(B$) \ I%=CVT$%(I$) \ N1%=2%*B%+I%-1% 11010 INPUT'CHANGE WHAT NUMBER';N% 11015 IF 1%>N% OR N%>N1% THEN PRINT 'CHANGE NUMBERS FROM 1 TO'N1%'ONLY' \ RETURN 11020 N%=N%-1% \ B%=N%/2%+1% \ I%=N%-(B%-1%)*2% 11030 GET #1% RECORD B%+1% \ FIELD #1%, I%*256% AS D$, 26% AS A1$, 20% AS A2$, 26% AS A3$, 3% AS Y$, 70% AS A4$, 70% AS A5$ 11035 PRINT \PRINT Y$ \ PRINT A1$ \ PRINT A2$ \ PRINT A3$ \ PRINT A4$ \ PRINT A5$ 11040 PRINT \PRINT 'Y = CHANGE CLASS YEAR' \ PRINT 'N = CHANGE NAME' \ PRINT 'S = CHANGE STREET ADDRESS' \ PRINT 'C = CHANGE CITY - STATE - ZIP' \ PRINT 'A = CHANGE FIRST LINE OF INFORMATION' \ PRINT 'B = CHANGE SECOND LINE OF INFORMATION' \ PRINT 'F = FINISHED MAKING CHANGES' 11050 PRINT \PRINT 'Y = N = S = C = A = B = F =' \ PRINT 'Year Name Street City Inform Inform Finished' 11060 INPUT O$ \ O%=0% \ GOTO 11090 IF O$='' 11062 O%=INSTR(1%,'YNSCABF',O$) 11064 ON O% GOSUB 11200,11300,11400,11500,11600,11700,11800 IF O% 11070 RETURN IF O$='F' 11090 PRINT 'Please type one of the letters indicated' UNLESS O% \ GOTO 11050 11200 PRINT "ENTER CORRECT YEAR ( 'XX )" \ INPUT LINE Y1$ \ Y1$=LEFT(Y1$,3%) \ LSET Y$=Y1$ \ RETURN 11300 PRINT 'ENTER CORRECT NAME' \ INPUT LINE B1$ 11302 L%=0% \ L%=L%+1% UNTIL MID(B1$,L%,1%)=',' OR L%=20% \ IF L%=20% THEN PRINT 'PLEASE TYPE A COMMA AFTER THE LAST NAME' \ L%=0% \ GOTO 11300 11304 B1$=LEFT(B1$,LEN(B1$)-2%) \ LSET A1$=B1$ \ RETURN 11400 PRINT 'ENTER CORRECT STREET ADDRESS' \ INPUT LINE B2$ \ B2$=LEFT(B2$,LEN(B2$)-2%) \ LSET A2$=B2$ \ RETURN 11500 PRINT 'ENTER CORRECT CITY-STATE-ZIP' \ INPUT LINE B3$ \ B3$=LEFT(B3$,LEN(B3$)-2%) \ LSET A3$=B3$ \ RETURN 11600 PRINT 'ENTER FIRST LINE OF INFORMATION' \ INPUT LINE B4$ \ B4$=LEFT(B4$,LEN(B4$)-2%) \ LSET A4$=B4$ \ RETURN 11700 PRINT 'ENTER SECOND LINE OF INFORMATION' \ INPUT LINE B5$ \ B5$=LEFT(B5$,LEN(B5$)-2%) \ LSET A5$=B5$ \ RETURN 11800 PUT #1% RECORD B%+1% \ RETURN 11900 RETURN 12000 ! ! ***** DELETE ***** ! 12001 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ \ B%=CVT$%(B$) \ I%=CVT$%(I$) \ N1%=2%*B%+I%-1% 12010 INPUT'DELETE WHAT NUMBER';N% \ IF 1%>N% OR N%>N1% THEN PRINT 'DELETE NUMBERS FROM 1 TO'N1%' ONLY' \ RETURN 12015 N1%=N%-1% \ B%=N1%/2%+1% \ I%=N1%-(B%-1%)*2% 12030 GET #1% RECORD B%+1% \ FIELD #1%, I%*256% AS D$, 256% AS A$ \ LSET A$='ZZZZ' \ PUT #1% RECORD B%+1% 12070 GOSUB 15100 12110 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ \ B%=CVT$%(B$) \ I%=CVT$%(I$) 12124 IF I% THEN I%=0% ELSE I%=1% 12126 B%=B%-1% IF I% \ LSET B$=CVT%$(B%) \ LSET I$=CVT%$(I%) \ PUT #1% RECORD 1% 12150 RETURN 13000 ! ! ***** PRINT LABELS ***** ! 13001 FOR M%=0% TO 200% \ Y$(M%),A1$(M%),A2$(M%),A3$(M%)='' \ NEXT M% \ M%=1% 13002 INPUT'FOR WHAT YEAR for all';Y1$ 13005 INPUT'SKIP HOW MANY LINES BETWEEN LABELS';D1% 13010 GET #1%, RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ 13020 B%=CVT$%(B$) \ I%=CVT$%(I$) 13030 FOR J%=2% TO B%+1% 13040 FOR I%=0% TO 1% 13050 GET #1% RECORD J% 13060 FIELD #1%, I%*256% AS D$, 26% AS A1$, 20% AS A2$, 26% AS A3$, 3% AS Y$ 13070 GOTO 13090 IF A1$='ZZZZ' 13075 GOTO 13090 IF Y1$<>RIGHT(Y$,2%) AND Y1$<>'' 13080 Y$(M%)=Y$+'' \ A1$(M%)=CVT$$(A1$,16%)+'' \ A2$(M%)=A2$+'' \ A3$(M%)=A3$+'' \ M%=M%+1% 13090 NEXT I% 13180 NEXT J% 13185 FOR M1%=1% TO M% STEP 2% \ PRINT Y$(M1%);TAB(55%);Y$(M1%+1%) \ L%=0% \ L%=INSTR(1%,A1$(M1%),',') \ PRINT RIGHT(A1$(M1%),L%+2%); LEFT(A1$(M1%),L%); \ L%=0% \ L%=INSTR(1%,A1$(M1%+1%),',') \ PRINT TAB(55%); RIGHT(A1$(M1%+1%),L%+2%); LEFT(A1$(M1%+1%),L%) \ PRINT A2$(M1%);TAB(55%);A2$(M1%+1%) \ PRINT A3$(M1%);TAB(55%);A3$(M1%+1%) \ PRINT FOR D%=1% TO D1% \ NEXT M1% 13190 RETURN 15000 ! ! ***** LIST ***** ! 15002 INPUT'FOR WHAT YEAR? FOR ALL';Y$ \ Y$=LEFT(Y$,2%) 15005 INPUT'WANT INFORMATION LINES';O$ 15010 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ \ B%=CVT$%(B$) \ I%=CVT$%(I$) 15020 PRINT \N%=0% 15030 FOR J%=2% TO B%+1% \ FOR I%=0% TO 1% \ GET #1% RECORD J% \ FIELD #1%, I%*256% AS D$, 75% AS A$, 70% AS A1$, 70% AS A2$ 15040 RETURN IF A$='ZZZZ' 15050 N%=N%+1% 15060 IF Y$=RIGHT(A$,74%) OR Y$='' THEN PRINT N%; \ PRINT A$ \ PRINT A1$ IF LEFT(O$,1%)='Y' \ PRINT A2$ IF LEFT(O$,1%)='Y' 15080 NEXT I% \ NEXT J% 15090 RETURN 15100 ! ! ***** SORT ***** ! 16010 GET #1% RECORD 1% \ FIELD #1%, 2% AS B$, 2% AS I$ 16020 B%=CVT$%(B$) \ I%=CVT$%(I$) 16030 N1%=0% 16040 FOR J%=2% TO B%+1% \ FOR I%=0% TO 1% \ GET #1% RECORD J% \ FIELD #1%, I%*256% AS D$, 256% AS A$ \ N1%=N1%+1% \ A1$(N1%)=A$+'' \ NEXT I% \ NEXT J% 16060 M%=N1%-1% 16070 FOR D%=1% TO M% \ F%=0% 16080 FOR N%=1% TO M% 16090 IF A1$(N%)>A1$(N%+1%) THEN T$=A1$(N%) \ A1$(N%)=A1$(N%+1%) \ A1$(N%+1%)=T$ \ F%=1% \ GOTO 16140 UNLESS F% 16100 NEXT N% \ M%=M%-1% \ NEXT D% 16140 N1%=0% \ FOR J%=2% TO B%+1% \ FOR I%=0% TO 1% \ GET #1% RECORD J% \ FIELD #1%, I%*256% AS D$, 256% AS A$ \ N1%=N1%+1% \ LSET A$=A1$(N1%) \ PUT #1% RECORD J% \ NEXT I% \ NEXT J% 16900 RETURN 19000 IF ERR=50% THEN PRINT 'Please enter whole numbers only' \ RESUME 19010 ON ERROR GOTO 0% 32760 CLOSE 1% \ END