add free_field as standard for struct field
[mmh] / sbr / seq_read.c
index 26337c0..68351ac 100644 (file)
@@ -7,6 +7,7 @@
 ** complete copyright information.
 */
 
+#include <sysexits.h>
 #include <h/mh.h>
 #include <h/utils.h>
 
@@ -29,9 +30,9 @@ seq_read(struct msgs *mp)
 {
        /*
        ** Initialize the list of sequence names.  Go ahead and
-       ** add the "cur" sequence to the list of sequences.
+       ** add the cur sequence to the list of sequences.
        */
-       mp->msgattrs[0] = getcpy(current);
+       mp->msgattrs[0] = getcpy(seq_cur);
        mp->msgattrs[1] = NULL;
        make_all_public(mp);  /* initially, make all public */
 
@@ -54,9 +55,9 @@ seq_read(struct msgs *mp)
 static void
 seq_public(struct msgs *mp)
 {
-       int state;
-       char *cp, seqfile[PATH_MAX];
-       char name[NAMESZ], field[BUFSIZ];
+       enum state state;
+       struct field f = free_field;
+       char seqfile[PATH_MAX];
        FILE *fp;
 
        /*
@@ -73,41 +74,24 @@ seq_public(struct msgs *mp)
                return;
 
        /* Use m_getfld to scan sequence file */
-       for (state = FLD;;) {
-               switch (state = m_getfld(state, name, field, sizeof(field),
-                               fp)) {
-               case FLD:
-               case FLDPLUS:
-               case FLDEOF:
-                       if (state == FLDPLUS) {
-                               cp = getcpy(field);
-                               while (state == FLDPLUS) {
-                                       state = m_getfld(state, name, field,
-                                                       sizeof(field), fp);
-                                       cp = add(field, cp);
-                               }
-                               seq_init(mp, getcpy(name), trimcpy(cp));
-                               free(cp);
-                       } else {
-                               seq_init(mp, getcpy(name), trimcpy(field));
-                       }
-                       if (state == FLDEOF)
-                               break;
+       for (state = FLD2;;) {
+               switch (state = m_getfld2(state, &f, fp)) {
+               case FLD2:
+                       seq_init(mp, getcpy(f.name), trimcpy(f.value));
                        continue;
 
-               case BODY:
-               case BODYEOF:
-                       adios(NULL, "no blank lines are permitted in %s",
+               case BODY2:
+                       adios(EX_CONFIG, NULL, "no blank lines are permitted in %s",
                                        seqfile);
-                       /* fall */
+                       /* FALL */
 
-               case FILEEOF:
+               case FILEEOF2:
                        break;
 
                default:
-                       adios(NULL, "%s is poorly formatted", seqfile);
+                       adios(EX_CONFIG, NULL, "%s is poorly formatted", seqfile);
                }
-               break;  /* break from for loop */
+               break;
        }
 
        lkfclose(fp, seqfile);
@@ -132,11 +116,10 @@ seq_private(struct msgs *mp)
        plen = strlen(mp->foldpath) + 1;
 
        for (np = m_defs; np; np = np->n_next) {
-               if (isprefix("atr-", np->n_name)
-                               && (j = strlen(np->n_name) - plen) > alen
-                               && *(np->n_name + j) == '-'
-                               && strcmp(mp->foldpath, np->n_name + j + 1)
-                               == 0) {
+               if (strncmp(np->n_name, "atr-", alen)==0 &&
+                               (j = strlen(np->n_name) - plen) > alen &&
+                               *(np->n_name + j) == '-' &&
+                               strcmp(mp->foldpath, np->n_name + j + 1)==0) {
                        cp = getcpy(np->n_name + alen);
                        *(cp + j - alen) = '\0';
                        if ((i = seq_init(mp, cp, getcpy(np->n_field))) != -1)
@@ -159,14 +142,15 @@ seq_private(struct msgs *mp)
 static int
 seq_init(struct msgs *mp, char *name, char *field)
 {
-       int i, j, k, is_current;
+       unsigned int i;
+       int j, k, is_current;
        char *cp, **ap;
 
        /*
-       ** Check if this is "cur" sequence,
+       ** Check if this is the cur sequence,
        ** so we can do some special things.
        */
-       is_current = !strcmp(current, name);
+       is_current = (strcmp(seq_cur, name)==0);
 
        /*
        ** Search for this sequence name to see if we've seen
@@ -175,7 +159,7 @@ seq_init(struct msgs *mp, char *name, char *field)
        ** mesages in this folder.
        */
        for (i = 0; mp->msgattrs[i]; i++) {
-               if (!strcmp(mp->msgattrs[i], name)) {
+               if (strcmp(mp->msgattrs[i], name)==0) {
                        for (j = mp->lowmsg; j <= mp->hghmsg; j++)
                                clear_sequence(mp, i, j);
                        break;
@@ -210,7 +194,7 @@ seq_init(struct msgs *mp, char *name, char *field)
                        k = cp ? m_atoi(cp) : j;
 
                        /*
-                       ** Keep mp->curmsg and "cur" sequence in synch.  Unlike
+                       ** Keep mp->curmsg and cur sequence in sync.  Unlike
                        ** other sequences, this message doesn't need to exist.
                        ** Think about the series of command (rmm; next) to
                        ** understand why this can be the case.  But if it does