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

unix.superglobalmegacorp.com

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