C+ C #.#.# C C C C I/O Buffer Dump Routine (IODUMP) C C C FUNCTION: C Print contents of input or output buffer for debug C purposes. C C C CALLING SEQUENCE: C C CALL IODUMP ( OPTION, BUFFER, COUNT) C C WHERE: C ARGUMENT = DESCRIPTION ACCESS C C OPTION = Option word specifing header message PA C and dump option. C bit 15 - dump option: C 0 - byte format C 1 - word format C bits 14-0 - header option: C 0 - no header C 1 - 'OUTPUT BUFFER:' C 2 - 'INPUT BUFFER:' C C BUFFER = Buffer to print PA C C COUNT = Byte count PA C C SUBROUTINES REFERENCED: C GETADR WTQIO GTLUN C C C DESCRIPTION: C IODUMP is a debug tool for dumping a buffer for trace C purposes. C C IODUMP prints COUNT number of bytes from the BUFFER C in HEX-ASCII format(2 hex digits per byte). If word mode C is selected, IODUMP will format the output as word aligned C (4 hex digits per word). C IODUMP formats the output into 16 bytes or 8 words per line C separated by a space. C C IODUMP uses no FORTRAN conversion routines and calls C WTQIO directly. C C SPECIAL CONSIDERATIONS: C NONE C- SUBROUTINE IODUMP (OPTION, BUFFER, COUNT) IMPLICIT INTEGER (A-Z) PARAMETER LUN = 4 PARAMETER IOWLB = 256 DIMENSION PRL(6), ISB(2), OUTMSG(9), INPMSG(9), LUNBUF(6) BYTE BUFFER(100), ASCBUF(50), CVTCOD(16) DATA CVTCOD / 48,49,50,51,52,53,54,55,56,57 * ,65,66,67,68,69,70/ DATA OUTMSG /3338,'OU','TP','UT',' B','UF','FE','R:',3338/ DATA INPMSG /3338,'IN','PU','T ','BU','FF','ER',': ',3338/ C C Assign whatever 'BG0:' is to lun 4. C If it's assigned to NL: or - C GLUN$ returns error, return. C CALL GETLUN (LUN, LUNBUF, IDS) IF (LUNBUF(1) .EQ. 'NL' .OR. IDS .NE. 1) GO TO 900 IOFLAG = IAND(OPTION, 3) WMODE = IAND(OPTION, "100000) CALL GETADR (PRL,OUTMSG) IF (IOFLAG .EQ. 2)CALL GETADR (PRL,INPMSG) PRL(2) = 18 IF (IOFLAG .LE. 0 .OR. IOFLAG .GT. 2)PRL(2) = 2 CALL WTQIO (IOWLB, LUN, 1, PRI, ISB, PRL, IDS) IF (ISB(1) .NE. 1) GO TO 900 ICNT = COUNT IF (ICNT .LE. 0) GO TO 900 IPTR = 1 10 CONTINUE OPTR = 1 IF (WMODE .NE. 0)GO TO 40 DO 30 I = 1,16 WORK = BUFFER(IPTR) WORK = IAND(WORK,"377) ASCBUF(OPTR) = CVTCOD(ISHFT(WORK,-4)+1) ASCBUF(OPTR+1) = CVTCOD(IAND(WORK,15)+1) ASCBUF(OPTR+2) = 32 IPTR = IPTR + 1 OPTR = OPTR + 3 ICNT = ICNT - 1 IF (ICNT .EQ. 0) GO TO 100 30 CONTINUE GO TO 100 40 CONTINUE DO 60 I = 1,8 WORK = BUFFER(IPTR+1) WORK = IAND(WORK,"377) ASCBUF(OPTR) = CVTCOD(ISHFT(WORK,-4)+1) ASCBUF(OPTR+1) = CVTCOD(IAND(WORK,15)+1) WORK = BUFFER(IPTR) WORK = IAND(WORK,"377) ASCBUF(OPTR+2) = CVTCOD(ISHFT(WORK,-4)+1) ASCBUF(OPTR+3) = CVTCOD(IAND(WORK,15)+1) ASCBUF(OPTR+4) = 32 IPTR = IPTR + 2 OPTR = OPTR + 5 ICNT = ICNT - 2 IF (ICNT .LE. 0) GO TO 100 60 CONTINUE 100 CONTINUE CALL GETADR (PRL,ASCBUF) ASCBUF(OPTR) = 13 ASCBUF(OPTR+1) = 10 PRL(2) = OPTR + 1 CALL WTQIO (IOWLB, LUN, 1, PRI, ISB, PRL, IDS) IF (ICNT .GT. 0) GO TO 10 900 CONTINUE RETURN END