/* wr_spe.c tl/93/5/18*/ /* write a gf2 spe file from a c program */ /* note wee need to play with the front and end */ /* record numbers that fortran is using */ /* see fortran manual page 138 (reference man) */ /* we write in this format so fortran fg2 pro- */ /* gam by radford can read the spectra!!! */ #include #include #include #include #define PMODE 0644 int wr_spe(fn, dim, sp) char fn[]; int *dim; float sp[]; { /* declarations */ int fp; int st, i, i1; int rec1, rec2; int exa; int siz; int dummy; char namesp[10]; int idim1, idim2, ired1, ired2; int numch; /* open file */ exa = creat(fn, PMODE); if (exa <= 0) { printf("\n** could not open spectrum file %s/n",fn); return (0); }; /* write fortran rec1 */ rec1=24; siz = write(exa, &rec1, 4); /* write spectrum name */ siz = write(exa, fn, 8); /* write dim variable */ idim1=*dim; siz = write(exa, &idim1, 4); idim2=1; siz = write(exa, &idim2, 4); ired1=1; siz = write(exa, &ired1, 4); ired2=1; siz = write(exa, &ired2, 4); /* write fortran rec2 */ rec2=24; siz = write(exa, &rec2, 4); /* write fortran rec1 */ rec1=*dim*4; siz = write(exa, &rec1, 4); /* write spectrum */ i1 = *dim * 4; siz = write(exa, (char *) sp, i1); if (i1 != siz) return (-1); /* write fortran rec2 */ rec2=*dim*4; siz = write(exa, &rec2, 4); /* done */ close(exa); return(0); }; /*=========================================================*/ /* rd_spe.c tl/93/5/18 */ /* read a gf2 spe file from a c program */ /* note we need to play with the front and end */ /* record numbers that fortran is using */ /* see fortran manual page 138 (reference man) */ #include #include #include #include int rd_spe(fn, dim, sp) char fn[]; int *dim; float sp[]; /* specify the file name of the spectrum in fn (input) */ /* as much as dim channels are read. The routine will */ /* return the actual number of channels read. The spec- */ /* trum is returned in sp */ { /* declarations */ int fp; int st, i, i1; int rec1, rec2; int exa; int siz; int dummy; char namesp[8]; int idim1, idim2, ired1, ired2; int numch; /* open file */ exa = open(fn, O_RDONLY, 0); if (exa <= 0) { /*printf("\n** could not open spe file <%s>", fn);*/ return (-1); }; /* read fortran rec1 */ siz = read(exa, &rec1, 4); if (siz!= 4) { close(exa); return(-1); }; /* read spectrum name */ siz = read(exa, namesp, 8); /* read dim variable */ siz = read(exa, &idim1, 4); siz = read(exa, &idim2, 4); siz = read(exa, &ired1, 4); siz = read(exa, &ired2, 4); /* read fortran rec2 */ siz = read(exa, &rec2, 4); /* find size of spectrum */ numch = idim1 * idim2; if (numch > *dim) numch = *dim; /* read fortran rec1 */ siz = read(exa, &rec1, 4); /* read spectrum */ i1 = numch * 4; siz = read(exa, sp, i1); if (i1 != siz) { close(exa); return(-1); }; *dim = siz / 4; /* read fortran rec2 */ siz = read(exa, &rec2, 4); /* done */ close(exa); return(0); };