Revision: 3607
          http://vexi.svn.sourceforge.net/vexi/?rev=3607&view=rev
Author:   mkpg2
Date:     2009-08-18 00:56:54 +0000 (Tue, 18 Aug 2009)

Log Message:
-----------
Refactoring. Component-ize js. No longer uses singleton scheduler, log.

Modified Paths:
--------------
    trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp
    trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp
    trunk/core/org.ibex.js/src/org/ibex/js/Parser.java
    trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java
    trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp
    trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java
    trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java
    trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
    trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java
    trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java
    trunk/core/org.ibex.util/src/org/ibex/util/Logger.java
    trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp
    trunk/core/org.vexi.core/src/org/vexi/core/Main.java
    trunk/core/org.vexi.core/src/org/vexi/core/Surface.java
    trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java
    trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
    trunk/core/org.vexi.core/src_junit/test/core/TestCore.java

Modified: trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp       2009-08-17 11:50:36 UTC 
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp       2009-08-18 00:56:54 UTC 
(rev 3607)
@@ -674,10 +674,10 @@
     }
 
     // Do we need both the Trap interface and this (its only implementor)
-    static final class TrapHolder implements Trap {
+    static final public class TrapHolder implements Trap {
         private final JS target, key, function;
         private Trap next;
-        TrapHolder(JS t, JS k, JS f, Trap n) { target = t; key = k; function = 
f; next = n; }
+        public TrapHolder(JS t, JS k, JS f, Trap n) { target = t; key = k; 
function = f; next = n; }
         public JS key() { return key; }
         public JS target() { return target; }
         public JS function() { return function; }

Modified: trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp    2009-08-17 11:50:36 UTC 
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp    2009-08-18 00:56:54 UTC 
(rev 3607)
@@ -4,8 +4,7 @@
 
 package org.ibex.js; 
 
-import java.io.PrintStream;
-import java.io.PrintWriter;
+import java.io.*;
 
 import org.ibex.util.*;
 
@@ -72,9 +71,13 @@
     public void printStackTrace(PrintWriter pw) { 
        printStackTrace(pw, Logger.DEBUG); 
     }    
-    public void printStackTrace(int level, Logger logger){
-       if(level<=logger.level)
-               printStackTrace(new 
PrintWriter(logger.logstream()),logger.level); 
+    public void printStackTrace(int level, Logger logger, Object o){
+       if(level<=logger.getLevel()){
+               StringWriter sw = new StringWriter(1024);
+               PrintWriter pw = new PrintWriter(sw);
+               printStackTrace(pw,logger.getLevel());
+               logger.log(o, sw.toString(), level);
+       }
     }
     public void printStackTrace(PrintWriter pw, int level) {
         int size = Math.min(backtrace.size(), MAX_BACKTRACE_SIZE);

Modified: trunk/core/org.ibex.js/src/org/ibex/js/Parser.java
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/Parser.java  2009-08-17 11:50:36 UTC 
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/Parser.java  2009-08-18 00:56:54 UTC 
(rev 3607)
@@ -83,7 +83,7 @@
 
     // Constructors //////////////////////////////////////////////////////
 
-    Parser(Reader r, String sourceName, int line) throws IOException { 
super(r, sourceName, line); }
+    Parser(Reader r, String sourceName, int line, GlobalsChecker param) throws 
IOException { super(r, sourceName, line); this.param = param; }
 
     /** for debugging */
     public static void main(String[] s) throws IOException {
@@ -254,36 +254,29 @@
     
     /** parse and compile a function */
     public static JSFunction fromReader(String sourceName, int firstLine, 
Reader sourceCode, GlobalsChecker param) throws IOException {
-        JSFunction ret = new JSFunction(sourceName, firstLine, null);
-        if (sourceCode == null) return ret;
-        Parser p = new Parser(sourceCode, sourceName, firstLine);
-        p.param = param;
-        
-        p.scopeStack.clear();
+        if (sourceCode == null) return new JSFunction(sourceName, firstLine, 
null);
+        Parser p = new Parser(sourceCode, sourceName, firstLine, param);
+        return p.parseScript(null);
+    }
+    
+    public JSFunction parseScript(Scope scope) throws IOException{
+       JSFunction ret = new JSFunction(sourceName, line, scope);
+        scopeStack.clear();
         ScopeInfo si = new ScopeInfo();
         si.jsfunc = ret;
-        p.scopeStack.push(si);
-        p.scopePush(ret);
-        p.scopeDeclare("arguments", true);
-        ret.add(firstLine, SCOPEPUT,p.scopeKey("arguments"));
+        scopeStack.push(si);
+        scopePush(ret);
+        scopeDeclare("arguments", true);
+        ret.add(line, SCOPEPUT, scopeKey("arguments"));
 
         while(true) {
-            //int s = ret.size;
-            if(p.peekToken() == -1) break; // FIXME: Check this logic one more 
time
-            p.parseStatement(ret, null);
-            //if (s == ret.size) break;
+            if(peekToken() == -1) break; // FIXME: Check this logic one more 
time
+            parseStatement(ret, null);
         }
-        p.scopePop(ret);
-        if(p.scopeStack.size() != 1) throw new Error("scopeStack height 
mismatch");
+        scopePop(ret);
+        if(scopeStack.size() != 1) throw new Error("scopeStack height 
mismatch");
         ret.add(-1, LITERAL, null); 
         ret.add(-1, RETURN);
-        
-        /*java.io.BufferedReader br = new java.io.BufferedReader(new 
java.io.StringReader(ret.dump()));
-        String line = "";
-        while((line=br.readLine())!=null){
-               System.out.println(line.replaceAll("[0-9]*\\s\\(-?[0-9]*\\)", 
""));
-        }*/
-        //System.out.println(ret.dump());
         return ret;
     }
 
@@ -751,7 +744,6 @@
     }
     
     /** Parse a block of statements which must be surrounded by LC..RC. */
-    void parseBlock(JSFunction b) throws IOException { parseBlock(b, null); }
     void parseBlock(JSFunction b, String label) throws IOException {
         int saveParserLine = parserLine;
         _parseBlock(b, label);

Modified: trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java       2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java       2009-08-18 
00:56:54 UTC (rev 3607)
@@ -77,40 +77,44 @@
        
 
        public Exception defaultRun() {
-               while(true) {
-                       try {
-                               if(runnable.size()==0 && isFinished()){
-                                       logger.error(Scheduler.class, 
"halting");
-                                       return null;
+               try{
+                       while(true) {
+                               try {
+                                       if(runnable.size()==0 && isFinished()){
+                                               logger.error(Scheduler.class, 
"halting");
+                                               return null;
+                                       }
+                                       current = 
(Callable)runnable.remove(true);
+                                       synchronized(this) {
+                                               //Log.debug(Scheduler.class, 
"performing " + current);
+                                               current.run(null);
+                                       }
+                                       renderAll();
+                               } /*catch (Stop e){
+                                       Log.uInfo(Scheduler.class, "Scheduler 
halted: " + e.getMessage());
+                                       return;
+                               }*/
+                               catch (Exception e) {
+                                       // HACK for running tests, as we need 
to pass any
+                                       // uncaught js/assertion exceptions out.
+                                       if(quitOnExn)
+                                               return e;
+                                       
+                                       String message;
+                                       // FIXME - are these messages always 
accurate(!) Could look at current
+                                       // task for more information
+                                       if(e instanceof JSExn){
+                                               message = "A JavaScript thread 
spawned with vexi.thread threw an exception:"; 
+                                       }else{
+                                               message = "A Callable threw an 
exception which was caught by the scheduler:";
+                                       }
+                                       logger.error(Scheduler.class, message);
+                                       logger.error(Scheduler.class, e);
                                }
-                               current = (Callable)runnable.remove(true);
-                               synchronized(this) {
-                                       //Log.debug(Scheduler.class, 
"performing " + current);
-                                       current.run(null);
-                               }
-                               renderAll();
-                       } /*catch (Stop e){
-                               Log.uInfo(Scheduler.class, "Scheduler halted: " 
+ e.getMessage());
-                               return;
-                       }*/
-                       catch (Exception e) {
-                               // HACK for running tests, as we need to pass 
any
-                               // uncaught js/assertion exceptions out.
-                               if(quitOnExn)
-                                       return e;
-                               
-                               String message;
-                               // FIXME - are these messages always 
accurate(!) Could look at current
-                               // task for more information
-                               if(e instanceof JSExn){
-                                       message = "A JavaScript thread spawned 
with vexi.thread threw an exception:"; 
-                               }else{
-                                       message = "A Callable threw an 
exception which was caught by the scheduler:";
-                               }
-                               logger.error(Scheduler.class, message);
-                               logger.error(Scheduler.class, e);
+                               // if an Error is thrown it will cause the 
engine to quit
                        }
-                       // if an Error is thrown it will cause the engine to 
quit
+               }finally{
+                       threadlocal.set(null);
                }
        }
        

Modified: trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp   2009-08-17 11:50:36 UTC 
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp   2009-08-18 00:56:54 UTC 
(rev 3607)
@@ -22,14 +22,19 @@
 //     }
        
        static private Scheduler scheduler(){ return Scheduler.findCurrent(); }
-       static private Logger logger(){ return scheduler().logger; }
+       static private Logger logger(){ 
+               Scheduler s = Scheduler.getCurrent();
+               // HACK ??
+               if(s==null) return DefaultLog.logger;
+               return s.logger; 
+       }
 
        static final JS internal = new JS.Immutable() {
         public JS get(JS key) throws JSExn {
             //#switch(JSU.toString(key))
             case "print": return METHOD;
             case "stackframe": return METHOD;
-            case "loglevel": return JSU.N(logger().level);
+            case "loglevel": return JSU.N(logger().getLevel());
             //#end
             return super.get(key);
         }
@@ -37,7 +42,11 @@
                switch(args.length) {
             case 1: {
                //#switch(JSU.toString(method))
-                   case "print": 
logger().logstream().print(JSU.toString(args[0])); return null;
+                   case "print": 
+                       PrintWriter w = logger().directWriter();
+                       w.print(JSU.toString(args[0]));
+                       w.flush();
+                       return null;
                        case "stackframe": return 
JSU.stackframe(JSU.toInt(args[0]));
                 //#end
             }

Modified: trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java
===================================================================
--- trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java     2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java     2009-08-18 
00:56:54 UTC (rev 3607)
@@ -105,7 +105,7 @@
        static JSFunction getTrapJS(String jscode, String srcname, boolean 
isWrite, JS global) throws IOException{
            StringReader sr = new StringReader(jscode);
            JSFunction ret = new JSFunction(srcname, 1, null);
-           Parser p = new Parser( sr, srcname, 1);
+           Parser p = new Parser( sr, srcname, 1, null);
            p.scopeStack.clear();
            ScopeInfo si = new ScopeInfo();
            si.jsfunc = ret;

Modified: trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java
===================================================================
--- trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java       2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java       2009-08-18 
00:56:54 UTC (rev 3607)
@@ -37,8 +37,8 @@
        boolean isRoot;
        
        static public void changeLogLevel(int level){
-               if(LOG.level == level) return;
-               LOG.level = level;
+               if(LOG.getLevel() == level) return;
+               LOG.setLevel(level);
                RunJS.LOG.warn(RunJS.class, "Setting LOG LEVEL " + 
Util.logLevelString(level));
        }
        

Modified: trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
===================================================================
--- trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java       
2009-08-17 11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java       
2009-08-18 00:56:54 UTC (rev 3607)
@@ -8,10 +8,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.ibex.js.DevUtil;
-import org.ibex.js.JS;
-import org.ibex.js.JSExn;
-import org.ibex.js.Parser;
+import org.ibex.js.*;
 import org.ibex.util.SourceException;
 
 import junit.framework.TestCase;
@@ -91,6 +88,7 @@
                }*/
        }
        
+       
        public void testUnterminatedStatement() throws Exception {
                try{
                        parseFile("unterminated_statement.js");

Modified: trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java
===================================================================
--- trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java      2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java      2009-08-18 
00:56:54 UTC (rev 3607)
@@ -425,7 +425,7 @@
     }
 
     private void doProxyAuth(Hashtable h0, String method) throws IOException {
-        if (logger.level >= Logger.INFO) logger.info(this, "Proxy 
AuthChallenge: " + h0.get("proxy-authenticate"));
+        if (logger.isInfo()) logger.info(this, "Proxy AuthChallenge: " + 
h0.get("proxy-authenticate"));
         Hashtable h = 
parseAuthenticationChallenge(h0.get("proxy-authenticate").toString());
         String style = h.get("AUTHTYPE").toString();
         //String realm = (String)h.get("realm");

Modified: trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java
===================================================================
--- trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java  2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java  2009-08-18 
00:56:54 UTC (rev 3607)
@@ -108,8 +108,8 @@
        public void flush() {
                logstream.flush();
        }
-       public PrintStream logstream() {
-               return logstream;
+       public PrintWriter directWriter() {
+               return new PrintWriter(logstream);
        }
        
     synchronized void log(Object major, Object minor, Object message, int 
level) {

Modified: trunk/core/org.ibex.util/src/org/ibex/util/Logger.java
===================================================================
--- trunk/core/org.ibex.util/src/org/ibex/util/Logger.java      2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.util/src/org/ibex/util/Logger.java      2009-08-18 
00:56:54 UTC (rev 3607)
@@ -1,6 +1,6 @@
 package org.ibex.util;
 
-import java.io.PrintStream;
+import java.io.*;
 
 
 abstract public class Logger {
@@ -24,17 +24,20 @@
     public static final int ERROR = 3;
     public static final int SILENT = Integer.MAX_VALUE;
     
+    private int level;
+    
     /** Overriding implementations should synchronize this method */
     public void log(Object o, Object message, int level){
        if(level>=this.level)
                log_(o,message,level);
     }
-    public int level;
+    public int getLevel(){ return level; }
+    public void setLevel(int level){ this.level = level; }
+    
     abstract protected void log_(Object o, Object message, int level);
-    abstract public void flush();
-       abstract public PrintStream logstream();
+    abstract public PrintWriter directWriter();
+     public void flush(){}
     
-
        public boolean isDebug() { return level<=DEBUG; }
        public boolean isInfo() { return level<=INFO; }
        
@@ -43,6 +46,6 @@
        public FilterLogger(int level, Logger filtee){ super(level); 
this.filtee = filtee; }
        protected void log_(Object o, Object message, int level) { 
filtee.log_(o,message,level); }
                public void flush() { filtee.flush(); }
-               public PrintStream logstream() { return filtee.logstream(); }   
+               public PrintWriter directWriter() { return 
filtee.directWriter(); }     
     }
 }

Modified: trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp  2009-08-17 11:50:36 UTC 
(rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp  2009-08-18 00:56:54 UTC 
(rev 3607)
@@ -941,7 +941,7 @@
             return justTriggerTraps(name, val);
         } catch (JSExn e) {
             Log.warn(Box.class,"Caught JS Exception while putting to trap 
\""+name+"\"");
-            e.printStackTrace(Logger.WARN, Log.user);
+            e.printStackTrace(Logger.WARN, Log.user, Box.class);
         }
         return null;
     }
@@ -953,7 +953,7 @@
             return putAndTriggerTraps(name, val);
         } catch (JSExn e) {
             Log.warn(Box.class,"Caught JS Exception while putting to trap 
\""+name+"\"");
-            e.printStackTrace(Logger.WARN, Log.user);
+            e.printStackTrace(Logger.WARN, Log.user, Box.class);
         }
         return null;
     }
@@ -977,7 +977,7 @@
             if (t != null) Main.SCHEDULER.runBeforePut(t, val);
         } catch (JSExn e) {
             Log.warn(Box.class,"Caught JS Exception while putting to trap 
\""+name+"\"");
-            e.printStackTrace(Logger.WARN, Log.user);
+            e.printStackTrace(Logger.WARN, Log.user, Box.class);
             return e;
         }
         return null;
@@ -990,7 +990,7 @@
             if (t != null) Main.SCHEDULER.runAfterPut(trapException);
         } catch (JSExn e) {
             Log.warn(Box.class,"Caught JS Exception while putting to trap 
\""+name+"\"");
-            e.printStackTrace(Logger.WARN, Log.user);
+            e.printStackTrace(Logger.WARN, Log.user, Box.class);
         }
     }
 

Modified: trunk/core/org.vexi.core/src/org/vexi/core/Main.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Main.java        2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Main.java        2009-08-18 
00:56:54 UTC (rev 3607)
@@ -99,12 +99,12 @@
                     if (opt.indexOf(':') > 1)  // >1 so that we don't catch 
DOS drive letters
                         Log.user.tcp(opt.substring(0, opt.indexOf(':')),
                                 
Integer.parseInt(opt.substring(opt.indexOf(':') + 1)));
-                    else if (opt.equals("debug")) Log.user.level = 
Logger.DEBUG;
-                    else if (opt.equals("info")) Log.user.level = Logger.INFO;
-                    else if (opt.equals("warn")) Log.user.level = Logger.WARN;
-                    else if (opt.equals("error")) Log.user.level = 
Logger.ERROR;
-                    else if (opt.equals("silent")) Log.user.level = 
Logger.SILENT;
-                    else if (opt.equals("rpc")) Log.rpc.level = Logger.DEBUG;
+                    else if (opt.equals("debug")) 
Log.user.setLevel(Logger.DEBUG);
+                    else if (opt.equals("info")) 
Log.user.setLevel(Logger.INFO);
+                    else if (opt.equals("warn")) 
Log.user.setLevel(Logger.WARN);
+                    else if (opt.equals("error")) 
Log.user.setLevel(Logger.ERROR);
+                    else if (opt.equals("silent")) 
Log.user.setLevel(Logger.SILENT);
+                    else if (opt.equals("rpc")) Log.rpc.setLevel(Logger.DEBUG);
                     else Log.user.file(opt);
                 }
             } else if (args[startargs].equals("-debug")) {

Modified: trunk/core/org.vexi.core/src/org/vexi/core/Surface.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Surface.java     2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Surface.java     2009-08-18 
00:56:54 UTC (rev 3607)
@@ -478,7 +478,7 @@
                 mouseUpdateRequired = false;
             } catch (JSExn e) {
                 Log.warn(Box.class,"Caught JS Exception while invoking 
tryPropagateMove");
-                e.printStackTrace(Logger.WARN,Log.user);
+                e.printStackTrace(Logger.WARN,Log.user,Box.class);
             }
         }
         

Modified: trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java    2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java    2009-08-18 
00:56:54 UTC (rev 3607)
@@ -81,7 +81,7 @@
                 criticalAbort("Unable to detect JVM");
             }
             
-            if (slog.level >= Logger.INFO) slog.info(Platform.class, 
"Detecting JVM..." + os_name +
+            if (slog.isInfo()) slog.info(Platform.class, "Detecting JVM..." + 
os_name +
                                " ==> org.vexi.plat." + platform_class);
             try {
                 if (platform_class != null) Class.forName("org.vexi.plat." + 
platform_class).newInstance();

Modified: trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
===================================================================
--- trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java 
2009-08-17 11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java 
2009-08-18 00:56:54 UTC (rev 3607)
@@ -7,9 +7,8 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.ibex.js.Fountain;
-import org.ibex.js.JS;
-import org.ibex.js.JSU;
+import org.ibex.js.*;
+
 import test.Util;
 import testdeployment.NanoHTTPD;
 

Modified: trunk/core/org.vexi.core/src_junit/test/core/TestCore.java
===================================================================
--- trunk/core/org.vexi.core/src_junit/test/core/TestCore.java  2009-08-17 
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src_junit/test/core/TestCore.java  2009-08-18 
00:56:54 UTC (rev 3607)
@@ -13,8 +13,8 @@
 public class TestCore {
 
        static public void changeLogLevel(int level){
-               if(Log.user.level == level) return;
-               Log.user.level = level;
+               if(Log.user.getLevel() == level) return;
+               Log.user.setLevel(level);
                Log.user.warn(RunJS.class, "Setting LOG LEVEL " + 
Util.logLevelString(level));
        }
        


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to