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 - <CR>'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 <CR>
\	!
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  <SPACE>
\					!	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(
