xref: /freebsd/contrib/less/lesskey.h (revision ccfd87fe2ac0e2e6aeb1911a7d7cce6712a8564f)
1 /*
2  * Copyright (C) 1984-2023  Mark Nudelman
3  *
4  * You may distribute under the terms of either the GNU General Public
5  * License or the Less License, as specified in the README file.
6  *
7  * For more information, see the README file.
8  */
9 
10 #include "xbuf.h"
11 
12 /*
13  * Format of a lesskey file:
14  *
15  *      LESSKEY_MAGIC (4 bytes)
16  *       sections...
17  *      END_LESSKEY_MAGIC (4 bytes)
18  *
19  * Each section is:
20  *
21  *      section_MAGIC (1 byte)
22  *      section_length (2 bytes)
23  *      key table (section_length bytes)
24  */
25 #define C0_LESSKEY_MAGIC        '\0'
26 #define C1_LESSKEY_MAGIC        'M'
27 #define C2_LESSKEY_MAGIC        '+'
28 #define C3_LESSKEY_MAGIC        'G'
29 
30 #define CMD_SECTION             'c'
31 #define EDIT_SECTION            'e'
32 #define VAR_SECTION             'v'
33 #define END_SECTION             'x'
34 
35 #define C0_END_LESSKEY_MAGIC    'E'
36 #define C1_END_LESSKEY_MAGIC    'n'
37 #define C2_END_LESSKEY_MAGIC    'd'
38 
39 /* */
40 #define KRADIX          64
41 
42 struct lesskey_cmdname
43 {
44 	char *cn_name;
45 	int cn_action;
46 };
47 
48 struct lesskey_table
49 {
50 	struct lesskey_cmdname *names;
51 	struct xbuffer buf;
52 	int is_var;
53 };
54 
55 struct lesskey_tables
56 {
57 	struct lesskey_table *currtable;
58 	struct lesskey_table cmdtable;
59 	struct lesskey_table edittable;
60 	struct lesskey_table vartable;
61 };
62 
63 extern int parse_lesskey(char *infile, struct lesskey_tables *tables);
64