示例#1
0
IDL_VPTR pgsql_query(int argc, IDL_VPTR *argv, char *argk)
{

    IDL_VPTR queryVptr;
    char *query;
    char *connect_info;

    IDL_VPTR resultVptr;

    int async = 1;

    int status;


    (void) IDL_KWProcessByOffset(argc, argv, argk, kw_pars, 
            (IDL_VPTR *) 0, 1, &kw);


    if (kw.nrows_there)
        IDL_StoreScalarZero(kw.nrows, IDL_TYP_ULONG64);

    /* Check number of input parameters */
    if (pgsql_query_nparams(argc) < 1)
    {
        IDL_Message(IDL_M_NAMED_GENERIC, IDL_MSG_INFO, 
                "-Syntax: result=pgsql_query(query, nrows=, connect_info=, file=, /append, /nointerrupt, /verbose, status=)\nIf there are results for the query, a structure is returned.  Otherwise the result is -1");
        return(IDL_GettmpInt(-1));
    }

    /* Get the input query */
    queryVptr = argv[0];
    query = IDL_VarGetString(queryVptr);



    /* The user may have input connection information */
    if (kw.connect_info_there)
        connect_info=IDL_STRING_STR(&kw.connect_info);
    else
        connect_info="";

    /* Should we query asynchronously?  This would allow cancel through ^C */
    if (kw.nointerrupt_there)
        if (kw.nointerrupt) 
            async = 0;

    if (async) 
        status = pgsql_query_send_async(query, connect_info, &resultVptr);
    else 
        status = pgsql_query_send(query, connect_info, &resultVptr);

    setStatus(status);

    IDL_KW_FREE;
    if (status == MYPG_SUCCESS)
        return(resultVptr);
    else
        return(IDL_GettmpInt(-1));
}
示例#2
0
/* set the status if it is there */
static void setStatus(int statusVal)
{

    if (kw.status_there) {
        /* This frees any existing memory and sets type to INT with value zero */
        IDL_StoreScalarZero(kw.status, IDL_TYP_INT);
        kw.status->value.i = statusVal;
    }

}
示例#3
0
文件: mg_net.c 项目: jiezhou87/mglib
/*
  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));
}
示例#4
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;
  }

}