#include /* Data Base for New objects integer file structure */ typedef struct idatabase_no { short mag; /* magnitude */ short magerr; /* dophot error */ unsigned long ofs; /* offset to next occurence in DBN */ unsigned short frameno; /* frame no in DBI */ unsigned char type; /* dophot object type */ } IDBN; #define IDBNSIZE 11 FILE *inf, *outf; char fn[80], tfn[]="#fix_idn.tmp"; IDBN dbuf; int nrec=0, iread; void my_exit(code) int code; { fclose(inf); fclose(outf); unlink(tfn); exit(code); } main(argc,argv) int argc; char **argv; { if ( argc != 3 ) { fprintf(stderr,"usage: %s field filter\n",argv[0]); exit(1); } strcpy(fn,argv[1]); strcat(fn,"_"); strcat(fn,argv[2]); strcat(fn,".idn"); inf=fopen(fn,"r"); if ( inf==NULL ) { fprintf(stderr,"error opening file %s\n",fn); exit(2); } outf=fopen(tfn,"w"); if ( outf==NULL ) { fprintf(stderr,"error opening file %s\n",tfn); exit(2); } while ( (iread=fread(&dbuf,1,IDBNSIZE,inf)) == IDBNSIZE ) { nrec++; if ( dbuf.ofs % IDBNSIZE ) { fprintf(stderr,"error: byte offset in %d record is not %d a multiple.\n", nrec,IDBNSIZE); my_exit(3); } dbuf.ofs/=IDBNSIZE; if ( fwrite(&dbuf,1,IDBNSIZE,outf) != IDBNSIZE ) { fprintf(stderr,"error writing temporary file.\n"); my_exit(4); } } if ( iread ) { fprintf(stderr,"illegal size of %s\n",fn); exit(6); } fclose(inf); fclose(outf); if ( rename(tfn,fn) ) { fprintf(stderr,"error renaming temporary file to %s\n",fn); exit(5); } return 0; }