BSD 4_3 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 10 Nov 1985 13:58:00 +0000 (05:58 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 10 Nov 1985 13:58:00 +0000 (05:58 -0800)
Work on file usr/contrib/mh/sbr/m_readefs.c

Synthesized-from: CSRG/cd1/4.3

usr/contrib/mh/sbr/m_readefs.c [new file with mode: 0644]

diff --git a/usr/contrib/mh/sbr/m_readefs.c b/usr/contrib/mh/sbr/m_readefs.c
new file mode 100644 (file)
index 0000000..d454b40
--- /dev/null
@@ -0,0 +1,104 @@
+/* m_readefs.c - read a profile/context file */
+
+#include "../h/mh.h"
+#include <stdio.h>
+
+
+static struct procs {
+       char    *procname;
+       char    **procnaddr;
+} procs [] = {
+       { "context",    &context        },
+       { "mh-sequences",
+                       &mh_seq         },
+       { "fileproc",   &fileproc       },
+       { "incproc",    &incproc        },
+       { "installproc",&installproc    },
+       { "lproc",      &lproc          },
+       { "mailproc",   &mailproc       },
+       { "mhlproc",    &mhlproc        },
+       { "moreproc",   &moreproc       },
+       { "mshproc",    &mshproc        },
+       { "packproc",   &packproc       },
+       { "postproc",   &postproc       },
+       { "rmfproc",    &rmfproc        },
+       { "rmmproc",    &rmmproc        },
+       { "sendproc",   &sendproc       },
+       { "showproc",   &showproc       },
+       { "slocalproc", &slocalproc     },
+       { "vmhproc",    &vmhproc        },
+       { "whatnowproc",
+                       &whatnowproc    },
+       { "whomproc",   &whomproc       },
+       { NULL,         NULL            }
+};
+
+static struct node **opp = NULL;
+
+
+void   m_readefs (npp, ib, file, ctx)
+register struct node **npp;
+register FILE   *ib;
+register char   *file;
+register int     ctx;
+{
+    register int    state;
+    register char  *cp;
+    char    name[NAMESZ],
+            field[BUFSIZ];
+    register struct node   *np;
+    register struct procs  *ps;
+
+    if (npp == NULL && (npp = opp) == NULL) {
+       admonish (NULLCP, "bug: m_readefs called but pump not primed");
+       return;
+    }
+
+    for (state = FLD;;) {
+       switch (state = m_getfld (state, name, field, sizeof field, ib)) {
+           case FLD:
+           case FLDPLUS:
+           case FLDEOF:
+               np = (struct node *) malloc (sizeof *np);
+               if (np == NULL)
+                   adios (NULLCP, "unable to allocate profile storage");
+               *npp = np;
+               *(npp = &np -> n_next) = NULL;
+               np -> n_name = getcpy (name);
+               if (state == FLDPLUS) {
+                   cp = getcpy (field);
+                   while (state == FLDPLUS) {
+                       state = m_getfld
+                                   (state, name, field, sizeof field, ib);
+                       cp = add (field, cp);
+                   }
+                   np -> n_field = trimcpy (cp);
+                   free (cp);
+               }
+               else
+                   np -> n_field = trimcpy (field);
+               np -> n_context = ctx;
+               for (ps = procs; ps -> procname; ps++)
+                   if (strcmp (np -> n_name, ps -> procname) == 0) {
+                       *ps -> procnaddr = np -> n_field;
+                       break;
+                   }
+               if (state == FLDEOF)
+                   break;
+               continue;
+
+           case BODY:
+           case BODYEOF:
+               adios (NULLCP, "no blank lines are permitted in %s", file);
+
+           case FILEEOF:
+               break;
+
+           default:
+               adios (NULLCP, "%s is poorly formatted", file);
+       }
+       break;
+    }
+
+    opp = npp;
+}