#ifndef _MISC_H_
#define _MISC_H_
#include <X11/Xosdefs.h>
#include <X11/Xfuncs.h>
#include <X11/Xdefs.h>
#include "assert.h"
#ifndef NULL
#include <stddef.h>
#endif
#define MAXCLIENTS 128
#define MILLI_PER_SECOND (1000)
#define MILLI_PER_MINUTE (1000 * 60)
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))
#include "os.h"
#define lowbit(x) ((x) & (~(x) + 1))
#define lswapl(x) ((((x) & 0xff) << 24) |\
(((x) & 0xff00) << 8) |\
(((x) & 0xff0000) >> 8) |\
(((x) >> 24) & 0xff))
#define lswaps(x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))
#define swapl(x, n) n = ((char *) (x))[0];\
((char *) (x))[0] = ((char *) (x))[3];\
((char *) (x))[3] = n;\
n = ((char *) (x))[1];\
((char *) (x))[1] = ((char *) (x))[2];\
((char *) (x))[2] = n;
#define swaps(x, n) n = ((char *) (x))[0];\
((char *) (x))[0] = ((char *) (x))[1];\
((char *) (x))[1] = n
#define cpswapl(src, dst) \
((char *)&(dst))[0] = ((char *) &(src))[3];\
((char *)&(dst))[1] = ((char *) &(src))[2];\
((char *)&(dst))[2] = ((char *) &(src))[1];\
((char *)&(dst))[3] = ((char *) &(src))[0];
#define cpswaps(src, dst)\
((char *) &(dst))[0] = ((char *) &(src))[1];\
((char *) &(dst))[1] = ((char *) &(src))[0];
#if 0
extern void NoopDDA(void);
extern char *NameForAtom(Atom atom);
#endif
extern void BitOrderInvert(unsigned char *buf, int nbytes);
#if !defined(UNIXCPP) || defined(ANSICPP)
#define fsCat(x,y) x##_##y
#else
#define fsCat(x,y) x_y
#endif
#define fsPack_XCharInfo(structure, packet) \
fsCat(packet,left) = (structure)->leftSideBearing; \
fsCat(packet,right) = (structure)->rightSideBearing; \
fsCat(packet,width) = (structure)->characterWidth; \
fsCat(packet,ascent) = (structure)->ascent; \
fsCat(packet,descent) = (structure)->descent; \
fsCat(packet,attributes) = (structure)->attributes
#define fsPack_XFontInfoHeader(structure, packet, clientversion) \
(packet)->font_header_flags = ((structure)->allExist) ? FontInfoAllCharsExist : 0; \
(packet)->font_header_draw_direction = ((structure)->drawDirection == LeftToRight) \
? LeftToRightDrawDirection : RightToLeftDrawDirection; \
\
if ((structure)->inkInside) \
(packet)->font_header_flags |= FontInfoInkInside; \
\
if (clientversion > 1) { \
(packet)->font_hdr_char_range_min_char_high = (structure)->firstRow; \
(packet)->font_hdr_char_range_min_char_low = (structure)->firstCol; \
(packet)->font_hdr_char_range_max_char_high = (structure)->lastRow; \
(packet)->font_hdr_char_range_max_char_low = (structure)->lastCol; \
(packet)->font_header_default_char_high = (structure)->defaultCh >> 8; \
(packet)->font_header_default_char_low = (structure)->defaultCh & 0xff; \
} else { \
(packet)->font_hdr_char_range_min_char_high = (structure)->firstCol; \
(packet)->font_hdr_char_range_min_char_low = (structure)->firstRow; \
(packet)->font_hdr_char_range_max_char_high = (structure)->lastCol; \
(packet)->font_hdr_char_range_max_char_low = (structure)->lastRow; \
(packet)->font_header_default_char_high = (structure)->defaultCh & 0xff; \
(packet)->font_header_default_char_low = (structure)->defaultCh >> 8; \
} \
\
fsPack_XCharInfo(&(structure)->ink_minbounds, (packet)->font_header_min_bounds); \
fsPack_XCharInfo(&(structure)->ink_maxbounds, (packet)->font_header_max_bounds); \
\
(packet)->font_header_font_ascent = (structure)->fontAscent; \
(packet)->font_header_font_descent = (structure)->fontDescent
typedef struct {
int trans_id;
int fd;
int portnum;
} OldListenRec;
extern void CreateSockets(int old_listen_count, OldListenRec *old_listen);
extern OldListenRec *_FontTransGetInetdListenInfo (int fd);
#endif