Annotation of 43BSD/contrib/mh/sbr/m_seqnew.c, revision 1.1.1.1

1.1       root        1: /* m_seqnew.c - manage sequences */
                      2: 
                      3: #include "../h/mh.h"
                      4: #include <ctype.h>
                      5: #include <stdio.h>
                      6: 
                      7: 
                      8: int     m_seqnew (mp, cp, public)
                      9: register struct msgs *mp;
                     10: register char   *cp;
                     11: register int   public;
                     12: {
                     13:     int     bits;
                     14:     register int    i,
                     15:                     j;
                     16: 
                     17:     if (!m_seqok (cp))
                     18:        return 0;
                     19: 
                     20:     if (public == -1)          /* XXX */
                     21:        public = mp -> msgflags & READONLY ? 0 : 1;
                     22: 
                     23:     bits = FFATTRSLOT;
                     24:     for (i = 0; mp -> msgattrs[i]; i++)
                     25:        if (strcmp (mp -> msgattrs[i], cp) == 0) {
                     26:            for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
                     27:                mp -> msgstats[j] &= ~(1 << (bits + i));
                     28:            if (public)
                     29:                mp -> attrstats &= ~(1 << (bits + i));
                     30:            else
                     31:                mp -> attrstats |= 1 << (bits + i);
                     32:            mp -> msgflags |= SEQMOD;
                     33: 
                     34:            return 1;
                     35:        }
                     36: 
                     37:     if (i >= NATTRS) {
                     38:        advise (NULLCP, "only %d sequences allowed (no room for %s)!",
                     39:                NATTRS, cp);
                     40:        return 0;
                     41:     }
                     42: 
                     43:     mp -> msgattrs[i] = getcpy (cp);
                     44:     for (j = mp -> lowmsg; j <= mp -> hghmsg; j++)
                     45:        mp -> msgstats[j] &= ~(1 << (bits + i));
                     46:     if (public)
                     47:        mp -> attrstats &= ~(1 << (bits + i));
                     48:     else
                     49:        mp -> attrstats |= 1 << (bits + i);
                     50:     mp -> msgflags |= SEQMOD;
                     51: 
                     52:     mp -> msgattrs[++i] = NULL;
                     53: 
                     54:     return 1;
                     55: }
                     56: 
                     57: /*  */
                     58: 
                     59: int     m_seqadd (mp, cp, j, public)
                     60: register struct msgs *mp;
                     61: register char   *cp;
                     62: register int     j,
                     63:                 public;
                     64: {
                     65:     int     bits;
                     66:     register int    i,
                     67:                     k;
                     68: 
                     69:     if (!m_seqok (cp))
                     70:        return 0;
                     71: 
                     72:     if (public == -1)          /* XXX */
                     73:        public = mp -> msgflags & READONLY ? 0 : 1;
                     74: 
                     75:     bits = FFATTRSLOT;
                     76:     for (i = 0; mp -> msgattrs[i]; i++)
                     77:        if (strcmp (mp -> msgattrs[i], cp) == 0) {
                     78:            mp -> msgstats[j] |= 1 << (bits + i);
                     79:            if (public)
                     80:                mp -> attrstats &= ~(1 << (bits + i));
                     81:            else
                     82:                mp -> attrstats |= 1 << (bits + i);
                     83:            mp -> msgflags |= SEQMOD;
                     84: 
                     85:            return 1;
                     86:        }
                     87: 
                     88:     if (i >= NATTRS) {
                     89:        advise (NULLCP, "only %d sequences allowed (no room for %s)!",
                     90:                NATTRS, cp);
                     91:        return 0;
                     92:     }
                     93: 
                     94:     mp -> msgattrs[i] = getcpy (cp);
                     95:     for (k = mp -> lowmsg; k <= mp -> hghmsg; k++)
                     96:        mp -> msgstats[k] &= ~(1 << (bits + i));
                     97:     mp -> msgstats[j] |= 1 << (bits + i);
                     98:     if (public)
                     99:        mp -> attrstats &= ~(1 << (bits + i));
                    100:     else
                    101:        mp -> attrstats |= 1 << (bits + i);
                    102:     mp -> msgflags |= SEQMOD;
                    103: 
                    104:     mp -> msgattrs[++i] = NULL;
                    105: 
                    106:     return 1;
                    107: }
                    108: 
                    109: /*  */
                    110: 
                    111: int     m_seqdel (mp, cp, j)
                    112: register struct msgs *mp;
                    113: register char   *cp;
                    114: register int     j;
                    115: {
                    116:     int     bits;
                    117:     register int    i;
                    118: 
                    119:     if (!m_seqok (cp))
                    120:        return 0;
                    121: 
                    122:     bits = FFATTRSLOT;
                    123:     for (i = 0; mp -> msgattrs[i]; i++)
                    124:        if (strcmp (mp -> msgattrs[i], cp) == 0) {
                    125:            mp -> msgstats[j] &= ~(1 << (bits + i));
                    126:            mp -> msgflags |= SEQMOD;
                    127: 
                    128:            return 1;
                    129:        }
                    130: 
                    131:     advise (NULLCP, "no such sequence as %s", cp);
                    132:     return 0;
                    133: }
                    134: 
                    135: /*  */
                    136: 
                    137: static int  m_seqok (cp)
                    138: register char   *cp;
                    139: {
                    140:     register char  *pp;
                    141: 
                    142:     if (cp == NULL || *cp == NULL) {
                    143:        advise (NULLCP, "empty sequence name");
                    144:        return 0;
                    145:     }
                    146: 
                    147:     if (strcmp (cp, "new") == 0
                    148: #ifdef notdef
                    149:            || strcmp (cp, "cur") == 0
                    150: #endif notdef
                    151:            || strcmp (cp, "all") == 0
                    152:            || strcmp (cp, "first") == 0
                    153:            || strcmp (cp, "last") == 0
                    154:            || strcmp (cp, "prev") == 0
                    155:            || strcmp (cp, "next") == 0) {
                    156:        advise (NULLCP, "illegal sequence name: %s", cp);
                    157:        return 0;
                    158:     }
                    159: 
                    160:     if (!isalpha (*cp)) {
                    161:        advise (NULLCP, "illegal sequence name: %s", cp);
                    162:        return 0;
                    163:     }
                    164:     for (pp = cp + 1; *pp; pp++)
                    165:        if (!isalnum (*pp)) {
                    166:            advise (NULLCP, "illegal sequence name: %s", cp);
                    167:            return 0;
                    168:        }
                    169: 
                    170:     return 1;
                    171: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.