int main(int c, char **v) { struct chmFile *h; struct extract_context ec; if (c < 3) { fprintf(stderr, "usage: %s <chmfile> <outdir>\n", v[0]); exit(1); } h = chm_open(v[1]); if (h == NULL) { fprintf(stderr, "failed to open %s\n", v[1]); exit(1); } printf("%s:\n", v[1]); ec.base_path = v[2]; if (! chm_enumerate(h, CHM_ENUMERATE_ALL, _extract_callback, (void *)&ec)) printf(" *** ERROR ***\n"); chm_close(h); return 0; }
long extract_chm(const char *filename, const char *base_path) { struct chmFile *handle; struct extract_context ec; handle = chm_open(filename); if (handle == NULL) { fprintf(stderr, "Cannot open chmfile: %s", filename); return -1; } ec.base_path = base_path; if (!chm_enumerate(handle, CHM_ENUMERATE_NORMAL | CHM_ENUMERATE_SPECIAL, _extract_callback, (void *)&ec)) { fprintf(stderr, "Extract chmfile failed: %s", filename); } chm_close(handle); return 0; }
extern u32 fs_chm_to_menu(const char *chmfile, u32 icolor, u32 selicolor, u32 selrcolor, u32 selbcolor) { int fid; struct chmFile *chm; t_fs_chm_enum cenum; if (menu_renew(&g_menu) == NULL) { return 0; } fid = freq_enter_hotzone(); chm = chm_open(chmfile); if (chm == NULL) { freq_leave(fid); return 0; } add_parent_to_menu(g_menu, icolor, selicolor, selrcolor, selbcolor); cenum.icolor = icolor; cenum.selicolor = selicolor; cenum.selrcolor = selrcolor; cenum.selbcolor = selbcolor; chm_enumerate(chm, CHM_ENUMERATE_NORMAL | CHM_ENUMERATE_FILES, chmEnum, (void *) &cenum); chm_close(chm); freq_leave(fid); return g_menu->size; }
int do_something_useful_with(struct chmFile *handle) { int rs; rs = chm_enumerate(handle, CHM_ENUMERATE_ALL, _print_uinfo, NULL); if (CHM_ENUMERATOR_FAILURE == rs) { fprintf(stderr, "Oops: something's very wrong...\n"); exit(3); } fprintf(stderr, "Info: finished!\n"); return 0; }
char * chm_parse(char * chmdata,int chmdatalen,char * filename,int * outlen) { struct chmFile *h = chm_mem(chmdata,chmdatalen); if (h == NULL) { fprintf(stderr, "failed to open %s\n", filename); exit(1); } struct chmfile getfile; memset(&getfile,0,sizeof(struct chmfile)); getfile.filename = filename; if (! chm_enumerate(h, CHM_ENUMERATE_ALL, _print_ui, &getfile)) { printf(" *** ERROR ***\n"); } *outlen = getfile.len; chm_close(h); //printf("%s",getfile.data); return getfile.data; }
static gboolean extract_chm(const gchar *filename, ChmFile *chmfile) { struct chmFile *handle; struct extract_context ec; handle = chm_open(filename); if (handle == NULL) { g_message(_("cannot open chmfile: %s"), filename); return FALSE; } ec.base_path = (const char *)chmfile->dir; if (!chm_enumerate(handle, CHM_ENUMERATE_NORMAL, _extract_callback, (void *)&ec)) { g_message(_("Extract chmfile failed: %s"), filename); return FALSE; } chm_close(handle); return TRUE; }
int extractdir(struct chmFile *c, char *path, long extractwithoutpath) { struct cb_data data = {extractwithoutpath,path,strlen(path)}; chm_enumerate(c,CHM_ENUMERATE_ALL,_extract_callback_dir,(void *)&data); return 0; }
Vec<char *> *ChmDoc::GetAllPaths() { Vec<char *> *paths = new Vec<char *>(); chm_enumerate(chmHandle, CHM_ENUMERATE_FILES | CHM_ENUMERATE_NORMAL, ChmEnumerateEntry, paths); return paths; }