From 4449304aeed23df6b742d988d68f95c7a1b18867 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 29 Apr 2024 19:51:33 -0400 Subject: xex1to2: added. --- xex1to2.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 xex1to2.c (limited to 'xex1to2.c') diff --git a/xex1to2.c b/xex1to2.c new file mode 100644 index 0000000..36a33a2 --- /dev/null +++ b/xex1to2.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include + +#define SELF "xex1to2" + +FILE *open_file(const char *name, const char *mode) { + FILE *f = fopen(name, mode); + if(f) return f; + + fprintf(stderr, SELF ": %s: %s\n", name, strerror(errno)); + exit(1); +} + +void invalid(void) { + fprintf(stderr, SELF ": input is not a valid Atari DOS 1.0 executable.\n"); + exit(1); +} + +void read_header(FILE *in) { + int c; + + c = getc(in); + if(c < 0 || c != 0x84) invalid(); + c = getc(in); + if(c < 0 || c != 0x09) invalid(); +} + +int main(int argc, char **argv) { + int c; + FILE *in = stdin, *out = stdout; + + if(argc > 3) { + fprintf(stderr, "Usage: " SELF " [dos1_input.xex] [dos2_output.xex]\n"); + exit(1); + } + + if(argc > 1) in = open_file(argv[1], "rb"); + if(argc > 2) out = open_file(argv[2], "wb"); + + if(isatty(fileno(out))) { + fprintf(stderr, + SELF ": Standard output is a terminal; not writing binary data\n"); + exit(1); + } + + read_header(in); + fputc(0xff, out); + fputc(0xff, out); + + while( (c = fgetc(in)) >= 0 ) + fputc(c, out); + + fclose(in); + fclose(out); + + return 0; +} -- cgit v1.2.3