57static char *option[N_OPTIONS] = {
68static char *dim_option[DIM_OPTIONS] = {
75 "sddsarray2column [<source-file>] [<target-file>]\n"
76 " [-pipe=[input][,output]]\n"
78 " -convert=<array-name>[,<column-name>][,d<dimension>=<indexValue>]... \n\n"
79 "sddsarray2column converts SDDS arrays to SDDS columns.\n"
80 "The number of elements in the converted arrays must equal\n"
81 "the number of rows if there are columns in the file and\n"
82 "the number of elements in other converted arrays.\n\n"
84 " sddsarray2column in out -convert=A,A_out\n"
85 " sddsarray2column in out -convert=A,A_out,d0=0\n"
86 " sddsarray2column in out \"-convert=A,A_out,d2=(1,3)\"\n\n"
87 "Program by Robert Soliday. (Compiled on " __DATE__
" at " __TIME__
", SVN revision: " SVN_VERSION
")\n";
99int main(
int argc,
char **argv) {
103 long i, i_arg, j, found, k, m, n;
105 char *input = NULL, *output = NULL, *ptr = NULL, *buffer = NULL;
106 char *description_text = NULL, *description_contents = NULL;
107 unsigned long pipeFlags = 0;
108 long noWarnings = 0, tmpfile_used = 1;
109 long virtual_rows, max_size, pageNumber, vrows;
112 char **orig_column_name = NULL, **orig_parameter_name = NULL, **orig_array_name = NULL;
113 int32_t orig_column_names = 0, orig_parameter_names = 0, orig_array_names = 0;
114 char **new_array_name = NULL;
115 long new_array_names = 0;
117 long converted_array_names = 0;
120 argc =
scanargs(&s_arg, argc, argv);
125 for (i_arg = 1; i_arg < argc; i_arg++) {
126 if (s_arg[i_arg].arg_type == OPTION) {
128 switch (
match_string(s_arg[i_arg].list[0], option, N_OPTIONS, 0)) {
130 if (s_arg[i_arg].n_items < 2) {
133 ca =
trealloc(ca,
sizeof(*ca) * (converted_array_names + 1));
135 ca[converted_array_names].name = s_arg[i_arg].list[1];
137 if ((s_arg[i_arg].n_items > 2) && (strchr(s_arg[i_arg].list[2],
'=') == NULL)) {
138 ca[converted_array_names].new_name = s_arg[i_arg].list[2];
141 ca[converted_array_names].new_name = s_arg[i_arg].list[1];
145 ca[converted_array_names].d[0] = NULL;
146 ca[converted_array_names].d[1] = NULL;
147 ca[converted_array_names].d[2] = NULL;
148 while (i < s_arg[i_arg].n_items) {
149 if (!(ptr = strchr(s_arg[i_arg].list[i],
'='))) {
153 switch (
match_string(s_arg[i_arg].list[i], dim_option, DIM_OPTIONS, 0)) {
155 ca[converted_array_names].d[0] = ptr;
158 ca[converted_array_names].d[1] = ptr;
161 ca[converted_array_names].d[2] = ptr;
168 converted_array_names++;
172 if (s_arg[i_arg].n_items != 1) {
179 if (!
processPipeOption(s_arg[i_arg].list + 1, s_arg[i_arg].n_items - 1, &pipeFlags)) {
186 input = s_arg[i_arg].list[0];
187 }
else if (output == NULL) {
188 output = s_arg[i_arg].list[0];
195 processFilenames(
"sddsarray2column", &input, &output, pipeFlags, noWarnings, &tmpfile_used);
202 if (!description_text) {
206 if (!
SDDS_InitializeOutput(&SDDS_dataset, SDDS_orig.layout.data_mode.mode, 1, description_text, description_contents, output)) {
215 if (!orig_parameter_name) {
221 if (!orig_column_name) {
227 if (!orig_array_name) {
233 for (j = 0; j < converted_array_names; j++) {
234 for (i = 0; i < orig_column_names; i++) {
235 if (strcmp(orig_column_name[i], ca[j].new_name) == 0) {
236 fprintf(stderr,
"Error: Column '%s' already exists.\n", orig_column_name[i]);
240 for (i = 0; i < converted_array_names; i++) {
241 if ((i != j) && (strcmp(ca[i].new_name, ca[j].new_name) == 0)) {
242 fprintf(stderr,
"Error: Cannot convert two arrays to the same column name '%s'.\n", ca[j].new_name);
247 for (i = 0; i < orig_array_names; i++) {
248 if (strcmp(orig_array_name[i], ca[j].name) == 0) {
254 fprintf(stderr,
"Error: Array '%s' does not exist.\n", ca[j].name);
260 for (i = 0; i < orig_array_names; i++) {
262 for (j = 0; j < converted_array_names; j++) {
263 if (strcmp(orig_array_name[i], ca[j].name) == 0) {
269 new_array_name =
trealloc(new_array_name,
sizeof(*new_array_name) * (new_array_names + 1));
270 new_array_name[new_array_names] = orig_array_name[i];
276 for (i = 0; i < orig_parameter_names; i++) {
283 for (i = 0; i < orig_column_names; i++) {
290 for (i = 0; i < new_array_names; i++) {
292 fprintf(stderr,
"Unable to transfer array '%s' to '%s'.\n", new_array_name[i], new_array_name[i]);
298 for (i = 0; i < converted_array_names; i++) {
301 fprintf(stderr,
"Error: Unknown array named '%s'.\n", ca[i].name);
304 ca[i].type = ardef->type;
305 if (
SDDS_DefineColumn(&SDDS_dataset, ca[i].new_name, ardef->symbol, ardef->units, ardef->description, ardef->format_string, ardef->type, ardef->field_length) < 0) {
307 fprintf(stderr,
"Error: Unable to define new column '%s'.\n", ca[i].new_name);
324 buffer =
tmalloc(max_size *
sizeof(
char));
327 if (pageNumber == 0) {
328 fprintf(stderr,
"Error: SDDS data garbled.\n");
329 fprintf(stderr,
"Warning: One or more data pages may be missing.\n");
332 rows = SDDS_RowCount(&SDDS_orig);
334 fprintf(stderr,
"Error: Problem counting rows in input page.\n");
338 fprintf(stderr,
"Error: Problem starting output page.\n");
342 for (i = 0; i < orig_parameter_names; i++) {
344 fprintf(stderr,
"Error: Problem getting parameter '%s'.\n", orig_parameter_name[i]);
347 if (!
SDDS_SetParameters(&SDDS_dataset, SDDS_SET_BY_NAME | SDDS_PASS_BY_REFERENCE, orig_parameter_name[i], buffer, NULL)) {
348 fprintf(stderr,
"Error: Problem setting parameter '%s'.\n", orig_parameter_name[i]);
354 for (i = 0; i < orig_column_names; i++) {
357 fprintf(stderr,
"Error: Problem getting column '%s'.\n", orig_column_name[i]);
360 if (!
SDDS_SetColumn(&SDDS_dataset, SDDS_SET_BY_NAME, ptr, rows, orig_column_name[i])) {
361 fprintf(stderr,
"Error: Problem setting column '%s'.\n", orig_column_name[i]);
367 for (i = 0; i < new_array_names; i++) {
371 fprintf(stderr,
"Error: Problem getting array '%s'.\n", new_array_name[i]);
374 if (!
SDDS_SetArray(&SDDS_dataset, new_array_name[i], SDDS_CONTIGUOUS_DATA, array->data, array->dimension)) {
375 fprintf(stderr,
"Error: Problem setting array '%s'.\n", new_array_name[i]);
382 for (i = 0; i < converted_array_names; i++) {
386 fprintf(stderr,
"Error: Problem getting array '%s'.\n", ca[i].name);
390 if ((ca[i].d[0] == NULL) && (ca[i].d[1] == NULL) && (ca[i].d[2] == NULL)) {
391 if ((orig_column_names) && (array->elements != rows)) {
392 fprintf(stderr,
"Error: Cannot convert '%s' because existing columns have a different number of rows.\n", ca[i].name);
395 if ((virtual_rows >= 0) && (array->elements != virtual_rows)) {
396 fprintf(stderr,
"Error: The number of array elements are not the same.\n");
399 if ((!orig_column_names) && (virtual_rows == -1)) {
405 virtual_rows = array->elements;
406 if (!
SDDS_SetColumn(&SDDS_dataset, SDDS_SET_BY_NAME, array->data, virtual_rows, ca[i].new_name)) {
407 fprintf(stderr,
"Error: Problem setting column '%s'.\n", ca[i].new_name);
412 ca[i].dims[0] = ca[i].dims[1] = ca[i].dims[2] = 0;
413 for (j = 0; j < array->definition->dimensions; j++) {
415 if (ca[i].d[j] == NULL) {
416 ca[i].dims[j] = array->dimension[j];
417 ca[i].dim[j] = malloc(
sizeof(
long) * ca[i].dims[j]);
418 for (k = 0; k < ca[i].dims[j]; k++) {
422 ptr = strtok(ca[i].d[j],
",");
423 while (ptr != NULL) {
424 ca[i].dim[j] = realloc(ca[i].dim[j],
sizeof(
long) * (ca[i].dims[j] + 1));
426 fprintf(stderr,
"Error: Memory allocation failed for dimension indices.\n");
430 if ((sscanf(ptr,
"%ld", &ca[i].dim[j][ca[i].dims[j]]) != 1) ||
431 (ca[i].dim[j][ca[i].dims[j]] < 0) ||
432 (ca[i].dim[j][ca[i].dims[j]] >= array->dimension[j])) {
433 fprintf(stderr,
"Error: Invalid value for d%ld: '%s'.\n", j + 1, ptr);
437 ptr = strtok(NULL,
",");
441 vrows = ca[i].dims[j];
443 vrows *= ca[i].dims[j];
447 if ((orig_column_names) && (vrows != rows)) {
448 fprintf(stderr,
"Error: Cannot convert '%s' because existing columns have a different number of rows.\n", ca[i].name);
451 if ((virtual_rows >= 0) && (vrows != virtual_rows)) {
452 fprintf(stderr,
"Error: The number of array elements are not the same.\n");
455 if ((!orig_column_names) && (virtual_rows == -1)) {
461 virtual_rows = vrows;
464 switch (ca[i].type) {
466 ca[i].data = malloc(
sizeof(
short) * vrows);
467 if (ca[i].dims[1] == 0) {
468 for (j = 0; j < ca[i].dims[0]; j++) {
469 ((
short *)ca[i].data)[n++] = ((
short *)array->data)[ca[i].dim[0][j]];
471 }
else if (ca[i].dims[2] == 0) {
472 for (j = 0; j < ca[i].dims[0]; j++) {
473 for (k = 0; k < ca[i].dims[1]; k++) {
474 ((
short *)ca[i].data)[n++] = ((
short *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
478 for (j = 0; j < ca[i].dims[0]; j++) {
479 for (k = 0; k < ca[i].dims[1]; k++) {
480 for (m = 0; m < ca[i].dims[2]; m++) {
481 ((
short *)ca[i].data)[n++] = ((
short *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
482 ca[i].dim[1][k] * array->dimension[2] +
491 ca[i].data = malloc(
sizeof(
unsigned short) * vrows);
492 if (ca[i].dims[1] == 0) {
493 for (j = 0; j < ca[i].dims[0]; j++) {
494 ((
unsigned short *)ca[i].data)[n++] = ((
unsigned short *)array->data)[ca[i].dim[0][j]];
496 }
else if (ca[i].dims[2] == 0) {
497 for (j = 0; j < ca[i].dims[0]; j++) {
498 for (k = 0; k < ca[i].dims[1]; k++) {
499 ((
unsigned short *)ca[i].data)[n++] = ((
unsigned short *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
503 for (j = 0; j < ca[i].dims[0]; j++) {
504 for (k = 0; k < ca[i].dims[1]; k++) {
505 for (m = 0; m < ca[i].dims[2]; m++) {
506 ((
unsigned short *)ca[i].data)[n++] = ((
unsigned short *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
507 ca[i].dim[1][k] * array->dimension[2] +
516 ca[i].data = malloc(
sizeof(int32_t) * vrows);
517 if (ca[i].dims[1] == 0) {
518 for (j = 0; j < ca[i].dims[0]; j++) {
519 ((int32_t *)ca[i].data)[n++] = ((int32_t *)array->data)[ca[i].dim[0][j]];
521 }
else if (ca[i].dims[2] == 0) {
522 for (j = 0; j < ca[i].dims[0]; j++) {
523 for (k = 0; k < ca[i].dims[1]; k++) {
524 ((int32_t *)ca[i].data)[n++] = ((int32_t *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
528 for (j = 0; j < ca[i].dims[0]; j++) {
529 for (k = 0; k < ca[i].dims[1]; k++) {
530 for (m = 0; m < ca[i].dims[2]; m++) {
531 ((int32_t *)ca[i].data)[n++] = ((int32_t *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
532 ca[i].dim[1][k] * array->dimension[2] +
541 ca[i].data = malloc(
sizeof(uint32_t) * vrows);
542 if (ca[i].dims[1] == 0) {
543 for (j = 0; j < ca[i].dims[0]; j++) {
544 ((uint32_t *)ca[i].data)[n++] = ((uint32_t *)array->data)[ca[i].dim[0][j]];
546 }
else if (ca[i].dims[2] == 0) {
547 for (j = 0; j < ca[i].dims[0]; j++) {
548 for (k = 0; k < ca[i].dims[1]; k++) {
549 ((uint32_t *)ca[i].data)[n++] = ((uint32_t *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
553 for (j = 0; j < ca[i].dims[0]; j++) {
554 for (k = 0; k < ca[i].dims[1]; k++) {
555 for (m = 0; m < ca[i].dims[2]; m++) {
556 ((uint32_t *)ca[i].data)[n++] = ((uint32_t *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
557 ca[i].dim[1][k] * array->dimension[2] +
566 ca[i].data = malloc(
sizeof(int64_t) * vrows);
567 if (ca[i].dims[1] == 0) {
568 for (j = 0; j < ca[i].dims[0]; j++) {
569 ((int64_t *)ca[i].data)[n++] = ((int64_t *)array->data)[ca[i].dim[0][j]];
571 }
else if (ca[i].dims[2] == 0) {
572 for (j = 0; j < ca[i].dims[0]; j++) {
573 for (k = 0; k < ca[i].dims[1]; k++) {
574 ((int64_t *)ca[i].data)[n++] = ((int64_t *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
578 for (j = 0; j < ca[i].dims[0]; j++) {
579 for (k = 0; k < ca[i].dims[1]; k++) {
580 for (m = 0; m < ca[i].dims[2]; m++) {
581 ((int64_t *)ca[i].data)[n++] = ((int64_t *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
582 ca[i].dim[1][k] * array->dimension[2] +
591 ca[i].data = malloc(
sizeof(uint64_t) * vrows);
592 if (ca[i].dims[1] == 0) {
593 for (j = 0; j < ca[i].dims[0]; j++) {
594 ((uint64_t *)ca[i].data)[n++] = ((uint64_t *)array->data)[ca[i].dim[0][j]];
596 }
else if (ca[i].dims[2] == 0) {
597 for (j = 0; j < ca[i].dims[0]; j++) {
598 for (k = 0; k < ca[i].dims[1]; k++) {
599 ((uint64_t *)ca[i].data)[n++] = ((uint64_t *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
603 for (j = 0; j < ca[i].dims[0]; j++) {
604 for (k = 0; k < ca[i].dims[1]; k++) {
605 for (m = 0; m < ca[i].dims[2]; m++) {
606 ((uint64_t *)ca[i].data)[n++] = ((uint64_t *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
607 ca[i].dim[1][k] * array->dimension[2] +
616 ca[i].data = malloc(
sizeof(
float) * vrows);
617 if (ca[i].dims[1] == 0) {
618 for (j = 0; j < ca[i].dims[0]; j++) {
619 ((
float *)ca[i].data)[n++] = ((
float *)array->data)[ca[i].dim[0][j]];
621 }
else if (ca[i].dims[2] == 0) {
622 for (j = 0; j < ca[i].dims[0]; j++) {
623 for (k = 0; k < ca[i].dims[1]; k++) {
624 ((
float *)ca[i].data)[n++] = ((
float *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
628 for (j = 0; j < ca[i].dims[0]; j++) {
629 for (k = 0; k < ca[i].dims[1]; k++) {
630 for (m = 0; m < ca[i].dims[2]; m++) {
631 ((
float *)ca[i].data)[n++] = ((
float *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
632 ca[i].dim[1][k] * array->dimension[2] +
641 ca[i].data = malloc(
sizeof(
double) * vrows);
642 if (ca[i].dims[1] == 0) {
643 for (j = 0; j < ca[i].dims[0]; j++) {
644 ((
double *)ca[i].data)[n++] = ((
double *)array->data)[ca[i].dim[0][j]];
646 }
else if (ca[i].dims[2] == 0) {
647 for (j = 0; j < ca[i].dims[0]; j++) {
648 for (k = 0; k < ca[i].dims[1]; k++) {
649 ((
double *)ca[i].data)[n++] = ((
double *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
653 for (j = 0; j < ca[i].dims[0]; j++) {
654 for (k = 0; k < ca[i].dims[1]; k++) {
655 for (m = 0; m < ca[i].dims[2]; m++) {
656 ((
double *)ca[i].data)[n++] = ((
double *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
657 ca[i].dim[1][k] * array->dimension[2] +
666 ca[i].data = malloc(
sizeof(
char *) * vrows);
667 if (ca[i].dims[1] == 0) {
668 for (j = 0; j < ca[i].dims[0]; j++) {
669 ((
char **)ca[i].data)[n++] = ((
char **)array->data)[ca[i].dim[0][j]];
671 }
else if (ca[i].dims[2] == 0) {
672 for (j = 0; j < ca[i].dims[0]; j++) {
673 for (k = 0; k < ca[i].dims[1]; k++) {
674 ((
char **)ca[i].data)[n++] = ((
char **)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
678 for (j = 0; j < ca[i].dims[0]; j++) {
679 for (k = 0; k < ca[i].dims[1]; k++) {
680 for (m = 0; m < ca[i].dims[2]; m++) {
681 ((
char **)ca[i].data)[n++] = ((
char **)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
682 ca[i].dim[1][k] * array->dimension[2] +
691 ca[i].data = malloc(
sizeof(
char) * vrows);
692 if (ca[i].dims[1] == 0) {
693 for (j = 0; j < ca[i].dims[0]; j++) {
694 ((
char *)ca[i].data)[n++] = ((
char *)array->data)[ca[i].dim[0][j]];
696 }
else if (ca[i].dims[2] == 0) {
697 for (j = 0; j < ca[i].dims[0]; j++) {
698 for (k = 0; k < ca[i].dims[1]; k++) {
699 ((
char *)ca[i].data)[n++] = ((
char *)array->data)[ca[i].dim[0][j] * array->dimension[1] + ca[i].dim[1][k]];
703 for (j = 0; j < ca[i].dims[0]; j++) {
704 for (k = 0; k < ca[i].dims[1]; k++) {
705 for (m = 0; m < ca[i].dims[2]; m++) {
706 ((
char *)ca[i].data)[n++] = ((
char *)array->data)[ca[i].dim[0][j] * (array->dimension[1] * array->dimension[2]) +
707 ca[i].dim[1][k] * array->dimension[2] +
716 fprintf(stderr,
"Error: Unsupported data type for array '%s'.\n", ca[i].name);
720 if (!
SDDS_SetColumn(&SDDS_dataset, SDDS_SET_BY_NAME, ca[i].data, virtual_rows, ca[i].new_name)) {
721 fprintf(stderr,
"Error: Problem setting column '%s'.\n", ca[i].new_name);
725 for (j = 0; j < array->definition->dimensions; j++) {
726 if (ca[i].dim[j] != NULL) {
730 if (ca[i].data != NULL) {
737 fprintf(stderr,
"Error: Problem writing page to file '%s'.\n", output);
754 if (buffer != NULL) {
757 for (i = 0; i < orig_array_names; i++) {
758 if (orig_array_name[i] != NULL) {
759 free(orig_array_name[i]);
762 if (orig_array_name != NULL) {
763 free(orig_array_name);
765 for (i = 0; i < orig_parameter_names; i++) {
766 if (orig_parameter_name[i] != NULL) {
767 free(orig_parameter_name[i]);
770 if (orig_parameter_name != NULL) {
771 free(orig_parameter_name);
773 for (i = 0; i < orig_column_names; i++) {
774 if (orig_column_name[i] != NULL) {
775 free(orig_column_name[i]);
778 if (orig_column_name != NULL) {
779 free(orig_column_name);
781 if (description_text != NULL) {
782 free(description_text);
784 if (description_contents != NULL) {
785 free(description_contents);
SDDS (Self Describing Data Set) Data Types Definitions and Function Prototypes.
int32_t SDDS_type_size[SDDS_NUM_TYPES]
Array of sizes for each supported data type.
int32_t SDDS_LengthenTable(SDDS_DATASET *SDDS_dataset, int64_t n_additional_rows)
int32_t SDDS_StartPage(SDDS_DATASET *SDDS_dataset, int64_t expected_n_rows)
int32_t SDDS_SetParameters(SDDS_DATASET *SDDS_dataset, int32_t mode,...)
int32_t SDDS_SetColumn(SDDS_DATASET *SDDS_dataset, int32_t mode, void *data, int64_t rows,...)
Sets the values for one data column in the current data table of an SDDS dataset.
int32_t SDDS_SetArray(SDDS_DATASET *SDDS_dataset, char *array_name, int32_t mode, void *data_pointer, int32_t *dimension)
Sets the values of an array variable in the SDDS dataset using specified dimensions.
int32_t SDDS_InitializeOutput(SDDS_DATASET *SDDS_dataset, int32_t data_mode, int32_t lines_per_row, const char *description, const char *contents, const char *filename)
Initializes the SDDS output dataset.
int32_t SDDS_WritePage(SDDS_DATASET *SDDS_dataset)
Writes the current data table to the output file.
int32_t SDDS_DefineColumn(SDDS_DATASET *SDDS_dataset, const char *name, const char *symbol, const char *units, const char *description, const char *format_string, int32_t type, int32_t field_length)
Defines a data column within the SDDS dataset.
int32_t SDDS_WriteLayout(SDDS_DATASET *SDDS_dataset)
Writes the SDDS layout header to the output file.
int32_t SDDS_TransferColumnDefinition(SDDS_DATASET *target, SDDS_DATASET *source, char *name, char *newName)
Transfers a column definition from a source dataset to a target dataset.
int32_t SDDS_TransferArrayDefinition(SDDS_DATASET *target, SDDS_DATASET *source, char *name, char *newName)
Transfers an array definition from a source dataset to a target dataset.
int32_t SDDS_TransferParameterDefinition(SDDS_DATASET *target, SDDS_DATASET *source, char *name, char *newName)
Transfers a parameter definition from a source dataset to a target dataset.
void SDDS_FreeArray(SDDS_ARRAY *array)
Frees memory allocated for an SDDS array structure.
void SDDS_SetError(char *error_text)
Records an error message in the SDDS error stack.
ARRAY_DEFINITION * SDDS_GetArrayDefinition(SDDS_DATASET *SDDS_dataset, char *name)
Retrieves the definition of a specified array from the SDDS dataset.
int32_t SDDS_FreeArrayDefinition(ARRAY_DEFINITION *source)
Frees memory allocated for an array definition.
char ** SDDS_GetParameterNames(SDDS_DATASET *SDDS_dataset, int32_t *number)
Retrieves the names of all parameters in the SDDS dataset.
char ** SDDS_GetColumnNames(SDDS_DATASET *SDDS_dataset, int32_t *number)
Retrieves the names of all columns in the SDDS dataset.
void SDDS_PrintErrors(FILE *fp, int32_t mode)
Prints recorded error messages to a specified file stream.
void SDDS_RegisterProgramName(const char *name)
Registers the executable program name for use in error messages.
void SDDS_Bomb(char *message)
Terminates the program after printing an error message and recorded errors.
char ** SDDS_GetArrayNames(SDDS_DATASET *SDDS_dataset, int32_t *number)
Retrieves the names of all arrays in the SDDS dataset.
#define SDDS_NUM_TYPES
Total number of defined SDDS data types.
#define SDDS_ULONG
Identifier for the unsigned 32-bit integer data type.
#define SDDS_FLOAT
Identifier for the float data type.
#define SDDS_STRING
Identifier for the string data type.
#define SDDS_ULONG64
Identifier for the unsigned 64-bit integer data type.
#define SDDS_LONG
Identifier for the signed 32-bit integer data type.
#define SDDS_SHORT
Identifier for the signed short integer data type.
#define SDDS_CHARACTER
Identifier for the character data type.
#define SDDS_USHORT
Identifier for the unsigned short integer data type.
#define SDDS_DOUBLE
Identifier for the double data type.
#define SDDS_LONG64
Identifier for the signed 64-bit integer data type.
void * trealloc(void *old_ptr, uint64_t size_of_block)
Reallocates a memory block to a new size.
void * tmalloc(uint64_t size_of_block)
Allocates a memory block of the specified size with zero initialization.
void bomb(char *error, char *usage)
Reports error messages to the terminal and aborts the program.
char * delete_chars(char *s, char *t)
Removes all occurrences of characters found in string t from string s.
long match_string(char *string, char **option, long n_options, long mode)
Matches a given string against an array of option strings based on specified modes.
long replaceFileAndBackUp(char *file, char *replacement)
Replaces a file with a replacement file and creates a backup of the original.
int scanargs(SCANNED_ARG **scanned, int argc, char **argv)
long processPipeOption(char **item, long items, unsigned long *flags)
void processFilenames(char *programName, char **input, char **output, unsigned long pipeFlags, long noWarnings, long *tmpOutputUsed)