|
|
1.1 root 1: /* m_readefs.c - read a profile/context file */
2:
3: #include "../h/mh.h"
4: #include <stdio.h>
5:
6:
7: static struct procs {
8: char *procname;
9: char **procnaddr;
10: } procs [] = {
11: { "context", &context },
12: { "mh-sequences",
13: &mh_seq },
14: { "fileproc", &fileproc },
15: { "incproc", &incproc },
16: { "installproc",&installproc },
17: { "lproc", &lproc },
18: { "mailproc", &mailproc },
19: { "mhlproc", &mhlproc },
20: { "moreproc", &moreproc },
21: { "mshproc", &mshproc },
22: { "packproc", &packproc },
23: { "postproc", &postproc },
24: { "rmfproc", &rmfproc },
25: { "rmmproc", &rmmproc },
26: { "sendproc", &sendproc },
27: { "showproc", &showproc },
28: { "slocalproc", &slocalproc },
29: { "vmhproc", &vmhproc },
30: { "whatnowproc",
31: &whatnowproc },
32: { "whomproc", &whomproc },
33: { NULL, NULL }
34: };
35:
36: static struct node **opp = NULL;
37:
38:
39: void m_readefs (npp, ib, file, ctx)
40: register struct node **npp;
41: register FILE *ib;
42: register char *file;
43: register int ctx;
44: {
45: register int state;
46: register char *cp;
47: char name[NAMESZ],
48: field[BUFSIZ];
49: register struct node *np;
50: register struct procs *ps;
51:
52: if (npp == NULL && (npp = opp) == NULL) {
53: admonish (NULLCP, "bug: m_readefs called but pump not primed");
54: return;
55: }
56:
57: for (state = FLD;;) {
58: switch (state = m_getfld (state, name, field, sizeof field, ib)) {
59: case FLD:
60: case FLDPLUS:
61: case FLDEOF:
62: np = (struct node *) malloc (sizeof *np);
63: if (np == NULL)
64: adios (NULLCP, "unable to allocate profile storage");
65: *npp = np;
66: *(npp = &np -> n_next) = NULL;
67: np -> n_name = getcpy (name);
68: if (state == FLDPLUS) {
69: cp = getcpy (field);
70: while (state == FLDPLUS) {
71: state = m_getfld
72: (state, name, field, sizeof field, ib);
73: cp = add (field, cp);
74: }
75: np -> n_field = trimcpy (cp);
76: free (cp);
77: }
78: else
79: np -> n_field = trimcpy (field);
80: np -> n_context = ctx;
81: for (ps = procs; ps -> procname; ps++)
82: if (strcmp (np -> n_name, ps -> procname) == 0) {
83: *ps -> procnaddr = np -> n_field;
84: break;
85: }
86: if (state == FLDEOF)
87: break;
88: continue;
89:
90: case BODY:
91: case BODYEOF:
92: adios (NULLCP, "no blank lines are permitted in %s", file);
93:
94: case FILEEOF:
95: break;
96:
97: default:
98: adios (NULLCP, "%s is poorly formatted", file);
99: }
100: break;
101: }
102:
103: opp = npp;
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.