Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0125/gtblk6.for
There is 1 other file named gtblk6.for in the archive. Click here to see a list.
SUBROUTINE GTBLK6(BLOCK, COUNT)
C THIS SUBROUTINE RETRIEVES A BLOCK FROM DISK
C AND BUFFERS IT. IF THERE IS A CHECKSUM ERROR
C FROM DISK OR THE BLOCK IS TOO BIG THE PROGRAM
C WRITES THE APPROPRIATE ERROR MESSAGE IN THE
C LOG FILE AND THEN STOPS
C SUBROUTINE GETBYT RETURNS THE NEXT
C EIGHT BIT BYTE FROM DSK
IMPLICIT INTEGER (A - Z)
INTEGER BLOCK(2000)
DATA LOG, POINT /21, 0/
1 FORMAT(' %FILLER BYTE EXPECTED, BUT ',O3,' OBTAINED')
2 FORMAT(' BYTE COUNT = ',I5,'(10) LOAD ADDRESS = ',O6)
3 FORMAT(' ? CHECKSUM ERROR FROM DSK. SUM = ',O3)
4 FORMAT(' ? BLOCK TOO LARGE, COUNT = ',I5)
10 BYTE = GETBYT(CSUM)
IF(BYTE .NE. 1) GO TO 10
BLOCK(1) = 1
CSUM = 1
BYTE = GETBYT(CSUM)
IF(BYTE .EQ. 0) GO TO 20
WRITE(LOG, 1) BYTE
GO TO 10
20 BLOCK(2) = 0
BYTEL = GETBYT(CSUM)
BLOCK(3) = BYTEL
BYTEH = GETBYT(CSUM)
BLOCK(4) = BYTEH
COUNT = BYTEH * 2 ** 8 + BYTEL
IF(COUNT .LT. 2000) GO TO 30
WRITE(LOG, 4) COUNT
CLOSE(UNIT=LOG)
STOP
30 BYTEL = GETBYT(CSUM)
BLOCK(5) = BYTEL
BYTEH = GETBYT(CSUM)
BLOCK(6) = BYTEH
LOADDR = BYTEH * 2 ** 8 + BYTEL
WRITE(LOG, 2) COUNT, LOADDR
CT = COUNT - 6
IF(CT .EQ. 0) GO TO 50
DO 40 POINT = 7, CT + 6
BLOCK(POINT) = GETBYT(CSUM)
40 CONTINUE
50 BLOCK(COUNT + 1) = GETBYT(CSUM)
CSUM = CSUM .AND. "377
C WAS THERE A CHECKSUM ERROR ?
IF(CSUM .EQ. 0) RETURN
WRITE(LOG, 3) CSUM
CLOSE(UNIT=LOG)
STOP
END