/* ******************************************************************* * * * Copyright (c) L-DGO/MIT/JGOFS * * * * * * File : map.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 #include #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; int ncrit; char comments[COMMSIZE]; int plon,plat; char lonsav[TOKEN],latsav[TOKEN]; int quadflg; docalc() { float x,y,alon,alat; if(isalpha(values[plon][0]) || isalpha(values[plat][0]))return; alon=atof(values[plon]); alat=atof(values[plat]); remap(alon,alat,&x,&y); sprintf(values[plon],"%7.4f",x); sprintf(values[plat],"%7.4f",y); if(quadflg){ strcpy(lonsav,values[plon]); strcpy(latsav,values[plat]); strcpy(values[plon],"nd"); strcpy(values[plat],"nd"); }; } newquad() { quadflg=1; } doinit(nparams,s) char *s[]; int *nparams; { int j; plon= -1; plat = -1; for(j=0;jncrit) ncrit=j; getinfo(); quadflg=0; } int ioreadrec_(level) int *level; { char tmp[80]; int i,clevel; /* printf("** level %d minlevelread %d \n",*level,minlevelread); */ if(quadflg){ minlevelread=ncrit; strcpy(values[plon],lonsav); strcpy(values[plat],latsav); quadflg=0; if (minlevelread < *level) return 0; else { minlevelread++; return 1;}; }; if(*level == minlevelread) { minlevelread= *level+1; return 1; } else if(*level >minlevelread) return 0; minlevelread=jdbreada_(&handle,values,&valuesize); 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[1024],*sp; int i,j,k,m,maxclev,nread; for (i=0;ifirstvar[nlevels])firstvar[++nlevels]=lev[i]; }; firstvar[nlevels+1]=nread; doinit(nparams,s); 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=atof(values[vpntr[*vn]]); else *f= -9999.0; } char *iovalstr_(vn,tmp) int *vn; char *tmp; { char *s; s=values[vpntr[*vn]]; s=s+strspn(s," "); strcpy(tmp,s); } char *ioname_(vn,s) int *vn; char *s; { strcpy(s,names[vpntr[*vn]]); } int iocommout_(s) char *s; { return 0; }