blob: d1f38c12ef48c961ae44ddc5b29f3ca90e099f4f [file] [log] [blame]
/*
* Master header file for the AIF library.
*
* Copyright (c) 1996-2002 by Guardsoft Pty Ltd.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*/
#ifndef _AIF_H
#define _AIF_H
#ifdef WINNT
#define WINDOWSNT
#endif /* WINNT */
#ifdef DEBUG
#define DPRINT(s) s
#else /* DEBUG */
#define DPRINT(s) /**/
#endif /*DEBUG */
/*
* Include for MIN & MAX
*/
#if defined(sun)
#include <sys/sysmacros.h>
#elif defined(__sgi) || defined(__linux)
#include <sys/param.h>
#else
#ifndef MAX
#define MAX(a, b) ((a) < (b) ? (b) : (a))
#endif /* MAX */
#ifndef MIN
#define MIN(a, b) ((a) > (b) ? (b) : (a))
#endif /* MIN */
#endif
#ifndef AIFLONGEST
#ifdef CC_HAS_LONG_LONG
typedef long long int AIFLONGEST;
#else
typedef long int AIFLONGEST;
#endif /* CC_HAS_LONG_LONG */
#endif /* !LONGEST */
#ifdef HAVE_LONG_DOUBLE
typedef long double AIFDOUBLEST;
#else
typedef double AIFDOUBLEST;
#endif /* HAVE_LONG_DOUBLE */
#ifdef WIN32
#define R_OK 4
#define W_OK 2
#define X_OK 1
#define F_OK 0
#define CLOSE_SOCKET(s) closesocket(s)
#define snprintf _snprintf
#define alloca _alloca
#define MAXHOSTNAMELEN 255
#define MAXPATHLEN 1024
#else /* WIN32 */
#define SOCKET int
#define CLOSE_SOCKET(s) (void)close(s)
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#endif /* WIN32 */
#define AIF_INVALID 0
#define AIF_INTEGER 1
#define AIF_FLOATING 2
#define AIF_POINTER 3
#define AIF_ARRAY 4
#define AIF_STRUCT 5
#define AIF_UNION 6
#define AIF_FUNCTION 7
#define AIF_VOID 8
#define AIF_REGION 9
#define AIF_NAME 10
#define AIF_REFERENCE 11
#define AIF_STRING 12
#define AIF_CHARACTER 13
#define AIF_RANGE 14
#define AIF_ENUM 15
#define AIF_BOOLEAN 16
#define AIF_ADDRESS 17
#define AIF_CHAR_POINTER 18
#define NUM_AIF_TYPES 19
#define AIF_PTR_NIL 0
#define AIF_PTR_NORMAL 1
#define AIF_PTR_NAME 2
#define AIF_PTR_REFERENCE 3
#define AIF_PTR_INVALID 4
/*
* Structure used to index into a
* muli-dimensional array.
*/
struct AIFIndex
{
int i_finished;
int i_rank;
int i_nel;
int * i_min;
int * i_max;
int * i_index;
char * i_btype;
int i_bsize;
};
typedef struct AIFIndex AIFIndex;
/*
* AIF Object
*/
struct AIF
{
char * a_fds;
struct
{
unsigned a_data_len;
char * a_data_val;
} a_data;
};
typedef struct AIF AIF;
#define AIF_FORMAT(a) (a)->a_fds
#define AIF_LEN(a) (a)->a_data.a_data_len
#define AIF_DATA(a) (a)->a_data.a_data_val
/*
* Arithmetic/logical operations that can be
* performed on AIF objects.
*/
enum aifop
{
AIFOP_ADD,
AIFOP_SUB,
AIFOP_MUL,
AIFOP_DIV,
AIFOP_REM,
AIFOP_AND,
AIFOP_OR,
AIFOP_NEG,
AIFOP_NOT
};
typedef enum aifop aifop;
/*
* AIF Object Access Specifiers
*/
enum aifaccess
{
AIFACC_PRIVATE,
AIFACC_PROTECTED,
AIFACC_PUBLIC
};
typedef enum aifaccess aifaccess;
/*
* AIF error codes.
*/
enum aiferr
{
AIFERR_NOERR,
AIFERR_SIZE,
AIFERR_CONV,
AIFERR_TYPE,
AIFERR_BADARG,
AIFERR_NOTIMP,
AIFERR_OPEN,
AIFERR_READ,
AIFERR_WRITE,
AIFERR_SEEK,
AIFERR_BADHDR,
AIFERR_MODE,
AIFERR_FDS,
AIFERR_FIELD,
AIFERR_ARITH,
AIFERR_BASE,
AIFERR_INDEX,
AIFERR_STRING,
AIFERR_CANTHAPPEN
};
typedef enum aiferr aiferr;
extern aiferr AIFErrno;
/*
* AIF option codes.
*/
enum aifopt
{
AIFOPT_CMP_DEPTH,
AIFOPT_CMP_METHOD
};
typedef enum aifopt aifopt;
#define AIF_CMP_BY_POSITION 0
#define AIF_CMP_BY_NAME 1
/*
* Definitons for reading/writing AIF
* data to a file.
*/
#define AIFMODE_READ 0x001
#define AIFMODE_CREATE 0x002
#define AIFMODE_APPEND 0x004
#include <stdio.h>
struct AIFFILE
{
FILE * af_fp;
int af_mode;
int af_cnt;
};
typedef struct AIFFILE AIFFILE;
#include "fds.h"
#define AIF_ARRAY_TYPE(range, base) TypeToFDS(AIF_ARRAY, (range), (base))
#define AIF_BOOLEAN_TYPE() TypeToFDS(AIF_BOOLEAN)
#define AIF_CHARACTER_TYPE() TypeToFDS(AIF_CHARACTER)
#define AIF_ENUM_TYPE(sign) TypeToFDS(AIF_ENUM, (sign))
#define AIF_FLOATING_TYPE(len) TypeToFDS(AIF_FLOATING, (len))
#define AIF_FUNCTION_TYPE(base) TypeToFDS(AIF_FUNCTION, (base))
#define AIF_INTEGER_TYPE(sign, len) TypeToFDS(AIF_INTEGER, (sign), (len))
#define AIF_NAME_TYPE(name, base) TypeToFDS(AIF_NAME, (name), (base))
#define AIF_POINTER_TYPE(addr, base) TypeToFDS(AIF_POINTER, (addr), (base))
#define AIF_RANGE_TYPE(lo, hi, base) TypeToFDS(AIF_RANGE, (lo), (hi), (base))
#define AIF_REFERENCE_TYPE(ref) TypeToFDS(AIF_REFERENCE, (ref))
#define AIF_REGION_TYPE(name, base) TypeToFDS(AIF_REGION, (name), (base))
#define AIF_STRING_TYPE() TypeToFDS(AIF_STRING)
#define AIF_STRUCT_TYPE() TypeToFDS(AIF_STRUCT)
#define AIF_UNION_TYPE() TypeToFDS(AIF_UNION)
#define AIF_VOID_TYPE(len) TypeToFDS(AIF_VOID, (len))
#define AIF_ADDRESS_TYPE(len) TypeToFDS(AIF_ADDRESS, (len))
#define AIF_CHAR_POINTER_TYPE(addr) TypeToFDS(AIF_CHAR_POINTER, (addr))
/*
* AIF routines.
*/
extern AIF * AIFAdd(AIF *, AIF *);
extern int AIFAddConstToEnum(AIF *, char *, AIF *);
extern int AIFAddFieldToStruct(AIF *, char *, AIF *);
extern int AIFAddFieldToUnion(AIF *, char *, char *);
extern void AIFAddArrayElement(AIF *, int, AIF *);
extern AIF * AIFAnd(AIF *, AIF *);
extern int AIFArrayBounds(AIF *, int, int **, int **, int **);
extern AIF * AIFArrayElement(AIF *, AIFIndex *);
extern int AIFArrayElementToDouble(AIF *, AIFIndex *, double *);
extern int AIFArrayElementToDoublest(AIF *, AIFIndex *, AIFDOUBLEST *);
extern int AIFArrayElementToInt(AIF *, AIFIndex *, int *);
extern int AIFArrayElementToLongest(AIF *, AIFIndex *, AIFLONGEST *);
extern void AIFArrayIndexFree(AIFIndex *);
extern int AIFArrayIndexInc(AIFIndex *);
extern AIFIndex *AIFArrayIndexInit(AIF *);
extern int AIFArrayIndexInRange(int, int *, int *, int *);
extern int AIFArrayIndexToStr(char **, AIFIndex *);
extern char * AIFArrayIndexType(AIF *);
extern int AIFArrayInfo(AIF *, int *, char **, int *);
extern int AIFArrayMaxIndex(AIF *, int);
extern int AIFArrayMinIndex(AIF *, int);
extern AIF * AIFArrayPerm(AIF *, int *);
extern int AIFArrayRank(AIF *);
extern AIF * AIFArrayRef(AIF *, int, int *);
extern int AIFArraySize(AIF *);
extern AIF * AIFArraySlice(AIF *, int, int *, int *);
extern int AIFArrayToStr(char **, int, AIF *);
extern int AIFBaseType(AIF *);
extern int AIFBoolToStr(char **, int, AIF *);
extern int AIFCloseSet(AIFFILE *);
extern AIF * AIFCoerce(AIF *, char *);
extern int AIFCompare(int, AIF *, AIF *, int *);
extern AIF * AIFDiff(int, AIF *, AIF *);
extern AIF * AIFDiv(AIF *, AIF *);
extern int AIFEPS(AIF *, AIF *, AIF *, int *);
extern int AIFEnumToStr(char **, int, AIF *);
extern aiferr AIFError(void);
extern char * AIFErrorStr(void);
extern int AIFFieldToDouble(AIF *, char *, double *);
extern int AIFFieldToDoublest(AIF *, char *, AIFDOUBLEST *);
extern int AIFFieldToInt(AIF *, char *, int *);
extern int AIFFieldToLongest(AIF *, char *, AIFLONGEST *);
extern int AIFFieldType(AIF *, char *);
extern int AIFFloatToStr(char **, int, AIF *);
extern int AIFFunctionToStr(char **, int, AIF *);
extern void AIFFree(AIF *);
extern AIF * AIFGetEnum(AIF *);
extern char * AIFGetIdentifier(AIF *);
extern int AIFGetOption(aifopt);
extern AIF * AIFGetStruct(AIF *, char *);
extern AIF * AIFGetUnion(AIF *, char *);
extern int AIFIndexInRange(int, int *, int *, int *);
extern int AIFIndexOffset(int, int *, int *, int *, int *);
extern int AIFIntToStr(char **, int, AIF *);
extern int AIFIsZero(AIF *, int *);
extern AIF * AIFMul(AIF *, AIF *);
extern AIF * AIFNeg(AIF *);
extern void AIFNormalise(char *, int, char *, int);
extern AIF * AIFNot(AIF *);
extern AIF * AIFNull(AIF *);
extern int AIFNumFields(AIF *);
extern AIFFILE * AIFOpenSet(char *, int);
extern AIF * AIFOr(AIF *, AIF *);
extern int AIFPointerToStr(char **, int, AIF *);
extern int AIFPrint(FILE *, int, AIF *);
extern int AIFPrintArray(FILE *, int, AIF *);
extern int AIFPrintBool(FILE *, int, AIF *);
extern int AIFPrintChar(FILE *, int, AIF *);
extern int AIFPrintEnum(FILE *, int, AIF *);
extern int AIFPrintFloat(FILE *, int, AIF *);
extern int AIFPrintFunction(FILE *, int, AIF *);
extern int AIFPrintInt(FILE *, int, AIF *);
extern int AIFPrintName(FILE *, int, AIF *);
extern int AIFPrintPointer(FILE *, int, AIF *);
extern int AIFPrintReference(FILE *, int, AIF *);
extern int AIFPrintRegion(FILE *, int, AIF *);
extern int AIFPrintString(FILE *, int, AIF *);
extern int AIFPrintStruct(FILE *, int, AIF *);
extern int AIFPrintUnion(FILE *, int, AIF *);
extern int AIFPrintVoid(FILE *, int, AIF *);
extern int AIFPrintArrayIndex(FILE *, AIFIndex *);
extern int AIFReferenceToStr(char **, int, AIF *);
extern AIF * AIFReadSet(AIFFILE *, char **);
extern AIF * AIFRem(AIF *, AIF *);
extern int AIFSetArrayData(AIF *, AIFIndex *, AIF *);
extern void AIFSetData(AIF *, char *, int);
extern int AIFSetEnum(AIF *, char *);
extern int AIFSetIdentifier(AIF *, char *);
extern int AIFSetOption(aifopt, int);
extern int AIFSetStruct(AIF *, char *, AIF *);
extern int AIFSetUnion(AIF *, char *, AIF *);
extern int AIFStructToStr(char **, int, AIF *);
extern AIF * AIFSub(AIF *, AIF *);
extern int AIFToChar(AIF *, char *);
extern int AIFToDouble(AIF *, double *);
extern int AIFToDoublest(AIF *, AIFDOUBLEST *);
extern int AIFToInt(AIF *, int *);
extern int AIFToLongest(AIF *, AIFLONGEST *);
extern int AIFToFloat(AIF *, float *);
extern int AIFToStr(char **, int, AIF *);
extern int AIFToVoid(AIF *, char *, int);
extern int AIFType(AIF *);
extern int AIFTypeCompare(AIF *, AIF *);
extern long AIFTypeSize(AIF *);
extern int AIFUnionToStr(char **, int, AIF *);
extern int AIFVoidToStr(char **, int, AIF *);
extern int AIFWriteSet(AIFFILE *, AIF *, char *);
extern AIF * ArrayToAIF(int, int *, int *, char *, int, char *);
extern AIF * AsciiToAIF(char *, char *);
extern AIF * BoolToAIF(int);
extern AIF * CharToAIF(char);
extern AIF * CopyAIF(AIF *);
extern AIF * DoubleToAIF(double);
extern AIF * EmptyArrayToAIF(int, int, AIF *);
extern AIF * EmptyEnumToAIF(char *);
extern AIF * EmptyStructToAIF(char *);
extern AIF * EmptyUnionToAIF(char *);
extern AIF * FloatToAIF(float);
extern AIF * IntToAIF(int);
extern AIF * LongToAIF(long);
#ifdef CC_HAS_LONG_LONG
extern AIF * LongLongToAIF(long long);
#endif /* CC_HAS_LONG_LONG */
extern AIF * LongestToAIF(AIFLONGEST);
extern AIF * MakeAIF(char *, char *);
extern AIF * NameAIF(AIF *, int);
extern AIF * NewAIF(int, int);
extern AIF * PointerNameToAIF(AIF *);
extern AIF * PointerReferenceToAIF(AIF *);
extern AIF * PointerToAIF(AIF *, AIF *);
extern AIF * ReferenceAIF(int);
extern AIF * ShortToAIF(short);
extern AIF * StringToAIF(char *);
extern AIF * UnsignedShortToAIF(unsigned short);
extern AIF * UnsignedIntToAIF(unsigned int);
extern AIF * UnsignedLongToAIF(unsigned long);
#ifdef CC_HAS_LONG_LONG
extern AIF * UnsignedLongLongToAIF(unsigned long long);
#endif /* CC_HAS_LONG_LONG */
extern AIF * VoidToAIF(char *, int);
extern AIF * AddressToAIF(char *, int);
extern AIF * CharPointerToAIF(AIF *, char *);
extern AIF * EmptyComplexArrayToAIF(int, int, AIF *);
extern void AIFAddComplexArrayElement(AIF *, AIF *);
#endif /* !_AIF_H */