home *** CD-ROM | disk | FTP | other *** search
-
- /*-------------------------------------------------------------------------*
- * *
- * Prints formatted dump of data and index file. *
- * Example of reading data and index files (if you must). *
- * *
- * Compiles under Manx C 5.0d *
- * cc -hi allprecomp -pp -wnuq -o dumprmfdata.o dumprmfdata.c *
- * ln -o dumprmfdata dumprmfdata.o -lc *
- * *
- * Compile/link for Lattice 5.10 *
- * LC -L -Hinclude:allprecomp.q dumprmfdata *
- * (pre-compiled header file) *
- * *
- *-------------------------------------------------------------------------*/
-
-
- #include "avl.structs.h"
-
- long getnum( void );
- int dump_rmf_data_index( char *datafile, char *indexfile, long s, long e );
-
- main( int argc, char *argv[] )
- {
- char *oldi,*oldd;
- long oldnamelen,starting,ending;
-
- if( argc < 2 ) {
- printf("\nSyntax: %s 'filename' [startrecordnum] [endrecordnum]\n", \
- argv[0]);
- exit( 10 );
- }
-
- oldnamelen = strlen(argv[1]) + 50;
-
- oldi = AllocMem( oldnamelen, MEMF_CLEAR );
- oldd = AllocMem( oldnamelen, MEMF_CLEAR );
-
- strcpy(oldd,argv[1]);
- strcpy(oldi,argv[1]);
-
- strcat(oldi,".rmfindex");
-
- if( argc > 2 )
- starting = atoi(argv[2]);
- else {
- printf("\n\nEnter Starting Record: ");
- starting = getnum();
- }
-
- if( argc > 3 )
- ending = atoi(argv[3]);
- else {
- printf("\n\nEnter Ending Record: ");
- ending = getnum();
- }
-
- if( starting < 1 )
- starting = 1;
-
- if( !ending )
- ending = 99999999L;
-
- if( ending < starting )
- ending = starting;
-
- dump_rmf_data_index( oldi, oldd, starting, ending );
-
- FreeMem( oldi, oldnamelen);
- FreeMem( oldd, oldnamelen);
-
- }
-
- char numbuf[81];
- long getnum()
- {
- long num;
-
- gets(&numbuf[0]);
-
- num = atoi(&numbuf[0]);
-
- return(num);
-
- }
-
- int dump_rmf_data_index( char *indexfile, char *datafile, long start, long end )
- {
-
-
- struct IndexFile *ix;
- struct DiskIndex *dtnode;
- struct DataFileHeader *dfh;
- struct RecordHeader *rh;
- char *keybuf,*indxbuf;
- char *datablock,*datapointer;
- ULONG blocklen;
- ULONG recaddr,recnum;
- ULONG ifd,dfd;
- long err,total_keylen,keyindex;
- long blen,dlen,fieldnum;
- int ok,i,j;
-
-
- ifd = Open(indexfile,MODE_OLDFILE);
- if( !ifd ) {
- printf(" COULD NOT OPEN INDEX file %s\n",indexfile);
- return( FALSE );
- }
-
- dfd = Open(datafile,MODE_OLDFILE);
- if( !ifd ) {
- printf(" COULD NOT OPEN DATA file %s\n",datafile);
- Close( ifd );
- return( FALSE );
- }
-
- ix = AllocMem( sizeof(struct IndexFile), MEMF_CLEAR );
- dtnode = AllocMem( sizeof(struct DiskIndex), MEMF_CLEAR );
- dfh = AllocMem( sizeof(struct DataFileHeader), MEMF_CLEAR );
- rh = AllocMem( sizeof(struct RecordHeader), MEMF_CLEAR );
- keybuf = AllocMem( (MAXKEYLEN) + 1, MEMF_CLEAR );
- indxbuf = AllocMem( 5 * ((MAXKEYLEN) + 1), MEMF_CLEAR );
- if( !keybuf || !rh || !ix || !dtnode || !dfh || !indxbuf ) {
- printf("\nUnable to allocate memory\n\n");
- if( ix )
- FreeMem( ix, sizeof(struct IndexFile) );
- if( dtnode )
- FreeMem( dtnode, sizeof(struct DiskIndex) );
- if( dfh )
- FreeMem( dfh, sizeof(struct DataFileHeader) );
- if( rh )
- FreeMem( rh, sizeof(struct RecordHeader) );
- if( keybuf )
- FreeMem( keybuf, (MAXKEYLEN)+1 );
- if( indxbuf )
- FreeMem( indxbuf, (5 * ((MAXKEYLEN)+1)) );
- Close( dfd );
- Close( ifd );
- return( FALSE );
- }
-
- ok = Read(ifd,ix,sizeof(struct IndexFile));
-
- ok = Read(dfd,dfh,sizeof(struct DataFileHeader));
-
- recnum = 0;
- ok = TRUE;
- printf("\n\n");
- while( ok ) {
-
- datablock = NULL;
-
- /* fixed portion */
- err = Read(ifd,dtnode,sizeof(struct DI_Info));
- if( err <= 0 )
- break;
-
- total_keylen = 0;
- for( i=0; i < MAXINDICES; i++ )
- total_keylen = total_keylen + dtnode->di_info.keylen[i];
-
- /* read variable key portion */
- err = Read(ifd,&dtnode->keydata[0],total_keylen);
-
- if( err <= 0 )
- break;
-
- switch( dtnode->di_info.recstatus )
- {
- case 'D': /* dont care, plus has no record length, dont know
- how much to read in !
- */
- break;
-
- case 'A':
- recaddr = dtnode->di_info.recaddr;
-
- Seek(dfd,recaddr,OFFSET_BEGINNING);
- err = Read( dfd, rh, sizeof(struct RecordHeader));
- if( err <= 0 ) {
- printf("READ ERROR occured at block %d\n",recaddr);
- ok = FALSE;
- break;
- }
-
- blocklen = rh->blocklength;
- datablock = AllocMem( blocklen, MEMF_CLEAR );
- if( !datablock ) {
- printf(" Could not allocate mem for datablock\n");
- printf(" blocklength was %-d\n",blocklen);
- ok = FALSE;
- break;
- }
-
- err = Read( dfd, datablock, (blocklen));
- if( err <= 0 ) {
- printf("READ ERROR occured at block %d\n",recaddr);
- ok = FALSE;
- break;
- }
-
-
-
- ++recnum;
- if( recnum >= start && recnum <= end ) {
-
- printf(" RECORD #%-5d ",recnum);
-
- printf(" AT LOCATION %-5d ",recaddr);
-
- printf(" LENGTH %-5d ",rh->blocklength);
-
- printf(" FIELDS %-4d\n",rh->numberoffields);
-
- /* prime key as it is in index */
- printf(" INDXKEY- ");
-
- keyindex = 0;
-
- for( i = 0; i <= MAXINDEXNUM; i++ ) {
-
- for( j = 0; j < 10; j++ )
- *(keybuf+j) = ' ';
- *(keybuf+j) = NULL;
-
- for(j = 0; j < dtnode->di_info.keylen[i]; j++) {
- if( j < 9 )
- *(keybuf+j) = dtnode->keydata[keyindex];
- ++keyindex;
- }
-
- if( i == 1 )
- printf("\n ALTKEYS- ");
-
- printf("%-d:%s",i,keybuf);
-
- }
-
- printf("\n");
-
-
-
- /* prime key is first in block */
- /* prime key as it is in datafile */
- printf(" DATAKEY- %-10s\n ",datablock);
-
- /* skip over key values */
- blen = rh->dataoffset; /* strlen(datapointer); */
- datapointer = datablock + blen;
-
- fieldnum = 0;
- while( blen < rh->recordlength ) {
-
- dlen = strlen(datapointer);
- if( !dlen ) /* means field is null length */
- break; /* EOR trailer */
-
- ++fieldnum;
-
- if( fieldnum == 1 )
- printf("FIELDS - %03d:%-9.8s",fieldnum,datapointer);
- else
- printf("%03d:%-9.8s",fieldnum,datapointer);
- if( !(fieldnum % 5) )
- printf("\n ");
-
- blen = blen + dlen + 1;
-
- datapointer = (UBYTE *)((ULONG)datapointer + dlen + 1);
- }
- printf("\n\n\n");
-
- if( datablock )
- FreeMem( datablock,blocklen);
-
- break;
- }
- }
-
- }
-
-
- Close( dfd );
- Close( ifd );
-
- FreeMem( ix, sizeof(struct IndexFile) );
- FreeMem( dtnode, sizeof(struct DiskIndex) );
- FreeMem( dfh, sizeof(struct DataFileHeader) );
- FreeMem( rh, sizeof(struct RecordHeader) );
- FreeMem( keybuf, ((MAXKEYLEN) + 1) );
- FreeMem( indxbuf, (5 * ((MAXKEYLEN)+1)) );
-
- return( !err );
-
- }
-
-