Skip to content

Commit 269d3ed

Browse files
committed
Support for reading tape errors and gaps.
1 parent 135ab6c commit 269d3ed

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

tape-word.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ static int reclen = 0;
2323
static int beginning_of_tape = 1;
2424
static int marks = 0;
2525

26+
static int get_tape_record (FILE *f, word_t **buffer);
27+
2628
static int
2729
get_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+
8296
int 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

Comments
 (0)