[BACK]Return to cio.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

Diff for /OpenXM_contrib2/asir2000/io/cio.c between version 1.7 and 1.8

version 1.7, 2001/08/03 08:50:19 version 1.8, 2001/08/06 01:48:33
Line 44 
Line 44 
  * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY   * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  * $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.6 2000/11/08 08:02:51 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.7 2001/08/03 08:50:19 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 428  FNODE f;
Line 428  FNODE f;
         FUNC fspec;          FUNC fspec;
         struct oSTRING str,nullstr;          struct oSTRING str,nullstr;
   
           /* zero */
           if ( !f ) {
                   r = CMO_NULL; write_int(s,&r);
                   return;
           }
   
         /* null string */          /* null string */
         nullstr.id = O_STR;          nullstr.id = O_STR;
         nullstr.body = 0;          nullstr.body = 0;
Line 468  FNODE f;
Line 474  FNODE f;
                         write_cmo_tree(s,(FNODE)FA1(f));                          write_cmo_tree(s,(FNODE)FA1(f));
                         write_cmo_tree(s,(FNODE)FA2(f));                          write_cmo_tree(s,(FNODE)FA2(f));
                         break;                          break;
                         break;  
                 case I_NOT:                  case I_NOT:
                         r = CMO_TREE; write_int(s,&r);                          r = CMO_TREE; write_int(s,&r);
                         strcpy(opname,"!");                          strcpy(opname,"!");
Line 479  FNODE f;
Line 484  FNODE f;
                         write_cmo_tree(s,(FNODE)FA1(f));                          write_cmo_tree(s,(FNODE)FA1(f));
                         break;                          break;
                 case I_FUNC:                  case I_FUNC:
                           r = CMO_TREE; write_int(s,&r);
                         fspec = (FUNC)FA0(f);                          fspec = (FUNC)FA0(f);
                         strcpy(opname,fspec->name);                          strcpy(opname,fspec->name);
                         write_cmo_string(s,&str);                          write_cmo_string(s,&str);
Line 518  Obj *rp;
Line 524  Obj *rp;
         ERR e;          ERR e;
         MATHCAP mc;          MATHCAP mc;
         BYTEARRAY array;          BYTEARRAY array;
           QUOTE quote;
           FNODE fn;
   
         read_int(s,&id);          read_int(s,&id);
         switch ( id ) {          switch ( id ) {
Line 589  Obj *rp;
Line 597  Obj *rp;
                         read_cmo(s,rp);                          read_cmo(s,rp);
                         break;                          break;
                 case CMO_TREE:                  case CMO_TREE:
                         read_cmo_tree(s,rp);                          read_cmo_tree(s,&fn);
                           MKQUOTE(quote,fn);
                           *rp = (Obj)quote;
                         break;                          break;
                 default:                  default:
                         MKUSINT(t,id);                          MKUSINT(t,id);
Line 831  static int optab_len = sizeof(optab)/sizeof(struct ope
Line 841  static int optab_len = sizeof(optab)/sizeof(struct ope
   
 read_cmo_tree(s,rp)  read_cmo_tree(s,rp)
 FILE *s;  FILE *s;
 QUOTE *rp;  FNODE *rp;
 {  {
         int r,i,n;          int r,i,n;
         char *opname;          char *opname;
         STRING name,cd;          STRING name,cd;
         int op;          int op;
         LIST alist;          pointer *arg;
         NODE arg;  
         QUOTE quote;          QUOTE quote;
         FNODE fn;          FNODE fn;
           NODE t,t1;
         fid id;          fid id;
           Obj expr;
           FUNC func;
   
         read_cmo(s,&name);          read_cmo(s,&name);
         read_cmo(s,&cd); /* XXX: currently not used */          read_cmo(s,&cd); /* XXX: currently not used */
Line 850  QUOTE *rp;
Line 862  QUOTE *rp;
                         break;                          break;
         if ( i == optab_len ) {          if ( i == optab_len ) {
                 /* may be a function name */                  /* may be a function name */
                   n = read_cmo_tree_arg(s,&arg);
                   for ( i = n-1, t = 0; i >= 0; i-- ) {
                           MKNODE(t1,arg[i],t); t = t1;
                   }
                   searchf(sysf,BDY(name),&func);
                   if ( !func )
                           searchf(ubinf,BDY(name),&func);
                   if ( !func )
                           searchpf(BDY(name),&func);
                   if ( !func )
                           searchf(usrf,BDY(name),&func);
                   if ( !func )
                           appenduf(BDY(name),&func);
                   *rp = mkfnode(2,I_FUNC,func,mkfnode(1,I_LIST,t));
         } else {          } else {
                 opname = optab[i].name;                  opname = optab[i].name;
                 id = optab[i].id;                  id = optab[i].id;
                 switch ( id ) {                  switch ( id ) {
                         case I_BOP:                          case I_BOP:
                                 op = opname[0];                                  read_cmo_tree_arg(s,&arg);
                                 read_cmo(s,&alist);                                  *rp = mkfnode(3,I_BOP,optab[i].arf,arg[0],arg[1]);
                                 arg = BDY(alist);                                  return;
                                 fn = mkfnode(3,I_BOP,optab[i].arf,ARG0(arg),ARG1(arg));  
                                 MKQUOTE(quote,fn);  
                                 break;  
                         case I_COP:                          case I_COP:
                                 read_cmo(s,&alist);                                  read_cmo_tree_arg(s,&arg);
                                 arg = BDY(alist);                                  *rp = mkfnode(3,I_COP,optab[i].cid,arg[0],arg[0]);
                                 fn = mkfnode(3,I_COP,optab[i].cid,ARG0(arg),ARG1(arg));                                  return;
                                 MKQUOTE(quote,fn);  
                                 break;  
                         case I_AND:                          case I_AND:
                                 read_cmo(s,&alist);                                  read_cmo_tree_arg(s,&arg);
                                 arg = BDY(alist);                                  *rp = mkfnode(2,I_AND,arg[0],arg[1]);
                                 fn = mkfnode(2,I_AND,ARG0(arg),ARG1(arg));                                  return;
                                 MKQUOTE(quote,fn);  
                                 break;  
                         case I_OR:                          case I_OR:
                                 read_cmo(s,&alist);                                  read_cmo_tree_arg(s,&arg);
                                 arg = BDY(alist);                                  *rp = mkfnode(2,I_OR,arg[0],arg[1]);
                                 fn = mkfnode(2,I_OR,ARG0(arg),ARG1(arg));                                  return;
                                 MKQUOTE(quote,fn);  
                                 break;  
                         case I_NOT:                          case I_NOT:
                                 read_cmo(s,&alist);                                  read_cmo_tree_arg(s,&arg);
                                 arg = BDY(alist);                                  *rp = mkfnode(1,I_OR,arg[0]);
                                 fn = mkfnode(1,I_OR,ARG0(arg));                                  return;
                                 MKQUOTE(quote,fn);  
                                 break;  
                 }                  }
                 *rp = quote;  
         }          }
   }
   
   int read_cmo_tree_arg(s,argp)
   FILE *s;
   pointer **argp;
   {
           int id,n,i;
           pointer *ap;
           Obj t;
   
           read_int(s,&id); /* id = CMO_LIST */
           read_int(s,&n); /* n = the number of args */
           *argp = ap = (pointer *) MALLOC(n*sizeof(pointer));
           for ( i = 0; i < n; i++ ) {
                   read_cmo(s,&t);
                   if ( !t || (OID(t) != O_QUOTE) )
                           ap[i] = mkfnode(1,I_FORMULA,t);
                   else
                           ap[i] = BDY((QUOTE)t);
           }
           return n;
 }  }
   
 localname_to_cmoname(a,b)  localname_to_cmoname(a,b)

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>