2 #define _M1D_COMMON_H 1
13 /********************************
14 * Configuration section follows
18 #define INLINE_PUTGETCHAR
19 //#define FATALSIG_INSANE
21 #define VB_DEFSIZE 256 //>=min of n in vsnprintf()
22 #define VB_MAXSIZE 128*1024 //recommended limit, not hard (probably)
24 #define CHAT_CMD_MAXPARS 10
27 * Configuration section ends
28 ****************************/
30 #define strncpydst(d,s) strncpy(d,s,sizeof(d))
35 #define dbg(msg...) fprintf(stderr, ##msg)
41 #define max(a,b) ((a)>(b)?(a):(b))
44 #define min(a,b) ((a)<(b)?(a):(b))
47 #define __NORETURN __attribute__((__noreturn__))
50 #define NELEM(a) (sizeof((a))/sizeof(*(a)))
51 #define XRAWDIGITI(n) ((n)-'0'-((n)>='A'?'A'-('9'+1):0))
52 #define XRAWDIGITO(n) ((n)+'0'+((n)>=0xA?'A'-('9'+1):0))
53 #define PK __attribute__((packed))
55 extern const int safesigs[];
58 struct varbufnode *next;
64 struct varbuf *checknext; //MUST be first in the struct
66 struct varbufnode *f,*l;
70 #define VBNSIZEL(vb,vbn) ((vbn)->size-((vb)->l==(vbn)?(vb)->free:0))
71 #define VBNSTART(vb,vbn) ((vb)->f==(vbn)?(vb)->done:0)
72 #define VBNSIZE(vb,vbn) (VBNSIZEL((vb),(vbn))-VBNSTART((vb),(vbn)))
74 #define VBEMPTY(vb) (!(vb)->f || ((vb)->l==(vb)->f&&(vb)->l->size==(vb)->free))
77 extern void vbcheck(struct varbuf *vb);
78 extern void vbsanity(void);
85 extern void vbdebug(struct varbuf *vb,const char *msg);
87 #define vbdebug(vb,msg) vbcheck(vb)
92 const unsigned char npars;
97 #define VBMEM_REM (1<<0)
98 #define VBMEM_ZERO (1<<1)
100 extern void chk(const void *p);
102 extern struct varbufnode *vbnnew(size_t sugsize);
103 extern void vbgrow(struct varbuf *vb,size_t sugsize);
104 extern void vbinit(struct varbuf *vb);
105 extern struct varbufnode *vbremone(struct varbuf *vb);
106 extern void vbclear(struct varbuf *vb);
107 extern void vbrem(struct varbuf *vb);
108 extern size_t vbsize(struct varbuf *vb,size_t maxsize);
109 extern void vbwrite(struct varbuf *vb,const void *buf,size_t count);
110 extern size_t vbputstring(struct varbuf *vb,const char *s);
111 extern ssize_t vbwritefd(struct varbuf *vb,int fd);
112 extern size_t vbpeek(struct varbuf *vb,ssize_t offs,void *buf,size_t count);
113 #define vbread(vbp,buf,count) vbpeek(vbp,-1,buf,count)
114 extern ssize_t vbchrn(struct varbuf *vb,ssize_t offs,char c,char dir);
115 extern ssize_t vbreadfd(struct varbuf *vb,int fd);
116 extern char *vbgetline(struct varbuf *vb,char term);
117 extern size_t chkvsprintf(char **sp,const char *fmt,va_list ap);
118 extern size_t vbvprintf(struct varbuf *vb,const char *fmt,va_list ap,char remlf) __attribute__((format(printf,2,0)));
119 extern size_t vbprintf(struct varbuf *vb,const char *fmt,...) __attribute__((format(printf,2,3)));
120 extern void vbpstrputstring(struct varbuf *vb,const char *s);
121 extern void vbpstrprintf(struct varbuf *vb,const char *fmt,...) __attribute__((format(printf,2,3)));
122 extern char *vbpstrread(struct varbuf *vb);
123 extern size_t vbcopy(struct varbuf *vbd,struct varbuf *vbs,ssize_t count);
124 extern unsigned short vbxsum(struct varbuf *vb);
125 extern char vbremlast(struct varbuf *vb);
126 extern void vbdrop(struct varbuf *vb,size_t len);
127 extern void vbgetlinef(struct varbuf *vb,FILE *f);
128 extern ssize_t vbcopyline(struct varbuf *vbd,struct varbuf *vbs);
129 extern char vbdropline(struct varbuf *vb);
130 extern char *vbmemorize(struct varbuf *vb,unsigned flg,size_t *sizep);
131 extern char *vbstringify(struct varbuf *vb,char rem);
132 extern void chat_proccmd(const char *who,char *buf);
133 extern void crfilter(char *sr);
134 extern char *gmctime(time_t tm);
135 extern unsigned char *bitshuffle(unsigned char *dst,unsigned char dstb,const unsigned char *src,unsigned char srcb,size_t bits,char lr);
136 extern char *enbase64(char *dst,const unsigned char *src,size_t bits);
137 extern unsigned char *debase64(unsigned char *dst,const char *src,size_t *dstlp);
139 extern char vbnexact,quiet_null;
141 extern struct varbuf *chat_vbout;
142 extern int chat_cmdpar;
143 extern char *chat_cmdpars[CHAT_CMD_MAXPARS];
144 extern const struct chat_cmdtab chat_cmdtable[];
146 extern const char *signames[];
147 extern void abortsignal(int signo);
149 #define VBCHKSIZE(vb,size) (vbsize((vb),(size))>=(size))
151 #define GENVARBUFP(argmid) \
152 extern void vbput##argmid(struct varbuf *vb,const argmid arg); \
153 extern char vbget##argmid(struct varbuf *vb,argmid *argp);
155 #ifndef INLINE_PUTGETCHAR
163 #ifdef INLINE_PUTGETCHAR
164 static inline void vbputchar(struct varbuf *vb,const char arg) __attribute__((unused));
165 static inline void vbputchar(struct varbuf *vb,const char arg)
168 if (vb->free) vb->l->buf[vb->l->size-(vb->free--)]=arg;
169 else vbwrite(vb,&arg,sizeof(arg));
172 static inline char vbgetchar(struct varbuf *vb,char *argp) __attribute__((unused));
173 static inline char vbgetchar(struct varbuf *vb,char *argp)
176 if (vb->f && vb->done+1<VBNSIZEL(vb,vb->f)) { *argp=vb->f->buf[vb->done++]; return(1); }
177 else return vbread(vb,argp,sizeof(*argp));
181 #endif /* !_M1D_COMMON_H */