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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
.. RST source for unalf(1) man page. Convert with:
.. rst2man.py unalf.rst > unalf.1
.. |version| replace:: 0.0.0
.. |date| date::
=====
unalf
=====
--------------------------------
extract Atari 8-bit ALF archives
--------------------------------
:Manual section: 1
:Manual group: Urchlay's Atari 8-bit Tools
:Date: |date|
:Version: |version|
SYNOPSIS
========
unalf [**-l**] **alf-file**
DESCRIPTION
===========
**unalf** lists or extracts the contents of an *ALF* archive.
*ALF* is a compressed archive format similar to **arc**\(1), though
not compatible with it. It was used on the Atari 8-bit platform
beginning in the late 1980s.
Extracted files are written to the current directory. Existing files
are overwritten without warning.
OPTIONS
=======
For compatibility with **arc**\(1) usage, the **-** in front of
option letters is optional.
-l
List contents of archive, but do not extract. The output format
is similar to that of **arc -v**, minus the *Stowage* column, since
*ALF* doesn't support multiple compression types. The date and time
are displayed, but in most .alf files these are the default values
of "8 Jan 82 12:24a".
-v
Same as **-l**.
**-e**, **-x**
Extract files. This is actually a no-op, as extraction is the
default action.
EXIT STATUS
===========
**0** for success, **1** for failure.
DIAGNOSTICS
===========
Besides the standard error messages such as "no such file or directory":
**unalf: this is an ARC file, not ALF**
Self-explanatory. Use the **arc**\(1) utility for this file.
**unalf: not an ALF file**
Self-explanatory. Either the file is too small (less than 29 bytes)
or its first two bytes don't match the *ALF* signature **0x1a** **0x0f**\.
**unalf: junk at EOF (ignored)**
Usually this is caused by the .alf file being stored on a CP/M disk
at some time, or by a dumb file transfer protocol. Either way, the
file gets padded to the block size of the filesystem or protocol.
Usually, the padding characters are **0x1a**, aka ASCII control-Z.
If you see this message, you can ignore it. It's intended to let
you know that this .alf file can't be appended to by the **ALF.COM**
aka **LZ.COM** Atari utility.
**unalf: checksum error on** *<file>*
The archive is corrupt. If *<file>* is a text file, it may be
partially readable. If it's an executable or other binary file, it's
probably unrecoverable.
NOTES
=====
This **unalf** is 100% compatible with the original Atari **UNALF.COM**
aka **DZ.COM**, with the following differences:
- There is no interactive mode. The file to extract must be given as
a command-line argument.
- Files are always extracted to the current directory. The original
**UNALF.COM** accepted a 2nd argument or prompted for the output directory.
- This **unalf** is capable of listing the contents of an archive
without extracting it.
- Turning the screen off for speed makes no sense on modern operating
systems, so there's no option for that.
Neither this **unalf** nor **UNALF.COM** actually use the dates/times
stored in the archive. Extracted files will have their timestamps set
to the current date/time.
COPYRIGHT
=========
**unalf** is released under the WTPFL: Do WTF you want with this.
AUTHORS
=======
B. Watson <urchlay@slackware.uk>
SEE ALSO
========
TODO
|