2003/06/10 21:45:35
[org.ibex.core.git] / src / org / xwt / XWT.java
index dd6edc2..ed8feb1 100644 (file)
@@ -18,9 +18,7 @@ public final class XWT extends JS.Obj {
     private static Hashtable safeFiles = new Hashtable();
 
     public Object get(Object name) {
-       if (name.equals("parseFloat")) throw new Error("not implemented");
-        else if (name.equals("parseInt")) throw new Error("not implemented");
-        else if (name.equals("alt")) return Surface.alt ? Boolean.TRUE : Boolean.FALSE;
+       if (name.equals("alt")) return Surface.alt ? Boolean.TRUE : Boolean.FALSE;
         else if (name.equals("control")) return Surface.control ? Boolean.TRUE : Boolean.FALSE;
         else if (name.equals("shift")) return Surface.shift ? Boolean.TRUE : Boolean.FALSE;
         else if (name.equals("clipboard")) return Platform.getClipBoard();
@@ -59,41 +57,65 @@ public final class XWT extends JS.Obj {
         put("tempDir", System.getProperty("java.io.tempdir"));
 
        put("math", new JS.Obj() { public Object get(Object name) {
-           if ("ceil".equals(name)) return new JS.Function() { public Object _call(JS.Array args)
+           if ("ceil".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args)
                    { if (args.elementAt(0) == null) return null;
                    return new Long((long)Math.ceil(Double.parseDouble(args.elementAt(0).toString()))); } };
-           else if ("floor".equals(name)) return new JS.Function() { public Object _call(JS.Array args)
+           else if ("floor".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args)
                    { if (args.elementAt(0) == null) return null;
                        return new Long((long)Math.floor(Double.parseDouble(args.elementAt(0).toString()))); } };
-           else if ("round".equals(name)) return new JS.Function() { public Object _call(JS.Array args)
+           else if ("round".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args)
                    { if (args.elementAt(0) == null) return null;
                        return new Long((long)Math.round(Double.parseDouble(args.elementAt(0).toString()))); } };
-           else if ("abs".equals(name)) return new JS.Function() { public Object _call(JS.Array args)
+           else if ("abs".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args)
                    { if (args.elementAt(0) == null) return null;
                        return new Long((long)Math.abs(Double.parseDouble(args.elementAt(0).toString()))); } };
-           else if ("min".equals(name)) return new JS.Function() { public Object _call(JS.Array args) {
+           else if ("min".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
                if (args.length() < 2 || args.elementAt(0) == null || args.elementAt(1) == null) return args.elementAt(0);
                return new Double(Math.min(((Number)args.elementAt(0)).doubleValue(),
                                           ((Number)args.elementAt(1)).doubleValue())); } };
-           else if ("max".equals(name)) return new JS.Function() { public Object _call(JS.Array args) {
+           else if ("max".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
                if (args.length() < 2) return args.elementAt(0);
                return new Double(Math.max(((Number)args.elementAt(0)).doubleValue(),
                                           ((Number)args.elementAt(1)).doubleValue())); } };
+           else if ("cos".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.cos(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("sin".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.sin(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("tan".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.tan(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("acos".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.acos(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("asin".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.asin(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("atan".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.atan(((Number)args.elementAt(0)).doubleValue())); } };
+           else if ("sqrt".equals(name)) return new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
+               return new Double(Math.sqrt(((Number)args.elementAt(0)).doubleValue())); } };
            return null;
        }});
 
-       put("newBrowserWindow", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("newBrowserWindow", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 1 || args.elementAt(0) == null) return null;
            Platform.newBrowserWindow(args.elementAt(0).toString());
            return null;
        }});
 
-       put("yield", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("parseFloat", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
+           if (args.length() != 1 || args.elementAt(0) == null) return null;
+           return new Float(args.elementAt(0).toString());
+       }});
+
+       put("parseInt", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
+           if (args.length() != 1 || args.elementAt(0) == null) return null;
+           return new Float(args.elementAt(0).toString());
+       }});
+
+       put("yield", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            sleep(0);
            return null;
        }});
 
-       put("theme", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("theme", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
                if (args.length() != 2) return null;
                if (args.elementAt(0) == null || args.elementAt(1) == null) return null;
                for(int i=1; i<args.length(); i++) {
@@ -111,43 +133,38 @@ public final class XWT extends JS.Obj {
                return null;
        }});
            
-       put("println", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("println", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 1) return null;
            if (Log.on) Log.log(this, JS.getFileAndLine() + " " +
-                               (args.elementAt(0) == null ? "null" : args.elementAt(0).toString()));
+                               (args.elementAt(0) == null ? "**null**" : args.elementAt(0).toString()));
            return null;
        }});
 
-       put("date", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("date", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            Log.log(XWT.class, "date not implemented");
            //throw new Error("not implemented");
            return null;
         }});
 
-       put("regexp", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("regexp", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            //throw new Error("not implemented");
            Log.log(XWT.class, "regexp not implemented");
            return null;
        }});
 
-       put("listfonts", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("listfonts", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            Object[] fonts = Platform.listFonts();
            JS.Array ret = new JS.Array();
            for(int i=0; i<fonts.length; i++) ret.addElement(fonts[i]);
            return ret;
        }});
 
-       put("theme", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
-           Log.log(XWT.class, "xwt.theme() not implemented...");
-           return null;
-       }});
-
-       put("xmlrpc", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("xmlrpc", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 1 || args.elementAt(0) == null) return null;
            return new XMLRPC(args.elementAt(0).toString(), "");
        }});
 
-       put("soap", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("soap", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() == 1 && args.elementAt(0) != null) return new SOAP(args.elementAt(0).toString(), "", null, null);
            else if (args.length() == 2 && args.elementAt(0) != null && args.elementAt(1) != null)
                return new SOAP(args.elementAt(0).toString(), "", args.elementAt(1).toString(), null);
@@ -156,7 +173,7 @@ public final class XWT extends JS.Obj {
            else return null;
        }});
 
-       put("textwidth", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("textwidth", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() < 1 || args.length() > 2) return null;
            if (args.elementAt(0) == null || (args.length() == 2 && args.elementAt(1) == null)) return null;
            String font = args.length() == 1 ? Platform.getDefaultFont() : args.elementAt(0).toString();
@@ -166,7 +183,7 @@ public final class XWT extends JS.Obj {
            else return new Integer(xwf.stringWidth(text));
        }});
 
-       put("textheight", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("textheight", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() > 1) return null;
            if (args.length() == 1 && args.elementAt(0) == null) return null;
            String font = args.length() == 0 || args.elementAt(0) == null ? Platform.getDefaultFont() : args.elementAt(0).toString();
@@ -175,7 +192,7 @@ public final class XWT extends JS.Obj {
            else return new Integer(xwf.getMaxAscent() + xwf.getMaxDescent());
        }});
        
-       put("newBox", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("newBox", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() > 0) Log.log(XWT.class, "DEPRECATED: xwt.newBox() with multiple arguments is deprecated; use xwt.newBox().apply()");
            JS.Function callback = null;
            for(int i=1; i<args.length(); i++)
@@ -195,20 +212,20 @@ public final class XWT extends JS.Obj {
            return ret;
        }});
 
-       put("sleep", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("sleep", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args != null && (args.length() != 1 || args.elementAt(0) == null)) return null;
            int i = args == null ? 0 : SpecialBoxProperty.stoi(args.elementAt(0).toString());
            sleep(i);
            return null;
        }});
 
-       put("openFile", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("openFile", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 1) return null;
            String file = Platform.fileDialog(args.elementAt(0).toString(), false);
            return file == null ? null : new ByteStream(file);
        }});
 
-       put("saveFile", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("saveFile", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 2) return null;
            if (!(args.elementAt(1) instanceof ByteStream)) return null;
            String file = args.elementAt(0).toString();
@@ -227,7 +244,7 @@ public final class XWT extends JS.Obj {
            }
        }});
 
-       put("saveFileAs", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("saveFileAs", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args.length() != 2) return null;
            if (!(args.elementAt(1) instanceof ByteStream)) return null;
            String file = args.elementAt(0).toString();
@@ -244,12 +261,12 @@ public final class XWT extends JS.Obj {
            }
        }});
 
-       put("utfEncode", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("utfEncode", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
            if (args == null || args.length() != 1) return null;
            return new ByteStream(args.elementAt(0).toString().getBytes());
        }});
 
-       put("parseHTML", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+       put("parseHTML", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
                 if (args == null || args.length() != 1 || args.elementAt(0) == null) return null;
                 try {
                     if (args.elementAt(0) instanceof ByteStream) {
@@ -265,74 +282,72 @@ public final class XWT extends JS.Obj {
             }
         });
     
-    put("recursivePrintObject", new JS.Function() { public Object _call(JS.Array args) {
+    put("recursivePrintObject", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) {
        if (args.length() != 1) return null;
        recurse("", "", args.elementAt(0));
        return null;
     }});
 
-    put("loadArchive", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
-                if (!ThreadMessage.suspendThread()) return null;
-
-                try {
-                    if (args == null || args.length() < 1 || args.elementAt(0) == null) return null;
-                    URL u = new URL(args.elementAt(0).toString());
-                    
-                    JS.Function callback = null;
-                    if (args.length() == 2 && args.elementAt(1) != null && args.elementAt(1) instanceof JS.Function)
-                       callback = (JS.Function)args.elementAt(1);
-                    
-                    if (!u.getFile().endsWith(".xwar")) {
-                        if (Log.on) Log.log(this, "Error: archive names must end with .xwar: " + u.getFile());
-                        throw new JS.Exn("Error: archive names must end with .xwar: " + u.getFile());
-                    }
-                    
-                    if (u.getProtocol().equals("http")) {
-                        HTTP http = new HTTP(u.toString());
-                        if (Main.originAddr == null) {
-                            try {
-                                Main.originAddr = InetAddress.getByName(u.getHost());
-                            } catch (UnknownHostException e) {
-                                if (Log.on) Log.log(this, "couldn't resolve " + u.getHost() + "; proceeding without permissions");
-                                Main.originAddr = InetAddress.getByName("0.0.0.0");
-                            }
-                        } else {
-                            Main.originAddr = InetAddress.getByName("0.0.0.0");
-                        }
-                        HTTP.HTTPInputStream in = http.GET();
-                        Resources.loadArchive(in, in.getContentLength(), callback);
-
-                    } else if (u.getProtocol().equals("file")) {
-                        if (Main.originAddr != null) {
-                            if (Log.on) Log.log(this, "scripts downloaded from the network may not load xwars from the local filesystem");
-                            throw new JS.Exn("scripts downloaded from the network may not load xwars from the local filesystem");
-                        }
-                        Resources.loadArchive(new FileInputStream(u.getFile()), (int)new File(u.getFile()).length(), callback);
-                        
-                    } else {
-                        if (Log.on) Log.log(this, "unknown protocol \"" + u.getProtocol() + "\"");
-                        throw new JS.Exn("unknown protocol \"" + u.getProtocol() + "\"");
-                    }
-                    
-                } catch (MalformedURLException me) {
-                    if (Log.on) Log.log(this, "Malformed URL: " + args.elementAt(0));
-                    if (Log.on) Log.log(this, me);
-                    throw new JS.Exn(me.toString());
-                    
-                } catch (IOException ioe) {
-                    if (Log.on) Log.log(this, "IOException while loading archive:");
-                    if (Log.on) Log.log(this, ioe);
-                    throw new JS.Exn(ioe.toString());
-
-                } finally {
-                    ThreadMessage.resumeThread();
-
-                }
-                return null;
-            }
-        });
+    put("loadArchive", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
+       if (!ThreadMessage.suspendThread()) return null;
+       try {
+           if (args == null || args.length() < 1 || args.elementAt(0) == null) return null;
+           URL u = new URL(args.elementAt(0).toString());
+           
+           JS.Function callback = null;
+           if (args.length() == 2 && args.elementAt(1) != null && args.elementAt(1) instanceof JS.Function)
+               callback = (JS.Function)args.elementAt(1);
+           
+           if (!u.getFile().endsWith(".xwar")) {
+               if (Log.on) Log.log(this, "Error: archive names must end with .xwar: " + u.getFile());
+               throw new JS.Exn("Error: archive names must end with .xwar: " + u.getFile());
+           }
+           
+           if (u.getProtocol().equals("http")) {
+               HTTP http = new HTTP(u.toString());
+               if (Main.originAddr == null) {
+                   try {
+                       Main.originAddr = InetAddress.getByName(u.getHost());
+                   } catch (UnknownHostException e) {
+                       if (Log.on) Log.log(this, "couldn't resolve " + u.getHost() + "; proceeding without permissions");
+                       Main.originAddr = InetAddress.getByName("0.0.0.0");
+                   }
+               } else {
+                   Main.originAddr = InetAddress.getByName("0.0.0.0");
+               }
+               HTTP.HTTPInputStream in = http.GET();
+               Resources.loadArchive(in, in.getContentLength(), callback);
+               
+           } else if (u.getProtocol().equals("file")) {
+               if (Main.originAddr != null) {
+                   if (Log.on) Log.log(this, "scripts downloaded from the network may not load xwars from the local filesystem");
+                   throw new JS.Exn("scripts downloaded from the network may not load xwars from the local filesystem");
+               }
+               Resources.loadArchive(new FileInputStream(u.getFile()), (int)new File(u.getFile()).length(), callback);
+               
+           } else {
+               if (Log.on) Log.log(this, "unknown protocol \"" + u.getProtocol() + "\"");
+               throw new JS.Exn("unknown protocol \"" + u.getProtocol() + "\"");
+           }
+           
+       } catch (MalformedURLException me) {
+           if (Log.on) Log.log(this, "Malformed URL: " + args.elementAt(0));
+           if (Log.on) Log.log(this, me);
+           throw new JS.Exn(me.toString());
+           
+       } catch (IOException ioe) {
+           if (Log.on) Log.log(this, "IOException while loading archive:");
+           if (Log.on) Log.log(this, ioe);
+           throw new JS.Exn(ioe.toString());
+           
+       } finally {
+           ThreadMessage.resumeThread();
+           
+       }
+       return null;
+    }});
 
-    put("prefetchImage", new JS.Function() { public Object _call(JS.Array args) throws JS.Exn {
+    put("prefetchImage", new JS.Function(-1, "java", null, null) { public Object _call(JS.Array args) throws JS.Exn {
        if (args == null || args.length() < 1 || args.elementAt(0) == null) return null;
        Box.getImage(args.elementAt(0).toString(),
                     args.length() > 1 && args.elementAt(1) instanceof JS.Function ? (JS.Function)args.elementAt(1) : null);