aboutsummaryrefslogtreecommitdiff
path: root/contrib/less/lesskey.h
blob: 1e70a7fe09a58f9a9a1bf1925968e1363fb853b2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
 * Copyright (C) 1984-2021  Mark Nudelman
 *
 * You may distribute under the terms of either the GNU General Public
 * License or the Less License, as specified in the README file.
 *
 * For more information, see the README file.
 */

#include "xbuf.h"

/*
 * Format of a lesskey file:
 *
 *      LESSKEY_MAGIC (4 bytes)
 *       sections...
 *      END_LESSKEY_MAGIC (4 bytes)
 *
 * Each section is:
 *
 *      section_MAGIC (1 byte)
 *      section_length (2 bytes)
 *      key table (section_length bytes)
 */
#define C0_LESSKEY_MAGIC        '\0'
#define C1_LESSKEY_MAGIC        'M'
#define C2_LESSKEY_MAGIC        '+'
#define C3_LESSKEY_MAGIC        'G'

#define CMD_SECTION             'c'
#define EDIT_SECTION            'e'
#define VAR_SECTION             'v'
#define END_SECTION             'x'

#define C0_END_LESSKEY_MAGIC    'E'
#define C1_END_LESSKEY_MAGIC    'n'
#define C2_END_LESSKEY_MAGIC    'd'

/* */
#define KRADIX          64

struct lesskey_cmdname
{
	char *cn_name;
	int cn_action;
};

struct lesskey_table
{
	struct lesskey_cmdname *names;
	struct xbuffer buf;
	int is_var;
};

struct lesskey_tables
{
	struct lesskey_table *currtable;
	struct lesskey_table cmdtable;
	struct lesskey_table edittable;
	struct lesskey_table vartable;
};

extern int parse_lesskey(char *infile, struct lesskey_tables *tables);