This commit closes bug 7605, and half-closes 7638. The AEL code has been redistribute...
[asterisk/asterisk.git] / include / asterisk / ael_structs.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2007, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  * \brief Structures for AEL - the Asterisk extension language
21  *
22  * \ref pbx_ael.c
23  */
24
25 #ifndef _ASTERISK_AEL_STRUCTS_H
26 #define _ASTERISK_AEL_STRUCTS_H
27
28 #include "pval.h"
29
30 #if !defined(SOLARIS) && !defined(__CYGWIN__)
31 /* #include <err.h> */
32 #else
33 #define quad_t int64_t
34 #endif
35
36 #if defined(LONG_LONG_MIN) && !defined(QUAD_MIN)
37 #define QUAD_MIN LONG_LONG_MIN
38 #endif
39 #if defined(LONG_LONG_MAX) && !defined(QUAD_MAX)
40 #define QUAD_MAX LONG_LONG_MAX
41 #endif
42
43 #  if ! defined(QUAD_MIN)
44 #   define QUAD_MIN     (-0x7fffffffffffffffLL-1)
45 #  endif
46 #  if ! defined(QUAD_MAX)
47 #   define QUAD_MAX     (0x7fffffffffffffffLL)
48 #  endif
49
50
51 #if 0
52 #endif
53 void ael2_semantic_check(pval *item, int *errs, int *warns, int *notes);
54 pval *npval(pvaltype type, int first_line, int last_line, int first_column, int last_column);
55 pval *linku1(pval *head, pval *tail);
56 void ael2_print(char *fname, pval *tree);
57 struct pval *ael2_parse(char *fname, int *errs);        /* in ael.flex */
58 void destroy_pval(pval *item);
59  
60 extern char *prev_word; /* in ael.flex */
61
62 #ifndef YY_TYPEDEF_YY_SCANNER_T
63 #define YY_TYPEDEF_YY_SCANNER_T
64 typedef void* yyscan_t;
65 #endif
66
67 /* for passing info into and out of yyparse */
68 struct parse_io
69 {
70         struct pval *pval; /* yyparse will set this to point to the parse tree */
71         yyscan_t scanner;       /* yylex needs a scanner. Set it up, and pass it in */
72         int syntax_error_count;  /* the count of syntax errors encountered */
73 };
74
75 /* for CODE GENERATION */
76         
77 typedef enum { AEL_APPCALL, AEL_CONTROL1, AEL_FOR_CONTROL, AEL_IF_CONTROL, AEL_IFTIME_CONTROL, AEL_RAND_CONTROL, AEL_LABEL, AEL_RETURN } ael_priority_type;
78
79
80 struct ael_priority
81 {
82         int priority_num;
83         ael_priority_type type;
84         
85         char *app;
86         char *appargs;
87         
88         struct pval *origin;
89         struct ael_extension *exten;
90         
91         struct ael_priority *goto_true;
92         struct ael_priority *goto_false;
93         struct ael_priority *next;
94 };
95
96 struct ael_extension
97 {
98         char *name;
99         char *cidmatch;
100         char *hints;
101         int regexten;
102         int is_switch;
103         
104         struct ast_context *context;
105         
106         struct ael_priority *plist;
107         struct ael_priority *plist_last;
108         struct ael_extension *next_exten;
109
110         struct ael_priority *loop_break;  /* set by latest loop for breaks */
111         struct ael_priority *loop_continue; /* set by lastest loop for continuing */
112         struct ael_priority *return_target;
113         int return_needed;
114 };
115
116 #endif /* _ASTERISK_AEL_STRUCTS_H */