static void dump_msft_func(int n) { int size, args_cnt, i, extra_attr, fkccic; print_begin_block_id("FuncRecord", n); size = print_short_hex("size"); print_short_hex("index"); print_hex("DataType"); print_hex("flags"); print_short_hex("VtableOffset"); print_short_hex("funcdescsize"); fkccic = print_hex("FKCCIC"); args_cnt = print_short_hex("nrargs"); print_short_hex("noptargs"); extra_attr = size/sizeof(INT) - 6 - args_cnt*(fkccic&0x1000 ? 4 : 3); if(extra_attr) print_hex("helpcontext"); if(extra_attr >= 2) print_hex("oHelpString"); if(extra_attr >= 3) print_hex("toEntry"); if(extra_attr >= 4) print_hex("res9"); if(extra_attr >= 5) print_hex("resA"); if(extra_attr >= 6) print_hex("HelpStringContext"); if(extra_attr >= 7) print_hex("oCustData"); for(i = 0; i < extra_attr-7; i++) print_hex_id("oArgCustData", i); if(fkccic & 0x1000) { for(i=0; i < args_cnt; i++) print_hex_id("default value[%d]", i); } for(i=0; i < args_cnt; i++) { print_begin_block_id("param", i); /* FIXME: Handle default values */ print_hex("data[0]"); print_hex("paramflags"); print_hex("data[2]"); print_end_block(); } print_end_block(); }
void msft_dump(void) { int i; dump_msft_header(); for(i=0; i < typeinfo_cnt; i++) print_hex_id("typeinfo %d offset", i); if(header_flags & HELPDLLFLAG) print_hex("help dll offset"); print_offset(); printf("\n"); dump_msft_segdir(); while(!msft_eof) { if(!dump_offset()) print_hex("unknown"); } }
static int dump_msft_typeinfo(int n) { int i; print_begin_block_id("TypeInfo", n); if((msft_typeinfo_kind[n] & 0xf) == TKIND_COCLASS) { dump_msft_coclass(n); print_end_block(); return -1; } print_dec("size"); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) dump_msft_func(i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) dump_msft_var(i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d id", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d id", i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d name", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d name", i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d offset", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d offset", i); print_end_block(); return -1; }