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