134 typelib->typelib_header.magic1 = 0x5446534d;
135 typelib->typelib_header.magic2 = 0x00010002;
136 typelib->typelib_header.posguid = -1;
137 typelib->typelib_header.lcid = 0x0409;
138 typelib->typelib_header.lcid2 = 0x0;
139 typelib->typelib_header.varflags = 0x40;
140 typelib->typelib_header.version = 0;
141 typelib->typelib_header.flags = 0;
142 typelib->typelib_header.nrtypeinfos = 0;
143 typelib->typelib_header.helpstring = -1;
144 typelib->typelib_header.helpstringcontext = 0;
145 typelib->typelib_header.helpcontext = 0;
146 typelib->typelib_header.nametablecount = 0;
147 typelib->typelib_header.nametablechars = 0;
148 typelib->typelib_header.NameOffset = -1;
149 typelib->typelib_header.helpfile = -1;
150 typelib->typelib_header.CustomDataOffset = -1;
151 typelib->typelib_header.res44 = 0x20;
152 typelib->typelib_header.res48 = 0x80;
153 typelib->typelib_header.dispatchpos = -1;
154 typelib->typelib_header.nimpinfos = 0;
193 for (
i = 0;
i < 8;
i ++) {
253 if (!((namestruct[2] ^ *((
int *)
name)) & 0xffff00ff)) {
285 char *converted_name;
294 converted_name[
length + 4] = 0;
298 converted_name[0] =
length & 0xff;
299 converted_name[1] =
length >> 8;
300 converted_name[2] =
value;
301 converted_name[3] =
value >> 8;
329 char *converted_string;
338 converted_string[0] =
length & 0xff;
339 converted_string[1] = (
length >> 8) & 0xff;
348 *
result = converted_string;
373 if(!
typelib->typelib_segment_data[segment]) {
378 if (!
typelib->typelib_segment_data[segment])
return -1;
382 while ((
typelib->typelib_segdir[segment].length +
size) >
typelib->typelib_segment_block_length[segment]) {
383 unsigned char *
block;
479 chat(
"adding uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
481 guid->guid.Data4[0],
guid->guid.Data4[1],
guid->guid.Data4[2],
guid->guid.Data4[3],
482 guid->guid.Data4[4],
guid->guid.Data4[5],
guid->guid.Data4[6],
guid->guid.Data4[7]);
490 warning(
"duplicate uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
492 guid->guid.Data4[0],
guid->guid.Data4[1],
guid->guid.Data4[2],
guid->guid.Data4[3],
493 guid->guid.Data4[4],
guid->guid.Data4[5],
guid->guid.Data4[6],
guid->guid.Data4[7]);
544 if (
typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] != -1)
545 name_space->next_hash =
typelib->typelib_namehash_segment[encoded_name[2] & 0x7f];
547 typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] =
offset;
549 typelib->typelib_header.nametablecount += 1;
550 typelib->typelib_header.nametablechars += *encoded_name;
572 unsigned char *string_space;
573 char *encoded_string;
587 free(encoded_string);
623 *impinfo_space = *impinfo;
648 char *encoded_string;
652 encoded_string[0] <<= 2;
653 encoded_string[0] |= 1;
664 importfile->
guid = guidoffset;
666 importfile->
version = major_version | (minor_version << 16);
668 free(encoded_string);
677 chat(
"alloc_importinfo: %s\n", importinfo->
name);
679 if(!importlib->allocated) {
683 chat(
"allocating importlib %s\n", importlib->name);
685 importlib->allocated = -1;
693 importlib->version >> 16, importlib->name);
700 impinfo.
oImpFile = importlib->offset;
718 impinfo.
oGuid = importinfo->
id;
729 chat(
"search importlib %s\n",
name);
736 for(
i=0;
i < importlib->ntypeinfos;
i++) {
737 if(!
strcmp(
name, importlib->importinfos[
i].name)) {
738 chat(
"Found %s in importlib.\n",
name);
739 return importlib->importinfos+
i;
781 chat(
"encode_type vt %d type %p\n",
vt,
type);
783 default_type = 0x80000000 | (
vt << 16) |
vt;
791 *encoded_type = default_type;
795 *encoded_type = 0x80000000 | (
VT_I4 << 16) |
VT_INT;
805 *encoded_type = default_type;
813 *encoded_type = default_type;
819 *encoded_type = default_type;
824 *encoded_type = default_type;
828 *encoded_type = default_type;
832 *encoded_type = 0x80000000 | (
VT_EMPTY << 16) |
vt;
838 *encoded_type = default_type;
842 *encoded_type = default_type;
847 *encoded_type = 0xfffe0000 |
vt;
867 chat(
"encode_type: skipping ptr\n");
885 mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;
891 typedata[0] = (mix_field << 16) |
VT_PTR;
895 *encoded_type = typeoffset;
921 mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;
931 *encoded_type = typeoffset;
942 if (
type->typelib_idx > -1)
944 chat(
"encode_type: VT_USERDEFINED - found already defined type %s at %d\n",
946 typeinfo_offset =
typelib->typelib_typeinfo_offsets[
type->typelib_idx];
950 chat(
"encode_type: VT_USERDEFINED - found imported type %s in %s\n",
953 typeinfo_offset = importinfo->
offset | 0x1;
974 chat(
"encode_type: VT_USERDEFINED - adding new type %s, real type %d\n",
999 error(
"encode_type: VT_USERDEFINED - unhandled type %d\n",
1003 typeinfo_offset =
typelib->typelib_typeinfo_offsets[
type->typelib_idx];
1007 if ((typedata[0] == ((0x7fff << 16) |
VT_USERDEFINED)) && (typedata[1] == typeinfo_offset))
break;
1015 typedata[1] = typeinfo_offset;
1018 *encoded_type = typeoffset;
1023 error(
"encode_type: unrecognized type %d.\n",
vt);
1024 *encoded_type = default_type;
1053 chat(
"encode_var: var %p type %p type->name %s\n",
1057 int num_dims, arrayoffset;
1067 chat(
"array with %d dimensions\n", num_dims);
1073 arraydata[1] = num_dims;
1074 arraydata[1] |= ((num_dims * 2 *
sizeof(
int)) << 16);
1089 typedata[0] = (0x7ffe << 16) |
VT_CARRAY;
1090 typedata[1] = arrayoffset;
1092 *encoded_type = typeoffset;
1104 chat(
"encode_var: skipping ptr\n");
1125 mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;
1131 typedata[0] = (mix_field << 16) |
VT_PTR;
1135 *encoded_type = typeoffset;
1156 return val & 0xffff;
1168 if ((lv & 0x3ffffff) == lv) {
1189 while(
len < seg_len) {
1203 error(
"string default value applied to non-string type\n");
1216 warning(
"non-null pointer default value\n");
1244 warning(
"can't write default VT_VARIANT value for expression type %d.\n",
expr->
type);
1250 warning(
"can't write value of type %d yet\n",
vt);
1269 if(guidoffset == -1) {
1289 custdata[0] = guidoffset;
1290 custdata[1] = data_out;
1306 error(
"custom() attribute with unknown type\n");
1314 int *typedata, typedata_size;
1315 int i,
id, next_idx;
1317 int num_params = 0, num_optional = 0, num_defaults = 0;
1318 int has_arg_custdata = 0;
1320 unsigned char *namedata;
1322 unsigned int funcflags = 0, callconv = 4 ;
1323 unsigned int funckind, invokekind = 1 ;
1324 int help_context = 0, help_string_context = 0, help_string_offset = -1;
1325 int func_custdata_offset = -1;
1326 int entry = -1, entry_is_ord = 0;
1327 int lcid_retval_count = 0;
1331 id = ((0x6000 | (
typeinfo->typeinfo->datatype2 & 0xffff)) << 16) |
index;
1346 chat(
"add_func_desc: skipping local function\n");
1360 has_arg_custdata = 1;
1364 chat(
"add_func_desc: num of params %d\n", num_params);
1370 switch(
attr->type) {
1387 extra_attr =
max(extra_attr, 3);
1396 extra_attr =
max(extra_attr, 1);
1397 help_context =
expr->
u.integer.value;
1400 extra_attr =
max(extra_attr, 2);
1404 extra_attr =
max(extra_attr, 6);
1405 help_string_context =
expr->
u.integer.value;
1414 funcflags |= 0x1000;
1450 if (num_optional || num_defaults)
1451 warning(
"add_func_desc: ignoring vararg in function with optional or defaultvalue params\n");
1460 if(has_arg_custdata || func_custdata_offset != -1) {
1461 extra_attr =
max(extra_attr, 7 + num_params);
1465 typedata_size = 0x18 + extra_attr *
sizeof(
int) + (num_params * (num_defaults ? 16 : 12));
1469 typeinfo->func_data_allocated = 0x100;
1473 if(
typeinfo->func_data[0] + typedata_size +
sizeof(
int) >
typeinfo->func_data_allocated) {
1475 typeinfo->func_data[0] + typedata_size +
sizeof(
int));
1480 typeinfo->func_data[0] += typedata_size;
1485 for(
i = 0;
i < (
typeinfo->typeinfo->cElement & 0xffff);
i++) {
1486 if(name_offset ==
typeinfo->func_names[
i]) {
1494 for(
i = 0;
i < (
typeinfo->typeinfo->cElement & 0xffff);
i++) {
1504 typedata[0] = typedata_size | (
index << 16);
1507 typedata[2] = funcflags;
1509 typedata[4] = (next_idx << 16) | (callconv << 8) | (invokekind << 3) | funckind;
1510 if(has_arg_custdata || func_custdata_offset != -1) typedata[4] |= 0x0080;
1511 if(num_defaults) typedata[4] |= 0x1000;
1512 if(entry_is_ord) typedata[4] |= 0x2000;
1513 typedata[5] = (num_optional << 16) | num_params;
1517 typedata[3] += (16 * num_params) << 16;
1518 typedata[3] += (24 * num_defaults) << 16;
1520 switch(extra_attr) {
1522 if(extra_attr > 7 + num_params)
warning(
"unknown number of optional attrs\n");
1524 case 7: typedata[12] = func_custdata_offset;
1525 case 6: typedata[11] = help_string_context;
1526 case 5: typedata[10] = -1;
1527 case 4: typedata[9] = -1;
1528 case 3: typedata[8] =
entry;
1529 case 2: typedata[7] = help_string_offset;
1530 case 1: typedata[6] = help_context;
1541 int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) +
i * 3;
1542 int *defaultdata = num_defaults ? typedata + 6 + extra_attr +
i :
NULL;
1543 int arg_custdata_offset = -1;
1545 if(defaultdata) *defaultdata = -1;
1549 switch(
attr->type) {
1570 lcid_retval_count++;
1574 lcid_retval_count++;
1577 chat(
"unhandled param attr %d\n",
attr->type);
1580 if(extra_attr > 7 +
i) {
1581 typedata[13+
i] = arg_custdata_offset;
1585 paramdata[2] = paramflags;
1592 if(lcid_retval_count == 1)
1593 typedata[4] |= 0x4000;
1594 else if(lcid_retval_count == 2)
1595 typedata[4] |= 0x8000;
1597 if(
typeinfo->funcs_allocated == 0) {
1622 typeinfo->typeinfo->res3 += 0x38 + num_params * 0x10;
1623 if(num_defaults)
typeinfo->typeinfo->res3 += num_params * 0x4;
1626 if(funckind != 0x3 )
1633 if (*((
int *)namedata) == -1) {
1634 *((
int *)namedata) =
typeinfo->typelib->typelib_typeinfo_offsets[
typeinfo->typeinfo->typekind >> 16];
1636 namedata[9] |= 0x10;
1638 namedata[9] &= ~0x10;
1641 namedata[9] |= 0x20;
1649 if(
i != num_params - 1 || (invokekind != 0x4 && invokekind != 0x8 ))
1651 int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) +
i * 3;
1664 unsigned int typedata_size;
1667 unsigned int var_datawidth, var_alignment = 0;
1668 int var_type_size, var_kind = 0 ;
1672 unsigned char *namedata;
1673 int var_num = (
typeinfo->typeinfo->cElement >> 16) & 0xffff;
1674 int var_custdata_offset = -1;
1681 id = 0x40000000 +
index;
1685 switch(
attr->type) {
1690 extra_attr =
max(extra_attr,4);
1736 typedata_size = 0x14 + extra_attr *
sizeof(
int);
1740 typeinfo->var_data_allocated = 0x100;
1744 if(
typeinfo->var_data[0] + typedata_size +
sizeof(
int) >
typeinfo->var_data_allocated) {
1746 typeinfo->var_data[0] + typedata_size +
sizeof(
int));
1751 typeinfo->var_data[0] += typedata_size;
1755 typedata[0] = typedata_size | (
index << 16);
1756 typedata[2] = varflags;
1757 typedata[3] = (36 << 16) | 0;
1759 if(
typeinfo->vars_allocated == 0) {
1765 if(
typeinfo->vars_allocated == var_num) {
1781 typeinfo->datawidth += var_alignment - 1;
1782 typeinfo->datawidth &= ~(var_alignment - 1);
1788 var_type_size += 16;
1789 typeinfo->datawidth = var_datawidth;
1793 typeinfo->datawidth += var_datawidth;
1805 error(
"add_var_desc: unhandled type kind %d\n",
typeinfo->typekind);
1810 typedata[3] += var_type_size << 16 | var_kind;
1812 switch(extra_attr) {
1813 case 5: typedata[9] = -1 ;
1814 case 4: typedata[8] = var_custdata_offset;
1815 case 3: typedata[7] = -1;
1816 case 2: typedata[6] = -1 ;
1817 case 1: typedata[5] = -1 ;
1821 warning(
"unknown number of optional attrs\n");
1828 typeinfo->typeinfo->typekind &= ~0xffc0;
1843 typeinfo->typeinfo->cElement += 0x10000;
1851 if (*((
int *)namedata) == -1) {
1852 *((
int *)namedata) =
typeinfo->typelib->typelib_typeinfo_offsets[
typeinfo->typeinfo->typekind >> 16];
1854 namedata[9] |= 0x10;
1856 namedata[9] &= ~0x10;
1859 namedata[9] |= 0x20;
1870 if(
ref->typelib_idx == -1)
1872 if(
ref->typelib_idx == -1)
1873 error(
"add_impl_type: unable to add inherited interface\n");
1875 typeinfo->typeinfo->datatype1 =
typeinfo->typelib->typelib_typeinfo_offsets[
ref->typelib_idx];
1887 int typeinfo_offset;
1891 chat(
"create_msft_typeinfo: name %s kind %d index %d\n",
name, kind,
typelib->typelib_header.nrtypeinfos);
1893 msft_typeinfo =
xmalloc(
sizeof(*msft_typeinfo));
1894 memset( msft_typeinfo, 0,
sizeof(*msft_typeinfo) );
1914 switch(
attr->type) {
2017 if (
typelib->last_typeinfo)
typelib->last_typeinfo->next_typeinfo = msft_typeinfo;
2018 typelib->last_typeinfo = msft_typeinfo;
2022 return msft_typeinfo;
2027 int guid_offset, impfile_offset, hash_key;
2030 static const struct uuid stdole = {0x00020430,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
2031 static const struct uuid iid_idispatch = {0x00020400,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
2033 if(
typelib->typelib_header.dispatchpos != -1)
return;
2040 if (guid_offset == -1)
2044 guidentry.
guid = iid_idispatch;
2051 if (guid_offset == -1)
2053 impinfo.
oGuid = guid_offset;
2059 int num_parents = 0, num_funcs = 0;
2087 dispinterface->
attrs);
2134 (
typelib->typelib->reg_iface_count + 1) *
sizeof(dispinterface));
2135 typelib->typelib->reg_ifaces[
typelib->typelib->reg_iface_count++] = dispinterface;
2145 int num_parents = 0, num_funcs = 0;
2229 if (!structure->
name)
2290 int datatype1, datatype2, duplicate = 0;
2327 int num_ifaces = 0,
offset,
i;
2329 int have_default = 0, have_default_source = 0;
2343 num_ifaces *
sizeof(*
ref), 0);
2352 ref->oCustData = -1;
2354 if(
i < num_ifaces - 1)
2358 switch(
attr->type) {
2372 warning(
"add_coclass_typeinfo: unhandled attr %d\n",
attr->type);
2375 if(
ref->flags & 0x1) {
2376 if(
ref->flags & 0x2)
2377 have_default_source = 1;
2384 if((
ref->flags & 0x4) == 0) {
2385 if(
ref->flags & 0x2) {
2397 if(!have_default &&
first)
2398 first->flags |= 0x1;
2399 if(!have_default_source && first_source)
2400 first_source->flags |= 0x1;
2413 if (-1 <
module->typelib_idx)
2453 error(
"add_entry: unhandled type 0x%x for %s\n",
2461 switch(stmt->
type) {
2503 if (
offset == -1)
return;
2548 typelib->typelib_header.varflags |= 0x10;
2569 typelib->typelib_header.varflags |= 0x100;
2594 typelib->typelib_header.flags = 0;
2595 if (!
typelib->typelib->attrs)
return;
2598 switch(
attr->type) {
2600 typelib->typelib_header.flags |= 0x02;
2603 typelib->typelib_header.flags |= 0x04;
2606 typelib->typelib_header.flags |= 0x01;
2617 if (
typelib->typelib_segment_data[segment])
2626 typeinfo->typeinfo->memoffset = filesize;
2628 filesize +=
typeinfo->func_data[0] + ((
typeinfo->typeinfo->cElement & 0xffff) * 12);
2630 filesize +=
typeinfo->var_data[0] + (((
typeinfo->typeinfo->cElement >> 16) & 0xffff) * 12);
2638 if (
typelib->typelib_segdir[segment].length) {
2639 typelib->typelib_segdir[segment].offset = filepos;
2641 typelib->typelib_segdir[segment].offset = -1;
2644 return typelib->typelib_segdir[segment].length;
2657 typedata_size =
typeinfo->func_data[0];
2659 typedata_size +=
typeinfo->var_data[0];
2660 put_data(&typedata_size,
sizeof(
int));
2679 for(
i = 0;
i < (
typeinfo->typeinfo->cElement >> 16);
i++) {
2695 if(
typelib->typelib_header.varflags & 0x100) filepos += 4;
2696 filepos +=
typelib->typelib_header.nrtypeinfos * 4;
2717 if(
typelib->typelib_header.varflags & 0x100)
2740 char typelib_id[13] =
"#1";
2744 snprintf( typelib_id,
sizeof(typelib_id),
"#%d",
expr->cval );
2762 unsigned int version = 7 << 24 | 555;
2763 static const struct uuid midl_time_guid = {0xde77ba63,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};
2764 static const struct uuid midl_version_guid = {0xde77ba64,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};
2765 static const struct uuid midl_info_guid = {0xde77ba65,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};
2766 char info_string[128];
2768 msft =
xmalloc(
sizeof(*msft));
2769 memset(msft, 0,
sizeof(*msft));
2808 switch(
attr->type) {
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
void * xrealloc(void *oldmem, size_t size)
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t _In_ uint64_t decoded_size
static const WCHAR version[]
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
struct tagMSFT_ImpInfo MSFT_ImpInfo
struct tagMSFT_Header MSFT_Header
#define MSFT_IMPINFO_OFFSET_IS_GUID
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLuint GLuint GLsizei GLenum type
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static DWORD block_size(DWORD block)
#define memcpy(s1, s2, n)
static const char * target_type(DWORD dwType)
static HRESULT flush_output_buffer(mxwriter *This)
#define IsEqualIID(riid1, riid2)
_Check_return_ _CRTIMP char *__cdecl asctime(_In_ const struct tm *_Tm)
_CRTIMP struct tm *__cdecl gmtime(const time_t *_Time)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
MSFT_TypeInfoBase * typeinfo
unsigned int var_data_allocated
struct _msft_typeinfo_t * next_typeinfo
unsigned int func_data_allocated
struct _msft_typeinfo_t * typeinfos
int * typelib_namehash_segment
MSFT_pSeg typelib_segdir[MSFT_SEG_MAX]
MSFT_Header typelib_header
int typelib_typeinfo_offsets[0x200]
unsigned char * typelib_segment_data[MSFT_SEG_MAX]
int typelib_segment_block_length[MSFT_SEG_MAX]
int * typelib_guidhash_segment
int help_string_dll_offset
struct _msft_typeinfo_t * last_typeinfo
typeref_list_t * type_list
union _statement_t::@5358 u
union _type_t::@5357 details
struct iface_details * iface
IMAGEHLP_MODULEW64 module
unsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align)
static int type_array_is_decl_as_ptr(const type_t *type)
static enum type_type type_get_type(const type_t *type)
static typeref_list_t * type_coclass_get_ifaces(const type_t *type)
static type_t * type_function_get_rettype(const type_t *type)
static var_list_t * type_union_get_cases(const type_t *type)
static var_list_t * type_dispiface_get_methods(const type_t *type)
static type_t * type_array_get_element_type(const type_t *type)
static type_t * type_alias_get_aliasee_type(const type_t *type)
static type_t * type_dispiface_get_inherit(const type_t *type)
static var_list_t * type_struct_get_fields(const type_t *type)
static var_list_t * type_encapsulated_union_get_fields(const type_t *type)
static type_t * type_pointer_get_ref_type(const type_t *type)
static int type_is_alias(const type_t *type)
static type_t * type_iface_get_inherit(const type_t *type)
static var_list_t * type_function_get_args(const type_t *type)
static unsigned int type_array_get_dim(const type_t *type)
static statement_list_t * type_iface_get_stmts(const type_t *type)
static var_list_t * type_enum_get_values(const type_t *type)
static var_list_t * type_dispiface_get_props(const type_t *type)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
unsigned int pointer_size
@ TYPE_ENCAPSULATED_UNION
static enum type_type type_get_type_detect_alias(const type_t *type)
#define STATEMENTS_FOR_EACH_FUNC(stmt, stmts)
static int ctl2_find_name(msft_typelib_t *typelib, char *name)
static void add_module_typeinfo(msft_typelib_t *typelib, type_t *module)
static void set_help_string_context(msft_typelib_t *typelib)
static void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration)
static void set_doc_string(msft_typelib_t *typelib)
static void add_entry(msft_typelib_t *typelib, const statement_t *stmt)
static void set_lcid(msft_typelib_t *typelib)
static void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure)
int create_msft_typelib(typelib_t *typelib)
static void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls)
static void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface)
struct _msft_typeinfo_t msft_typeinfo_t
static void set_name(msft_typelib_t *typelib)
static msft_typeinfo_t * create_msft_typeinfo(msft_typelib_t *typelib, enum type_kind kind, const char *name, const attr_list_t *attrs)
static void set_custdata(msft_typelib_t *typelib, const struct uuid *guid, int vt, const void *value, int *offset)
static void ctl2_finalize_typeinfos(msft_typelib_t *typelib, int filesize)
static int add_func_desc(msft_typeinfo_t *typeinfo, var_t *func, int index)
static void write_string_value(msft_typelib_t *typelib, int *out, const char *value)
static void add_typedef_typeinfo(msft_typelib_t *typelib, type_t *dispinterface)
static void set_custdata_attr(msft_typelib_t *typelib, attr_custdata_t *custdata, int *offset)
static void add_dispatch(msft_typelib_t *typelib)
static void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface)
static void set_version(msft_typelib_t *typelib)
static void write_int_value(msft_typelib_t *typelib, int *out, int vt, int value)
static void set_lib_flags(msft_typelib_t *typelib)
static void ctl2_write_typeinfos(msft_typelib_t *typelib)
static int encode_type(msft_typelib_t *typelib, int vt, type_t *type, int *encoded_type, int *decoded_size)
static int ctl2_find_guid(msft_typelib_t *typelib, int hash_key, const struct uuid *guid)
static void alloc_importinfo(msft_typelib_t *typelib, importinfo_t *importinfo)
static void ctl2_init_segdir(msft_typelib_t *typelib)
static void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion)
static int ctl2_alloc_name(msft_typelib_t *typelib, const char *name)
static void dump_type(type_t *t)
static int ctl2_encode_string(const char *string, char **result)
static void add_type_typeinfo(msft_typelib_t *typelib, type_t *type)
struct tagMSFT_ImpFile MSFT_ImpFile
static int ctl2_alloc_string(msft_typelib_t *typelib, const char *string)
static importinfo_t * find_importinfo(msft_typelib_t *typelib, const char *name)
static int ctl2_alloc_typeinfo(msft_typelib_t *typelib, int nameoffset)
static void set_help_context(msft_typelib_t *typelib)
static void set_guid(msft_typelib_t *typelib)
static void add_var_desc(msft_typeinfo_t *typeinfo, unsigned int index, var_t *var)
static int ctl2_alloc_guid(msft_typelib_t *typelib, MSFT_GuidEntry *guid)
static void set_help_string_dll(msft_typelib_t *typelib)
static int ctl2_alloc_segment(msft_typelib_t *typelib, enum MSFT_segment_index segment, int size, int block_size)
static int ctl2_hash_guid(const struct uuid *guid)
static void ctl2_init_header(msft_typelib_t *typelib)
static int alloc_importfile(msft_typelib_t *typelib, int guidoffset, int major_version, int minor_version, const char *filename)
static void ctl2_write_segment(msft_typelib_t *typelib, int segment)
static void save_all_changes(msft_typelib_t *typelib)
static int ctl2_encode_name(msft_typelib_t *typelib, const char *name, char **result)
static int alloc_msft_importinfo(msft_typelib_t *typelib, MSFT_ImpInfo *impinfo)
struct _msft_typelib_t msft_typelib_t
static void add_impl_type(msft_typeinfo_t *typeinfo, type_t *ref, importinfo_t *importinfo)
static int encode_var(msft_typelib_t *typelib, type_t *type, var_t *var, int *encoded_type, int *decoded_size)
static unsigned int get_ulong_val(unsigned int val, int vt)
static void set_help_file_name(msft_typelib_t *typelib)
static void write_default_value(msft_typelib_t *typelib, type_t *type, expr_t *expr, int *out)
static int ctl2_finalize_segment(msft_typelib_t *typelib, int filepos, int segment)
static unsigned int block