.TITLE DIR .SBTTL PRINT DIRECTORY ;************************************************************************ ; ; PRINT THE DIRECTORY OF A GIVEN CIL ; R4 = PTR TO 1ST BLOCK OF CIL ; ;************************************************************************ DIR:: TST PRIFLG ;IS THIS AN LDA OR LCL FILE? BEQ .+6 ;NO JMP DIROP ;IF YES, THEN NO "1" TST (R4)+ ;SKIP "1" ADD (R4)+,R4 ;SKIP OVER HEADER RECORD DIROP:: TST (R4)+ ;CHECK RECORD SIZE BNE .+6 ;KEEP GOING IF NOT ZERO SEC ;FLAG END OF DIRECTORY RETURN ;IF ZERO, END OF DIRECTORY CALL DCHK ;CHECK FOR END OF BUFFER TST (R4)+ ;SKIP CALL DCHK ;CHECK FOR END OF BUFFER TST (R4)+ ;SKIP CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4),LADR ;LOAD ADDRESS MOV (R4)+,ARG6 ;LOAD ADDRESS CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4),SIZE ;SIZE MOV (R4)+,ARG5 ;SIZE CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4)+,ARG7 ;START ADDRESS CALL DCHK ;CHECK FOR END OF BUFFER TST (R4)+ ;SKIP ODT ADDRESS CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4)+,BLOCK ;SAVE RELATIVE BLOCK START INC BLOCK ;COUNT THE ONE WE'RE IN CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4),NAME ;NAME MOV (R4)+,ARG ; CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4),NAME+2 ;2ND WORD OF NAME MOV (R4)+,ARG2 ; CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4)+,ARG3 ;IDENT CALL DCHK ;CHECK FOR END OF BUFFER MOV (R4)+,ARG4 ; CALL DCHK ;CHECK FOR END OF BUFFER BIT #DU!ED,FLAG ;ARE WE A DUMP? BEQ 1$ ;NO CLC ;FLAG THAT WE AREN'T DONE RETURN .PAGE 1$: MOV #DIRDTM,R1 ;GET ADDRESS STRING CALL DATE ;CONVERT DATE AND TIME MOV #DIRM,R1 ;MESSAGE FORMAT CALL OUTPUT ;PRINT IT DIROP2::TST (R4)+ ;SKIP CALL DCHK ;CHECK FOR END OF BUFFER TST (R4)+ ;SKIP "0" CALL DCHK ;CHECK FOR END OF BUFFER CMP #-1,PRIFLG ;ARE WE AN LDA FILE? BEQ LOAD1 ;IF YES, NO CHECKSUM OR "1" TST (R4)+ ;SKIP CHECKSUM CALL DCHK ;CHECK FOR END OF BUFFER TST (R4)+ ;SKIP "1" CALL DCHK ;CHECK FOR END OF BUFFER CMP #-2,PRIFLG ;ARE WE AN LICIL? BEQ LCLD3 ;IF YES, NEED TO SKIP FILE DATA BIT #ED,FLAG ;IN EDIT MODE? BEQ .+6 ;NO CLC ;IF YES, RETURN HERE; NO LOOPING RETURN ; JMP DIROP ;NO, CONTINUE DIRECTORY ;**************************************************************************** ; ; SPECIAL PROCESSING FOR LDA'S AND LICIL'S ; ;**************************************************************************** LCLD3: CMP #6,(R4) ;DID WE FIND THE END OF FILE RECORD? BEQ LCLD4 ;YES, STARTING NEW FILE BMI 1$ ;EXTRA ZERO WORD? BUMP R1 ;MAKE SURE AT END OF RECORD BR LCLD3 ;TRY AGAIN 1$: PUSH R3 ;SAVE NEXT ;FIND THE NEXT RECORD POP R3 ;RECOVER BR LCLD3 ;AND KEEP LOOKING FOR THE END ; LCLD4: PUSH R3 ;SAVE NEXT ;AT THE END, SKIP TO NEXT HEADER POP R3 ;RECOVER CMP #LDAHDR+4,(R4) ;MAKE SURE ITS A HEADER BEQ 2$ ;YES, OKAY BUMP R1 ;TRY TO FIND NEXT RECORD CMP #LDAHDR+4,(R4) ;MAKE SURE ITS A HEADER BEQ 2$ ;YES, OKAY SEC ;OTHERWISE FLAG END OF FILE RETURN ;AND RETURN 2$: BIT #ED,FLAG ;IN EDIT MODE? BEQ .+6 ;NO CLC ;IF YES, RETURN HERE; NO LOOPING RETURN ; JMP DIROP ;OTHERWISE PROCESS NEW HEADER .PAGE ; LOAD1: CMP #2,(R4) ;DID WE FIND THE END OF FILE RECORD? BEQ LOAD2 ;YES PUSH R3 ;SAVE NEXT ;FIND THE NEXT RECORD POP R3 ;RECOVER BR LOAD1 ;AND KEEP LOOKING FOR THE END ; LOAD2: PUSH R3 ;SAVE NEXT ;AT THE END, SKIP TO NEXT HEADER POP R3 ;RECOVER CMP #LDAHDR,(R4) ;MAKE SURE ITS A HEADER BEQ 1$ ;YES, OKAY CLR (R4) ;SIGNAL END OF FILE SEC ;FLAG END OF FILE RETURN ;AND RETURN 1$: BIT #ED,FLAG ;IN EDIT MODE? BEQ .+6 ;NO CLC ;IF YES, RETURN HERE; NO LOOPING RETURN ; JMP DIROP ;OTHERWISE PROCESS NEW HEADER ; ; DIRM: .ASCII /%2R %2R / DIRDTM: .ASCII /XX-XXX-XX XX:XX:XX/ .ASCIZ / %P %P %P/ .EVEN .END