@@ -23,6 +23,8 @@ static int reclen = 0;
2323static int beginning_of_tape = 1 ;
2424static int marks = 0 ;
2525
26+ static int get_tape_record (FILE * f , word_t * * buffer );
27+
2628static int
2729get_byte (FILE * f )
2830{
@@ -79,6 +81,18 @@ static void write_reclen (FILE *f, int n)
7981 fputc ((n >> 24 ) & 0377 , f );
8082}
8183
84+ static int tape_error (int code , FILE * f , word_t * * buffer )
85+ {
86+ fprintf (stderr , "Tape error %06x.\n" , code );
87+ return get_tape_record (f , buffer );
88+ }
89+
90+ static int tape_gap (int code , FILE * f , word_t * * buffer )
91+ {
92+ fprintf (stderr , "Tape gap (%06x).\n" , code );
93+ return get_tape_record (f , buffer );
94+ }
95+
8296int get_9track_record (FILE * f , word_t * * buffer )
8397{
8498 int i , x , reclen ;
@@ -87,6 +101,11 @@ int get_9track_record (FILE *f, word_t **buffer)
87101 reclen = get_reclen (f );
88102 if (reclen == 0 )
89103 return 0 ;
104+ else if (((reclen >> 24 ) & 0xFF ) == 0x80 )
105+ return tape_error (reclen & 0xFFFFFF , f , buffer );
106+ else if (((reclen >> 24 ) & 0xFF ) == 0xFF )
107+ return tape_gap (reclen & 0xFFFFFF , f , buffer );
108+
90109 if (reclen % 5 )
91110 {
92111 fprintf (stderr , "Not a CORE DUMP tape image.\n"
@@ -185,6 +204,11 @@ int get_7track_record (FILE *f, word_t **buffer)
185204 reclen = get_reclen (f );
186205 if (reclen == 0 )
187206 return 0 ;
207+ else if (((reclen >> 24 ) & 0xFF ) == 0x80 )
208+ return tape_error (reclen & 0xFFFFFF , f , buffer );
209+ else if (((reclen >> 24 ) & 0xFF ) == 0xFF )
210+ return tape_gap (reclen & 0xFFFFFF , f , buffer );
211+
188212 if (reclen % 6 )
189213 {
190214 fprintf (stderr , "Not a 7-track tape image.\n"
0 commit comments