// cwd([dirname]) // -- changes directory to dirname (when specified). // returns the full path name of the current directory. GUTF8String GOS::cwd(const GUTF8String &dirname) { #if defined(UNIX) || defined(macintosh) || defined(OS2) if (dirname.length() && chdir(dirname.getUTF82Native())==-1)//MBCS cvt G_THROW(errmsg()); char *string_buffer; GPBuffer<char> gstring_buffer(string_buffer,MAXPATHLEN+1); char *result = getcwd(string_buffer,MAXPATHLEN); if (!result) G_THROW(errmsg()); return GNativeString(result).getNative2UTF8();//MBCS cvt #elif defined (WIN32) char drv[2]; if (dirname.length() && _chdir(dirname.getUTF82Native())==-1)//MBCS cvt G_THROW(errmsg()); drv[0]= dot ; drv[1]=0; char *string_buffer; GPBuffer<char> gstring_buffer(string_buffer,MAXPATHLEN+1); char *result = getcwd(string_buffer,MAXPATHLEN); GetFullPathName(drv, MAXPATHLEN, string_buffer, &result); return GNativeString(string_buffer).getNative2UTF8();//MBCS cvt #else #error "Define something here for your operating system" #endif }
int main(int argc, char **argv) { setlocale(LC_ALL,""); djvu_programname(argv[0]); GArray<GUTF8String> dargv(0,argc-1); for(int i=0;i<argc;++i) dargv[i]=GNativeString(argv[i]); G_TRY { if (argc<=1) usage(); for (int i=1; i<argc; i++) { const GURL::Filename::UTF8 url(dargv[i]); display(url); } } G_CATCH(ex) { ex.perror(); exit(1); } G_ENDCATCH; return 0; }
GUTF8String GOS::getenv(const GUTF8String &name) { GUTF8String retval; if(name.length()) { const char *env=::getenv(name.getUTF82Native()); if(env) { retval=GNativeString(env); } } return retval; }
int main(int argc, char **argv) { setlocale(LC_ALL,""); setlocale(LC_NUMERIC,"C"); djvu_programname(argv[0]); // get output file name if (argc>2 && !strcmp(argv[1],"-o")) { outputfile = argv[2]; argv += 2; argc -= 2; } // convert iff file name GArray<GUTF8String> dargv(0, argc-1); for(int i=0;i<argc;++i) dargv[i]=GNativeString(argv[i]); if (argc <= 1) usage(); if (outputfile && !(outputf = fopen(outputfile,"w"))) { DjVuPrintErrorUTF8("djvudump: Cannot open output file.\n"); exit(1); } G_TRY { for (int i=1; i<argc; i++) { const GURL::Filename::UTF8 url(dargv[i]); display(url); } } G_CATCH(ex) { ex.perror(); exit(1); } G_ENDCATCH; return 0; }
int main(int argc, char **argv) { setlocale(LC_ALL,""); setlocale(LC_NUMERIC,"C"); djvu_programname(argv[0]); GArray<GUTF8String> dargv(0,argc-1); for(int i=0;i<argc;++i) dargv[i]=GNativeString(argv[i]); G_TRY { // Print usage when called without enough arguments if (argc <= 2) usage(); // Open djvu file remove(dargv[1]); GP<IFFByteStream> giff = IFFByteStream::create(ByteStream::create(GURL::Filename::UTF8(dargv[1]),"wb")); IFFByteStream &iff=*giff; // Create header iff.put_chunk("FORM:DJVU", 1); // Check if shared dicts are present check_for_shared_dict(dargv); // Create information chunk create_info_chunk(iff, dargv); // Parse all arguments for (int i=2; i<argc; i++) { if (!dargv[i].cmp("INFO=",5)) { if (i>2) DjVuPrintErrorUTF8("%s","djvumake: 'INFO' chunk should appear first (ignored)\n"); } else if (!dargv[i].cmp("Sjbz=",5)) { if (flag_contains_stencil) DjVuPrintErrorUTF8("%s","djvumake: duplicate stencil chunk\n"); create_jb2_chunk(iff, "Sjbz", GURL::Filename::UTF8(5+(const char *)dargv[i])); flag_contains_stencil = 1; if (flag_fg_needs_palette && blit_count >= 0) create_fgbz_chunk(iff); flag_fg_needs_palette = 0; } else if (!dargv[i].cmp("Smmr=",5)) { create_mmr_chunk(iff, "Smmr", GURL::Filename::UTF8(5+(const char *)dargv[i])); if (flag_contains_stencil) DjVuPrintErrorUTF8("%s","djvumake: duplicate stencil chunk\n"); flag_contains_stencil = 1; } else if (!dargv[i].cmp("FGbz=",5)) { const char *c = 5 + (const char*)dargv[i]; if (flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: duplicate 'FGxx' chunk\n"); if (c[0] != '#') { create_raw_chunk(iff, "FGbz", GURL::Filename::UTF8(c)); } else { parse_color_zones(c); if (flag_contains_stencil && blit_count >= 0) create_fgbz_chunk(iff); else flag_fg_needs_palette = 1; } flag_contains_fg = 1; } else if (!dargv[i].cmp("FG44=",5)) { if (flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: duplicate 'FGxx' chunk\n"); create_fg44_chunk(iff, "FG44", GURL::Filename::UTF8(5+(const char *)dargv[i])); } else if (!dargv[i].cmp("BG44=",5)) { create_bg44_chunk(iff, "BG44", 5+(const char *)dargv[i]); } else if (!dargv[i].cmp("BGjp=",5) || !dargv[i].cmp("BG2k=",5) ) { if (flag_contains_bg) DjVuPrintErrorUTF8("%s","djvumake: Duplicate BGxx chunk\n"); GUTF8String chkid = dargv[i].substr(0,4); create_raw_chunk(iff, chkid, GURL::Filename::UTF8(5+(const char *)dargv[i])); flag_contains_bg = 1; } else if (!dargv[i].cmp("FGjp=",5) || !dargv[i].cmp("FG2k=",5)) { if (flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: duplicate 'FGxx' chunk\n"); GUTF8String chkid = dargv[i].substr(0,4); create_raw_chunk(iff, chkid, GURL::Filename::UTF8(5+(const char *)dargv[i])); flag_contains_fg = 1; } else if (!dargv[i].cmp("INCL=",5)) { create_incl_chunk(iff, "INCL", GURL::Filename::UTF8(5+(const char *)dargv[i]).fname()); flag_contains_incl = 1; } else if (!dargv[i].cmp("PPM=",4)) { if (flag_contains_bg || flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: Duplicate 'FGxx' or 'BGxx' chunk\n"); create_masksub_chunks(iff, GURL::Filename::UTF8(4+(const char *)dargv[i])); flag_contains_bg = 1; flag_contains_fg = 1; } else if (dargv[i].length() > 4 && dargv[i][4] == '=') { GNativeString chkid = dargv[i].substr(0,4); if (chkid != "TXTz" && chkid != "TXTa" && chkid != "ANTz" && chkid != "ANTa" && chkid != "Djbz" ) DjVuPrintErrorUTF8("djvumake: creating chunk of unknown type ``%s''.\n", (const char*)chkid); create_raw_chunk(iff, chkid, GURL::Filename::UTF8(5+(const char *)dargv[i])); } else { DjVuPrintErrorUTF8("djvumake: illegal argument : ``%s'' (ignored)\n", (const char *)dargv[i]); } } // Common cases for missing chunks if (flag_contains_stencil) { if (flag_contains_bg && ! flag_contains_fg) { DjVuPrintErrorUTF8("%s","djvumake: generating black FGbz chunk\n"); g().colorzones.empty(); g().colorpalette = ByteStream::create(); char rgb[3] = {0,0,0}; g().colorpalette->writall(rgb, 3); create_fgbz_chunk(iff); flag_contains_fg = 1; } if (flag_contains_fg && !flag_contains_bg) { DjVuPrintErrorUTF8("%s","djvumake: generating white BG44 chunk\n"); GPixel bgcolor = GPixel::WHITE; GP<GPixmap> inputsub=GPixmap::create((h+11)/12, (w+11)/12, &bgcolor); GP<IW44Image> iw = IW44Image::create_encode(*inputsub, 0, IW44Image::CRCBnone); IWEncoderParms iwparms; iff.put_chunk("BG44"); iwparms.slices = 97; iw->encode_chunk(iff.get_bytestream(), iwparms); iff.close_chunk(); flag_contains_bg = 1; } } // Close iff.close_chunk(); // Sanity checks if (flag_contains_stencil) { // Compound or Bilevel if (flag_contains_bg && ! flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: djvu file contains a BGxx chunk but no FGxx chunk\n"); if (flag_contains_fg && ! flag_contains_bg) DjVuPrintErrorUTF8("%s","djvumake: djvu file contains a FGxx chunk but no BGxx chunk\n"); } else if (flag_contains_bg) { // Photo DjVu Image if (flag_contains_bg!=1) DjVuPrintErrorUTF8("%s","djvumake: photo djvu image has subsampled BGxx chunk\n"); if (flag_fg_needs_palette) DjVuPrintErrorUTF8("%s","djvumake: could not generate FGbz chunk, as stencil is not available\n"); else if (flag_contains_fg) DjVuPrintErrorUTF8("%s","djvumake: photo djvu file contains FGxx chunk\n"); } else DjVuPrintErrorUTF8("%s","djvumake: djvu file contains neither Sxxx nor BGxx chunks\n"); } G_CATCH(ex) { remove(dargv[1]); ex.perror(); exit(1); } G_ENDCATCH; return 0; }
int main(int argc, const char **argv) { setlocale(LC_ALL,""); setlocale(LC_NUMERIC,"C"); djvu_programname(argv[0]); GArray<GUTF8String> dargv(0,argc-1); for(int i=0;i<argc;++i) dargv[i]=GNativeString(argv[i]); G_TRY { GURL inputppmurl; GURL outputdjvuurl; // Defaults cpaldjvuopts opts; opts.dpi = 100; opts.ncolors = 256; opts.verbose = false; opts.bgwhite = false; // Parse options for (int i=1; i<argc; i++) { GUTF8String arg = dargv[i]; if (arg == "-colors" && i+1<argc) { char *end; opts.ncolors = strtol(dargv[++i], &end, 10); if (*end || opts.ncolors<2 || opts.ncolors>4096) usage(); } else if (arg == "-dpi" && i+1<argc) { char *end; opts.dpi = strtol(dargv[++i], &end, 10); if (*end || opts.dpi<25 || opts.dpi>6000) usage(); } else if (arg == "-verbose" || arg == "-v") opts.verbose = true; else if (arg == "-bgwhite") opts.bgwhite = true; else if (arg[0] == '-' && arg[1]) usage(); else if (inputppmurl.is_empty()) inputppmurl = GURL::Filename::UTF8(arg); else if (outputdjvuurl.is_empty()) outputdjvuurl = GURL::Filename::UTF8(arg); else usage(); } if (inputppmurl.is_empty() || outputdjvuurl.is_empty()) usage(); // Load and run GP<ByteStream> ibs=ByteStream::create(inputppmurl,"rb"); cpaldjvu(ibs, outputdjvuurl, opts); } G_CATCH(ex) { ex.perror(); exit(1); } G_ENDCATCH; return 0; }
GList<GURL> DjVuMessage::GetProfilePaths(void) { static bool first=true; static GList<GURL> realpaths; if(first) { first=false; GMap<GUTF8String,void *> pathsmap; GList<GURL> paths; GURL path; const GUTF8String envp(GOS::getenv(DjVuEnv)); if(envp.length()) appendPath(GURL::Filename::UTF8(envp),pathsmap,paths); #if defined(WIN32) || defined(UNIX) GURL mpath(GetModulePath()); if(!mpath.is_empty() && mpath.is_dir()) { #if defined(UNIX) && !defined(AUTOCONF) && !defined(NDEBUG) appendPath(GURL::UTF8(DebugModuleDjVuDir,mpath),pathsmap,paths); #endif appendPath(mpath,pathsmap,paths); mpath=mpath.base(); appendPath(GURL::UTF8(ModuleDjVuDir,mpath),pathsmap,paths); mpath=mpath.base(); appendPath(GURL::UTF8(ModuleDjVuDir,mpath),pathsmap,paths); } #endif #if defined(AUTOCONF) GURL dpath = GURL::Filename::UTF8(DjVuDataDir); appendPath(dpath,pathsmap,paths); #endif #ifdef WIN32 appendPath(RegOpenReadConfig(HKEY_CURRENT_USER),pathsmap,paths); appendPath(RegOpenReadConfig(HKEY_LOCAL_MACHINE),pathsmap,paths); #else GUTF8String home=GOS::getenv("HOME"); # if HAVE_GETPWUID if (! home.length()) { struct passwd *pw=0; if ((pw = getpwuid(getuid()))) home=GNativeString(pw->pw_dir); } # endif if (home.length()) { GURL hpath = GURL::UTF8(LocalDjVuDir,GURL::Filename::UTF8(home)); appendPath(hpath,pathsmap,paths); } #endif #ifdef LT_DEFAULT_PREFIX appendPath(GURL::Filename::UTF8(DjVuPrefixDir),pathsmap,paths); #endif appendPath(GURL::Filename::UTF8(RootDjVuDir),pathsmap,paths); pathsmap.empty(); GPosition pos; GList< GMap<GUTF8String,GP<lt_XMLTags> > > localemaps; for(pos=paths;pos;++pos) { path=GURL::UTF8(LanguageFile,paths[pos]); if(path.is_file()) { const GP<lt_XMLTags> xml(lt_XMLTags::create(ByteStream::create(path,"rb"))); const GPList<lt_XMLTags> Body(xml->get_Tags(bodystring)); GPosition pos=Body; if(!pos || (pos != Body.lastpos())) { G_THROW( ERR_MSG("XMLAnno.extra_body") ); } const GP<lt_XMLTags> GBody(Body[pos]); if(!GBody) { G_THROW( ERR_MSG("XMLAnno.no_body") ); } GMap<GUTF8String,GP<lt_XMLTags> > localemap; lt_XMLTags::get_Maps(languagestring,localestring,Body,localemap); localemaps.append(localemap); } } GList<GURL> localepaths; GList<GURL> osilocalepaths; // Need to do it the right way! GUTF8String defaultlocale = getenv("LANGUAGE"); if (! defaultlocale) { const GUTF8String oldlocale(setlocale(LC_MESSAGES,0)); defaultlocale = setlocale(LC_MESSAGES,""); setlocale(LC_MESSAGES,(const char *)oldlocale); } // Unfathomable search. for(int loop=0; loop<2; loop++) { static const char sepchars[]=" _.@"; const char *p=sepchars+sizeof(sepchars)-1; do { int sepcharpos=p[0]?defaultlocale.search(p[0]):defaultlocale.length(); if(sepcharpos > 0) { const GUTF8String sublocale(defaultlocale,sepcharpos); const GUTF8String downcasesublocale("downcase^"+sublocale.downcase()); for(pos=localemaps;pos;++pos) { const GMap<GUTF8String,GP<lt_XMLTags> > &localemap=localemaps[pos]; GPosition pos=localemap.contains(sublocale); if(!pos) pos=localemap.contains(downcasesublocale); if(pos) { const GMap<GUTF8String,GUTF8String>&args = localemap[pos]->get_args(); pos = args.contains(srcstring); if (pos) { const GUTF8String src(args[pos]); for(pos=paths;pos;++pos) { path=GURL::UTF8(src,paths[pos]); if(path.is_dir()) localepaths.append(path); path=GURL::UTF8(GUTF8String(opensourcedir)+"/"+src,paths[pos]); if(path.is_dir()) osilocalepaths.append(path); } } // We don't need to check anymore language files. p=sepchars; break; } } if(!pos) { for(pos=paths;pos;++pos) { path=GURL::UTF8(sublocale,paths[pos]); if(path.is_dir()) { localepaths.append(path); } path=GURL::UTF8(GUTF8String(opensourcedir)+"/"+sublocale,paths[pos]); if(path.is_dir()) { osilocalepaths.append(path); } } } } } while(p-- != sepchars); if((GPosition) localepaths) break; defaultlocale="C"; } for(pos=localepaths;pos;++pos) appendPath(localepaths[pos],pathsmap,realpaths); for(pos=paths;pos;++pos) appendPath(paths[pos],pathsmap,realpaths); for(pos=osilocalepaths;pos;++pos) appendPath(osilocalepaths[pos],pathsmap,realpaths); for(pos=paths;pos;++pos) { path=GURL::UTF8(opensourcedir,paths[pos]); appendPath(path,pathsmap,realpaths); } } return realpaths; }
int main(int argc, const char **argv) { setlocale(LC_ALL,""); setlocale(LC_NUMERIC,"C"); djvu_programname(argv[0]); GArray<GUTF8String> dargv(0,argc-1); for(int i=0;i<argc;++i) dargv[i]=GNativeString(argv[i]); G_TRY { GURL inputpbmurl; GURL outputdjvuurl; cjb2opts opts; // Defaults opts.forcedpi = 0; opts.dpi = 300; opts.losslevel = 0; opts.verbose = false; // Parse options for (int i=1; i<argc; i++) { GUTF8String arg = dargv[i]; if (arg == "-dpi" && i+1<argc) { char *end; opts.dpi = opts.forcedpi = strtol(dargv[++i], &end, 10); if (*end || opts.dpi<25 || opts.dpi>1200) usage(); } else if (arg == "-losslevel") { char *end; opts.losslevel = strtol(dargv[++i], &end, 10); if (*end || opts.losslevel<0 || opts.losslevel>200) usage(); } else if (arg == "-lossless") opts.losslevel = 0; else if (arg == "-lossy") opts.losslevel = 100; else if (arg == "-clean") // almost deprecated opts.losslevel = 1; else if (arg == "-verbose" || arg == "-v") opts.verbose = true; else if (arg[0] == '-' && arg[1]) usage(); else if (inputpbmurl.is_empty()) inputpbmurl = GURL::Filename::UTF8(arg); else if (outputdjvuurl.is_empty()) outputdjvuurl = GURL::Filename::UTF8(arg); else usage(); } if (inputpbmurl.is_empty() || outputdjvuurl.is_empty()) usage(); // Execute cjb2(inputpbmurl, outputdjvuurl, opts); } G_CATCH(ex) { ex.perror(); exit(1); } G_ENDCATCH; return 0; }