aboutsummaryrefslogtreecommitdiff
path: root/a8cat.c
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2024-06-29 05:29:07 -0400
committerB. Watson <urchlay@slackware.uk>2024-06-29 05:29:07 -0400
commit6768e4315973c67f7466c19a0e1e314c550d0039 (patch)
tree5621b6fa9d22d85c3575a112a5e79e6642225e1c /a8cat.c
parent017a503f34a0f8ce2245f1b5dd78894f65326a90 (diff)
downloadbw-atari8-tools-6768e4315973c67f7466c19a0e1e314c550d0039.tar.gz
a8cat: add -m and -s options, fix tabs in -t mode.
Diffstat (limited to 'a8cat.c')
-rw-r--r--a8cat.c63
1 files changed, 56 insertions, 7 deletions
diff --git a/a8cat.c b/a8cat.c
index 752e96f..6395a26 100644
--- a/a8cat.c
+++ b/a8cat.c
@@ -15,6 +15,7 @@ const char *inverse_on = "\x1b[7m";
const char *inverse_off = "\x1b[0m";
int underline = 0, reverse = 0, textmode = 0, ics = 0;
+int magazine = 0, stripinv = 0;
void print_help(void) {
printf("Usage: a8cat [-i] [-u] [file ...]\n");
@@ -106,9 +107,11 @@ int a8cat(const char *file) {
continue;
}
+ if(stripinv) c &= 0x7f;
+
if(textmode) {
switch(c) {
- case 0x09: /* Atari TAB is same as ASCII */
+ case 0x7f: /* tab */
putchar('\t');
continue;
case 0xfd: /* bell */
@@ -127,16 +130,43 @@ int a8cat(const char *file) {
if(c & 0x80) {
if(!inv) {
inv = 1;
- inverse(1);
+ if(magazine)
+ fputs("{inv}", stdout);
+ else
+ inverse(1);
}
} else {
if(inv) {
inv = 0;
- inverse(0);
+ if(magazine)
+ fputs("{norm}", stdout);
+ else
+ inverse(0);
}
}
}
+ if(magazine) {
+ /* special cases: control codes with bit 7 set can't go
+ in the table since it's only got 128 entries. */
+ switch(c) {
+ case 0x9c:
+ fputs("{del-line}", stdout); continue;
+ case 0x9d:
+ fputs("{ins-line}", stdout); continue;
+ case 0x9e:
+ fputs("{clr-tab}", stdout); continue;
+ case 0x9f:
+ fputs("{set-tab}", stdout); continue;
+ case 0xfd:
+ fputs("{bell}", stdout); continue;
+ case 0xfe:
+ fputs("{del-char}", stdout); continue;
+ case 0xff:
+ fputs("{ins-char}", stdout); continue;
+ }
+ }
+
fputs(table[c & 0x7f], stdout);
if(underline && (c & 0x80)) {
@@ -147,7 +177,12 @@ int a8cat(const char *file) {
/* gotta turn off inverse, so if there's another file after this one,
it doesn't start out being printed in inverse. */
- if(inv && !underline) inverse(0);
+ if(inv && !underline) {
+ if(magazine)
+ fputs("{norm}", stdout);
+ else
+ inverse(0);
+ }
fclose(input);
return 0;
@@ -156,20 +191,34 @@ int a8cat(const char *file) {
int main(int argc, char **argv) {
int opt, result = 0;
- while( (opt = getopt(argc, argv, "ihurt")) != -1) {
+ if(argc > 1 && strcmp(argv[1], "--help") == 0) {
+ print_help();
+ exit(0);
+ }
+
+ while( (opt = getopt(argc, argv, "ihurtms")) != -1) {
switch(opt) {
case 'i': table = ics2utf; ics = 1; break;
case 'h': print_help(); exit(0); break;
case 'u': underline = 1; break;
case 'r': reverse = 1; break;
case 't': textmode = 1; break;
+ case 'm': table = ata2mag; magazine = 1; break;
+ case 's': stripinv = 1; break;
default: print_help(); exit(1); break;
}
}
if(reverse) {
- if(underline || textmode) {
- fprintf(stderr, "-t and -u options don't make sense with -r.\n");
+ if(underline || textmode || stripinv || magazine) {
+ fprintf(stderr, "-t, -u, -m, -s options don't make sense with -r.\n");
+ exit(1);
+ }
+ }
+
+ if(magazine) {
+ if(ics || stripinv || underline) {
+ fprintf(stderr, "-i, -s, -u options don't make sense with -m.\n");
exit(1);
}
}