/* rs - regrouping method version 1.0 grf used to establish levels in a flat file version 1.1 clh add subroutine to return column widths - iowidth_() version 1.11 clh fixed rsw to respect the re-ordering of variables version 2.0 Mar 18, 1996 clh to prepare for the major update distribution use minbufsize.h to determine size of buffers, from wjs. */ #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 #include "minbufsize.h" /* #define DEBUG */ #define TOKEN 40 #ifndef NVAR #define NVAR 250 #endif #ifndef COMMENTSIZE #define COMMENTSIZE 30*MINCOMMENTLINE #endif #ifndef VARNAMESIZE #define VARNAMESIZE MINVARNAMESIZE #endif #ifndef ATTRSIZE #define ATTRSIZE MINATTRSIZE #endif #ifndef DATUMSIZE #define DATUMSIZE MINDATUMSIZE #endif #ifndef INBUFSIZE #define INBUFSIZE 255 #endif int nlevels,nnames; int firstvar[6]; char names[NVAR][VARNAMESIZE]; int fldwidths[NVAR]; int namesize=VARNAMESIZE; char values[NVAR][DATUMSIZE]; char comp[NVAR][DATUMSIZE]; int valuesize=DATUMSIZE; int handle; int minlevelread; char comments[COMMENTSIZE]; /* #define TOK2 42 */ char ss[NVAR][DATUMSIZE]; int ns=0; int newlev[NVAR]; int newpntr[NVAR]; int newlpntr[11]; int maxoutlev; int ioreadrec_(level) int *level; { int clevel,i; if(*level == minlevelread) { minlevelread= *level+1; return 1; } else if(*level >minlevelread) return 0; while(1){ clevel=jdbreada_(&handle,values,&valuesize); /* printf("clevel %d\n",clevel); */ if(clevel<0){ minlevelread= -1; return 0; }; for(i=firstvar[clevel];i='0' && s[i][0]<='9' && s[i][1]==':'){ strcpy(ss[ns++],s[i]); s[i][0]='\0'; }; j=0; firstvar[j]=0; for(i=0;ij) firstvar[++j]=i; }; maxoutlev= -1; m=0; for(k=0;kmaxoutlev){maxoutlev=i;newlpntr[maxoutlev]=m;}; if(tmp[2]=='*'){ for(j=0;j