1 ! pROGRAM "ACTNAM.BAS" ! ! WRITTEN FOR BASIC-PLUS (RSTS/E) V6B,V6C,V7.0 ! ! LOYALIST COLLEGE OF APPLIED ARTS & TECHNOLOGY ! BELLEVILLE, ONTARIO ! CANADA. ! ! THIS PROGRAM WILL BE OF INTEREST MAINLY TO THE ! EDUCATIONAL COMMUNITY, WORKING WITH RSTS/E ON ! SMALL SYSTEMS. ! (THIS PROGRAM HAS BEEN OPERATING FOR TWO YEARS ! ON A PDP-11/34 WITH 80K WORDS, 12.5 MEGABYTE ! TOTAL STORAGE CAPACITY (INCL SYSTEM) AND ! MANAGING FROM 150-350 USER ACCOUNTS.) ! ! THE INTENTION OF THE SOFTWARE IS TO PRODUCE CLASSWIDE ! LISTINGS OF SYSTEM USE BASED ON: ! 1) PROJECT NUMBER GROUPING (COURSE CODE?) ! 2) ADDITIONAL OPTIONAL SPECIFICATION (INSTRUCTOR?) 2 ! ! ! CHANGES MAY HAVE TO BE MADE AT LINES 100,240,360 ! TO SPECIFY EXACTLY WHERE THE USER WANTS TO GET ! THE SYSTEM FILES FROM, AND WHERE THEY SHOULD GO. ! ! ACCOUNTING DATA, PLUS STUDENT NAME AND INSTRUCTOR ! CODE WILL BE PRINTED ONLY IF AVAILABLE IN THE ACCT.SYS ! FILE (CREATED BY 'REACT' OR MODIFIED WITH EDITOR) ! AND SEVERAL BLANKS WILL BE PRINTED FOR RECORDING OF ! STUDENT MARKS, ETC. (IN THE EVENT OF WEEKLY REPORTS) ! ! IN ITS PRESENT FORM, THIS PROGRAM IS NOT ENTIRELY ! SUITABLE FOR USE ON A PRINTER WITH LESS THAN 120 ! COLUMNS ... ALTHOUGH CHANGES AT LINE 2180 WOULD LIKELY ! ADAPT THE PRINTOUT TO OTHER SIZES OF PAPER. ! ! *** PLEASE *** ! READ THE ENTIRE PROGRAM FIRST, SOME REMARKS MAY CONTAIN ! CRITICAL INFORMATION FOR INDIVIDUAL SYSTEM USE. ! ! COLIN J. MILLER ! ! ! ! ! ! ! 3 PRINT "ERASE LINE 30 TO PACK FILE '(1,2)ACCT.SYS' : PRINT " - DELETE EXTRA BLANKS, ETC. -" : PRINT "FIRST TIME OR WHENEVER NEW ACCOUNTS HAVE BEEN ADDED." : PRINT : PRINT : PRINT : ! ! ! ! ! 5 INPUT "SPECIFY DEVICE FOR OUTPUT";O$ 6 IF O$="" THEN O$="KB:" 10 ON ERROR GOTO 30000 20 DIM S$(1000%) 30 GOTO 340 ! TRANSFER CONTROL \ ! TO SECTION PAST \ ! ---- \ ! THE REBUILDING \ ! PORTION OF THE \ ! PROGRAM. \ ! \ ! 70 PRINT "REBUILDING FILE (1,2)ACCT.SYS - PLEASE DON'T INTERRUPT>..." 80 OPEN "KB:" AS FILE 10% MODE 1% ! LOCK UP TERMINAL ! AGAINST ^C ! CUZ WE COULD LOSE THE WHOLE ! ACCT.SYS NAME FILE. ! 90 ! FOLLOWING SECTION ASSUMES THAT FOR ONE REASON \ ! OR ANOTHER, THE LOG FILE (1,2)ACCT.SYS MAY \ ! NEED SOME TIDYING UP \ ! ( ELIMINATE UNNECESSARY BLANKS - 'S - ETC ) \ ! 100 OPEN "(1,2)ACCT.SYS" FOR INPUT AS FILE 1% ! LOG FILE OF ALL ACCTS. \ ! ENTERED UNDER ' $REACT ' 120 OPEN "TEMP.TMP" FOR OUTPUT AS FILE 2% ! WORK FILE ... \ ! WILL BE DELETED AT LOGOUT \ ! THANX TO EXTENSION ' .TMP ' 140 INPUT LINE #1%,F$ ! SOURCE CONTAINS COMMAS \ ! THUS -- INPUT LINE \ ! ---------- \ ! 142 IF ASCII(F$)=13% OR ASCII(F$)=10% THEN 140 ELSE P0%=1% 144 FOR I%=1% TO 5% 146 P1%=INSTR(P0%,F$,",") 148 P0%=P1%+1% 150 NEXT I% 152 LET F0$=CVT$$(LEFT(F$,P1%),6%) 154 LET F$=F0$ + RIGHT(F$,P1%+1%) 180 PRINT #2%,F$; 200 GOTO 140 210 CLOSE #1%,#2% 220 OPEN "TEMP.TMP" FOR INPUT AS FILE 1% 235 ! WE CLEANED THE ENTRIES INTO THE TEMPORARY FILE ... \ ! NOW WE'VE GOT TO SMASH THE OLD "ACCT.SYS" AND \ ! RESTORE THE DATA INTO. \ ! \ ! EXPLANATION OF STUFF AT LINE 280 IN DEC'S \ ! "BASIC-PLUS LANGUAGE MANUAL" \ ! PG.12-3 'ALTERNATE I/O BUFFERS' \ ! 240 OPEN "DL0:(1,2)ACCT.SYS" FOR OUTPUT AS FILE 2% 260 GET #1% 280 PUT #SWAP%(1%)+2% 300 GOTO 260 310 CLOSE #1%,#2%,#10% ! DUMP CHANNELS, AND RESTORE KEYBOARD TO USER 320 ! \ ! THIS NEXT SECTION IS SUPPOSED TO DO A SEARCH OF THE \ ! ACCT.SYS FILE TO CREATE A RESOURCE FILE CONTAINING \ ! ONLY THE ACCT. NO. AND THE NAME OF THE STUDENTS \ ! ( USERS ) IDENTIFIED AS P$ 340 OPEN "NAME.TMP" FOR OUTPUT AS FILE 1% 360 OPEN "(1,2)ACCT.SYS" FOR INPUT AS FILE 2% 380 INPUT "ENTER ONLY THE PROJECT NUMBER FOR THE DESIRED SEARCH STRING",P$ 390 P$=CVT$$(P$,6%) ! GET RID OF EXTRAS \ ! NOTE: SHOULD BUILD IN \ ! A ROUTINE TO LOOK FOR \ ! ANY EXTRANEOUS CHARACTERS \ ! AND RETURN FOR INPUT \ ! ---------------- \ ! DON'T ATTEMPT TO CORRECT \ ! FOR INPUT ERRORS !! 400 LET P%=LEN(P$) 410 INPUT "ENTER ADDITIONAL SEARCH STRING (OPTIONAL)";P0$ 420 INPUT LINE #2%,F$ 440 IF LEFT(F$,P%+1%) <> P$+"," THEN 420 ! HAVE TO BE SURE DESIRED PROJECT NO. \ ! IS FOLLOWED IMMEDIATELY BY A COMMA \ ! [ EG. (18,5) & (1,10) BOTH \ ! BEGIN WITH A "1" ] \ ! 450 ! SEE ALSO LINE 920 - HAVE TO CHECK \ ! BOTH INPUT FILES FOR SAME THING. \ ! 470 P0%=1% 480 FOR K%=1% TO 5% 500 P1%=INSTR(P0%,F$,",") 510 P0%=P1%+1% 520 IF K%=2% THEN PRINT #1%,LEFT(F$,P1%); 540 NEXT K% 550 LET P2%=LEN(F$) 560 LET F$=RIGHT(F$,P1%+1%) 580 PRINT #1%,F$; 600 GOTO 420 700 CLOSE #1%,#2% \ OPEN "MONEY.DMP" FOR INPUT AS FILE 2% \ OPEN "NAME.TMP" FOR INPUT AS FILE 1% 702 INPUT LINE #1%,S$(K%) FOR K%=1% TO 1000% 704 CLOSE #1% 710 ! BEGIN COPYING OUT RESULTS OF RUNNING ' $MONEY ' \ ! PROGRAM. \ ! NOTE \ ! WHEN RUNNING $MONEY ; THE " OUTPUT DEVICE ? " \ ! QUESTION SHOULD BE ANSWERED BY TYPING ... \ ! MONEY.DMP \ ! 720 PRINT " BELL PROMPT TO LOCATE PAPER MANUALLY ..." \ PRINT CHR$(7%); FOR Q9=1 TO 5 \ INPUT Q9 730 OPEN O$ AS FILE 3% ! FOR LISTINGS 740 PRINT #3% STRING$(110%,126%) 760 PRINT #3% CHR$(10%) 780 FOR I%=1% TO 4% 800 INPUT LINE #2%,L$ 820 PRINT #3% L$ 840 NEXT I% 860 FOR I%=1% TO 800% 880 INPUT LINE #2%,L$ 900 L$=CVT$$(L$,12%) 920 IF LEFT(L$,P%+1%)=P$+"," THEN LET P1$=L$ \ GOSUB 2000 1000 NEXT I% 1300 GOTO 32760 2000 ! SUBROUTINE TO FETCH NAME FROM \ ! THE "NAME.TMP" FILE. \ ! \ ! 2050 LET P1%=INSTR(P%+1%,L$," ")-1% ! YIELDS POSITION COUNT \ ! UP TO BUT NOT INCLUDING \ ! THE FIRST \ ! IN SOURCE FILE .... \ ! " MONEY.DMP " \ ! 2100 FOR K%=1% TO 1000% 2120 LET P2%=INSTR(P%+2%,S$(K%),",") \ LET F$=CVT$$(LEFT(S$(K%),P2%-1%),6%) \ ! \ ! THUS " F$ " WILL BE THE \ ! FULL " [PROJ,PROG] " \ ! DESCRIPTOR STRING AS EXTRACTED \ ! FROM THIS (K%) LINE OF \ ! FILE " TIME.DAT " \ ! 2140 IF F$ <> LEFT(L$,P1%) THEN 2200 2145 IF P0$="" THEN 2178 ! PRINT ANYWAY 2150 LET A%=INSTR(1%,S$(K%),P0$) ! LOOK FOR ADDT'L SEARCH STRING 2155 IF A%=0 THEN 2500 ! RETURN W/O PRINTING ANYTHING 2178 PRINT #3%,P1$; 2180 PRINT #3% " ";RIGHT(CVT$$(S$(K%),4%),P2%+1%);TAB(102%);"|___| |___|" \ ! \ ! \ ! 2182 FOR K1%=1% TO 32% 2184 IF MID(L$,K1%,1%)="." THEN T=T+VAL(MID(L$,K1%-5%,2%)) + VAL(MID(L$,K1%-2%,2%))/60 \ GOTO 2300 2186 NEXT K1% 2190 GOTO 2300 2200 NEXT K% 2300 FOR K1%=33% TO 60% 2320 IF MID(L$,K1%,1%)=":" THEN T1 = T1 + VAL(MID(L$,K1%-2%,2%)) + VAL(MID(L$,K1%+1%,2%))/60 \ GOTO 2500 \ ! \ ! \ ! 2340 NEXT K1% 2500 RETURN ! TO GET NEXT LINE \ ! OF FILE "MONEY.DMP" \ ! TO BE SEARCHED / \ ! PRINTED \ ! ACCORDINGLY. \ ! 30000 ! E R R O R H A N D L I N G R O U T I N E S ! 30100 IF ERR=11% AND ERL=140 THEN RESUME 210 30200 IF ERR=11% AND ERL=260 THEN RESUME 310 30300 IF ERR=11% AND ERL=420 THEN RESUME 700 30400 IF ERR=11% AND ERL=880 THEN PRINT #3% : PRINT #3% : PRINT #3% \ PRINT #3% " TOTAL CPU TIME THIS REPORT "; T/60 ;" HOURS." \ PRINT #3% " CONNECT TIME THIS REPORT ";T1;" HOURS." \ PRINT #3% \ PRINT #3% \ PRINT #3% STRING$(110%,126%) \ PRINT #3% \ PRINT #3% \ PRINT #3% 30500 IF ERR=11% AND ERL=702 THEN RESUME 704 30510 RESUME 32760 ! BYPASS UNKNOWN ERR BUSINESS 30999 ON ERROR GOTO 0 ! NO ERR HANDLER HANDY FOR THIS FILE?? 32760 CLOSE #I% FOR I%=1% TO 12% 32767 END U9(