.TITLE DUMP .SBTTL DUMP SWITCH PROCESSOR ;********************************************************************* ; ; PROCESS FILES TO BE DUMPED FROM INPUT CIL ; R0 = FDB ADDRESS ; ;********************************************************************* DUMP:: TST PRIFLG ;DID WE FIND US TO BE AN LDA OR LCL? BEQ .+6 ;NO, SO OKAY JMP UNDERR ;ILLEGAL FORMAT IF SO MOV #PRIBUF,R4 ;INIT BUFFER POINTER MOV #YR,YEAR ;FIX FOR DATE/TIME MOV #ICMD,R2 ;POINT TO COMMAND BUFFER TABLE CALL DIR ;GET 1ST NAME MOV #-1,R3 ;FLAG NO MATCH YET BR DMPLP2 ;CONTINUE DMPLOP: INCR 10 ;GET TO NEXT ENTRY CALL DIROP ;2ND ENTRANCE TO DIR DMPLP2: BCC .+6 ;END OF DIRECTORY? JMP 10$ ;YES 1$: TST (R2)+ ;CHECK FOR END OF COMMAND TABLE BMI 3$ ;HAVE REACHED END OF THIS PASS BEQ 2$ ;THIS MODULE HAS BEEN FOUND CMP (R2)+,NAME ;A MATCH? BNE 4$ ;NO CMP (R2)+,NAME+2 ;A COMPLETE MATCH? BNE 5$ ;NO ; FOUND A MATCH CLR -6(R2) ;SIGNAL THE MATCH CMP (R2)+,(R2)+ ;SKIP IDENT WORDS CLR R3 ;SIGNAL A MATCH THIS ROUND CALL DMPRDY ;GO PRINT THE DUMP JMP DMPLOP ;AND CONTINUE WITH NEXT ONE 4$: TST (R2)+ ;NO MATCH 5$: CMP (R2)+,(R2)+ ;SKIP TO NEXT COMMAND IN TABLE BR 1$ ;LOOP 2$: ADD #10,R2 ;SKIP OVER ONE ALREADY FOUND BR 1$ ;LOOP 3$: MOV #ICMD,R2 ;CHECK FOR LIST DONE 6$: TST (R2)+ ;CHECK FLAG BPL .+6 ;NOT THE END JMP RESTAR ;END OF LIST IF NEGATIVE BNE 7$ ;IF NOT ZERO, THEN STILL NOT FOUND ADD #10,R2 ;OTHERWISE, CONTINUE CHECKING BR 6$ ;LOOP 7$: MOV #ICMD,R2 ;INIT FOR ANOTHER GO AT SEARCHING TST R3 ;DONE WITH THIS ENTRY BPL 13$ ;NO INCR 6 ;GET TO NEXT ENTRY BR DMPLOP ;CONTINUE 13$: MOV #-1,R3 ;SET FLAG AGAIN BR 1$ ;LOOP .PAGE 10$: MOV #ICMD,R2 ;CHECK LIST AGAIN FOR ANY NOT FOUNDS 11$: TST (R2)+ ;CHECK FLAG BPL .+6 ;NOT THE END JMP RESTAR BNE 12$ ;FOUND A NO FOUND ADD #10,R2 ;SKIP TO NEXT ONE BR 11$ ;LOOP 12$: CALL MODNOT ;REPORT THE NO FOUND BR 11$ ;KEEP LOOPING ;************************************************************************** ; ; READY TO DUMP A MODULE ; ;************************************************************************** DMPRDY: MOV F.BKVB+2(R0),ARG11+2 ;SAVE MOV BLOCK,F.BKVB+2(R0) ;SET UP WHERE TO READ FROM CLR F.BKVB(R0) ; CALL DMPRD ;READ A BLOCK OF MODULE TO DUMP MOV #DMPDTM,R1 ;CALC DATE AND TIME CALL DATE ;DO IT MOV #DMP1,R1 ;MESSAGE FORMAT CALL OUTPUT ;PRINT THE DIRECTORY ENTRY PUSH R4 ;SAVE POINTER MOV SIZE,R4 ;GET SIZE MOV LADR,ARG ;SAVE LOAD ADDRESS FOR OUTPUT 1$: CMP #16.,R4 ;ENOUGH LEFT FOR FULL LINE? BGT DMPEND ;NO, PARTIAL LINE MOV (R3)+,ARG2 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG3 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG4 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG5 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG6 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG7 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG8 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV (R3)+,ARG9 ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER MOV #DMP2,R1 ;MESSAGE FORMAT CALL OUTPUT ;PRINT IT ADD #16.,ARG ;INCREMENT ADDRESS TST R4 ;CLEANLY AT THE END? BEQ DMPE ;YES BR 1$ ;LOOP .PAGE DMPEND: MOV #DMP3A,R1 ;POINT TO MESSAGE FORMAT BUILD BUF PUSH R5 ;SAVE MOV #ARG2,R5 ; 1$: MOVB #'%,(R1)+ ;SET UP MESSAGE FORMAT MOVB #'P,(R1)+ ; MOVB #40,(R1)+ ; MOV (R3)+,(R5)+ ;SAVE A VALUE CALL DMPCHK ;CHECK FOR END OF BUFFER TST R4 ;DONE? BGT 1$ ;YES CLRB (R1)+ ;SHOULD BE AN ASCIZ POP R5 ;RECOVER MOV #DMP3,R1 ;MESSAGE FORMAT CALL OUTPUT ;PRINT IT DMPE: MOV #CRLF,R1 ;CRLF'S BETWEEN DUMPS CALL OUTPUT ;PRINT IT MOV ARG11+2,F.BKVB+2(R0) ;RECOVER BLOCK NUMBER CLR F.BKVB(R0) ; MOV #PRIBUF,F.BKDS+2(R0) ;RESET INPUT BUFFER POINTER POP R4 ;GET OUR BUFFER POINTER BACK RETURN ;AND RETURN ;************************************************************************** ; ; MISC ROUTINES ; ;************************************************************************** DMPRD: READ$ R0,#INP2,,,,,,INERR ;DO A READ WAIT$ ; MOV #INP2,R3 ;SET POINTER RETURN DMPCHK: TST -(R4) ;COUNT THE WORD CMP #INP2+512.,R3 ;AT END OF BUFFER? BGT .+6 ;NO CALL DMPRD ;YES, READ NEW BUFFER RETURN ;*************************************************************************** ; ; LOCAL STORAGE DEFINITIONS ; ;*************************************************************************** CRLF: .ASCIZ /%N%N/ DMP1: .ASCII /%2R %2R / DMPDTM: .ASCII /XX-XXX-XX XX:XX:XX/ .ASCIZ / %P %P %P%N%N/ DMP2: .ASCIZ /%P %P %P %P %P %P %P %P %P/ DMP3: .ASCII /%P / DMP3A: .BLKB 25. .EVEN .END