applesingle/README.md
2018-05-24 22:31:15 -05:00

3.7 KiB

AppleSingle

This project is an off-shoot of AppleCommander's support for the AppleSingle format in that there are multiple Java-based tools that can benefit from a pre-built library to support the AppleSingle format.

Java Usage Examples

Read AppleSingle

Use the factory method to...

Reading from standard input:

AppleSingle as = AppleSingle.read(System.in);

Reading from a file:

File file = new File("myfile.as");
AppleSingle as = AppleSingle.read(file);

The AppleSingle file can be read from an InputStream, File, Path, or just a byte array.

Create AppleSingle

Use the builder to create a new AppleSingle file and then save it...

AppleSingle as = AppleSingle.builder()
        .dataFork(dataFork)
        .realName(realName)
        .build();
        
Path file = Paths.get("mynewfile.as"); 
as.save(file);

The save(...) method can save to a File, Path, or an OutputStream.

Command-Line Examples

For the included command-line utility, we are using asu for the name. as is the GNU Assembler while applesingle is already on Macintoshes. Hopefully that will prevent some confusion!

Note that all runs are with the asu alias defined as alias asu='java -jar build/libs/applesingle-1.0.0.jar' (adjust as necessary).

Basic usage

$ asu
Usage: asu [-hV] [--debug] [COMMAND]

AppleSingle utility

Options:
      --debug     Dump full stack trackes if an error occurs
  -h, --help      Show this help message and exit.
  -V, --version   Print version information and exit.

Commands:
  help     Displays help information about the specified command
  info     Display information about an AppleSingle file
  create   Create an AppleSingle file
  extract  Extract contents of an AppleSingle file

Subcommand help

$ asu info --help
Usage: asu info [-h] [--stdin] [<file>]

Display information about an AppleSingle file
Please include a file name or indicate stdin should be read, but not both.

Parameters:
      [<file>]   File to process

Options:
      --stdin    Read AppleSingle from stdin.
  -h, --help     Show help for subcommand

Info subcommand

$ asu info src/test/resources/hello.applesingle.bin 
Real Name: -Unknown-
ProDOS info:
  Access: 0xC3
  File Type: 0x06
  Auxtype: 0x0803
Data Fork: Present, 2,912 bytes
Resource Fork: Not present

Sample runs

Using pipes to create a text file and display information. Note that the invalid my-text-file was changed to MY.TEXT.FILE.

$ echo "Hello World!" | asu create --name my-text-file --stdout --filetype 0x06 --stdin-fork=data --fix-text | asu info --stdin
Real Name: MY.TEXT.FILE
ProDOS info:
  Access: 0xC3
  File Type: 0x06
  Auxtype: 0x0000
Data Fork: Present, 13 bytes
Resource Fork: Not present

The --fix-text file flips the high-bit and translates the newline character.

$ echo "Hello World!" | asu create --name my-text-file --stdout --filetype 0x06 --stdin-fork=data --fix-text | hexdump -C
00000000  00 05 16 00 00 02 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 03 00 00 00 03 00 00  |................|
00000020  00 3e 00 00 00 0c 00 00  00 0b 00 00 00 4a 00 00  |.>...........J..|
00000030  00 08 00 00 00 01 00 00  00 52 00 00 00 0d 4d 59  |.........R....MY|
00000040  2e 54 45 58 54 2e 46 49  4c 45 00 c3 00 06 00 00  |.TEXT.FILE......|
00000050  00 00 c8 e5 ec ec ef a0  d7 ef f2 ec e4 a1 8d     |...............|
0000005f

(The message is at 0x52 through 0x5e.)

Resources