X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FMain.java;h=b9967e852339f83ca97bd82f82d880b7dad36660;hb=7e9239a7088d4cd772a31a76e1a53e1c681638bc;hp=d55d9bb46390a2c3cfa3ee191eac7df12b87637b;hpb=8ea2f2734a60f0c4fa9c82083469165283a8b810;p=org.ibex.core.git diff --git a/src/org/xwt/Main.java b/src/org/xwt/Main.java index d55d9bb..b9967e8 100644 --- a/src/org/xwt/Main.java +++ b/src/org/xwt/Main.java @@ -1,4 +1,4 @@ -// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] package org.xwt; import java.net.*; @@ -14,6 +14,7 @@ import org.xwt.translators.*; public class Main { /** + * 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,119 +23,68 @@ public class Main { */ public static java.net.InetAddress originAddr = null; public static String originHost = null; - - /** the URL where the initial xwar came from. */ public static String origin = 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(""); + 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 resource name of the template to load; defaults to 'main'"); + Runtime.getRuntime().exit(-1); + } - /** true iff the user asked for rendered regions to be shown with a red rectangle */ - public static boolean showRenders = false; - - /** don't check if all surfaces are gone (and quit) until this is true */ - public static boolean doneInitializing = false; - - /** common entry point */ - public static void main(String[] args) { - try { - int startargs = 0; - while (true) { - if (startargs > args.length - 1) { - System.err.println("Usage: xwt [-s] [-v] [-l /] source-location [initial-template]"); - System.err.println(""); - System.err.println("Options:"); - System.err.println(" -s show rendering activity with red rectangles"); - System.err.println(" -v verbose logging"); - System.err.println(" -l serve logs via HTTP on 127.0.0.1:/"); - 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 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 if (args[startargs].equals("-l")) startargs++; - 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"); - initialRR = Res.stringToRes("file:" + args[startargs] + "!"); - 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"; + initialTemplateName = initialTemplateName.replace('.', '/'); + origin = args[startargs]; + + Stream rr; + final String initialTemplate; + + 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; + initialTemplate = "org/xwt/builtin/splash.xwt"; + } else { + rr = new Stream.File(origin); + if (!new File(origin).isDirectory()) rr = new Stream.Zip(rr); + initialTemplate = initialTemplateName; + } - File f = new File(args[startargs]); - origin = "file:" + f.getAbsolutePath(); - if (f.isDirectory()) { - initialRR = Res.stringToRes("file:" + args[startargs]); - Surface.scarAllSurfacesFromNowOn = true; - } else { - initialRR = Res.stringToRes("file:" + args[startargs] + "!"); - initialTemplate = "org.xwt.builtin.splash"; - } + if (Log.on) Log.info(Main.class, "loading xwar"); + final XWT xwt = new XWT(rr); + final Stream final_rr = rr; - if (args.length > startargs + 1) initialTemplate = args[startargs + 1]; - } - } - - if (Log.on) Log.log(Main.class, "instantiating " + initialTemplate); - final String initialTemplate_f = initialTemplate; - final Res initialRR_f = initialRR; - ThreadMessage.newthread(new JS.Callable() { - public Object call(JS.Array args) throws JS.Exn { - Box b = new Box(); - try { - Template t = Template.buildTemplate(Res.stringToRes("file:.").getInputStream(), "RESOURCE"); - t.apply(b, (Vec)null, (Vec)null, (JS.Callable)null, 0, 0, initialRR_f); - //FIXME - //Template.getTemplate(initialTemplate_f, null).apply(b, (Vec)null, (Vec)null, (JS.Callable)null, 0, 0, initialRR_f); - doneInitializing = true; - if (Surface.allSurfaces.size() == 0) { - Log.log(this, "exiting because all surfaces are gone"); - Platform.exit(); - } - } catch (Exception e) { - Log.log(Main.class, e); - } - 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(); - Platform.running(); + scarImage = + Picture.load((Stream)Main.builtin.get("org/xwt/builtin/scar.png"), + new Scheduler.Task() { public void perform() throws JSExn { + Template.getTemplate(((Stream)final_rr.get(initialTemplate))).apply(new Box(), xwt); + } }); - } catch (Throwable e) { - e.printStackTrace(); - Platform.criticalAbort("exception in Main.main(): " + e); - } + Scheduler.init(); } - }