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