/* ******************************************************************* * * * Copyright (c) L-DGO/MIT/JGOFS * * * * * * File : math.c * * * * Purpose : * * * * Version Number : 1.1 * * * * Revision History : * * * * Date Developer * * ---- --------- * * * * Sat Oct 17 1992 10.00 Glenn Flierl * * * * * ******************************************************************* */ #if HP || IBM #define jdbopen_ jdbopen #define jdbreada_ jdbreada #define jdbread_ jdbread #define jdbclose_ jdbclose #define jdbcomments_ jdbcomments #define jdblevel_ jdblevel #define jdbattributes_ jdbattributes #endif #include #include double atof(); #include /* #define DEBUG */ #define TOKEN 40 #define NVAR 150 #define COMMSIZE 2048 int nlevels; int firstvar[10]; char names[NVAR][TOKEN]; int namesize=TOKEN; char values[NVAR][TOKEN]; int valuesize=TOKEN; int lev[NVAR],vpntr[NVAR]; int handle; int minlevelread; char pstrings[10][255]; int npstrings; int ncrit; char comments[COMMSIZE]; docalc() { int i; for(i=0;i"); if(sp){ *sp='='; *(sp+1)=0; j=strlen(tmp); for(k=0;k 127){ j=lev[(int)(*sp)-128]; if(j>k)k=j;}; sp++; if(*sp == ',' || *sp == '\0'){ lev[m-128]=k; if(k> ncrit) ncrit=k; }; #else if(*sp < 0){ j=lev[(int)(*sp)+128]; if(j>k)k=j;}; sp++; if(*sp == ',' || *sp == '\0'){ lev[m+128]=k; if(k> ncrit) ncrit=k; }; #endif }; }; } int ioreadrec_(level) int *level; { char tmp[80]; int i,clevel; /* printf("** level %d minlevelread %d \n",*level,minlevelread); */ if(*level == minlevelread) { minlevelread= *level+1; return 1; } else if(*level >minlevelread) return 0; do { minlevelread=jdbreada_(&handle,values,&valuesize); } while (minlevelread > *level); if(minlevelread<=ncrit) docalc(); if (minlevelread < *level) return 0; else { minlevelread++; return 1; }; } ioclose_() { jdbclose_(&handle); } int ioopen_(s,nparams,ntotal) char *s[]; int *nparams; int *ntotal; { char tmp[255],*sp; int i,j,k,m,maxclev,nread; strcpy(tmp,s[0]); npstrings=0; doinit0(nparams,s,tmp); for (i=0;ifirstvar[nlevels])firstvar[++nlevels]=lev[i]; }; firstvar[nlevels+1]=nread; ncrit=0; doinit1(); k=0; *ntotal=firstvar[nlevels+1]; for(i=0;i<=nlevels;i++) for(j=0;j< *ntotal;j++)if(lev[j]==i)vpntr[k++]=j; minlevelread = nlevels+1; return nlevels; } int iovarlevel_(vn) int *vn; { return lev[vpntr[*vn]]; } ioattrout_(vn,str) int *vn; char *str; { return 0; } iovalreal_(vn,f) int *vn; float *f; { if(strspn(values[vpntr[*vn]],"0123456789.+-")) *f=(double)atof(values[vpntr[*vn]]); else *f= -9999.0; } iovalstr_(vn,tmp) int *vn; char *tmp; { char *s; s=values[vpntr[*vn]]; s=s+strspn(s," "); strcpy(tmp,s); } ioname_(vn,s) int *vn; char *s; { strcpy(s,names[vpntr[*vn]]); } int iocommout_(str) char *str; { char *at; if (comments[0]){ at=strchr(comments,'\n'); if(at){ *at = '\0'; strcpy(str,comments); strcpy(comments,at+1); } else { strcpy(str,comments); comments[0]='\0'; }; return 1; } else return 0; }