#include #include #include #include #ifdef IRIX #include #endif /* #define DEBUG 1 */ #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 #define NVALS 250 static int nnames=0; static int nrow=0; static char names[NVALS][40]; static int namelen=40; struct rowpntr { float *vals; struct rowpntr *next; } *rows; static int lpntr[11],maxlevel; double *yp; #ifdef IRIX static dnan nan; #else static double nan; #endif static int unit; typedef struct { long type; long mrows; long ncols; long imagf; long namlen; } Fmatrix; Fmatrix mat; #define nanflag 1 int getnames(s) char *s; { nnames= -NVALS; maxlevel=jdbopen_(&unit,s,names,&namelen,&nnames); return maxlevel; } int getdata() { static int i,lev,nr; struct rowpntr *rp,*rpo; float *v,*vo; rows=(struct rowpntr *)malloc(sizeof(rows)); rows->vals=(float *)malloc(nnames*sizeof(float)); rp=rows; v=rp->vals; nr=0; while((lev=jdbread_(&unit,v))>=0){ nr++; rp->next=(struct rowpntr *)malloc(sizeof(rows)); rp=rp->next; rp->vals=(float *)malloc(nnames*sizeof(float)); vo=v; v=rp->vals; for(i=0;inext=(struct rowpntr *)malloc(sizeof(rows)); rp=rp->next; rp->vals=(float *)malloc(nnames*sizeof(float)); for(i=0;ivals; for(i=0;ivals[k]; if(z[i] <= -9999) z[i]=nan; rp=rp->next; }; /* printf("\n"); */ mat.namlen=strlen(names[k])+1; fwrite(&mat,sizeof(Fmatrix),1,stdout); fwrite(names+k,sizeof(char),mat.namlen,stdout); fwrite(z,sizeof(double),nrow,stdout); } }