TITLE	FILSAV PDP-10 ACCESS DATE UPDATE ROUTINE V.04
SUBTTL  KCW/RPM - GENIUS'S AT LARGE.

FLAG1=10
P=17

LOC	137
	XWD	0,4		;VERSION NUMBER
RELOC

WHAT:	OUTSTR	[ASCIZ/ILLEGAL COMMAND
/]
	SETZM	FLAG
	CLRBFI				;RESET INPUT BUFFER

BEGIN:	JRST	.+3			;JUMP OVER CCL ENTRY STUF
	SETOM	FLAG1			;SET CCL ENTRY FLAG
	SKIPA
	SETZM	FLAG1
	RESET
	SETZB	2,12			;CLEAR FILE COUNTERS
	MOVE	P,[XWD -50,PLIST]
	JUMPN	FLAG1,CCLIN		;IN CCL SO DO USER STR ONLY.
	SKIPN	FLAG#			;BEEN HERE BEFORE?
	OUTSTR	[ASCIZ/FOR HELP TYPE H/]
	OUTSTR	[ASCIZ/
*/]
	SETOM	FLAG			;FLAG ONCE!
	PUSHJ	P,PPNGET
CCLIN:	MOVEI	0,16			;SET TABLE INDEX
	GETTAB	0,0			;GET ITEM IN TABLE
	PUSHJ	P,ERROR6
	MOVEM	0,MFDPPN		;RESTORE FOR RESTART
	MOVSI	0,(SIXBIT/DSK/)
	DEVCHR
	TLNN	0,1B19			;IS DEV DSK REALLY A DSK
	JRST	ERROR2			;NO..EXIT
	INIT	1,13			;IMAGE BINARY
	SIXBIT	/DSK/
	XWD	0,IBUF
	JRST	ERROR0			;INIT FAILED
	GETPPN				;GET PROJ-PROG NUMBER
	SKIPN	UFDNAM			;USER DEFINED UFDNAM ?
	MOVEM	0,UFDNAM		;STORE FOR LOOKUP
	LOOKUP	1,UFDNAM		;LOOKUP PPN'S UFD
	JRST	ERROR1			;COULD NOT FIND UFD
	INIT	2,0
	SIXBIT	/DSK/
	XWD	0,IBUFF1
	JRST	ERROR0			;INIT FAILED

BEG1:	PUSHJ	P,GETUFD		;GET FILE NAME
	JUMPE	0,EXROUT		;DONE!!
	MOVEM	0,FILNAM		;STORE FILENAME
	PUSHJ	P,GETUFD		;GET EXT
	HLLZM	0,FILEXT		;STORE EXT
	MOVE	0,UFDNAM
	MOVEM	0,JOBPPN
	LOOKUP 	2,FILNAM		;LOOKUP AND UPDATE FILE
	PUSHJ	P,ERROR4		;FILE WAS NOT THERE
	SKIPN	2			;FIRST TIME HERE ?
	INPUT	2,
	AOS	2			;COUNT FILES
	CLOSE	2,
	JRST	BEG1

GETUFD:	SOSLE	IBUF+2
	JRST	GETOK
	IN	1,0
	JRST	GETOK
	STATZ	1,1B22			;SKIP ON ERROR
	JRST	EXROUT			;EOF..DONE!!
	JRST	ERROR3

GETOK:	ILDB	0,IBUF+1
	POPJ	P,

UFDNAM:	0				;FILE NAME
UFDEXT:	SIXBIT	/UFD/
	0
MFDPPN:	XWD	1,1			;PPN OF UFD'S

FILNAM:	0				;USERS FILE NAME
FILEXT:	0				;USERS EXT
	0
JOBPPN:	0				;JOB PPN..NULL!

IBUF:	BLOCK	3
IBUFF1:	BLOCK	3

ERROR0:	OUTSTR	[ASCIZ/
DISK INITIALIZATION ERROR
/]
	JRST	EXCCL

ERROR1:	OUTSTR	[ASCIZ/
UFD NOT FOUND IN MFD
/]
	JRST	EXCCL

ERROR2:	OUTSTR	[ASCIZ/
LOGICAL DEVICE DSK MUST BE A DISK
/]
	EXIT

ERROR3:	OUTSTR	[ASCIZ/
UFD INPUT ERROR
/]
	JRST	EXCCL
ERROR4:	SOS	2
	AOS	12			;UPDATE PROT. FAILURE COUNTER
	POPJ	P,

ERROR6:	OUTSTR	[ASCIZ/
GETTAB ERROR FOR MFD PPN, [1,1] ASSUMED
/]
	MOVE	0,[XWD 1,1]
	POPJ	P,			;RETURN

EXROUT:	PUSHJ	P,DECPNT
	OUTSTR	[ASCIZ/ FILE(S) UPDATED
/]
	MOVE	2,12			;GET FAILURE COUNTER
	JUMPE	2,.+3
	PUSHJ	P,DECPNT
	OUTSTR	[ASCIZ/ PROTECTION FAILURE(S)/]
EXCCL:	SKIPN	FLAG1			;ENTER BY CCL?
	JRST	BEGIN
	EXIT

DECPNT:	IDIVI	2,^D10
	PUSH	P,3
	SKIPE	2
	PUSHJ	P,DECPNT
	POP	P,2
	ADDI	2,60
	OUTCHR	2
	POPJ	P,			;EXIT

PPNGET:	SETZM	UFDNAM			;IN CASE OF RESTART
	SETZM	LFTHLF
	SETZM	RTHLF
	MOVEI	4,LFTHLF#
	INCHWL				;GET PPN
	SKIPA
PPNGE1:	INCHRW				;GET NEXT CHAR.
	CAIN	"H"			;WANT HELP?
	JRST	HELPER
	CAIN	"E"			;EXIT?
	EXIT
	CAIN	15
	INCHRW
	CAIN	12			;CR OR LF ?
	JRST	PPNGE2
	CAIE	33
	CAIN	175
	JRST	PPNGE2
	CAIN	176			;CHECK ALTMODES OF VARIOUS FLAVORS
	JRST	PPNGE2
	CAIN	","			;DELIMITER ?
	JRST	PPNGE3
	CAIE	" "
	CAIN	"	"
	JRST	PPNGE1			;RETURN IF SPACE OR TAB
	CAIL	"0"
	CAILE	"7"
	JRST	WHAT
	SUBI	60
	MOVE	1,(4)
	ROT	1,3
	ADDM	1
	MOVEM	1,(4)
	JRST	PPNGE1

PPNGE3:	MOVEI	4,RTHLF#		;SAVE PROGRAMMER NUMBER
	JRST	PPNGE1			;LOOP

PPNGE2:	HRL	LFTHLF
	HRR	RTHLF
	MOVEM	UFDNAM
	POPJ	P,

HELPER:	OUTSTR	HELMSG			;TELL USER OF GOOD THINGS
	CLRBFI				;RESET INPUT BUFFER
	JRST	EXCCL			;RETURN

HELMSG:	ASCIZ/
TYPE "C.RET." TO UPDATE YOUR DISK AREA OR
"PROJ,PROG" FOLLOWED BY A "C.RET." TO UPDATE
OTHER DISK AREAS. TO UPDATE MORE THAN ONE STR
USE THE ASSIGN COMMAND TO LOGICALLY
ASSIGN THAT STR AS DSK AND RESTART.
PROJECT,PROGAMMER NUMBER PAIR MUST BE OCTAL.
DECIMAL INPUT IS INTERPRETED AS AN ILLEGAL COMMAND.
INPUT FORM IS:
PROJECT#,PROGRAMMER#
WITH NO BRACKETS.
SWITCHES:
H	TYPE THIS BLURB
E	EXIT
/

PLIST:	BLOCK	50

	LIT

	VAR

END	BEGIN
   