diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | README.txt | 5 | ||||
-rw-r--r-- | a8cat.1 | 23 | ||||
-rw-r--r-- | a8cat.c | 5 | ||||
-rw-r--r-- | a8cat.rst | 17 | ||||
-rw-r--r-- | a8eol.1 | 6 | ||||
-rwxr-xr-x | a8utf8 | 172 | ||||
-rw-r--r-- | a8utf8.1 | 125 | ||||
-rw-r--r-- | a8utf8.rst | 57 | ||||
-rw-r--r-- | a8xd.1 | 108 | ||||
-rw-r--r-- | a8xd.c | 136 | ||||
-rw-r--r-- | a8xd.rst | 84 | ||||
-rw-r--r-- | atascii.7 | 8 | ||||
-rw-r--r-- | atascii.rst | 2 | ||||
-rw-r--r-- | atr2xfd.1 | 6 | ||||
-rw-r--r-- | atrsize.1 | 6 | ||||
-rw-r--r-- | axe.1 | 6 | ||||
-rw-r--r-- | blob2c.1 | 6 | ||||
-rw-r--r-- | blob2xex.1 | 6 | ||||
-rw-r--r-- | cart2xex.1 | 6 | ||||
-rw-r--r-- | cxrefbas.1 | 6 | ||||
-rw-r--r-- | dasm2atasm.1 | 6 | ||||
-rw-r--r-- | dumpbas.1 | 6 | ||||
-rw-r--r-- | fenders.1 | 6 | ||||
-rw-r--r-- | listbas.1 | 31 | ||||
-rw-r--r-- | listbas.c | 24 | ||||
-rw-r--r-- | listbas.rst | 25 | ||||
-rw-r--r-- | manftr.rst | 36 | ||||
-rw-r--r-- | protbas.1 | 6 | ||||
-rw-r--r-- | renumbas.1 | 6 | ||||
-rw-r--r-- | rom2cart.1 | 6 | ||||
-rw-r--r-- | unmac65.1 | 6 | ||||
-rw-r--r-- | unprotbas.1 | 6 | ||||
-rw-r--r-- | vxrefbas.1 | 6 | ||||
-rw-r--r-- | xex.5 | 6 | ||||
-rw-r--r-- | xex1to2.1 | 6 | ||||
-rw-r--r-- | xexamine.1 | 6 | ||||
-rw-r--r-- | xexcat.1 | 6 | ||||
-rw-r--r-- | xexsplit.1 | 6 | ||||
-rw-r--r-- | xfd2atr.1 | 6 |
41 files changed, 450 insertions, 554 deletions
@@ -13,7 +13,9 @@ *.old *.bak *.o +a8cat a8eol +a8xd atr2xfd atrsize axe @@ -23,6 +25,7 @@ cart2rom fenders rom2cart unmac65 +xex1to2 xexcat xexsplit xfd2atr @@ -31,6 +34,7 @@ blob2xex vxrefbas cxrefbas dumpbas +listbas renumbas protbas unprotbas @@ -17,8 +17,8 @@ CFLAGS=-Wall $(COPT) -ansi -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" # BINS and SCRIPTS go in $BINDIR, DOCS go in $DOCDIR BINS=a8eol atr2xfd atrsize axe blob2c blob2xex cart2xex cxrefbas dumpbas fenders protbas renumbas rom2cart unmac65 unprotbas vxrefbas xex1to2 xexamine xexcat xexsplit xfd2atr listbas a8cat a8xd -SCRIPTS=dasm2atasm a8utf8 -MANS=a8eol.1 xfd2atr.1 atr2xfd.1 blob2c.1 cart2xex.1 fenders.1 xexsplit.1 xexcat.1 atrsize.1 rom2cart.1 unmac65.1 axe.1 dasm2atasm.1 a8utf8.1 blob2xex.1 xexamine.1 xex1to2.1 unprotbas.1 protbas.1 renumbas.1 dumpbas.1 vxrefbas.1 cxrefbas.1 listbas.1 a8cat.1 a8xd.1 +SCRIPTS=dasm2atasm +MANS=a8eol.1 xfd2atr.1 atr2xfd.1 blob2c.1 cart2xex.1 fenders.1 xexsplit.1 xexcat.1 atrsize.1 rom2cart.1 unmac65.1 axe.1 dasm2atasm.1 blob2xex.1 xexamine.1 xex1to2.1 unprotbas.1 protbas.1 renumbas.1 dumpbas.1 vxrefbas.1 cxrefbas.1 listbas.1 a8cat.1 a8xd.1 MAN5S=xex.5 MAN7S=atascii.7 DOCS=README.txt equates.inc *.dasm LICENSE ksiders/atr.txt @@ -2,10 +2,13 @@ This is a collection of Atari 8-bit related utilities I've written for or ported to Linux. They should be usable as-is on other UNIX-like systems, including Cygwin for MS-Windows. +a8cat - Convert Atari 8-bit text to/from UTF-8 encoded Unicode or plain + text. + a8eol - Convert Atari 8-bit text files to/from UNIX / DOS / Mac Classic text file format. -a8utf8 - Convert Atari 8-bit text to UTF-8 encoded Unicode. +a8xd - ATASCII and Unicode aware hex dump. atr2xfd - Convert an Atari 8-bit ATR disk image to a raw (XFD) image. @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "A8CAT" 1 "2024-06-29" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8CAT" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME a8cat \- Convert Atari 8-bit text to UTF-8 encoded Unicode (and back). .SH SYNOPSIS @@ -87,12 +87,17 @@ Unicode graphics character. In text mode, ATASCII tabs, backspace, and bells are translated to the ASCII versions. .TP .B \-r -Reverse conversion: Input is UTF\-8, output is ATASCII (or XL ICS, with \fB\-i\fP). -Beware that printing ATASCII to a terminal may look funny, and may -even confuse the terminal. Redirecting to a file is safe; piping -to a pager usually is. Only the UTF\-8 codepoints that correspond to -ATASCII characters will be converted. If the \fB\-i\fP option was used to -create the input, it must be used with \fB\-r\fP also. +Reverse conversion: Input is plain text, or UTF\-8 created by a previous +run of \fBa8cat\fP; output is ATASCII (or XL ICS, with \fB\-i\fP). ASCII +tabs, backspaces, and newlines will be coverted to the ATASCII +equivalent. ASCII carriage returns will be silently ignored. +.sp +Only the UTF\-8 codepoints that correspond to ATASCII characters will +be converted. If the \fB\-i\fP option was used to create the input, it +must be used with \fB\-r\fP also. +.sp +\fBa8cat\fP will refuse to print ATASCII to a terminal. You must +redirect or pipe the output. .TP .B \-m Magazine listing mode. Rather than Unicode graphics characters, @@ -132,8 +137,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -152,6 +158,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -94,6 +94,8 @@ int a8revcat(const char *file) { while( (c = fgetwc(input)) != WEOF ) { if(c == 0x1b) { inv = handle_escape_seq(inv, input, file, line); + } else if(c == '\r') { + continue; /* swallow carriage returns */ } else if(c == '\n') { putchar(0x9b); line++; @@ -254,6 +256,9 @@ int main(int argc, char **argv) { } if(reverse) { + if(isatty(fileno(stdout))) + die("Refusing to write ATASCII to a terminal."); + if(underline || textmode || stripinv || magazine) { die("-t, -u, -m, -s options don't make sense with -r.\n"); } @@ -61,12 +61,17 @@ OPTIONS and bells are translated to the ASCII versions. -r - Reverse conversion: Input is UTF-8, output is ATASCII (or XL ICS, with **-i**). - Beware that printing ATASCII to a terminal may look funny, and may - even confuse the terminal. Redirecting to a file is safe; piping - to a pager usually is. Only the UTF-8 codepoints that correspond to - ATASCII characters will be converted. If the **-i** option was used to - create the input, it must be used with **-r** also. + Reverse conversion: Input is plain text, or UTF-8 created by a previous + run of **a8cat**; output is ATASCII (or XL ICS, with **-i**). ASCII + tabs, backspaces, and newlines will be coverted to the ATASCII + equivalent. ASCII carriage returns will be silently ignored. + + Only the UTF-8 codepoints that correspond to ATASCII characters will + be converted. If the **-i** option was used to create the input, it + must be used with **-r** also. + + **a8cat** will refuse to print ATASCII to a terminal. You must + redirect or pipe the output. -m Magazine listing mode. Rather than Unicode graphics characters, @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "A8EOL" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8EOL" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME a8eol \- convert Atari 8-bit text files to/from UNIX/Windows/Mac .\" RST source for a8eol(1) man page. Convert with: @@ -461,8 +461,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -481,6 +482,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -1,172 +0,0 @@ -#!/usr/bin/perl -w - -# convert A8 text to UTF-8. Control graphics characters are replaced with -# nearest Unicode equivalents (mostly from the box-drawing range, or from -# the basic-latin range with -i option). - -# Careful editing this script: you need an editor that groks UTF-8, or at -# least one that won't mangle the UTF-8 sequences embedded in the tables -# below. - -($SELF = $0) =~ s,.*/,,; - -binmode(STDOUT, ":utf8"); -binmode(STDIN, ":bytes"); - -use utf8; - -%atascii_table = ( - 0 => "♥", - 1 => "┣", - 2 => "┃", - 3 => "┛", - 4 => "┫", - 5 => "┓", - 6 => "╱", - 7 => "╲", - 8 => "◢", - 9 => "▗", - 10 => "◣", - 11 => "▝", - 12 => "▘", - 13 => "▔", - 14 => "▁", - 15 => "▖", - 16 => "♣", - 17 => "┏", - 18 => "━", - 19 => "╋", - 20 => "●", - 21 => "▄", - 22 => "▎", - 23 => "┳", - 24 => "┻", - 25 => "▌", - 26 => "┗", - 27 => "␛", - 28 => "↑", - 29 => "↓", - 30 => "←", - 31 => "→", - 96 => "◆", - 123 => "♠", - 125 => "↰", - 126 => "◀", - 127 => "▶", - 136 => "◤", - 137 => "▛", - 138 => "◥", - 139 => "▙", - 140 => "▟", - 141 => "▆", - 142 => "🮅", - 143 => "▜", - 148 => "◙", - 149 => "▀", - 150 => "🮊", - 153 => "▐", - 155 => "\n", - 156 => "⍐", - 157 => "⍗", - 158 => "⍇", - 159 => "⍈", - 160 => "█", -); - -%xl_intl_table = ( - 0 => "á", - 1 => "ù", - 2 => "Ñ", - 3 => "É", - 4 => "ç", - 5 => "ô", - 6 => "ò", - 7 => "ì", - 8 => "£", - 9 => "ï", - 10 => "ü", - 11 => "ä", - 12 => "Ö", - 13 => "ú", - 14 => "ó", - 15 => "ö", - 16 => "Ü", - 17 => "â", - 18 => "û", - 19 => "î", - 20 => "é", - 21 => "è", - 22 => "ñ", - 23 => "ê", - 24 => "ȧ", - 25 => "à", - 26 => "Ȧ", - 27 => "␛", - 28 => "↑", - 29 => "↓", - 30 => "←", - 31 => "→", - 96 => "¡", - 123 => "Ä", - 126 => "◀", - 127 => "▶", - 155 => "\n", -); - -undef $/; - -$table = \%atascii_table; -$print_table = 0; -while(@ARGV && $ARGV[0] =~ /^-/) { - for($ARGV[0]) { - /^-i$/ && do { $table = \%xl_intl_table; next; }; - /^-t$/ && do { $print_table = 1; next; }; - /^-r$/ && do { $reverse = 1; next; }; - /^--?h/ && do { usage(0) }; - warn "$SELF: unknown option: $_\n"; - usage(1); - } - shift @ARGV; -} - -if($reverse) { - binmode(STDOUT, ":bytes"); - for(keys %$table) { - $revtable{ord($table->{$_})} = chr($_); - } - $table = \%revtable; -} - -if($print_table) { - for(sort { $a <=> $b } keys %$table) { - my $chr = translate(chr $_); - $chr = '\n' if $chr eq "\n"; - printf '"%d","$%02x","%s"' . "\n", $_, $_, $chr; - } - exit 0; -} - -$_ = <>; -s/(.)/translate($1)/seg; -print; - -sub translate { - my $o = ord(shift); - my $ret; - - $ret = $table->{$o}; - return $ret if defined($ret); - - $ret = $table->{$o & 0x7f}; - return $ret if defined($ret); - - return chr($o & 0x7f); -} - -sub usage { - print <<EOF; -Usage: $SELF [--help] | [-t [-r] [-i]] | [-r] [-i] infile [infile ...] -See man page for details. -EOF - exit $_[0]; -} diff --git a/a8utf8.1 b/a8utf8.1 deleted file mode 100644 index c2986eb..0000000 --- a/a8utf8.1 +++ /dev/null @@ -1,125 +0,0 @@ -.\" Man page generated from reStructuredText. -. -. -.nr rst2man-indent-level 0 -. -.de1 rstReportMargin -\\$1 \\n[an-margin] -level \\n[rst2man-indent-level] -level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] -- -\\n[rst2man-indent0] -\\n[rst2man-indent1] -\\n[rst2man-indent2] -.. -.de1 INDENT -.\" .rstReportMargin pre: -. RS \\$1 -. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] -. nr rst2man-indent-level +1 -.\" .rstReportMargin post: -.. -.de UNINDENT -. RE -.\" indent \\n[an-margin] -.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] -.nr rst2man-indent-level -1 -.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] -.in \\n[rst2man-indent\\n[rst2man-indent-level]]u -.. -.TH "A8UTF8" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" -.SH NAME -a8utf8 \- Convert Atari 8-bit text to UTF-8 encoded Unicode. -.\" RST source for a8utf8(1) man page. Convert with: -. -.\" rst2man.py a8utf8.rst > a8utf8.1 -. -.\" rst2man.py comes from the SBo development/docutils package. -. -.SH SYNOPSIS -.sp -\fIa8utf8\fP [\fB\-r\fP] [\fB\-i\fP] [\fIinfile\fP] [\fIinfile ...\fP] -.sp -\fIa8utf8\fP [\fB\-r\fP] [\fB\-i\fP] \fB\-t\fP -.SH DESCRIPTION -.sp -Convert Atari 8\-bit ATASCII or XL ICS (International Character -Set) text to UTF\-8 encoded Unicode. Control graphics characters are -replaced with their nearest Unicode equivalents (mostly from the Box -Drawing block, or from the Basic Latin block with \fB\-i\fP option). -.sp -If no \fIinfile\fP is given, input is read from standard input. Output always -goes to standard output; to write to a file, use a command like: -.INDENT 0.0 -.INDENT 3.5 -.sp -.nf -.ft C -a8utf8 atari.txt > converted.txt -.ft P -.fi -.UNINDENT -.UNINDENT -.sp -The output is plain UTF\-8 Unicode, without BOM. -.sp -Inverse video (characters codes above \fB$80\fP) are translated to -their non\-inverse equivalents, except \fB$9B\fP (Atari EOL), which is -translated to \fB\en\fP (newline). -.SH OPTIONS -.INDENT 0.0 -.TP -.B \-i -Input uses Atari XL/XE International Character Set encoding, rather than -ATASCII graphics. -.TP -.B \-t -Print table of Atari to Unicode equivalents, in CSV format. Can -be used with or without \fB\-i\fP and/or \fB\-r\fP (four different tables). -.TP -.B \-r -Reverse conversion: Input is UTF\-8, output is ATASCII (or XL ICS, with \fB\-i\fP). -Beware that printing ATASCII to a terminal may look funny, and may even confuse -the terminal. Redirecting to a file is safe. -.UNINDENT -.SH COPYRIGHT -.sp -WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details. -.SH AUTHOR -.INDENT 0.0 -.IP B. 3 -Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&. -.UNINDENT -.SH SEE ALSO -.sp -\fBa8eol\fP(1), -\fBa8utf8\fP(1), -\fBatr2xfd\fP(1), -\fBatrsize\fP(1), -\fBaxe\fP(1), -\fBblob2c\fP(1), -\fBblob2xex\fP(1), -\fBcart2xex\fP(1), -\fBcxrefbas\fP(1), -\fBdasm2atasm\fP(1), -\fBdumpbas\fP(1), -\fBf2toxex\fP(1), -\fBfenders\fP(1), -\fBlistbas\fP(1), -\fBprotbas\fP(1), -\fBrenumbas\fP(1), -\fBrom2cart\fP(1), -\fBunmac65\fP(1), -\fBunprotbas\fP(1), -\fBvxrefbas\fP(1), -\fBxexamine\fP(1), -\fBxexcat\fP(1), -\fBxexsplit\fP(1), -\fBxfd2atr\fP(1), -\fBxex\fP(5), -\fBatascii\fP(7). -.sp -Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC Reference -Manual\fP, the \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc. -.\" Generated by docutils manpage writer. -. diff --git a/a8utf8.rst b/a8utf8.rst deleted file mode 100644 index ec9fbba..0000000 --- a/a8utf8.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. RST source for a8utf8(1) man page. Convert with: -.. rst2man.py a8utf8.rst > a8utf8.1 -.. rst2man.py comes from the SBo development/docutils package. - -====== -a8utf8 -====== - --------------------------------------------------- -Convert Atari 8-bit text to UTF-8 encoded Unicode. --------------------------------------------------- - -.. include:: manhdr.rst - -SYNOPSIS -======== - -*a8utf8* [**-r**] [**-i**] [*infile*] [*infile ...*] - -*a8utf8* [**-r**] [**-i**] **-t** - -DESCRIPTION -=========== - -Convert Atari 8-bit ATASCII or XL ICS (International Character -Set) text to UTF-8 encoded Unicode. Control graphics characters are -replaced with their nearest Unicode equivalents (mostly from the Box -Drawing block, or from the Basic Latin block with **-i** option). - -If no *infile* is given, input is read from standard input. Output always -goes to standard output; to write to a file, use a command like:: - - a8utf8 atari.txt > converted.txt - -The output is plain UTF-8 Unicode, without BOM. - -Inverse video (characters codes above **$80**) are translated to -their non-inverse equivalents, except **$9B** (Atari EOL), which is -translated to **\\n** (newline). - -OPTIONS -======= - --i - Input uses Atari XL/XE International Character Set encoding, rather than - ATASCII graphics. - --t - Print table of Atari to Unicode equivalents, in CSV format. Can - be used with or without **-i** and/or **-r** (four different tables). - --r - Reverse conversion: Input is UTF-8, output is ATASCII (or XL ICS, with **-i**). - Beware that printing ATASCII to a terminal may look funny, and may even confuse - the terminal. Redirecting to a file is safe. - -.. include:: manftr.rst @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "A8XD" 1 "2024-06-30" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "A8XD" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME a8xd \- Atari 8-bit ATASCII-aware hex dump .SH SYNOPSIS @@ -42,36 +42,24 @@ The ATASCII codes are converted to UTF\-8, in the same way as \fBa8cat\fP(1). Codes with the high bit set are displayed in inverse video, using ANSI/VT\-100 escape sequences. .sp -By default, the output is colorized: -.INDENT 0.0 -.INDENT 3.5 -.INDENT 0.0 -.IP \(bu 2 -Normal characters are green. This includes alphanumerics, spaces, and -punctuation. -.IP \(bu 2 -Codes \fB$00\fP (null, or ATASCII heart) and \fB$9B\fP (EOL) are red. -.IP \(bu 2 -Control characters are yellow. This includes codes \fB$01\fP to \fB$1F\fP -(control + letters/punctuation, escape, and arrow keys), \fB$60\fP, \fB$7B\fP, \fB$7D\fP -(clear screen), \fB$7E\fP (backspace), and \fB$7F\fP (tab). -.UNINDENT -.UNINDENT -.UNINDENT -.sp -The colors and inverse rendering apply to both the ATASCII and hex bytes. +By default, the output is colorized (see \fBCOLORS\fP, below). The +colors and inverse rendering apply to both the ATASCII and hex bytes. .sp Without \fIinfile\fP, or if \fIinfile\fP is \fB\-\fP, \fBa8xd\fP reads from standard input. .SH OPTIONS .INDENT 0.0 .TP .B \-a -ANTIC mode: treat the input as screen bytes. Can usefully be combined -with \fB\-g\fP\&. +ANTIC mode: treat the input as screen bytes (aka "internal codes") +rather than ATASCII. Can usefully be combined with \fB\-g\fP or \fB\-f\fP\&. +.TP +.B \-f +Like \fB\-g\fP, but using the top half of the character set. This is +what you\(aqd see on the Atari with \fIGRAPHICS 1:POKE 756,226\fP\&. .TP .B \-g -Graphics mode. Changes the colorization so it looks like \fIGRAPHICS 1\fP (or 2) -on the Atari. +Graphics mode. Changes the printed characters and colorization so it +looks like \fIGRAPHICS 1\fP (or 2) on the Atari. .TP .B \-i Print XL/XE International Character Set conversions instead of ATASCII. @@ -123,6 +111,76 @@ Show built\-in help and exit. .B \fB\-\-version\fP Show version number and exit. .UNINDENT +.SH COLORS +.sp +The default color scheme is: +.INDENT 0.0 +.INDENT 3.5 +.INDENT 0.0 +.IP \(bu 2 +Non\-control characters are green. This includes alphanumerics, spaces, and +punctuation. These are the characters that ATASCII has in common with +ASCII. +.IP \(bu 2 +Graphics characters are yellow. This includes \fB$01\fP to \fB$1a\fP (the +alphabet, with the Control key held down), \fB$60\fP (the diamond), and +\fB$7b\fP (the spade). +.IP \(bu 2 +Codes \fB$00\fP (null, or ATASCII heart) and \fB$9B\fP (EOL) are red. These +characters are used as delimiters, so it makes sense for them to +stand out. +.IP \(bu 2 +Cursor control characters are purple. These are characters that perform +some action when printed to the \fIE:\fP device. These are: +.INDENT 2.0 +.INDENT 3.5 +.INDENT 0.0 +.TP +.B \fB$1b\fP +Escape. +.TP +.B \fB$1c\fP through \fB$1f\fP +Cursor movement (up/down/left/right arrows). +.TP +.B \fB$7d\fP +Clear screen. +.TP +.B \fB$7e\fP +Backspace. +.TP +.B \fB$7f\fP +Tab. +.TP +.B \fB$9c\fP +Delete line. +.TP +.B \fB$9d\fP +Insert line. +.TP +.B \fB$9e\fP +Clear tab stop. +.TP +.B \fB$9f\fP +Set tab stop. +.TP +.B \fB$fd\fP +Bell. +.TP +.B \fB$fe\fP +Delete character. +.TP +.B \fB$ff\fP +Insert character. +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.UNINDENT +.sp +In \fB\-f\fP and \fB\-g\fP modes, the above doesn\(aqt apply. Instead, the +colors are (close to) the colors that would appear in \fIGRAPHICS 1\fP, +with the default palette. .SH NOTES .sp \fBa8xd\fP requires the terminal emulator to support UTF\-8 and use a @@ -174,8 +232,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -194,6 +253,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -14,6 +14,15 @@ #define UC_WORD_FMT "%04X" #define UC_BYTE_FMT "%02X" +/* colors. don't use black or white: one or the other is likely + the terminal's text color already. + don't use blue because it's hard to read. */ +#define C_RED 1 +#define C_GREEN 2 +#define C_YELLOW 3 +#define C_PURPLE 5 +#define C_CYAN 6 + /* translation table (see atables.c), choices are ata2utf, ics2utf, or magazine. */ const char **table = ata2utf; @@ -31,7 +40,7 @@ const char *byte_format = LC_BYTE_FMT; /* command line options change these. */ int verbose = 0, color = 1, disp_offset = 0, maxlen = 0; int seek_whence = 0, seekpos = 0, filepos = 0, limit = 0; -int graphics = 0, screencodes = 0; +int graphics = 0, screencodes = 0, high_font = 0; const char *self; @@ -49,7 +58,7 @@ void die(const char *msg) { } void print_help(void) { - printf("Usage:\n %s [-a] [-g] [-i] [-l limit] [-m] [-o offset] [-s [-]seek] [-u] [-v] [file]\n", self); + printf("Usage:\n %s [-a] [-f] [-g] [-i] [-l limit] [-m] [-o offset] [-s [-]seek] [-u] [-v] [file]\n", self); printf(" -a: Input is ANTIC screencodes (default is ATASCII).\n"); printf(" -g: GR.1/2 style colorization.\n"); printf(" -i: Input is XL intl charset (default is ATASCII).\n"); @@ -128,32 +137,50 @@ FILE *open_input(const char *file) { return input; } +int get_text_color(unsigned char c) { + unsigned char c7 = c & 0x7f; + + if(c == 0 || c == 0x9b) { + return C_RED; + } else if((c7 >= 0x1b && c7 <= 0x1f) || (c7 >= 0x7d)) { + /* cursor control characters: + - 0x1b (esc) + - 0x1c-0x1f (arrows), 0x9c-0x9f + - 0x7d/0xf3 (cls, bell) + - 0x7e, 0xfe (delete line, char) + - 0x7f, 0xff (tab, insert char) + */ + return C_PURPLE; + } else if(c7 < 32 || c7 == 0x60 || c7 == 0x7b) { + return C_YELLOW; + } else { + return C_GREEN; + } +} + +int get_graphics_color(unsigned char c) { + if(c < 0x20) + return C_GREEN; + else if(c >= 0x20 && c < 0x60) + return C_YELLOW; + else if(c >= 0x60 && c < 0x80) + return C_GREEN; + else if(c >= 0x80 && c < 0xa0) + return C_RED; + else if(c >= 0xa0 && c < 0xe0) + return C_CYAN; + else /* c >= 0xe0 */ + return C_RED; +} + char *get_color(unsigned char c) { int color; - unsigned char c7 = c & 0x7f; static char outbuf[32]; if(graphics) { - if(c < 0x20) - color = 2; - else if(c >= 0x20 && c < 0x60) - color = 3; - else if(c >= 0x60 && c < 0x80) - color = 2; - else if(c >= 0x80 && c < 0xa0) - color = 1; - else if(c >= 0xa0 && c < 0xe0) - color = 6; /* cyan (blue is too dark on most terminals) */ - else /* c >= 0xe0 */ - color = 1; + color = get_graphics_color(c); } else { - if(c == 0 || c == 0x9b) { - color = 1; /* red */ - } else if(c7 < 32 || c7 == 0x60 || c7 == 0x7b || c7 == 0x7d || c7 == 0x7e || c7 == 0x7f) { - color = 3; /* yellow/orange */ - } else { - color = 2; /* green */ - } + color = get_text_color(c); } if(color) { @@ -171,16 +198,22 @@ char *get_color(unsigned char c) { $60-$7F get displayed in green, as $40-$5F. for $80-$FF, same thing, but green is red, and orange is blue. */ -char *get_graphics(unsigned char c) { - static char result[2]; +unsigned char get_graphics(unsigned char c) { c &= 0x7f; if(c < 0x20) c += 0x20; else if(c >= 0x60) c -= 0x20; - result[0] = c; - result[1] = 0; - return result; + return c; +} + +unsigned char get_high_graphics(unsigned char c) { + c &= 0x7f; + if(c >= 0x20 && c < 0x40) + c -= 0x20; + else if(c >= 0x40) + c += 0x20; + return c; } unsigned char screen2ata(unsigned char c) { @@ -231,6 +264,19 @@ void seek_input(FILE *input) { } } +void append_str_f(char *buf, int *pos, const char *fmt, const char *str) { + *pos += sprintf(buf + *pos, fmt, str); +} + +void append_str(char *buf, int *pos, const char *str) { + append_str_f(buf, pos, "%s", str); +} + +void append_hex(char *buf, int *pos, const unsigned char byte) { + *pos += sprintf(buf + *pos, byte_format, byte); +} + + void dump_line(const unsigned char *buf, int len) { char hex[1024], asc[1024]; int hpos = 0, apos = 0, count = len; @@ -244,26 +290,35 @@ void dump_line(const unsigned char *buf, int len) { while(len) { c = *buf; - if(screencodes) c = screen2ata(c); inv = !graphics && (c & 0x80); + if(screencodes) c = screen2ata(c); - if(color) hpos += sprintf(hex + hpos, "%s", get_color(c)); - if(inv) hpos += sprintf(hex + hpos, "%s", inverse_on); - hpos += sprintf(hex + hpos, byte_format, c); - if(color || inv) hpos += sprintf(hex + hpos, "%s", color_off); - hex[hpos++] = ' '; - if(count - len == 7) hex[hpos++] = ' '; + hpos += printf("%s", get_color(c)); + if(inv) hpos += printf("%s", inverse_on); + hpos += printf(byte_format, *buf); /* *buf here, not c! */ + if(color || inv) hpos += printf("%s", color_off); + putchar(' '); + hpos++; + if(count - len == 7) { + putchar(' '); + hpos++; + } - if(color) apos += sprintf(asc + apos, "%s", get_color(c)); - if(inv) apos += sprintf(asc + apos, "%s", inverse_on); - apos += sprintf(asc + apos, "%s", (graphics ? get_graphics(c) : table[c & 0x7f])); - if(color || inv) apos += sprintf(asc + apos, "%s", color_off); + if(color) append_str(asc, &apos, get_color(c)); + if(inv) append_str(asc, &apos, inverse_on); + if(graphics) { + if(high_font) + c = get_high_graphics(c); + else + c = get_graphics(c); + } + apos += sprintf(asc + apos, "%s", table[c & 0x7f]); + if(color || inv) append_str(asc, &apos, color_off); filepos++; buf++; len--; } - printf("%s", hex); /* what shall we use to fill the empty spaces? */ if(count < 8) putchar(' '); @@ -316,7 +371,7 @@ int main(int argc, char **argv) { exit(0); } - while( (opt = getopt(argc, argv, "vhimus:o:l:ga")) != -1) { + while( (opt = getopt(argc, argv, "vhimus:o:l:gaf")) != -1) { switch(opt) { case 'v': verbose = 1; break; case 'h': print_help(); exit(0); break; @@ -328,6 +383,7 @@ int main(int argc, char **argv) { case 'l': limit = parse_limit_arg(optarg); break; case 'g': graphics = 1; break; case 'a': screencodes = 1; break; + case 'f': graphics = high_font = 1; break; default: print_help(); exit(1); break; } } @@ -23,18 +23,8 @@ The ATASCII codes are converted to UTF-8, in the same way as **a8cat**\(1). Codes with the high bit set are displayed in inverse video, using ANSI/VT-100 escape sequences. -By default, the output is colorized: - - - Normal characters are green. This includes alphanumerics, spaces, and - punctuation. - - - Codes **$00** (null, or ATASCII heart) and **$9B** (EOL) are red. - - - Control characters are yellow. This includes codes **$01** to **$1F** - (control + letters/punctuation, escape, and arrow keys), **$60**, **$7B**, **$7D** - (clear screen), **$7E** (backspace), and **$7F** (tab). - -The colors and inverse rendering apply to both the ATASCII and hex bytes. +By default, the output is colorized (see **COLORS**, below). The +colors and inverse rendering apply to both the ATASCII and hex bytes. Without *infile*, or if *infile* is **-**, **a8xd** reads from standard input. @@ -43,11 +33,15 @@ OPTIONS -a ANTIC mode: treat the input as screen bytes (aka "internal codes") - rather than ATASCII. Can usefully be combined with **-g**. + rather than ATASCII. Can usefully be combined with **-g** or **-f**. + +-f + Like **-g**, but using the top half of the character set. This is + what you'd see on the Atari with *GRAPHICS 1:POKE 756,226*. -g - Graphics mode. Changes the colorization so it looks like *GRAPHICS 1* (or 2) - on the Atari. + Graphics mode. Changes the printed characters and colorization so it + looks like *GRAPHICS 1* (or 2) on the Atari. -i Print XL/XE International Character Set conversions instead of ATASCII. @@ -89,6 +83,66 @@ OPTIONS **--version** Show version number and exit. +COLORS +====== + +The default color scheme is: + + - Non-control characters are green. This includes alphanumerics, spaces, and + punctuation. These are the characters that ATASCII has in common with + ASCII. + + - Graphics characters are yellow. This includes **$01** to **$1a** (the + alphabet, with the Control key held down), **$60** (the diamond), and + **$7b** (the spade). + + - Codes **$00** (null, or ATASCII heart) and **$9B** (EOL) are red. These + characters are used as delimiters, so it makes sense for them to + stand out. + + - Cursor control characters are purple. These are characters that perform + some action when printed to the *E:* device. These are: + + **$1b** + Escape. + + **$1c** through **$1f** + Cursor movement (up/down/left/right arrows). + + **$7d** + Clear screen. + + **$7e** + Backspace. + + **$7f** + Tab. + + **$9c** + Delete line. + + **$9d** + Insert line. + + **$9e** + Clear tab stop. + + **$9f** + Set tab stop. + + **$fd** + Bell. + + **$fe** + Delete character. + + **$ff** + Insert character. + +In **-f** and **-g** modes, the above doesn't apply. Instead, the +colors are (close to) the colors that would appear in *GRAPHICS 1*, +with the default palette. + NOTES ===== @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "ATASCII" 7 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATASCII" 7 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME atascii \- Atari 8-bit character set .\" RST source for atascii(7) man page. Convert with: @@ -1714,7 +1714,7 @@ T{ T} T{ 7e T} T{ -[delete] +[backspace] T} T{ 254 T} T{ @@ -2150,8 +2150,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -2170,6 +2171,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), diff --git a/atascii.rst b/atascii.rst index 8f96d2a..54e47b8 100644 --- a/atascii.rst +++ b/atascii.rst @@ -155,7 +155,7 @@ brackets denote screen control codes. "123", "7b", "♠", "251", "fb", "" "124", "7c", "\|", "252", "fc", "" "125", "7d", "[clear screen]", "253", "fd", "[bell]" - "126", "7e", "[delete]", "254", "fe", "[delete char]" + "126", "7e", "[backspace]", "254", "fe", "[delete char]" "127", "7f", "[tab]", "255", "ff", "[insert char]" In the Atari XL and XE ROMs, there is a second character set, known as @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "ATR2XFD" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATR2XFD" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME atr2xfd \- Convert an Atari 8-bit ATR disk image to a raw (XFD) image .\" RST source for atr2xfd(1) man page. Convert with: @@ -181,8 +181,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -201,6 +202,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "ATRSIZE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ATRSIZE" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME atrsize \- Change the size of an Atari 8-bit ATR disk image, or create a blank ATR image .\" RST source for atrsize(1) man page. Convert with: @@ -195,8 +195,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -215,6 +216,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "AXE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "AXE" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME axe \- ATR/XFD Editor .\" RST source for axe(1) man page. Convert with: @@ -136,8 +136,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -156,6 +157,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "BLOB2C" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "BLOB2C" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME blob2c \- Create C source and header files from a binary file .\" RST source for blob2c(1) man page. Convert with: @@ -116,8 +116,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -136,6 +137,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "BLOB2XEX" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "BLOB2XEX" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME blob2xex \- Create Atari 8-bit executables from arbitrary data .\" RST source for blob2xex(1) man page. Convert with: @@ -207,8 +207,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -227,6 +228,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "CART2XEX" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "CART2XEX" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME cart2xex \- Convert an Atari 8-bit ROM cartridge image to a binary load file .\" RST source for cart2xex(1) man page. Convert with: @@ -225,8 +225,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -245,6 +246,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "CXREFBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "CXREFBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME cxrefbas \- Code cross-reference for tokenized Atari 8-bit BASIC files .SH SYNOPSIS @@ -154,8 +154,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -174,6 +175,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), diff --git a/dasm2atasm.1 b/dasm2atasm.1 index e67f694..18f0100 100644 --- a/dasm2atasm.1 +++ b/dasm2atasm.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "DASM2ATASM" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "DASM2ATASM" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME dasm2atasm \- Convert 6502 assembly source from dasm syntax to atasm or ca65 syntax. .\" RST source for dasm2atasm(1) man page. Convert with: @@ -223,8 +223,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -243,6 +244,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "DUMPBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "DUMPBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME dumpbas \- Formatted hexdump for tokenized Atari 8-bit BASIC files .SH SYNOPSIS @@ -204,8 +204,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -224,6 +225,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "FENDERS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "FENDERS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME fenders \- Install Fenders 3-sector loader in boot sectors of an ATR image .\" RST source for fenders(1) man page. Convert with: @@ -270,8 +270,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -290,6 +291,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,25 +27,24 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "LISTBAS" 1 "2024-06-26" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "LISTBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME listbas \- List the source of a tokenized Atari 8-bit BASIC program .SH SYNOPSIS .sp -listbas [\fB\-v\fP] [\fB\-i\fP] [\fB\-a\fP | \fB\-u\fP ] \fBinput\-file\fP +listbas [\fB\-v\fP] [\fB\-i\fP] [\fB\-a\fP | \fB\-m\fP ] \fBinput\-file\fP .SH DESCRIPTION .sp \fBlistbas\fP acts like the \fILIST\fP command in BASIC. It reads a tokenized (SAVEd) BASIC program and prints the code in human\-readable format. .sp -By default, output is piped through \fBa8eol\fP(1), to convert ATASCII -characters to human\-readable sequences. Raw ATASCII and Unicode output -are also available. +By default, output is piped through \fBa8cat\fP(1), to covert ATASCII +characters into Unicode equivalents. Raw ATASCII and "magazine listing" +mode are also available. .sp -\fBa8eol\fP(1) and \fBa8utf8\fP(1) (for \fB\-u\fP) are run as external -processes. The executables are searched for first in the current -directory, and then in \fIPATH\fP\&. +\fBa8cat\fP is run as an external processe. The executables is searched +for first in the current directory, and then in \fIPATH\fP\&. .SH OPTIONS .SS List options .INDENT 0.0 @@ -57,8 +56,9 @@ Include the immediate mode command (line 32768) in the output. Output raw ATASCII; no translation to the host character set. Must be used with redirection; \fBlistbas\fP will not write ATASCII to the terminal. .TP -.B \fB\-u\fP -Use \fBa8utf8\fP(1) to translate ATASCII to ASCII. +.B \fB\-m\fP +Output "magazine listing". Pipes output through \fBa8cat \-m\fP; see the man +page for \fBa8cat\fP for details. .UNINDENT .SS General Options .INDENT 0.0 @@ -88,9 +88,10 @@ protection. \fBlistbas\fP doesn\(aqt show information about the variables. Use \fBvxrefbas\fP(1) for that. .IP \(bu 2 -\fBlistbas\fP will not write ATASCII data to your terminal. Instead, it uses -\fBa8eol\fP(1) or \fBa8utf8\fP(1) to convert the output to something human\-readable -that won\(aqt confuse the terminal. +\fBlistbas\fP will not write ATASCII data to your terminal. By default, it uses +\fBa8cat\fP(1) to convert the output to something human\-readable +that won\(aqt confuse the terminal. When outputting raw ATASCII (\fB\-a\fP option), +it refuses to run if standard output is a terminal. .IP \(bu 2 \fBlistbas\fP only lists line 32768 (the immediate mode command) if specifically asked to do so. @@ -113,8 +114,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -133,6 +135,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -12,7 +12,7 @@ #include "bcdfp.h" #include "tokens.h" -int immediate = 0, a8utf8 = 0, a8eol = 1; +int immediate = 0, a8cat = 1, magazine = 0; FILE *outfh; @@ -21,18 +21,19 @@ void print_help(void) { printf(" -v: verbose.\n"); printf(" -i: show immediate mode command (line 32768).\n"); printf(" -a: output raw ATASCII.\n"); - printf(" -u: output Unicode.\n"); + printf(" -m: magazine style listing (see a8cat(1)).\n"); } void parse_args(int argc, char **argv) { int opt; - while( (opt = getopt(argc, argv, "viau")) != -1) { + while( (opt = getopt(argc, argv, "viamh")) != -1) { switch(opt) { case 'v': verbose = 1; break; case 'i': immediate = 1; break; - case 'a': a8utf8 = a8eol = 0; break; - case 'u': a8utf8 = 1; a8eol = 0; break; + case 'a': a8cat = magazine = 0; break; + case 'm': a8cat = magazine = 1; break; + case 'h': print_help(); exit(0); default: print_help(); exit(1); @@ -50,10 +51,11 @@ void setup_outfh(void) { /* search current dir before PATH. no easy way to detect errors here, have to wait until we call pclose(). */ - if(a8eol) { - cmd = "./a8eol -u -c 2>/dev/null || a8eol -u -c 2>/dev/null || exit 1"; - } else if(a8utf8) { - cmd = "./a8utf8 2>/dev/null || a8utf8 2>/dev/null || exit 1"; + if(a8cat) { + if(magazine) + cmd = "./a8cat -m 2>/dev/null || a8cat -m 2>/dev/null || exit 1"; + else + cmd = "./a8cat 2>/dev/null || a8cat 2>/dev/null || exit 1"; } else { if(isatty(fileno(stdout))) { die("Refusing to write ATASCII data to the terminal."); @@ -72,9 +74,9 @@ void setup_outfh(void) { } void close_outfh(void) { - if(a8eol || a8utf8) { + if(a8cat) { if(pclose(outfh)) { - die("output filter failed; a8eol or a8utf8 not in current dir or $PATH."); + die("output filter failed; a8cat not in current dir or $PATH."); } } } diff --git a/listbas.rst b/listbas.rst index c4a937a..d6d17b1 100644 --- a/listbas.rst +++ b/listbas.rst @@ -11,7 +11,7 @@ List the source of a tokenized Atari 8-bit BASIC program SYNOPSIS ======== -listbas [**-v**] [**-i**] [**-a** | **-u** ] **input-file** +listbas [**-v**] [**-i**] [**-a** | **-m** ] **input-file** DESCRIPTION =========== @@ -20,13 +20,12 @@ DESCRIPTION tokenized (SAVEd) BASIC program and prints the code in human-readable format. -By default, output is piped through **a8eol**\(1), to convert ATASCII -characters to human-readable sequences. Raw ATASCII and Unicode output -are also available. +By default, output is piped through **a8cat**\(1), to covert ATASCII +characters into Unicode equivalents. Raw ATASCII and "magazine listing" +mode are also available. -**a8eol**\(1) and **a8utf8**\(1) (for **-u**) are run as external -processes. The executables are searched for first in the current -directory, and then in *PATH*. +**a8cat** is run as an external processe. The executables is searched +for first in the current directory, and then in *PATH*. OPTIONS ======= @@ -41,8 +40,9 @@ List options Output raw ATASCII; no translation to the host character set. Must be used with redirection; **listbas** will not write ATASCII to the terminal. -**-u** - Use **a8utf8**\(1) to translate ATASCII to ASCII. +**-m** + Output "magazine listing". Pipes output through **a8cat -m**; see the man + page for **a8cat** for details. .. include:: genopts.rst @@ -61,9 +61,10 @@ protection. - **listbas** doesn't show information about the variables. Use **vxrefbas**\(1) for that. -- **listbas** will not write ATASCII data to your terminal. Instead, it uses - **a8eol**\(1) or **a8utf8**\(1) to convert the output to something human-readable - that won't confuse the terminal. +- **listbas** will not write ATASCII data to your terminal. By default, it uses + **a8cat**\(1) to convert the output to something human-readable + that won't confuse the terminal. When outputting raw ATASCII (**-a** option), + it refuses to run if standard output is a terminal. - **listbas** only lists line 32768 (the immediate mode command) if specifically asked to do so. @@ -11,29 +11,31 @@ B. Watson <urchlay@slackware.uk>; Urchlay on irc.libera.chat *##atari*. SEE ALSO ======== -**a8eol**\(1), -**a8utf8**\(1), -**atr2xfd**\(1), -**atrsize**\(1), +**a8cat**\(1), +**a8eol**\(1), +**a8xd**\(1), +**atr2xfd**\(1), +**atrsize**\(1), **axe**\(1), -**blob2c**\(1), -**blob2xex**\(1), -**cart2xex**\(1), -**cxrefbas**\(1), -**dasm2atasm**\(1), -**dumpbas**\(1), -**f2toxex**\(1), -**fenders**\(1), +**blob2c**\(1), +**blob2xex**\(1), +**cart2xex**\(1), +**cxrefbas**\(1), +**dasm2atasm**\(1), +**dumpbas**\(1), +**f2toxex**\(1), +**fenders**\(1), **listbas**\(1), **protbas**\(1), -**renumbas**\(1), -**rom2cart**\(1), +**renumbas**\(1), +**rom2cart**\(1), **unmac65**\(1), **unprotbas**\(1), **vxrefbas**\(1), -**xexamine**\(1), -**xexcat**\(1), -**xexsplit**\(1), +**xex1to2**\(1), +**xexamine**\(1), +**xexcat**\(1), +**xexsplit**\(1), **xfd2atr**\(1), **xex**\(5), **atascii**\(7). @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "PROTBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "PROTBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME protbas \- LIST-protect Atari 8-bit BASIC programs .SH SYNOPSIS @@ -111,8 +111,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -131,6 +132,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "RENUMBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "RENUMBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME renumbas \- Renumber Atari 8-bit BASIC programs .SH SYNOPSIS @@ -173,8 +173,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -193,6 +194,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "ROM2CART" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "ROM2CART" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME rom2cart \- Convert a raw ROM image to an Atari800 CART image, or vice versa .\" RST source for rom2cart(1) man page. Convert with: @@ -239,8 +239,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -259,6 +260,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "UNMAC65" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "UNMAC65" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME unmac65 \- Detokenize Atari 8-bit Mac/65 SAVEd files. .\" RST source for unmac65(1) man page. Convert with: @@ -371,8 +371,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -391,6 +392,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), diff --git a/unprotbas.1 b/unprotbas.1 index b6655e7..c521116 100644 --- a/unprotbas.1 +++ b/unprotbas.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "UNPROTBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "UNPROTBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME unprotbas \- Unprotect LIST-protected Atari 8-bit BASIC programs .SH SYNOPSIS @@ -338,8 +338,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -358,6 +359,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "VXREFBAS" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "VXREFBAS" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME vxrefbas \- Variable cross-reference for tokenized Atari 8-bit BASIC files .SH SYNOPSIS @@ -114,8 +114,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -134,6 +135,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XEX" 5 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEX" 5 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xex \- Atari 8-bit executable file format. .\" RST source for xex(5) man page. Convert with: @@ -298,8 +298,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -318,6 +319,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XEX1TO2" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEX1TO2" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xex1to2 \- Convert an Atari DOS 1.0 executable to a standard Atari executable .\" RST source for xex1to2(1) man page. Convert with: @@ -72,8 +72,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -92,6 +93,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XEXAMINE" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXAMINE" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xexamine \- Show information on Atari 8-bit executables (XEX) .\" RST source for xexamine(1) man page. Convert with: @@ -130,8 +130,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -150,6 +151,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XEXCAT" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXCAT" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xexcat \- Concatenate Atari 8-bit executables (XEX) into a single XEX file. .\" RST source for xexcat(1) man page. Convert with: @@ -190,8 +190,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -210,6 +211,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XEXSPLIT" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XEXSPLIT" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xexsplit \- Split a multi-segment Atari 8-bit executable (XEX) into multiple single-segment files. .\" RST source for xexsplit(1) man page. Convert with: @@ -183,8 +183,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -203,6 +204,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XFD2ATR" 1 "2024-06-25" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "XFD2ATR" 1 "2024-07-02" "0.2.1" "Urchlay's Atari 8-bit Tools" .SH NAME xfd2atr \- Convert an Atari 8-bit XFD (raw) disk image to an ATR image. .\" RST source for xfd2atr(1) man page. Convert with: @@ -111,8 +111,9 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ .UNINDENT .SH SEE ALSO .sp +\fBa8cat\fP(1), \fBa8eol\fP(1), -\fBa8utf8\fP(1), +\fBa8xd\fP(1), \fBatr2xfd\fP(1), \fBatrsize\fP(1), \fBaxe\fP(1), @@ -131,6 +132,7 @@ Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\ \fBunmac65\fP(1), \fBunprotbas\fP(1), \fBvxrefbas\fP(1), +\fBxex1to2\fP(1), \fBxexamine\fP(1), \fBxexcat\fP(1), \fBxexsplit\fP(1), |