xref: /freebsd-src/contrib/less/lesskey.h (revision c77c488926555ca344ae3a417544cf7a720e1de1)
1a5f0fb15SPaul Saab /*
2*c77c4889SXin LI  * Copyright (C) 1984-2024  Mark Nudelman
3a5f0fb15SPaul Saab  *
4a5f0fb15SPaul Saab  * You may distribute under the terms of either the GNU General Public
5a5f0fb15SPaul Saab  * License or the Less License, as specified in the README file.
6a5f0fb15SPaul Saab  *
796e55cc7SXin LI  * For more information, see the README file.
8a5f0fb15SPaul Saab  */
9a5f0fb15SPaul Saab 
10*c77c4889SXin LI #include "lang.h"
1130a1828cSXin LI #include "xbuf.h"
12a5f0fb15SPaul Saab 
13a5f0fb15SPaul Saab /*
14a5f0fb15SPaul Saab  * Format of a lesskey file:
15a5f0fb15SPaul Saab  *
16a5f0fb15SPaul Saab  *      LESSKEY_MAGIC (4 bytes)
17a5f0fb15SPaul Saab  *       sections...
18a5f0fb15SPaul Saab  *      END_LESSKEY_MAGIC (4 bytes)
19a5f0fb15SPaul Saab  *
20a5f0fb15SPaul Saab  * Each section is:
21a5f0fb15SPaul Saab  *
22a5f0fb15SPaul Saab  *      section_MAGIC (1 byte)
23a5f0fb15SPaul Saab  *      section_length (2 bytes)
24a5f0fb15SPaul Saab  *      key table (section_length bytes)
25a5f0fb15SPaul Saab  */
26a5f0fb15SPaul Saab #define C0_LESSKEY_MAGIC        '\0'
27a5f0fb15SPaul Saab #define C1_LESSKEY_MAGIC        'M'
28a5f0fb15SPaul Saab #define C2_LESSKEY_MAGIC        '+'
29a5f0fb15SPaul Saab #define C3_LESSKEY_MAGIC        'G'
30a5f0fb15SPaul Saab 
31a5f0fb15SPaul Saab #define CMD_SECTION             'c'
32a5f0fb15SPaul Saab #define EDIT_SECTION            'e'
33a5f0fb15SPaul Saab #define VAR_SECTION             'v'
34a5f0fb15SPaul Saab #define END_SECTION             'x'
35a5f0fb15SPaul Saab 
36a5f0fb15SPaul Saab #define C0_END_LESSKEY_MAGIC    'E'
37a5f0fb15SPaul Saab #define C1_END_LESSKEY_MAGIC    'n'
38a5f0fb15SPaul Saab #define C2_END_LESSKEY_MAGIC    'd'
39a5f0fb15SPaul Saab 
40a5f0fb15SPaul Saab /* */
41a5f0fb15SPaul Saab #define KRADIX          64
4230a1828cSXin LI 
4330a1828cSXin LI struct lesskey_cmdname
4430a1828cSXin LI {
45*c77c4889SXin LI 	constant char *cn_name;
4630a1828cSXin LI 	int cn_action;
4730a1828cSXin LI };
4830a1828cSXin LI 
4930a1828cSXin LI struct lesskey_table
5030a1828cSXin LI {
51*c77c4889SXin LI 	constant struct lesskey_cmdname *names;
5230a1828cSXin LI 	struct xbuffer buf;
5330a1828cSXin LI 	int is_var;
5430a1828cSXin LI };
5530a1828cSXin LI 
5630a1828cSXin LI struct lesskey_tables
5730a1828cSXin LI {
5830a1828cSXin LI 	struct lesskey_table *currtable;
5930a1828cSXin LI 	struct lesskey_table cmdtable;
6030a1828cSXin LI 	struct lesskey_table edittable;
6130a1828cSXin LI 	struct lesskey_table vartable;
6230a1828cSXin LI };
6330a1828cSXin LI 
64*c77c4889SXin LI extern int parse_lesskey(constant char *infile, struct lesskey_tables *tables);
65*c77c4889SXin LI extern int parse_lesskey_content(constant char *content, struct lesskey_tables *tables);
66*c77c4889SXin LI 
67*c77c4889SXin LI /* keep in sync with less.h */
68*c77c4889SXin LI #if HAVE_SNPRINTF
69*c77c4889SXin LI #define SNPRINTF1(str, size, fmt, v1)             snprintf((str), (size), (fmt), (v1))
70*c77c4889SXin LI #define SNPRINTF2(str, size, fmt, v1, v2)         snprintf((str), (size), (fmt), (v1), (v2))
71*c77c4889SXin LI #define SNPRINTF3(str, size, fmt, v1, v2, v3)     snprintf((str), (size), (fmt), (v1), (v2), (v3))
72*c77c4889SXin LI #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) snprintf((str), (size), (fmt), (v1), (v2), (v3), (v4))
73*c77c4889SXin LI #else
74*c77c4889SXin LI /* Use unsafe sprintf if we don't have snprintf. */
75*c77c4889SXin LI #define SNPRINTF1(str, size, fmt, v1)             sprintf((str), (fmt), (v1))
76*c77c4889SXin LI #define SNPRINTF2(str, size, fmt, v1, v2)         sprintf((str), (fmt), (v1), (v2))
77*c77c4889SXin LI #define SNPRINTF3(str, size, fmt, v1, v2, v3)     sprintf((str), (fmt), (v1), (v2), (v3))
78*c77c4889SXin LI #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) sprintf((str), (fmt), (v1), (v2), (v3), (v4))
79*c77c4889SXin LI #endif
80