ALWAYS 30APR2 DISPLAY ;30APR2 .MCALL DIR$,PUT$,CLOSE$,PRINT$,OPEN$W ;**-1 ; ; MODULE: DISPLAY ; ; FUNCTION: DISPLAY A RANGE OF VIRTUAL MEMORY ; ; INPUT PARAMETERS: ; ; R0 POINTS TO THE COMMAND LINE IN PROCESS ; ; OUTPUT PARAMETERS: ; ; DESTROYS ALL REGISTERS ; ; AUTHOR: KEVIN ANGLEY ; ; DATE: 02-SEP-80 ; ;30APR2 ;30APR2 ;30APR2 ; 30APR2 KEVIN ANGLEY CORRECTED INCORRECT USAGE OF FLAGS AFTER THE ;30APR2 ; GETKEY MACRO. SHOULD USE Z-FLAG TO DETERMINE ;30APR2 ; MATCH (Z SET) OR NO MATCH (Z CLEAR). ;30APR2 ; ;30APR2 ;30APR2 ;30APR2 ;30APR2 DISPLAY:: CALL FROMTH ; COLLECT FROM/THRU BCC 2$ ; CC: SUCCESS JMP ERREXIT ; TAKE ERROR EXIT 2$: BICB #^B00001111,R1 ; ROUND FROM ADDRESS DOWN TO XXX0 MOV R1,R3 ; SAVE FROM IN R3 MOVB (R0),R5 ; TI:/FILE FLAG BNE 10$ ; NE: MUST BE FILE MOV #TILEN,DSPTDL ; SET UP TI: LENGTH MOV #TI,DSPTDP ; SET UP TI: POINTER CLR DSPTUL ; CLEAR UIC CLR DSPTNL ; CLEAR NAME BR 15$ ; SKIP FILE PARSE 10$: GETKEY FILE ; GET FILE KEYBOARD BEQ 12$ ; EQ: GOT IT ;30APR2 OUTPUT MSK ; MISSING KEYWORD ;**-1 JMP ERREXIT ; TAKE ERROR EXIT 12$: CALL PARSE ; PARSE FILE DESCRIPTOR BCC 15$ ; CC: SUCCESS JMP ERREXIT ; TAKE ERROR EXIT 15$: OPEN$W #FDB ; OPEN FILE FOR WRITE BCC 30$ ; CC: OPENED O.K. OUTPUT FOE ; FILE OPEN ERROR JMP ERREXIT ; TAKE ERROR EXIT 30$: PUT$ #FDB,,#0 ; OUTPUT BLANK LINE MOV #RECORD,R0 ; FORMAT HEADER MOV #"AD,(R0)+ ; PUT ADDR HEADER MOV #"DR,(R0)+ CALL SPACER ; PUT IN SPACES AFTER IT CLR R1 ; PUT OUT 00-OF MOV #16.,R4 32$: CALL SPACER ; SPACE BEFORE IT CALL PUTHX2 ; PUT 2 HEX DIGITS INC R1 ; ADVANCE FROM 00-0F SOB R4,32$ ; FOR 16 TIMES SUB #RECORD,R0 ; COMPUTE COUNT MOV R0,R1 ; COUNT GOES IN R1 PUT$ #FDB,,R1 ; PUT THE HEADER BCS 245$ ; CS: ERROR EXIT WITH CLOSE MOV #RECORD,R0 ; CHANGE NON-BLANKS TO HYPHEN PUSH R1 ; SAVE RECORD LENGTH 35$: CMPB #SPACE,(R0)+ ; IS IT A SPACE? BEQ 37$ ; EQ: YES - LEAVE IT MOVB #HYPHEN,-1(R0) ; REPLACE WITH HYPHEN 37$: SOB R1,35$ ; CONTINUE UNTIL DONE POP R1 ; RESTORE RECORD LENGTH PUT$ #FDB,,R1 ; OUTPUT THE RECORD BCS 245$ ; CS: ERROR EXIT WITH CLOSE PUT$ #FDB,,#0 ; OUTPUT BLANK LINE BCS 245$ ; CS: ERROR EXIT WITH CLOSE 40$: ; OUTPUT LINE OF MEMORY MOV #RECORD,R0 MOV R3,R1 ; GET CURRENT ADDRESS ADD OFFST,R1 ; UN-OFFSET CALL PUTHX4 ; PUT OUT THE ADDRESS CALL SPACER ; SPACE AFTER IT MOV #16.,R4 ; PUT OUT 16. BYTES 45$: CALL SPACER ; SPACE BEFORE IT MOVB MEMORY(R3),R1 ; LOAD THE BYTE CALL PUTHX2 ; PUT IT OUT INC R3 ; INCREMENT FROM ADDRESS SOB R4,45$ ; PUT OUT 16. BYTES SUB #RECORD,R0 ; CALCULATE RECORD LENGTH MOV R0,R1 ; PUT RECORD LENGTH IN R1 PUT$ #FDB,,R1 ; OUTPUT THE RECORD BCS 245$ ; CS: FAILED - EXIT WITH CLOSE CMP R3,R2 ; DONE? BHI 250$ ; HI: FROM > TO TSTB R3 ; NEED A HEADER? BEQ 30$ ; EQ: PAGE BOUNDARY BR 40$ ; NO, PUT OUT MORE 245$: ; ERROR EXIT WITH CLOSE OUTPUT IOE ; I/O ERROR 250$: PUT$ #FDB,,#0 ; OUTPUT BLANK LINE TSTB R5 ; TERMINAL OR FILE? BNE 252$ ; NE: FILE CLOSE$ #FDB ; TERMINAL - JUST CLOSE BR 254$ 252$: PRINT$ #FDB ; FILE - SPOOL TO PRINTER 254$: BCC 255$ ; IF PROPERLY CLOSED, EXIT OUTPUT IOE ; I/O ERROR ON CLOSE 255$: RETURN ; EXIT .PAGE .SBTTL SPACER - PUT EVEN # SPACES SPACER: MOV #" ,(R0)+ ; TWO SPACES FOR TI: TSTB R5 ; TI: OR FILE? BEQ 10$ ; EQ: TI: WE ARE DONE MOV #" ,(R0)+ ; TWO MORE FOR FILE 10$: ERREXIT: RETURN .END