Skip to content

Commit 7c96b5e

Browse files
committed
Improvements for writing tape marks.
1 parent 780eeea commit 7c96b5e

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

dis.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ extern int get_7track_record (FILE *f, word_t **buffer);
113113
extern int get_9track_record (FILE *f, word_t **buffer);
114114
extern void write_7track_record (FILE *f, word_t *buffer, int);
115115
extern void write_9track_record (FILE *f, word_t *buffer, int);
116+
extern void write_tape_mark (FILE *f);
117+
extern void write_tape_eof (FILE *f);
118+
extern void write_tape_eot (FILE *f);
116119
extern word_t get_core_word (FILE *f);
117120
extern void write_core_word (FILE *f, word_t word);
118121
extern void read_raw_at (FILE *f, struct pdp10_memory *memory,

tape-word.c

Lines changed: 20 additions & 4 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)
@@ -76,6 +77,11 @@ static void write_reclen (FILE *f, int n)
7677
fputc ((n >> 8) & 0377, f);
7778
fputc ((n >> 16) & 0377, f);
7879
fputc ((n >> 24) & 0377, f);
80+
81+
if (n == 0)
82+
marks++;
83+
else
84+
marks = 0;
7985
}
8086

8187
int get_9track_record (FILE *f, word_t **buffer)
@@ -290,11 +296,20 @@ write_tape_mark (FILE *f)
290296
write_tape_record (f, NULL, 0);
291297
}
292298

299+
void
300+
write_tape_eof (FILE *f)
301+
{
302+
int i;
303+
for (i = marks; i < 1; i++)
304+
write_tape_mark (f);
305+
}
306+
293307
void
294308
write_tape_eot (FILE *f)
295309
{
296-
write_tape_mark (f);
297-
write_tape_mark (f);
310+
int i;
311+
for (i = marks; i < 2; i++)
312+
write_tape_mark (f);
298313
}
299314

300315
static void
@@ -311,10 +326,10 @@ write_tape_word (FILE *f, word_t word)
311326
{
312327
if (word & (START_RECORD|START_FILE|START_TAPE))
313328
flush_record (f);
314-
if (word & (START_FILE|START_TAPE))
329+
if (word & START_FILE)
315330
write_tape_mark (f);
316331
if (word & START_TAPE)
317-
write_tape_mark (f);
332+
write_tape_eot (f);
318333
}
319334
beginning_of_tape = 0;
320335

@@ -327,6 +342,7 @@ flush_tape_word (FILE *f)
327342
flush_record (f);
328343
write_tape_eot (f);
329344
beginning_of_tape = 1;
345+
marks = 0;
330346
}
331347

332348
struct word_format tape_word_format = {

0 commit comments

Comments
 (0)