struct OldRawFp *OldRawOpen(char *rawfile,char *inxfile) { int rawfd=0; int inxfd=0; rawfd=open(rawfile,O_RDONLY); if (rawfd==-1) return NULL; return OldRawOpenFd(rawfd,inxfd); }
int32 OldRawIDLOpen(int argc,char *argv[]) { struct OldRawIDLFp *idlrawfp; struct OldRawFp *rawfp; IDL_FILE_STAT stat; FILE *fp; int unit; int s; unit = *( (int32 *) argv[0]); /* Make sure that the "STDIO" keyword was used to * open the file in IDL. */ s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_STDIO); if (s==FALSE) return -1; /* Get information about the file */ IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) return -1; fflush(fp); rawfp=OldRawOpenFd(fileno(fp),0); idlrawfp=(struct OldRawIDLFp *) argv[1]; idlrawfp->rawunit=unit; idlrawfp->inxunit=0; OldRawRawFpToIDL(rawfp,idlrawfp); free(rawfp); return s; }
static IDL_VPTR IDLOldRawOpen(int argc,IDL_VPTR *argv) { IDL_VPTR vrawfp; struct OldRawIDLFp *irawfp; struct OldRawFp *rawfp; void *s; int st; static IDL_MEMINT hdim[]={1,80}; static IDL_MEMINT ddim[]={1,32}; static IDL_MEMINT edim[]={1,256}; static IDL_STRUCT_TAG_DEF trawfp[]={ {"RAWUNIT",0,(void *) IDL_TYP_LONG}, {"INXUNIT",0,(void *) IDL_TYP_LONG}, {"RAW_RECL",0,(void *) IDL_TYP_LONG}, {"INX_RECL",0,(void *) IDL_TYP_LONG}, {"BLEN",0,(void *) IDL_TYP_LONG}, {"INX_SREC",0,(void *) IDL_TYP_LONG}, {"INX_EREC",0,(void *) IDL_TYP_LONG}, {"CTIME",0,(void *) IDL_TYP_DOUBLE}, {"STIME",0,(void *) IDL_TYP_DOUBLE}, {"ETIME",0,(void *) IDL_TYP_DOUBLE}, {"TIME",0,(void *) IDL_TYP_LONG}, {"HEADER",hdim,(void *) IDL_TYP_BYTE}, {"DATE",ddim,(void *) IDL_TYP_BYTE}, {"EXTRA",edim,(void *) IDL_TYP_BYTE}, {"MAJOR_REV",0,(void *) IDL_TYP_BYTE}, {"MINOR_REV",0,(void *) IDL_TYP_BYTE}, {"RAWREAD",0,(void *) IDL_TYP_LONG}, {"BNUM",0,(void *) IDL_TYP_LONG}, 0}; static IDL_MEMINT ilDims[IDL_MAX_ARRAY_DIM]; IDL_VARIABLE unit; IDL_VPTR fargv[2]; IDL_FILE_STAT stat; int ffd=-1,ifd=-1; IDL_ENSURE_STRING(argv[0]); if (argc>1) IDL_ENSURE_STRING(argv[1]); s=IDL_MakeStruct("RAWFP",trawfp); ilDims[0]=1; irawfp=(struct OldRawIDLFp *) IDL_MakeTempStruct(s,1,ilDims,&vrawfp,TRUE); unit.type=IDL_TYP_LONG; unit.flags=0; fargv[0]=&unit; fargv[1]=argv[0]; IDL_FileGetUnit(1,fargv); IDL_FileOpen(2,fargv,NULL,IDL_OPEN_R,IDL_F_STDIO,1,0); irawfp->rawunit=IDL_LongScalar(&unit); irawfp->inxunit=-1; st=IDL_FileEnsureStatus(IDL_MSG_RET,irawfp->rawunit,IDL_EFS_USER); if (st==FALSE) { st=0; IDL_Deltmp(vrawfp); return (IDL_GettmpLong(st)); } if (argc>1) { fargv[1]=argv[1]; IDL_FileGetUnit(1,fargv); IDL_FileOpen(2,fargv,NULL,IDL_OPEN_R,IDL_F_STDIO,1,0); irawfp->inxunit=IDL_LongScalar(&unit); st=IDL_FileEnsureStatus(IDL_MSG_RET,irawfp->rawunit,IDL_EFS_USER); if (st==FALSE) { /* free unit for index but continue */ IDL_FileFreeUnit(1,argv); irawfp->inxunit=-1; } } IDL_FileStat(irawfp->rawunit,&stat); ffd=fileno(stat.fptr); if (irawfp->inxunit !=-1) { IDL_FileStat(irawfp->inxunit,&stat); ifd=fileno(stat.fptr); } rawfp=OldRawOpenFd(ffd,ifd); OldRawRawFpToIDL(rawfp,irawfp); free(rawfp); return vrawfp; }