.TITLE INDCMD .SBTTL INDIRECT (EDIT) COMMAND PROCESSOR ;*************************************************************************** ; ; PROCESS INDIRECT (EDIT) COMMANDS ; ;**************************************************************************:* INDCMD::MOV #ICMD,R2 ;PTR TO COMMAND BUFFER CLR R3 ;COUNT OF # OF COMMANDS INDLOP: CALL INPUT ;GET A COMMAND LINE CMPB #73,(R0) ;IS IT A ";" FOR A COMMENT? BEQ INDLOP ;IGNORE REST OF LINE IF SO CMPB #'E,(R0) ;"E" COMMAND? BNE 1$ ;NO MOV #-1,(R2)+ ;SIGNAL END OF INPUT RETURN 1$: CMPB #'P,(R0) ;"P" COMMAND? BNE 2$ ;NO MOV #ICMD,R2 ;PURGE ALL COMMANDS CLR R3 ;START OVER BR INDLOP ;CONTINUE 2$: BIT #ED,FLAG ;ARE WE AN EDIT OR DUMP? BNE ICED ;BR IF EDIT ICDU: CMPB #'L,(R0) ;GOT A LIST COMMAND IN DUMP MODE? BEQ 1$ ;YES, SO OKAY MOV #DMPER,R1 ;OTHERWISE ERROR CALL PRINT ;PRINT IT JMP INDLOP ;GO GET NEW COMMAND 1$: MOV #L,CODE ;SAVE COMMAND CODE JMP INDPRC ;GO PROCESS THE LINE ; EDIT COMMANDS ICED: MOV #D,CODE ;SAVE A COMMAND CODE CMPB #'D,(R0) ;GOT A "D" FOR DELETE? BNE .+6 ;NO JMP INDPRC ;PROCESS THE COMMAND MOV #I,CODE ;SAVE A COMMAND CODE CMPB #'I,(R0) ;GOT A "I" FOR INSERT? BNE .+6 ;NO JMP INDPRC ;PROCESS THE COMMAND MOV #N,CODE ;SAVE A COMMAND CODE CMPB #'N,(R0) ;GOT A "N" FOR RENAME? BNE .+6 ;NO JMP INDPRC ;PROCESS THE COMMAND MOV #R,CODE ;SAVE A COMMAND CODE CMPB #'R,(R0) ;GOT A "" FOR REPLACE? BNE .+6 ;NO JMP INDPRC ;PROCESS THE COMMAND MOV #DMPER,R1 ;ERROR IF ANYTHING ELSE CALL PRINT ;PRINT IT JMP INDLOP ;AND CONTINUE RETURN .PAGE ;*************************************************************************** ; ; PROCESS A COMMAND LINE ; ;***************************************************************************** INDPRC: MOV R2,ARG8 ;SAVE COMMAND BUFFER POINTERS, INCASE MOV R3,ARG9 ; FIND #40 ;GO FIND THE SPACE TST R1 ;DID WE RUN OUT BEFORE WE FOUND IT? BGT .+6 ;NO JMP INDBAD ;OTHERWISE, UNEXPECTED END 2$: MOV CODE,(R2)+ ;SAVE COMMAND SKIP 40 ;SKIP ANY SPACES RAD50 R2,R1 ;GET A NAME RAD50 R2,R1 ; CMPB #':,(R0) ;IS THERE ANOTHER NAME OR IDENT? BNE 4$ ;NO TSTB (R0)+ ;SKIP THE : DEC R1 ;COUNT IT RAD50 R2,R1 ;GET A NAME RAD50 R2,R1 ; BR 5$ ;CONT 4$: CLR (R2)+ ;CLEAR IDENT SPACE CLR (R2)+ ; 5$: CALL INDCNT ;COUNT THE COMMAND TST R1 ;AT THE END OF INPUT? BPL .+6 ;NOT YET JMP INDBAD ;ERROR OTHERWISE BGT .+6 ;STILL MORE LEFT? JMP INDLOP ;NO, GET NEW COMMAND SKIP 40 ;SKIP ANY SPACES SKIP 11 ;SKIP TABS CMPB #54,(R0) ;WE ACCEPT A COMMA? BEQ 3$ ;OKAY CMPB #73,(R0) ;THE REST IS A COMMENT? BNE .+6 ;NO, SO ERROR JMP INDLOP ;OTHERWISE IGNORE REST OF LINE JMP INDFMT ;FORMAT ERROR 3$: TSTB (R0)+ ;SKIP COMMA DEC R1 ;COUNT THE COMMA BGT .+6 ;HOPEFULLY, STILL MORE JMP INDBAD ;ERROR IF NOTHING AFTER COMMA JMP 2$ ;CONTINUE WITH THIS LINE .PAGE ;************************************************************************* ; ; ERROR ROUTINES ; ;************************************************************************* INDCNT: INC R3 ;COUNT THIS NEW COMMAND CMP #ICNUM,R3 ;AT THE LIMIT? BGT .+6 ;NO JMP INDTOO ;ERROR RETURN DMPER: .WORD DMPERL ;LENGTH .ASCII / *** NOT ALLOWED WITH SPECIFIED SWITCH ***/ DMPERL = .-DMPER-2 .EVEN INDBAD: MOV #INDB,R1 ;MESSAGE FORMAT CALL PRINT ;PRINT IT MOV ARG8,R2 ;IGNORE COMMANDS ON THIS LINE MOV ARG9,R3 ; JMP INDLOP ;CONTINUE INDB: .WORD INDBL ;LENGTH .ASCII / *** UNEXPECTED END OF COMMAND LINE ***/ INDBL = .-INDB-2 .EVEN INDFMT: MOV #INDF,R1 ;MESSAGE FORMAT CALL PRINT ;PRINT IT MOV ARG8,R2 ;IGNORE COMMANDS ON THIS LINE MOV ARG9,R3 ; JMP INDLOP ;CONTINUE INDF: .WORD INDFL ;LENGTH .ASCII / *** ILLEGAL SYNTAX ***/ INDFL = .-INDF-2 .EVEN INDTOO: MOV #INDT,R1 ;MESSAGE FORMAT CALL PRINT ;PRINT IT MOV ARG8,R2 ;IGNORE COMMANDS ON THIS LINE MOV ARG9,R3 ; JMP INDLOP ;CONTINUE INDT: .WORD INDTL ;LENGTH .ASCII / *** TOO MANY INDIRECT (EDIT) COMMANDS ***/ INDTL = .-INDT-2 .EVEN .END