[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.9 and 1.10

version 1.9, 2001/08/06 04:25:43 version 1.10, 2001/08/31 09:17:13
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.8 2001/08/06 01:48:33 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.9 2001/08/06 04:25:43 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 89  Obj obj;
Line 89  Obj obj;
 {  {
         int r;          int r;
         char errmsg[BUFSIZ];          char errmsg[BUFSIZ];
           LIST l;
   
         if ( !obj ) {          if ( !obj ) {
                 r = CMO_NULL; write_int(s,&r);                  r = CMO_NULL; write_int(s,&r);
Line 141  Obj obj;
Line 142  Obj obj;
                         r = ((USINT)obj)->body; write_int(s,&r);                          r = ((USINT)obj)->body; write_int(s,&r);
                         break;                          break;
                 case O_QUOTE:                  case O_QUOTE:
                         write_cmo_tree(s,(FNODE)(((QUOTE)obj)->body));                          fnodetotree(BDY((QUOTE)obj),&l);
                           write_cmo_tree(s,l);
                         break;                          break;
                 default:                  default:
                         sprintf(errmsg, "write_cmo : id=%d not implemented.",OID(obj));                          sprintf(errmsg, "write_cmo : id=%d not implemented.",OID(obj));
Line 418  ERR e;
Line 420  ERR e;
   
 /* XXX */  /* XXX */
   
 write_cmo_tree(s,f)  /*
    * BDY(l) = treenode
    * treenode = [property,(name,)arglist]
    * arglist = list of treenode
    */
   
   write_cmo_tree(s,l)
 FILE *s;  FILE *s;
 FNODE f;  LIST l;
 {  {
         int r,i,n;          NODE n;
         char opname[BUFSIZ];          int r;
         NODE args,t;          STRING prop,name,key;
         FUNC fspec;  
         struct oSTRING str,nullstr;  
   
         /* zero */          /* (CMO_TREE (CMO_LIST,n,key1,attr1,...,keyn,attn),(CMO_LIST,m,arg1,...,argm)) */
         if ( !f ) {          n = BDY(l);
                 r = CMO_NULL; write_int(s,&r);          prop = (STRING)BDY(n);  n = NEXT(n);
                 return;          if ( !strcmp(BDY(prop),"internal") ) {
         }                  write_cmo(s,(Obj)BDY(n));
           } else {
         /* null string */                  if ( strcmp(BDY(prop),"list") ) {
         nullstr.id = O_STR;  
         nullstr.body = 0;  
   
         /* name string */  
         str.id = O_STR;  
         str.body = opname;  
   
         switch ( f->id ) {  
                 case I_BOP: case I_COP:  
                 case I_AND: case I_OR:  
                         /*  
                          * (CMO_TREE (CMO_STRING,op),(CMO_STRING,0)(CMO_LIST,2,arg1,arg2))  
                          */  
                         switch ( f->id ) {  
                                 case I_BOP:  
                                         strcpy(opname,((ARF)FA0(f))->name); break;  
                                 case I_COP:  
                                         switch( (cid)FA0(f) ) {  
                                                 case C_EQ: strcpy(opname,"=="); break;  
                                                 case C_NE: strcpy(opname,"!="); break;  
                                                 case C_GT: strcpy(opname,">"); break;  
                                                 case C_LT: strcpy(opname,"<"); break;  
                                                 case C_GE: strcpy(opname,">="); break;  
                                                 case C_LE: strcpy(opname,"<="); break;  
                                         }  
                                         break;  
                                 case I_AND:  
                                         strcpy(opname,"&&"); break;  
                                 case I_OR:  
                                         strcpy(opname,"||"); break;  
                         }  
                         r = CMO_TREE; write_int(s,&r);                          r = CMO_TREE; write_int(s,&r);
                         write_cmo_string(s,&str);                          name = (STRING)BDY(n);
                         write_cmo_string(s,&nullstr);                          n = NEXT(n);
                           /* function name */
                           write_cmo(s,name);
   
                           /* attribute list */
                         r = CMO_LIST; write_int(s,&r);                          r = CMO_LIST; write_int(s,&r);
                         n = 2; write_int(s,&n);                          r = 2; write_int(s,&r);
                         write_cmo_tree(s,(FNODE)FA1(f));                          MKSTR(key,"asir");
                         write_cmo_tree(s,(FNODE)FA2(f));                          write_cmo(s,key);
                         break;                          write_cmo(s,prop);
                 case I_NOT:                  }
                         r = CMO_TREE; write_int(s,&r);  
                         strcpy(opname,"!");                  /* argument list */
                         write_cmo_string(s,&str);;                  r = CMO_LIST; write_int(s,&r);
                         write_cmo_string(s,&nullstr);                  /* len = number of arguments */
                         r = CMO_LIST; write_int(s,&r);                  r = length(n); write_int(s,&r);
                         n = 1; write_int(s,&n);                  while ( n ) {
                         write_cmo_tree(s,(FNODE)FA1(f));                          write_cmo_tree(s,BDY(n));
                         break;                          n = NEXT(n);
                 case I_FUNC:                  }
                         r = CMO_TREE; write_int(s,&r);  
                         fspec = (FUNC)FA0(f);  
                         strcpy(opname,fspec->name);  
                         write_cmo_string(s,&str);  
                         write_cmo_string(s,&nullstr);  
                         args = (NODE)FA0((FNODE)FA1(f));  
                         r = CMO_LIST; write_int(s,&r);  
                         for ( n = 0, t = args; t; t = NEXT(t), n++ );  
                         write_int(s,&n);  
                         for ( i = 0, t = args; i < n; t = NEXT(t), i++ )  
                                 write_cmo_tree(s,BDY(t));  
                         break;  
                 case I_LIST:  
                         r = CMO_LIST; write_int(s,&r);  
                         args = (NODE)FA0(f);  
                         for ( n = 0, t = args; t; t = NEXT(t), n++ );  
                         write_int(s,&n);  
                         for ( i = 0, t = args; i < n; i++, t = NEXT(t) )  
                                 write_cmo_tree(s,BDY(t));  
                         break;  
                 case I_FORMULA:  
                         write_cmo(s,FA0(f));  
                         break;  
                 default:  
                         break; /* XXX */  
         }          }
 }  }
   
Line 534  Obj *rp;
Line 488  Obj *rp;
         BYTEARRAY array;          BYTEARRAY array;
         QUOTE quote;          QUOTE quote;
         FNODE fn;          FNODE fn;
           LIST list;
   
         read_int(s,&id);          read_int(s,&id);
         switch ( id ) {          switch ( id ) {
Line 605  Obj *rp;
Line 560  Obj *rp;
                         read_cmo(s,rp);                          read_cmo(s,rp);
                         break;                          break;
                 case CMO_TREE:                  case CMO_TREE:
                         read_cmo_tree(s,&fn);                          read_cmo_tree_as_list(s,&list);
   #if 0
                           treetofnode(list,&fn);
                         MKQUOTE(quote,fn);                          MKQUOTE(quote,fn);
                         *rp = (Obj)quote;                          *rp = (Obj)quote;
   #else
                           *rp = list;
   #endif
                         break;                          break;
                 default:                  default:
                         MKUSINT(t,id);                          MKUSINT(t,id);
Line 847  static struct operator_tab optab[] = {
Line 807  static struct operator_tab optab[] = {
   
 static int optab_len = sizeof(optab)/sizeof(struct operator_tab);  static int optab_len = sizeof(optab)/sizeof(struct operator_tab);
   
   #if 0
   /* old code */
 read_cmo_tree(s,rp)  read_cmo_tree(s,rp)
 FILE *s;  FILE *s;
 FNODE *rp;  FNODE *rp;
Line 864  FNODE *rp;
Line 826  FNODE *rp;
         FUNC func;          FUNC func;
   
         read_cmo(s,&name);          read_cmo(s,&name);
         read_cmo(s,&cd); /* XXX: currently not used */          read_cmo(s,&attr);
         for ( i = 0; i < optab_len; i++ )          for ( i = 0; i < optab_len; i++ )
                 if ( !strcmp(optab[i].name,BDY(name)) )                  if ( !strcmp(optab[i].name,BDY(name)) )
                         break;                          break;
Line 932  pointer **argp;
Line 894  pointer **argp;
         }          }
         return n;          return n;
 }  }
   #else
   read_cmo_tree_as_list(s,rp)
   FILE *s;
   LIST *rp;
   {
           STRING name;
           LIST attr,args;
           NODE t0,t1;
   
           read_cmo(s,&name);
           read_cmo(s,&attr);
           read_cmo(s,&args);
           MKNODE(t1,name,BDY(args));
           MKNODE(t0,attr,t1);
           MKLIST(*rp,t0);
   }
   #endif
   
 localname_to_cmoname(a,b)  localname_to_cmoname(a,b)
 char *a;  char *a;

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

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