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)); }
/* 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; } }
/* 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)); }
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; } }