/*************************************************************************
*
* $RCSfile: AppletViewer.java,v $
*
* $Revision: 1.1.1.1 $
*
* last change: $Author: hr $ $Date: 2000/09/18 16:54:03 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
package stardiv.app;
import java.awt.Toolkit;
import java.net.InetAddress;
//import stardiv.applet.AppletMessageHandler;
import stardiv.applet.AppletExecutionContext;
import stardiv.applet.DocumentProxy;
//import stardiv.js.ip.RootTaskManager;
//import stardiv.js.ip.BaseObj;
//import stardiv.js.ide.Ide;
//import stardiv.js.ne.RunTime;
//import stardiv.js.base.IdentifierPool;
//import stardiv.js.base.Identifier;
//import stardiv.memory.AtomUnion;
//import stardiv.js.ip.Ctor;
import stardiv.controller.SjSettings;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.URL;
import java.net.MalformedURLException;
/**
* A frame to show the applet tag in.
*/
class TextFrame extends Frame {
/**
* Create the tag frame.
*/
TextFrame(int x, int y, String title, String text) {
setTitle(title);
TextArea txt = new TextArea(20, 60);
txt.setText(text);
txt.setEditable(false);
add("Center", txt);
Panel p = new Panel();
add("South", p);
Button b = new Button(amh.getMessage("button.dismiss", "Dismiss"));
p.add(b);
class ActionEventListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
dispose();
}
}
b.addActionListener(new ActionEventListener());
pack();
setLocation(x, y);
setVisible(true);
WindowListener windowEventListener = new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
dispose();
}
};
addWindowListener(windowEventListener);
}
private static AppletMessageHandler amh = new AppletMessageHandler("textframe");
}
/**
* The toplevel applet viewer.
*/
public class AppletViewer extends Frame implements Observer {
com.sun.star.lib.sandbox.ResourceViewer resourceViewer;
/**
* Some constants...
*/
private static String defaultSaveFile = "Applet.ser";
/**
* Look here for the properties file
*/
public static File theUserPropertiesFile;
public static File theAppletViewerPropsFile;
//private Ide aIde;
//private RootTaskManager aRTM;
//private BaseObj aRootObj;
private AppletExecutionContext appletExecutionContext = null;
Hashtable atts = null;
static DocumentProxy documentViewer = null;
/**
* The status line.
*/
Label label;
/**
* output status messages to this stream
*/
PrintStream statusMsgStream;
static Vector contexts = new Vector();
private final class UserActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
processUserAction(evt);
}
}
static {
String sep = File.separator;
File userHome = new File(System.getProperty("user.home"));
File AVHome = new File(userHome, ".hotjava");
// ensure the props folder can be made
AVHome.mkdirs();
theUserPropertiesFile = new File(AVHome, "properties");
File JH = new File(System.getProperty("java.home"));
theAppletViewerPropsFile = new File(JH, "lib" + sep + "appletviewer.properties");
};
/**
* Create the applet viewer
*/
public AppletViewer(int x, int y, URL doc, Hashtable atts, PrintStream statusMsgStream) {
// resourceViewer = new stardiv.util.ResourceViewer();
// resourceViewer.show();
System.err.println("#*#*#*:" + sun.awt.ScreenUpdater.updater);
this.statusMsgStream = statusMsgStream;
this.atts = atts;
setTitle(amh.getMessage("tool.title", atts.get("code")));
MenuBar mb = new MenuBar();
Menu m = new Menu(amh.getMessage("menu.applet"));
addMenuItem(m, "menuitem.restart");
addMenuItem(m, "menuitem.reload");
addMenuItem(m, "menuitem.stop");
addMenuItem(m, "menuitem.save");
addMenuItem(m, "menuitem.start");
addMenuItem(m, "menuitem.clone");
m.add(new MenuItem("-"));
addMenuItem(m, "menuitem.tag");
addMenuItem(m, "menuitem.info");
addMenuItem(m, "menuitem.edit").setEnabled( false );
addMenuItem(m, "menuitem.encoding");
m.add(new MenuItem("-"));
addMenuItem(m, "menuitem.print");
m.add(new MenuItem("-"));
addMenuItem(m, "menuitem.props");
m.add(new MenuItem("-"));
addMenuItem(m, "menuitem.close");
// if (factory.isStandalone()) {
addMenuItem(m, "menuitem.quit");
// }
mb.add(m);
setMenuBar(mb);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
appletExecutionContext.shutdown();
}
public void windowIconified(WindowEvent evt) {
appletExecutionContext.sendLoad();
}
public void windowDeiconified(WindowEvent evt) {
appletExecutionContext.sendStart();
}
});
add("South", label = new Label(amh.getMessage("label.hello")));
appletExecutionContext = new AppletExecutionContext(doc, atts, this, 0);
appletExecutionContext.init();
appletExecutionContext.addObserver(this);
contexts.addElement(appletExecutionContext);
pack();
setVisible(true);
// appletExecutionContext.send();
appletExecutionContext.startUp();
/*
if( atts.get( "mayscript" ) != null ) {
aIde = new Ide();
aRTM = aIde.getActRootTaskManager();
aRootObj = new BaseObj( aRTM );
//Ctor aCtor = new AppletCtor( aRTM, "Window" );
//aRootObj.initProperties( aCtor, aCtor.getStaticPropCount(), aCtor.getBasePropCount() );
//aRootObj.setCtor( aCtor );
aRTM.setRootObj( aRootObj );
RunTime aRT = new RunTime( aRootObj, aRTM );
aIde.setRootObj( aRootObj );
AtomUnion aAU = new AtomUnion();
BaseObj aDocument = new BaseObj( aRTM );
aAU.setObject( aDocument );
Identifier aId = IdentifierPool.aGlobalPool.addIdentifier( "RootObject" );
aRootObj.newProperty( aId, aAU );
IdentifierPool.aGlobalPool.releaseIdentifier( aId );
String pName = (String)atts.get( "name" );
if( pName != null ) {
BaseObj aApplet = new BaseObj( aRTM );
aAU.setObject( aApplet );
aId = IdentifierPool.aGlobalPool.addIdentifier( pName );
aDocument.newProperty( aId, aAU );
IdentifierPool.aGlobalPool.releaseIdentifier( aId );
}
}
*/
}
public MenuItem addMenuItem(Menu m, String s) {
MenuItem mItem = new MenuItem(amh.getMessage(s));
mItem.addActionListener(new UserActionListener());
return m.add(mItem);
}
/**
* Ignore.
*/
public void showDocument(URL url) {
}
/**
* Ignore.
*/
public void showDocument(URL url, String target) {
}
/**
* Show status.
*/
public void showStatus(String status) {
label.setText(status);
}
public void update(Observable observable, Object status) {
showStatus((String)status);
}
public Object getJavaScriptJSObjectWindow() {
//if( aRootObj != null )
// return aRootObj.getJSObject();
return null;
}
/**
* System parameters.
*/
static Hashtable systemParam = new Hashtable();
static {
systemParam.put("codebase", "codebase");
systemParam.put("code", "code");
systemParam.put("alt", "alt");
systemParam.put("width", "width");
systemParam.put("height", "height");
systemParam.put("align", "align");
systemParam.put("vspace", "vspace");
systemParam.put("hspace", "hspace");
}
/**
* Print the HTML tag.
*/
public static void printTag(PrintStream out, Hashtable atts) {
out.print("<applet");
String v = (String)atts.get("codebase");
if (v != null) {
out.print(" codebase=\"" + v + "\"");
}
v = (String)atts.get("code");
if (v == null) {
v = "applet.class";
}
out.print(" code=\"" + v + "\"");
v = (String)atts.get("width");
if (v == null) {
v = "150";
}
out.print(" width=" + v);
v = (String)atts.get("height");
if (v == null) {
v = "100";
}
out.print(" height=" + v);
v = (String)atts.get("name");
if (v != null) {
out.print(" name=\"" + v + "\"");
}
out.println(">");
// A very slow sorting algorithm
int len = atts.size();
String params[] = new String[len];
len = 0;
for (Enumeration e = atts.keys() ; e.hasMoreElements() ;) {
String param = (String)e.nextElement();
int i = 0;
for (; i < len ; i++) {
if (params[i].compareTo(param) >= 0) {
break;
}
}
System.arraycopy(params, i, params, i + 1, len - i);
params[i] = param;
len++;
}
for (int i = 0 ; i < len ; i++) {
String param = params[i];
if (systemParam.get(param) == null) {
out.println("<param name=" + param +
" value=\"" + atts.get(param) + "\">");
}
}
out.println("</applet>");
}
/**
* Make sure the atrributes are uptodate.
*/
public void updateAtts() {
Dimension d = getSize();
Insets in = getInsets();
atts.put("width", new Integer(d.width - (in.left + in.right)).toString());
atts.put("height", new Integer(d.height - (in.top + in.bottom)).toString());
}
/**
* Save the applet to a well known file (for now) as a serialized object
*/
void appletSave() {
// REMIND -- should check that the applet has really stopped
FileDialog fd = new FileDialog(this, "Serialize Applet into File", FileDialog.SAVE);
// needed for a bug under Solaris...
fd.setDirectory(System.getProperty("user.dir"));
fd.setFile(defaultSaveFile);
fd.show();
String fname = fd.getFile();
if (fname == null) {
return; // cancelled
}
String dname = fd.getDirectory();
File file = new File(dname, fname);
try {
OutputStream s = new FileOutputStream(file);
ObjectOutputStream os = new ObjectOutputStream(s);
showStatus(amh.getMessage("appletsave.err1",
appletExecutionContext.getApplet().toString(), file.toString()));
os.writeObject(appletExecutionContext.getApplet());
} catch (IOException ex) {
System.err.println(amh.getMessage("appletsave.err2", ex));
}
}
/**
* Clone the viewer and the applet.
*/
void appletClone() {
Point p = getLocation();
updateAtts();
// factory.createAppletViewer(p.x + 30, p.y + 10,
// pHelper.panel.documentURL, (Hashtable)pHelper.panel.atts.clone());
}
/**
* Show the applet tag.
*/
void appletTag() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
updateAtts();
printTag(new PrintStream(out), atts);
showStatus(amh.getMessage("applettag"));
Point p = getLocation();
new TextFrame(p.x + 50, p.y + 20, amh.getMessage("applettag.textframe"), out.toString());
}
/**
* Show the applet info.
*/
void appletInfo() {
String str = appletExecutionContext.getApplet().getAppletInfo();
if (str == null) {
str = amh.getMessage("appletinfo.applet");
}
str += "\n\n";
String atts[][] = appletExecutionContext.getApplet().getParameterInfo();
if (atts != null) {
for (int i = 0 ; i < atts.length ; i++) {
str += atts[i][0] + " -- " + atts[i][1] + " -- " + atts[i][2] + "\n";
}
} else {
str += amh.getMessage("appletinfo.param");
}
Point p = getLocation();
new TextFrame(p.x + 50, p.y + 20, amh.getMessage("appletinfo.textframe"), str);
}
/**
* Show character encoding type
*/
void appletCharacterEncoding() {
showStatus(amh.getMessage("appletencoding", encoding));
}
/**
* Edit the applet.
*/
void appletEdit() {
}
/**
* Print the applet.
*/
void appletPrint() {
PrintJob pj = Toolkit.getDefaultToolkit().
getPrintJob(this, amh.getMessage("appletprint.printjob"), (Properties)null);
if (pj != null) {
Dimension pageDim = pj.getPageDimension();
int pageRes = pj.getPageResolution();
boolean lastFirst = pj.lastPageFirst();
Graphics g = pj.getGraphics();
if (g != null) {
appletExecutionContext.getApplet().printComponents(g);
g.dispose();
} else {
statusMsgStream.println(amh.getMessage("appletprint.fail"));
}
statusMsgStream.println(amh.getMessage("appletprint.finish"));
pj.end();
} else {
statusMsgStream.println(amh.getMessage("appletprint.cancel"));
}
}
/**
* Properties.
*/
AppletProps props;
public synchronized void networkProperties() {
if (props == null) {
props = new AppletProps(appletExecutionContext);
}
props.addNotify();
props.setVisible(true);
}
/**
* Close this viewer.
* Stop, Destroy, Dispose and Quit an AppletView, then
* reclaim resources and exit the program if this is
* the last applet.
*/
public void appletClose() {
appletExecutionContext.shutdown();
contexts.removeElement(this);
if (contexts.size() == 0) {
appletSystemExit();
}
}
// public static void writeClasses() {
// try {
// java.io.FileOutputStream file = new FileOutputStream("classes.txt");
// java.io.PrintStream printStream = new java.io.PrintStream(file);
// printStream.println("- .* .*");
// Enumeration elements = stardiv.util.HardClassContext.classList.elements();
// while(elements.hasMoreElements()) {
// String string = (String)elements.nextElement();
// String packageName = "";
// String className = string;
// int lastIndex = string.lastIndexOf('.');
// if(lastIndex > -1) {
// packageName = string.substring(0, lastIndex);
// className = string.substring(lastIndex + 1);
// }
// printStream.print("+ ");
// int index;
// while((index = packageName.indexOf('.')) > -1) {
// printStream.print(packageName.substring(0, index) + "\\\\");
// packageName = packageName.substring(index + 1);
// }
// printStream.print(packageName + " ");
// while((index = className.indexOf('$')) > -1) {
// printStream.print(className.substring(0, index) + "\\$");
// className = className.substring(index + 1);
// }
// printStream.println(className + "\\.class");
// }
// file.close();
// }
// catch(java.io.IOException eio) {
// System.err.println("IOException:" + eio);
// }
// }
/**
* Exit the program.
* Exit from the program (if not stand alone) - do no clean-up
*/
private void appletSystemExit() {
// if (factory.isStandalone())
System.exit(0);
}
/**
* Quit all viewers.
* Shutdown all viewers properly then
* exit from the program (if not stand alone)
*/
protected void appletQuit() {
appletExecutionContext.shutdown();
appletSystemExit();
}
/**
* Handle events.
*/
public void processUserAction(ActionEvent evt) {
String label = ((MenuItem)evt.getSource()).getLabel();
if (amh.getMessage("menuitem.restart").equals(label)) {
appletExecutionContext.restart();
return;
}
if (amh.getMessage("menuitem.reload").equals(label)) {
appletExecutionContext.reload();
return;
}
if (amh.getMessage("menuitem.clone").equals(label)) {
appletClone();
return;
}
if (amh.getMessage("menuitem.stop").equals(label)) {
appletExecutionContext.sendStop();
return;
}
if (amh.getMessage("menuitem.save").equals(label)) {
appletSave();
return;
}
if (amh.getMessage("menuitem.start").equals(label)) {
appletExecutionContext.sendStart();
return;
}
if (amh.getMessage("menuitem.tag").equals(label)) {
appletTag();
return;
}
if (amh.getMessage("menuitem.info").equals(label)) {
appletInfo();
return;
}
if (amh.getMessage("menuitem.encoding").equals(label)) {
appletCharacterEncoding();
return;
}
if (amh.getMessage("menuitem.edit").equals(label)) {
appletEdit();
return;
}
if (amh.getMessage("menuitem.print").equals(label)) {
appletPrint();
return;
}
if (amh.getMessage("menuitem.props").equals(label)) {
networkProperties();
return;
}
if (amh.getMessage("menuitem.close").equals(label)) {
appletClose();
return;
}
if (/*factory.isStandalone() && */amh.getMessage("menuitem.quit").equals(label)) {
appletQuit();
return;
}
//statusMsgStream.println("evt = " + evt);
}
/**
* Prepare the enviroment for executing applets.
*/
public static void init() {
Properties props = new Properties();
props.put( "http.proxyHost", "wwwproxy" );
props.put( "http.proxyPort", "3128" );
props.put( "ftpProxySet", "true" );
props.put( "ftpProxyHost", "wwwproxy" );
props.put( "ftpProxyPort", "3128" );
props.put( "ftpProxyPort", "3128" );
props.put( "stardiv.debug.trace", "window" );
props.put( "stardiv.debug.warning", "window" );
props.put( "stardiv.debug.error", "window" );
props.put( "stardiv.security.defaultSecurityManager", "true" );
// Try loading the appletviewer properties file to get messages, etc.
// try {
// FileInputStream in = new FileInputStream(theAppletViewerPropsFile);
// props.load(new BufferedInputStream(in));
// in.close();
// } catch (Exception e) {
// System.out.println(amh.getMessage("init.err"));
// }
// Try loading the saved user properties file to override some
// of the above defaults.
try {
FileInputStream in = new FileInputStream(theUserPropertiesFile);
props.load(new BufferedInputStream(in));
in.close();
} catch (Exception e) {
/* is it really necessary to say this?
This is always the case the first time we run..
System.out.println("[no properties loaded, using defaults]"); */
}
// Install a property list.
SjSettings.changeProperties(props);
}
/**
* The current character.
*/
static int c;
/**
* Scan spaces.
*/
public static void skipSpace(Reader in) throws IOException {
while ((c >= 0) && ((c == ' ') || (c == '\t') || (c == '\n') || (c == '\r'))) {
c = in.read();
}
}
/**
* Scan identifier
*/
public static String scanIdentifier(Reader in) throws IOException {
StringBuffer buf = new StringBuffer();
while (true) {
if (((c >= 'a') && (c <= 'z')) ||
((c >= 'A') && (c <= 'Z')) ||
((c >= '0') && (c <= '9')) || (c == '_')) {
buf.append((char)c);
c = in.read();
} else {
return buf.toString();
}
}
}
/**
* Scan tag
*/
public static Hashtable scanTag(Reader in) throws IOException {
Hashtable atts = new Hashtable();
skipSpace(in);
while (c >= 0 && c != '>') {
String att = scanIdentifier(in);
String val = "";
skipSpace(in);
if (c == '=') {
int quote = -1;
c = in.read();
skipSpace(in);
if ((c == '\'') || (c == '\"')) {
quote = c;
c = in.read();
}
StringBuffer buf = new StringBuffer();
while ((c > 0) &&
(((quote < 0) && (c != ' ') && (c != '\t') &&
(c != '\n') && (c != '\r') && (c != '>'))
|| ((quote >= 0) && (c != quote)))) {
buf.append((char)c);
c = in.read();
}
if (c == quote) {
c = in.read();
}
skipSpace(in);
val = buf.toString();
}
//statusMsgStream.println("PUT " + att + " = '" + val + "'");
atts.put(att.toLowerCase(), val);
skipSpace(in);
}
return atts;
}
static int x = 100;
static int y = 50;
static String encoding = null;
static private Reader makeReader(InputStream is) {
if (encoding != null) {
try {
return new BufferedReader(new InputStreamReader(is, encoding));
} catch (IOException x) { }
}
InputStreamReader r = new InputStreamReader(is);
encoding = r.getEncoding();
return new BufferedReader(r);
}
/**
* Scan an html file for <applet> tags
*/
public static void parse(URL url) throws IOException {
parse(url, System.out);
}
public static void parse(URL url, PrintStream statusMsgStream) throws IOException {
// warning messages
String requiresNameWarning = amh.getMessage("parse.warning.requiresname");
String paramOutsideWarning = amh.getMessage("parse.warning.paramoutside");
String requiresCodeWarning = amh.getMessage("parse.warning.requirescode");
String requiresHeightWarning = amh.getMessage("parse.warning.requiresheight");
String requiresWidthWarning = amh.getMessage("parse.warning.requireswidth");
String appNotLongerSupportedWarning = amh.getMessage("parse.warning.appnotLongersupported");
java.net.URLConnection conn = url.openConnection();
Reader in = makeReader(conn.getInputStream());
/* The original URL may have been redirected - this
* sets it to whatever URL/codebase we ended up getting
*/
url = conn.getURL();
Hashtable atts = null;
while(true) {
c = in.read();
if (c == -1)
break;
if (c == '<') {
c = in.read();
if (c == '/') {
c = in.read();
String nm = scanIdentifier(in);
if (nm.equalsIgnoreCase("applet")) {
if (atts != null) {
new AppletViewer(x, y, url, atts, System.out);
x += 50;
y += 20;
// make sure we don't go too far!
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
if (x > d.width - 30)
x = 100;
if (y > d.height - 30)
y = 50;
}
atts = null;
}
}
else {
String nm = scanIdentifier(in);
if (nm.equalsIgnoreCase("param")) {
Hashtable t = scanTag(in);
String att = (String)t.get("name");
if (att == null) {
statusMsgStream.println(requiresNameWarning);
} else {
String val = (String)t.get("value");
if (val == null) {
statusMsgStream.println(requiresNameWarning);
} else if (atts != null) {
atts.put(att.toLowerCase(), val);
} else {
statusMsgStream.println(paramOutsideWarning);
}
}
}
else if (nm.equalsIgnoreCase("applet")) {
atts = scanTag(in);
if (atts.get("code") == null && atts.get("object") == null) {
statusMsgStream.println(requiresCodeWarning);
atts = null;
} else if (atts.get("width") == null) {
statusMsgStream.println(requiresWidthWarning);
atts = null;
} else if (atts.get("height") == null) {
statusMsgStream.println(requiresHeightWarning);
atts = null;
}
}
else if (nm.equalsIgnoreCase("app")) {
statusMsgStream.println(appNotLongerSupportedWarning);
Hashtable atts2 = scanTag(in);
nm = (String)atts2.get("class");
if (nm != null) {
atts2.remove("class");
atts2.put("code", nm + ".class");
}
nm = (String)atts2.get("src");
if (nm != null) {
atts2.remove("src");
atts2.put("codebase", nm);
}
if (atts2.get("width") == null) {
atts2.put("width", "100");
}
if (atts2.get("height") == null) {
atts2.put("height", "100");
}
printTag(statusMsgStream, atts2);
statusMsgStream.println();
}
}
}
}
in.close();
}
/**
* Print usage
*/
static void usage() {
System.out.println(amh.getMessage("usage"));
}
static boolean didInitialize = false;
/**
* mainInit can be called by direct clients
*/
public static void mainInit() {
if (! didInitialize) {
didInitialize = true;
init();
}
}
/**
* Main
*/
public static void main(String argv[]) {
mainInit();
// Parse arguments
if (argv.length == 0) {
System.out.println(amh.getMessage("main.err.inputfile"));
usage();
return;
}
// Parse the documents
for (int i = 0 ; i < argv.length ; i++) {
try {
URL url = null;
if (argv[i].equals("-encoding")) {
if(i + 1 < argv.length) {
i++;
encoding = argv[i];
continue;
} else {
usage();
System.exit(1);
}
}
else
if (argv[i].indexOf(':') <= 1) {
String userDir = System.getProperty("user.dir");
String prot;
// prepend native separator to path iff not present
if (userDir.charAt(0) == '/' ||
userDir.charAt(0) == java.io.File.separatorChar) {
prot = "file:";
} else {
prot = "file:/";
}
url = new URL(prot + userDir.replace(File.separatorChar, '/')
+ "/");
url = new URL(url, argv[i]);
} else {
url = new URL(argv[i]);
}
parse(url);
documentViewer = DocumentProxy.getDocumentProxy(url, Toolkit.getDefaultToolkit());
} catch (MalformedURLException e) {
System.out.println(amh.getMessage("main.err.badurl", argv[i], e.getMessage()));
System.exit(1);
} catch (IOException e) {
System.out.println(amh.getMessage("main.err.io", e.getMessage()));
if (argv[i].indexOf(':') < 0) {
System.out.println(amh.getMessage("main.err.readablefile", argv[i]));
} else {
System.out.println(amh.getMessage("main.err.correcturl", argv[i]));
}
System.exit(1);
}
}
/*
if (documentViewer.countApplets() == 0) {
System.out.println(amh.getMessage("main.warning"));
usage();
System.exit(1);
}*/
}
private static AppletMessageHandler amh = new AppletMessageHandler("appletviewer");
}