fslibos.h revision a96d7823
1a96d7823Smrg/* 2a96d7823Smrg * Copyright 1990 Network Computing Devices; 3a96d7823Smrg * Portions Copyright 1987 by Digital Equipment Corporation 4a96d7823Smrg */ 5a96d7823Smrg 6a96d7823Smrg/* 7a96d7823Smrg 8a96d7823SmrgCopyright 1987, 1994, 1998 The Open Group 9a96d7823Smrg 10a96d7823SmrgPermission to use, copy, modify, distribute, and sell this software and its 11a96d7823Smrgdocumentation for any purpose is hereby granted without fee, provided that 12a96d7823Smrgthe above copyright notice appear in all copies and that both that 13a96d7823Smrgcopyright notice and this permission notice appear in supporting 14a96d7823Smrgdocumentation. 15a96d7823Smrg 16a96d7823SmrgThe above copyright notice and this permission notice shall be included 17a96d7823Smrgin all copies or substantial portions of the Software. 18a96d7823Smrg 19a96d7823SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20a96d7823SmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21a96d7823SmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22a96d7823SmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 23a96d7823SmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24a96d7823SmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25a96d7823SmrgOTHER DEALINGS IN THE SOFTWARE. 26a96d7823Smrg 27a96d7823SmrgExcept as contained in this notice, the name of The Open Group shall 28a96d7823Smrgnot be used in advertising or otherwise to promote the sale, use or 29a96d7823Smrgother dealings in this Software without prior written authorization 30a96d7823Smrgfrom The Open Group. 31a96d7823Smrg 32a96d7823Smrg*/ 33a96d7823Smrg 34a96d7823Smrg/* 35a96d7823Smrg * FSlib networking & os include file 36a96d7823Smrg */ 37a96d7823Smrg 38a96d7823Smrg#include <X11/Xtrans/Xtrans.h> 39a96d7823Smrg 40a96d7823Smrg#ifndef WIN32 41a96d7823Smrg 42a96d7823Smrg/* 43a96d7823Smrg * makedepend screws up on #undef OPEN_MAX, so we define a new symbol 44a96d7823Smrg */ 45a96d7823Smrg 46a96d7823Smrg# ifndef FONT_OPEN_MAX 47a96d7823Smrg 48a96d7823Smrg# ifdef _POSIX_SOURCE 49a96d7823Smrg# include <limits.h> 50a96d7823Smrg# else 51a96d7823Smrg# define _POSIX_SOURCE 52a96d7823Smrg# include <limits.h> 53a96d7823Smrg# undef _POSIX_SOURCE 54a96d7823Smrg# endif 55a96d7823Smrg# ifndef SIZE_MAX 56a96d7823Smrg# ifdef ULONG_MAX 57a96d7823Smrg# define SIZE_MAX ULONG_MAX 58a96d7823Smrg# else 59a96d7823Smrg# define SIZE_MAX UINT_MAX 60a96d7823Smrg# endif 61a96d7823Smrg# endif 62a96d7823Smrg# ifndef OPEN_MAX 63a96d7823Smrg# if defined(SVR4) 64a96d7823Smrg# define OPEN_MAX 256 65a96d7823Smrg# else 66a96d7823Smrg# include <sys/param.h> 67a96d7823Smrg# ifndef OPEN_MAX 68a96d7823Smrg# ifdef __OSF1__ 69a96d7823Smrg# define OPEN_MAX 256 70a96d7823Smrg# else 71a96d7823Smrg# ifdef NOFILE 72a96d7823Smrg# define OPEN_MAX NOFILE 73a96d7823Smrg# else 74a96d7823Smrg# define OPEN_MAX NOFILES_MAX 75a96d7823Smrg# endif 76a96d7823Smrg# endif 77a96d7823Smrg# endif 78a96d7823Smrg# endif 79a96d7823Smrg# endif 80a96d7823Smrg 81a96d7823Smrg# if OPEN_MAX > 256 82a96d7823Smrg# define FONT_OPEN_MAX 256 83a96d7823Smrg# else 84a96d7823Smrg# define FONT_OPEN_MAX OPEN_MAX 85a96d7823Smrg# endif 86a96d7823Smrg 87a96d7823Smrg# endif /* FONT_OPEN_MAX */ 88a96d7823Smrg 89a96d7823Smrg# ifdef WORD64 90a96d7823Smrg# define NMSKBITS 64 91a96d7823Smrg# else 92a96d7823Smrg# define NMSKBITS 32 93a96d7823Smrg# endif 94a96d7823Smrg 95a96d7823Smrg# define MSKCNT ((FONT_OPEN_MAX + NMSKBITS - 1) / NMSKBITS) 96a96d7823Smrg 97a96d7823Smrgtypedef unsigned long FdSet[MSKCNT]; 98a96d7823Smrgtypedef FdSet FdSetPtr; 99a96d7823Smrg 100a96d7823Smrg# if (MSKCNT==1) 101a96d7823Smrg# define BITMASK(i) (1 << (i)) 102a96d7823Smrg# define MASKIDX(i) 0 103a96d7823Smrg# endif 104a96d7823Smrg 105a96d7823Smrg# if (MSKCNT>1) 106a96d7823Smrg# define BITMASK(i) (1 << ((i) & (NMSKBITS - 1))) 107a96d7823Smrg# define MASKIDX(i) ((i) / NMSKBITS) 108a96d7823Smrg# endif 109a96d7823Smrg 110a96d7823Smrg# define MASKWORD(buf, i) buf[MASKIDX(i)] 111a96d7823Smrg# define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i) 112a96d7823Smrg# define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) 113a96d7823Smrg# define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) 114a96d7823Smrg 115a96d7823Smrg# if (MSKCNT==1) 116a96d7823Smrg# define COPYBITS(src, dst) dst[0] = src[0] 117a96d7823Smrg# define CLEARBITS(buf) buf[0] = 0 118a96d7823Smrg# define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0]) 119a96d7823Smrg# define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0]) 120a96d7823Smrg# define UNSETBITS(dst, b1) (dst[0] &= ~b1[0]) 121a96d7823Smrg# define ANYSET(src) (src[0]) 122a96d7823Smrg# endif 123a96d7823Smrg 124a96d7823Smrg# if (MSKCNT==2) 125a96d7823Smrg# define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; } 126a96d7823Smrg# define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; } 127a96d7823Smrg# define MASKANDSETBITS(dst, b1, b2) {\ 128a96d7823Smrg dst[0] = (b1[0] & b2[0]);\ 129a96d7823Smrg dst[1] = (b1[1] & b2[1]); } 130a96d7823Smrg# define ORBITS(dst, b1, b2) {\ 131a96d7823Smrg dst[0] = (b1[0] | b2[0]);\ 132a96d7823Smrg dst[1] = (b1[1] | b2[1]); } 133a96d7823Smrg# define UNSETBITS(dst, b1) {\ 134a96d7823Smrg dst[0] &= ~b1[0]; \ 135a96d7823Smrg dst[1] &= ~b1[1]; } 136a96d7823Smrg# define ANYSET(src) (src[0] || src[1]) 137a96d7823Smrg# endif 138a96d7823Smrg 139a96d7823Smrg# if (MSKCNT==3) 140a96d7823Smrg# define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; \ 141a96d7823Smrg dst[2] = src[2]; } 142a96d7823Smrg# define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; } 143a96d7823Smrg# define MASKANDSETBITS(dst, b1, b2) {\ 144a96d7823Smrg dst[0] = (b1[0] & b2[0]);\ 145a96d7823Smrg dst[1] = (b1[1] & b2[1]);\ 146a96d7823Smrg dst[2] = (b1[2] & b2[2]); } 147a96d7823Smrg# define ORBITS(dst, b1, b2) {\ 148a96d7823Smrg dst[0] = (b1[0] | b2[0]);\ 149a96d7823Smrg dst[1] = (b1[1] | b2[1]);\ 150a96d7823Smrg dst[2] = (b1[2] | b2[2]); } 151a96d7823Smrg# define UNSETBITS(dst, b1) {\ 152a96d7823Smrg dst[0] &= ~b1[0]; \ 153a96d7823Smrg dst[1] &= ~b1[1]; \ 154a96d7823Smrg dst[2] &= ~b1[2]; } 155a96d7823Smrg# define ANYSET(src) (src[0] || src[1] || src[2]) 156a96d7823Smrg# endif 157a96d7823Smrg 158a96d7823Smrg# if (MSKCNT==4) 159a96d7823Smrg# define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; \ 160a96d7823Smrg dst[2] = src[2]; dst[3] = src[3] 161a96d7823Smrg# define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0 162a96d7823Smrg# define MASKANDSETBITS(dst, b1, b2) \ 163a96d7823Smrg dst[0] = (b1[0] & b2[0]);\ 164a96d7823Smrg dst[1] = (b1[1] & b2[1]);\ 165a96d7823Smrg dst[2] = (b1[2] & b2[2]);\ 166a96d7823Smrg dst[3] = (b1[3] & b2[3]) 167a96d7823Smrg# define ORBITS(dst, b1, b2) \ 168a96d7823Smrg dst[0] = (b1[0] | b2[0]);\ 169a96d7823Smrg dst[1] = (b1[1] | b2[1]);\ 170a96d7823Smrg dst[2] = (b1[2] | b2[2]);\ 171a96d7823Smrg dst[3] = (b1[3] | b2[3]) 172a96d7823Smrg# define UNSETBITS(dst, b1) \ 173a96d7823Smrg dst[0] &= ~b1[0]; \ 174a96d7823Smrg dst[1] &= ~b1[1]; \ 175a96d7823Smrg dst[2] &= ~b1[2]; \ 176a96d7823Smrg dst[3] &= ~b1[3] 177a96d7823Smrg# define ANYSET(src) (src[0] || src[1] || src[2] || src[3]) 178a96d7823Smrg# endif 179a96d7823Smrg 180a96d7823Smrg# if (MSKCNT>4) 181a96d7823Smrg# define COPYBITS(src, dst) memmove((caddr_t) dst, (caddr_t) src,\ 182a96d7823Smrg MSKCNT*sizeof(long)) 183a96d7823Smrg# define CLEARBITS(buf) bzero((caddr_t) buf, MSKCNT*sizeof(long)) 184a96d7823Smrg# define MASKANDSETBITS(dst, b1, b2) \ 185a96d7823Smrg { int cri; \ 186a96d7823Smrg for (cri=MSKCNT; --cri>=0; ) \ 187a96d7823Smrg dst[cri] = (b1[cri] & b2[cri]); } 188a96d7823Smrg# define ORBITS(dst, b1, b2) \ 189a96d7823Smrg { int cri; \ 190a96d7823Smrg for (cri=MSKCNT; --cri>=0; ) \ 191a96d7823Smrg dst[cri] = (b1[cri] | b2[cri]); } 192a96d7823Smrg# define UNSETBITS(dst, b1) \ 193a96d7823Smrg { int cri; \ 194a96d7823Smrg for (cri=MSKCNT; --cri>=0; ) \ 195a96d7823Smrg dst[cri] &= ~b1[cri]; } 196a96d7823Smrg# if (MSKCNT==8) 197a96d7823Smrg# define ANYSET(src) (src[0] || src[1] || src[2] || src[3] || \ 198a96d7823Smrg src[4] || src[5] || src[6] || src[7]) 199a96d7823Smrg# endif 200a96d7823Smrg# endif 201a96d7823Smrg 202a96d7823Smrg#else /* not WIN32 */ 203a96d7823Smrg 204a96d7823Smrg# include <X11/Xwinsock.h> 205a96d7823Smrg# include <X11/Xw32defs.h> 206a96d7823Smrg 207a96d7823Smrgtypedef fd_set FdSet; 208a96d7823Smrgtypedef FdSet *FdSetPtr; 209a96d7823Smrg 210a96d7823Smrg# define CLEARBITS(set) FD_ZERO(&set) 211a96d7823Smrg# define BITSET(set,s) FD_SET(s,&set) 212a96d7823Smrg# define BITCLEAR(set,s) FD_CLR(s,&set) 213a96d7823Smrg# define GETBIT(set,s) FD_ISSET(s,&set) 214a96d7823Smrg# define ANYSET(set) set->fd_count 215a96d7823Smrg 216a96d7823Smrg#endif 217