This is kpsetool.c in view mode; [Download] [Up]
/* kpsexpand, kpsepath, kpsewhich: interface program to the Kpathsea library. Author: Thomas Esser <te@informatik.uni-hannover.de>: ideas, first version */ #include <kpathsea/config.h> #include <kpathsea/c-limits.h> #include <kpathsea/c-memstr.h> #include <kpathsea/magstep.h> #include <kpathsea/proginit.h> #include <kpathsea/progname.h> #include <kpathsea/tex-glyph.h> #include <kpathsea/expand.h> /* which action to perform ? */ #define KPSEWHICH 0 #define KPSEPATH 1 #define KPSEXPAND 2 static void typehelp(void); static kpse_file_format_type format_init P1C(char *, pathtype); void kpsexpand P2C(int, argc, char **, argv); void kpsepath P2C(int, argc, char **, argv); void kpsewhich P2C(int, argc, char **, argv); void opt_help(void); static string progname; int main P2C(int, argc, char **, argv) { string mode = ""; string virtname; int action; char opt; progname=(string) basename(argv[0]); virtname=progname; /* may be changed by "-n" option */ if (strcmp(progname, "kpsepath") == 0) action = KPSEPATH; else if (strcmp(progname, "kpsewhich") == 0) action = KPSEWHICH; else action = KPSEXPAND; while (--argc > 0 && (*++argv)[0] == '-') { switch (opt = argv[0][1]) { case 'n': virtname = (++argv)[0]; --argc; break; case 'm': mode = (++argv)[0]; --argc; break; case 'w': action = KPSEWHICH; break; case 'p': action = KPSEPATH; break; case 'v': action = KPSEXPAND; break; default: fprintf(stderr, "%s: unknown option '%c' ignored.\n", progname, opt); } } kpse_set_progname (virtname); kpse_init_prog ("KPSETOOL", 300, mode, false, "cmr10"); switch(action) { case KPSEXPAND: kpsexpand(argc, argv); break; case KPSEPATH: kpsepath(argc, argv); break; case KPSEWHICH: kpsewhich(argc,argv); break; } return 0; } /* kpsexpand string, options are parsed by the main function */ void kpsexpand P2C(int, argc, char **, argv) { if (argc != 1) { fprintf(stderr, "Usage: kpsexpand: [options] string\n"); opt_help(); exit(1); } printf("%s\n", kpse_expand(argv[0])); exit(0); } /* kpsepath pathtype, options are parsed by the main function */ void kpsepath P2C(int, argc, char **, argv) { kpse_file_format_type file_format; if (argc != 1) { fprintf(stderr, "Usage: kpsepath: [options] pathtype\n"); opt_help(); exit(1); } file_format = format_init(argv[0]); printf("%s\n", kpse_format_info[file_format].path); } /* kpsewhich pathtype filename, options are parsed by the main function */ void kpsewhich P2C(int, argc, char **, argv) { kpse_file_format_type file_format; char *found; if (argc != 2) { fprintf(stderr, "Usage: kpsewhich: [options] pathtype filename\n"); opt_help(); exit(1); } file_format = format_init(argv[0]); if ((found = kpse_find_file (argv[1], file_format, true)) != NULL) { printf("%s\n", found); exit(0); } else { fprintf(stderr, "%s: %s not found.\n", progname, argv[1]); exit(1); } } static kpse_file_format_type format_init P1C(char *, pathtype) { kpse_file_format_type file_format; /* this is a bit ugly, but that way, we do not need to know the order in tex-file.h */ if (strcmp("gf", pathtype) == 0) file_format = kpse_gf_format; else if (strcmp("pk", pathtype) == 0) file_format = kpse_pk_format; else if (strcmp("glyph", pathtype) == 0) file_format = kpse_any_glyph_format; else if (strcmp("base", pathtype) == 0) file_format = kpse_base_format; else if (strcmp("bib", pathtype) == 0) file_format = kpse_bib_format; else if (strcmp("bst", pathtype) == 0) file_format = kpse_bst_format; else if (strcmp("cnf", pathtype) == 0) file_format = kpse_cnf_format; else if (strcmp("fmt", pathtype) == 0) file_format = kpse_fmt_format; else if (strcmp("mem", pathtype) == 0) file_format = kpse_mem_format; else if (strcmp("mf", pathtype) == 0) file_format = kpse_mf_format; else if (strcmp("mfpool", pathtype) == 0) file_format = kpse_mfpool_format; else if (strcmp("mp", pathtype) == 0) file_format = kpse_mp_format; else if (strcmp("mppool", pathtype) == 0) file_format = kpse_mppool_format; else if (strcmp("mpsupport", pathtype) == 0) file_format = kpse_mpsupport_format; else if (strcmp("pict", pathtype) == 0) file_format = kpse_pict_format; else if (strcmp("tex", pathtype) == 0) file_format = kpse_tex_format; else if (strcmp("texpool", pathtype) == 0) file_format = kpse_texpool_format; else if (strcmp("tfm", pathtype) == 0) file_format = kpse_tfm_format; else if (strcmp("vf", pathtype) == 0) file_format = kpse_vf_format; else if (strcmp("dvips_config", pathtype) == 0) file_format = kpse_dvips_config_format; else if (strcmp("dvips_header", pathtype) == 0) file_format = kpse_dvips_header_format; else if (strcmp("troff_font", pathtype) == 0) file_format = kpse_troff_font_format; else { fprintf(stderr, "%s: unknown pathtype '%s'. Aborted.\n\n", progname, pathtype); typehelp(); exit(1); } kpse_init_format(file_format); kpse_format_info[file_format].suffix_search_only = false; return(file_format); } /* help entries stolen from kpathsea.texi :-) */ static char *typehelparr[] = { "Valid pathtypes are:", " gf : generic font bitmap", " pk : packed bitmap font", " base : Metafont memory dump", " bib : BibTeX bibliography source", " bst : BibTeX style files", " cnf : Kpathsea runtime configuration files", " fmt : TeX memory dump", " mem : MetaPost memory dump", " mf : Metafont source", " mfpool : Metafont program strings", " mp : MetaPost source", " mppool : MetaPost program strings", " mpsupport : MetaPost support files", " pict : Other kinds of figures", " tex : TeX source", " texpool : TeX program strings", " tfm : TeX font metrics", " vf : virtual font", " dvips_config : dvips config files", " dvips_header : dvips header files", " troff_font : troff fonts", 0}; /* idea stolen from dvips.c */ static void typehelp() { char **p ; for (p=typehelparr; *p; p++) fprintf(stderr, "%s\n", *p) ; } void opt_help() { fprintf(stderr, "\nValid options are the following:\n"); fprintf(stderr, " -n progname : pretend to be progname to kpathsea\n"); fprintf(stderr, " -m mode : set Metafont mode\n"); fprintf(stderr, " -w : act like kpsewhich\n"); fprintf(stderr, " -p : act like kpsepath\n"); fprintf(stderr, " -v : act like kpsexpand\n\n"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.