/*
    genidl - Generate interface defintion language listing from a
    Portable Executable.
    Copyright (C) 2009, 2010, 2011, 2012, 2013  mingw-w64 project

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#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
