/*
 This Software is provided under the Zope Public License (ZPL) Version 2.1.

 Copyright (c) 2009, 2010 by the mingw-w64 project

 Written by Kai Tietz.

 This license has been certified as open source. It has also been designated
 as GPL compatible by the Free Software Foundation (FSF).

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:

   1. Redistributions in source code must retain the accompanying copyright
      notice, this list of conditions, and the following disclaimer.
   2. Redistributions in binary form must reproduce the accompanying
      copyright notice, this list of conditions, and the following disclaimer
      in the documentation and/or other materials provided with the
      distribution.
   3. Names of the copyright holders must not be used to endorse or promote
      products derived from this software without prior written permission
      from the copyright holders.
   4. The right to distribute this software or to use it for any purpose does
      not give you the right to use Servicemarks (sm) or Trademarks (tm) of
      the copyright holders.  Use of them is covered by separate agreement
      with the copyright holders.
   5. If any files are modified, you must cause the modified files to carry
      prominent notices stating that you changed the files and the date of
      any change.

 Disclaimer

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED
 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef _GENIDL_TYPEINFO_H
#define _GENIDL_TYPEINFO_H

#define TYPELIB_MSFT_MAGIC 0x5446534d /**< MSFT */
#define TYPELIB_NO_INDEX (-1)

#pragma pack(push,1)

typedef struct sTypeLibMSFT {
  uint32_t magic1;
  uint16_t ver_major;
  uint16_t ver_minor;
  int32_t pos_guid; /* references into guid table.  */
  int32_t lcid;         /* locale id */
  int32_t lcid2;
  uint32_t var_flags; /* syskind, 0x10:if helpfile defined, 0x100:if helpstringdll defined. */
  int32_t version;      /* set with SetVersion() */
  int32_t flags;        /* set with SetFlags() */
  int32_t nr_typeinfos;
  int32_t helpstring; /* position of help string in stringtable.  */
  int32_t helpstringcontext;
  int32_t helpcontext;
  int32_t nametable_count; /* number of names in name table.  */
  uint32_t nametable_size; /* nr of characters in name table */
  int32_t name_offset; /* offset of name in name table.  */
  int32_t helpfile; /* position of helpfile in stringtable */
  int32_t custom_data_offset; /* if -1 no custom data, else it is offset in customer data/guid offset table */
  uint32_t res44;            /* unknown always: 0x20 (guid hash size?) */
  uint32_t res48;            /* unknown always: 0x80 (name hash size?) */
  int32_t dispatchpos;      /* HREFTYPE to IDispatch, or -1 if no IDispatch */
  int32_t nr_impinfos;        /* number of impinfos */
  int32_t dta[1];
} sTypeLibMSFT;
  /* 0x100 set with a helpstringdll defined - in this
  case the offset to the name in the stringtable
  appears right after this struct, before the
  typeinfo offsets */

typedef struct sSegMSFT {
  uint32_t offset;       /* absolute offset in file */
  uint32_t length;       /* length of segment */
  int32_t res08;        /* unknown always -1 */
  int32_t res0c;        /* unknown always 0x0f in the header 0x03 in the typeinfo_data */
} sSegMSFT;

typedef enum eSegMSFT {
    eSegMSFT_TYPEINFO = 0,  /* type information */
    eSegMSFT_IMPORTINFO,    /* import information */
    eSegMSFT_IMPORTFILES,   /* import filenames */
    eSegMSFT_REFERENCES,    /* references (?) */
    eSegMSFT_GUIDHASH,      /* hash table for guids? */
    eSegMSFT_GUID,          /* guid storage */
    eSegMSFT_NAMEHASH,      /* hash table for names */
    eSegMSFT_NAME,          /* name storage */
    eSegMSFT_STRING,        /* string storage */
    eSegMSFT_TYPEDESC,      /* type descriptions */
    eSegMSFT_ARRAYDESC,     /* array descriptions */
    eSegMSFT_CUSTDATA,      /* custom data */
    eSegMSFT_CUSTDATAGUID,  /* custom data guids */
    eSegMSFT_UNKNOWN,       /* ??? */
    eSegMSFT_UNKNOWN2,      /* ??? */
    eSegMSFT_MAX
} eSegMSFT;

typedef struct sMSFT_TypeInfoBase {
  int32_t typekind;             /*  it is the TKIND_xxx */
  /* some byte alignment stuff */
  uint32_t memoffset;          /* points past the file, if no elements */
  int32_t res2;               /* zero if no element, N*0x40 */
  int32_t res3;               /* -1 if no element, (N-1)*0x38 */
  int32_t res4;               /* always? 3 */
  int32_t res5;               /* always? zero */
  int32_t cElement;           /* counts elements, HI=cVars, LO=cFuncs */
  int32_t res7;               /* always? zero */
  int32_t res8;               /* always? zero */
  int32_t res9;               /* always? zero */
  int32_t resA;               /* always? zero */
  int32_t posguid;            /* position in guid table */
  int32_t flags;              /* Typeflags */
  int32_t NameOffset;         /* offset in name table */
  int32_t version;            /* element version */
  int32_t docstringoffs;      /* offset of docstring in string tab */
  int32_t helpstringcontext;  /*  */
  int32_t helpcontext;    /* */
  int32_t oCustData;          /* offset in customer data table */
  int16_t   cImplTypes;     /* nr of implemented interfaces */
  int16_t   cbSizeVft;      /* virtual table size, including inherits */
  int32_t size;           /* size in bytes, at least for structures */
  /* FIXME: name of this field */
  int32_t datatype1;      /* position in type description table */
  /* or in base interfaces */
  /* if coclass: offset in reftable */
  /* if interface: reference to inherited if */
  int32_t datatype2;      /* for interfaces: hiword is num of inherited funcs */
  /* loword is num of inherited interfaces */
  int32_t res18;          /* always? 0 */
  int32_t res19;          /* always? -1 */
} sMSFT_TypeInfoBase;

typedef struct sMSFT_TypeDesc {
  uint16_t kind;
  uint16_t flag;
#ifdef __GNUC__
  __extension__
#endif
  union {
    int32_t oTypeB;
    int32_t oTypeD;
    int32_t oArrayD;
    uint32_t vt;
  };
} sMSFT_TypeDesc;

typedef struct sMSFT_RefTab {
  int32_t oData1;
  int32_t no;
  int32_t data2;
  int32_t oNextRef;
} sMSFT_RefTab;

typedef struct sMSFT_CustomData {
  uint16_t vt;
  unsigned char dta[1];
} sMSFT_CustomData;

typedef struct sMSFT_CDGuid {
    int32_t oGuid;
    int32_t oData;
    int32_t next;     /* next offset in the table, -1 if it's the last */
} sMSFT_CDGuid;

typedef struct sMSFT_FuncParam {
  uint32_t dataType;
  int32_t oName;
  int32_t flags;
} sMSFT_FuncParam;

typedef struct sMSFT_var {
  uint16_t rlen;
  uint16_t id;
  uint32_t datatype;
  uint32_t flags;
  uint16_t varKind;
  uint16_t vardescSize;
  int32_t oValue;
} sMSFT_var;

typedef struct sMSFT_func {
  uint16_t rlen;
  uint16_t id;
  uint32_t datatype;
  uint32_t flags;
  uint16_t vtableOffset;
  uint16_t funcdescSize;
#ifdef __GNUC__
  __extension__
#endif
  union {
    int32_t fkccic;
#ifdef __GNUC__
    __extension__
#endif
    struct {
      uint32_t funcKind : 3;
      uint32_t invokeKind : 4;
      uint32_t hasCustomData : 1;
      uint32_t callconv : 4;
      uint32_t hasParamDefValue : 1;
      uint32_t isOEntryNumeric : 1;
      uint32_t hasRetvalParam : 1;
      uint32_t reserved1 : 1;
      uint32_t nextIndexWithSameID : 16;
    } f;
  };
  uint16_t nrArgs;
  uint16_t nrOptArgs;
  uint32_t data[1];
  /* sMSFT_FuncParam params[1]; */
} sMSFT_func;

typedef struct sMSFT_ImpFiles {
  int32_t res1;
  int32_t res2;
  int32_t res3;
  uint16_t flag;
  unsigned char dta[1];
} sMSFT_ImpFiles;

typedef struct sMSFT_memblob {
  uint32_t size;
#ifdef __GNUC__
  __extension__
#endif
  union {
    unsigned char dta[1];
  };
} sMSFT_memblob;

typedef struct sMSFT_ArrayDesc {
  uint32_t vt;
  uint16_t count;
  uint16_t size;
  uint32_t vt_offset[1];
} sMSFT_ArrayDesc;

typedef struct tagMSFT_ImpInfo {
  uint16_t count;
  unsigned char flags;
  unsigned char tkind;
  int32_t oImpFile;       /* offset in the Import File table */
  int32_t oGuid;          /* offset in Guid table or typeinfo index (see bit 16 of flags) */
} MSFT_ImpInfo;

#pragma pack(pop)

#ifndef IMPLTYPEFLAG_FDEFAULT
#define IMPLTYPEFLAG_FDEFAULT 1
#define IMPLTYPEFLAG_FSOURCE 2
#define IMPLTYPEFLAG_FRESTRICTED 4
#define IMPLTYPEFLAG_FDEFAULTVTABLE 8
#endif

#ifndef LIBFLAG_FRESTRICTED
#define LIBFLAG_FRESTRICTED 1
#define LIBFLAG_FCONTROL 2
#define LIBFLAG_FHIDDEN 4
#define LIBFLAG_FHASDISKIMAGE 0x8
#endif

#define VARKIND_PERINSTANCE 0
#define VARKIND_STATIC	1
#define VARKIND_CONST	2
#define VARKIND_DISPATCH  3

#define SYSKIND_WIN16 0
#define SYSKIND_WIN32 1
#define SYSKIND_MAC 2
#define SYSKIND_WIN64 3

/* Function Kind */
#define FUNCTKIND_VIRTUAL 0
#define FUNCTKIND_PUREVIRTUAL 1
#define FUNCTKIND_NONVIRTUAL 2
#define FUNCTKIND_STATIC 3
#define FUNCTKIND_DISPATCH 4

/* Invoke Kind */
#define INVOKIND_FUNC 1
#define INVOKIND_PROPERTYGET 2
#define INVOKIND_PROPERTYPUT 4
#define INVOKIND_PROPERTYPUTREF 8

/* Calling convention */
#define CALLCONV_FASTCALL 0     /**< fastcall call convention */
#define CALLCONV_CDECL 1        /**< cdecl call convention */
#define CALLCONV_PASCAL 2       /**< pascal call convention */
#define CALLCONV_MACPASCAL 3
#define CALLCONV_STDCALL 4      /**< stdcall call convention */
#define CALLCONV_FPFASTCALL 5
#define CALLCONV_SYSCALL 6
#define CALLCONV_MPWCDECL 7
#define CALLCONV_MPWPASCAL 8
#define CALLCONV_MAX 9

#define DESCKIND_NONE 0
#define DESCKIND_FUNCDESC 1
#define DESCKIND_VARDESC 2
#define DESCKIND_TYPECOMP 3
#define DESCKIND_IMPLICITAPPOBJECT 4
#define DESCKIND_MAX 5

#define TKIND_ENUM  0
#define TKIND_RECORD 1
#define TKIND_MODULE 2
#define TKIND_INTERFACE 3
#define TKIND_DISPATCH 4
#define TKIND_COCLASS 5
#define TKIND_ALIAS 6
#define TKIND_UNION 7
#define TKIND_MAX 8

#define TYPEFLAG_FAPPOBJECT 1
#define TYPEFLAG_FCANCREATE 2
#define TYPEFLAG_FLICENSED 4
#define TYPEFLAG_FPREDECLID 8
#define TYPEFLAG_FHIDDEN 0x10
#define TYPEFLAG_FCONTROL 0x20
#define TYPEFLAG_FDUAL 0x40
#define TYPEFLAG_FNONEXTENSIBLE 0x80
#define TYPEFLAG_FOLEAUTOMATION 0x100
#define TYPEFLAG_FRESTRICTED 0x200
#define TYPEFLAG_FAGGREGATABLE 0x400
#define TYPEFLAG_FREPLACEABLE 0x800
#define TYPEFLAG_FDISPATCHABLE 0x1000
#define TYPEFLAG_FREVERSEBIND 0x2000
#define TYPEFLAG_FPROXY 0x4000


#define TYPE_KIND_STRUCT_EXTERN 0x10a1
#define TYPE_KIND_ENUM 0x2120
#define TYPE_KIND_STRUCT 0x2121
#define TYPE_KIND_TYPEDEF 0x2126
#define TYPE_KIND_FORWARD_STRUCT 0x2225
#define TYPE_KIND_INTERFACE 0x2234
#define TYPE_KIND_UNION 0x4221
#define TYPE_KIND_UNION_INSTRUCT 0x4227

#ifndef PARAMFLAG_FIN
#define PARAMFLAG_FIN 1
#define PARAMFLAG_FOUT 2
#define PARAMFLAG_FLCID 4
#define PARAMFLAG_FRETVAL 8
#define PARAMFLAG_FOPT 0x10
#define PARAMFLAG_FHASDEFAULT 0x20
#define PARAMFLAG_FHASCUSTDATA 0x40
#endif

#define FUNCFLAG_FRESTRICTED 0x1
#define FUNCFLAG_FSOURCE 0x2
#define FUNCFLAG_FBINDABLE 0x4
#define FUNCFLAG_FREQUESTEDIT 0x8
#define FUNCFLAG_FDISPLAYBIND  0x10
#define FUNCFLAG_FDEFAULTBIND 0x20
#define FUNCFLAG_FHIDDEN 0x40
#define FUNCFLAG_FUSESGETLASTERROR 0x80
#define FUNCFLAG_FDEFAULTCOLLELEM 0x100
#define FUNCFLAG_FUIDEFAULT 0x200
#define FUNCFLAG_FNONBROWSABLE 0x400
#define FUNCFLAG_FREPLACEABLE 0x800
#define FUNCFLAG_FIMMEDIATEBIND 0x1000

#define VARFLAG_FREADONLY 0x1
#define VARFLAG_FSOURCE 0x2
#define VARFLAG_FBINDABLE 0x4
#define VARFLAG_FREQUESTEDIT 0x8
#define VARFLAG_FDISPLAYBIND 0x10
#define VARFLAG_FDEFAULTBIND 0x20
#define VARFLAG_FHIDDEN 0x40
#define VARFLAG_FRESTRICTED 0x80
#define VARFLAG_FDEFAULTCOLLELEM 0x100
#define VARFLAG_FUIDEFAULT 0x200
#define VARFLAG_FNONBROWSABLE 0x400
#define VARFLAG_FREPLACEABLE 0x800
#define VARFLAG_FIMMEDIATEBIND 0x1000

/**
 * Dumps typelib info to file
 * @param[in] fp File to print to
 * @param[in] dta raw typelib info
 * @param[in] size size of raw typelib information
 */
void dumpInfo (FILE *fp, unsigned char *dta, size_t size);

#endif
