/* 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)); }
void pgsql_copy_info(field_info *fi) { int i; /* For storing field info */ IDL_VPTR fieldNamesVptr; IDL_STRING *namesPtr; IDL_VPTR fieldTypesVptr; IDL_LONG *typesPtr; IDL_VPTR fieldLengthsVptr; IDL_LONG *lengthsPtr; if (kw.field_names_there) { namesPtr = (IDL_STRING *) IDL_MakeTempVector(IDL_TYP_STRING, fi->nFields, IDL_ARR_INI_ZERO, &fieldNamesVptr); for (i=0; i<fi->nFields; i++) IDL_StrStore(&namesPtr[i], fi->field_names[i]); IDL_VarCopy(fieldNamesVptr, kw.field_names); } if (kw.field_types_there) { typesPtr = (IDL_LONG *) IDL_MakeTempVector(IDL_TYP_ULONG, fi->nFields, IDL_ARR_INI_ZERO, &fieldTypesVptr); for (i=0; i<fi->nFields; i++) typesPtr[i] = fi->field_types[i]; IDL_VarCopy(fieldTypesVptr, kw.field_types); } if (kw.field_lengths_there) { lengthsPtr = (IDL_LONG *) IDL_MakeTempVector(IDL_TYP_LONG, fi->nFields, IDL_ARR_INI_ZERO, &fieldLengthsVptr); for (i=0; i<fi->nFields; i++) lengthsPtr[i] = fi->field_lengths[i]; IDL_VarCopy(fieldLengthsVptr, kw.field_lengths); } if (kw.nrows_there) kw.nrows->value.ul64 = fi->nTuples; }
/* 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)); }
/* err = MG_NET_QUERY(socket [, AVAILABLE_BYTES=a] [, IS_LISTENER=l] [, LOCAL_HOST=lh] [, LOCAL_PORT=lp] [, REMOTE_HOST=rh] [, REMOTE_PORT=rp]) Returns various information about the socket in question. AVAILABLE_BYTES: number of bytes available for reading. REMOTE_HOST: host number of the remote host the socket is connected to. IS_LISTENER: true if the socket was created using MG_NET_CREATEPORT() */ static IDL_VPTR IDL_CDECL mg_net_query(int argc, IDL_VPTR argv[], char *argk) { IDL_LONG i; IDL_VPTR vpPlainArgs[1],vpTmp; struct sockaddr_in peer_addr; int addr_len, err; IDL_LONG iRet = 0; static IDL_VPTR vpRHost, vpAvail, vpListen, vpLPort, vpRPort, vpLHost; static IDL_KW_PAR kw_pars[] = { IDL_KW_FAST_SCAN, { "AVAILABLE_BYTES", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpAvail) }, { "IS_LISTENER", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpListen) }, { "LOCAL_HOST", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpLHost) }, { "LOCAL_PORT", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpLPort) }, { "REMOTE_HOST", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpRHost) }, { "REMOTE_PORT", IDL_TYP_UNDEF, 1, IDL_KW_OUT | IDL_KW_ZERO, 0, IDL_CHARA(vpRPort) }, { 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)) { IDL_KWCleanup(IDL_KW_CLEAN); return(IDL_GettmpLong(-1)); } if (vpRHost || vpRPort) { addr_len = sizeof(struct sockaddr_in); err = getpeername(net_list[i].socket, (struct sockaddr *) &peer_addr, &addr_len); if (err != 0) { iRet = -1; } else { if (vpRHost) { vpTmp = IDL_GettmpULong(peer_addr.sin_addr.s_addr); IDL_VarCopy(vpTmp, vpRHost); } if (vpRPort) { vpTmp = IDL_GettmpLong((long) ntohs(peer_addr.sin_port)); IDL_VarCopy(vpTmp, vpRPort); } } } if (vpAvail) { int len; err = IOCTL(net_list[i].socket, FIONREAD, &len); if (err != 0) { iRet = -1; } else { vpTmp = IDL_GettmpULong(len); IDL_VarCopy(vpTmp, vpAvail); } } if (vpListen) { vpTmp = IDL_GettmpLong(net_list[i].iState == NET_LISTEN); IDL_VarCopy(vpTmp, vpListen); } if (vpLPort || vpLHost) { addr_len = sizeof(struct sockaddr_in); err = getsockname(net_list[i].socket, (struct sockaddr *) &peer_addr, &addr_len); if (err != 0) { iRet = -1; } else { if (vpLHost) { vpTmp = IDL_GettmpULong(peer_addr.sin_addr.s_addr); IDL_VarCopy(vpTmp, vpLHost); } if (vpLPort) { vpTmp = IDL_GettmpLong((long) ntohs(peer_addr.sin_port)); IDL_VarCopy(vpTmp, vpLPort); } } } IDL_KWCleanup(IDL_KW_CLEAN); return(IDL_GettmpLong(iRet)); }
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 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)); }
static void copyStatsFromAtlas(ATLAS_IMAGE *ai) { IDL_VPTR row0_tmp, col0_tmp, drow_tmp, dcol_tmp; short *row0_data, *col0_data, *drow_data, *dcol_data; IDL_ARRAY_DIM dim; int i; dim[0] = NBANDS; /* row0 */ if (kw.row0_there) { row0_data = (short *) IDL_MakeTempArray(IDL_TYP_INT, 1, dim, IDL_ARR_INI_NOP, &row0_tmp); for (i=0; i<NBANDS; ++i) row0_data[i] = ai->master_mask->rmin + ai->drow[i]; /* copy into output. This just copied pointers, its fast */ IDL_VarCopy(row0_tmp, kw.row0); } /* col0 */ if (kw.col0_there) { col0_data = (short *) IDL_MakeTempArray(IDL_TYP_INT, 1, dim, IDL_ARR_INI_NOP, &col0_tmp); for (i=0; i<NBANDS; ++i) col0_data[i] = ai->master_mask->cmin + ai->dcol[i]; /* copy into output. This just copied pointers, its fast */ IDL_VarCopy(col0_tmp, kw.col0); } /* drow */ if (kw.drow_there) { drow_data = (short *) IDL_MakeTempArray(IDL_TYP_INT, 1, dim, IDL_ARR_INI_NOP, &drow_tmp); for (i=0; i<NBANDS; ++i) drow_data[i] = ai->drow[i]; /* copy into output. This just copied pointers, its fast */ IDL_VarCopy(drow_tmp, kw.drow); } /* dcol */ if (kw.dcol_there) { dcol_data = (short *) IDL_MakeTempArray(IDL_TYP_INT, 1, dim, IDL_ARR_INI_NOP, &dcol_tmp); for (i=0; i<NBANDS; ++i) dcol_data[i] = ai->dcol[i]; /* copy into output. This just copied pointers, its fast */ IDL_VarCopy(dcol_tmp, kw.dcol); } if (kw.nrow_there) { /* This frees any existing memory and sets type to INT with value zero */ IDL_StoreScalarZero(kw.nrow, IDL_TYP_INT); kw.nrow->value.i = ai->master_mask->rmax - ai->master_mask->rmin + 1; } if (kw.ncol_there) { IDL_StoreScalarZero(kw.ncol, IDL_TYP_INT); kw.ncol->value.i = ai->master_mask->cmax - ai->master_mask->cmin + 1; } }