home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / tools / jsc / commands / standardcommands.java < prev   
Text File  |  1995-08-11  |  4KB  |  179 lines

  1. /*
  2.  * @(#)StandardCommands.java    1.1 95/05/10
  3.  * 
  4.  * Copyright (c) 1995 Sun Microsystems, Inc.  All Rights reserved Permission to
  5.  * use, copy, modify, and distribute this software and its documentation for
  6.  * NON-COMMERCIAL purposes and without fee is hereby granted provided that
  7.  * this copyright notice appears in all copies. Please refer to the file
  8.  * copyright.html for further important copyright and licensing information.
  9.  * 
  10.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  11.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  12.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  13.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  14.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  15.  * ITS DERIVATIVES.
  16.  */
  17.  
  18. package java.tools.jsc.commands;
  19. import java.tools.jsc.*;
  20.  
  21. /**
  22.  * A class to implement the standard script commands
  23.  * @author  James Gosling
  24.  */
  25.  
  26. public class StandardCommands implements ScriptCommand {
  27.     public StandardCommands (ScriptContext ctx) {
  28.     ctx.defun("!", this);
  29.     ctx.defun("$", this);
  30.     ctx.defun("%", this);
  31.     ctx.defun("&", this);
  32.     ctx.defun("*", this);
  33.     ctx.defun("+", this);
  34.     ctx.defun("-", this);
  35.     ctx.defun("/", this);
  36.     ctx.defun("<", this);
  37.     ctx.defun("=", this);
  38.     ctx.defun(">", this);
  39.     ctx.defun("^", this);
  40.     ctx.defun("|", this);
  41.     ctx.defun("~", this);
  42.     ctx.defun("and", this);
  43.     ctx.defun("or", this);
  44.     ctx.defun("for", this);
  45.     ctx.defun("if", this);
  46.     ctx.defun("puts", this);
  47.     ctx.defun("set", this);
  48.     ctx.defun("while", this);
  49.     }
  50.     public Object eval(ScriptContext ctx) {
  51.     int i;
  52.     int limit = ctx.nargs();
  53.     switch (ctx.command().charAt(0)) {    /* Gross hack! */
  54.       case '!':
  55.         return ctx.evarg(0) == null ? "true" : null;
  56.       case '~':
  57.         return new Integer(~ctx.arg(0, 0));
  58.       case '$':
  59.         return ctx.get(ctx.arg(0, "V"));
  60.       case '&':{
  61.         int v = ctx.arg(0, 0);
  62.         for (i = 1; i < limit; i++)
  63.             v &= ctx.arg(i, 0);
  64.         return new Integer(v);
  65.         }
  66.       case '|':{
  67.         int v = ctx.arg(0, 0);
  68.         for (i = 1; i < limit; i++)
  69.             v |= ctx.arg(i, 0);
  70.         return new Integer(v);
  71.         }
  72.       case '^':{
  73.         int v = ctx.arg(0, 0);
  74.         for (i = 1; i < limit; i++)
  75.             v ^= ctx.arg(i, 0);
  76.         return new Integer(v);
  77.         }
  78.       case '+':{
  79.         double v = ctx.arg(0, 0.0);
  80.         for (i = 1; i < limit; i++)
  81.             v += ctx.arg(i, 0.0);
  82.         return new Double(v);
  83.         }
  84.       case '-':{
  85.         double v = ctx.arg(0, 0.0);
  86.         for (i = 1; i < limit; i++)
  87.             v -= ctx.arg(i, 0.0);
  88.         return new Double(v);
  89.         }
  90.       case '*':{
  91.         double v = ctx.arg(0, 0.0);
  92.         for (i = 1; i < limit; i++)
  93.             v *= ctx.arg(i, 0.0);
  94.         return new Double(v);
  95.         }
  96.       case '/':{
  97.         double v = ctx.arg(0, 0.0);
  98.         for (i = 1; i < limit; i++)
  99.             v /= ctx.arg(i, 0.0);
  100.         return new Double(v);
  101.         }
  102.       case '%':{
  103.         double v = ctx.arg(0, 0.0);
  104.         for (i = 1; i < limit; i++)
  105.             v %= ctx.arg(i, 0.0);
  106.         return new Double(v);
  107.         }
  108.         // case '<':{
  109.         // double v = ctx.arg(0, 0.0);
  110.         // for (i = 1; i < limit; i++)
  111.         // ret X = ctx.arg(i, 0);
  112.         // }
  113.         // break;
  114.       case '=':{
  115.         Object o = ctx.evarg(0);
  116.         if (o == null)
  117.             for (i = 1; i < limit; i++) {
  118.             if (ctx.evarg(i) != null)
  119.                 return null;
  120.             }
  121.         else
  122.             for (i = 1; i < limit; i++)
  123.             if (!o.equals(ctx.arg(i)))
  124.                 return null;
  125.         return "true";
  126.         }
  127.         // case '>':{
  128.         // double v = ctx.arg(0, 0.0);
  129.         // for (i = 1; i < limit; i++)
  130.         // ret X = ctx.arg(i, 0);
  131.         // }
  132.         // break;
  133.       case 'a':{        /* and */
  134.         Object o = null;
  135.         for (i = 0; i < limit; i++)
  136.             if ((o = ctx.arg(i)) == null)
  137.             return null;
  138.         return o;
  139.         }
  140.       case 'o':{        /* or */
  141.         Object o = null;
  142.         for (i = 0; i < limit; i++)
  143.             if ((o = ctx.arg(i)) != null)
  144.             return null;
  145.         return o;
  146.         }
  147.       case 'f':        /* for */
  148.         {
  149.         Object o = null;
  150.         for (ctx.evarg(0); ctx.evarg(1) != null; ctx.evarg(2))
  151.             for (i = 3; i < limit; i++)
  152.             o = ctx.evarg(i);
  153.         return o;
  154.         }
  155.       case 'i':        /* if */
  156.         return ctx.evarg(ctx.evarg(0) == null ? 2 : 1);
  157.       case 'p':        /* puts */
  158.         for (i = 0; i < limit; i++)
  159.         System.out.print(ctx.arg(i, ""));
  160.         return null;
  161.       case 's':        /* set */
  162.         {
  163.         Object v = ctx.evarg(1);
  164.         ctx.put(ctx.arg(0, "V"), v);
  165.         return v;
  166.         }
  167.       case 'w':        /* while */
  168.         {
  169.         Object o = null;
  170.         while (ctx.evarg(0) != null)
  171.             for (i = 1; i < limit; i++)
  172.             o = ctx.evarg(i);
  173.         return o;
  174.         }
  175.     }
  176.     return null;
  177.     }
  178. }
  179.