/***************************************************************** * TclSetCurrent: *****************************************************************/ int TclSetCurrent() { int sts; char *experiment; static int shot; static DESCRIPTOR_LONG(dsc_shot,&shot); static DYNAMIC_DESCRIPTOR(dsc_experiment); static DYNAMIC_DESCRIPTOR(dsc_asciiShot); cli_get_value("EXPERIMENT",&dsc_experiment); experiment = dsc_experiment.dscA_pointer; if (cli_present("INCREMENT") & 1) { shot = TreeGetCurrentShotId(experiment); shot++; sts = TreeSetCurrentShotId(experiment,shot); } else { cli_get_value("SHOT",&dsc_asciiShot); #ifdef vms dsc_asciiShot.dscB_class = CLASS_S; /* vms: malloc vs str$ */ sts = TdiExecute(&dsc_asciiShot,&dsc_shot MDS_END_ARG); dsc_asciiShot.dscB_class = CLASS_D; #else sts = TdiExecute(&dsc_asciiShot,&dsc_shot MDS_END_ARG); #endif if (sts & 1) sts = TreeSetCurrentShotId(experiment,shot); } if ((sts & 1) != 1) MdsMsg(sts,0); return sts; }
int PARAGON_FTP_COPY(char *report_in, struct descriptor *report_out, int *isftp) { struct descriptor report = {0, DTYPE_T, CLASS_S, 0}; DESCRIPTOR(ftp_it,"PARAGON_FTP_COPY($)"); report.length = strlen(report_in); report.pointer = report_in; *isftp = 1; return TdiExecute(&ftp_it,&report,report_out MDS_END_ARG); }
static int NElements(int nid) { static int num; static struct descriptor_s num_dsc = {sizeof(int), DTYPE_L, CLASS_S, (char *)&num}; static DESCRIPTOR(set_var, "_TextArray = $1"); static struct descriptor_xd dummy_xd = {0, DTYPE_DSC, CLASS_XD, 0, 0}; struct descriptor_s nid_dsc = {sizeof(int), DTYPE_NID, CLASS_S, (char *)0}; int status = 1; nid_dsc.pointer = (char *)&nid; if (last_nid != nid) { last_nid = 0; status = TdiExecute(&set_var, &nid_dsc, &dummy_xd MDS_END_ARG); } if (status&1) { static DESCRIPTOR(size_expr, "SIZE(_TextArray)"); last_nid = nid; status = TdiExecute(&size_expr, &num_dsc MDS_END_ARG); } return (status&1) ? num : 0; }
static void Reset(Widget w) { int status; Widget list_w = XtNameToWidget(XtParent(w),"*interpreters"); static struct descriptor_d cli = {0, DTYPE_T, CLASS_D, 0}; static DESCRIPTOR(initial, "_I=0"); static DESCRIPTOR(clis, "(clis()[_I++]//\"\\0\")"); XtPointer user_data; int nid; String selections; String selection; int ctx = 0; int first = 1; XtVaGetValues(list_w, XmNuserData, &user_data, NULL); nid = (intptr_t)user_data; XmListDeselectAllItems(list_w); XmListDeleteAllItems(list_w); TdiExecute(&initial,&cli MDS_END_ARG); while ((status=TdiExecute(&clis, &cli MDS_END_ARG)&1 && cli.length > 0 && strlen(cli.pointer) > 0)) { XmString item; item = XmStringCreateSimple(cli.pointer); if (!XmListItemExists(list_w,item)) XmListAddItem(list_w,item,0); XmStringFree(item); } selections = XmdsGetNidText(nid); for (selection=strtok(selections,"\n");selection;selection=strtok(0,"\n")) { XmString item = XmStringCreateSimple(selection); XmListSelectItem(list_w, item, 0); if (first) { first = 0; XmListSetItem(list_w, item); } XmStringFree(item); } XtFree(selections); return; }
static char *ArrayRef(int nid, int num) { struct descriptor_s num_dsc = {sizeof(int), DTYPE_L, CLASS_S, (char *)0}; static DESCRIPTOR(set_var, "_TextArray = $1"); static struct descriptor_xd dummy_xd = {0, DTYPE_DSC, CLASS_XD, 0, 0}; struct descriptor_s nid_dsc = {sizeof(int), DTYPE_NID, CLASS_S, (char *)0}; static struct descriptor_d empty_string = {0, DTYPE_T, CLASS_D, 0}; int status = 1; num_dsc.pointer = (char *)# nid_dsc.pointer = (char *)&nid; if (last_nid != nid) { last_nid = 0; status = TdiExecute(&set_var, &nid_dsc, &dummy_xd MDS_END_ARG); } if (status&1) { static DESCRIPTOR(subscript_expr, "_TextArray[$]//\"\\0\""); struct descriptor_s num_dsc = {sizeof(int), DTYPE_L, CLASS_S, (char *)0}; num_dsc.pointer = (char *)# status = TdiExecute(&subscript_expr, &num_dsc, &empty_string MDS_END_ARG); } return ((status&1)==0) ? 0 : empty_string.pointer; }
/**************************************************************** * TclDoMethod: ****************************************************************/ int TclDoMethod() { int i; int argc; int sts; unsigned char do_it; struct descriptor_xd xdarg[255]; static int nid; static unsigned short boolVal; static struct descriptor_s bool_dsc = {sizeof(boolVal), DTYPE_W, CLASS_S, (char *)&boolVal}; static struct descriptor nid_dsc = {4,DTYPE_NID,CLASS_S,(char *)&nid}; static struct descriptor_xd empty_xd = {0,DTYPE_DSC,CLASS_XD,0,0}; static DYNAMIC_DESCRIPTOR(arg); static DYNAMIC_DESCRIPTOR(if_clause); static DYNAMIC_DESCRIPTOR(method); static DYNAMIC_DESCRIPTOR(object); static void *arglist[256] = {(void *)2,&nid_dsc,&method}; cli_get_value("OBJECT",&object); sts = TreeFindNode(object.dscA_pointer,&nid); if (sts & 1) { do_it = (TreeIsOn(nid) | cli_present("OVERRIDE")) & 1; if (cli_present("IF") & 1) { cli_get_value("IF",&if_clause); sts = TdiExecute(&if_clause,&bool_dsc MDS_END_ARG); if (sts & 1) do_it = do_it && boolVal; else do_it = 0; } if (do_it) { int dometh_stat; DESCRIPTOR_LONG(dometh_stat_d,0); cli_get_value("METHOD",&method); argc = 0; if (cli_present("ARGUMENT") & 1) { while (cli_get_value("ARGUMENT",&arg) & 1) { xdarg[argc] = empty_xd; sts = TdiCompile(&arg,&xdarg[argc] MDS_END_ARG); if (sts & 1) { arglist[argc + 3] = xdarg[argc].dscA_pointer; argc++; } else break; } } if (sts & 1) { #ifdef vms arglist[0] = (void *)(argc + 2); #else dometh_stat_d.dscA_pointer = (char *)&dometh_stat; arglist[argc+3] = &dometh_stat_d; arglist[argc+4] = MdsEND_ARG; arglist[0] = (argc + 4)+(char *)0; #endif sts = (char *)LibCallg(arglist,TreeDoMethod)-(char *)0; if (sts & 1) sts = dometh_stat; } str_free1_dx(&arg); str_free1_dx(&method); for (i = 0; i < argc; i++) MdsFree1Dx(&xdarg[i],NULL); } } str_free1_dx(&object); #ifdef vms if (!(sts & 1)) lib$signal(sts,0); #else if (!(sts & 1)) { char msg[512]; sprintf(msg,"Error executing method - %s",MdsGetMsg(sts)); TclTextOut(msg); } #endif return sts; }
static void StoreSignal(int nid, int num, float *v, TIME *t, struct descriptor_xd *limits, int sort) { DESCRIPTOR_A(vals, sizeof(float), DTYPE_NATIVE_FLOAT, 0, 0); DESCRIPTOR_A(tims, sizeof(TIME), DTYPE_QU, 0, 0); int status; static struct descriptor_xd tmp_xd = {0, DTYPE_DSC, CLASS_XD, 0, 0}; static struct descriptor_xd values = {0, DTYPE_DSC, CLASS_XD, 0, 0}; static struct descriptor_xd times = {0, DTYPE_DSC, CLASS_XD, 0, 0}; static DESCRIPTOR_SIGNAL_1(signal, &values, 0, ×); vals.pointer = (char *)v; vals.arsize = num * sizeof(float); tims.pointer = (char *)t; tims.arsize = num * sizeof(TIME); if (limits->l_length) { static struct descriptor_xd selections = {0,DTYPE_DSC,CLASS_XD,0,0}; static DESCRIPTOR(select, "(($1 > $2[0]) && ($1 < $2[1]))"); static DESCRIPTOR(pack, "PACK($, $)"); TdiExecute(&select, &vals, limits, &selections MDS_END_ARG); TdiExecute(&pack, &vals, &selections, &values MDS_END_ARG); TdiExecute(&pack, &tims, &selections, × MDS_END_ARG); MdsFree1Dx(&selections,0); } else { MdsCopyDxXd((struct descriptor *)&tims, ×); MdsCopyDxXd((struct descriptor *)&vals, &values); } status = TreeGetRecord(nid, &tmp_xd); if (status&1) { static struct descriptor_xd value = {0,DTYPE_DSC,CLASS_XD,0,0}; static struct descriptor_xd time = {0,DTYPE_DSC,CLASS_XD,0,0}; static DESCRIPTOR(sorted_times,"SORT($)"); static DESCRIPTOR(dim_of, "DIM_OF($)"); static DESCRIPTOR(val_of, "DATA($)"); static DESCRIPTOR(set_range, "SET_RANGE(SIZE($1), $1)"); TdiExecute(&dim_of, &tmp_xd, &time MDS_END_ARG); TdiExecute(&val_of, &tmp_xd, &value MDS_END_ARG); TdiVector(&value,&values,&values MDS_END_ARG); TdiVector(&time,×,× MDS_END_ARG); TdiExecute(&set_range, &values, &values MDS_END_ARG); TdiExecute(&set_range, ×, × MDS_END_ARG); if (sort) { static struct descriptor_xd index = {0,DTYPE_DSC,CLASS_XD,0,0}; static struct descriptor_xd sorted_values = {0,DTYPE_DSC,CLASS_XD,0,0}; static struct descriptor_xd sorted_times = {0,DTYPE_DSC,CLASS_XD,0,0}; static struct descriptor_xd sorted_signal = {0,DTYPE_DSC,CLASS_XD,0,0}; static DESCRIPTOR_SIGNAL_1(signal, &sorted_values, 0, &sorted_times); TdiSort(times.pointer,&index MDS_END_ARG); TdiSubscript(times.pointer,index.pointer,&sorted_times MDS_END_ARG); TdiSubscript(values.pointer,index.pointer,&sorted_values MDS_END_ARG); TdiUnion(sorted_times.pointer,&time MDS_END_ARG); TdiSubscript(&signal,time.pointer,&sorted_signal MDS_END_ARG); status = TreePutRecord(nid, (struct descriptor *)&sorted_signal,0); MdsFree1Dx(&index,0); MdsFree1Dx(&sorted_values,0); MdsFree1Dx(&sorted_times,0); } else status = TreePutRecord(nid, (struct descriptor *)&signal,0); MdsFree1Dx(&value,0); MdsFree1Dx(&time,0); } else { signal.data = (struct descriptor *)&vals; signal.dimensions[0] = (struct descriptor *)&tims; status = TreePutRecord(nid, (struct descriptor *)&signal,0); } MdsFree1Dx(&tmp_xd,0); }
} else skip_next_value = 0; return status; } int PARAGON_FTP_COPY(char *report_in, struct descriptor *report_out, int *isftp) { struct descriptor report = {0, DTYPE_T, CLASS_S, 0}; DESCRIPTOR(ftp_it,"PARAGON_FTP_COPY($)"); report.length = strlen(report_in); report.pointer = report_in; *isftp = 1; return TdiExecute(&ftp_it,&report,report_out MDS_END_ARG); } int PARAGON_FTP_DELETE(char *report_in, int delete) { int status; struct descriptor report = {0, DTYPE_T, CLASS_S, 0}; DESCRIPTOR(ftp_it,"PARAGON_FTP_DELETE($,$)"); DESCRIPTOR_LONG(delete_d,0); EMPTYXD(ans); report.length = strlen(report_in); report.pointer = report_in; delete_d.pointer = (char *)&delete; status = TdiExecute(&ftp_it,&report,&delete_d,&ans MDS_END_ARG); MdsFree1Dx(&ans,0); return status; }