23 #define FFND_LIB_VER "4.2.3"
26 #error "You must define FREEFORM as a preprocessor name."
27 #error "You must do this for the benefit of files in the FreeForm project"
28 #error "which do not include freeform.h"
88 #define TOO_MANY_MACHINES
97 #define FF_OS FF_OS_DOS
100 #define FF_CC FF_CC_MSVC1
105 #error "A PC compiler has already been defined"
107 #define FF_CC FF_CC_MSVC4
112 #define FF_CC FF_CC_MSVC1
120 #define TOO_MANY_MACHINES
129 #define FF_OS FF_OS_UNIX
130 #define FF_CC FF_CC_UNIX
137 #define TOO_MANY_MACHINES
146 #define FF_OS FF_OS_UNIX
147 #define FF_CC FF_CC_UNIX
154 #define TOO_MANY_MACHINES
163 #define FF_OS FF_OS_UNIX
164 #define FF_CC FF_CC_UNIX
171 #define TOO_MANY_MACHINES
180 #define FF_OS FF_OS_MAC
181 #define FF_CC FF_CC_MACCW
188 #define TOO_MANY_MACHINES
197 #define FF_OS FF_OS_UNIX
198 #define FF_CC FF_CC_UNIX
205 #define TOO_MANY_MACHINES
214 #define FF_OS FF_OS_UNIX
215 #define FF_CC FF_CC_UNIX
222 #define TOO_MANY_MACHINES
231 #define FF_OS FF_OS_UNIX
232 #define FF_CC FF_CC_UNIX
243 #define TOO_MANY_MACHINES
252 #define FF_OS FF_OS_UNIX
253 #define FF_CC FF_CC_UNIX
258 #error "Machine type has not been defined."
259 #error "Please define one in your makefile or project."
262 #ifdef TOO_MANY_MACHINES
263 #error "More than one machine type has been defined"
265 #error "PC is currently defined"
268 #error "SUN is currently defined"
271 #error "IRIS4 is currently defined"
274 #error "MAC is currently defined"
277 #error "IBM6000 is currently defined"
280 #error "HP9000 is currently defined"
283 #error "DEC_ALPHA is currently defined"
286 #error "IRIX is currently defined"
288 #error "Please check your makefile or project."
291 #if !defined(LONGS_ARE_32) && !defined(LONGS_ARE_64)
292 #error "longs have not been defined as either 32 or 64 bits"
293 #error "This should never happen, contact support"
297 #error "A C compiler has not been defined"
313 #error "An operating system has not been defined"
334 #define UNIX_DIR_SEPARATOR '/'
335 #define UNIX_DIR_SEPARATOR_STRING "/"
337 #define MAC_DIR_SEPARATOR ':'
338 #define MAC_DIR_SEPARATOR_STRING ":"
340 #define DOS_DIR_SEPARATOR '\\'
341 #define DOS_DIR_SEPARATOR_STRING "\\"
347 #if FF_OS == FF_OS_MACOS
349 #define NATIVE_DIR_SEPARATOR MAC_DIR_SEPARATOR
350 #define NATIVE_DIR_SEPARATOR_STRING MAC_DIR_SEPARATOR_STRING
354 #if FF_OS == FF_OS_DOS
356 #define NATIVE_DIR_SEPARATOR DOS_DIR_SEPARATOR
357 #define NATIVE_DIR_SEPARATOR_STRING DOS_DIR_SEPARATOR_STRING
361 #if FF_OS == FF_OS_UNIX
363 #define NATIVE_DIR_SEPARATOR UNIX_DIR_SEPARATOR
364 #define NATIVE_DIR_SEPARATOR_STRING UNIX_DIR_SEPARATOR_STRING
371 #define FFNT_UINT16 3
373 #define FFNT_UINT32 5
375 #define FFNT_UINT64 7
376 #define FFNT_FLOAT32 8
377 #define FFNT_FLOAT64 9
378 #define FFNT_ENOTE 10
380 #ifdef WANT_NCSA_TYPES
382 typedef signed char int8;
383 typedef unsigned char uint8;
384 typedef signed short int int16;
385 typedef unsigned short int uint16;
386 typedef float float32;
387 typedef double float64;
394 #define SIZE_UINT16 2
396 #define SIZE_UINT32 4
398 #define SIZE_UINT64 8
399 #define SIZE_INT128 16
400 #define SIZE_UINT128 16
402 #define SIZE_FLOAT32 4
403 #define SIZE_FLOAT64 8
404 #define SIZE_ENOTE SIZE_FLOAT64
405 #define SIZE_FLOAT128 16
407 typedef double big_var_type;
410 #define FFV_INT8_MIN (-SCHAR_MAX-1)
411 #define FFV_INT8_MAX SCHAR_MAX
412 #define FFV_UINT8_MIN 0
413 #define FFV_UINT8_MAX UCHAR_MAX
414 #define FFV_INT16_MIN (-SHRT_MAX-1)
415 #define FFV_INT16_MAX SHRT_MAX
416 #define FFV_UINT16_MIN 0
417 #define FFV_UINT16_MAX USHRT_MAX
418 #define FFV_FLOAT32_MIN -FLT_MAX
419 #define FFV_FLOAT32_MAX FLT_MAX
420 #define FFV_FLOAT64_MIN -DBL_MAX
421 #define FFV_FLOAT64_MAX DBL_MAX
422 #define FFV_ENOTE_MIN FFV_FLOAT64_MIN
423 #define FFV_ENOTE_MAX FFV_FLOAT64_MAX
425 #define FFV_FLOAT32_EPSILON FLT_EPSILON
426 #define FFV_FLOAT64_EPSILON DBL_EPSILON
427 #define FFV_ENOTE_EPSILON FFV_FLOAT64_EPSILON
437 #error "longs have been defined as both 32 and 64 bits"
438 #error "This should never happen, contact support"
441 #ifdef WANT_NCSA_TYPES
443 typedef signed long int int32;
444 typedef unsigned long int uint32;
450 #define FFV_INT32_MIN (-LONG_MAX-1)
451 #define FFV_INT32_MAX LONG_MAX
452 #define FFV_UINT32_MIN 0
453 #define FFV_UINT32_MAX ULONG_MAX
454 #define FFV_INT64_MIN 0
455 #define FFV_INT64_MAX 0
456 #define FFV_UINT64_MIN 0
457 #define FFV_UINT64_MAX 0
464 #error "longs have been defined as both 32 and 64 bits"
465 #error "This should never happen, contact support"
468 #ifdef WANT_NCSA_TYPES
470 typedef signed int int32;
471 typedef unsigned int uint32;
472 typedef signed long int int64;
473 typedef unsigned long int uint64;
477 #define FFV_INT32_MIN (-INT_MAX-1)
478 #define FFV_INT32_MAX INT_MAX
479 #define FFV_UINT32_MIN 0
480 #define FFV_UINT32_MAX UINT_MAX
481 #define FFV_INT64_MIN (-LONG_MAX-1)
482 #define FFV_INT64_MAX LONG_MAX
483 #define FFV_UINT64_MIN 0
484 #define FFV_UINT64_MAX ULONG_MAX
492 #define FFV_NULL (FF_TYPES_t)0x00000000
494 #define FFV_SIZE_1 (FF_TYPES_t)0x00000001
495 #define FFV_SIZE_2 (FF_TYPES_t)0x00000002
496 #define FFV_UNSIGNED (FF_TYPES_t)0x00000004
497 #define FFV_INTEGER (FF_TYPES_t)0x00000008
498 #define FFV_REAL (FF_TYPES_t)0x00000010
499 #define FFV_TEXT (FF_TYPES_t)0x00000020
502 #define FFV_CHAR FFV_TEXT
504 #define FFV_CONSTANT (FF_TYPES_t)0x00000040
505 #define FFV_INITIAL (FF_TYPES_t)0x00000080
506 #define FFV_EOL (FF_TYPES_t)0x00000140
509 #define FFV_DATA_TYPES (FF_TYPES_t)0x000001FF
511 #define FFV_CONVERT (FF_TYPES_t)0x00000200
512 #define FFV_EQUATION (FF_TYPES_t)0x00000400
513 #define FFNT_CONSTANT (FF_TYPES_t)0x00000800
514 #define FFNT_EQUIV (FF_TYPES_t)0x00001000
515 #define FFV_TRANSLATOR (FF_TYPES_t)0x00002000
516 #define FFV_ORPHAN (FF_TYPES_t)0x00004000
517 #define FFV_EQN (FF_TYPES_t)0x00008000
518 #define FFV_BIT_FIELD (FF_TYPES_t)0x00010000
520 #define FFV_RECORD (FF_TYPES_t)0x00010000
521 #define FFV_INTERNAL (FF_TYPES_t)0x00020000
522 #define FFV_DELIM_VALUE (FF_TYPES_t)0x00040000
523 #define FFV_DELIM_ITEM (FF_TYPES_t)0x00080000
524 #define FFV_PARAM_NAME (FF_TYPES_t)0x00100000
525 #define FFV_PARAM_VALUE (FF_TYPES_t)0x00200000
527 #define DONT_USE_THIS_BIT_PATTERN 0x40000000
529 #define FFV_INT8 ( FFV_INTEGER)
530 #define FFV_UINT8 (FFV_UNSIGNED | FFV_INTEGER)
531 #define FFV_INT16 ( FFV_INTEGER | FFV_SIZE_1)
532 #define FFV_UINT16 (FFV_UNSIGNED | FFV_INTEGER | FFV_SIZE_1)
533 #define FFV_INT32 ( FFV_INTEGER | FFV_SIZE_2)
534 #define FFV_UINT32 (FFV_UNSIGNED | FFV_INTEGER | FFV_SIZE_2)
535 #define FFV_INT64 ( FFV_INTEGER | FFV_SIZE_1 | FFV_SIZE_2)
536 #define FFV_UINT64 (FFV_UNSIGNED | FFV_INTEGER | FFV_SIZE_1 | FFV_SIZE_2)
537 #define FFV_FLOAT32 ( FFV_REAL | FFV_SIZE_2)
538 #define FFV_FLOAT64 ( FFV_REAL | FFV_SIZE_1 | FFV_SIZE_2)
539 #define FFV_ENOTE ( FFV_REAL)
541 #define FFV_UCHAR FFV_UINT8
542 #define FFV_SHORT FFV_INT16
543 #define FFV_USHORT FFV_UINT16
546 #define FFV_LONG FFV_INT32
547 #define FFV_ULONG FFV_UINT32
551 #define FFV_LONG FFV_INT64
552 #define FFV_ULONG FFV_UINT64
555 #define FFV_FLOAT FFV_FLOAT32
556 #define FFV_DOUBLE FFV_FLOAT64
558 #define IS_TEXT_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_TEXT)
559 #define IS_INT8_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_INT8)
560 #define IS_UINT8_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_UINT8)
561 #define IS_INT16_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_INT16)
562 #define IS_UINT16_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_UINT16)
563 #define IS_INT32_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_INT32)
564 #define IS_UINT32_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_UINT32)
565 #define IS_INT64_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_INT64)
566 #define IS_UINT64_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_UINT64)
567 #define IS_FLOAT32_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_FLOAT32)
568 #define IS_FLOAT64_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_FLOAT64)
569 #define IS_ENOTE_TYPE(t) (FFV_DATA_TYPE_TYPE(t) == FFV_ENOTE)
570 #define IS_EQN_TYPE(t) ((t) & FFV_EQN)
571 #define IS_CONSTANT_TYPE(t)((t) ? (((t) & FFV_CONSTANT) == FFV_CONSTANT) : FALSE)
572 #define IS_INITIAL_TYPE(t) ((t) ? (((t) & FFV_INITIAL) == FFV_INITIAL) : FALSE)
574 #define IS_RECORD_TYPE(t) ((t) & FFV_RECORD)
576 #define IS_INTERNAL_TYPE(t) ((t) & FFV_INTERNAL)
578 #define IS_DELIM_VALUE_TYPE(t) ((t) & FFV_DELIM_VALUE)
579 #define IS_DELIM_ITEM_TYPE(t) ((t) & FFV_DELIM_ITEM)
580 #define IS_PARAM_NAME_TYPE(t) ((t) & FFV_PARAM_NAME)
581 #define IS_PARAM_VALUE_TYPE(t) ((t) & FFV_PARAM_VALUE)
583 #define IS_TEXT(v) IS_TEXT_TYPE(FFV_DATA_TYPE(v))
584 #define IS_INT8(v) IS_INT8_TYPE(FFV_DATA_TYPE(v))
585 #define IS_UINT8(v) IS_UINT8_TYPE((FFV_DATA_TYPE(v))
586 #define IS_INT16(v) IS_INT16_TYPE(FFV_DATA_TYPE(v))
587 #define IS_UINT16(v) IS_UINT16_TYPE(FFV_DATA_TYPE(v))
588 #define IS_INT32(v) IS_INT32_TYPE(FFV_DATA_TYPE(v))
589 #define IS_UINT32(v) IS_UINT32_TYPE(FFV_DATA_TYPE(v))
590 #define IS_INT64(v) IS_INT64_TYPE(FFV_DATA_TYPE(v))
591 #define IS_UINT64(v) IS_UINT64_TYPE(FFV_DATA_TYPE(v))
592 #define IS_FLOAT32(v) IS_FLOAT32_TYPE(FFV_DATA_TYPE(v))
593 #define IS_FLOAT64(v) IS_FLOAT64_TYPE(FFV_DATA_TYPE(v))
594 #define IS_ENOTE(v) IS_ENOTE_TYPE(FFV_DATA_TYPE(v))
595 #define IS_EQN(v) IS_EQN_TYPE(FFV_TYPE(v))
597 #define IS_RECORD_VAR(v) IS_RECORD_TYPE(FFV_TYPE(v))
599 #define IS_INTERNAL_VAR(v) IS_INTERNAL_TYPE(FFV_TYPE(v))
601 #define IS_DELIM_VALUE_VAR(v) IS_DELIM_VALUE_TYPE(FFV_TYPE(v))
602 #define IS_DELIM_ITEM_VAR(v) IS_DELIM_ITEM_TYPE(FFV_TYPE(v))
603 #define IS_PARAM_NAME_VAR(v) IS_PARAM_NAME_TYPE(FFV_TYPE(v))
604 #define IS_PARAM_VALUE_VAR(v) IS_PARAM_VALUE_TYPE(FFV_TYPE(v))
606 #define IS_UNSIGNED(v) (FFV_DATA_TYPE(v) & FFV_UNSIGNED)
607 #define IS_INTEGER(v) (FFV_DATA_TYPE(v) & FFV_INTEGER)
608 #define IS_REAL(v) (FFV_DATA_TYPE(v) & FFV_REAL)
610 #define IS_UNSIGNED_TYPE(t) (FFV_DATA_TYPE_TYPE(t) & FFV_UNSIGNED)
611 #define IS_INTEGER_TYPE(t) (FFV_DATA_TYPE_TYPE(t) & FFV_INTEGER)
612 #define IS_REAL_TYPE(t) (FFV_DATA_TYPE_TYPE(t) & FFV_REAL)
614 #define IS_BIT_FIELD(v) ((v) ? (((v)->type & FFV_BIT_FIELD) == FFV_BIT_FIELD) : FALSE)
615 #define IS_CONVERT(v) ((v) ? (((v)->type & FFV_CONVERT) == FFV_CONVERT) : FALSE)
616 #define IS_CONSTANT(v) ((v) ? IS_CONSTANT_TYPE(FFV_TYPE(v)) : FALSE)
617 #define IS_INITIAL(v) ((v) ? IS_INITIAL_TYPE(FFV_TYPE(v)) : FALSE)
618 #define IS_EQUATION(v) ((v) ? ((v)->type & FFV_EQUATION) == FFV_EQUATION : FALSE)
619 #define IS_TRANSLATOR(v) ((v) ? ((v)->type & FFV_TRANSLATOR) == FFV_TRANSLATOR : FALSE)
620 #define IS_ORPHAN_VAR(v) ((v) ? ((v)->type & FFV_ORPHAN) == FFV_ORPHAN : FALSE)
621 #define IS_EOL(v) ((v) ? ((v)->type & FFV_EOL) == FFV_EOL : FALSE)
622 #define IS_FLAG(v) ((v) ? (v)->type == FF_VAR_TYPE_FLAG : FALSE)
625 #define FF_VAR_TYPE_FLAG (FF_TYPES_t)0xffffffff
627 #define IS_KEYWORDED_PARAMETER(p) ((p)[0] == '$')
635 #define NUM_VARIABLE_TYPES 25
639 #define FFF_FILE_TYPES (FFF_BINARY | FFF_ASCII | FFF_FLAT)
640 #define FFF_DATA_TYPES (FFF_DATA | FFF_HEADER | FFF_FILE | FFF_REC)
641 #define FFF_GROUP (FFF_FILE_TYPES | FFF_DATA_TYPES)
646 #define FFF_NULL (FF_TYPES_t)0x00000000
647 #define FFF_BINARY (FF_TYPES_t)0x00000001
648 #define FFF_ASCII (FF_TYPES_t)0x00000002
649 #define FFF_FLAT (FF_TYPES_t)0x00000004
652 #define FFF_TABLE (FF_TYPES_t)0x00000008
653 #define FFF_HEADER (FF_TYPES_t)0x00000010
654 #define FFF_FILE (FF_TYPES_t)0x00000020
655 #define FFF_REC (FF_TYPES_t)0x00000040
656 #define FFF_DATA (FF_TYPES_t)0x00000080
658 #define FFF_SEPARATE (FF_TYPES_t)0x00000100
659 #define FFF_VARIED (FF_TYPES_t)0x00000200
660 #define FFF_INPUT (FF_TYPES_t)0x00000400
661 #define FFF_OUTPUT (FF_TYPES_t)0x00000800
662 #define FFF_IO (FF_TYPES_t)0x00000C00
664 #define FFF_SCALE (FF_TYPES_t)0x00001000
665 #define FFF_ADD_HERE (FF_TYPES_t)0x00002000
666 #define FFF_DELETE_ME (FF_TYPES_t)0X00008000
668 #define FF_ARRAY (FF_TYPES_t)0x40000000
669 #define FFF_RECORD (FF_TYPES_t)0x80000000
672 #define IS_ARRAY_TYPE(t) ((t) & FF_ARRAY)
673 #define IS_ARRAY(x) IS_ARRAY_TYPE(FFF_TYPE(x))
675 #define FFF_ALL_TYPES (FF_TYPES_t)0x0000FFFF
678 #define IS_BINARY_TYPE(t) ((t) & FFF_BINARY)
679 #define IS_ASCII_TYPE(t) ((t) & FFF_ASCII)
680 #define IS_FLAT_TYPE(t) ((t) & FFF_FLAT)
682 #define IS_TABLE_TYPE(t) ((t) & FFF_TABLE)
683 #define IS_DATA_TYPE(t) ((t) & FFF_DATA)
684 #define IS_HEADER_TYPE(t) ((t) & FFF_HEADER)
685 #define IS_FILE_TYPE(t) ((t) & FFF_FILE)
686 #define IS_REC_TYPE(t) ((t) & FFF_REC)
687 #define IS_FILE_HEADER_TYPE(t) (IS_FILE_TYPE(t) && IS_HEADER_TYPE(t))
688 #define IS_REC_HEADER_TYPE(t) (IS_REC_TYPE(t) && IS_HEADER_TYPE(t))
689 #define IS_SEPARATE_TYPE(t) ((t) & FFF_SEPARATE)
690 #define IS_EMBEDDED_TYPE(t) (!IS_SEPARATE_TYPE(t))
691 #define IS_VARIED_TYPE(t) ((t) & FFF_VARIED)
692 #define IS_INPUT_TYPE(t) ((t) & FFF_INPUT)
693 #define IS_OUTPUT_TYPE(t) ((t) & FFF_OUTPUT)
694 #define IS_SCALE_TYPE(t) ((t) & FFF_SCALE)
696 #define IS_RECORD_FORMAT_TYPE(t) ((t) & FFF_RECORD)
698 #define IS_BINARY(f) IS_BINARY_TYPE(FFF_TYPE(f))
699 #define IS_ASCII(f) IS_ASCII_TYPE(FFF_TYPE(f))
700 #define IS_FLAT(f) IS_FLAT_TYPE(FFF_TYPE(f))
702 #define IS_TABLE(f) IS_TABLE_TYPE(FFF_TYPE(f))
703 #define IS_DATA(f) IS_DATA_TYPE(FFF_TYPE(f))
704 #define IS_HEADER(f) IS_HEADER_TYPE(FFF_TYPE(f))
705 #define IS_FILE(f) IS_FILE_TYPE(FFF_TYPE(f))
706 #define IS_FILE_HEADER(f) (IS_FILE_HEADER_TYPE(FFF_TYPE(f)))
707 #define IS_REC_HEADER(f) (IS_REC_HEADER_TYPE(FFF_TYPE(f)))
708 #define IS_REC(f) IS_REC_TYPE(FFF_TYPE(f))
709 #define IS_SEPARATE(f) IS_SEPARATE_TYPE(FFF_TYPE(f))
710 #define IS_EMBEDDED(f) (!IS_SEPARATE(f))
711 #define IS_VARIED(f) IS_VARIED_TYPE(FFF_TYPE(f))
712 #define IS_INPUT(f) IS_INPUT_TYPE(FFF_TYPE(f))
713 #define IS_OUTPUT(f) IS_OUTPUT_TYPE(FFF_TYPE(f))
714 #define IS_SCALE(f) IS_SCALE_TYPE(FFF_TYPE(f))
716 #define IS_RECORD_FORMAT(f) IS_RECORD_FORMAT_TYPE(FFF_TYPE(f))
718 #define NUM_FORMAT_TYPES 71
721 #define FF_DBG_LOG "ff_debug.log"
722 #define FF_DBG_LOG_SIZE 10240
731 #if defined(DEBUG) || defined(_DEBUG) && !defined(FF_DBG)
735 #define assert(exp) ff_err_assert(exp)
738 #define ff_err_assert(exp) ((void)0)
740 #define ff_err_assert(exp) ( (exp) ? (void)0 : _ff_err_assert(#exp, __FILE__, __LINE__) )
746 #define FF_VALIDATE(o) (((o) && ((void *)(o) == (o)->check_address)) ? (void)0 : _ff_err_assert(#o, __FILE__, __LINE__))
748 #define FF_VALIDATE(o)
760 #define DOUBLE_UP DBL_EPSILON
761 #define FLOAT_UP FLT_EPSILON
764 #if FF_CC == FF_CC_UNIX
767 #include <sys/types.h>
768 #include <sys/stat.h>
775 #if FF_CC == FF_CC_MSVC1 || FF_CC == FF_CC_MSVC4
779 #include <sys\types.h>
780 #include <sys\stat.h>
794 #if FF_CC == FF_CC_MSVC1
806 #define FD_FORMAT(fd) ((fd)->format)
807 #define FFF_FIRST(fl) dll_first(fl)
808 #define FFF_NEXT(fl) dll_next(fl)
809 #define FD_FIRST(fdl) dll_first(fdl)
810 #define FD_LAST(fdl) dll_last(fdl)
811 #define FFV_FIRST_VARIABLE(f) ((VARIABLE_LIST)dll_first((f)->variables))
812 #define FFV_NEXT_VARIABLE(vl) dll_next(vl)
813 #define FORMAT_LENGTH(f) ((size_t)(f)->length)
814 #define FF_VAR_LENGTH(v) ((size_t)(v)->end_pos - (size_t)(v)->start_pos + (size_t)1)
816 #define FFV_TYPE(v) ((v)->type)
817 #define FFV_DATA_TYPE_TYPE(t) ((t) & FFV_DATA_TYPES)
818 #define FFV_DATA_TYPE(v) FFV_DATA_TYPE_TYPE(FFV_TYPE(v))
819 #define FFF_TYPE(f) ((f)->type)
820 #define FFF_FORMAT_TYPE(f) (FFF_TYPE(f) & FFF_ALL_TYPES)
821 #define FD_TYPE(fd) (FFF_TYPE((fd)->format) & FFF_DATA_TYPES)
823 #define FD_IS_NATIVE_BYTE_ORDER(fd) (endian() == (BOOLEAN)(fd)->state.byte_order)
825 #define MAX_PV_LENGTH MAX_PATH
826 #define MAX_NAME_LENGTH MAX_PV_LENGTH
827 #define TMP_BUFFER_SIZE 1024
828 #define LOGGING_QUANTA 10240U
829 #define SCRATCH_QUANTA 1024U
831 #define FMT_BUFSIZE_BUFFER_SIZE 4096
860 #define BUFSIZE_TOTAL_BYTES_UNKNOWN INT_MAX
958 #define FF_MAX_NAME MAX_PATH
960 #define FFV_MISC_INIT NULL
986 #define FORMAT_NAME_INIT "Format Was Untitled"
987 #define FORMAT_LOCUS_INIT "Unknown Origin"
988 #define FORMAT_LOCUS_GV_EDIT "GeoVu Format Editor"
1007 void *check_address;
1023 void* check_address;
1037 void *check_address;
1066 void *check_address;
1096 void *check_address;
1139 void *check_address;
1149 #if defined(_DEBUG) || defined(DEBUG)
1153 FF_BUFSIZE_PTR bufsize;
1181 void *check_address;
1196 void *check_address;
1197 void *locked_buffer;
1212 void *check_address;
1234 #define FF_VARIABLE(vl) ((VARIABLE_PTR)(vl)->data.u.var)
1235 #define FF_FORMAT(fl) ((FORMAT_PTR)(fl)->data.u.fmt)
1236 #define FD_FORMAT_DATA(fdl) ((FORMAT_DATA_PTR)(fdl)->data.u.fd)
1237 #define FF_AC(acl) ((FF_ARRAY_CONDUIT_PTR)(acl)->data.u.ac)
1238 #define FF_PI(pil) ((PROCESS_INFO_PTR)(pil)->data.u.pi)
1239 #define FF_EP(el) ((FF_ERROR_PTR)(el)->data.u.err)
1240 #define FF_DF(dfl) ((FF_DATA_FLAG_PTR)(dfl)->data.u.df)
1242 #define dll_next(n) ((n)->next)
1243 #define dll_previous(n) ((n)->previous)
1281 void *check_address;
1287 unsigned int status;
1297 void *check_address;
1311 void *check_address;
1321 #define DEFAULT_CACHE_SIZE 16384L
1323 #define FF_MAX_CACHE_SIZE (unsigned long)UINT_MAX
1325 #define DBSET_INPUT_FORMATS 1
1326 #define DBSET_OUTPUT_FORMATS 2
1327 #define DBSET_HEADERS 3
1328 #define DBSET_READ_EQV 4
1329 #define DBSET_CACHE_SIZE 5
1330 #define DBSET_HEADER_FILE_NAMES 6
1331 #define DBSET_QUERY_RESTRICTION 7
1332 #define DBSET_VARIABLE_RESTRICTION 8
1333 #define DBSET_BYTE_ORDER 9
1334 #define DBSET_CREATE_CONDUITS 10
1335 #define DBSET_USER_UPDATE_FORMATS 11
1336 #define DBSET_INIT_CONDUITS 12
1337 #define DBSET_FORMAT_MAPPINGS 13
1338 #define DBSET_EQUATION_VARIABLES 14
1339 #define DBSET_SETUP_STDIN 15
1340 #define DBSET_VAR_MINMAX 16
1342 #define DBASK_FORMAT_SUMMARY 1
1343 #define DBASK_PROCESS_INFO 2
1344 #define DBASK_VAR_NAMES 3
1345 #define DBASK_VAR_MINS 4
1346 #define DBASK_VAR_MAXS 5
1347 #define DBASK_VAR_UNITS 6
1348 #define DBASK_VAR_FLAGS 7
1349 #define DBASK_ARRAY_DIM_NAMES 8
1350 #define DBASK_ARRAY_DIM_INFO 9
1351 #define DBASK_BYTES_TO_PROCESS 10
1352 #define DBASK_FORMAT_DESCRIPTION 11
1353 #define DBASK_FORMAT_LIST_DESCRIPTION 12
1354 #define DBASK_TAB_TO_ARRAY_FORMAT_DESCRIPTION 13
1355 #define DBASK_FORMAT_DESCRIPTION_TO_USER 14
1356 #define DBASK_FORMAT_LIST_DESCRIPTION_TO_USER 15
1358 #define DBDO_READ_FORMATS 1
1359 #define DBDO_WRITE_FORMATS 2
1360 #define DBDO_CONVERT_DATA 3
1361 #define DBDO_BYTE_SWAP 4
1362 #define DBDO_FILTER_ON_QUERY 5
1363 #define DBDO_CONVERT_FORMATS 6
1364 #define DBDO_PROCESS_FORMATS 7
1365 #define DBDO_READ_STDIN 8
1366 #define DBDO_CHECK_STDOUT 9
1367 #define DBDO_PROCESS_DATA 10
1370 #define DBDO_WRITE_OUTPUT_FMT_FILE 255
1373 #error "NT_ANYWHERE is already defined!"
1375 #define NT_HEADERS FFF_FILE | FFF_REC | FFF_HEADER
1376 #define NT_TABLE FFF_TABLE
1378 #define NT_INPUT FFF_INPUT | NT_HEADERS | NT_TABLE
1379 #define NT_OUTPUT FFF_OUTPUT | NT_HEADERS | NT_TABLE
1381 #define NT_ANYWHERE FFF_FILE | FFF_REC | FFF_HEADER | FFF_TABLE
1384 #define PINFO_POLE(pi) ((pi)->pole)
1385 #define PINFO_FD(pi) (PINFO_POLE(pi)->fd)
1386 #define PINFO_DATA(pi) (PINFO_FD(pi)->data)
1387 #define PINFO_BUFFER(pi) (PINFO_DATA(pi)->buffer)
1388 #define PINFO_BYTES_USED(pi) (PINFO_DATA(pi)->bytes_used)
1389 #define PINFO_TOTAL_BYTES(pi) (PINFO_DATA(pi)->total_bytes)
1390 #define PINFO_STATE(pi) (PINFO_FD(pi)->state)
1391 #define PINFO_LOCKED(pi) (PINFO_STATE(pi).locked)
1392 #define PINFO_NEW_RECORD(pi) (PINFO_STATE(pi).new_record)
1393 #define PINFO_BYTE_ORDER(pi) (PINFO_STATE(pi).byte_order)
1394 #define PINFO_FORMAT(pi) (PINFO_FD(pi)->format)
1396 #define PINFO_SUPER_ARRAY_BYTES(pi) (PINFO_ARRAY_MAP(pi)->super_array->contig_size)
1397 #define PINFO_SUB_ARRAY_BYTES(pi) (PINFO_ARRAY_MAP(pi)->sub_array->contig_size)
1399 #define PINFO_SUPER_ARRAY_ELS(pi) (PINFO_ARRAY_MAP(pi)->super_array->total_elements)
1400 #define PINFO_SUB_ARRAY_ELS(pi) (PINFO_ARRAY_MAP(pi)->sub_array->total_elements)
1402 #define PINFO_ARRAY_BYTES(pi) (PINFO_ARRAY_MAP(pi)->super_array->contig_size)
1404 #define PINFO_ARRAY_DIMS(pi) (PINFO_ARRAY_MAP(pi)->super_array->num_dim)
1405 #define PINFO_ARRAY_NAME(pi, dim) (PINFO_ARRAY_MAP(pi)->super_array->dim_name[dim])
1406 #define PINFO_ARRAY_DIM_SIZE(pi, dim) (PINFO_ARRAY_MAP(pi)->super_array->dim_size[dim])
1409 #define PINFO_TYPE(pi) (PINFO_FORMAT(pi)->type)
1410 #define PINFO_NAME(pi) (PINFO_FORMAT(pi)->name)
1411 #define PINFO_ORIGIN(pi) (PINFO_FORMAT(pi)->locus)
1412 #define PINFO_RECL(pi) (FORMAT_LENGTH(PINFO_FORMAT(pi)))
1413 #define PINFO_CACHEL(pi) (PINFO_TOTAL_BYTES(pi) - 1)
1414 #define PINFO_NUMVARS(pi) (PINFO_FORMAT(pi)->num_vars)
1415 #define PINFO_IS_FILE(pi) (PINFO_POLE(pi)->connect.id & NDARRS_FILE)
1416 #define PINFO_IS_BUFFER(pi) (PINFO_POLE(pi)->connect.id & NDARRS_BUFFER)
1417 #define PINFO_IS_ARRAY(pi) (IS_ARRAY(PINFO_FORMAT(pi)))
1418 #define PINFO_IS_BROKEN(pi) (PINFO_ARRAY_MAP(pi)->sub_array->type == NDARRT_BROKEN)
1419 #define PINFO_FNAME(pi) (PINFO_POLE(pi)->connect.locus.filename)
1420 #define PINFO_LOCUS_BUFSIZE(pi) (PINFO_POLE(pi)->connect.locus.bufsize)
1421 #define PINFO_LOCUS_BUFFER(pi) (PINFO_POLE(pi)->connect.locus.bufsize->buffer)
1422 #define PINFO_LOCUS_SIZE(pi) (PINFO_POLE(pi)->connect.locus.bufsize->total_bytes)
1423 #define PINFO_LOCUS_FILLED(pi) (PINFO_POLE(pi)->connect.locus.bufsize->bytes_used)
1424 #define PINFO_FIRST_ARRAY_OFFSET(pi) (PINFO_POLE(pi)->connect.file_info.first_array_offset)
1425 #define PINFO_CURRENT_ARRAY_OFFSET(pi) (PINFO_POLE(pi)->connect.file_info.current_array_offset)
1426 #define PINFO_ARRAY_DONE(pi) (PINFO_POLE(pi)->connect.array_done)
1427 #define PINFO_BYTES_LEFT(pi) (PINFO_POLE(pi)->connect.bytes_left)
1428 #define PINFO_BYTES_DONE(pi) (PINFO_POLE(pi)->connect.bytes_done)
1429 #define PINFO_ARRAY_MAP(pi) (PINFO_POLE(pi)->array_mapping)
1430 #define PINFO_ID(pi) (PINFO_POLE(pi)->connect.id)
1431 #define PINFO_FORMAT_MAP(pi) (PINFO_POLE(pi)->format_data_mapping)
1433 #define PINFO_SUPER_ARRAY(pi) (PINFO_ARRAY_MAP(pi)->super_array)
1434 #define PINFO_SUB_ARRAY(pi) (PINFO_ARRAY_MAP(pi)->sub_array)
1436 #define PINFO_NUM_DIMS(pi) (PINFO_ARRAY_MAP(pi)->super_array->num_dim)
1438 #define PINFO_DIM_NAME(pi,i) (PINFO_ARRAY_MAP(pi)->super_array->dim_name[i])
1439 #define PINFO_DIM_START_INDEX(pi, i) (PINFO_ARRAY_MAP(pi)->super_array->start_index[i])
1440 #define PINFO_DIM_END_INDEX(pi, i) (PINFO_ARRAY_MAP(pi)->super_array->end_index[i])
1441 #define PINFO_DIM_GRANULARITY(pi, i) (PINFO_ARRAY_MAP(pi)->super_array->granularity[i])
1442 #define PINFO_DIM_SEPARATION(pi, i) (PINFO_ARRAY_MAP(pi)->super_array->separation[i])
1443 #define PINFO_DIM_GROUPING(pi, i) (PINFO_ARRAY_MAP(pi)->super_array->grouping[i])
1445 #define PINFO_MATE(pi) ((pi)->mate)
1448 #define PINFO_MATE_POLE(pi) PINFO_POLE(PINFO_MATE(pi))
1449 #define PINFO_MATE_FD(pi) PINFO_FD(PINFO_MATE(pi))
1450 #define PINFO_MATE_DATA(pi) PINFO_DATA(PINFO_MATE(pi))
1451 #define PINFO_MATE_BUFFER(pi) PINFO_BUFFER(PINFO_MATE(pi))
1452 #define PINFO_MATE_BYTES_USED(pi) PINFO_BYTES_USED(PINFO_MATE(pi))
1453 #define PINFO_MATE_TOTAL_BYTES(pi) PINFO_TOTAL_BYTES(PINFO_MATE(pi))
1454 #define PINFO_MATE_STATE(pi) PINFO_STATE(PINFO_MATE(pi))
1455 #define PINFO_MATE_LOCKED(pi) PINFO_LOCKED(PINFO_MATE(pi))
1456 #define PINFO_MATE_NEW_RECORD(pi) PINFO_NEW_RECORD(PINFO_MATE(pi))
1457 #define PINFO_MATE_BYTE_ORDER(pi) PINFO_BYTE_ORDER(PINFO_MATE(pi))
1458 #define PINFO_MATE_FORMAT(pi) PINFO_FORMAT(PINFO_MATE(pi))
1460 #define PINFO_MATE_SUPER_ARRAY_BYTES(pi) PINFO_SUPER_ARRAY_BYTES(PINFO_MATE(pi))
1461 #define PINFO_MATE_SUB_ARRAY_BYTES(pi) PINFO_SUB_ARRAY_BYTES(PINFO_MATE(pi))
1463 #define PINFO_MATE_SUPER_ARRAY_ELS(pi) PINFO_SUPER_ARRAY_ELS(PINFO_MATE(pi))
1464 #define PINFO_MATE_SUB_ARRAY_ELS(pi) PINFO_SUB_ARRAY_ELS(PINFO_MATE(pi))
1466 #define PINFO_MATE_ARRAY_BYTES(pi) (PINFO_MATE_ARRAY_MAP(pi)->sub_array->contig_size)
1468 #define PINFO_MATE_SUPER_ARRAY(pi) (PINFO_MATE_ARRAY_MAP(pi)->super_array)
1469 #define PINFO_MATE_SUB_ARRAY(pi) (PINFO_MATE_ARRAY_MAP(pi)->sub_array)
1472 #define PINFO_MATE_TYPE(pi) PINFO_TYPE(PINFO_MATE(pi))
1473 #define PINFO_MATE_NAME(pi) PINFO_NAME(PINFO_MATE(pi))
1474 #define PINFO_MATE_ORIGIN(pi) PINFO_ORIGIN(PINFO_MATE(pi))
1475 #define PINFO_MATE_RECL(pi) PINFO_RECL(PINFO_MATE(pi))
1476 #define PINFO_MATE_CACHEL(pi) PINFO_CACHEL(PINFO_MATE(pi))
1477 #define PINFO_MATE_NUMVARS(pi) PINFO_NUMVARS(PINFO_MATE(pi))
1478 #define PINFO_MATE_IS_FILE(pi) PINFO_IS_FILE(PINFO_MATE(pi))
1479 #define PINFO_MATE_IS_BUFFER(pi) (PINFO_MATE_POLE(pi)->connect.id & NDARRS_BUFFER)
1480 #define PINFO_MATE_FNAME(pi) PINFO_FNAME(PINFO_MATE(pi))
1481 #define PINFO_MATE_LOCUS(pi) PINFO_LOCUS(PINFO_MATE(pi))
1482 #define PINFO_MATE_ARRAY_OFFSET(pi) PINFO_ARRAY_OFFSET(PINFO_MATE(pi))
1483 #define PINFO_MATE_ARRAY_DONE(pi) PINFO_ARRAY_DONE(PINFO_MATE(pi))
1484 #define PINFO_MATE_BYTES_LEFT(pi) PINFO_BYTES_LEFT(PINFO_MATE(pi))
1485 #define PINFO_MATE_BYTES_DONE(pi) PINFO_BYTES_DONE(PINFO_MATE(pi))
1486 #define PINFO_MATE_BUFFER_SIZE(pi) PINFO_BUFFER_SIZE(PINFO_MATE(pi))
1487 #define PINFO_MATE_ARRAY_MAP(pi) PINFO_ARRAY_MAP(PINFO_MATE(pi))
1488 #define PINFO_MATE_ID(pi) PINFO_ID(PINFO_MATE(pi))
1501 DLL_NODE_PTR
dll_add(DLL_NODE_PTR);
1502 DLL_NODE_PTR
dll_insert(DLL_NODE_PTR next_node);
1507 void dll_rewind(DLL_NODE_HANDLE head_handle);
1510 #define FFF_NAME_CASE (FF_TYPES_t)2
1512 int db_set(DATA_BIN_PTR,
int, ...);
1513 int db_ask(DATA_BIN_PTR,
int, ...);
1514 int db_do(DATA_BIN_PTR,
int, ...);
1530 int db_init(FF_STD_ARGS_PTR, DATA_BIN_HANDLE,
int (*error_cb)(
int));
1538 FF_STD_ARGS_PTR std_args,
1551 int calculate_variable(VARIABLE_PTR var, FORMAT_PTR format,
char *input_ptr,
double *d);
1575 FORMAT_PTR
ff_afm2bfm(FORMAT_PTR,
char *new_name);
1578 FORMAT_PTR
ff_bfm2dfm(FORMAT_PTR format,
char *new_name);
1581 VARIABLE_PTR
ff_new_name(FORMAT_PTR,
char *,
char *);
1601 FORMAT_DATA_PTR input,
1602 FORMAT_DATA_PTR output,
1603 FORMAT_DATA_MAPPING_HANDLE pd_h
1614 PROCESS_INFO_PTR pinfo,
1622 FORMAT_DATA_PTR input,
1623 FORMAT_DATA_PTR output,
1624 FORMAT_DATA_PTR middle
1639 PROCESS_INFO_PTR updater,
1645 #define MM_MAX_MIN 101
1646 #define MM_MISSING_DATA_FLAGS 102
1654 int mm_set(VARIABLE_PTR, ...);
1697 int do_log(FF_BUFSIZE_PTR log_bufsize,
char *format, ...);
1698 int wfprintf(FILE *stream,
const char *format, ...);
1700 int newform(FF_STD_ARGS_PTR std_args, FF_BUFSIZE_PTR log, FILE *to_user);
1702 int checkvar(FF_STD_ARGS_PTR std_args, FF_BUFSIZE_PTR log, FILE *to_user);
1704 int ff_lock(PROCESS_INFO_PTR pinfo,
void **hbuffer,
unsigned long *psize);
1705 int ff_unlock(PROCESS_INFO_PTR pinfo,
void **hbuffer);
union struct_ff_array_dipole::struct_connect::union_locus locus
unsigned short NDARR_SOURCE
NAME_TABLE_LIST table_list
char * input_format_title
FORMAT_LIST_HANDLE hf_list
FF_ARRAY_DIPOLE_PTR input
struct struct_ff_translator * next
struct struct_ff_array_dipole::struct_connect::struct_file_info file_info
unsigned int is_stdout_redirected
unsigned int format_title
FF_ARRAY_OFFSET_t first_array_offset
ARRAY_MAPPING_PTR array_mapping
char * output_format_buffer
union struct_ff_variable::@1 misc
FF_ARRAY_DIPOLE_PTR output
char * output_format_title
struct struct_ff_std_args::struct_std_args_user user
char * output_format_file
union struct_ff_pp_object::union_u u
FF_ARRAY_OFFSET_t current_array_offset
char * input_format_buffer
FORMAT_DATA_MAPPING_PTR format_data_mapping
union struct_ff_dll_data::union_struct_ff_dll_data_u u
NAME_TABLE_LIST_HANDLE hnt_list
unsigned int set_cv_precision
void * add_your_object_here
FF_ARRAY_CONDUIT_LIST array_conduit_list
FF_BUFSIZE_PTR output_bufsize
struct struct_ff_pp_object::union_u::struct_nt_list nt_list
unsigned int is_stdin_redirected
EQUATION_INFO_PTR eqn_info
EQUATION_INFO_PTR eqn_info
FF_BUFSIZE_PTR input_bufsize
struct struct_ff_array_dipole::struct_connect connect