     PROMPT ''

     TRUE = 1
* Item last updated: 09:19:02 05 NOV 1986 MIS.SNA.PROG.ATM <D4.3>DEVEL 80
     FALSE = 0
     OTHERS = TRUE

     ESC  = CHAR(27)
     CR   = CHAR(13)
     CLS  = @(-1)
     CEOL = @(-3)
     CEOP = @(-4)
     CERR = @(0,23)

     PARM = TRIM(@COMMAND)
     DRIVE.UNIT = FIELD(PARM,' ',2)
     BLOCK = FIELD(PARM,' ',3)
     LRECL = FIELD(PARM,' ',4)

     IF (LRECL EQ '') THEN
        STOP 'Syntax for DUMP.TAPE is: DUMP.TAPE UNIT BLOCK LRECL'
     END

     IF (INDEX((BLOCK/LRECL),'.',1) NE 0) THEN
        STOP 'Sorry, BLOCK must be a multiple of LRECL.'
     END

     PRINT 'MT':DRIVE.UNIT[1]:' rewinding . . .'
     REWIND UNIT(DRIVE.UNIT) ELSE
        STOP 'Unable to rewind MT':DRIVE.UNIT[1]
     END

     EOF.MARKS = 0
     BLOCKS = 0
     LRECLS = 0
     RECORDS = (BLOCK / LRECL) - 1

     HDG  = ''
     IF LRECL LE 132 THEN
        WIDTH = 132
     END ELSE
        WIDTH = 100
     END
     FOR I = 1 TO WIDTH
        COLUMN = ('   ':I)[3]
        FOR J = 1 TO 3
           HDG<J> = HDG<J>:COLUMN[J,1]
        NEXT J
     NEXT I

     EXECUTE 'SETPTR 1,,,,,,BRIEF,BANNER DUMP.TAPE,FORM SUITEJ'

     PRINT RECORDS+1:' logical records in a block.'
     PRINT '     0 Blocks read.':

     HEADING ON 1 HDG<1>:"'L'":HDG<2>:"'L'":HDG<3>:"'L'"

     LOOP
        RECORD.READ = TRUE
        READT UNIT(0100) RECORD ELSE
           RECORD.READ = FALSE
           PRINT ON 1 '* * * Else clause taken on READT, probable EOF mark encountered * * *'
           EOF.MARKS += 1
        END
     UNTIL EOF.MARKS GE 3
        BLOCKS += 1
        PRINT CR:FMT(BLOCKS,'R#6'):
        FOR I = 0 TO RECORDS
           LREC = RECORD[1,LRECL]
           IF LRECL LE 132 THEN
              PRINT ON 1 (RECORD[1,LRECL])
           END ELSE
              LOOP
              UNTIL LREC EQ ''
                 PRINT ON 1 LREC[1,100]
                 LREC = LREC[101,LEN(LREC)]
              REPEAT
           END
           RECORD = RECORD[LRECL+1,LEN(RECORD)]
        UNTIL RECORD EQ ''
        NEXT I
     REPEAT

     PRINT ON 1 '* * * Three EOF marks encountered, DUMP.TAPE terminated. * * *'

     PRINTER CLOSE ON 1

     PRINT
     PRINT 'DUMP.TAPE done.'

     REWIND UNIT(DRIVE.UNIT) ELSE
        STOP 'Unable to rewind MT':DRIVE.UNIT[1]
     END

     PRINT 'MT':DRIVE.UNIT[1]:' rewinding . . .'

  END
