TITLE REAP SUSPECT A=1 B=2 FN1=3 CH=4 FN2=5 CT=6 DIRPT=7 ;POINTER INTO DIRBUF MFDPT=10 ;POINTER INTO MFDBUF OBUFCT=11 ;OUTPUT BUFFER CHAR COUNT OBPT=12 ;OUTPUT BUFFER BYTE POINTER P=17 MFDBI=14 DIRBI=15 DSKBO=16 CALL=PUSHJ P, JCALL==JRST RET=POPJ P, SAVE=PUSH P, REST=POP P, .MLLIT==1 NPRIN==3 ;NO. OF FN2'S BEFORE SUSPICION DEFINE SYSCAL A,B .CALL [SETZ ? SIXBIT \A\ ? B ((SETZ))] TERMIN DEFINE OPEN CH,MODE,DEV,FN1,FN2,SNM .CALL [SETZ ? SIXBIT \OPEN\ ? 1000,,CH ? 5000,,MODE [SIXBIT \DEV\] [SIXBIT \FN1\] IFSE SNM,,SETZ [SIXBIT \FN2\] IFSN SNM,,[[SIXBIT \FN2\] ? SETZ [SIXBIT \SNM\]]] TERMIN SNOOZE: MOVEI A,30. .SLEEP A, GO: .CORE </2000> JRST SNOOZE MOVE P,[-LPDL,,PDL-1] .SUSET [.RSNAM,,ISNAM] OPEN MFDBI,6,DSK,M.F.D.,(FILE),COMMON .VALUE SYSCAL OPEN,[1000,,DSKBO ? 5000,,7 ? [SIXBIT \DSK\] [SIXBIT \REAP\] ? ['SUSPEC] ? ISNAM] .VALUE [ASCIZ \:CAN'T OPEN DSK OUTPUT FILEî\] MOVNI OBUFCT,5*LOBUF MOVE OBPT,[010700,,OBUF-1] MOVEI A,[ASCIZ \ REAPER SUSPECTS:\] CALL 7TYPE MOVE A,[-2000,,MFDBUF] ;IOT IN THE M.F.D. .IOT MFDBI,A MOVE MFDPT,MFDBUF+1 MOVEI MFDPT,MFDBUF(MFDPT) MFDLP: MOVE A,(MFDPT) JUMPE A,MFDLP1 MOVNI CT,3 MFDLP0: SYSCAL OPEN,[1000,,DIRBI ? 5000,,6 ? [('DSK)] ['.FILE.] ? [SIXBIT \(DIR)\] ? A] JRST [ AOSL CT .VALUE [ASCIZ \:CAN'T INPUT DIRî1'/\] MOVEI B,30. .SLEEP B, JRST MFDLP0] MOVE A,[-2000,,DIRBUF] .IOT DIRBI,A CALL TRYDIR MFDLP1: MOVEI MFDPT,2(MFDPT) CAIL MFDPT,MFDBUF+2000 JRST WINDUP JRST MFDLP WINDUP: MOVEI A,[ASCIZ \ ********** END OF SUSPECTS. \] CALL 7TYPE MOVEI CH,^C OCLOLP: TLNN OBPT,760000 ;ZAP OUT ENOUGH ^C'S TO FILL OUT WORD JRST OCLOSE IDPB CH,OBPT JRST OCLOLP OCLOSE: MOVEI A,-OBUF+1(OBPT) ;OUTPUT REMAINING BUFFER JUMPE A,OCLOS1 MOVNS A MOVSS A HRRI A,OBUF .IOT DSKBO,A OCLOS1: .CLOSE DSKBO, ;CLOSE BUFFER AND DIE .BREAK 16,40000 ;:KILL ;SEMICOLON THIS LINE .VALUE [ASCIZ \:KILLî\] ; FOR DEBUGGING TRYDIR: MOVE DIRPT,DIRBUF+1 ;POINTS TO START OF NAME AREA MOVEI DIRPT,DIRBUF-5(DIRPT) ;1ST NAME - 5 SETZB CT,OFN1 SETOM SNMPRT TRYNXT: MOVEI DIRPT,5(DIRPT) CAIGE DIRPT,DIRBUF+2000 ;IF PAST END OF DIR, JRST TRYNX0 CAIGE CT,NPRIN ; SEE ABOUT PRINT AND LEAVE RET AOSN SNMPRT CALL PRTSNM CALL TERPRI CALL SPACE MOVE A,OFN1 JCALL 6TYPE TRYNX0: MOVE FN1,(DIRPT) ;PICK UP FILE NAMES MOVE FN2,1(DIRPT) CAME FN1,OFN1 JRST NEWFN1 TRYNX1: CALL NUMP ADD CT,B JRST TRYNXT NEWFN1: CAIGE CT,NPRIN JRST NEWFN2 ;IF COUNT NOT ENOUGH TO PRINT OLD FN1 AOSN SNMPRT ;HAS SNAME BEEN PRINTED YET? CALL PRTSNM CALL TERPRI CALL SPACE MOVE A,OFN1 CALL 6TYPE NEWFN2: SETZ CT, MOVEM FN1,OFN1 JRST TRYNX1 NUMP: SETZM NUMFLG ;RETURN 0 OR 1 IN B IF FN2 ISN'T/IS NUMERIC NUMPLP: SETZ CH, ;NUMERIC MEANS ENDS WITH "." OR DIGIT JUMPE FN2,[MOVN B,NUMFLG ? RET] ;NO MORE CHARS LSHC CH,6 ;FN2=CH+1 SETZM NUMFLG CAIN CH,'. JRST NUMPLP ;LEAVE NUMFLG AS IS CAIL CH,'0 CAILE CH,'9 JRST NUMPLP ;NUMFLG IS STILL 0 SETOM NUMFLG JRST NUMPLP PRTSNM: CALL TERPRI MOVE A,(MFDPT) CALL 6TYPE MOVEI CH,"; JCALL TYO 7TYPE: HRLI A,440700 ;TYPE ASCIZ POINTED TO BY A 7TYLP: ILDB CH,A JUMPE CH,CPOPJ CALL TYO JRST 7TYLP 6TYPE: EXCH A,FN2 ;TYPE 6BIT IN A, ^Q-QUOTING EMBEDDED 6TYLP: JUMPE FN2,[EXCH A,FN2 ? RET] ;SPACES SETZ CH, LSHC CH,6 JUMPE CH,[MOVEI CH,"^ ? CALL TYO MOVEI CH,"Q ? CALL TYO SETZ CH, ? JRST .+1] ADDI CH,40 CALL TYO JRST 6TYLP TERPRI: MOVEI CH,^M CALL TYO SKIPA CH,[^J] SPACE: MOVEI CH,40 TYO: IDPB CH,OBPT ;CLOBBERS CH AOJLE OBUFCT,CRET MOVE CH,[-LOBUF,,OBUF] .IOT DSKBO,CH MOVNI OBUFCT,5*LOBUF MOVE OBPT,[010700,,OBUF-1] CRET: CPOPJ: RET ISNAM: 0 ;INITIAL SNAME OF THIS JOB OFN1: 0 ;OLD FN1 (USED WHEN LOOKING FOR DUPLICATIONS) SNMPRT: 0 ;SAYS WHETHER SNAME NEEDS TO BE PRINTED NUMFLG: 0 ;SAYS WHETHER LAST CHAR WAS A NUMBER CONSTITUENT LPDL==20 PDL: BLOCK LPDL CONSTA VARIAB LOBUF==1000 OBUF: BLOCK LOBUF MFDBUF: BLOCK 2000 DIRBUF: BLOCK 2000 ENDLOC==. END GO