Skip to content

Commit 135ab6c

Browse files
committed
Improvements for writing tape marks.
1 parent 780eeea commit 135ab6c

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

tape-word.c

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
static word_t record[65536];
2222
static int reclen = 0;
2323
static int beginning_of_tape = 1;
24+
static int marks = 0;
2425

2526
static int
2627
get_byte (FILE *f)
@@ -133,7 +134,11 @@ void write_7track_record (FILE *f, word_t *buffer, int n)
133134

134135
write_reclen (f, 6 * n);
135136
if (n == 0)
136-
return;
137+
{
138+
marks++;
139+
return;
140+
}
141+
marks = 0;
137142

138143
for (i = 0; i < n; i++)
139144
write_7track_word (f, *buffer++);
@@ -156,7 +161,11 @@ void write_9track_record (FILE *f, word_t *buffer, int n)
156161
/* A record of length zero is a tape mark, and the length is only
157162
written once. */
158163
if (n == 0)
159-
return;
164+
{
165+
marks++;
166+
return;
167+
}
168+
marks = 0;
160169

161170
for (i = 0; i < n; i++)
162171
write_core_word (f, *buffer++);
@@ -290,11 +299,20 @@ write_tape_mark (FILE *f)
290299
write_tape_record (f, NULL, 0);
291300
}
292301

302+
void
303+
write_tape_eof (FILE *f)
304+
{
305+
int i;
306+
for (i = marks; i < 1; i++)
307+
write_tape_mark (f);
308+
}
309+
293310
void
294311
write_tape_eot (FILE *f)
295312
{
296-
write_tape_mark (f);
297-
write_tape_mark (f);
313+
int i;
314+
for (i = marks; i < 2; i++)
315+
write_tape_mark (f);
298316
}
299317

300318
static void
@@ -311,10 +329,10 @@ write_tape_word (FILE *f, word_t word)
311329
{
312330
if (word & (START_RECORD|START_FILE|START_TAPE))
313331
flush_record (f);
314-
if (word & (START_FILE|START_TAPE))
332+
if (word & START_FILE)
315333
write_tape_mark (f);
316334
if (word & START_TAPE)
317-
write_tape_mark (f);
335+
write_tape_eot (f);
318336
}
319337
beginning_of_tape = 0;
320338

@@ -327,6 +345,7 @@ flush_tape_word (FILE *f)
327345
flush_record (f);
328346
write_tape_eot (f);
329347
beginning_of_tape = 1;
348+
marks = 0;
330349
}
331350

332351
struct word_format tape_word_format = {

0 commit comments

Comments
 (0)