Giter Club home page Giter Club logo

applecommander's Introduction

Overview

Current Release License

AppleCommander is a cross-platform set of tools used to manipulate Apple ][ disk images. There is a GUI packaged for Windows, Linux, or Mac OS X, and there are a number of command-line tools that are useful for build chains.

Please see AppleCommander site for usage details.

Developer information has some details useful if you wish to contribute to AppleCommander!

Contribution information is a collection of people who have contributed to AppleCommander.

applecommander's People

Contributors

a2geek avatar btb avatar david-schmidt avatar devokun avatar knghtbrd avatar lisias avatar thomasfok avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

applecommander's Issues

Hex viewer and FF

I am using 1.6.0 on Ubuntu 64 bit.

The hex viewer has issues with non printable characters, in particular FF.

It tries to use a strange square which takes more than 1 space and misaligns the rest of the line.

Screenshot from 2021-06-05 18-40-00

Can't launch AppleCommander on Windows 10

I can't launch AppleCommander on Windows 10.

Fresh install of Windows 10 Pro version 20H2 OS build 19042.685

Fresh install of Java Version 8 Update 271 (build 1.8.0_271-b09)

When you double click on AppleCommander-win64-1.6.0.jar nothing happens. If I right click and Open nothing happens. I then tried opening via Command Prompt and saw this:

C:\Users\David\Downloads>java -jar AppleCommander-win64-1.6.0.jar
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:103)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:57)
Caused by: java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.C.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:78)
... 6 more

Default image directory

I'm using Windows, and AppleCommander defaults to the Documents library.
I never willingly put anything into My Documents, for multiple reasons.
I have a directory for Apple 2 disk images, way down in my directory structure.
It would be nice to be able to set that as the default directory to look in, whether at compile time, or thru the GUI.

Support converting line endings when adding text file to image

Could AppleCommander automatically fix line endings on text files being added to an image?

When I used the command:

ac -p micoldev.po source/TESTDHR txt < testhdr.txt 

on Linux, the files comes through with Linux line endings ($0A, aka newlines) rather than Apple II line endings ($0D).

Granted, I can get around the issue by using:

cat TESTDHR.txt | tr '\n' '\r' | ac -p micoldev.po source/TESTDHR txt 

but that is cumbersome.

MacOS: Display must be created on main thread due to Cocoa restrictions

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

running version 1.5.0 for MacOS gives:

***WARNING: Display must be created on main thread due to Cocoa restrictions.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:101)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:56)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:77)
... 6 more

Documentation on compiling?

Can you create some documentation on how to compile this? It appears to use gradle, which I've never used. What do I need to type at the command line to compile it?

Choose name other than "ac" for the command line utility

Your documentation and examples suggest that the user should set up ac as an alias for running the AppleCommander CLI, but ac is already the name of a built-in program on BSD Unix systems like macOS:

A record of individual login and logout times are written to the system log by login(8) and launchd(8), respectively. The program ac examines these records and writes the accumulated connect time (in decimal hours) for all logins to the standard output.

I suggest you select a longer more-unique name for your program. I see that Homebrew is already installing it as applecommander; perhaps that would be a good choice. Shell completion features make entering long names not much of a problem and a user can always create a shorter alias if it suits them.

Your companion programs bt and st might also benefit from more-unique names. A quick search showed other existing st programs.

You can reduce confusion and increase adoption of whatever names you select by actually providing wrapper scripts of these names rather than just suggesting the use of aliases in the documentation.

Access timestamp of files?

Hiya! So, I have a use case for knowing the timestamp of a file in a disk image. Basically, I want to compare the timestamp of a file in the image with one of a file outside in the host filesystem. If the filesystem is a newer file, I want to have a script update the file in the image.

Using the -ll command doesn't seem to give this to me. There is some added data in the output each file that I can't decipher. For example:

TITLELOAD.P Destroy Read Rename Write TXT 016 06/05/2020 06/05/2020 7,304 $0000 0359 0ABD Sapling Changed 0 0

Looking at the disk image in Ciderpress, I see that the file's timestamp is 17:18. I can;t figure out a way you'd get that value from either 0359 or 0ABD. Do they reflect the timestamp somehow? If not, is there a way to access the timestamps of the files in the image?

Adding files to ProDOS image does not overwrite existing files

A new wrinkle in developing a workflow for editing on a modern system and compiling within an emulator. If you tell ac to add a file to an image that already has a file with that name, it will add a new file with the same name rather than overwriting the existing file. For example:

$ ac -p test.po collar.jpg BIN < collar.jpg 
$ $ ac -ll test.po
test.po /TEST/
  COLLAR.JPG  Destroy Read Rename Write BIN  792 04/04/2021 08:26 04/04/2021 08:26 402,479 A=$2000 0002 0109 Tree  0 0
ProDOS format; 410,112 bytes free; 409,088 bytes used.
$ ac -p test.po collar.jpg BIN < collar.jpg 
$ ac -ll test.po 
test.po /TEST/
  COLLAR.JPG  Destroy Read Rename Write BIN  792 04/04/2021 08:26 04/04/2021 08:26 402,479 A=$2000 0002 0109 Tree  0 0
  COLLAR.JPG  Destroy Read Rename Write BIN  792 04/04/2021 08:26 04/04/2021 08:26 402,479 A=$2000 0002 0421 Tree  0 0
ProDOS format; 4,608 bytes free; 814,592 bytes used.

This also happens for -pt and -ptx.

I've not tested other image formats like DOS 3.3. So, this may be isolated to ProDOS.

Interestingly, nothing in ProDOS seems to mind multiple identically-named files... the shell I am using on the Apple II seems perfectly content to access one of the copies of the file. If I use a command to delete a file with the duplicate filename, it deletes one copy and leaves the other in place. Telling ac to delete the filename from the image does the same: it deletes one copy and leaves the other one there.

This isn't a huge issue, as I'll just have the script I've written to update files in the ProDOS image check for an existing copy of a file and delete it before adding an updated copy. But it might confuse people who are expecting that adding a file to an image will overwrite an existing file in the image, rather than creating a duplicate with the same name.

How to set the Aux. Type?

I would like to set the Aux. Type to $0641 like
Screenshot from 2021-06-12 18-58-34

I try

java -jar ${AC} -p disk.po prog $f1 0x0641 < data

but it is always 0x0000

I am using 1.6.0

AppleCommander-macosx-1.5.0.jar dies

Hi

Im trying to run AppleCommander-macosx-1.5.0.jar on my Mac but it just dies on launch. I assume Im doing something wrong here, but Im not a java person. MacOS 10.13.6 and Java 1.8.0_221-b11:

$ java -jar AppleCommander-macosx-1.5.0.jar
***WARNING: Display must be created on main thread due to Cocoa restrictions.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:101)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:56)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:77)
... 6 more

SWT GUI does not work with modern SWT library

The Eclipse SWT libraries currently available with Linux distributions (and those that can work with any currently support JDK for macOS) do not work with AppleCommander. I never learned SWT, so I cannot easily figure out why not. It might be possible to provide a version of SWT that works on Linux, but for macOS that version just crashes when you try to run it unless the whole thing is set up to run under Apple's abandoned JRE (which has security implications.)

Apple has no JDK for that version anymore, and Oracle JDKs will not compile code that runs under Apple's (nor any) JRE that old anymore. Thanks Oracle!

It was suggested that porting the whole thing to Swing might be easier than porting it to modern SWT, but presumably it was written in SWT because Rob didn't like Swing much. (Or possibly Swing's performance which at least has been corrected.) I wasn't overly fond of Swing either, but found it a little less frustrating than AWT at least, way back when in the 1.2 daze when I used Java for anything.

Hoped the contribution of an issue might at least give us a place to discuss what might be done with/about the problem—I haven't got any easy answer here. My linux branch actually just adds a property that disables building executableGuiJar and by extension macBundle entirely when disabled. I haven't made that the default case, but it is turned on in my ACBuild.properties for my Linux branch (which exposed another issue with executableCmdJar I ought to tend to separately—it requires SWT to build because of how the compile rule is written.)

SWT file open dialog filters do not work

As discussed in #3, at least on Linux and Mac, the SWT file dialog does not seem to work with extension filters for multiple file types such as "*.do; *.dsk; *.po; *.nib; *.2mg; *.2img; *.hdv; *.do.gz; *.dsk.gz; *.po.gz; *.nib.gz; *.2mg.gz; *.2img.gz" found in the source code.

Moreover, it doesn't even work if you feed it a String.join() of the same elements as a list. Based on the fact that single extension filters seem to work, but multi-extension filters seem not to, I seriously wonder if this might be a SWT bug, because as far as I can tell reading the API docs, we're doing it right.

Filing this issue separately because the SWT GUI otherwise works now.

Disk Image from Asimov leads to infinite loop with memory allocation

Greetings.

I'm currently running a bunch of tests on Asimov's disk images, and ran into this issue. Some disk images (and there's more than one) leads into what appears to be an infinite loop with memory being crazily allocated until the process dies by lack of heap space.

The offending file is linked on this issue and explicitly detailed below.

Initial analysis

The profiling leads me to think that the problem is being triggered by fd.getFiles() call.

Profiling the testbed hints that, perhaps, this image has a recursive directory listing (or some data/garbage/code that tricked Apple Commander into thinking it's a directory, and by bad luck the thing is recursive): the instanced objects counting for com.webcodepro.applecommander.storage.os.dos33.DosFileEntry blows up the roof

Evidences

  • IMAGE_1_Graph.png
    • image_2_graph
    • Heap grows up and never shrinks
    • CPU activity has peaks of processing, suggesting the GC is working frequently (just a guess, I didn't profiled it)
  • IMAGE_1_Graph.png
    • image_1_graph
    • A second run confirmed the behaviour.
  • IMAGE_2_MemProfiling.png
    • image_2_memprofiling
    • Memory profiling suggests the code that instances com.webcodepro.applecommander.storage.os.dos33.DosFileEntry is directly involved in the problem.

HOW TO REPRODUCE

  1. Download the offending file
  2. Set up an environment variable called DATA pointing into the directory where you downloaded the files
  3. run the test code quoted below.

Offending file

Here: ftp://ftp.apple.asimov.net//pub/apple_II/images/misc/3d0g_knight_collection/013b - Congo Bongo.dsk

Testbed Source code

package examples.a2cmdr;

import java.io.File;
import java.io.IOException;
import java.util.List;

import com.webcodepro.applecommander.storage.Disk;
import com.webcodepro.applecommander.storage.FileEntry;
import com.webcodepro.applecommander.storage.FormattedDisk;

public class test {

	public static void main(String[] args) {
		final File data = new File(System.getenv().get("DATA"));

		for (File f : data.listFiles()) {
			System.out.println(f.getName());
			show_disk(f.getAbsoluteFile());
			System.out.println();
		}

	}

	private static void show_disk(final File diskfile) {
		try {
			final Disk d = new Disk(diskfile.getAbsolutePath());
			final FormattedDisk[] fds = d.getFormattedDisks();
			for (FormattedDisk fd : fds) {
				String disk_format = null;
				for (FormattedDisk.DiskInformation i : fd.getDiskInformation()) {
					if ("Disk Format".equals(i.getLabel())) disk_format = i.getLabel();
					System.out.println(String.format("\t%s : %s", i.getLabel(), i.getValue()));
					show_files(disk_format, fd.getFiles(), 2);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void show_files(final String disk_format, final List<FileEntry> files, final int i) {
		// TODO Auto-generated method stub

	}

}

Expected (offending) result

013b - Congo Bongo.dsk
	File Name : /Users/lisias/code/net.lisias/net.lisias.retro/JAVA/data/a2/disks.bad/013b - Congo Bongo.dsk
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:265)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
	at java.util.ArrayList.add(ArrayList.java:462)
	at com.webcodepro.applecommander.storage.os.dos33.DosFormatDisk.getFiles(DosFormatDisk.java:147)
	at examples.a2cmdr.test.show_disk(test.java:33)
	at examples.a2cmdr.test.main(test.java:18)

AppleCommander SWT GUI crashes with a NullPointerException after selection of file from open dialog

This may be something related to the internals of SWT itself?

% java -XstartOnFirstThread -jar build/libs/AppleCommander-macosx-1.7.0pre.jar
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:103)
	at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:57)
Caused by: java.lang.NullPointerException
	at org.eclipse.swt.widgets.Control.internal_new_GC(Unknown Source)
	at org.eclipse.swt.graphics.GC.<init>(Unknown Source)
	at org.eclipse.swt.graphics.GC.<init>(Unknown Source)
	at org.eclipse.swt.custom.CTabFolder.updateTabHeight(Unknown Source)
	at org.eclipse.swt.custom.CTabFolder.runUpdate(Unknown Source)
	at org.eclipse.swt.custom.CTabItem.getBounds(Unknown Source)
	at org.eclipse.swt.custom.CTabFolder.onPaint(Unknown Source)
	at org.eclipse.swt.custom.CTabFolder$1.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Control.drawWidget(Unknown Source)
	at org.eclipse.swt.widgets.Widget.drawRect(Unknown Source)
	at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method)
	at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Unknown Source)
	at org.eclipse.swt.widgets.Display.applicationProc(Unknown Source)
	at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method)
	at org.eclipse.swt.internal.cocoa.NSApplication.nextEventMatchingMask(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:93)
	at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:79)
	... 6 more

sourceZip target does not work (missing web directory)

The web target in build.xml does not work as-is. I see a couple of options here:

  1. Make the web target conditional upon the availability of the web directory
  2. Set up a git submodule to pull web in from its own git module
  3. Do both, which will cause people not to need to mess with submodules for the general user case.

Thoughts?

[gradle] .gitignore cleanup

The gradle branche's .gitignore file currently contains:

bin
AppleCommander.preferences
*.dsk
*.po
*.hdv
*.do
*.2mg
*.2img
.uml
TODO.local
*.jpage
work
TestImage.*
**/Thumbs.db
*.o
*.lst
.classpath
.project
.settings
.gradle
build/
target/
.DS_Store

Of these, because I do not use Eclipse, I see only need for:

*.dsk
*.po
*.hdv
*.do
*.2mg
*.2img
TODO.local
.gradle
build/

What else is needed? .settings, .classpath (maybe?) and .project? Anything else?

[Edit: .DS_Store was already on the list, I thought I'd added that locally.)

Part of build.gradle needs to be conditional?

I haven't poked at this in awhile (a lot on my plate) and came back to it to run:

tjcarter@chiyo:~/Source/AppleCommander/AppleCommander$ ./gradlew acJar                             

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/tjcarter/Source/AppleCommander/AppleCommander/build.gradle' line: 168           

* What went wrong:
A problem occurred evaluating root project 'AppleCommander'.                                       
> Could not get unknown property 'ossrhUsername' for object of type org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

That property isn't set for me and shouldn't be probably from what a quick look showed me.

Bump Gradle version for tooling

Noting that current versions of Eclipse no longer reliably recognize older versions of Gradle projects reliably. Bump embedded version and adjust builds accordingly.

Support for AppleSingle

Hi,

Right now there's a very nice momentum to improve the interoperability of Apple II cross development tools. The primary aspect is to have a common way to express ProDOS 8 meta data on the path from the development tool (running on a foreign file system) to the Apple II disk image management tool that writes ProDOS 8 meta data into the disk image.

cc65 and AppleCommander team up here since many years in a great way. cc65 generates a 4-byte DOS 3.3 header for BIN executable and AppleCommander has the -cc65 option to consume the 4-byte header.

However, from a conceptual POV the 4-byte DOS 3.3 header is far from optimal, especially as it doesn't contain the ProDOS 8 File Type. Fortunately Apple created already back in 1990 the AppleSingle/AppleDouble file format that can be used well as replacement for the 4-byte header.

I want drop the support for the 4-byte DOS 3.3 header in cc65 completely and switch to generation of an AppleSingle file. Of course the success of this plan heavily depends on AppleCommander to support AppleSingle files! Therefore I need to ask you to add support for AppleSingle asap.

I see several options for AppleCommander:

AppleSingle can only be supported for put operations - like it is currently with the -p variant -cc65 - or it can be supported for both put and get operations.

As AppleSingle isn't specific to cc65 and is in fact supposed to be soon supported by Merlin32 too. So from my POV its use shouldn't have a name like -cc65 that relates to cc65.

From my perspective -cc65 can be dropped from AppleCommander. However, I can imagine very well you're interested to keep to for backward compatibility reasons.

Now for the technical details:

AppleSingle is described in http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf. Additionally there's an RFC in https://tools.ietf.org/html/rfc1740.

AppleSingle is a container for several optional "Entries" of different types. Each entry type has a specific "Entry ID". The files created by cc65 always contain exactly two entries with the Entry IDs 1 (Data Fork) and 11 (ProDOS File Info).

The actual location of entries in the file is described by a file header. This in general rather complex layout becomes pretty simple when the Entry ID 11 (the ProDOS File Info) is placed first and the Entry ID 1 (Data Fork) is placed last because the Entry ID 11 has a fixed, small size.

So from the AppleCommander perspective I see two viable approaches to handle AppleSingle files:

  1. The "correct" approach: Follow the AppleSingle spec to indentify (or even generate) all relevant Entry IDs.

  2. The "quick" approach: Presume that AppleSingle files have the layout that cc65 creates and treat them as 1:1 replacement of the 4-byte DOS 3.3 header.

For the second approach there's no need to look at any AppleSingle spec. Rather all that needs to be known is:

  • There's a header with a size of $3A bytes. After that header the rest of the file is the actual file data (just like with the old header of 4 bytes).

  • At the file offset $24/$25 there's the length of actual file data (just like with the old header at offset $02/$03). However, that value is big endian !!! If you ignored that value so far you can continue to do so.

  • At the file offset $35 there's the ProDOS File Type. It can be either $06 for a BIN file or $FF for a SYS file.

  • At the file offset $38/$39 there's the Auxiliary Type for BIN files (just like with the old header at offset $00/$01). However, that value is big endian !!!

  • At the file offset $33 there's the ProDOS Access Byte. It's set to %11000011 meaning to enable Access, Destroy, Rename, Write and Read. For me personally it's purely nice-to-have that this value is actually used. You can as well ignore it from my POV.

Again, I'd really appreciate if you could add support for AppleSingle quickly as this would help to keep up the momentum we currently have in harmonizing the files created / consumed by different Apple II tools. In order to ease that I attached an AppleSingle file created with cc65. It's a BIN file with Auxtype $803. It's an executable printing "Hello, World": https://github.com/AppleCommander/AppleCommander/files/1737098/hello.zip

Thanks in advance, Oliver

AppleCommander last block bug

Hello AppleCommander devs,

I have a bug and a patch for you. The ProDOS support class is unable to allocate the final block on any disk, erroneously reporting that "The ProDOS physical disk size does not match the formatted size." At the end of this email I've included a test script that clearly demonstrates the issue for you.

I believe the fix is to change "<" to "<=" on line 1050 in findFreeBlock() of ProdosFormatDisk.java:

if ((block+1) * BLOCK_SIZE < getPhysicalSize()) {
    return block;
}
throw new ProdosDiskSizeDoesNotMatchException(textBundle.get("ProdosFormatDisk.ProdosDiskSizeDoesNotMatchError")); //$NON-NLS-1$

Think about that one for a minute and hopefully you'll see what I mean.

If you accept the patch, I'd love if you could build me a fixed ac.jar for use in Lawless Legends. The build requirements for AC are a bit arcane, but I do want to use every block of every floppy! :)

Thanks as always for a very useful tool. Best,

--Martin

---- BEGIN TEST SCRIPT ----

#!/usr/bin/env bash
set -x

# Link to newest released AppleCommander command-line jar

ln -sf AppleCommander-1.3.5.13-ac.jar ac.jar

# Create a disk

java -jar ac.jar -pro140 test.dsk test

# By default the ProDOS disk has 273 blks free. To almost fill it, let's make
# a file that with 269 blks of data. ProDOS tree file overhead adds 3 blocks
# (tree index plus two regular index blocks).

dd if=/dev/zero bs=512 count=269 | java -jar ac.jar -p test.dsk BIGFILE.BIN BIN

# Show that the disk now has exactly 1 block free

java -jar ac.jar -i test.dsk

# Try to fill the last block. This fails with this error:
# "The ProDOS physical disk size does not match the formatted size."

dd if=/dev/zero bs=512 count=1 | java -jar ac.jar -p test.dsk BIGFILE.BIN BIN

Return result code?

Is it possible for AppleCommander to give a return a code for a failed BASIC parse?

I call it with
result = os.system('java -jar ac.jar -bas ...etc...

If I give try to import something that isn't code, it shows:

Error: Expected a number in line #1
java.lang.RuntimeException: Expected a number in line #1
at io.github.applecommander.bastools.api.Parser.expectNumber(Parser.java:68)
at io.github.applecommander.bastools.api.Parser.readLine(Parser.java:34)
at io.github.applecommander.bastools.api.Parser.parse(Parser.java:28)
at com.webcodepro.applecommander.ui.ac.putAppleSoft(ac.java:198)
at com.webcodepro.applecommander.ui.ac.main(ac.java:175)
AppleCommander command line options [1.6.0]:
-i [] display information about image(s).
...etc...

BUT it doesn't return a result of 256 to my calling program, so my script doesn't know that it failed.

Is this fixable?

Thanks.
Kay

Error when trying to insert applesingle files created by asu

I tried manually creating an AS file using the asu utility, but applecommander is throwing an error when trying to insert it into a disk with ac:

$ java -jar ~/bin/AppleCommander.jar -pro140 test.dsk test
$ echo "Hello world" > test.txt
$ java -jar ~/bin/applesingle-tools-asu-1.2.1.jar create test.as --name test --filetype TXT --data-fork=test.txt
Saved to 'test.as'.
$ java -jar ~/bin/AppleCommander.jar -as test.dsk < test.as
Error: Unknown entry type of 0003
java.io.IOException: Unknown entry type of 0003
at com.webcodepro.applecommander.util.AppleSingle.load(AppleSingle.java:66)
at com.webcodepro.applecommander.util.AppleSingle.(AppleSingle.java:34)
at com.webcodepro.applecommander.ui.ac.putAppleSingle(ac.java:286)
at com.webcodepro.applecommander.ui.ac.putAppleSingle(ac.java:278)
at com.webcodepro.applecommander.ui.ac.main(ac.java:140)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:83)

v1.4.0 Breaks Compatibility with PowerBook G4

I know you're not going to like this, but I would like to humbly request that you keep supporting older machines. The highest version of Java supported by my PowerBook G4 with Mac OS X 10.4 is Java 1.5.

Unfortunately there is no way to get a newer version of Java on that machine, besides switching the OS to Linux. The IBM versions of Java use op-codes that are not supported by the G4 PowerPC CPU, so they immediately fail. The OpenJDK BSD options just don't work.

The PowerBook G4 is still a fine machine for development work targeting an Apple II. AppleCommander 1.3.5 supported back to Java 1.3. That is a little crazy. But Java 1.5 support is a little less crazy.

Seeing that AppleCommander builds images for a vintage computer, I hope you can understand my preference for this old PowerBook G4, the last non-Intel Mac laptop. :-) :-)

BASIC compiling issues

I am creating a Twitter bot where people can tweet Applesoft BASIC code, then get a response tweet with a video of the code running. I'm using AppleCommander -bas to get the tweet-submitted code into a DSK file.

My issue is: AppleCommander seems to be sensitive to the spacing in the input file. A line like:
0FORX=1TO100:?X:NEXTX
will create a compiled BASIC program that results in ?Syntax Error. For a couple of different reasons. e.g it turns to:
FORX = 1TO100.

Is it possible to make AppleComputer create syntactically valid code, when it comes it spaces around keywords?

Does the bt tool handle this sort of thing better? (Because man, that looks hard to install.)

Thanks
Kay

Prevent illegal filenames

Using AppleCommander 1.6.0 I created a DOS 3.3 DOS order disk. Not remembering what the DOS filename restrictions were, I placed some files on the disk image whose names began with digits. Turns out DOS filenames must begin with a letter and because my files didn't, trying to BLOAD them at the BASIC prompt resulted in a ?SYNTAX ERROR. To reduce confusion, AppleCommander should prevent adding files with illegal filenames (or renaming existing files to illegal filenames). ProDOS may have different filename restrictions than DOS.

Mac version does not run GUI on Apple silicon

Need to see if a SWT variant arm64 exists.

 % java -jar ~/Downloads/AppleCommander-macosx-1.6.0.jar 
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:103)
	at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:57)
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
	no swt-cocoa-4626 in java.library.path: [/Users/rob/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
	no swt-cocoa in java.library.path: [/Users/rob/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
	Can't load library: /Users/rob/.swt/lib/macosx/aarch64/libswt-cocoa-4626.jnilib
	Can't load library: /Users/rob/.swt/lib/macosx/aarch64/libswt-cocoa.jnilib
	/Users/rob/.swt/lib/macosx/aarch64/libswt-cocoa-4626.jnilib: dlopen(/Users/rob/.swt/lib/macosx/aarch64/libswt-cocoa-4626.jnilib, 0x0001): tried: '/Users/rob/.swt/lib/macosx/aarch64/libswt-cocoa-4626.jnilib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), '/usr/local/lib/libswt-cocoa-4626.jnilib' (no such file), '/usr/lib/libswt-cocoa-4626.jnilib' (no such file)

	at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
	at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
	at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
	at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
	at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:78)
	... 6 more

Crash when cancelling saving a new disk

On macOS 10.13.6 using AppleCommander 1.6.0 GUI, I go through the disk creation wizard to make a new disk image. Then in the disk view, I press the Save button. My OS file picker appears. I press Cancel. AppleCommander quits. It should stay open.

Compiling on Raspberry Pi

The current code does not compile on Pi/Arm. It can be made to compile by taking the following actions:

On Pi (Raspbian), issue command:
sudo apt-get install libswt-gtk-3-java

Make the following edits to build.gradle in repo:
Line 111:

  • compile "org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64:$swtVersion"
  • include '/usr/share/java/swt-gtk-3.8.jar'

Line 113:

  • appendix 'linux64-gtk'
  • appendix 'linuxarm-gtk'

Note: This approach results in a package that will compile and run, but GUI does not actually list file contents when opening an Apple II disk image. Also, a linux-arm clause would obviously need to be added to the build.gradle file, so that the linux scenario would continue to build for x86. It may also be possible to issue a compile option instead of the include (so that apt-get install isn't necessary), but I wasn't able to track down a URL that would be referenced for the Arm build of SWT-Gtk.

Allow specifying order when creating disk images on the command line

On the command line -dos140 creates a DOS-order DOS-formatted disk (.dsk extension) while -pro140 creates a ProDOS-order ProDOS-formatted disk (.po extension). There does not appear to be a way to create, for example, a DOS-order ProDOS-formatted disk with the command line. Since this capability exists in the GUI I presume there is a reason why a user would want to do this, so the capability should be offered in the CLI as well.

Crash when adding files to a disk image that is or was full

Using the AppleCommander 1.6.0 GUI on macOS 10.13.6 I created a DOS 3.3 DOS order disk image.

If I try to add files to the disk image that will occupy more space than is available on the disk image, AppleCommander quits immediately when I press the Finish button in the Import dialog. It should instead tell me the disk is out of space and remain open so that I can correct the problem.

If I delete existing files on the disk and then try to add a new file, it quits just the same, even though there should now be enough space. It should instead add the files to the disk and not quit.

Build fails with gradle 7: Plugin [id: 'maven'] was not found

Building with gradle assemble (with gradle 7.2 installed) fails:

FAILURE: Build failed with an exception.

* Where:
Build file '/path/to/AppleCommander-1-6-0/build.gradle' line: 4

* What went wrong:
Plugin [id: 'maven'] was not found in any of the following sources:

- Gradle Core Plugins (not a core plugin, please see https://docs.gradle.org/7.2/userguide/standard_plugins.html for available core plugins)
- Plugin Repositories (plugin dependency must include a version number for this source)

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

I understand that the maven plugin has been removed in gradle 7 and you should use the maven-publish plugin instead.

Since the maven stuff seems to relate to publishing new versions of this software, which I don't need to do, I tried removing id 'maven' from the plugins block and the entire uploadArchives block but there are further errors. Perhaps updating to gradle 7 is more involved. I know nothing about gradle so I can't help.


The build works if I use ./gradlew assemble but this downloads a copy of gradle at build time and I would rather use the copy of gradle I already have installed.

Dangerous check-java-versions.sh script in tools

Though it is a minor tool, I did notice that the tools/check-java-versions.sh will do an 'rm -rf /' if not run on a GNU/Linux system. In particular, the use of 'mktemp --directory' is utilizing the GNU-specific '--directory' instead of the more universal '-d' argument. This will result in a failure and subsequently the script will do a 'rm -rf /' because it doesn't check to see if the operation succeeded.

Simple below:

@@ -1,6 +1,11 @@
 #!/bin/bash
 
-TMP=$(mktemp --directory)
+TMP=$(mktemp -d)
+if [ -z ${TMP} ];
+then
+    echo "Problem creating TEMP directory; aborting!"
+    exit 1
+fi

Extend the "Compare" function?

Hi, I'm new to Apple Commander. I'm running the Java applet on Mac OS X.

The "Compare..." function is useful, but it's extremely limited. As far as I can see, it will only tell if two images are identical or not.

Would you consider beefing this up some? Maybe show which specific files are different between two images?

Even better would be to use diff to show the portions of a file (or a directory) that differ between two disk images.

AppleCommander doesn't recognize .dsk, .dsk.gz, .do, .do.gz, or .po images

When I run the 64-bit windows version, and try to Open a file, and go to the directory with my disk images, it doesn't recognize anything I have as a disk image. I made some of these images myself, and downloaded others from a variety of sites, so I don't think the problem is with the images.

Won't start with MacOS Catalina (10.15.7)

Any help is appreciated. If you need more information, let me know.

From the terminal:

java -jar AppleCommander-macosx-1.6.0.jar
***WARNING: Display must be created on main thread due to Cocoa restrictions.
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:103)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:57)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:78)
... 6 more

cannot put BAS files in disk images

hello there, i'm going nuts trying to put BASIC programs in disk images.

let's say i write this simple program:

$ cat TEST.BAS 
10 REM BEGIN TEST
20 PRINT "JUST A TEST"
30 REM END TEST

create a new prodos disk image:

$ java -jar AppleCommander-ac-1.4.0.jar -pro140 blank.po BLANK

check image is ok:

$ java -jar AppleCommander-ac-1.4.0.jar -ls blank.po
blank.po /BLANK/
ProDOS format; 139.776 bytes free; 3.584 bytes used.

put the file inside the disk image:

$ java -jar AppleCommander-ac-1.4.0.jar -p TEST bas < TEST.BAS

check disk image again:

$ java -jar AppleCommander-ac-1.4.0.jar -ls blank.po
blank.po /BLANK/
TEST BAS 57  
ProDOS format; 139.264 bytes free; 4.096 bytes used.

but when i try to get file back in stdout i get:

$ java -jar AppleCommander-ac-1.4.0.jar -e blank.po TEST

Error: 57
java.lang.ArrayIndexOutOfBoundsException: 57
	at com.webcodepro.applecommander.util.ApplesoftTokenizer.getNextToken(Unknown Source)
	at com.webcodepro.applecommander.storage.filters.ApplesoftFileFilter.filter(Unknown Source)
	at com.webcodepro.applecommander.ui.ac.getFile(Unknown Source)
	at com.webcodepro.applecommander.ui.ac.main(Unknown Source)

reading the file from disk in any ameulator results in some long basic code (prodos header stuff?) starting with my code, which looks kind of crippled

if i get back raw data i get back my file:

$ java -jar AppleCommander-ac-1.4.0.jar -g blank.po TEST
10 REM BEGIN TEST
20 PRINT "JUST A TEST"
30 REM END TEST

what is going on?

...am i missing something? file should be tokenized somehow? should i add starting address?

did not find any helpful hint reading the docs

thank you

PS
putting binary files in disk images works as expected

i am using linux with Oracle java version 1.8.0_161

target executableCmdJar depends on SWT, doesn't include it

If you build executableCmdJar without first building executableGuiJar, its rules attempt to compile SWT-using code without SWT. Operating

tjcarter@rem:~/Source/iKarith/AppleCommander/build$ ant clean
Buildfile: /srv/tjcarter/Source/iKarith/AppleCommander/build/build.xml

version:
     [echo] Building version 1.3.5.14...

init:
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/classes
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/dist
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/javadoc

clean:
   [delete] Deleting directory /srv/tjcarter/Source/iKarith/AppleCommander/work/classes
   [delete] Deleting directory /srv/tjcarter/Source/iKarith/AppleCommander/work/dist
   [delete] Deleting directory /srv/tjcarter/Source/iKarith/AppleCommander/work/javadoc

BUILD SUCCESSFUL
Total time: 0 seconds
tjcarter@rem:~/Source/iKarith/AppleCommander/build$ ant executableCmdJar
Buildfile: /srv/tjcarter/Source/iKarith/AppleCommander/build/build.xml

version:
     [echo] Building version 1.3.5.14...

init:
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/classes
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/dist
    [mkdir] Created dir: /srv/tjcarter/Source/iKarith/AppleCommander/work/javadoc

executableCmdJar:
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/build/build.xml:107: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 138 source files to /srv/tjcarter/Source/iKarith/AppleCommander/work/classes
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/storage/filters/imagehandlers/SwtImage.java:25: error: package org.eclipse.swt does not exist
    [javac] import org.eclipse.swt.SWT;
    [javac]                       ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/storage/filters/imagehandlers/SwtImage.java:26: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.Image;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/storage/filters/imagehandlers/SwtImage.java:27: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.ImageData;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/storage/filters/imagehandlers/SwtImage.java:28: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.ImageLoader;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/storage/filters/imagehandlers/SwtImage.java:38: error: cannot find symbol
    [javac]     private ImageData imageData;
    [javac]             ^
    [javac]   symbol:   class ImageData
    [javac]   location: class SwtImage
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:35: error: package org.eclipse.swt does not exist
    [javac] import org.eclipse.swt.SWT;
    [javac]                       ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:36: error: package org.eclipse.swt.custom does not exist
    [javac] import org.eclipse.swt.custom.CTabFolder;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:37: error: package org.eclipse.swt.custom does not exist
    [javac] import org.eclipse.swt.custom.CTabItem;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:38: error: package org.eclipse.swt.custom does not exist
    [javac] import org.eclipse.swt.custom.SashForm;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:39: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.MenuAdapter;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:40: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.MenuEvent;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:41: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.SelectionAdapter;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:42: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.SelectionEvent;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:43: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.SelectionListener;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:44: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.Font;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:45: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.GC;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:46: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.Point;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:47: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.Rectangle;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:48: error: package org.eclipse.swt.layout does not exist
    [javac] import org.eclipse.swt.layout.GridData;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:49: error: package org.eclipse.swt.layout does not exist
    [javac] import org.eclipse.swt.layout.GridLayout;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:50: error: package org.eclipse.swt.printing does not exist
    [javac] import org.eclipse.swt.printing.PrintDialog;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:51: error: package org.eclipse.swt.printing does not exist
    [javac] import org.eclipse.swt.printing.Printer;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:52: error: package org.eclipse.swt.printing does not exist
    [javac] import org.eclipse.swt.printing.PrinterData;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:53: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Composite;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:54: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Event;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:55: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.FileDialog;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:56: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Label;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:57: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Listener;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:58: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Menu;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:59: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.MenuItem;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:60: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.MessageBox;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:61: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.ProgressBar;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:62: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Shell;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:63: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Table;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:64: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.TableColumn;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:65: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.TableItem;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:66: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.ToolBar;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:67: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.ToolItem;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:68: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Tree;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:69: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.TreeItem;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:128: error: cannot find symbol
    [javac]     private Shell shell;
    [javac]             ^
    [javac]   symbol:   class Shell
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:26: error: package org.eclipse.swt.graphics does not exist
    [javac] import org.eclipse.swt.graphics.Image;
    [javac]                                ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:27: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Display;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:22: error: package org.eclipse.swt does not exist
    [javac] import org.eclipse.swt.SWT;
    [javac]                       ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:23: error: package org.eclipse.swt.custom does not exist
    [javac] import org.eclipse.swt.custom.CTabFolder;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:24: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.DisposeEvent;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:25: error: package org.eclipse.swt.events does not exist
    [javac] import org.eclipse.swt.events.DisposeListener;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:26: error: package org.eclipse.swt.layout does not exist
    [javac] import org.eclipse.swt.layout.FillLayout;
    [javac]                              ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:27: error: package org.eclipse.swt.widgets does not exist
    [javac] import org.eclipse.swt.widgets.Shell;
    [javac]                               ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:133: error: cannot find symbol
    [javac]     private SashForm sashForm;
    [javac]             ^
    [javac]   symbol:   class SashForm
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:134: error: cannot find symbol
    [javac]     private Tree directoryTree;
    [javac]             ^
    [javac]   symbol:   class Tree
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:135: error: cannot find symbol
    [javac]     private Table fileTable;
    [javac]             ^
    [javac]   symbol:   class Table
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:136: error: cannot find symbol
    [javac]     private ToolBar toolBar;
    [javac]             ^
    [javac]   symbol:   class ToolBar
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:137: error: cannot find symbol
    [javac]     private ToolItem standardFormatToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:138: error: cannot find symbol
    [javac]     private ToolItem nativeFormatToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:139: error: cannot find symbol
    [javac]     private ToolItem detailFormatToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:140: error: cannot find symbol
    [javac]     private ToolItem showDeletedFilesToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:141: error: cannot find symbol
    [javac]     private ToolItem exportToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:142: error: cannot find symbol
    [javac]     private ToolItem importToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:143: error: cannot find symbol
    [javac]     private ToolItem compileToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:144: error: cannot find symbol
    [javac]     private ToolItem viewFileItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:145: error: cannot find symbol
    [javac]     private ToolItem printToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:146: error: cannot find symbol
    [javac]     private ToolItem deleteToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:147: error: cannot find symbol
    [javac]     private ToolItem saveToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:148: error: cannot find symbol
    [javac]     private ToolItem saveAsToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:149: error: cannot find symbol
    [javac]     private ToolItem changeOrderToolItem;
    [javac]             ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:150: error: cannot find symbol
    [javac]     private Menu changeImageOrderMenu;
    [javac]             ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:168: error: cannot find symbol
    [javac]     public DiskExplorerTab(CTabFolder tabFolder, FormattedDisk[] disks, ImageManager imageManager, DiskWindow diskWindow) {
    [javac]                            ^
    [javac]   symbol:   class CTabFolder
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:202: error: cannot find symbol
    [javac]     protected void createFilesTab(CTabFolder tabFolder) {
    [javac]                                   ^
    [javac]   symbol:   class CTabFolder
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:278: error: cannot find symbol
    [javac]     protected Menu createDirectoryPopupMenu() {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:351: error: cannot find symbol
    [javac]     protected Menu createFilePopupMenu() {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:440: error: cannot find symbol
    [javac]     protected Menu createFileViewMenu(int style) {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:464: error: cannot find symbol
    [javac]     protected Menu createFileExportMenu(int style) {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:805: error: cannot find symbol
    [javac]     protected void setDirectoryExpandedStates(TreeItem treeItem, boolean expand) {
    [javac]                                               ^
    [javac]   symbol:   class TreeItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1205: error: cannot find symbol
    [javac]     protected void addDirectoriesToTree(TreeItem directoryItem, DirectoryEntry directoryEntry) {
    [javac]                                         ^
    [javac]   symbol:   class TreeItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1220: error: cannot find symbol
    [javac]     private void createFileToolBar(Composite composite, Object layoutData) {
    [javac]                                    ^
    [javac]   symbol:   class Composite
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1491: error: cannot find symbol
    [javac]     private Listener createDirectoryKeyboardHandler() {
    [javac]             ^
    [javac]   symbol:   class Listener
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1561: error: cannot find symbol
    [javac]     protected TreeItem findDirectoryItem(TreeItem[] treeItems, String name, int maxDepth, int currentDepth) {
    [javac]                                          ^
    [javac]   symbol:   class TreeItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1561: error: cannot find symbol
    [javac]     protected TreeItem findDirectoryItem(TreeItem[] treeItems, String name, int maxDepth, int currentDepth) {
    [javac]               ^
    [javac]   symbol:   class TreeItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1582: error: cannot find symbol
    [javac]     private Listener createFileKeyboardHandler() {
    [javac]             ^
    [javac]   symbol:   class Listener
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1616: error: cannot find symbol
    [javac]     private Listener createToolbarCommandHandler() {
    [javac]             ^
    [javac]   symbol:   class Listener
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1892: error: cannot find symbol
    [javac]     protected Menu createChangeImageOrderMenu() {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1957: error: cannot find symbol
    [javac]     protected Menu getChangeImageOrderMenu() {
    [javac]               ^
    [javac]   symbol:   class Menu
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1964: error: cannot find symbol
    [javac]     protected ToolBar getToolBar() {
    [javac]               ^
    [javac]   symbol:   class ToolBar
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1980: error: cannot find symbol
    [javac]     protected Tree getDirectoryTree() {
    [javac]               ^
    [javac]   symbol:   class Tree
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:1996: error: cannot find symbol
    [javac]     protected ToolItem getImportToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2000: error: cannot find symbol
    [javac]     protected ToolItem getExportToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2004: error: cannot find symbol
    [javac]     protected ToolItem getCompileToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2008: error: cannot find symbol
    [javac]     protected Table getFileTable() {
    [javac]               ^
    [javac]   symbol:   class Table
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2012: error: cannot find symbol
    [javac]     protected ToolItem getDeleteToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2016: error: cannot find symbol
    [javac]     protected ToolItem getViewFileToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2024: error: cannot find symbol
    [javac]     protected ToolItem getSaveToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskExplorerTab.java:2028: error: cannot find symbol
    [javac]     protected ToolItem getShowDeletedFilesToolItem() {
    [javac]               ^
    [javac]   symbol:   class ToolItem
    [javac]   location: class DiskExplorerTab
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:103: error: cannot find symbol
    [javac]     public ImageManager(Display display) {
    [javac]                         ^
    [javac]   symbol:   class Display
    [javac]   location: class ImageManager
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:124: error: cannot find symbol
    [javac]     private Image createImage(Display display, String path) {
    [javac]                               ^
    [javac]   symbol:   class Display
    [javac]   location: class ImageManager
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:124: error: cannot find symbol
    [javac]     private Image createImage(Display display, String path) {
    [javac]             ^
    [javac]   symbol:   class Image
    [javac]   location: class ImageManager
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/util/ImageManager.java:141: error: cannot find symbol
    [javac]     public Image get(String imageName) {
    [javac]            ^
    [javac]   symbol:   class Image
    [javac]   location: class ImageManager
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:40: error: cannot find symbol
    [javac]     private Shell parentShell;
    [javac]             ^
    [javac]   symbol:   class Shell
    [javac]   location: class DiskWindow
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskWindow.java:43: error: cannot find symbol
    [javac]     private Shell shell;
    [javac]             ^
    [javac]   symbol:   class Shell
    [javac]   location: class DiskWindow
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/swt/DiskInfoTab.java:24: error: package org.eclipse.swt does not exist
    [javac] import org.eclipse.swt.SWT;
    [javac]                       ^
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/AppleCommander.java:88: warning: non-varargs call of varargs method with inexact argument type for last parameter;
    [javac]                                     getMethod("launch", null); //$NON-NLS-1$
    [javac]                                                         ^
    [javac]   cast to Class for a varargs call
    [javac]   cast to Class[] for a non-varargs call and to suppress this warning
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/AppleCommander.java:89: warning: non-varargs call of varargs method with inexact argument type for last parameter;
    [javac]                             launchMethod.invoke(object, null);
    [javac]                                                         ^
    [javac]   cast to Object for a varargs call
    [javac]   cast to Object[] for a non-varargs call and to suppress this warning
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/AppleCommander.java:142: warning: non-varargs call of varargs method with inexact argument type for last parameter;
    [javac]                                     getMethod("launch", null); //$NON-NLS-1$
    [javac]                                                         ^
    [javac]   cast to Class for a varargs call
    [javac]   cast to Class[] for a non-varargs call and to suppress this warning
    [javac] /srv/tjcarter/Source/iKarith/AppleCommander/src/com/webcodepro/applecommander/ui/AppleCommander.java:143: warning: non-varargs call of varargs method with inexact argument type for last parameter;
    [javac]                             launchMethod.invoke(object, null);
    [javac]                                                         ^
    [javac]   cast to Object for a varargs call
    [javac]   cast to Object[] for a non-varargs call and to suppress this warning
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 100 errors
    [javac] 4 warnings

BUILD FAILED
/srv/tjcarter/Source/iKarith/AppleCommander/build/build.xml:107: Compile failed; see the compiler error output for details.

Total time: 1 second

There's a lot there, but if you either build executableGuiJar first or add SWT to the classpath for building the executableCmdJar, it builds. I've done the latter in the linux branch of iKarith/AppleCommander but I suspect that executableCmdJar is not intended to use SWT at all and the proper thing to do would be to modify the build so that it actually doesn't pull SWT-using code into the build.

GUI does not start on macOS High Sierra

$ java -jar AppleCommander-macosx-1.4.0.jar
***WARNING: Display must be created on main thread due to Cocoa restrictions.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.webcodepro.applecommander.ui.AppleCommander.launchSwtAppleCommander(AppleCommander.java:101)
at com.webcodepro.applecommander.ui.AppleCommander.main(AppleCommander.java:56)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at org.eclipse.swt.widgets.Display.(Unknown Source)
at com.webcodepro.applecommander.ui.swt.SwtAppleCommander.launch(SwtAppleCommander.java:77)
... 6 more

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Importing text files from Windows

Great program! I had great difficulty using it to edit a text file just now.

  1. I opened a .DSK Apple 2 disk image (had to select "All files" instead of "disk images"; the .DSK type does not display with the "disk images" filter).
  2. I exported the T file I wanted to edit to my Windows filesystem.
  3. I edited that file with Vim and saved it.
  4. I imported the file from Windows back to my disk image.

The file import didn't work the first time, because if you try to import a file which already exists on the disk image, then instead of replacing it, Apple Commander adds another file of exactly the same name to the disk image.

The import did start to work when I first deleted the original file from the disk image.
However, the imported file had different line endings, and so wasn't readable from Applesoft.

The file export from the .DSK file created a file on my Windows system in which each line ended with hex 0D 0A.
Importing such a file back to the disk image using Apple Commander produces a file in which each line ends (according to Apple Commander's hex dump) with 8D 8A.
What we want is a file on the disk image where each line ends with 8D.
We can get this by giving Apple Commander a Windows file where each line ends with 0D instead of 0D 0A.
Neither dos2unix nor unix2dos will produce such a file, so I used the hex editor HxD to search-and-replace 0D 0A with 0D, saved that, then imported the resulting file using Apple Commander.
It worked!

Clean-up yellow markers and other stuff!

There is a lot of object gyration in AppleCommander regarding the TextBundle#format method(s). As of Java 5(?) this can be replaced with a single method and a lot of code that does a new Object[] { ... } (or otherwise generates a bunch of Object instances) can just be dropped.

Missing Buttons in GUI

On Windows 10, when I launch the GUI the buttons are missing. I have uninstalled and reinstalled the latest version of Java but the problem persists. Running from the command line there are no errors reported. Any idea what would cause this?
1

Option to strip high bits on text files

Thanks for adding the ability to fix line endings in text files! Now, I hit a new snag: Kyan Pascal demands that all text files have their high bit stripped. Would it be possible to add a new flag that strips the high-bit from text files being added via the -pt command?

Unit test fail

Many unit tests require specific disks in specific folders.

Open UI with command line switch argument

A very handy feature would be the ability to "Open with..." and auto-load the selected image into the graphical UI. The existing switches are very powerful, but don't appear to cover this (non-technical user) use case.

e.g. java -jar build/libs/AppleCommander-linux64-gtk-1.7.0.jar -f=/path/to/file
-or maybe (to distinguish from non-GUI argments):
java -jar build/libs/AppleCommander-linux64-gtk-1.7.0.jar -uiopen=/path/to/file

My preliminary attempts to add the switch failed (all the existing switches appear to focus on the command line tool), but I attribute that to not being a Java dev.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.