ALWAYS 03SEP0 EDIT .MCALL DIR$,QIOW$C ; ; MODULE: EDIT ; ; FUNCTION: EXAMINE AND OPTIONALLY MODIFY VIRTUAL MEMORY ; ; INPUT PARAMETERS: ; ; R0 POINTS TO COMMAND LINE IN PROCESS ; ; OUTPUT PARAMTERS: ; ; NONE ; ; DESTROYS: ; ; R0,R1,R2 ; ; AUTHOR: KEVIN ANGLEY ; ; DATE: 03-SEP-80 ; ; EDIT:: CALL GETHX4 ; GET FIRST ADDRESS TO EDIT BCC 7$ ; CC: O.K. JMP ERREXIT ; TAKE ERROR EXIT 7$: CALL EXTRA ; PURGE COMMAND LINE OF SUPERFLUOUS JUNK NEXT: MOV #EDT,R0 ; FORMAT EDIT MESSAGE CALL PUTHX4 ; PUT IN ADDRESS TO EDIT CALL VALID ; VALIDATE AND OFFSET ADDRESS BCC 12$ ; CC: SUCCESS JMP ERREXIT 12$: MOV R1,R2 ; SAVE OFFSETTED ADDRESS MOVB MEMORY(R1),R1 ; RETRIEVE THE BYTE INC R0 ; SKIP OVER THE TAB IN EDT MESSAGE CALL PUTHX2 ; PUT THE CURRENT VALUE IN THE MESSAGE ; ISSUE READ AFTER PROMPTING WITH EDT MESSAGE QIOW$C IO.RPR,CMILUN,1,,IOSB,, BCC 20$ ; CC: SUCCESS OUTPUT CIE ; COMMAND INPUT ERROR BR 255$ 20$: MOV IOSB+2,R0 ; SAVE COUNT IN R0 CLRB RECORD(R0) ; MAKE ASCIZ MOV #RECORD,R0 ; PREPARE TO COMPRESS MOV R0,R1 30$: TSTB (R0) ; AT THE END YET? BEQ 40$ ; EQ: YES - PROCEED CMPB #SPACE,(R0) ; IS IT A SPACE BEQ 35$ ; EQ: YES - IGNORE CMPB #TAB,(R0) ; IS IT A TAB BEQ 35$ ; EQ: YES - IGNORE MOVB (R0),(R1)+ ; COMPRESS 35$: INC R0 ; KEEP COMPRESSING BR 30$ 40$: MOV #RECORD,R0 TSTB (R0) ; WAS A VALUE GIVEN? BEQ 50$ ; EQ: NO CALL GETHX2 ; GET THE VALUE BCS 255$ ; CS: ERROR EXIT MOVB R1,MEMORY(R2) ; PUT NEW VALUE INTO MEMORY 50$: CMP #IS.ESC,IOSB ; WAS TERMINATOR ESCAPE ? BEQ 255$ ; EQ: ESCAPE ---> EXIT EDIT MOV R2,R1 ; PUT OFFSETTED VALUE INTO R1 ADD OFFST,R1 ; UN-OFFSET INC R1 ; AND INCREMENT TO NEXT LOCATION JMP NEXT ; LET'S DO IT AGAIN 255$: ERREXIT: RETURN .PAGE .SBTTL EDIT DATA AREA .PSECT DATA .EVEN IOSB: .BLKW 2 ; I/O STATUS BLOCK FOR DIRECTIVE QIOW$C .PSECT .END