11#include "crrcntl_parms.h"
12#include "bpmutil_proto.h"
13#include "AIDASLCUTIL_SERVER.h"
15static Table setTriggerValue(JNIEnv* env,
const char* uri,
Arguments arguments,
Value value);
17static short getTrigStatus(JNIEnv* env,
const char* uri,
Arguments arguments);
19static void setFeedback(JNIEnv* env,
const char* uri,
Arguments arguments,
Value value);
20static int4u faStatus(JNIEnv* env,
const char* uri,
int newHSTA, BOOLEAN retrieveOnly);
21static short getShortFaStatus(JNIEnv* env,
const char* uri);
22static char* GetStringFaStatus(JNIEnv* env,
const char* uri);
23static Table phaseScan(JNIEnv* env,
const char* uri,
Arguments arguments);
24static bool getAcqParameters(JNIEnv* env,
Arguments arguments,
char** buttonFileName,
25 char** primaryStepVariable,
float* primaryLow,
float* primaryHigh,
int* primarySteps,
float* primarySettleTime,
26 float* primaryExtraSettleTime,
27 char** secondaryStepVariable,
float* secondaryLow,
float* secondaryHigh,
int* secondarySteps,
28 float* secondarySettleTime,
float* secondaryExtraSettleTime,
short* bpmd,
long* nrpos,
long* dtizavg,
29 char** magnetFunction);
31createCorrelationPlotTable(JNIEnv* env,
Table* table,
int totalSampleVariables,
int nSteps,
char* primaryStepVariable,
32 bool secondaryStepVariableProvided,
33 char* secondaryStepVariable,
float* samples,
long* samplesOk);
34static int countSampleVariables(JNIEnv* env,
long* nSampleVariables);
57 if (!$VMS_STATUS_SUCCESS(status =
init(
"AIDA_SLCUTIL",
false))) {
60 printf(
"AIDA-PVA Utility Provider\n");
74 return getShortFaStatus(env, uri);
76 return getTrigStatus(env, uri, arguments);
89 return getShortFaStatus(env, uri);
101 return getShortFaStatus(env, uri) == 0 ? false :
true;
114 return (
long)faStatus(env, uri, 0, TRUE_B);
116 return (
long)getTrigStatus(env, uri, arguments);
130 return GetStringFaStatus(env, uri);
133 short trig_status = getTrigStatus(env, uri, arguments);
175 char* buttonFileName;
176 char* primaryStepVariable, * secondaryStepVariable, * magnetFunction;
177 float primaryLow, primaryHigh, primarySettleTime, primaryExtraSettleTime, secondaryLow, secondaryHigh, secondarySettleTime, secondaryExtraSettleTime, settle;
178 int primarySteps, secondarySteps;
179 long nrpos = NRPOS_DEFAULT, dtizavg;
180 short bpmd = BPMD_ROGUE;
182 bool secondaryStepVariableProvided = getAcqParameters(env, arguments, &buttonFileName, &primaryStepVariable,
183 &primaryLow, &primaryHigh, &primarySteps,
184 &primaryExtraSettleTime, &primarySettleTime, &secondaryStepVariable, &secondaryLow, &secondaryHigh,
186 &secondarySettleTime, &secondaryExtraSettleTime, &bpmd, &nrpos, &dtizavg, &magnetFunction);
195 status = CRR_RESET_ALL();
196 if (!SUCCESS(status)) {
198 "error resetting correlation plots: %s", buttonFileName, table)
202 float wire_size = 0.0f;
203 float inc = (primaryHigh - primaryLow) / (
float)(primarySteps - 1);
206 status = CRR_SET_VAR_NAME_FREEFORM(REFINT4_1(DEFINE_STEP), REFINT4_2(1), DESCRN1(primaryStepVariable),
208 if (!SUCCESS(status)) {
210 "error setting primary step variable name: %s", primaryStepVariable, table)
212 status = CRR_SET_STEP(REFINT4_1(1), &primaryLow, &inc, &primarySteps, &primarySettleTime);
213 if (!SUCCESS(status)) {
215 "error setting primary step variable: %s", primaryStepVariable, table)
219 if (secondaryStepVariableProvided) {
220 status = CRR_SET_VAR_NAME_FREEFORM(REFINT4_1(DEFINE_STEP), REFINT4_2(-1), DESCRN1(secondaryStepVariable),
222 if (!SUCCESS(status)) {
224 "error setting secondary step variable name: %s", secondaryStepVariable, table)
227 inc = (secondaryHigh - secondaryLow) / (
float)(secondarySteps - 1);
228 status = CRR_SET_STEP(REFINT4_1(-1), &secondaryLow, &inc, &secondarySteps, &secondarySettleTime);
229 if (!SUCCESS(status)) {
231 "error setting secondary step variable: %s", secondaryStepVariable, table)
236 char fullyQualifiedButtonFileName[strlen(buttonFileName) + strlen(SLC_BUTTON_DIR) + 1];
237 sprintf(fullyQualifiedButtonFileName,
"%s%s", SLC_BUTTON_DIR, buttonFileName);
240 status = CRR_RESTORE_BUTTON_FILE(DESCRN1(fullyQualifiedButtonFileName));
241 if (!SUCCESS(status)) {
243 "error loading scan parameters from button file: %s", fullyQualifiedButtonFileName, table)
247 if (bpmd != BPMD_ROGUE) {
248 status = BPMD_SELECT_UTIL(&bpmd, NULL, NULL, NULL, NULL, NULL);
249 if (!SUCCESS(status)) {
250 fprintf(stderr,
"Failed to set Measurement Definition: %hd", bpmd);
252 "error initializing correlation plot acquisition: %s", buttonFileName, table)
257 memcpy(&magfunc, magnetFunction, 4);
258 float settleExtra[2];
259 settleExtra[0] = primaryExtraSettleTime;
260 settleExtra[1] = secondaryExtraSettleTime;
262 status = CRR_SET_SAMP_PARMS(&nrpos, &dtizavg, NULL, &magfunc, NULL, NULL, NULL, &settleExtra[0]);
263 if (!SUCCESS(status)) {
265 "Failed to set sample params. nrpos: %ld, dtizavg: %ld, magfunc: %ld, primSettleExtra: %f, secnSettleExtra: %f",
266 nrpos, dtizavg, magfunc, settleExtra[0], settleExtra[1]);
268 "error initializing correlation plot acquisition: %s", buttonFileName, table)
271 status = CRR_DATA_ACQ_INIT();
272 if (!SUCCESS(status)) {
274 "error initializing correlation plot acquisition: %s", buttonFileName, table)
278 status = CRR_DATA_ACQ(DESCRN1(
"*"));
279 if (!SUCCESS(status)) {
282 "executing correlation plot: %s", buttonFileName, table)
284 printf(
"Scan Complete");
287 long nSampleVariables;
288 if (countSampleVariables(env, &nSampleVariables)) {
294 int nSteps = CRR_SAMPLES();
295 if (!SUCCESS(status)) {
298 "error getting number of steps: %s", buttonFileName, table)
302 long totalSampleVariables = nSampleVariables + ((secondaryStepVariableProvided) ? 2 : 1);
303 if (!totalSampleVariables || !nSampleVariables) {
305 fprintf(stderr,
"Invalid number of sample variables. totalSampleVariables: %ld, nSampleVariables: %ld",
306 totalSampleVariables, nSampleVariables);
308 "No sample variables have been specified in the given file: %s", buttonFileName, table)
315 "Total number of steps derived from specified step variables is: %s",
"0", table)
322 printf(
"Tabulating Scan Results: %d x %ld\n", nSteps, totalSampleVariables);
324 "store acquired data", table)
326 "store acquired data ok", table)
329 status = CRR_DATA_ACQ_DONE();
330 if (!SUCCESS(status)) {
332 "cleaning up after correlation plot: %s", buttonFileName, table)
340 createCorrelationPlotTable(env, &table, ((
int)totalSampleVariables), nSteps,
342 secondaryStepVariableProvided, secondaryStepVariable,
356static int countSampleVariables(JNIEnv* env,
long* nSampleVariables) {
359 *nSampleVariables = 0;
360 vmsstat_t status = CRR_GET_NVAR(&allVars);
361 if (!SUCCESS(status)) {
367 for (
long varNum = 1; varNum < allVars; varNum++) {
368 long prim, micr, unit, secn, secn2, elem2;
369 status = CRR_GET_VAR_NAME(REFINT4_1(DEFINE_SAMPLE), &varNum, &prim, &micr, &unit, &secn, &secn2, &elem2);
370 if (!SUCCESS(status)) {
375 if (prim != ZERO_SV) {
376 (*nSampleVariables)++;
396static void createCorrelationPlotTable(JNIEnv* env,
Table* table,
int totalSampleVariables,
int nSteps,
397 char* primaryStepVariable,
bool secondaryStepVariableProvided,
char* secondaryStepVariable,
398 float* samples,
long* samplesOk) {
403 char* tableFieldName, * tableLabelName;
404 int secondaryAdjust = (secondaryStepVariableProvided ? 1 : 0);
406 int samplesAdded = 0;
407 for (
long varNum = -secondaryAdjust; samplesAdded < totalSampleVariables; varNum++) {
408 bool isTime =
false, isATime =
false, isSamp =
false;
409 long prim, micr, unit, secn, secn2, elem2;
410 status = CRR_GET_VAR_NAME(REFINT4_1(DEFINE_SAMPLE), &varNum, &prim, &micr, &unit, &secn, &secn2, &elem2);
411 isTime = prim == TIME_SV;
412 isATime = prim == ATIME_SV;
413 isSamp = prim == SAMP_SV;
416 tableFieldName =
"primary";
417 tableLabelName = primaryStepVariable;
418 }
else if (varNum == -1) {
419 tableFieldName =
"secondary";
420 tableLabelName = secondaryStepVariable;
422 if (!SUCCESS(status)) {
427 if (prim == ZERO_SV) {
431 sprintf(sampleFieldName,
"sample%ld", varNum);
432 tableFieldName = sampleFieldName;
434 unsigned long rawName[AP_DESCSIZE];
435 CRR_GET_VAR_DEF(REFINT4_1(DEFINE_SAMPLE), &varNum, (
long*)&rawName[0]);
440 sprintf(sampleLabelName,
"%.4s", (
char*)&rawName[0]);
441 sprintf(part,
"%.4s", (
char*)&rawName[1]);
442 if (part[0] !=
'-') {
443 sprintf(sampleLabelName + strlen(sampleLabelName),
":%.4s", part);
444 sprintf(part,
"%.4s", (
char*)&rawName[2]);
445 if (part[0] !=
'-') {
446 sprintf(sampleLabelName + strlen(sampleLabelName),
":%.4s", part);
447 sprintf(part,
"%.4s", (
char*)&rawName[3]);
448 if (part[0] !=
'-') {
449 sprintf(sampleLabelName + strlen(sampleLabelName),
":%.4s", part);
450 sprintf(part,
"%.4s", (
char*)&rawName[4]);
451 if (part[0] !=
'-') {
452 sprintf(sampleLabelName + strlen(sampleLabelName),
" %.4s", part);
457 tableLabelName = sampleLabelName;
462 long errorOffset = dataOffset + nSteps;
463 if (isTime || isATime || isSamp) {
464 status = CRR_GET_VAR(&varNum, &samples[dataOffset], NULL, NULL, NULL);
466 status = CRR_GET_VAR(&varNum, &samples[dataOffset], &samples[errorOffset], &samplesOk[dataOffset], NULL);
468 if (!SUCCESS(status)) {
474 if (isTime || isATime) {
487 if (isTime || isATime || isSamp) {
493 sprintf(name,
"%sError", tableFieldName);
496 sprintf(name,
"%s Error", tableLabelName);
503 sprintf(name,
"%sOk", tableFieldName);
506 sprintf(name,
"%s Ok?", tableLabelName);
533static bool getAcqParameters(JNIEnv* env,
Arguments arguments,
char** buttonFileName,
534 char** primaryStepVariable,
float* primaryLow,
float* primaryHigh,
int* primarySteps,
float* primarySettleTime,
535 float* primaryExtraSettleTime,
536 char** secondaryStepVariable,
float* secondaryLow,
float* secondaryHigh,
int* secondarySteps,
537 float* secondarySettleTime,
float* secondaryExtraSettleTime,
short* bpmd,
long* nrpos,
long* dtizavg,
538 char** magnetFunction) {
539 *primarySettleTime = 0.0f;
541 *secondaryStepVariable = NULL;
542 *secondaryLow = FLT_MAX;
543 *secondaryHigh = FLT_MAX;
544 *primaryExtraSettleTime = 0.0f;
545 *secondaryExtraSettleTime = 0.0f;
546 *secondarySteps = -1;
547 *secondarySettleTime = 0.0f;
549 if (
ascanf(env, &arguments,
"%s %s %f %f %d %of %of %os %of %of %od %of %of %ohd %old %old %os",
550 "file", buttonFileName,
552 "primstv.name", primaryStepVariable,
553 "primstv.low", primaryLow,
554 "primstv.high", primaryHigh,
555 "primstv.steps", primarySteps,
556 "primstv.settle", primarySettleTime,
557 "primstv.extrasettle", primaryExtraSettleTime,
559 "secnstv.name", secondaryStepVariable,
560 "secnstv.low", secondaryLow,
561 "secnstv.high", secondaryHigh,
562 "secnstv.steps", secondarySteps,
563 "secnstv.settle", secondarySettleTime,
564 "secnstv.extrasettle", secondaryExtraSettleTime,
569 "magfunc", magnetFunction
575 *secondaryStepVariable && *secondaryLow != FLT_MAX && *secondaryHigh != FLT_MAX && *secondarySteps != -1;
577 !*secondaryStepVariable && *secondaryLow == FLT_MAX && *secondaryHigh == FLT_MAX && *secondarySteps == -1;
580 if (!allSecSet && !noSecSet) {
582 "You have to specify name, low, high and step for the secondary step variable. You missed at least one");
586 if (*primarySteps < 2 || (allSecSet && *secondarySteps < 2)) {
602 setFeedback(env, uri, arguments, value);
604 setBGrp(env, arguments, value);
618 if (strcasecmp(uri,
"MKB:VAL") == 0) {
620 return setMkbValue(env, uri, arguments, value);
623 return setTriggerValue(env, uri, arguments, value);
638static void setBGrp(JNIEnv* env,
Arguments arguments,
Value value) {
642 char* bgrp, * varname, * valueString;
645 if (!DPSLCUTIL_BGRP_ACCESSENABLED()) {
647 "Aida access to BGRP set variable operations is not currently enabled");
651 if (
avscanf(env, &arguments, &value,
"%s %s %s",
652 "value", &valueString,
663 if (strcasecmp(valueString,
"Y") != 0 && strcasecmp(valueString,
"N") != 0) {
666 "'BGRP Set Variable requires Value argument to be 'Y' or 'N'");
671 status = DPSLCUTIL_BGRP_SETVAR(bgrp, varname, valueString);
673 if (!SUCCESS(status)) {
691 if (!DPSLCUTIL_MKB_ACCESSENABLED()) {
693 "Aida multiknob operations are not currently enabled");
700 if (
avscanf(env, &arguments, &value,
"%f %s",
701 "value", &floatValue,
712 status = DPSLCUTIL_DO_MKB(mkb, &floatValue, &num_devices);
714 if (!SUCCESS(status)) {
716 DPSLCUTIL_MKB_GETCLEANUP();
720 if (DPSLCUTIL_MKB_GETABSFLAG()) {
722 "Specified multiknob file is absolute, which is not permitted");
723 DPSLCUTIL_MKB_GETCLEANUP();
730 char namesData[(num_devices * MAX_DEVICE_STRING_LEN)];
731 float secondaryValuesData[num_devices];
734 DPSLCUTIL_MKB_GETNAMES(namesData);
737 DPSLCUTIL_MKB_GETSECNVALUES(secondaryValuesData);
740 DPSLCUTIL_MKB_GETCLEANUP();
761static Table setTriggerValue(JNIEnv* env,
const char* uri,
Arguments arguments,
Value value) {
763 if (!DPSLCUTIL_TRIG_ACCESSENABLED()) {
765 "Aida access to trigger operations is not currently enabled");
772 if (
avscanf(env, &arguments, &value,
"%hd %d",
782 status = DPSLCUTIL_TRIG_SETDEACTORREACT(dGroupName, flag, beam);
783 if (!SUCCESS(status)) {
789 status = DPSLCUTIL_TRIG_GETSTATUS(dGroupName, beam, &flag);
790 if (!SUCCESS(status)) {
811static short getTrigStatus(JNIEnv* env,
const char* uri,
Arguments arguments) {
815 if (
ascanf(env, &arguments,
"%d",
"beam", &beam)) {
823 status = DPSLCUTIL_TRIG_GETSTATUS((
char*)dGroupName, beam, &trig_status);
824 if (!SUCCESS(status)) {
836static short getShortFaStatus(JNIEnv* env,
const char* uri) {
837 int4u haStatus = faStatus(env, uri, 0, TRUE_B);
840 case FBCK_FEEDBACK_STATE:
842 case FBCK_COMPUTE_STATE:
845 case FBCK_SAMPLE_STATE:
846 case FBCK_ACTUATE_STATE:
847 case FBCK_DITHER_STATE:
860static char* GetStringFaStatus(JNIEnv* env,
const char* uri) {
861 int4u haStatus = faStatus(env, uri, 0, TRUE_B);
864 case FBCK_SAMPLE_STATE:
866 case FBCK_COMPUTE_STATE:
868 case FBCK_ACTUATE_STATE:
870 case FBCK_DITHER_STATE:
872 case FBCK_FEEDBACK_STATE:
888static int4u faStatus(JNIEnv* env,
const char* uri,
int newHSTA, BOOLEAN retrieveOnly) {
893 fbckhsta_tu lastHsta;
896 printf(
"SLC NAME: %s", pmu_str);
899 status = FA_CHANGE_HSTA(DESCRA1(pmu_str), newHSTA, retrieveOnly, &lastHsta.bit_s);
900 if (!SUCCESS(status)) {
908 return lastHsta.lword;
919static void setFeedback(JNIEnv* env,
const char* uri,
Arguments arguments,
Value value) {
924 if (
avscanf(env, &arguments, &value,
"%s",
"value", &valueString)) {
929 if (strcasecmp(valueString,
"OFF") == 0 || strcasecmp(valueString,
"0") == 0
930 || strcasecmp(valueString,
"false") == 0) {
931 newHSTA = FBCK_OFF_STATE;
932 }
else if (strcasecmp(valueString,
"SAMPLE") == 0) {
933 newHSTA = FBCK_SAMPLE_STATE;
934 }
else if (strcasecmp(valueString,
"ON") == 0 || strcasecmp(valueString,
"1") == 0
935 || strcasecmp(valueString,
"COMPUTE") == 0) {
936 newHSTA = FBCK_COMPUTE_STATE;
937 }
else if (strcasecmp(valueString,
"ACTUATE") == 0) {
938 newHSTA = FBCK_ACTUATE_STATE;
939 }
else if (strcasecmp(valueString,
"DITHER") == 0) {
940 newHSTA = FBCK_DITHER_STATE;
941 }
else if (strcasecmp(valueString,
"FEEDBACK") == 0 || strcasecmp(valueString,
"2") == 0
942 || strcasecmp(valueString,
"true") == 0) {
943 newHSTA = FBCK_FEEDBACK_STATE;
946 "Unsupported value for feedback control: Must be OFF, SAMPLE, COMPUTE, ON, ACTUATE, DITHER, or FEEDBACK");
949 faStatus(env, uri, newHSTA, FALSE_B);
Table aidaSetValueWithResponse(JNIEnv *env, const char *uri, Arguments arguments, Value value)
Set a value and return a table as a response.
void aidaSetValue(JNIEnv *env, const char *uri, Arguments arguments, Value value)
Set a value: BGRP Set Variable or SCP transverse feedback.
char * aidaRequestString(JNIEnv *env, const char *uri, Arguments arguments)
Get a string.
Table aidaRequestTable(JNIEnv *env, const char *uri, Arguments arguments)
Implement Correlated Plots.
int aidaRequestInteger(JNIEnv *env, const char *uri, Arguments arguments)
Get an integer.
REQUEST_STUB_BYTE REQUEST_STUB_FLOAT REQUEST_STUB_DOUBLE REQUEST_STUB_BOOLEAN_ARRAY REQUEST_STUB_BYTE_ARRAY REQUEST_STUB_SHORT_ARRAY REQUEST_STUB_INTEGER_ARRAY REQUEST_STUB_LONG_ARRAY REQUEST_STUB_FLOAT_ARRAY REQUEST_STUB_DOUBLE_ARRAY REQUEST_STUB_STRING_ARRAY void aidaServiceInit(JNIEnv *env)
Initialise the service.
short aidaRequestShort(JNIEnv *env, const char *uri, Arguments arguments)
Get a short.
int aidaRequestBoolean(JNIEnv *env, const char *uri, Arguments arguments)
Get a Boolean.
long aidaRequestLong(JNIEnv *env, const char *uri, Arguments arguments)
Get a integer.
The Header File for the AIDA-PVA Module functions.
#define REQUEST_STUB_BYTE
aidaRequestByte API Stub
#define VERSION(_version)
Use this macro to define the version of the provider.
#define REQUEST_STUB_LONG_ARRAY
aidaRequestLongArray API Stub
#define REQUEST_STUB_INTEGER_ARRAY
aidaRequestIntegerArray API Stub
#define REQUEST_STUB_DOUBLE
aidaRequestDouble API Stub
#define REQUEST_STUB_SHORT_ARRAY
aidaRequestShortArray API Stub
#define REQUEST_STUB_BYTE_ARRAY
aidaRequestByteArray API Stub
#define RETURN_NULL_TABLE
Return an empty table response.
#define REQUEST_STUB_FLOAT_ARRAY
aidaRequestFloatArray API Stub
#define REQUEST_STUB_DOUBLE_ARRAY
aidaRequestDoubleArray API Stub
#define REQUEST_STUB_BOOLEAN_ARRAY
aidaRequestBooleanArray API Stub
#define REQUEST_STUB_FLOAT
aidaRequestFloat API Stub
#define REQUEST_STUB_STRING_ARRAY
aidaRequestStringArray API stub
#define CONVERT_TO_VMS_FLOAT(_float, _count)
Convert in-place, floating point numbers from ieee to VMS format.
#define ON_EXCEPTION_RETURN_VOID
Check to see if an exception has been raised, and return void,.
#define SERVER_INITIALISATION_EXCEPTION
Use this string to signal Server Initialisation Exceptions in aidaThrow()
#define SPRINTF_ERROR_STATUS_FREE_MEMORY_AND_RETURN_(_status, _exception, _errorText, _ref, _r)
Format an error message, throw it in an exception, free any allocated memory and return the error cod...
#define UNABLE_TO_SET_DATA_EXCEPTION
Use this string to signal Exceptions when trying to Set Data in aidaThrow()
#define MISSING_REQUIRED_ARGUMENT_EXCEPTION
Use this string to signal Missing Required Argument Exceptions in aidaThrow()
#define ON_EXCEPTION_RETURN_(_r)
Check to see if an exception has been raised, and return the given return value.
#define SPRINTF_ERROR_FREE_MEMORY_AND_RETURN_(_exception, _errorText, _ref, _r)
Format an error message, throw it in an exception, free any allocated memory and return the error cod...
#define ON_EXCEPTION_FREE_MEMORY_AND_RETURN_(_r)
Check to see if an exception has been raised, then free tracked memory, and return the given return v...
#define UNABLE_TO_GET_DATA_EXCEPTION
Use this string to signal Exceptions when trying to Get Data in aidaThrow()
#define TRACK_ALLOCATED_MEMORY
Create tracking variables so that memory can be freed with FREE_MEMORY macro.
#define ALLOCATE_STRING(_env, _string, _purpose)
Allocate memory for a string and copy the given string into this allocated space.
#define FREE_MEMORY
Free any allocated memory.
#define ALLOCATE_AND_TRACK_MEMORY_AND_ON_ERROR_RETURN_(_env, _var, _size, _purpose, _r)
Allocate memory and add it to the tracked memory list so that it can be freed automatically later.
#define TRACK_MEMORY(_ptr)
Register this newly allocated memory so that it will be freed by FREE_MEMORY.
int startsWith(const char *str, char *prefix)
Check if a string starts with another string.
void aidaThrow(JNIEnv *env, vmsstat_t status, char *exception, const char *message)
To log any exceptions and throw back to java.
vmsstat_t init(const char *processName, bool initMessageServices)
Call standalone_init()
void aidaThrowNonOsException(JNIEnv *env, char *exception, const char *message)
To log any non-OS exceptions and throw back to java.
@ AIDA_FLOAT_TYPE
Represents a float.
@ AIDA_LONG_TYPE
Represents a long.
void tableAddField(JNIEnv *env, Table *table, char *fieldName)
Add a dynamic field to a table.
void tableAddFixedWidthStringColumn(JNIEnv *env, Table *table, char *data, int width)
This reads data from an allocated space that is rows * width with each string occupying width charact...
int ascanf(JNIEnv *env, Arguments *arguments, const char *formatString,...)
ascanf(), avscanf()
Table tableCreate(JNIEnv *env, int rows, int columns)
Make a Table for return to client.
void tableAddLabel(JNIEnv *env, Table *table, char *labelName)
Add a dynamic column to a table.
void tableAddSingleRowShortColumn(JNIEnv *env, Table *table, short data)
Add a short column to a Table with only one row.
void tableAddColumn(JNIEnv *env, Table *table, Type type, void *data, bool ieeeFormat)
Add a column of arbitrary type to a Table.
int avscanf(JNIEnv *env, Arguments *arguments, Value *value, const char *formatString,...)
ascanf(), avscanf()
Table tableCreateDynamic(JNIEnv *env, int rows, int columns)
Make a Dynamic Table for return to client.
#define MAX_URI_LEN
The maximum length of a URI.
#define PMU_STRING_FROM_URI(_var, _uri)
Get a PMU (Primary-Micro-Unit) string from the supplied URI.
#define TO_DGROUP(_var, _uri)
Get a display group name from the provided uri and store it in the given variable name.
An Arguments structure stores all of the arguments passed from the request to the Native Channel Prov...
int columnCount
number of columns in table
int _currentColumn
For internal use by addColumn() etc.
This special type represents a Value.