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

Diff for /OpenXM_contrib2/asir2000/parse/util.c between version 1.1 and 1.16

version 1.1, 1999/12/03 07:39:12 version 1.16, 2005/10/24 08:26:42
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/parse/util.c,v 1.1.1.1 1999/11/10 08:12:34 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
    * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
    * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
    *
    * $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.15 2005/10/19 04:51:15 noro Exp $
   */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
 #include "parse.h"  #include "parse.h"
 #if defined(THINK_C) || defined(VISUAL)  #if defined(__GNUC__) || defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__)
 #include <stdarg.h>  #include <stdarg.h>
 #else  #else
 #include <varargs.h>  #include <varargs.h>
 #endif  #endif
 #include <ctype.h>  #include <ctype.h>
   
 int length(n)  int length(NODE n)
 NODE n;  
 {  {
         int i;          int i;
   
Line 18  NODE n;
Line 65  NODE n;
         return i;          return i;
 }  }
   
 int argc(a)  int argc(NODE a)
 NODE a;  
 {  {
         int i;          int i;
   
Line 27  NODE a;
Line 73  NODE a;
         return ( i );          return ( i );
 }  }
   
 void stoarg(s,acp,av)  void stoarg(char *s,int *acp,char **av)
 char *s;  
 int *acp;  
 char **av;  
 {  {
         int i;          int i;
   
         for ( i = 0; ; i++ ) {          for ( i = 0; ; i++ ) {
                 for ( ; *s && isspace(*s); s++ );                  for ( ; *s && isspace((unsigned char)*s); s++ );
                 if ( *s ) {                  if ( *s ) {
                         for ( av[i] = s; *s && !isspace(*s); s++ );                          for ( av[i] = s; *s &&
                                   !isspace((unsigned char)*s); s++ );
                         if ( *s )                          if ( *s )
                                 *s++ = 0;                                  *s++ = 0;
                 } else {                  } else {
Line 48  char **av;
Line 92  char **av;
 }  }
   
 #if 0  #if 0
 unsigned int ator(addr,r)  unsigned int ator(unsigned int addr,Obj *r)
 unsigned int addr;  
 Obj *r;  
 {  {
         N n;          N n;
         Q q;          Q q;
Line 67  Obj *r;
Line 109  Obj *r;
 }  }
 #endif  #endif
   
 void getarray(a,ind,vp)  void getarray(pointer a,NODE ind,pointer *vp)
 pointer a;  
 NODE ind;  
 pointer *vp;  
 {  {
         Obj len,row,col;          Obj len,row,col,trg;
         int i,l;          int i;
         NODE n,n0;          NODE n,n0;
         VECT v;          VECT v;
           Q q;
   
           if ( a && OID(a) == O_BYTEARRAY ) {
                   len = (Obj)BDY(ind);
                   if ( !rangecheck(len,((BYTEARRAY)a)->len) )
                           error("getarray : Out of range");
                   else if ( NEXT(ind) )
                           error("getarray : invalid index");
                   else {
                           i = (int)BDY((BYTEARRAY)a)[QTOS((Q)len)];
                           STOQ(i,q);
                           *vp = (pointer)q;
                   }
                   return;
           }
         for ( ; ind; ind = NEXT(ind) ) {          for ( ; ind; ind = NEXT(ind) ) {
                 if ( !a )                  if ( !a )
                         error("getarray : array or list expected");                          error("getarray : array or list expected");
Line 105  pointer *vp;
Line 158  pointer *vp;
                                         a = (pointer)v;                                          a = (pointer)v;
                                 }                                  }
                                 break;                                  break;
                           case O_IMAT:
                                   row = (Obj)BDY(ind);
                                   ind = NEXT(ind);
                                   col = (Obj)BDY(ind);
                                   if ( ((IMAT)a)->row < QTOS((Q)row) ||
                                           ((IMAT)a)->col < QTOS((Q)col) ||
                                           (QTOS((Q)row) < 0) || (QTOS((Q)col) < 0))
                                                   error("putarray : Out of range");
                                   GetIbody((IMAT)a, QTOS((Q)row), QTOS((Q)col), (Obj*)&trg);
                                   a = (pointer)trg;
                                   break;
                         case O_LIST:                          case O_LIST:
                                 n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind));                                  n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind));
                                 for ( l = 0, n = n0; n; n = NEXT(n), l++ );                                  if ( i < 0 )
                                 if ( i < 0 || i >= l )  
                                         error("getarray : Out of range");                                          error("getarray : Out of range");
                                 else {                                  for ( n = n0; i > 0 && n; n = NEXT(n), i-- );
                                         for ( n = n0, l = 0; l < i; l++, n = NEXT(n) );                                  if ( i || !n )
                                           error("getarray : Out of range");
                                   else
                                         a = (pointer)BDY(n);                                          a = (pointer)BDY(n);
                                 }  
                                 break;                                  break;
                         default:                          default:
                                 error("getarray : array or list expected");                                  error("getarray : array or list expected");
Line 123  pointer *vp;
Line 187  pointer *vp;
         *vp = a;          *vp = a;
 }  }
   
 void putarray(a,ind,b)  void putarray(pointer a,NODE ind,pointer b)
 pointer a;  
 NODE ind;  
 pointer b;  
 {  {
         Obj len,row,col;          Obj len,row,col;
         int i,l;          int i;
         NODE n,n0;          NODE n,n0;
   
           if ( a && OID(a) == O_BYTEARRAY ) {
                   len = (Obj)BDY(ind);
                   if ( !rangecheck(len,((BYTEARRAY)a)->len) )
                           error("putarray : Out of range");
                   else if ( NEXT(ind) )
                           error("putarray : invalid index");
                   else
                           BDY((BYTEARRAY)a)[QTOS((Q)len)] = (unsigned char)QTOS((Q)b);
                   return;
           }
         for ( ; ind; ind = NEXT(ind) ) {          for ( ; ind; ind = NEXT(ind) ) {
                 if ( !a )                  if ( !a )
                         error("putarray : array expected");                          error("putarray : array expected");
Line 161  pointer b;
Line 232  pointer b;
                                 } else                                  } else
                                         error("putarray : invalid assignment");                                          error("putarray : invalid assignment");
                                 break;                                  break;
                           case O_IMAT:
                                   row = (Obj)BDY(ind);
                                   ind = NEXT(ind);
                                   col = (Obj)BDY(ind);
                                   if ( ((IMAT)a)->row < QTOS((Q)row) ||
                                           ((IMAT)a)->col < QTOS((Q)col) ||
                                           (QTOS((Q)row) < 0) || (QTOS((Q)col) < 0))
                                                   error("putarray : Out of range");
                                   PutIent((IMAT)a, QTOS((Q)row), QTOS((Q)col), (Obj)b);
                                   break;
                         case O_LIST:                          case O_LIST:
                                 if ( NEXT(ind) ) {                                  if ( NEXT(ind) ) {
                                         n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind));                                          n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind));
                                         for ( l = 0, n = n0; n; n = NEXT(n), l++ );                                          if ( i < 0 )
                                         if ( i < 0 || i >= l )  
                                                 error("putarray : Out of range");                                                  error("putarray : Out of range");
                                         else {                                          for ( n = n0; i > 0 && n; n = NEXT(n), i-- );
                                                 for ( n = n0, l = 0; l < i; l++, n = NEXT(n) );                                          if ( i || !n )
                                                   error("puarray : Out of range");
                                           else
                                                 a = (pointer)BDY(n);                                                  a = (pointer)BDY(n);
                                         }  
                                 } else                                  } else
                                         error("putarray : invalid assignment");                                          error("putarray : invalid assignment");
                                 break;                                  break;
Line 181  pointer b;
Line 262  pointer b;
         }          }
 }  }
   
 int rangecheck(a,n)  int rangecheck(Obj a,int n)
 Obj a;  
 int n;  
 {  {
         N m;          N m;
   
Line 197  int n;
Line 276  int n;
         return 1;          return 1;
 }  }
   
 int zp(p)  int zp(P p)
 P p;  
 {  {
         int r;          int r;
         DCP dc;          DCP dc;
Line 213  P p;
Line 291  P p;
         return ( r );          return ( r );
 }  }
   
 #if defined(THINK_C) || defined(VISUAL)  #if defined(__GNUC__) || defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__)
 NODE mknode(int ac,...)  NODE mknode(int ac,...)
 {  {
         va_list ap;          va_list ap;
Line 311  va_dcl
Line 389  va_dcl
 }  }
 #endif  #endif
   
 void makevar(str,p)  V searchvar(char *str)
 char *str;  
 P *p;  
 {  {
         VL vl;          VL vl;
   
           for ( vl = CO; vl ;vl = NEXT(vl) )
                   if ( NAME(VR(vl)) && !strcmp(NAME(VR(vl)),str) )
                           return VR(vl);
           return 0;
   }
   
   void makevar(char *str,P *p)
   {
           VL vl;
         V v;          V v;
         P t;          P t;
   
Line 334  P *p;
Line 420  P *p;
                         vl = NEXT(vl);                          vl = NEXT(vl);
 }  }
   
 void makesrvar(f,p)  void makesrvar(FUNC f,P *p)
 FUNC f;  
 P *p;  
 {  {
         VL vl;          VL vl;
         V v;          V v;
         P t;          P t;
         char *str;          char *str;
   
         for ( vl = CO, str = NAME(f); ; )          for ( vl = CO, str = f->fullname; ; )
                 if ( NAME(VR(vl)) && !strcmp(NAME(VR(vl)),str) ) {                  if ( NAME(VR(vl)) && !strcmp(NAME(VR(vl)),str) ) {
                         VR(vl)->attr = (pointer)V_SR; VR(vl)->priv = (pointer)f;                          VR(vl)->attr = (pointer)V_SR; VR(vl)->priv = (pointer)f;
                         MKV(VR(vl),t); *p = t;                          MKV(VR(vl),t); *p = t;
Line 359  P *p;
Line 443  P *p;
                         vl = NEXT(vl);                          vl = NEXT(vl);
 }  }
   
 void appendtonode(n,a,nrp)  void appendtonode(NODE n,pointer a,NODE *nrp)
 NODE n;  
 pointer a;  
 NODE *nrp;  
 {  {
         NODE tn;          NODE tn;
   
Line 374  NODE *nrp;
Line 455  NODE *nrp;
         }          }
 }  }
   
 void appendtonode2(n,a,b,nrp)  void appendtonode2(NODE2 n,pointer a,pointer b,NODE2 *nrp)
 NODE2 n;  
 pointer a,b;  
 NODE2 *nrp;  
 {  {
         NODE2 tn;          NODE2 tn;
   
Line 389  NODE2 *nrp;
Line 467  NODE2 *nrp;
         }          }
 }  }
   
 void appendvar(vl,v)  void appendvar(VL vl,V v)
 VL vl;  
 V v;  
 {  {
         while (1)          while (1)
                 if ( vl->v == v )                  if ( vl->v == v )
Line 403  V v;
Line 479  V v;
                         vl = NEXT(vl);                          vl = NEXT(vl);
 }  }
   
 void reallocarray(arrayp,sizep,indexp,esize)  void reallocarray(char **arrayp,int *sizep,int *indexp,int esize)
 char **arrayp;  
 int *sizep,*indexp;  
 int esize;  
 {  {
         char *new;          char *new;
   
Line 422  int esize;
Line 495  int esize;
                 *arrayp = new;                  *arrayp = new;
         }          }
 }  }
   
 #if defined(THINK_C)  
 void bzero(p,len)  
 register char *p;  
 register int len;  
 {  
         for ( ; len; len-- )  
                 *p++ = 0;  
 }  
   
 void bcopy(s,d,len)  
 register char *s;  
 register char *d;  
 int len;  
 {  
         for ( ; len; len-- )  
                 *d++ = *s++;  
 }  
   
 char *index(char *s,char c)  
 {  
         for ( ; *s && *s != c; s++ );  
         if ( *s )  
                 return s;  
         else  
                 return 0;  
 }  
   
 void printap(p)  
 P p;  
 {  
         DCP dc;  
   
         for ( dc = DC(p); dc; dc = NEXT(dc) ) {  
                 printf("(c=0x%lx c->nm=0x%lx c->nm->p=%ld) ",  
                         (int *)dc->c,(int *)((Q)dc->c)->nm,(int)((Q)dc->c)->nm->p);  
         }  
         printf("\n");  
 }  
 #endif  

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.16

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