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
42struct lesskey_cmdname
43{
44	char *cn_name;
45	int cn_action;
46};
47
48struct lesskey_table
49{
50	struct lesskey_cmdname *names;
51	struct xbuffer buf;
52	int is_var;
53};
54
55struct 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
63extern int parse_lesskey(char *infile, struct lesskey_tables *tables);
64