	TITLE	EVENTS
	SUBTTL	PHIL BUDNE@DEC JAN 31, 1984
	SEARCH	MONSYM,MACSYM

A==1
B==2
C==3
D==4

X==6

P==17

.JBSA==120
.JBFF==121
LPDL==20
LLINE==^D<<132+4>/5+1>
LTAB==^D<12*31>

START:	JFCL
	RESET
	MOVE	P,[IOWD LPDL,PDL]
	SKIPN	INITED
	 JRST	REBUILD

	SETO	B,
	SETZ	D,
	ODCNV
	 ERCAL	JSE
	HRRZ	X,B
	IMULI	X,^D31
	HLRZ	C,C
	ADDI	X,(C)

	SKIPN	D,EVTTAB(X)
	 IFSKP.
		TMSG	<Events:
>
		CALL	PRINT
	 ENDIF.
	SKIPN	D,CELTAB(X)
	 IFSKP.
		TMSG	<Famous People:
>
		CALL	PRINT
	 ENDIF.
	SKIPN	D,BIRTAB(X)
	 IFSKP.
		TMSG	<Happy Birthday to:
>
		CALL	PRINT
	 ENDIF.
	HALTF
	JRST	START

PRINT:	HLRZ	D,D		;GET FIRST ENTRY
PLOOP:	MOVEI	A,"I"-100
	PBOUT
	HRROI	A,1(D)
	PSOUT
	HRRZ	D,(D)
	JUMPN	D,PLOOP
	TMSG	<
>				;BLANK LINE
	RET

REBUILD:
	MOVE	A,[ZERBEG,,ZERBEG+1]
	BLT	A,ZEREND	;CLEAR TABLES
	HLRZ	A,.JBSA		;GET OLD .JBFF
	CAMN	A,.JBFF		;SAME?
	 JRST	REB.1		;YES
	SETZM	(A)
	HRLI	A,(A)		;GET COPY IN LH
	ADDI	A,1		;BUMP RH
	MOVE	B,.JBFF
	BLT	A,-1(B)		;ZAP...
	HLRZ	A,.JBSA
	MOVEM	A,.JBFF
	SETZM	INITED
REB.1:	HRROI	A,[ASCIZ '
DATA FILE ?']
	PSOUT
	MOVSI	A,(GJ%SHT+GJ%OLD+GJ%MSG+GJ%CFM+GJ%FNS)
	MOVE	B,[.PRIIN,,.PRIOU]
	GTJFN
	 ERJMP [HRROI	A,[ASCIZ '..OOPS: ']
		PSOUT
		CALL	JST
		JRST	REBUILD ]

	MOVE	B,[70000,,OF%RD]
	OPENF
	 ERCAL	JSE
	MOVEM	A,IJFN

RDLOOP:	CALL	RDLINE
	 JRST	DONE
	LDB	B,[350700,,LINE]
	CAIE	B,"!"
	 CAIN	B,";"
	  JRST	RDLOOP
	HRROI	A,LINE
	MOVEI	C,^D10
	NIN
	 ERCAL	JSE
	CAIL	B,1
	 CAILE	B,^D12
	  JRST	RDLOOP		;BAD MONTH
	SUBI	B,1		;MAKE ZERO BASED
	IMULI	B,^D31
	MOVEM	B,TEMP

	NIN
	 ERCAL	JSE
	CAIL	B,1
	 CAILE	B,^D31
	  JRST	RDLOOP		;BAD DAY
	SUBI	B,1		;MAKE ZERO BASED
	ADDM	B,TEMP

	HRROI	B,KEY
	MOVEI	C,2*5-1
	MOVEI	D," "
	SIN
	 ERCAL	JSE
;;	JUMPE	C,
	MOVE	B,KEY
	TDZ	B,[BYTE(7) 40,40,40,40,40]
	SETZ	C,
	CAMN	B,[ASCII 'BIRTH']
	 MOVEI	C,BIRTAB
	CAMN	B,[ASCII 'EVENT']
	 MOVEI	C,EVTTAB
	CAMN	B,[ASCII 'CELEB']
	 MOVEI	C,CELTAB
	JUMPE	C,RDLOOP
	ADDB	C,TEMP
	MOVE	D,.JBFF
	SKIPE	B,(C)		;EMPTY ENTRY?
	 IFSKP.
		HRLM	D,(C)	;MAKE US FIRST
	 ELSE.
		HRRM	D,(B)	;HAVE LAST POINT TO US
	 ENDIF.
	HRRM	D,(C)		;MAKE US LAST
	SETZM	(D)		;CLEAR OUR FIRST WORD
	ADDI	D,1		;POINT TO NEXT WORD
	HRLI	D,(POINT 7,)	;MAKE BP
RDCOPY:	ILDB	B,A		;GET BYTE FROM TEXT
	IDPB	B,D		;STORE
	JUMPN	B,RDCOPY	;'TILL EOL
	MOVEI	D,1(D)		;GET WORD AFTER END
	MOVEM	D,.JBFF		;RESET END OF CORE

	JRST	RDLOOP

DONE:	SETOM	INITED
	HALTF
	JRST	DONE

RDLINE:	MOVE	A,IJFN
	HRROI	B,LINE
	MOVEI	C,LLINE*5-1
	MOVEI	D,"J"-100
	SIN
	 ERJMP	CPOPJ
	SETZ	D,
	IDPB	D,B
	JUMPN	C,CPOPJ1	;LESS THAN FULL BUFFER
	CALL	RDLINE		;GET REST OF LINE
CPOPJ:	 RET			; PASS 
	JRST	RDLINE		;GET ANOTHER LINE
CPOPJ1:	AOS	(P)
	RET

JST:	MOVEI	A,"?"
	PBOUT
	MOVEI	A,.PRIOU
	HRLOI	B,.FHSLF
	SETZ	C,
	ERSTR
	 SKIPA
	  JFCL
	RET

JSE:	CALL	JST
	HALTF
	JRST	JSE

PDL:	BLOCK	LPDL
IJFN:	BLOCK	1
LINE:	BLOCK	LLINE
TEMP:	BLOCK	1
KEY:	BLOCK	2
INITED:	BLOCK	1

ZERBEG:!
CELTAB:	BLOCK	LTAB
EVTTAB:	BLOCK	LTAB
BIRTAB:	BLOCK	LTAB
ZEREND==.-1

	END	START
