|
|
1.1 ! root 1: /*********************************************************** ! 2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, ! 3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts. ! 4: ! 5: All Rights Reserved ! 6: ! 7: Permission to use, copy, modify, and distribute this software and its ! 8: documentation for any purpose and without fee is hereby granted, ! 9: provided that the above copyright notice appear in all copies and that ! 10: both that copyright notice and this permission notice appear in ! 11: supporting documentation, and that the names of Digital or MIT not be ! 12: used in advertising or publicity pertaining to distribution of the ! 13: software without specific, written prior permission. ! 14: ! 15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 21: SOFTWARE. ! 22: ! 23: ******************************************************************/ ! 24: /* $XConsortium: osdep.h,v 1.15 88/09/06 15:50:47 jim Exp $ */ ! 25: ! 26: #ifndef NULL ! 27: #define NULL 0 ! 28: #endif ! 29: ! 30: #define BUFSIZE 4096 ! 31: #define BUFWATERMARK 8192 ! 32: #define MAXBUFSIZE (1 << 18) ! 33: #if (NOFILE <= 128) /* 128 is value of MAXCLIENTS in dix layer */ ! 34: #define MAXSOCKS (NOFILE - 1) ! 35: #else ! 36: #define MAXSOCKS 128 ! 37: #endif ! 38: #define mskcnt ((MAXSOCKS + 31) / 32) /* size of bit array */ ! 39: ! 40: #if (mskcnt==1) ! 41: #define BITMASK(i) (1 << (i)) ! 42: #define MASKIDX(i) 0 ! 43: #endif ! 44: #if (mskcnt>1) ! 45: #define BITMASK(i) (1 << ((i) & 31)) ! 46: #define MASKIDX(i) ((i) >> 5) ! 47: #endif ! 48: ! 49: #define MASKWORD(buf, i) buf[MASKIDX(i)] ! 50: #define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i) ! 51: #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) ! 52: #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) ! 53: ! 54: #if (mskcnt==1) ! 55: #define COPYBITS(src, dst) dst[0] = src[0] ! 56: #define CLEARBITS(buf) buf[0] = 0 ! 57: #define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0]) ! 58: #define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0]) ! 59: #define UNSETBITS(dst, b1) (dst[0] &= ~b1[0]) ! 60: #define ANYSET(src) (src[0]) ! 61: #endif ! 62: #if (mskcnt==2) ! 63: #define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1] ! 64: #define CLEARBITS(buf) buf[0] = 0; buf[1] = 0 ! 65: #define MASKANDSETBITS(dst, b1, b2) \ ! 66: dst[0] = (b1[0] & b2[0]);\ ! 67: dst[1] = (b1[1] & b2[1]) ! 68: #define ORBITS(dst, b1, b2) \ ! 69: dst[0] = (b1[0] | b2[0]);\ ! 70: dst[1] = (b1[1] | b2[1]) ! 71: #define UNSETBITS(dst, b1) \ ! 72: dst[0] &= ~b1[0]; \ ! 73: dst[1] &= ~b1[1] ! 74: #define ANYSET(src) (src[0] || src[1]) ! 75: #endif ! 76: #if (mskcnt==3) ! 77: #define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; ! 78: #define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0 ! 79: #define MASKANDSETBITS(dst, b1, b2) \ ! 80: dst[0] = (b1[0] & b2[0]);\ ! 81: dst[1] = (b1[1] & b2[1]);\ ! 82: dst[2] = (b1[2] & b2[2]) ! 83: #define ORBITS(dst, b1, b2) \ ! 84: dst[0] = (b1[0] | b2[0]);\ ! 85: dst[1] = (b1[1] | b2[1]);\ ! 86: dst[2] = (b1[2] | b2[2]) ! 87: #define UNSETBITS(dst, b1) \ ! 88: dst[0] &= ~b1[0]; \ ! 89: dst[1] &= ~b1[1]; \ ! 90: dst[2] &= ~b1[2] ! 91: #define ANYSET(src) (src[0] || src[1] || src[2]) ! 92: #endif ! 93: #if (mskcnt==4) ! 94: #define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2];\ ! 95: dst[3] = src[3] ! 96: #define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0 ! 97: #define MASKANDSETBITS(dst, b1, b2) \ ! 98: dst[0] = (b1[0] & b2[0]);\ ! 99: dst[1] = (b1[1] & b2[1]);\ ! 100: dst[2] = (b1[2] & b2[2]);\ ! 101: dst[3] = (b1[3] & b2[3]) ! 102: #define ORBITS(dst, b1, b2) \ ! 103: dst[0] = (b1[0] | b2[0]);\ ! 104: dst[1] = (b1[1] | b2[1]);\ ! 105: dst[2] = (b1[2] | b2[2]);\ ! 106: dst[3] = (b1[3] | b2[3]) ! 107: #define UNSETBITS(dst, b1) \ ! 108: dst[0] &= ~b1[0]; \ ! 109: dst[1] &= ~b1[1]; \ ! 110: dst[2] &= ~b1[2]; \ ! 111: dst[3] &= ~b1[3] ! 112: #define ANYSET(src) (src[0] || src[1] || src[2] || src[3]) ! 113: #endif ! 114: ! 115: #if (mskcnt>4) ! 116: #define COPYBITS(src, dst) bcopy((caddr_t) src, (caddr_t) dst,\ ! 117: mskcnt*sizeof(long)) ! 118: #define CLEARBITS(buf) bzero((caddr_t) buf, mskcnt*sizeof(long)) ! 119: #define MASKANDSETBITS(dst, b1, b2) \ ! 120: { int cri; \ ! 121: for (cri=0; cri<mskcnt; cri++) \ ! 122: dst[cri] = (b1[cri] & b2[cri]) } ! 123: #define ORBITS(dst, b1, b2) \ ! 124: { int cri; \ ! 125: for (cri=0; cri<mskcnt; cri++) \ ! 126: dst[cri] = (b1[cri] | b2[cri]) } ! 127: #define UNSETBITS(dst, b1) \ ! 128: { int cri; \ ! 129: for (cri=0; cri<mskcnt; cri++) \ ! 130: dst[cri] &= ~b1[cri]; } ! 131: /* ! 132: * If mskcnt>4, then ANYSET is a routine defined in WaitFor.c. ! 133: * ! 134: * #define ANYSET(src) (src[0] || src[1] || src[2] || src[3] || src[4] ...) ! 135: */ ! 136: #endif ! 137: ! 138: typedef struct _connectionInput { ! 139: int used; /* is this client connected */ ! 140: char *buffer; /* contains current client input */ ! 141: char *bufptr; /* pointer to current start of data */ ! 142: int bufcnt; /* count of bytes in buffer */ ! 143: int lenLastReq; ! 144: int size; ! 145: } ConnectionInput; ! 146: ! 147: typedef struct _osComm { ! 148: int fd; ! 149: unsigned char *buf; ! 150: int bufsize; ! 151: int count; ! 152: } OsCommRec, *OsCommPtr; ! 153: ! 154: void Notice(); ! 155: ! 156: #ifdef ISOCONN ! 157: #ifdef ISODEBUG ! 158: extern int isodexbug; ! 159: #endif /* ISODEBUG */ ! 160: /* ! 161: * For want of a better place to put these for the moment... ! 162: * ! 163: * Should really appear in system headers eventuallement ! 164: */ ! 165: ! 166: #define FamilyIso 3 ! 167: ! 168: ! 169: #define UNIX_IO 0 ! 170: #define ISODE_IO 1 ! 171: ! 172: /* ! 173: * The following could all be optimised by putting it in the ! 174: * OsCommRec ! 175: * so we would not have to double array index for every IO... ! 176: * ! 177: * but i'm not sure that that rec is available in all IO call places ! 178: */ ! 179: extern int fd2family[]; ! 180: ! 181: extern int (*acceptfn[])(); ! 182: extern int (*getpeerfn[])(); ! 183: extern int (*readfn[])(); ! 184: extern int (*writefn[])(); ! 185: extern int (*readvfn[])(); ! 186: extern int (*writevfn[])(); ! 187: extern int (*closefn[])(); ! 188: ! 189: ! 190: #define SAccept(fd, a, b) \ ! 191: acceptfn[fd2family[fd]]((fd), (a), (b)) ! 192: ! 193: #define SGetPeerName(fd, ptr, len) \ ! 194: getpeerfn[fd2family[(fd)]]((fd), (ptr), (len)) ! 195: ! 196: #define SRead(fd, data, size, dum) \ ! 197: readfn[fd2family[(fd)]]((fd), (data), (size), (dum)) ! 198: ! 199: #define SWrite(fd, data, size) \ ! 200: writefn[fd2family[(fd)]]((fd), (data), (size)) ! 201: ! 202: #define SWritev(fd, iov, iovcnt) \ ! 203: writevfn[fd2family[(fd)]]((fd), (iov), (iovcnt)) ! 204: ! 205: #define SClose(fd) \ ! 206: closefn[fd2family[(fd)]]((fd)) ! 207: ! 208: #endif /* ISOCONN */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.