31int32_t SDDS_isBigEndianMachine() {
38int32_t SDDS_identifyType(
char* typeName) {
41 "double",
"float",
"long",
"ulong",
"short",
"ushort",
"string",
"character"
44 "real64",
"real32",
"int32",
"uint32",
"int16",
"uint16",
"string",
"character"
49 if (strcasecmp(typeName, SDDS_type_name_old[i]) == 0)
55int32_t SDDS_verifyPrintfFormat(
char *
string, int32_t type) {
61 if ((percent = strchr(s,
'%'))) {
62 if (*(percent+1)!=
'%')
67 if (!percent || !*++percent)
74 if ((len = strcspn(
string,
"fegEG"))==strlen(
string))
78 if ((tmp=strspn(
string,
"-+.0123456789 "))<len)
82 if ((len = strcspn(
string,
"d"))==strlen(
string))
84 if (*(
string+len-1)!=
'l')
88 if ((tmp=strspn(
string,
"-+.0123456789 "))<len)
92 if ((len = strcspn(
string,
"u"))==strlen(
string))
94 if (*(
string+len-1)!=
'l')
98 if ((tmp=strspn(
string,
"-+.0123456789 "))<len)
102 if ((len = strcspn(
string,
"d"))==strlen(
string))
104 if (*(
string+len-1)!=
'h')
108 if ((tmp=strspn(
string,
"-+.0123456789 "))<len)
112 if ((len = strcspn(
string,
"u"))==strlen(
string))
114 if (*(
string+len-1)!=
'h')
118 if ((tmp=strspn(
string,
"-+.0123456789 "))<len)
122 if ((len = strcspn(
string,
"s"))==strlen(
string))
126 if ((tmp=strspn(
string,
"-0123456789"))<len)
130 if ((len = strcspn(
string,
"c"))==strlen(
string))
142int32_t SDDS_isValidType(int32_t type) {
149static uint32_t nameValidityFlags = 0;
150void SDDS_setNameValidityFlags(uint32_t flags) {
151 nameValidityFlags = flags;
154int32_t SDDS_isValidName(
char *name) {
157 char *validChars = (
char*)
"@:#+%-._$&/[]";
158 char *startChars = (
char*)
".:";
160 if (nameValidityFlags&SDDS_ALLOW_ANY_NAME) {
164 if (strlen(name)==0) {
166 }
else if (!(nameValidityFlags&SDDS_ALLOW_V15_NAME)) {
169 if (!(isalpha(*ptr) || strchr(startChars, *ptr))) {
173 while (isValid && *ptr) {
174 if (!(isalnum(*ptr) || strchr(validChars, *ptr))) {
185int32_t SDDS_fileIsLocked(
char *filename) {
188 if (!(fp = fopen(filename,
"rb")))
190 if (lockf(fileno(fp), F_TEST, 0)==-1) {
201int32_t SDDS_lockFile(FILE *fp,
char *filename,
char *caller) {
203 if (lockf(fileno(fp), F_TEST, 0)==-1) {
204 fprintf(stderr,
"Unable to access file %s--file is locked (%s)", filename, caller);
207 if (lockf(fileno(fp), F_TLOCK, 0)==-1) {
208 fprintf(stderr,
"Unable to establish lock on file %s (%s)", filename, caller);
217void *SDDS_calloc(
size_t nelem,
size_t elem_size) {
222 return(calloc(nelem, elem_size));
225void *SDDS_malloc(
size_t size) {
228 return(malloc(size));
231void SDDS_free(
void *mem) {
248int32_t SDDS_freeStringArray(
char **
string, int32_t strings) {
253 for (i=0; i<strings; i++) {
262void *SDDS_realloc(
void *old_ptr,
size_t new_size) {
270 return(SDDS_malloc(new_size));
272 return(realloc(old_ptr, new_size));
284int32_t SDDS_printNamelistField(FILE *fp,
char *name,
char *value) {
287 int32_t hasWhitespace;
291 if (!value || !strlen(name)) {
294 if (!strlen(value)) {
295 fprintf(fp,
"%s=\"\", ", name);
297 fprintf(fp,
"%s=", name);
300 if (SDDS_hasWhitespace(s) || SDDS_stringIsBlank(s) || (strpbrk(s,
" ,*$\t\n\b"))) {
308 }
else if (c==
'\\') {
314 }
else if (isspace(c) || !isprint(c)) {
315 fprintf(fp,
"\\%03o", c);
328int32_t SDDS_printNamelistField(voidp *gzfp,
char *name,
char *value) {
331 int32_t hasWhitespace;
335 if (!value || !strlen(name)) {
338 if (!strlen(value)) {
339 gzprintf(gzfp,
"%s=\"\", ", name);
341 gzprintf(gzfp,
"%s=", name);
344 if (SDDS_hasWhitespace(s) || SDDS_stringIsBlank(s) || (strpbrk(s,
" ,*$\t\n\b"))) {
352 }
else if (c==
'\\') {
353 gzputs(gzfp,
"\\\\");
355 gzputs(gzfp,
"\\\"");
358 }
else if (isspace(c) || !isprint(c)) {
359 gzprintf(gzfp,
"\\%03o", c);
380char *SDDS_blankToNull(
char *
string) {
381 if (!
string || SDDS_stringIsBlank(
string)) {
395int32_t SDDS_stringIsBlank(
char *
string) {
400 if (!isspace(*
string++)) {
415char* SDDS_getTypeName(int32_t type) {
417 "real64",
"real32",
"int32",
"uint32",
"int16",
"uint16",
"string",
"character"
433char* SDDS_getVer1TypeName(int32_t type) {
435 "double",
"float",
"long",
"ulong",
"short",
"ushort",
"string",
"character"
451char* SDDS_getVer2TypeName(int32_t type) {
453 "double",
"float",
"long",
"ulong",
"short",
"ushort",
"string",
"character"
469int32_t SDDS_hasWhitespace(
char *
string) {
474 if (isspace(*
string)) {
491int32_t SDDS_getNamelist(
char *buffer, int32_t buflen, FILE *fp) {
492 char *ptr, *flag, *buffer0;
495 while ((flag=SDDS_fgetsSkipComments(buffer, buflen, fp,
'!'))) {
496 if ((ptr=strchr(buffer,
'&')) && !SDDS_isQuoted(buffer, ptr,
'"')) {
503 n = strlen(buffer)-1;
504 if (buffer[n]==
'\n') {
506 if ((n-1 >= 0) && (buffer[n-1]==
'\r')) {
517 while (*ptr!=
'"' && *ptr) {
526 if (strncmp(ptr,
"&end", 4)==0) {
538 if ((n=strlen(buffer))>=4) {
542 (ptr==buffer || *(ptr-1)!=
'\\') &&
543 strncmp(ptr,
"&end", 4)==0 &&
544 !SDDS_isQuoted(buffer, ptr,
'"')) {
557 buflen -= strlen(buffer);
558 buffer += strlen(buffer);
559 while ((flag=SDDS_fgetsSkipComments(buffer, buflen, fp,
'!'))) {
560 n = strlen(buffer)-1;
561 if (buffer[n]==
'\n') {
563 if ((n-1 >= 0) && (buffer[n-1]==
'\r')) {
567 if ((ptr=strstr(buffer,
"&end")) && !SDDS_isQuoted(buffer0, ptr,
'"')) {
570 buflen -= strlen(buffer);
571 buffer += strlen(buffer);
579int32_t SDDS_getNamelist(
char *buffer, int32_t buflen, voidp *gzfp) {
580 char *ptr, *flag, *buffer0;
583 while ((flag=SDDS_fgetsSkipComments(buffer, buflen, gzfp,
'!'))) {
584 if ((ptr=strchr(buffer,
'&')) && !SDDS_isQuoted(buffer, ptr,
'"')) {
591 n = strlen(buffer)-1;
592 if (buffer[n]==
'\n') {
594 if ((n-1 >= 0) && (buffer[n-1]==
'\r')) {
605 while (*ptr!=
'"' && *ptr) {
614 if (strncmp(ptr,
"&end", 4)==0) {
626 if ((n=strlen(buffer))>=4) {
630 (ptr==buffer || *(ptr-1)!=
'\\') &&
631 strncmp(ptr,
"&end", 4)==0 &&
632 !SDDS_isQuoted(buffer, ptr,
'"')) {
645 buflen -= strlen(buffer);
646 buffer += strlen(buffer);
647 while ((flag=SDDS_fgetsSkipComments(buffer, buflen, gzfp,
'!'))) {
648 n = strlen(buffer)-1;
649 if (buffer[n]==
'\n') {
651 if ((n-1 >= 0) && (buffer[n-1]==
'\r')) {
655 if ((ptr=strstr(buffer,
"&end")) && !SDDS_isQuoted(buffer0, ptr,
'"')) {
658 buflen -= strlen(buffer);
659 buffer += strlen(buffer);
667char *SDDS_fgetsSkipComments(
char *s, int32_t slen, FILE *fp,
670 while (fgets(s, slen, fp)) {
671 if (s[0]!=skip_char) {
672 SDDS_cutOutComments(s, skip_char);
674 }
else if (s[1]==
'#') {
675 SDDS_parseSpecialComments(s+2);
681char *SDDS_fgetsSkipComments(
char *s, int32_t slen, voidp *gzfp,
684 while (gzgets(gzfp, s, slen)) {
685 if (s[0]!=skip_char) {
686 SDDS_cutOutComments(s, skip_char);
688 }
else if (s[1]==
'#') {
689 SDDS_parseSpecialComments(s+2);
695char *SDDS_fgetsSkipCommentsResize(
char **s, int32_t *slen, FILE *fp,
698 int32_t spaceLeft, length, newLine;
699 char *sInsert, *fgetsReturn;
704 while ((fgetsReturn=fgets(sInsert, spaceLeft, fp))) {
705 if (newLine && sInsert[0]==
'!') {
708 SDDS_cutOutComments(sInsert, skip_char);
709 length = strlen(sInsert);
710 if (sInsert[length-1]!=
'\n' && !feof(fp)) {
714 *s = (
char*)SDDS_realloc(*s,
sizeof(**s)**slen);
715 sInsert = *s + strlen(*s);
727char *SDDS_fgetsSkipCommentsResize(
char **s, int32_t *slen, voidp *gzfp,
730 int32_t spaceLeft, length, newLine;
731 char *sInsert, *fgetsReturn;
736 while ((fgetsReturn=gzgets(gzfp, sInsert, spaceLeft))) {
737 if (newLine && sInsert[0]==
'!') {
740 SDDS_cutOutComments(sInsert, skip_char);
741 length = strlen(sInsert);
742 if (sInsert[length-1]!=
'\n' && !gzeof(gzfp)) {
746 *s = (
char*)SDDS_realloc(*s,
sizeof(**s)**slen);
747 sInsert = *s + strlen(*s);
759void SDDS_cutOutComments(
char *s,
char cc) {
760 int32_t length, hasNewline;
769 if (s[length-1]==
'\n') {
776 SDDS_parseSpecialComments(s+2);
784 while (*++s && *s!=
'"')
793 if (s!=s0 && *(s-1)==
'\\') {
809#define COMMENT_COMMANDS 3
810static const char *commentCommandName[COMMENT_COMMANDS] = {
811 "big-endian",
"little-endian",
814#define SDDS_BIGENDIAN_SEEN 0x0001UL
815#define SDDS_LITTLEENDIAN_SEEN 0x0002UL
816#define SDDS_FIXED_ROWCOUNT_SEEN 0x0004UL
817static uint32_t commentCommandFlag[COMMENT_COMMANDS] = {
818 SDDS_BIGENDIAN_SEEN, SDDS_LITTLEENDIAN_SEEN,
819 SDDS_FIXED_ROWCOUNT_SEEN,
821static uint32_t commentFlags = 0;
823uint32_t SDDS_getSpecialCommentsModes() {
827void SDDS_resetSpecialCommentsModes() {
831void SDDS_parseSpecialComments(
char *s) {
832 char buffer[SDDS_MAXLINE];
837 while (SDDS_getToken(&s, &size, buffer, SDDS_MAXLINE)>0) {
838 for (i=0; i<COMMENT_COMMANDS; i++) {
839 if (strcmp(buffer, commentCommandName[i])==0) {
840 commentFlags |= commentCommandFlag[i];
847int32_t SDDS_getToken(
char **st, int32_t *strlength,
char *buffer, int32_t buflen) {
848 char *ptr0, *ptr1, *escptr, *s;
856 while (isspace(*s)) {
870 if (*s==
'\\' && *(s+1)==
'\\') {
875 }
while (*s && (*s!=
'"' || (*(s-1)==
'\\' && (s-1)!=escptr)));
885 if (*s==
'"' && *(s-1)!=
'\\') {
886 while (*++s && !(*s==
'"' && *(s-1)!=
'\\'))
889 }
while (*s && !isspace(*s));
892 if ((int32_t)(s-ptr1)>=buflen) {
895 strncpy(buffer, ptr1, s-ptr1);
900 *strlength -= s-ptr0;
903 return((int32_t)(s-ptr1));
906int32_t SDDS_isQuoted(
char *
string,
char *position,
char quotation_mark) {
907 int32_t in_quoted_section;
910 if (*position==quotation_mark) {
914 in_quoted_section = 0;
917 if (*
string==quotation_mark && (
string==string0 || *(
string-1)!=
'\\')) {
918 in_quoted_section = !in_quoted_section;
919 }
else if (
string==position) {
920 return(in_quoted_section);
927char *SDDS_prepareToParseTagValuePairs(
char *s) {
932 if ((length=strlen(s))>=4) {
935 if (*ptr==
'&' && (ptr==s || *(ptr-1)!=
'\\') && strncmp(ptr,
"&end", 4)==0
936 && !SDDS_isQuoted(s, ptr,
'"')) {
952 while (*s && *s!=
' ') {
967int32_t SDDS_copyString(
char **target,
char *source) {
971 if (!(*target=(
char*)SDDS_malloc(
sizeof(**target)*(strlen(source)+1)))) {
974 strcpy(*target, source);
983void SDDS_interpretEscapes(
char *s) {
1048 if (*s>=
'0' && *s<=
'9') {
1051 while (++count<=3 && *s>=
'0' && *s<=
'9')
1052 *ptr = 8*(*ptr) + *s++ -
'0';
1074int32_t SDDS_bufferedRead(
void *target,
size_t targetSize, FILE *fp,
1076 if (!fBuffer->bufferSize) {
1079 return(fseek(fp, targetSize, SEEK_CUR));
1081 return(fread(target, 1, targetSize, fp)!=targetSize);
1084 if ((fBuffer->bytesLeft-=targetSize)>=0) {
1087 memcpy((
char*)target, (
char*)fBuffer->data, targetSize);
1089 fBuffer->data += targetSize;
1093 int32_t bytesNeeded, offset;
1094 fBuffer->bytesLeft += targetSize;
1096 if ((offset=fBuffer->bytesLeft)) {
1099 memcpy((
char*)target, (
char*)fBuffer->data, offset);
1101 bytesNeeded = targetSize - offset;
1102 fBuffer->bytesLeft = 0;
1104 bytesNeeded = targetSize;
1106 fBuffer->data = fBuffer->buffer;
1107 if (fBuffer->bufferSize < bytesNeeded) {
1110 return(fseek(fp, bytesNeeded, SEEK_CUR));
1112 return(fread((
char*)target+offset, 1, bytesNeeded, fp)!=bytesNeeded);
1116 if ((fBuffer->bytesLeft = fread(fBuffer->data, 1, fBuffer->bufferSize, fp))<bytesNeeded) {
1120 memcpy((
char*)target+offset, (
char*)fBuffer->data, bytesNeeded);
1122 fBuffer->data += bytesNeeded;
1123 fBuffer->bytesLeft -= bytesNeeded;
1128int32_t SDDS_bufferedRead(
void *target,
size_t targetSize, voidp *gzfp,
1130 if (!fBuffer->bufferSize) {
1131 ((SDDSFile*)sddsfile)->setError((
char*)
"You must presently have a nonzero file buffer to use zLib (reading/writing .gz files");
1134 if ((fBuffer->bytesLeft-=targetSize)>=0) {
1137 memcpy((
char*)target, (
char*)fBuffer->data, targetSize);
1139 fBuffer->data += targetSize;
1143 int32_t bytesNeeded, offset;
1144 fBuffer->bytesLeft += targetSize;
1146 if ((offset=fBuffer->bytesLeft)) {
1149 memcpy((
char*)target, (
char*)fBuffer->data, offset);
1151 bytesNeeded = targetSize - offset;
1152 fBuffer->bytesLeft = 0;
1154 bytesNeeded = targetSize;
1156 fBuffer->data = fBuffer->buffer;
1157 if (fBuffer->bufferSize < bytesNeeded) {
1160 return(gzseek(gzfp, targetSize, SEEK_CUR));
1162 return(gzread(gzfp, (
char*)target, targetSize)!=targetSize);
1166 if ((fBuffer->bytesLeft = gzread(gzfp, fBuffer->data, fBuffer->bufferSize))<bytesNeeded) {
1170 memcpy((
char*)target+offset, (
char*)fBuffer->data, bytesNeeded);
1172 fBuffer->data += bytesNeeded;
1173 fBuffer->bytesLeft -= bytesNeeded;
1187int32_t SDDS_bufferedWrite(
void *target,
size_t targetSize, FILE *fp,
1189 if (!fBuffer->bufferSize) {
1190 return(fwrite(target, 1, targetSize, fp)!=targetSize);
1192 if ((fBuffer->bytesLeft-=targetSize)>=0) {
1193 memcpy((
char*)fBuffer->data, (
char*)target, targetSize);
1194 fBuffer->data += targetSize;
1202 lastLeft = (fBuffer->bytesLeft += targetSize);
1204 memcpy((
char*)fBuffer->data, (
char*)target, fBuffer->bytesLeft);
1205 if (fwrite(fBuffer->buffer, 1, fBuffer->bufferSize, fp)!=fBuffer->bufferSize)
1208 ((SDDSFile*)sddsfile)->setError((
char*)
"Problem flushing file (SDDS_bufferedWrite)");
1215 fBuffer->data = fBuffer->buffer;
1216 if ((targetSize -= lastLeft)>(fBuffer->bytesLeft = fBuffer->bufferSize)) {
1217 return(fwrite((
char*)target+lastLeft, 1, targetSize, fp)!=targetSize);
1222 memcpy((
char*)fBuffer->data, (
char*)target+lastLeft, targetSize);
1223 fBuffer->data += targetSize;
1224 fBuffer->bytesLeft -= targetSize;
1229int32_t SDDS_bufferedWrite(
void *target,
size_t targetSize, voidp *gzfp,
1231 if (!fBuffer->bufferSize) {
1232 ((SDDSFile*)sddsfile)->setError((
char*)
"You must presently have a nonzero file buffer to use zLib (reading/writing .gz files");
1234 if ((fBuffer->bytesLeft-=targetSize)>=0) {
1235 memcpy((
char*)fBuffer->data, (
char*)target, targetSize);
1236 fBuffer->data += targetSize;
1240 lastLeft = (fBuffer->bytesLeft += targetSize);
1241 memcpy((
char*)fBuffer->data, (
char*)target, fBuffer->bytesLeft);
1242 if (gzwrite(gzfp, fBuffer->buffer, fBuffer->bufferSize)!=fBuffer->bufferSize)
1244 fBuffer->bytesLeft = fBuffer->bufferSize;
1245 fBuffer->data = fBuffer->buffer;
1246 return(SDDS_bufferedWrite((
char*)target+lastLeft, targetSize-lastLeft, gzfp, fBuffer, sddsfile));
1259int32_t SDDS_flushBuffer(FILE *fp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1261 if (!fBuffer->bufferSize) {
1263 ((SDDSFile*)sddsfile)->setError((
char*)
"Problem flushing file (SDDS_flushBuffer)");
1268 if ((writeBytes = fBuffer->bufferSize - fBuffer->bytesLeft)) {
1270 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to flush buffer: negative byte count (SDDS_flushBuffer).");
1273 if (fwrite(fBuffer->buffer, 1, writeBytes, fp)!=writeBytes) {
1274 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to flush buffer: write operation failed (SDDS_flushBuffer).");
1277 fBuffer->bytesLeft = fBuffer->bufferSize;
1278 fBuffer->data = fBuffer->buffer;
1281 ((SDDSFile*)sddsfile)->setError((
char*)
"Problem flushing file (SDDS_flushBuffer)");
1287int32_t SDDS_flushBuffer(voidp *gzfp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1289 if ((writeBytes = fBuffer->bufferSize - fBuffer->bytesLeft)) {
1290 if (gzwrite(gzfp, fBuffer->buffer, writeBytes)!=writeBytes) {
1291 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to flush buffer: write operation failed (SDDS_flushBuffer).");
1294 fBuffer->bytesLeft = fBuffer->bufferSize;
1295 fBuffer->data = fBuffer->buffer;
1309int32_t SDDS_writeBinaryString(
char *
string, FILE *fp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1311 static char *dummy_string = (
char*)
"";
1312 if (
string == NULL) {
1313 string = dummy_string;
1315 length = strlen(
string);
1316 if (SDDS_bufferedWrite(&length,
sizeof(length), fp, fBuffer, sddsfile)) {
1317 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to write string--error writing length (SDDS_writeBinaryString)");
1320 if (length && SDDS_bufferedWrite(
string,
sizeof(*
string)*length, fp, fBuffer, sddsfile)) {
1321 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to write string--error writing contents (SDDS_writeBinaryString)");
1327int32_t SDDS_writeBinaryString(
char *
string, voidp *gzfp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1329 static char *dummy_string = (
char*)
"";
1330 if (
string == NULL) {
1331 string = dummy_string;
1333 length = strlen(
string);
1334 if (SDDS_bufferedWrite(&length,
sizeof(length), gzfp, fBuffer, sddsfile)) {
1335 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to write string--error writing length (SDDS_writeBinaryString)");
1338 if (length && SDDS_bufferedWrite(
string,
sizeof(*
string)*length, gzfp, fBuffer, sddsfile)) {
1339 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to write string--error writing contents (SDDS_writeBinaryString)");
1354int32_t SDDS_readBinaryString(
char **
string, FILE *fp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1356 if (SDDS_bufferedRead(&length, 4, fp, fBuffer, sddsfile)) {
1357 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to read string length (SDDS_readBinaryString)");
1360 if (!(*
string=(
char*)SDDS_malloc(
sizeof(
char)*(length+1)))) {
1361 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to allocate memory (SDDS_readBinaryString)");
1365 if (SDDS_bufferedRead(*
string,
sizeof(
char)*length, fp, fBuffer, sddsfile)) {
1366 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to read string (SDDS_readBinaryString)");
1370 (*string)[length] = 0;
1374int32_t SDDS_readBinaryString(
char **
string, voidp *gzfp,
SDDS_FILEBUFFER *fBuffer,
void *sddsfile) {
1376 if (SDDS_bufferedRead(&length, 4, gzfp, fBuffer, sddsfile)) {
1377 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to read string length (SDDS_readBinaryString)");
1380 if (!(*
string=(
char*)SDDS_malloc(
sizeof(
char)*(length+1)))) {
1381 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to allocate memory (SDDS_readBinaryString)");
1385 if (SDDS_bufferedRead(*
string,
sizeof(
char)*length, gzfp, fBuffer, sddsfile)) {
1386 ((SDDSFile*)sddsfile)->setError((
char*)
"Unable to read string (SDDS_readBinaryString)");
1390 (*string)[length] = 0;
1401static char *registeredProgramName = NULL;
1402void SDDS_registerProgramName(
const char *name) {
1404 if (SDDS_copyString(®isteredProgramName, (
char*)name)) {
1405 registeredProgramName = NULL;
1408 registeredProgramName = NULL;
1412char *SDDS_getProgramName() {
1413 return(registeredProgramName);
1427void SDDS_bomb(
char *message) {
1428 if (registeredProgramName)
1429 fprintf(stderr,
"Error (%s): %s\n", registeredProgramName, message?message:
"?");
1431 fprintf(stderr,
"Error: %s\n", message?message:
"?");
1435void SDDS_warning(
char *message) {
1436 if (registeredProgramName)
1437 fprintf(stderr,
"Warning (%s): %s\n", registeredProgramName, message?message:
"?");
1439 fprintf(stderr,
"Warning: %s\n", message?message:
"?");
char * SDDS_type_name[SDDS_NUM_TYPES]
Array of supported data type names.
#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_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.