Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | /**************************************************************************** |
2 | * Copyright (c) 1998 Free Software Foundation, Inc. * |
||
3 | * * |
||
4 | * Permission is hereby granted, free of charge, to any person obtaining a * |
||
5 | * copy of this software and associated documentation files (the * |
||
6 | * "Software"), to deal in the Software without restriction, including * |
||
7 | * without limitation the rights to use, copy, modify, merge, publish, * |
||
8 | * distribute, distribute with modifications, sublicense, and/or sell * |
||
9 | * copies of the Software, and to permit persons to whom the Software is * |
||
10 | * furnished to do so, subject to the following conditions: * |
||
11 | * * |
||
12 | * The above copyright notice and this permission notice shall be included * |
||
13 | * in all copies or substantial portions of the Software. * |
||
14 | * * |
||
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
||
16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
||
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
||
18 | * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
||
19 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
||
20 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
||
21 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
||
22 | * * |
||
23 | * Except as contained in this notice, the name(s) of the above copyright * |
||
24 | * holders shall not be used in advertising or otherwise to promote the * |
||
25 | * sale, use or other dealings in this Software without prior written * |
||
26 | * authorization. * |
||
27 | ****************************************************************************/ |
||
28 | |||
29 | /**************************************************************************** |
||
30 | * Author: Zeyd M. Ben-Halim |
||
31 | * and: Eric S. Raymond |
||
32 | ****************************************************************************/ |
||
33 | |||
34 | /* |
||
35 | * tic.h - Global variables and structures for the terminfo |
||
36 | * compiler. |
||
37 | * |
||
38 | */ |
||
39 | |||
40 | #ifndef __TIC_H |
||
41 | #define __TIC_H |
||
42 | |||
43 | #ifdef __cplusplus |
||
44 | extern "C" { |
||
45 | #endif |
||
46 | |||
47 | #include |
||
48 | |||
49 | /* |
||
50 | ** The format of compiled terminfo files is as follows: |
||
51 | ** |
||
52 | ** Header (12 bytes), containing information given below |
||
53 | ** Names Section, containing the names of the terminal |
||
54 | ** Boolean Section, containing the values of all of the |
||
55 | ** boolean capabilities |
||
56 | ** A null byte may be inserted here to make |
||
57 | ** sure that the Number Section begins on an |
||
58 | ** even word boundary. |
||
59 | ** Number Section, containing the values of all of the numeric |
||
60 | ** capabilities, each as a short integer |
||
61 | ** String Section, containing short integer offsets into the |
||
62 | ** String Table, one per string capability |
||
63 | ** String Table, containing the actual characters of the string |
||
64 | ** capabilities. |
||
65 | ** |
||
66 | ** NOTE that all short integers in the file are stored using VAX/PDP-style |
||
67 | ** byte-order, i.e., least-significant byte first. |
||
68 | ** |
||
69 | ** There is no structure definition here because it would only confuse |
||
70 | ** matters. Terminfo format is a raw byte layout, not a structure |
||
71 | ** dump. If you happen to be on a little-endian machine with 16-bit |
||
72 | ** shorts that requires no padding between short members in a struct, |
||
73 | ** then there is a natural C structure that captures the header, but |
||
74 | ** not very helpfully. |
||
75 | */ |
||
76 | |||
77 | #define MAGIC 0432 /* first two bytes of a compiled entry */ |
||
78 | |||
79 | /* |
||
80 | * The "maximum" here is misleading; XSI guarantees minimum values, which a |
||
81 | * given implementation may exceed. |
||
82 | */ |
||
83 | #define MAX_NAME_SIZE 512 /* maximum legal name field size (XSI:127) */ |
||
84 | #define MAX_ENTRY_SIZE 4096 /* maximum legal entry size */ |
||
85 | |||
86 | /* The maximum size of individual name or alias is guaranteed in XSI to |
||
87 | * be 14, since that corresponds to the older filename lengths. Newer |
||
88 | * systems allow longer aliases, though not many terminal descriptions |
||
89 | * are written to use them. |
||
90 | */ |
||
91 | #if HAVE_LONG_FILE_NAMES |
||
92 | #define MAX_ALIAS 32 /* POSIX minimum for PATH_MAX */ |
||
93 | #else |
||
94 | #define MAX_ALIAS 14 /* SVr3 filename length */ |
||
95 | #endif |
||
96 | |||
97 | /* location of user's personal info directory */ |
||
98 | #define PRIVATE_INFO "%s/.terminfo" /* plug getenv("HOME") into %s */ |
||
99 | |||
100 | #define DEBUG(n, a) if (_nc_tracing & (1 << (n - 1))) _tracef a |
||
101 | extern unsigned _nc_tracing; |
||
102 | extern void _nc_tracef(char *, ...) GCC_PRINTFLIKE(1,2); |
||
103 | extern const char *_nc_visbuf(const char *); |
||
104 | |||
105 | /* |
||
106 | * These are the types of tokens returned by the scanner. The first |
||
107 | * three are also used in the hash table of capability names. The scanner |
||
108 | * returns one of these values after loading the specifics into the global |
||
109 | * structure curr_token. |
||
110 | */ |
||
111 | |||
112 | #define BOOLEAN 0 /* Boolean capability */ |
||
113 | #define NUMBER 1 /* Numeric capability */ |
||
114 | #define STRING 2 /* String-valued capability */ |
||
115 | #define CANCEL 3 /* Capability to be cancelled in following tc's */ |
||
116 | #define NAMES 4 /* The names for a terminal type */ |
||
117 | #define UNDEF 5 /* Undefined */ |
||
118 | |||
119 | #define NO_PUSHBACK -1 /* used in pushtype to indicate no pushback */ |
||
120 | |||
121 | /* |
||
122 | * The global structure in which the specific parts of a |
||
123 | * scanned token are returned. |
||
124 | * |
||
125 | */ |
||
126 | |||
127 | struct token |
||
128 | { |
||
129 | char *tk_name; /* name of capability */ |
||
130 | int tk_valnumber; /* value of capability (if a number) */ |
||
131 | char *tk_valstring; /* value of capability (if a string) */ |
||
132 | }; |
||
133 | |||
134 | extern struct token _nc_curr_token; |
||
135 | |||
136 | /* |
||
137 | * The file comp_captab.c contains an array of these structures, one |
||
138 | * per possible capability. These are indexed by a hash table array of |
||
139 | * pointers to the same structures for use by the parser. |
||
140 | */ |
||
141 | |||
142 | struct name_table_entry |
||
143 | { |
||
144 | const char *nte_name; /* name to hash on */ |
||
145 | int nte_type; /* BOOLEAN, NUMBER or STRING */ |
||
146 | short nte_index; /* index of associated variable in its array */ |
||
147 | short nte_link; /* index in table of next hash, or -1 */ |
||
148 | }; |
||
149 | |||
150 | struct alias |
||
151 | { |
||
152 | const char *from; |
||
153 | const char *to; |
||
154 | const char *source; |
||
155 | }; |
||
156 | |||
157 | extern const struct name_table_entry * const _nc_info_hash_table[]; |
||
158 | extern const struct name_table_entry * const _nc_cap_hash_table[]; |
||
159 | |||
160 | extern const struct alias _nc_capalias_table[]; |
||
161 | extern const struct alias _nc_infoalias_table[]; |
||
162 | |||
163 | extern const struct name_table_entry *_nc_get_table(bool); |
||
164 | |||
165 | #define NOTFOUND ((struct name_table_entry *) 0) |
||
166 | |||
167 | /* out-of-band values for representing absent capabilities */ |
||
168 | #define ABSENT_BOOLEAN -1 |
||
169 | #define ABSENT_NUMERIC -1 |
||
170 | #define ABSENT_STRING (char *)0 |
||
171 | |||
172 | /* out-of-band values for representing cancels */ |
||
173 | #define CANCELLED_BOOLEAN (char)(-2) |
||
174 | #define CANCELLED_NUMERIC -2 |
||
175 | #define CANCELLED_STRING (char *)-1 |
||
176 | |||
177 | #define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING) |
||
178 | |||
179 | /* termcap entries longer than this may break old binaries */ |
||
180 | #define MAX_TERMCAP_LENGTH 1023 |
||
181 | |||
182 | /* this is a documented limitation of terminfo */ |
||
183 | #define MAX_TERMINFO_LENGTH 4096 |
||
184 | |||
185 | #ifndef TERMINFO |
||
186 | #define TERMINFO "/usr/share/terminfo" |
||
187 | #endif |
||
188 | |||
189 | /* comp_hash.c: name lookup */ |
||
190 | struct name_table_entry const *_nc_find_entry(const char *, |
||
191 | const struct name_table_entry *const *); |
||
192 | struct name_table_entry const *_nc_find_type_entry(const char *, |
||
193 | int, |
||
194 | const struct name_table_entry *); |
||
195 | |||
196 | /* comp_scan.c: lexical analysis */ |
||
197 | extern int _nc_get_token(void); |
||
198 | extern void _nc_push_token(int); |
||
199 | extern void _nc_reset_input(FILE *, char *); |
||
200 | extern void _nc_panic_mode(char); |
||
201 | extern int _nc_curr_line; |
||
202 | extern int _nc_curr_col; |
||
203 | extern long _nc_curr_file_pos; |
||
204 | extern long _nc_comment_start, _nc_comment_end; |
||
205 | extern int _nc_syntax; |
||
206 | extern long _nc_start_line; |
||
207 | #define SYN_TERMINFO 0 |
||
208 | #define SYN_TERMCAP 1 |
||
209 | |||
210 | /* comp_error.c: warning & abort messages */ |
||
211 | extern void _nc_set_source(const char *const name); |
||
212 | extern void _nc_get_type(char *name); |
||
213 | extern void _nc_set_type(const char *const name); |
||
214 | extern void _nc_syserr_abort(const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; |
||
215 | extern void _nc_err_abort(const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN; |
||
216 | extern void _nc_warning(const char *const,...) GCC_PRINTFLIKE(1,2); |
||
217 | extern bool _nc_suppress_warnings; |
||
218 | |||
219 | /* comp_expand.c: expand string into readable form */ |
||
220 | extern char *_nc_tic_expand(const char *, bool); |
||
221 | |||
222 | /* comp_scan.c: decode string from readable form */ |
||
223 | extern char _nc_trans_string(char *); |
||
224 | |||
225 | /* captoinfo.c: capability conversion */ |
||
226 | extern char *_nc_captoinfo(const char *, const char *, int const); |
||
227 | extern char *_nc_infotocap(const char *, const char *, int const); |
||
228 | |||
229 | /* lib_tputs.c */ |
||
230 | extern int _nc_nulls_sent; /* Add one for every null sent */ |
||
231 | |||
232 | /* comp_main.c: compiler main */ |
||
233 | extern const char *_nc_progname; |
||
234 | |||
235 | /* read_entry.c */ |
||
236 | extern const char *_nc_tic_dir(const char *); |
||
237 | |||
238 | /* write_entry.c */ |
||
239 | extern int _nc_tic_written(void); |
||
240 | |||
241 | #ifdef __cplusplus |
||
242 | } |
||
243 | #endif |
||
244 | |||
245 | #endif /* __TIC_H */><> |