static IDL_VPTR IDLOldRawWriteHeader(int argc,IDL_VPTR *argv) { int s=0; IDL_LONG unit=0; IDL_FILE_STAT stat; struct RadarIDLParm *iprm=NULL; struct RawIDLData *iraw=NULL; FILE *fp; char vstring[256]; IDL_ENSURE_SCALAR(argv[0]); IDL_ENSURE_STRUCTURE(argv[1]); IDL_ENSURE_STRUCTURE(argv[2]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } iprm=(struct RadarIDLParm *) argv[1]->value.s.arr->data; iraw=(struct RawIDLData *) argv[2]->value.s.arr->data; sprintf(vstring,"%d.%.3d",(int) iraw->revision.major, (int) iraw->revision.minor); s=OldRawHeaderFwrite(fp,"rawwrite",vstring,iraw->thr,"IDL output"); return (IDL_GettmpLong(s)); }
/* err = MG_NET_RECVVAR(socket, variable) Reads an IDL variable from the socket in the form written by MG_NET_SENDVAR. The complete variable is reconstructed. See MG_NET_SENDVAR for more details. */ static IDL_VPTR IDL_CDECL mg_net_recvvar(int argc, IDL_VPTR argv[], char *argk) { IDL_LONG i, iRet; IDL_LONG swab = 0; i_var var; IDL_VPTR vpTmp; char *pbuffer; i = IDL_LongScalar(argv[0]); if ((i < 0) || (i >= MAX_SOCKETS)) return (IDL_GettmpLong(-1)); if (net_list[i].iState != NET_IO) return (IDL_GettmpLong(-1)); IDL_EXCLUDE_EXPR(argv[1]); /* read the header */ iRet = recv_packet(net_list[i].socket, &var,sizeof(i_var)); if (iRet == -1) return (IDL_GettmpLong(-1)); if (var.token == SWAPTOKEN) { mg_byteswap(&var, sizeof(i_var), sizeof(IDL_LONG)); swab = 1; } if (var.token != TOKEN) return (IDL_GettmpLong(-1)); /* allocate the variable */ if (var.type == IDL_TYP_STRING) { vpTmp = IDL_StrToSTRING(""); IDL_StrEnsureLength(&(vpTmp->value.str), var.len); vpTmp->value.str.slen = var.len - 1; pbuffer = vpTmp->value.str.s; memset(pbuffer, 0x20, var.len-1); pbuffer[var.len] = '\0'; IDL_VarCopy(vpTmp, argv[1]); } else if (var.ndims != 0) { pbuffer = IDL_MakeTempArray(var.type, var.ndims, var.dims, IDL_BARR_INI_NOP, &vpTmp); IDL_VarCopy(vpTmp, argv[1]); } else { vpTmp = IDL_GettmpLong(0); IDL_VarCopy(vpTmp, argv[1]); IDL_StoreScalarZero(argv[1], var.type); pbuffer = &(argv[1]->value.c); } /* read the data */ iRet = recv_packet(net_list[i].socket, pbuffer, var.len); if (iRet == -1) return (IDL_GettmpLong(-1)); if (swab) { int swapsize = var.len / var.nelts; if ((var.type == IDL_TYP_COMPLEX) || (var.type == IDL_TYP_DCOMPLEX)) { swapsize /= 2; } mg_byteswap(pbuffer, var.len, swapsize); } return (IDL_GettmpLong(1)); }
/* nbytes = MG_NET_RECV(socket, variable [, MAXIMUM_BYTES=b]) Reads the raw data available on the socket and returns a BYTE array in variable. The maximum number of bytes to read can be specified by the MAXIMUM_BYTES keyword. The default is to read all the data available on the socket. Note: no byteswapping is performed. */ static IDL_VPTR IDL_CDECL mg_net_recv(int argc, IDL_VPTR argv[], char *argk) { IDL_LONG i, iRet, err; int len; IDL_VPTR vpPlainArgs[2], vpTmp; char *pbuffer; static IDL_LONG iMax; static IDL_KW_PAR kw_pars[] = { IDL_KW_FAST_SCAN, { "MAXIMUM_BYTES", IDL_TYP_LONG, 1, IDL_KW_ZERO, 0, IDL_CHARA(iMax) }, { NULL } }; IDL_KWCleanup(IDL_KW_MARK); IDL_KWGetParams(argc, argv, argk, kw_pars, vpPlainArgs, 1); i = IDL_LongScalar(vpPlainArgs[0]); if ((i < 0) || (i >= MAX_SOCKETS)) return (IDL_GettmpLong(-1)); if (net_list[i].iState != NET_IO) return (IDL_GettmpLong(-1)); IDL_EXCLUDE_EXPR(vpPlainArgs[1]); err = IOCTL(net_list[i].socket, FIONREAD, &len); if (err != 0) { iRet = -1; goto err; } if (iMax) len = IDL_MIN(iMax, len); pbuffer = (char *) IDL_MakeTempVector(IDL_TYP_BYTE, len, IDL_ARR_INI_NOP, &vpTmp); IDL_VarCopy(vpTmp, vpPlainArgs[1]); iRet = recv(net_list[i].socket, pbuffer, len, 0); err: IDL_KWCleanup(IDL_KW_CLEAN); return(IDL_GettmpLong(iRet)); }
static IDL_VPTR IDLOldCnvMapWrite(int argc,IDL_VPTR *argv) { int s=0; IDL_LONG unit=0; IDL_FILE_STAT stat; struct CnvMapData *map=NULL; struct GridData *grd=NULL; struct CnvMapIDLPrm *iprm=NULL; struct GridIDLStVec *istvec=NULL; struct GridIDLGVec *igvec=NULL; struct GridIDLGVec *imvec=NULL; struct CnvMapIDLBnd *ibnd=NULL; double *icoef=NULL; FILE *fp; IDL_ENSURE_SCALAR(argv[0]); IDL_ENSURE_STRUCTURE(argv[1]); IDL_ENSURE_ARRAY(argv[2]); IDL_ENSURE_ARRAY(argv[3]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); IDL_EXCLUDE_EXPR(argv[3]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } iprm=(struct CnvMapIDLPrm *) argv[1]->value.s.arr->data; if (argv[2]->type==IDL_TYP_STRUCT) istvec=(struct GridIDLStVec *) argv[2]->value.s.arr->data; if (argv[3]->type==IDL_TYP_STRUCT) igvec=(struct GridIDLGVec *) argv[3]->value.s.arr->data; if (argv[4]->type==IDL_TYP_STRUCT) imvec=(struct GridIDLGVec *) argv[4]->value.s.arr->data; if (argv[5]->type==IDL_TYP_DOUBLE) icoef=(double *) argv[5]->value.s.arr->data; if (argv[6]->type==IDL_TYP_STRUCT) ibnd=(struct CnvMapIDLBnd *) argv[6]->value.s.arr->data; map=CnvMapMake(); grd=GridMake(); IDLCopyCnvMapPrmFromIDL(iprm,map,grd); if (istvec !=NULL) IDLCopyGridStVecFromIDL(istvec,iprm->stnum, argv[2]->value.s.arr->elt_len,grd); else grd->stnum=0; if (igvec !=NULL) IDLCopyGridGVecFromIDL(igvec,iprm->vcnum, argv[3]->value.s.arr->elt_len,grd); else grd->vcnum=0; if (imvec !=NULL) IDLCopyCnvMapGVecFromIDL(imvec, iprm->modnum,argv[4]->value.s.arr->elt_len,map); else map->num_model=0; if (ibnd !=NULL) IDLCopyCnvMapBndFromIDL(ibnd, iprm->bndnum,argv[6]->value.s.arr->elt_len,map); else map->num_bnd=0; if (icoef !=NULL) { int n=0; map->coef=malloc(sizeof(double)*map->num_coef*4); for (n=0;n<map->num_coef;n++) { map->coef[4*n]=icoef[n]; map->coef[4*n+1]= icoef[map->num_coef+n]; map->coef[4*n+2]=icoef[2*map->num_coef+n]; map->coef[4*n+3]=icoef[3*map->num_coef+n]; } } else map->num_coef=0; s=OldCnvMapFwrite(fp,map,grd); CnvMapFree(map); GridFree(grd); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldCnvMapLoadInx(int argc,IDL_VPTR *argv) { int s=0,n; IDL_VPTR vinx=NULL; IDL_LONG unit=0; IDL_FILE_STAT stat; FILE *fp=NULL; struct OldCnvMapIDLInx *ifptr=NULL; struct RfileIndex *finx=NULL; IDL_ENSURE_SCALAR(argv[0]); IDL_EXCLUDE_EXPR(argv[1]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } finx=RfileLoadIndex(fp); if (finx==NULL) { s=-1; return (IDL_GettmpLong(s)); } ifptr=IDLMakeOldCnvMapInx(finx->num,&vinx); for (n=0;n<finx->num;n++) { ifptr[n].st_time=finx->time.start[n]; ifptr[n].ed_time=finx->time.end[n]; ifptr[n].offset=finx->offset[n]; } free(finx->time.start); free(finx->time.end); free(finx->offset); free(finx); IDL_VarCopy(vinx,argv[1]); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldCnvMapRead(int argc,IDL_VPTR *argv) { int s=0; IDL_VPTR vprm=NULL,vstvec=NULL,vgvec=NULL,vmvec=NULL,vcoef=NULL,vbnd=NULL; IDL_LONG unit=0; IDL_FILE_STAT stat; struct CnvMapData *map=NULL; struct GridData *grd=NULL; struct CnvMapIDLPrm *iprm=NULL; struct GridIDLStVec *istvec=NULL; struct GridIDLGVec *igvec=NULL; struct GridIDLGVec *imvec=NULL; struct CnvMapIDLBnd *ibnd=NULL; double *icoef=NULL; IDL_MEMINT cdim[2]; FILE *fp=NULL; IDL_ENSURE_SCALAR(argv[0]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); IDL_EXCLUDE_EXPR(argv[4]); IDL_EXCLUDE_EXPR(argv[5]); IDL_EXCLUDE_EXPR(argv[6]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } map=CnvMapMake(); grd=GridMake(); s=OldCnvMapFread(fp,map,grd); if (s==-1) { CnvMapFree(map); GridFree(grd); return (IDL_GettmpLong(s)); } iprm=IDLMakeCnvMapPrm(&vprm); if (grd->stnum !=0) istvec=IDLMakeGridStVec(grd->stnum,&vstvec); if (grd->vcnum !=0) igvec=IDLMakeGridGVec(grd->vcnum,&vgvec); if (map->num_model !=0) imvec=IDLMakeGridGVec(map->num_model,&vmvec); if (map->num_bnd !=0) ibnd=IDLMakeCnvMapBnd(map->num_bnd,&vbnd); if (map->num_coef !=0) { int n=0; cdim[1]=4; cdim[0]=map->num_coef; icoef=(double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,2,cdim,IDL_ARR_INI_ZERO,&vcoef); for (n=0;n<map->num_coef;n++) { icoef[n]=map->coef[4*n]; icoef[map->num_coef+n]=map->coef[4*n+1]; icoef[2*map->num_coef+n]=map->coef[4*n+2]; icoef[3*map->num_coef+n]=map->coef[4*n+3]; } } /* copy the data here */ IDLCopyCnvMapPrmToIDL(map,grd,iprm); if (istvec !=NULL) IDLCopyGridStVecToIDL(grd,grd->stnum, vstvec->value.s.arr->elt_len,istvec); if (igvec !=NULL) IDLCopyGridGVecToIDL(grd,grd->vcnum, vgvec->value.s.arr->elt_len,igvec); if (imvec !=NULL) IDLCopyCnvMapGVecToIDL(map,map->num_model, vmvec->value.s.arr->elt_len,imvec); if (ibnd !=NULL) IDLCopyCnvMapBndToIDL(map,map->num_bnd, vbnd->value.s.arr->elt_len,ibnd); CnvMapFree(map); GridFree(grd); IDL_VarCopy(vprm,argv[1]); if (vstvec !=NULL) IDL_VarCopy(vstvec,argv[2]); if (vgvec !=NULL) IDL_VarCopy(vgvec,argv[3]); if (vmvec !=NULL) IDL_VarCopy(vmvec,argv[4]); if (vcoef !=NULL) IDL_VarCopy(vcoef,argv[5]); if (vbnd !=NULL) IDL_VarCopy(vbnd,argv[6]); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldRawRead(int argc,IDL_VPTR *argv) { int s=0; IDL_VPTR vprm=NULL,vraw=NULL;; IDL_FILE_STAT stat; struct OldRawIDLFp *irawfp; struct OldRawFp rawfp; struct RadarIDLParm *iprm=NULL; struct RawIDLData *iraw=NULL; struct RadarParm *prm=NULL; struct RawData *raw=NULL; FILE *ffp=NULL,*ifp=NULL; IDL_ENSURE_STRUCTURE(argv[0]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); irawfp=(struct OldRawIDLFp *) argv[0]->value.s.arr->data; s=IDL_FileEnsureStatus(IDL_MSG_RET,irawfp->rawunit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } IDL_FileFlushUnit(irawfp->rawunit); IDL_FileStat(irawfp->rawunit,&stat); ffp=stat.fptr; if (ffp==NULL) { s=-1; return (IDL_GettmpLong(s)); } if (irawfp->inxunit !=-1) { IDL_FileFlushUnit(irawfp->inxunit); IDL_FileStat(irawfp->inxunit,&stat); ifp=stat.fptr; } if (ifp !=NULL) fflush(ifp); rawfp.rawfp=fileno(ffp); if (ifp !=NULL) rawfp.inxfp=fileno(ifp); else rawfp.inxfp=-1; OldRawIDLToRawFp(irawfp,&rawfp); prm=RadarParmMake(); raw=RawMake(); s=OldRawRead(&rawfp,prm,raw); OldRawRawFpToIDL(&rawfp,irawfp); if (s==-1) { RadarParmFree(prm); RawFree(raw); return (IDL_GettmpLong(s)); } iprm=IDLMakeRadarParm(&vprm); iraw=IDLMakeRawData(&vraw); /* copy data here */ IDLCopyRadarParmToIDL(prm,iprm); IDLCopyRawDataToIDL(prm->nrang,prm->mplgs,prm->xcf,raw,iraw); RadarParmFree(prm); RawFree(raw); IDL_VarCopy(vprm,argv[1]); IDL_VarCopy(vraw,argv[2]); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldRawWrite(int argc,IDL_VPTR *argv) { int s=0; IDL_LONG unit=0,recnum; IDL_FILE_STAT stat; struct RadarIDLParm *iprm=NULL; struct RawIDLData *iraw=NULL; struct RadarParm *prm=NULL; struct RawData *raw=NULL; FILE *fp; IDL_ENSURE_SCALAR(argv[0]); IDL_ENSURE_STRUCTURE(argv[1]); IDL_ENSURE_STRUCTURE(argv[2]); IDL_ENSURE_SCALAR(argv[3]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); unit=IDL_LongScalar(argv[0]); recnum=IDL_LongScalar(argv[3]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } iprm=(struct RadarIDLParm *) argv[1]->value.s.arr->data; iraw=(struct RawIDLData *) argv[2]->value.s.arr->data; prm=RadarParmMake(); raw=RawMake(); IDLCopyRadarParmFromIDL(iprm,prm); IDLCopyRawDataFromIDL(prm->nrang,prm->mplgs,prm->xcf,iraw,raw); s=OldRawFwrite(fp,"rawwrite",prm,raw,recnum,NULL); RadarParmFree(prm); RawFree(raw); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldGridWrite(int argc,IDL_VPTR *argv) { int s=0; IDL_LONG unit=0; IDL_FILE_STAT stat; struct GridData *grd=NULL; struct GridIDLPrm *iprm=NULL; struct GridIDLStVec *istvec=NULL; struct GridIDLGVec *igvec=NULL; FILE *fp; IDL_ENSURE_SCALAR(argv[0]); IDL_ENSURE_STRUCTURE(argv[1]); IDL_ENSURE_ARRAY(argv[2]); IDL_ENSURE_ARRAY(argv[3]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); IDL_EXCLUDE_EXPR(argv[3]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } iprm=(struct GridIDLPrm *) argv[1]->value.s.arr->data; if (argv[2]->type==IDL_TYP_STRUCT) istvec=(struct GridIDLStVec *) argv[2]->value.s.arr->data; if (argv[3]->type==IDL_TYP_STRUCT) igvec=(struct GridIDLGVec *) argv[3]->value.s.arr->data; grd=GridMake(); IDLCopyGridPrmFromIDL(iprm,grd); if (istvec !=NULL) IDLCopyGridStVecFromIDL(istvec,iprm->stnum, argv[2]->value.s.arr->elt_len,grd); else grd->stnum=0; if (igvec !=NULL) IDLCopyGridGVecFromIDL(igvec,iprm->vcnum, argv[3]->value.s.arr->elt_len,grd); else grd->vcnum=0; s=OldGridFwrite(fp,grd); GridFree(grd); return (IDL_GettmpLong(s)); }
static IDL_VPTR IDLOldGridRead(int argc,IDL_VPTR *argv) { int s=0; IDL_VPTR vprm=NULL,vstvec=NULL,vgvec=NULL; IDL_LONG unit=0; IDL_FILE_STAT stat; struct GridData *grd=NULL; struct GridIDLPrm *iprm=NULL; struct GridIDLStVec *istvec=NULL; struct GridIDLGVec *igvec=NULL; FILE *fp=NULL; IDL_ENSURE_SCALAR(argv[0]); IDL_EXCLUDE_EXPR(argv[1]); IDL_EXCLUDE_EXPR(argv[2]); IDL_EXCLUDE_EXPR(argv[3]); unit=IDL_LongScalar(argv[0]); s=IDL_FileEnsureStatus(IDL_MSG_RET,unit,IDL_EFS_USER); if (s==FALSE) { s=-1; return (IDL_GettmpLong(s)); } /* Get information about the file */ IDL_FileFlushUnit(unit); IDL_FileStat(unit,&stat); /* Find the file pointer */ fp=stat.fptr; if (fp==NULL) { s=-1; return (IDL_GettmpLong(s)); } grd=GridMake(); s=OldGridFread(fp,grd); if (s==-1) { GridFree(grd); return (IDL_GettmpLong(s)); } iprm=IDLMakeGridPrm(&vprm); if (grd->stnum !=0) istvec=IDLMakeGridStVec(grd->stnum,&vstvec); if (grd->vcnum !=0) igvec=IDLMakeGridGVec(grd->vcnum,&vgvec); /* copy the data here */ IDLCopyGridPrmToIDL(grd,iprm); if (istvec !=NULL) IDLCopyGridStVecToIDL(grd,grd->stnum, vstvec->value.s.arr->elt_len,istvec); if (igvec !=NULL) IDLCopyGridGVecToIDL(grd,grd->vcnum, vgvec->value.s.arr->elt_len,igvec); GridFree(grd); IDL_VarCopy(vprm,argv[1]); if (vstvec !=NULL) IDL_VarCopy(vstvec,argv[2]); if (vgvec !=NULL) IDL_VarCopy(vgvec,argv[3]); return (IDL_GettmpLong(s)); }