📄 mhconfig.c
字号:
/* mhconfig.c - configure MH *//* cc [-DSYS5] mhconfig.c -o mhconfig */#ifndef lintstatic char ident[] = "@(#)$Id: mhconfig.c,v 1.2 90/11/25 18:57:25 sharpe Exp Locker: sharpe $";#endif lint#include <ctype.h>#include <stdio.h>#ifdef SYS5#define index strchr#define rindex strrchr#endif SYS5extern char *strcpy(), *malloc(), *index(), *rindex();#ifdef notdefextern char *sprintf(); /* rely on stdio.h to declare this */#endif#define BANNER "This is %s, for generic UNIX (MH.6 configuration program)\n\n"#define SED "config.sed"#define SEDOC "doc/config.sed"#define MAKE "../%s/Makefile"#define WARNING "This file is automatically generated. Do not edit!"#define MHRELEASE "6.7" /* for version: "Maj.min.pat" */#define MHCENTERFOOT "MH.6.7" /* for nroff page footers */#define MHLEFTFOOT "[mh.6]" /* [mh.6] MH.6.6 page# */#define NOTOK (-1)#define NULLCP ((char *) 0)#define SVAL(s) (s ? s : "")#define QUOTE '\\'/* */static int bsd43 = 0;static int smtp = 0;static int uci = 0;static int sedP = 1;static int filesP = 1;static int docP = 1;static int makeP = 1;static char *myname = "mhconfig";static char *myopts = NULL;static char *binpath = "/usr/local";static char *bbhome = "/usr/spool/bboards";static char *bboards = "off";static char *bbdelivery = "off";static char *ccoptions = NULL;static char *chownpath = "/etc/chown";static char *compiler = "/bin/cc";static char *curses = "-lcurses -ltermlib";static char *debug = "off";static char *editor = "prompter";static char *etcpath = "/usr/local/lib/mh";static char *ldoptions = NULL;static char *ldoptlibs = NULL;static char *lex = "lex -nt";static char *mailgroup = NULL;static char *mailpath = "/usr/spool/mail";static char *maildir = NULL;static char *mailfile = NULL;static char *mandir = "/usr/man";static char *manuals = "standard";static char *mf = "off";static char *mts = "sendmail";static char *removeit = "mv -f";static char *oldload = "off";static char *options = NULL;static char *pop = "off";static char *x400 = "off";static char *ranlib = "on";static char *sharedlib = "off";static char *slibdir = "/usr/local/lib";static char *sprntf = NULL;static char *tma = "off";#define unknown 0#define mmdf 1#define mmdf2 2#define mh 3#define sendmail 4static int mtsnum = unknown;static struct mtsopt { char *mtskey; char *optval; int code; int mtsflags;#define NOFLAGS 0x00#define DOSMTP 0x01#define NOMF 0x02} mtsopts[] = { "mmdf", "MMDFMTS MMDFI", mmdf, NOFLAGS, "mmdf/smtp", "SENDMTS SMTP", mmdf, DOSMTP, "mmdf2", "MMDFMTS MMDFII", mmdf2, NOFLAGS, "mmdf2/smtp", "SENDMTS MMDFII SMTP", mmdf2, DOSMTP, "mh", "MHMTS", mh, NOFLAGS, "sendmail", "SENDMTS", sendmail, NOMF, "sendmail/smtp", "SENDMTS SMTP", sendmail, NOMF, NULL, NULL, unknown, NOFLAGS};static struct bind { char *keyword; char **value; int flags;#define BD_NIL 0x00#define BD_ADD 0x01} binds[] = { "bin", &binpath, BD_NIL, "bbhome", &bbhome, BD_NIL, "bboards", &bboards, BD_NIL, "bbdelivery", &bbdelivery, BD_NIL, "ccoptions", &ccoptions, BD_ADD, "chown", &chownpath, BD_NIL, "cc", &compiler, BD_NIL, "curses", &curses, BD_NIL, "debug", &debug, BD_NIL, "editor", &editor, BD_NIL, "etc", &etcpath, BD_NIL, "ldoptions", &ldoptions, BD_ADD, "ldoptlibs", &ldoptlibs, BD_ADD, "lex", &lex, BD_NIL, "mail", &mailpath, BD_NIL, "mailgroup", &mailgroup, BD_NIL, "mandir", &mandir, BD_NIL, "manuals", &manuals, BD_NIL, "mf", &mf, BD_NIL, "mts", &mts, BD_NIL, "oldload", &oldload, BD_NIL, "options", &options, BD_ADD, "pop", &pop, BD_NIL, "x400", &x400, BD_NIL, "ranlib", &ranlib, BD_NIL, "remove", &removeit, BD_NIL, "sharedlib", &sharedlib, BD_NIL, "slibdir", &slibdir, BD_NIL, "sprintf", &sprntf, BD_NIL, "tma", &tma, BD_NIL, NULL};char *files[] = { "../support/bboards/bboards.daily", "../support/bboards/bboards.weekly", "../support/bboards/crontab", "../support/bboards/MakeBBoards", "../config/config.c", "../zotnet/mts/mts.c", "../zotnet/mts/mtstailor", "../support/general/MailAliases", "../mts/sendmail/bboardsMH.m4", "../mts/sendmail/popMH.m4", NULL};static struct pair { char *infile; char *outfile;} makefiles[] = { "makefiles/MH-Makefile", ".", "makefiles/config","config", "makefiles/dist","dist", "makefiles/doc","doc", "makefiles/mtsM","mts", "makefiles/mts/mh","mts/mh", "makefiles/mts/mmdf","mts/mmdf", "makefiles/mts/sendmail","mts/sendmail", "makefiles/mts/x400s","mts/x400s", "makefiles/papers","papers", "makefiles/sbr","sbr", "makefiles/supportM","support", "makefiles/support/bboards","support/bboards", "makefiles/support/general","support/general", "makefiles/support/pop","support/pop", "makefiles/uip","uip", "makefiles/zotnetM","zotnet", "makefiles/zotnet/bboards","zotnet/bboards", "makefiles/zotnet/mf","zotnet/mf", "makefiles/zotnet/mts","zotnet/mts", "makefiles/zotnet/tws","zotnet/tws", NULL};static do_sed(), do_sedfile(), do_files(), do_doc(), do_make();static shell(), arginit(), add_option(), trim();static char *stradd (), *strdup (), *tail ();long time ();/* *//* ARGSUSED */main (argc, argv, envp)int argc;char **argv, **envp;{ arginit (argv); if (sedP) do_sed (); if (filesP) do_files (); if (docP) do_doc (); if (makeP) do_make ();#ifdef notdef printf ("Don't forget to edit \"config/mtstailor\"\n");#endif if (filesP || makeP) printf ("Don't forget to run \"make clean\" before compiling\n"); exit (0);}/* */static do_sed () { if (docP != 2) do_sedfile (SED, 0); do_sedfile (SEDOC, smtp);}static do_alldoc (fp)FILE *fp;{ fprintf (fp, "%s\n%s\n%s\n%s\n", /* turn @BEGIN: XX into #ifdef XX */ "s!^@BEGIN: \\(.*\\)$!.br\\", /* for MH wizard manual set */ ".ti 0i\\", "#ifdef \\1\\", ".br!" ); fprintf (fp, "%s\n%s\n%s\n%s\n", "s!^@END: \\(.*\\)$!.br\\", ".ti 0i\\", "#endif \\1\\", ".br!" );}static do_sedfile (sed, flag)char *sed;int flag;{ int i; FILE * fp; if ((fp = fopen (sed, "w")) == NULL) adios (sed, "unable to write"); printf ("generating %s\n", sed); if (docP == 2) { printf ("...using special all-doc format.\n"); printf ("Be sure to reconfigure before compiling.\n"); do_alldoc(fp); /* hack up doc/config.sed */ } fprintf (fp, "s%%@(MHWARNING)%%%s%%g\n", WARNING); fprintf (fp, "s%%@(MHRELEASE)%%%s%%g\n", MHRELEASE); fprintf (fp, "s%%@(MHCENTERFOOT)%%%s%%g\n", MHCENTERFOOT); fprintf (fp, "s%%@(MHLEFTFOOT)%%%s%%g\n", MHLEFTFOOT); fprintf (fp, "s%%@(MHBINPATH)%%%s%%g\n", SVAL (binpath)); fprintf (fp, "s%%@(MHETCPATH)%%%s%%g\n", SVAL (etcpath)); fprintf (fp, "s%%@(MHCHOWNPATH)%%%s%%g\n", SVAL (chownpath)); fprintf (fp, "s%%@(MHDROPATH)%%%s%%g\n", SVAL (maildir)); fprintf (fp, "s%%@(MHDROPFIL)%%%s%%g\n", SVAL (mailfile)); if (maildir) fprintf (fp, "s%%@(MHDROPLOC)%%%s/$USER%%g\n", SVAL (maildir)); else fprintf (fp, "s%%@(MHDROPLOC)%%$HOME/%s%%g\n", SVAL (mailfile)); fprintf (fp, "s%%@(MHDROPHAK)%%%s%%g\n",/* HACK */ maildir ? maildir : "/usr/spool/mail"); fprintf (fp, "s%%@(MHMANDIR)%%%s%%g\n", mandir); if (strcmp (manuals, "standard") == 0 || strcmp (manuals, "gen") == 0) for (i = 1; i <= 8; i++) { fprintf (fp, "s%%@(MHMANDIR%d)%%man%d%%g\n", i, i); fprintf (fp, "s%%@(MHMANEXT%d)%%%d%%g\n", i, i); } else for (i = 1; i <= 8; i++) { fprintf (fp, "s%%@(MHMANDIR%d)%%man%c%%g\n", i, strcmp (manuals, "new") == 0 ? 'n' : strcmp (manuals, "old") == 0 ? 'o' : 'l'); fprintf (fp, "s%%@(MHMANEXT%d)%%%c%%g\n", i, strcmp (manuals, "new") == 0 ? 'n' : strcmp (manuals, "old") == 0 ? 'o' : 'l'); } if (strcmp (manuals, "gen") == 0) fprintf (fp, "s%%@(MHMANGEN)%%%s%%g\n", "#"); /* comment char */ else fprintf (fp, "s%%@(MHMANGEN)%%%s%%g\n", ""); fprintf (fp, "s%%@(MHEDITOR)%%%s%%g\n", SVAL (editor)); fprintf (fp, "s%%@(MHCONFIG)%%%s%%g\n", SVAL (myopts)); fprintf (fp, "s%%@(MHCOMPILER)%%%s%%g\n", SVAL (compiler)); fprintf (fp, "s%%@(LEX)%%%s%%g\n", SVAL (lex)); if (ccoptions) fprintf (fp, "s%%@(MHOPTIONS)%%%s %s%%g\n", SVAL (options), SVAL (ccoptions)); else fprintf (fp, "s%%@(MHOPTIONS)%%%s %s%%g\n", SVAL (options), "-O"); fprintf (fp, "s%%@(LDOPTIONS)%%%s%%g\n", SVAL (ldoptions)); fprintf (fp, "s%%@(LDOPTLIB)%%%s%%g\n", SVAL (ldoptlibs)); fprintf (fp, "s%%@(LDCURSES)%%%s%%g\n", SVAL (curses)); if (strcmp (bboards, "off") == 0) fprintf (fp, "/^@BEGIN: BBOARDS$/,/^@END: BBOARDS$/d\n"); else fprintf (fp, "/^@BEGIN: BBOARDS$/d\n/^@END: BBOARDS$/d\n"); fprintf (fp, "s%%@(BBHOME)%%%s%%g\n", SVAL (bbhome)); if (strcmp (bbdelivery, "off") == 0) fprintf (fp, "/^@BEGIN: BBSERVER$/,/^@END: BBSERVER$/d\n"); else fprintf (fp, "/^@BEGIN: BBSERVER$/d\n/^@END: BBSERVER$/d\n"); if (strcmp (debug, "on") == 0) { fprintf (fp, "/^@BEGIN: DEBUG$/d\n/^@END: DEBUG$/d\n"); fprintf (fp, "/^@BEGIN: OPTIM$/,/^@END: OPTIM$/d\n"); } else { fprintf (fp, "/^@BEGIN: DEBUG$/,/^@END: DEBUG$/d\n"); fprintf (fp, "/^@BEGIN: OPTIM$/d\n/^@END: OPTIM$/d\n"); } if (mailgroup && strcmp (mailgroup, "off")) { /* for SYS5 sgid-inc */ fprintf (fp, "/^@BEGIN: MAILGROUP$/d\n/^@END: MAILGROUP$/d\n"); fprintf (fp, "s%%@(MAILGROUP)%%%s%%g\n", SVAL (mailgroup)); } else fprintf (fp, "/^@BEGIN: MAILGROUP$/,/^@END: MAILGROUP$/d\n"); if (strcmp (oldload, "on") == 0) fprintf (fp, "/^@BEGIN: OLDLOAD$/d\n/^@END: OLDLOAD$/d\n"); else fprintf (fp, "/^@BEGIN: OLDLOAD$/,/^@END: OLDLOAD$/d\n"); if (strcmp (oldload, "off") == 0) fprintf (fp, "/^@BEGIN: NEWLOAD$/d\n/^@END: NEWLOAD$/d\n"); else fprintf (fp, "/^@BEGIN: NEWLOAD$/,/^@END: NEWLOAD$/d\n"); if (strcmp (ranlib, "on") == 0) { fprintf (fp, "/^@BEGIN: RANLIB$/d\n/^@END: RANLIB$/d\n"); fprintf (fp, "/^@BEGIN: LORDER$/,/^@END: LORDER$/d\n"); } else { fprintf (fp, "/^@BEGIN: LORDER$/d\n/^@END: LORDER$/d\n"); fprintf (fp, "/^@BEGIN: RANLIB$/,/^@END: RANLIB$/d\n"); } if (strcmp (sharedlib, "on") == 0) { fprintf (fp, "/^@BEGIN: SHAREDLIB$/d\n/^@END: SHAREDLIB$/d\n"); fprintf (fp, "/^@BEGIN: STDLIB$/,/^@END: STDLIB$/d\n"); fprintf (fp, "s%%@(SLIBDIR)%%%s%%g\n",slibdir); } else { fprintf (fp, "/^@BEGIN: STDLIB$/d\n/^@END: STDLIB$/d\n"); fprintf (fp, "/^@BEGIN: SHAREDLIB$/,/^@END: SHAREDLIB$/d\n"); } if (strcmp (tma, "on") == 0) fprintf (fp, "/^@BEGIN: TMA$/d\n/^@END: TMA$/d\n"); else fprintf (fp, "/^@BEGIN: TMA$/,/^@END: TMA$/d\n"); if (flag || ((mtsnum == mmdf || mtsnum == mmdf2) && !smtp)) { fprintf (fp, "/^@BEGIN: MMDFMTS$/d\n/^@END: MMDFMTS$/d\n"); if (mtsnum == mmdf) fprintf (fp, "/^@BEGIN: MMDFIMTS$/d\n/^@END: MMDFIMTS$/d\n"); else fprintf (fp, "/^@BEGIN: MMDFIMTS$/,/^@END: MMDFIMTS$/d\n"); if (mtsnum == mmdf2) fprintf (fp, "/^@BEGIN: MMDFIIMTS$/d\n/^@END: MMDFIIMTS$/d\n"); else fprintf (fp, "/^@BEGIN: MMDFIIMTS$/,/^@END: MMDFIIMTS$/d\n"); } else { fprintf (fp, "/^@BEGIN: MMDFMTS$/,/^@END: MMDFMTS$/d\n"); fprintf (fp, "/^@BEGIN: MMDFIMTS$/,/^@END: MMDFIMTS$/d\n"); fprintf (fp, "/^@BEGIN: MMDFIIMTS$/,/^@END: MMDFIIMTS$/d\n"); } if (mtsnum == mh) fprintf (fp, "/^@BEGIN: MHMTS$/d\n/^@END: MHMTS$/d\n"); else fprintf (fp, "/^@BEGIN: MHMTS$/,/^@END: MHMTS$/d\n"); if (!flag && (mtsnum == sendmail || smtp)) fprintf (fp, "/^@BEGIN: SENDMTS$/d\n/^@END: SENDMTS$/d\n"); else fprintf (fp, "/^@BEGIN: SENDMTS$/,/^@END: SENDMTS$/d\n"); switch (mtsnum) { case mh: case sendmail: case mmdf: fprintf (fp, "/^@BEGIN: SENDMTSHACK$/d\n/^@END: SENDMTSHACK$/d\n"); break; default: fprintf (fp, "/^@BEGIN: SENDMTSHACK$/,/^@END: SENDMTSHACK$/d\n"); break; } /* special hack for support/pop/popser.c */ fprintf (fp, "s%%@(POPUUMBOX)%%%s%%g\n", mtsnum == sendmail ? "-DPOPUUMBOX" : ""); if (bsd43) /* for sgid(tty)-rcvtty */ fprintf (fp, "/^@BEGIN: BSD43$/d\n/^@END: BSD43$/d\n"); else fprintf (fp, "/^@BEGIN: BSD43$/,/^@END: BSD43$/d\n"); if (uci) fprintf (fp, "/^@BEGIN: UCI$/d\n/^@END: UCI$/d\n"); else fprintf (fp, "/^@BEGIN: UCI$/,/^@END: UCI$/d\n"); if (smtp) fprintf (fp, "/^@BEGIN: SMTP$/d\n/^@END: SMTP$/d\n"); else fprintf (fp, "/^@BEGIN: SMTP$/,/^@END: SMTP$/d\n"); if (strcmp (pop, "on") == 0) fprintf (fp, "/^@BEGIN: POP$/d\n/^@END: POP$/d\n"); else fprintf (fp, "/^@BEGIN: POP$/,/^@END: POP$/d\n"); if (strcmp (x400, "on") == 0) fprintf (fp, "/^@BEGIN: X400$/d\n/^@END: X400$/d\n"); else fprintf (fp, "/^@BEGIN: X400$/,/^@END: X400$/d\n"); if (strcmp (bboards, "pop") == 0) fprintf (fp, "/^@BEGIN: BPOP$/d\n/^@END: BPOP$/d\n"); else fprintf (fp, "/^@BEGIN: BPOP$/,/^@END: BPOP$/d\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -