summaryrefslogtreecommitdiff
path: root/src/lib/libast/astsa/ast.h
blob: f25f6a50cfe6aef212c898e6c41f21d3c3ea8627 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***********************************************************************
*                                                                      *
*               This software is part of the ast package               *
*          Copyright (c) 1985-2012 AT&T Intellectual Property          *
*                      and is licensed under the                       *
*                 Eclipse Public License, Version 1.0                  *
*                    by AT&T Intellectual Property                     *
*                                                                      *
*                A copy of the License is available at                 *
*          http://www.eclipse.org/org/documents/epl-v10.html           *
*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
*                                                                      *
*              Information and Software Systems Research               *
*                            AT&T Research                             *
*                           Florham Park NJ                            *
*                                                                      *
*                 Glenn Fowler <gsf@research.att.com>                  *
*                  David Korn <dgk@research.att.com>                   *
*                   Phong Vo <kpv@research.att.com>                    *
*                                                                      *
***********************************************************************/
#pragma prototyped
/*
 * standalone mini ast+sfio interface
 */

#ifndef _AST_H
#define _AST_H		1

#include <ast_sa.h>
#include <ast_common.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

#define FMT_EXP_CHAR	0x020		/* expand single byte chars	*/
#define FMT_EXP_LINE	0x040		/* expand \n and \r		*/
#define FMT_EXP_WIDE	0x080		/* expand \u \U \x wide chars	*/
#define FMT_EXP_NOCR	0x100		/* skip \r			*/
#define FMT_EXP_NONL	0x200		/* skip \n			*/

#define STR_MAXIMAL	01		/* maximal match		*/
#define STR_LEFT	02		/* implicit left anchor		*/
#define STR_RIGHT	04		/* implicit right anchor	*/
#define STR_ICASE	010		/* ignore case			*/
#define STR_GROUP	020		/* (|&) inside [@|&](...) only	*/

typedef int (*Error_f)(void*, void*, int, ...);

typedef struct
{

	char*		id;

	struct
	{
	unsigned int	serial;
	unsigned int	set;
	}		locale;

	long		tmp_long;
	size_t		tmp_size;
	short		tmp_short;
	char		tmp_char;
	wchar_t		tmp_wchar;

	int		(*collate)(const char*, const char*);

	int		tmp_int;
	void*		tmp_pointer;

	int		mb_cur_max;
	int		(*mb_len)(const char*, size_t);
	int		(*mb_towc)(wchar_t*, const char*, size_t);
	size_t		(*mb_xfrm)(char*, const char*, size_t);
	int		(*mb_width)(wchar_t);
	int		(*mb_conv)(char*, wchar_t);

	unsigned int	env_serial;

	char		pad[944];

} _Ast_info_t;

#define ast		_ast_info_

#define elementsof(x)	(sizeof(x)/sizeof(x[0]))
#define integralof(x)	(((char*)(x))-((char*)0))
#define newof(p,t,n,x)	((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)calloc(1,sizeof(t)*(n)+(x)))
#define oldof(p,t,n,x)	((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)malloc(sizeof(t)*(n)+(x)))
#define pointerof(x)	((void*)((char*)0+(x)))
#define roundof(x,y)	(((x)+(y)-1)&~((y)-1))

#ifndef offsetof
#define offsetof(type,member) ((unsigned long)&(((type*)0)->member))
#endif

#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
#define NiL			0
#define NoP(x)			(void)(x)
#else
#define NiL			((char*)0)
#define NoP(x)			(&x,1)
#endif

#define conformance(a,b)	"ast"
#define fmtident(s)		((char*)(s)+10)
#define mbchar(s)		(*s++)
#define setlocale(a,b)

#define streq(a,b)		(*(a)==*(b)&&!strcmp(a,b))
#define strneq(a,b,n)		(*(a)==*(b)&&!strncmp(a,b,n))
#define strton(s,t,b,f)		strtol(s,t,0)
#define strtonll(s,t,b,f)	strtoll(s,t,0)

#define Sfio_t		FILE

#define sfstdin		stdin
#define sfstdout	stdout
#define sfstderr	stderr

#define sfclose(f)	fclose(f)
#define sffileno(f)	fileno(f)
#define sfgetc(f)	fgetc(f)
#define sfopen(f,n,m)	fopen(n,m)
#define sfputc(f,c)	fputc(c,f)
#define sfread(f,b,n)	fread(b,n,1,f)
#define sfseek(f,p,w)	fseek(f,p,w)
#define sfset(f,v,n)
#define sfsync(f)	fflush(f)
#define sfwrite(f,b,n)	fwrite(b,n,1,f)

#define sfprintf	fprintf
#define sfsprintf	snprintf
#define sfvprintf	vfprintf

#define sfscanf		fscanf

#define sfgetr		_sf_getr

#include <sfstr.h>

extern _Ast_info_t	ast;

extern int		astwinsize(int, int*, int*);
extern int		chresc(const char*, char**);
extern char*		fmtbuf(size_t);
extern char*		fmtip4(uint32_t, int);
extern char*		sfgetr(Sfio_t*, int, int);
extern char*		strcopy(char*, const char*);
extern int		strmatch(const char*, const char*);
extern int		strtoip4(const char*, char**, uint32_t*, unsigned char*);

#endif