1 /*
2  * = = == === ===== ======== ============= =====================
3  * == pt::rde (critcl) - Data Structures - PARAM architectural state.
4  */
5 
6 #ifndef _RDE_DS_PARAM_H
7 #define _RDE_DS_PARAM_H 1
8 
9 #include "tcl.h"
10 #include <util.h>  /* Scoping */
11 #include <stack.h> /* Stack handling */
12 
13 /*
14  * The state structure is opaque, its internals are known only to the
15  * functions declared here.
16  */
17 
18 typedef struct RDE_PARAM_* RDE_PARAM;
19 
20 typedef struct ERROR_STATE {
21     int       refCount;
22     long int  loc;
23     RDE_STACK msg; /* long int :: error messages */
24 } ERROR_STATE;
25 
26 typedef struct NC_STATE {
27     long int     CL;
28     long int     ST;
29     Tcl_Obj*     SV;
30     ERROR_STATE* ER;
31 } NC_STATE;
32 
33 /* SKIP START */
34 /* Admin
35  */
36 
37 SCOPE RDE_PARAM rde_param_new            (long int n, char** strings);
38 SCOPE void      rde_param_del            (RDE_PARAM p);
39 SCOPE void      rde_param_reset          (RDE_PARAM p, Tcl_Channel chan);
40 SCOPE void      rde_param_update_strings (RDE_PARAM p, long int n, char** strings);
41 SCOPE void      rde_param_data           (RDE_PARAM p, char* buf, long int len);
42 SCOPE void      rde_param_clientdata     (RDE_PARAM p, ClientData clientData);
43 
44 /* Accessors
45  */
46 
47 SCOPE ClientData         rde_param_query_clientdata (RDE_PARAM p);
48 SCOPE void               rde_param_query_amark   (RDE_PARAM p, long int* mc, void*** mv);
49 SCOPE void               rde_param_query_ast     (RDE_PARAM p, long int* ac, Tcl_Obj*** av);
50 SCOPE const char*        rde_param_query_in      (RDE_PARAM p);
51 SCOPE const char*        rde_param_query_cc      (RDE_PARAM p, long int* len);
52 SCOPE int                rde_param_query_cl      (RDE_PARAM p);
53 SCOPE const ERROR_STATE* rde_param_query_er      (RDE_PARAM p);
54 SCOPE Tcl_Obj*           rde_param_query_er_tcl  (RDE_PARAM p, const ERROR_STATE* er);
55 SCOPE void               rde_param_query_es      (RDE_PARAM p, long int* ec, ERROR_STATE*** ev);
56 SCOPE void               rde_param_query_ls      (RDE_PARAM p, long int* lc, void*** lv);
57 SCOPE long int           rde_param_query_lstop   (RDE_PARAM p);
58 SCOPE Tcl_HashTable*     rde_param_query_nc      (RDE_PARAM p);
59 SCOPE int                rde_param_query_st      (RDE_PARAM p);
60 SCOPE Tcl_Obj*           rde_param_query_sv      (RDE_PARAM p);
61 SCOPE long int           rde_param_query_tc_size (RDE_PARAM p);
62 SCOPE void               rde_param_query_tc_get_s (RDE_PARAM p, long int at, long int last, char** ch, long int* len);
63 SCOPE const char*        rde_param_query_string  (RDE_PARAM p, long int id);
64 
65 /* Instructions
66  */
67 
68 SCOPE void rde_param_i_ast_pop_discard   (RDE_PARAM p);
69 SCOPE void rde_param_i_ast_pop_rewind    (RDE_PARAM p);
70 SCOPE void rde_param_i_ast_push          (RDE_PARAM p);
71 SCOPE void rde_param_i_ast_rewind        (RDE_PARAM p);
72 SCOPE void rde_param_i_ast_value_push    (RDE_PARAM p);
73 
74 SCOPE void rde_param_i_error_clear       (RDE_PARAM p);
75 SCOPE void rde_param_i_error_nonterminal (RDE_PARAM p, long int s);
76 SCOPE void rde_param_i_error_pop_merge   (RDE_PARAM p);
77 SCOPE void rde_param_i_error_push        (RDE_PARAM p);
78 
79 SCOPE void rde_param_i_loc_pop_discard   (RDE_PARAM p);
80 SCOPE void rde_param_i_loc_pop_rewind    (RDE_PARAM p);
81 SCOPE void rde_param_i_loc_push          (RDE_PARAM p);
82 SCOPE void rde_param_i_loc_rewind        (RDE_PARAM p);
83 
84 SCOPE void rde_param_i_input_next        (RDE_PARAM p, long int m);
85 
86 SCOPE void rde_param_i_status_fail       (RDE_PARAM p);
87 SCOPE void rde_param_i_status_ok         (RDE_PARAM p);
88 SCOPE void rde_param_i_status_negate     (RDE_PARAM p);
89 
90 SCOPE int  rde_param_i_symbol_restore    (RDE_PARAM p, long int s);
91 SCOPE void rde_param_i_symbol_save       (RDE_PARAM p, long int s);
92 
93 SCOPE void rde_param_i_test_char         (RDE_PARAM p, const char* c, long int m);
94 SCOPE void rde_param_i_test_range        (RDE_PARAM p, const char* s, const char* e, long int m);
95 
96 SCOPE void rde_param_i_test_alnum        (RDE_PARAM p);
97 SCOPE void rde_param_i_test_alpha        (RDE_PARAM p);
98 SCOPE void rde_param_i_test_ascii        (RDE_PARAM p);
99 SCOPE void rde_param_i_test_control      (RDE_PARAM p);
100 SCOPE void rde_param_i_test_ddigit       (RDE_PARAM p);
101 SCOPE void rde_param_i_test_digit        (RDE_PARAM p);
102 SCOPE void rde_param_i_test_graph        (RDE_PARAM p);
103 SCOPE void rde_param_i_test_lower        (RDE_PARAM p);
104 SCOPE void rde_param_i_test_print        (RDE_PARAM p);
105 SCOPE void rde_param_i_test_punct        (RDE_PARAM p);
106 SCOPE void rde_param_i_test_space        (RDE_PARAM p);
107 SCOPE void rde_param_i_test_upper        (RDE_PARAM p);
108 SCOPE void rde_param_i_test_wordchar     (RDE_PARAM p);
109 SCOPE void rde_param_i_test_xdigit       (RDE_PARAM p);
110 
111 SCOPE void rde_param_i_value_clear       (RDE_PARAM p);
112 SCOPE void rde_param_i_value_leaf        (RDE_PARAM p, long int s);
113 SCOPE void rde_param_i_value_reduce      (RDE_PARAM p, long int s);
114 
115 /* Super Instructions - Aggregated common instruction sequences.
116  */
117 
118 SCOPE int  rde_param_i_symbol_start         (RDE_PARAM p, long int s);
119 SCOPE int  rde_param_i_symbol_start_d       (RDE_PARAM p, long int s);
120 SCOPE int  rde_param_i_symbol_void_start    (RDE_PARAM p, long int s);
121 SCOPE int  rde_param_i_symbol_void_start_d  (RDE_PARAM p, long int s);
122 
123 SCOPE void rde_param_i_symbol_done_d_reduce (RDE_PARAM p, long int s, long int m);
124 SCOPE void rde_param_i_symbol_done_leaf     (RDE_PARAM p, long int s, long int m);
125 SCOPE void rde_param_i_symbol_done_d_leaf   (RDE_PARAM p, long int s, long int m);
126 SCOPE void rde_param_i_symbol_done_void     (RDE_PARAM p, long int s, long int m);
127 SCOPE void rde_param_i_symbol_done_d_void   (RDE_PARAM p, long int s, long int m);
128 
129 SCOPE void rde_param_i_next_char     (RDE_PARAM p, const char* c, long int m);
130 SCOPE void rde_param_i_next_range    (RDE_PARAM p, const char* s, const char* e, long int m);
131 
132 SCOPE void rde_param_i_next_alnum    (RDE_PARAM p, long int m);
133 SCOPE void rde_param_i_next_alpha    (RDE_PARAM p, long int m);
134 SCOPE void rde_param_i_next_ascii    (RDE_PARAM p, long int m);
135 SCOPE void rde_param_i_next_control  (RDE_PARAM p, long int m);
136 SCOPE void rde_param_i_next_ddigit   (RDE_PARAM p, long int m);
137 SCOPE void rde_param_i_next_digit    (RDE_PARAM p, long int m);
138 SCOPE void rde_param_i_next_graph    (RDE_PARAM p, long int m);
139 SCOPE void rde_param_i_next_lower    (RDE_PARAM p, long int m);
140 SCOPE void rde_param_i_next_print    (RDE_PARAM p, long int m);
141 SCOPE void rde_param_i_next_punct    (RDE_PARAM p, long int m);
142 SCOPE void rde_param_i_next_space    (RDE_PARAM p, long int m);
143 SCOPE void rde_param_i_next_upper    (RDE_PARAM p, long int m);
144 SCOPE void rde_param_i_next_wordchar (RDE_PARAM p, long int m);
145 SCOPE void rde_param_i_next_xdigit   (RDE_PARAM p, long int m);
146 
147 SCOPE void rde_param_i_notahead_start_d (RDE_PARAM p);
148 SCOPE void rde_param_i_notahead_exit_d  (RDE_PARAM p);
149 SCOPE void rde_param_i_notahead_exit    (RDE_PARAM p);
150 
151 SCOPE void rde_param_i_state_push_2     (RDE_PARAM p);
152 SCOPE void rde_param_i_state_push_void  (RDE_PARAM p);
153 SCOPE void rde_param_i_state_push_value (RDE_PARAM p);
154 
155 SCOPE void rde_param_i_state_merge_ok    (RDE_PARAM p);
156 SCOPE void rde_param_i_state_merge_void  (RDE_PARAM p);
157 SCOPE void rde_param_i_state_merge_value (RDE_PARAM p);
158 
159 SCOPE int  rde_param_i_kleene_close   (RDE_PARAM p);
160 SCOPE int  rde_param_i_kleene_abort   (RDE_PARAM p);
161 
162 SCOPE int  rde_param_i_seq_void2void   (RDE_PARAM p);
163 SCOPE int  rde_param_i_seq_void2value  (RDE_PARAM p);
164 SCOPE int  rde_param_i_seq_value2value (RDE_PARAM p);
165 
166 SCOPE int  rde_param_i_bra_void2void   (RDE_PARAM p);
167 SCOPE int  rde_param_i_bra_void2value  (RDE_PARAM p);
168 SCOPE int  rde_param_i_bra_value2void  (RDE_PARAM p);
169 SCOPE int  rde_param_i_bra_value2value (RDE_PARAM p);
170 
171 SCOPE void rde_param_i_next_str   (RDE_PARAM p, const char* str,   long int m);
172 SCOPE void rde_param_i_next_class (RDE_PARAM p, const char* class, long int m);
173 
174 /* SKIP END */
175 #endif /* _RDE_DS_PARAM_H */
176 
177 /*
178  * Local Variables:
179  * mode: c
180  * c-basic-offset: 4
181  * fill-column: 78
182  * End:
183  */
184