Esempio n. 1
0
/*
  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));
}
Esempio n. 2
0
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;

}
Esempio n. 3
0
/*
  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));
}
Esempio n. 4
0
/*
  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));
}
Esempio n. 5
0
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));
}
Esempio n. 6
0
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));

}
Esempio n. 7
0
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));

}
Esempio n. 8
0
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));

}
Esempio n. 9
0
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;
  }

}