1 '	signon subsystem -- finish (update user's record)
2 MODNAME$="FINISH"
4 VERSION$="1.4 {10/14/82}"	'not in 1.0
7 '	by dick lieber
13 '
28 '
49 PWDFILE$="pwds"	'subsystem configuration file
50 COMMENTFILE$="COMMENTS"
52 CALLERFILE$="CALLERS" 'log of users
55 USERFILE$="USERS"	'roster of users
56 LASTCALRFILE$="LASTCALR"
80 '
81 '	function definition
82 '
83 '	add deliminators to time or date
84 DEF FNADDSEP$(DS$,DELIM$)=

	LEFT$(DS$,2)+DELIM$+MID$(DS$,3,2)+DELIM$+RIGHT$(DS$,2)
85 '	remove date or time deliminators
86 DEF FNKILLSEP$(DS$)=LEFT$(DS$,2)+MID$(DS$,4,2)+RIGHT$(DS$,2)
88 DEF FNHOURS$(TIME)=STR$(INT(TIME/60))+":"+

	RIGHT$("00"+MID$(STR$(TIME-(INT(TIME/60)*60)),2),2)
90 DEF FNEROR$(SERRNUMB$)="System Error ("+SERRNUMB$+")."
94 '	constants:
96 CRLF$=CHR$(&HD)+CHR$(&HA)
97 BSTRING$=CHR$(8)+" "+CHR$(8)
98 DEFDRIVE$="A:"
99 DIM ACLARRAY%(5,11)
100 DIM FLAGS%(14)
103 '
106 '
109 '
112 ON ERROR GOTO 1000
115 GOTO 10000	' main program begins after sub routines
118 '
121 ' routines used by signon
124 '
200 %INCLUDE 200.SSB
300 '
302 '	set user number
304 '
306 USERMD=TESTADDRESS+9
312 CALL USERMD(SETUSERNUMBER%)
345 RETURN
1000 '
1004 '	Error handler
1008 '1.1
1010 IF ERR=53 THEN NOFILE%=1: RESUME NEXT
1012 PRINT "Error Trap"
1020 PRINT "ERR = ";ERR, "ERL = ";ERL
1028 END
1100 %INCLUDE 1100.SSB
1200 '
1204 ' find name - get record
1208 ' 1.3
1211 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
1212 NOTFOUND%=0
1216 REC%=2
1220 LAST$=SPACE$(14): FIRST$=RIGHT$(LAST$,10)
1224 LSET FIRST$=FRNAME$: LSET LAST$=LNAME$
1228	GET #1,REC%
1232	IF EOF(1) THEN NOTFOUND%=1:RETURN
1236	IF FFNAME$=FIRST$ AND FLNAME$=LAST$ THEN GOSUB 1300: RETURN
1240	REC%=REC%+1
1244 GOTO 1228
1300 %INCLUDE 1300.SSB
1400 %INCLUDE 1400.SSB
1600 %INCLUDE 1600.SSB
1900 '
1905 '	get date into sdate$ (sdate$ looks nice to print)
1910 '
1915 SDATE$=LEFT$(LDATE$,2)+"/"+MID$(LDATE$,3,2)+"/"+RIGHT$(LDATE$,2)
1920 RETURN
2300 %INCLUDE 2300.SSB
3100 %INCLUDE 3100.SSB
3200 '
3205 '	turn off status line
3206 ' 1.1
3210 A$=STATQUIT$ : GOSUB 3100
3215 RETURN
8000 %INCLUDE 8000.SSB
8500 '
8510 '	put information into CALLERFILE$
8520 '
8530 GET #3, NEXTRECORD
8540 LSET CTIMEON$ = STR$(ELAPTIME%)
8550 PUT #3, NEXTRECORD
8560 GET #3,1	'just to flush buffer
8570 CLOSE #3
8580 RETURN
8600 '
8605 '	open CALLERFILE$
8610 ' 1.0
8611 NOFILE%=0
8615 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
8620 OPEN "R",#3, DEFDRIVE$+CALLERFILE$, 75
8625 FIELD #3,

	8  AS CLOGCNT$,

	6  AS FCALDATE$,

	6  AS FCALTIME$,

	1  AS SIGNATURE$,

	8  AS CLREC$
8630 GET #3,1
8635 IF SIGNATURE$<>"*" THEN

	CLOSE #3:

	NOFILE%=1:

	COMMENT$=A$:GOSUB 8000:

	KILL DEFDRIVE$+CALLERFILE$:

	RETURN
8640 LOGCNT#=VAL(CLOGCNT$)
8645 NEXTRECORD = VAL(CLREC$)
8650 IF NOFIELD%<>0 THEN NOFIELD%=0: RETURN
8655 FIELD #3, 20 AS CFNAME$,

		20 AS CLNAME$,

		6  AS CDATE$,

		6  AS CTIME$,

		6  AS CTIMEON$,

		10 AS CNOTATION$,

		2  AS CCRLF$
8660 RETURN
9000 '
9005 '	get lastcal info
9010 '1.3	#
9012 SETUSERNUMBER%=0: GOSUB 300
9013 NOFILE%=0
9015 OPEN "I", #1, DEFDRIVE$+LASTCALRFILE$
9017 IF NOFILE%<>0 THEN

	CLOSE #1:

	COMMENT$="LASTCALR file not found":

	PRINT COMMENT$:

	GOSUB 8000: RETURN
9025 INPUT #1, FRNAME$, LNAME$, ACLVL%, LDATE$, LTIME$
9035 CLOSE #1
9045 RETURN
9100 %INCLUDE 9100.SSB
9900 '
9903 '	select default disk
9906 '	1.0	#
9909 SELDSK=TESTADDRESS+&HF
9912 CALL SELDSK(SELDRIVE%)
9915 RETURN
10000 '
10010 '	main program
10020 '1.11
10030 PRINT "FINISH version ";VERSION$;" is updating user's records."
10040 GOSUB 1100	'get configuration data
10050 IF NOFILE%<>0 THEN SETUSERNUMBER%=0: GOSUB 300: GOTO 10000
10060 NOTATION$="finish"
10070 GOSUB 9000	'get user
10080 IF NOFILE%<>0 THEN GOTO 10330
10085 IF LEFT$(FRNAME$,1)="~" THEN

	PRINT "Records previously updated.":

	GOTO 10330
10090 GOSUB 1600	'get time/date
10093 STIME$=TIME$
10100 GOSUB 9100	'calc elapsed time
10110 ' 	put information into users record
10120 GOSUB 1400	'open users
10130 GOSUB 1200	'search for users record
10140 IF NOTFOUND% <>0 THEN

	COMMENT$="Couldn't find "+FRNAME$+" "+LNAME$+"'s records.":

	PRINT COMMENT$:

	GOSUB 8000
10150 GOSUB 1300	'transfer to working vars
10160 ELAPTIME%=ELAPMINUTES
10180 TOTALTIME = TOTALTIME + ELAPMINUTES
10190 GOSUB 200		'put & close users records
10200 '	put information into CALLERFILE$
10210 GOSUB 8600	'open CALLERFILE$
10220 IF NOFILE%=0 THEN GOSUB 8500	'only update if file exists
10225 SETUSERNUMBER%=0: GOSUB 300
10227 SELDRIVE%=0: GOSUB 9900
10230 FCBNAME$ = LASTCALRFILE$
10240 RO%=0: GOSUB 2300
10250 OPEN "O", #1, DEFDRIVE$ + LASTCALRFILE$
10251	PRINT  #1, "~"; ",";

		"already"; ","; "updated"; ",";

		0; ",";"xxxxxxxx"; ","; "xxxxxxxx"
10252 CLOSE #1
10253 RO%=1: GOSUB 2300
10290 SETUSERNUMBER%=0: GOSUB 300
10310 PRINT "Records for ";FRNAME$;" ";LNAME$;" updated."
10320 PRINT "Signed off at ";FNADDSEP$(TIME$,":");

	" after";FNHOURS$(ELAPMINUTES);" (hr:mn)"
10322 IF STATUSLINE%<>0 THEN GOSUB 3200
10325 '	end processing
10330 PRINT: PRINT "Loading BYE..."
10340 NOFILE%=0
10350 RUN DEFDRIVE$+BYEPROG$
10360 IF NOFILE%<>0 THEN

	COMMENT$="Couldn't find "+DEFDRIVE$+BYEPROG$+".COM":

	PRINT COMMENT$:

	GOSUB 8000
10400 SETUSERNUMBER%=0: GOSUB 300
10420 POKE 4,0
20000 '