diff options
Diffstat (limited to 'listamsb.1')
-rw-r--r-- | listamsb.1 | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/listamsb.1 b/listamsb.1 new file mode 100644 index 0000000..b5e2213 --- /dev/null +++ b/listamsb.1 @@ -0,0 +1,377 @@ +.\" 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 "LISTAMSB" 1 "2025-04-02" "0.2.2" "Urchlay's Atari 8-bit Tools" +.SH NAME +listamsb \- List the source of a tokenized Atari Microsoft BASIC program +.SH SYNOPSIS +.sp +listamsb [\fB\-U\fP] | [\fB\-C\fP [\fB\-k\fP]] | [\fB\-D\fP] | [[\fB\-L\fP] [\fB\-a\fP] [\fB\-c\fP] [\fB\-v\fP] [\fB\-h\fP] [\fB\-i\fP] [\fB\-u\fP] [\fB\-t\fP] [\fB\-m\fP] [\fB\-M\fP] [\fB\-n\fP] [\fB\-s\fP] [\fB\-r\fP \fIline\-range\fP] ...] [\fBinput\-file\fP] [\fBoutput\-file\fP] +.SH DESCRIPTION +.sp +\fBlistamsb\fP acts like the \fILIST\fP command in Atari Microsoft BASIC. It reads a +tokenized (SAVEd) AMSB program and prints the code in human\-readable +format. +.sp +\fBlistamsb\fP supports both versions of Atari Microsoft BASIC: the +disk\-based version 1 and the cartridge\-based version 2. The language +is the same for both versions, so there\(aqs no need to specify it. +.sp +\fBinput\-file\fP must be a tokenized AMSB program. If no \fBinput\-file\fP is given, +input is read from \fBstdin\fP\&. +.sp +Programs created with \fISAVE "filename" LOCK\fP are autodetected, +and will be listed normally. It\(aqs also possible to convert a LOCKed +program to an unencrypted one, with the \fB\-U\fP option. +.sp +Programs can be "crunched" and "decrunched" with the \fB\-C\fP and \fB\-D\fP +options. +.sp +If no \fBoutput\-file\fP is given, output is to \fBstdout\fP\&. When output +is to a file, the file will be overwritten without prompting if it +already exists. +.sp +By default, output is modern UTF\-8 equivalents of the ATASCII +character set, with ANSI control sequences for inverse video and +color. See the \fB\-M\fP, \fB\-a\fP, \fB\-i\fP, \fB\-u\fP, \fB\-t\fP, \fB\-m\fP, \fB\-s\fP +options to change the output style. +.sp +When listing in color (when the \fB\-M\fP option is not used), +\fBlistamsb\fP\(aqs output is piped through \fBcolorize\-amsb\fP, which must +be available in your \fBPATH\fP\&. +.sp +\fBlistamsb\fP will not write binary data (ATASCII or tokenized BASIC) +directly to a terminal, under any circumstances. +.SH OPTIONS +.SS Operation Modes +.INDENT 0.0 +.TP +.B \fB\-L\fP +LIST program. This is the default, so there\(aqs no need to give this option +normally. See next section for options that control the listing. +.TP +.B \fB\-C\fP +"Crunch" program: remove comments and spaces that occur outside of a +string. The resulting program is tokenized, and is usually 5 to 10 +percent smaller. It should RUN correctly, but will be difficult to +edit in AMSB because its parser requires the spaces. +.sp +The crunched program will always be unLOCKed. +.sp +If any comment\-only lines are the target of GOTO or GOSUB, the +program won\(aqt RUN correctly because all comment\-only lines are +removed. If this happens, you can use the \fB\-k\fP option (see below). +.sp +This option must be used with an \fBoutput\-file\fP, since seeking is done. +None of the other options have any effect with \fB\-C\fP\&. +.TP +.B \fB\-D\fP +"Decrunch" a crunched program. Puts spaces where they\(aqre required for +AMSB\(aqs parser. The resulting program is tokenized, and will be +editable in AMSB. Of course, any comments that were removed during +crunching will not magically be restored (they\(aqre gone). +.sp +The decrunched program will always be unLOCKed. +.sp +This option must be used with an \fBoutput\-file\fP, since seeking is done. +None of the other options have any effect with \fB\-D\fP\&. +.TP +.B \fB\-U\fP +UnLOCK or LOCK the the program. Locked programs are created with +\fISAVE "filename" LOCK\fP\&. The "encryption" is a reciprocal cipher: locking and +unlocking are the same operation (similar to ROT13). The output will +be the locked or unlocked tokenized program (rather than a listing). +.sp +This option must be used with an \fBoutput\-file\fP, a pipe, or +redirection: \fBlistamsb\fP will not write tokenized BASIC to a +terminal. None of the other options have any effect with \fB\-U\fP\&. +.UNINDENT +.SS Options for \fB\-L\fP (list) Mode +.sp +None of these options have any effect when used with \fB\-C\fP, \fB\-D\fP, +or \fB\-U\fP\&. +.INDENT 0.0 +.TP +.B \fB\-a\fP +Output raw ATASCII. This option must be used with an +\fBoutput\-file\fP, a pipe, or redirection: \fBlistamsb\fP will not write +ATASCII to a terminal. \fBcolorize\-amsb\fP is not used, with this option. +.TP +.B \fB\-c\fP +Check only. No output on \fBstdout\fP\&. Diagnostics are still printed on stderr, +and the exit status is unchanged. It\(aqs an error to give an \fBoutput\-file\fP with +this option. +.TP +.B \fB\-i\fP +Input uses Atari XL/XE International Character Set encoding, rather than +ATASCII graphics. +.TP +.B \fB\-u\fP +Use underlining for inverse video (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-t\fP +Text mode (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-m\fP +Magazine listing mode (see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-s\fP +Strip bit 7 (inverse video bit; see \fBa8cat\fP(1) for more detail). +.TP +.B \fB\-M\fP +Monochrome listing: disable color syntax highlighting, meaning \fBcolorize\-amsb\fP +is not used. +.TP +.B \fB\-r\fP \fIline\-range\fP +Show only part of the listing. \fIline\-range\fP can be a single line, or +a comma\- or hyphen\-separated pair of starting and ending line numbers (e.g. \fB100,200\fP, or +\fB1000\-2000\fP). +.sp +If the start line number is omitted (e.g. \fB,100\fP), it will be treated as +\fB0\fP (meaning, list from the beginning of the program). If the ending line +number is omitted (e.g. \fB100,\fP), it means "list until the end of the program". +\fB\-r,\fP or \fB\-r\-\fP is equivalent to not using the \fB\-r\fP option at all. +.TP +.B \fB\-n\fP +No empty line. By default, \fBlistamsb\fP prints an empty line at the +start of the output, to match AMSB\(aqs LIST command. +.UNINDENT +.SS Options for \fB\-C\fP (crunch) Mode +.INDENT 0.0 +.TP +.B \fB\-k\fP +Keep comment\-only lines. Normally these are removed. If the program +gives UNDEF\(aqD LINE ERROR, it means the target line was a comment\-only +line that got removed. With \fB\-k\fP, these lines will be kept, although +the actual comments won\(aqt (\fI10 REM HELLO\fP will become \fI10 REM\fP). +.UNINDENT +.SS Utility Options +.INDENT 0.0 +.TP +.B \fB\-v\fP +Verbose output, on \fBstderr\fP\&. May be given twice for extra verbosity, +which shows each line number, its offset, length, and end\-of\-line pointer. +Can be used with any of the mode options (\fB\-C\fP, \fB\-D\fP, \fB\-L\fP, \fB\-U\fP). +.TP +.B \fB\-h\fP, \fB\-\-help\fP +Print built\-in help and exit. +.TP +.B \fB\-\-version\fP +Print version number and exit. +.UNINDENT +.SH DIAGNOSTICS +.sp +All error and warning messages are written to the standard error output. +.SS Fatal errors +.sp +These are errors in the program header at the start of the file. They +generally mean the input isn\(aqt actually an tokenized Atari Microsoft +BASIC file. +.INDENT 0.0 +.IP \(bu 2 +not an AMSB file: first byte not $00 or $01 +.sp +Pretty self\-explanatory: if the file doesn\(aqt begin with a \fI$00\fP or +\fI$01\fP byte, it\(aqs not a tokenized AMSB file. +.IP \(bu 2 +not an AMSB file: too big (\fIN\fP bytes), won\(aqt fit in Atari memory +.sp +The file can\(aqt be a tokenized AMSB file because there was no way +for it to be created. It must be some other kind of file that begins +with a \fI$00\fP byte. +.IP \(bu 2 +not an AMSB file: program size too small (\fIN\fP). Atari BASIC file? +.sp +The program header claims the file is 0, 1, 3, or 4 bytes long. This +is impossible, so this isn\(aqt an AMSB file. A lot of Atari BASIC +programs begin with three \fI$00\fP bytes, so that might be what this is. +.IP \(bu 2 +program length is 2, no code in file (SAVE after NEW) +.sp +Probably, someone did a SAVE when there was no program in memory. It +could also mean this isn\(aqt an AMSB file at all. +.UNINDENT +.SS Warnings +.sp +These are non\-fatal: \fBlistamsb\fP logs the warning to stderr, then +continues processing. +.INDENT 0.0 +.IP \(bu 2 +unexpected EOF, file truncated? +.sp +A tokenized AMSB file always ends with three null bytes (\fI$00\fP). +This file doesn\(aqt. Probably the rest of the file is missing. +.IP \(bu 2 +line \fIL\fP: EOL address \fIA\fP too (low|high) +.sp +Each line begins with the address of the next line. If the address +is below \fI$0700\fP, it\(aqs below the minimum value of \fIMEMLO\fP, which +is impossible. If it\(aqs above \fI$bc1f\fP, it would be in the display +list, screen memory, or OS ROM (also impossible). File is +corrupt, or not an AMSB file. +.IP \(bu 2 +line \fIL\fP: EOL address \fIA\fP <= previous \fIB\fP +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line \fIL\fP is suspiciously long +.sp +The line is >128 bytes long, but less than 256. AMSB can execute +lines of this length, but it\(aqs impossible to actually enter them +in the editor, because a logical line can\(aqt be longer than 3 +screen lines. Possibly corrupted file. +.IP \(bu 2 +line \fIL\fP is impossibly long +.sp +The line is >= 256 bytes long. AMSB will crash, if you try to +LOAD the file. Corrupted file. +.IP \(bu 2 +line \fIL\fP EOL address doesn\(aqt match actual line length \fIN\fP +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line number out of order +.sp +Corrupt file, or not an AMSB file. +.IP \(bu 2 +line number out range +.sp +The program contains a line number that\(aqs greater than \fI63999\fP\&. How +did that happen? +.IP \(bu 2 +line \fIL\fP has character \fIC\fP outside of a string. maybe Atari BASIC? +.sp +This happens when ATASCII codes 0 to 31 (\fI$1f\fP) appear in the program. +AMSB can create files like this, but at runtime, it\(aqs a syntax error. +More likely, it means this is an Atari BASIC file. +.IP \(bu 2 +program size doesn\(aqt match size in header +.sp +Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, it might +be truncated, or part of the file might have been overwritten with +\fI$00\fP bytes. It could also mean the length in the header has somehow +gotten corrupted. +.IP \(bu 2 +trailing garbage at end of file +.sp +Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, garbage +data has somehow gotten appended to the file, after the three \fI$00\fP +bytes that end the program. Maybe it was downloaded with a crappy +version of XMODEM that pads the last block. The good news is, +AMSB will just ignore the garbage when you LOAD the file, so it +won\(aqt hurt anything. +.IP \(bu 2 +file has \fIN\fP unknown tokens +.sp +Either the file is corrupt, or this is a file from some \fIother\fP variant +of Microsoft BASIC (e.g. Commodore, AppleSoft, GW\-BASIC, TRS\-80). If +you see this warning, you\(aqll also see \fIN\fP <unknown token \fIXX\fP> +messages in the actual listing. +.UNINDENT +.SH ENVIRONMENT +.INDENT 0.0 +.TP +.B \fBCOLORIZE_AMSB\fP +Path to the \fBcolorize\-amsb\fP executable. Can be the absolute path +or just the executable (searched for in \fBPATH\fP). If not set, +defaults to \fIcolorize\-amsb\fP\&. +.UNINDENT +.SH LIMITATIONS +.sp +\fBlistamsb\fP may behave strangely when fed something other than a +tokenized AMSB program, at least if the first byte in the file +is \fB$00\fP or \fB$01\fP\&. Unfortunately, tokenized Atari BASIC (and +variants like Turbo and BASIC XL) begin with \fB$00\fP\&. Usually +you\(aqll get this error: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +not an AMSB file: program size too small (0). Atari BASIC file? +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +\&...but occasionally you may get a bunch of warnings and gibberish +output instead. +.SH EXIT STATUS +.sp +0 for success, 1 if there was an error reading the input (e.g. file +not found), or 2 if the input file had errors or warnings (see +\fBDIAGNOSTICS\fP). +.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 +\fBa8cat\fP(1), +\fBa8eol\fP(1), +\fBa8xd\fP(1), +\fBatr2xfd\fP(1), +\fBatrsize\fP(1), +\fBaxe\fP(1), +\fBbas2aplus\fP(1), +\fBblob2c\fP(1), +\fBblob2xex\fP(1), +\fBcart2xex\fP(1), +\fBcxrefbas\fP(1), +\fBdasm2atasm\fP(1), +\fBdiffbas\fP(1), +\fBdumpbas\fP(1), +\fBf2toxex\fP(1), +\fBfenders\fP(1), +\fBlistbas\fP(1), +\fBlistamsb\fP(1), +\fBprotbas\fP(1), +\fBrenumbas\fP(1), +\fBrom2cart\fP(1), +\fBunmac65\fP(1), +\fBunprotbas\fP(1), +\fBvxrefbas\fP(1), +\fBwhichbas\fP(1), +\fBxex1to2\fP(1), +\fBxexamine\fP(1), +\fBxexcat\fP(1), +\fBxexsplit\fP(1), +\fBxfd2atr\fP(1), +\fBxex\fP(5), +\fBatascii\fP(7), +\fBfauxtari\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. +. |