X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fxwt%2FMain.java;h=533e763c92677b1f5205f5cb912024237ee31369;hp=294fd9e9e2fe999a5f0d0b8093828e2b1f7b0e36;hb=8ad8837b741bd77cd8aeef1881159ad839ce3828;hpb=6231a0535e90ed18d4509c24d9de88fe6586b289 diff --git a/src/org/xwt/Main.java b/src/org/xwt/Main.java index 294fd9e..533e763 100644 --- a/src/org/xwt/Main.java +++ b/src/org/xwt/Main.java @@ -1,20 +1,24 @@ -// Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] package org.xwt; -import org.xwt.util.*; -import java.lang.reflect.*; -import java.applet.*; import java.net.*; import java.util.*; import java.io.*; import java.awt.*; -import org.mozilla.javascript.*; +import org.xwt.js.*; +import org.xwt.util.*; +import org.xwt.translators.*; +import org.xwt.plat.*; import org.bouncycastle.util.encoders.Base64; /** Entry point for the XWT Engine; handles splash screen, initial xwar loading, and argument processing */ -public class Main extends Applet { +public class Main { + + // to prevent GCJ from dropping these classes + private static final Class[] keep = new Class[] { GCJ.class, Linux.class, Solaris.class, Darwin.class, Win32.class }; /** + * FEATURE: this should be implemented using self-emulation * Used for security checks. If this is null, it means that only * scripts originating from the local filesystem are loaded in * the engine (maximum permissions). If scripts have been loaded @@ -22,141 +26,70 @@ public class Main extends Applet { * IP). */ public static java.net.InetAddress originAddr = null; - - /** the URL where the initial xwar came from. */ + public static String originHost = null; public static String origin = null; - - /** true iff the user asked for rendered regions to be shown with a red rectangle */ - public static boolean showRenders = false; - - public Main() { } - public void paint(Graphics g) { } // do-nothing method to avoid repaints - public void update(Graphics g) { } // do-nothing method, to avoid repaints - - public static Applet applet = null; - - /** don't check if all surfaces are gone (and quit) until this is true */ - public static boolean doneInitializing = false; - - /** applet entry point */ - public void init() { - if ("true".equals(getParameter("showRenders"))) showRenders = true; - if ("true".equals(getParameter("verbose"))) Log.verbose = true; - applet = this; - main(new String[] { getParameter("initial-xwar-url"), "main" }); + public static String initialTemplate = null; + + public static final Stream builtin = new Stream.Zip(new Stream.Builtin()); + public static Picture scarImage = null; + + public static void printUsage() { + System.err.println("Usage: xwt [-s] [-v] [-l /] source-location [initial-template]"); + System.err.println(""); + System.err.println("Options:"); + System.err.println(" -v verbose logging"); + System.err.println(" -s [not yet supported]"); + System.err.println(" -l [not yet supported]"); + System.err.println(""); + System.err.println("Source-location is one of the following:"); + System.err.println(" - the path to an xwar file"); + System.err.println(" - the path to a directory to be used as an xwar"); + System.err.println(" - the http url of an xwar"); + System.err.println(""); + System.err.println("Initial-template is the path of the template to load; defaults to 'main'"); + Runtime.getRuntime().exit(-1); } - /** common entry point */ - public static void main(String[] args) { - try { - int startargs = 0; - while (true) { - if (startargs > args.length - 1) { - System.out.println("Usage: xwt [-s] [-v] source-location [initial-template]"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(" -s show rendering activity with red rectangles"); - System.out.println(" -v verbose logging"); - System.out.println(""); - System.out.println("Source-location is one of the following:"); - System.out.println(" - the path to an xwar file"); - System.out.println(" - the path to a directory to be used as an xwar"); - System.out.println(" - the http url of an xwar"); - System.out.println(""); - System.out.println("Initial-template is the resource name of the template to load; defaults to 'main'"); - Runtime.getRuntime().exit(-1); - } - else if (args[startargs].equals("-s")) showRenders = true; - else if (args[startargs].equals("-v")) Log.verbose = true; - else break; - startargs++; - } - final String instancename = args.length > startargs + 1 ? args[startargs + 1] : "main"; - - Platform.forceLoad(); - if (Log.on) for(int i=0; i startargs) { - if (args[startargs].startsWith("http://")) { - if (Log.on) Log.log(Main.class, "downloading xwar"); - origin = args[startargs]; - initialTemplate = "org.xwt.builtin.splash"; - - } else { - if (Log.on) Log.log(Main.class, "loading xwar from local filesystem"); + public static void main(String[] args) throws Exception { + int startargs = 0; + while (true) { + if (startargs > args.length - 1) printUsage(); + else if (args[startargs].equals("-v")) Log.verbose = true; + else break; + startargs++; + } - // HACK because MSIE turns \'s into /'s in URLs... argh!! - if (Platform.platform.getClass().getName().endsWith("Win32")) - args[startargs] = args[startargs].replace('/', '\\'); + Platform.forceLoad(); + if (Log.on) for(int i=0; i startargs + 1 ? args[startargs + 1] : "main"; + origin = args[startargs]; + + Stream rr; + final String startupTemplate; + if (origin.startsWith("http://") || origin.startsWith("https://")) { + originHost = origin.substring(origin.indexOf('/') + 2); + originHost = originHost.substring(0, originHost.indexOf('/') == -1 ? originHost.length() : originHost.indexOf('/')); + if (originHost.indexOf('@') != -1) originHost = originHost.substring(originHost.indexOf('@') + 1); + originAddr = InetAddress.getByName(originHost); + rr = builtin; + startupTemplate = "org.xwt.builtin.splash"; + } else { + rr = new Stream.File(origin); + if (!new File(origin).isDirectory()) rr = new Stream.Zip(rr); + startupTemplate = initialTemplate; + } - File f = new File(args[startargs]); - origin = "file:" + f.getAbsolutePath(); - if (f.isDirectory()) { - Resources.loadDirectory(f); - Surface.scarAllSurfacesFromNowOn = true; - } else { - initialTemplate = "org.xwt.builtin.splash"; - } + if (Log.on) Log.info(Main.class, "loading xwar"); + final XWT xwt = new XWT(rr); + final JS final_rr = (JS)xwt.get(""); - if (args.length > startargs + 1) initialTemplate = args[startargs + 1]; - } - } - - if (Log.on) Log.log(Main.class, "instantiating " + initialTemplate); - final String initialTemplate_f = initialTemplate; - ThreadMessage.newthread(new JSObject.JSFunction() { - public Object call(Context cx, Scriptable thisObj, Scriptable ctorObj, Object[] arg) throws JavaScriptException { - new Box(initialTemplate_f, null); - doneInitializing = true; - if (Surface.allSurfaces.size() == 0) { - Log.log(this, "exiting because all surfaces are gone"); - Platform.exit(); - } - return null; - } - }); - - // gcj-win32 exit()'s when the original thread dies, so we have to deadlock ourselves - if (Log.on) Log.log(Main.class, "main thread blocking on new semaphore"); - new org.xwt.util.Semaphore().block(); + scarImage = + Picture.load((Stream)Main.builtin.get("org/xwt/builtin/scar.png"), + new Scheduler.Task() { public void perform() throws Exception { + xwt.resolveString(startupTemplate, false).call(new Box(), null, null, null, 1); + } }); - } catch (Throwable e) { - e.printStackTrace(); - Platform.criticalAbort("exception in Main.main(): " + e); - } + Scheduler.init(); } - - /** a base64-encoded png image of the scar */ - public static final String scarPicture_png_base64 = - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAA" + - "CXBIWXMAAAsRAAALEQF/ZF+RAAAAB3RJTUUH0gIYAgsIkuS+AwAAA7lJREFUeJzF1l9MW1Uc" + - "wPHvvb3lz/oHOssd0hXo+NNONow102xDSXzoJGiyGBIyDNMlJvjn0USNL74ZY3wnxOgeWIxo" + - "9uAmZBrMiNkYYw5xRGBFQdiuzgtl/Gmht7S9PsBM162lGwN+yU3uPTf3nM895/c7OXwOfSKI" + - "23Z1yDJt0Ms2hQhwARa3CyHeudkuhJj4sB0IMblhqxH3ALYacV/AViJSArYKkRawFYh1AZuN" + - "yAiwmQgpzTsBMMzVv14V00PWQGDhJpd/UNugdwBebIOFRwFINwOGwJHXPH/d9BdYrbXZpaV1" + - "ZUPeZ8RuiHnhXAvYNxMghEEMaXO79rjqyLeV6c5iD01Nrz4bevnYwYFVxJkWsG4WQM+B+I6e" + - "7/q0SH98srXuYufpk2NGo8Tx5jcF6/unDwyA5oVzmwUAiBlhReg622eG6L7xDuWbjp+iJSVO" + - "Kisfl2Z8p8QLENxoYqatgjzQAeFy4QvOs0ZX5bGmeunvWxK//jaNQQpLsPHqSJkDgKT6GrxD" + - "xZ6DkimrzFffUFS020dX50B8efaPyeyuN5ZZBW4IkQogqb6Gp0b9IxZJcmKzubCYvfT0KAjx" + - "ES3r1LtTQDzxg4dFiA5V/UCRZUtio+p7xTtyfdgqiEXIBW5cew6xv/p5ap8zBVbi8ez5hg9d" + - "O8DA6kxtCCG2w8/JiPngrMUgObE/VoHDeYAn9taytBxDRw+/VH9YlHJFR7Dxo4o1xF3xoAiD" + - "AMI1mKwJhcYUWa63hkKRyXx7saZliU9WH8XjqSUciWHLs3HrX6x2e9a0212yqEXthWGPNzdy" + - "9cdZkpZjCiLvwNvfwxcZAQASEe6JMWXGUeCM6TaKiqoxm8xMB26zM9+OOq2b9lYVWsrLyoWJ" + - "G1FzvKo8L3r1/D/JHWeKuCsJE5ZDfPr3/l6BYX14tJvgUhBbfh7TgQDuCkvYarKg3BCIRu1E" + - "V3bFUnWeyXLcUwVriE8UWTYUn//2UjTi1/3+iwSDi+zft5NSV27O6EiUwaE/CS8NaMaTLaPp" + - "BlgPcd8ybIczDlX9VJFlg73zs0va8qA+PtGHxWTGfz3O4NA483O/aHrriStLEEkHWA/xfw4k" + - "xzUYrQmF5hVZPlw42D216CrdPXfbKMzMRliYv6LReqJ/CVZISsBUkSonBHGd7bgZjiqy/F6F" + - "qsZCjR87c0w2DF++Nbn25xkNnhg1YGmBQxkD1hDFiix/7VDVxQcdcD1ERkeydphyqOrx5B3z" + - "YSMxJzKagTvRDKWKLH/VqKqPwgHAf3HDlnr6flmoAAAAAElFTkSuQmCC"; }