1/*	$NetBSD$	*/
2
3/* infokey.h -- Custom keystroke definition support.
4   Id: infokey.h,v 1.2 2004/04/11 17:56:45 karl Exp
5
6   Copyright (C) 1999, 2002 Free Software Foundation, Inc.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software
20   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22   Written by Andrew Bettison <andrewb@zip.com.au>.
23
24   This design was derived from the "lesskey" system in less 3.4.0. by
25   Mark Nudelman.
26
27   The following terminology is confusing:
28	source file = $HOME/.infokey
29	infokey file = $HOME/.info
30   Oh, well.
31 */
32
33
34/* Default source file, where user writes text definitions to be
35   compiled to the infokey file.  MS-DOS doesn't allow leading
36   dots in file names.  */
37#ifdef __MSDOS__
38#define INFOKEY_SRCFILE		"_infokey"
39#else
40#define INFOKEY_SRCFILE		".infokey"
41#endif
42
43/* Default "infokey file", where compiled user defs are kept and
44   read by Info.  MS-DOS doesn't allow leading dots in file names.  */
45#ifdef __MSDOS__
46#define INFOKEY_FILE		"_info"
47#else
48#define INFOKEY_FILE		".info"
49#endif
50
51/*
52Format of entire infokey file:
53
54	4 bytes		magic number S
55	X bytes		version string
56	1 byte '\0'	terminator
57
58	any number of sections:
59		1 byte		section id
60		2 bytes		section length (N)
61		N bytes		section definitions: format depends on section
62
63	4 bytes		magic number E
64
65Format of INFO and EA sections:
66
67	1 byte		flag: 1 == suppress default key bindings
68	Repeat:
69		X bytes		key sequence
70		1 byte '\0'	terminator
71		1 byte		action code (A_xxx)
72
73Format of VAR section:
74
75	Repeat:
76		X bytes		variable name
77		1 byte '\0'	terminator
78		Y bytes		value
79		1 byte '\0'	terminator
80
81*/
82
83#define	INFOKEY_NMAGIC		8
84
85#define	INFOKEY_MAGIC_S0	'\001'
86#define	INFOKEY_MAGIC_S1	'I'
87#define	INFOKEY_MAGIC_S2	'n'
88#define	INFOKEY_MAGIC_S3	'f'
89
90#define	INFOKEY_SECTION_INFO	'i'
91#define	INFOKEY_SECTION_EA	'e'
92#define	INFOKEY_SECTION_VAR	'v'
93
94#define	INFOKEY_MAGIC_E0	'A'
95#define	INFOKEY_MAGIC_E1	'l'
96#define	INFOKEY_MAGIC_E2	'f'
97#define	INFOKEY_MAGIC_E3	'n'
98
99#define	INFOKEY_RADIX		64
100#define	INFOKEY_MAX_SECTIONLEN	500
101#define	INFOKEY_MAX_DEFLEN	16
102
103#define	A_MAX_COMMAND		120
104#define	A_INVALID		121
105
106/* Character transformations (independent of info's own) */
107
108#define	CONTROL(c)		((c) & 0x1f)
109#define	ISCONTROL(c)		(((c) & ~0x1f) == 0)
110#define	META(c)			((c) | 0x80)
111#define	UNMETA(c)		((c) & ~0x80)
112#define	ISMETA(c)		(((c) & 0x80) != 0)
113
114/* Special keys (keys which output different strings on different terminals) */
115
116#define SK_ESCAPE		CONTROL('k')
117#define SK_RIGHT_ARROW		1
118#define SK_LEFT_ARROW		2
119#define SK_UP_ARROW		3
120#define SK_DOWN_ARROW		4
121#define SK_PAGE_UP		5
122#define SK_PAGE_DOWN		6
123#define SK_HOME			7
124#define SK_END			8
125#define SK_DELETE		9
126#define SK_INSERT		10
127#define SK_CTL_LEFT_ARROW	11
128#define SK_CTL_RIGHT_ARROW	12
129#define SK_CTL_DELETE		13
130#define SK_LITERAL		40
131