static void print_types(compile_t* c, FILE* fp, printbuf_t* buf) { size_t i = HASHMAP_BEGIN; reachable_type_t* t; while((t = reachable_types_next(c->reachable, &i)) != NULL) { // Print the docstring if we have one. ast_t* def = (ast_t*)ast_data(t->ast); ast_t* docstring = ast_childidx(def, 6); if(ast_id(docstring) == TK_STRING) fprintf(fp, "/*\n%s*/\n", ast_name(docstring)); if(!is_pointer(t->ast) && !is_maybe(t->ast) && !is_machine_word(t->ast)) { // Forward declare an opaque type. fprintf(fp, "typedef struct %s %s;\n\n", t->name, t->name); // Function signature for the allocator. printbuf(buf, "/* Allocate a %s without initialising it. */\n%s* %s_Alloc();\n\n", t->name, t->name, t->name ); } print_methods(c, t, buf); } }
static int get_mediainfo(struct shinkos2145_ctx *ctx) { struct s2145_cmd_hdr cmd; struct s2145_mediainfo_resp *resp = (struct s2145_mediainfo_resp *) rdbuf; int ret, num = 0; int i; cmd.cmd = cpu_to_le16(S2145_CMD_MEDIAINFO); cmd.len = cpu_to_le16(0); if ((ret = s2145_do_cmd(ctx, (uint8_t*)&cmd, sizeof(cmd), sizeof(*resp), &num)) < 0) { ERROR("Failed to execute %s command\n", cmd_names(cmd.cmd)); return ret; } if (le16_to_cpu(resp->hdr.payload_len) != (sizeof(struct s2145_mediainfo_resp) - sizeof(struct s2145_status_hdr))) return -2; INFO("Supported Media Information: %d entries:\n", resp->count); for (i = 0 ; i < resp->count ; i++) { INFO(" %02d: C 0x%02x (%s), %04dx%04d, M 0x%02x (%s), P 0x%02x (%s)\n", i, resp->items[i].code, print_medias(resp->items[i].code), le16_to_cpu(resp->items[i].columns), le16_to_cpu(resp->items[i].rows), resp->items[i].media_type, media_types(resp->items[i].media_type), resp->items[i].print_type, print_methods(resp->items[i].print_type)); } return 0; }