|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * ///////////////////////////////////// ! 4: * ///////////////////////////////////// ! 5: * ///////////// getdims.c ///////////// ! 6: * /// J. P. Hawkins WH X4610 8C-001 /// ! 7: * ///// Sun Aug 26 06:16:54 1979 ////// ! 8: * ///////////////////////////////////// ! 9: * ///////////////////////////////////// ! 10: ! 11: * ! 12: * GET ARRAY PARAMETERS (used by "dim", aputvar and agetvar) ! 13: * Pass the array symbol name, the number of dimensions , and ! 14: * the value of each dimension in dimlist where dimlist is an array ! 15: * of floats. The values returned are integerized. ! 16: * ! 17: * This routine is used by "dim()", a_getvar(), a_putvar() ! 18: * ! 19: * This routine could potentially be used for device driver routines ! 20: * as a means of getting number of args and the value of each. ! 21: */ ! 22: /* "@(#) getdims.c: V 1.3 3/4/81" */ ! 23: #include "bas.h" ! 24: ! 25: getdims(afield,arname,numdim,dimlist) ! 26: char afield[]; /* string to be scanned */ ! 27: char arname[]; /* array name */ ! 28: double *numdim; /* number of dimensions */ ! 29: double dimlist[]; /* list of dimensions */ ! 30: { ! 31: char expfld[40]; /* expression field */ ! 32: double evalx(); ! 33: double _int(); ! 34: double maxdim; ! 35: int intdim; /* integer form of number of dimensions */ ! 36: ! 37: register char *ptr; ! 38: register i; ! 39: ptr = afield; /* get pointer to command argument string */ ! 40: maxdim = MAXDIM; /* convert maxdim to double */ ! 41: i = 0; ! 42: while(*ptr != '(' && *ptr != '$' && *ptr != '\0' && i != 2) ! 43: { ! 44: arname[i++] = *ptr++; /* copy array symbol name */ ! 45: } ! 46: ! 47: arname[i] = '\0'; /* null terminate array name */ ! 48: ! 49: *ptr++; /* bump past '(' */ ! 50: /* ! 51: * While not at end of string ('\0') ! 52: * ! 53: * Each field is terminated by a ',' except the last which ! 54: * is terminated by a ')' immediatly followed by a '\0'. ! 55: * ! 56: * CALCULATE NUMBER AND VALUE OF EACH DIMENSION ! 57: */ ! 58: *numdim = 0.0; ! 59: i = 0; ! 60: ! 61: while(1) /* scan fields */ ! 62: { ! 63: expfld[i++] = *ptr++; /* copy expression */ ! 64: if(*ptr == ',' || (*ptr == ')' && *(ptr+1) == '\0')) ! 65: { ! 66: *ptr++; /* bump past field terminator */ ! 67: expfld[i] = '\0'; /* null terminate expr */ ! 68: i = 0; /* init expr field pointer */ ! 69: /* ! 70: * Evaluate expression and put as dimension ! 71: */ ! 72: intdim = *numdim; ! 73: dimlist[intdim] = _int(evalx(expfld)); ! 74: if(dimlist[intdim] <= 0.0) ! 75: { ! 76: error(inst.thing.linno, 28); /* NEG DIM */ ! 77: return(-1); ! 78: } ! 79: *numdim += 1.0; /* increment dimension count */ ! 80: if(*numdim > maxdim) ! 81: { ! 82: error(inst.thing.linno, 22); /* TOO MANY DIMS */ ! 83: return(-1); ! 84: } ! 85: } ! 86: if(*ptr == '\0') break; /* end of dimension statment */ ! 87: } ! 88: intdim++; /* bump past last dimension */ ! 89: dimlist[intdim] = 0.0; /* null terminate end of list */ ! 90: return(0); ! 91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.