diff -urN kawa-1.9.1.orig/kawa/Shell.java kawa-1.9.1/kawa/Shell.java --- kawa-1.9.1.orig/kawa/Shell.java 2007-01-11 00:50:49.000000000 +0100 +++ kawa-1.9.1/kawa/Shell.java 2007-02-27 11:19:21.103731600 +0100 @@ -257,6 +257,10 @@ if (! interactive) return; } + catch (UnboundLocationException ule) + { + perr.println(ule.getMessage()); + } catch (Throwable e) { SyntaxException se; diff -urN kawa-1.9.1.orig/kawa/standard/load.java kawa-1.9.1/kawa/standard/load.java --- kawa-1.9.1.orig/kawa/standard/load.java 2007-01-11 01:00:36.000000000 +0100 +++ kawa-1.9.1/kawa/standard/load.java 2007-02-27 10:55:27.500000000 +0100 @@ -158,56 +158,57 @@ } } - public static final void apply (Path path, Environment env, - boolean relative, int skipLines) - throws Throwable - { - String name = path.toString(); - if (name.endsWith (".zip") || name.endsWith(".jar")) - { - loadCompiled(path, env); - return; - } - URL url = path.toURL(); - char file_separator = System.getProperty ("file.separator").charAt(0); + public static final void apply(Path path, Environment env, + boolean relative, int skipLines) throws Throwable { + Path oldWorkingDir = Path.currentPath(); + Path file = path.getAbsolute(); + Path.setCurrentPath(file.getDirectory()); - if (name.endsWith (".class")) - { - name = name.substring (0, name.length () - 6); - name = name.replace ('/', '.'); - if (file_separator != '/') - name = name.replace (file_separator, '.'); - loadClassFile (name, env); - return; - } - InputStream fs = new BufferedInputStream(path.openInputStream()); - fs.mark(5); - int char0 = fs.read (); - if (char0 == -1) - return; // Sequence.eofValue; - if (char0 == 'P') - { - int char1 = fs.read (); - if (char1 == 'K') - { - int char2 = fs.read (); - if (char2 == '\003') - { - int char3 = fs.read (); - if (char3 == '\004') - { - fs.close (); - loadCompiled(path, env); - return; - } - } - } - } - fs.reset(); - InPort src = InPort.openFile(fs, path); - while (--skipLines >= 0) - src.skipRestOfLine(); - loadSource (src, env, url); - src.close(); - } + try { + String name = file.toString(); + if (name.endsWith(".zip") || name.endsWith(".jar")) { + loadCompiled(file, env); + return; + } + URL url = file.toURL(); + char file_separator = System.getProperty("file.separator") + .charAt(0); + + if (name.endsWith(".class")) { + name = name.substring(0, name.length() - 6); + name = name.replace('/', '.'); + if (file_separator != '/') + name = name.replace(file_separator, '.'); + loadClassFile(name, env); + return; + } + InputStream fs = new BufferedInputStream(file.openInputStream()); + fs.mark(5); + int char0 = fs.read(); + if (char0 == -1) + return; // Sequence.eofValue; + if (char0 == 'P') { + int char1 = fs.read(); + if (char1 == 'K') { + int char2 = fs.read(); + if (char2 == '\003') { + int char3 = fs.read(); + if (char3 == '\004') { + fs.close(); + loadCompiled(file, env); + return; + } + } + } + } + fs.reset(); + InPort src = InPort.openFile(fs, file); + while (--skipLines >= 0) + src.skipRestOfLine(); + loadSource(src, env, url); + src.close(); + } finally { + Path.setCurrentPath(oldWorkingDir); + } + } }