struct ArrayDesc  {
    HANDLE  handle;             // handle to global memory array
    int     recsize;            // record size of array
    long    ubound;             // upper bound of array
};
typedef struct ArrayDesc *      pDescrip;

typedef double      currency;   // currency and double are the same size and
                                // will be treated the same

int FAR pascal      LibMain(HANDLE, WORD, WORD, LPSTR);
int FAR pascal      WEP(int);
int FAR pascal      HugeDim(int, long);
int                 GetFreeArray(struct ArrayDesc *);
int FAR pascal      GetHugeEl(int, long, BYTE FAR *);
int FAR pascal      SetHugeEl(int, long, BYTE FAR *);
int FAR pascal      HugeErase(int);
int FAR pascal      NumHugeArrays(void);
long FAR pascal     HugeUbound(int);
int FAR pascal      HugeInt(int, long);
long FAR pascal     HugeLong(int, long);
float FAR pascal    HugeSingle(int, long);
double FAR pascal   HugeDouble(int, long);
double FAR pascal   HugeCurrency(int, long);
int FAR pascal      HugeRedim(int, long);
int                 HugeAlloc(pDescrip, int, long, BOOL);
long FAR pascal     HugeSave(int, long, int, LPSTR);
long FAR pascal     HugeLoad(int, int, LPSTR);

#define HA_OK               0
#define HA_OUTOFMEMORY      (-1)
#define HA_TOMANYARRAYS     (-2)
#define HA_BADELEMENTSIZE   (-3)
#define HA_SUBSCRIPT        (-4)
#define HA_BADARRAY         (-5)
#define HA_FILEOPENERROR    (-7)
#define HA_FILEWRITEERROR   (-8)
#define HA_FILEREADERROR    (-9)
