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 CALL PRINT ENDIF. SKIPN D,CELTAB(X) IFSKP. TMSG CALL PRINT ENDIF. SKIPN D,BIRTAB(X) IFSKP. TMSG 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