|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.