1
0
Files
2022-09-29 17:59:04 +03:00

242 lines
7.6 KiB
C

/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
/* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
/* UNIX System Laboratories, Inc. */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#ident "@(#)iconv:kbd.h 1.2"
/*
* Until such time as we have a better way to do things, we have
* to define an ioctl "header". This is it...hope it doesn't
* conflict with something else.
*/
#define KBD (('Z' | 128) << 8)
/*
* Misc definitions fundamental to the implementation. If any of them
* change, everything has to be re-compiled. Mostly these are boundary
* conditions. Entries with "+1" mean that the last position is reserved
* for the null character, as they are character STRING sizes.
*/
#define KBDNL 16 /* max name length (+1) */
#define KBDVL 20 /* max length (+1) of "verbose" strings */
#define KBDTMAX 65500 /* max size of a table, in absence of other factors */
#define KBDIMAX 128 /* max length of a search string */
#define KBDOMAX 256 /* max length of a result string */
#define KBDLNX 16 /* max links in composite */
#define NTLINKS 10 /* number of new tablinks to alloc */
/*
* Minimum & maximum timer values. The max value should be long enough
* so that "even the slowest typists won't time-out unless they really have
* their hands away from the keyboard long enough to forget what they typed".
* The min value should be at least 3 ticks so that we never come back until
* the scheduler etc. has had time to run (don't hog the callout table).
*/
#define MINTV 5 /* minimum timer value */
#define MAXTV 500 /* max timer value: s/b at least 4sec */
/*
* cornode c_flags. Anything not defined here is RESERVED! Don't
* touch, please.
*/
#define ND_RESULT 0x01
#define ND_TIMER 0x02
#define ND_INLINE 0x04
#define ND_LAST 0x80
#define ND_RESERVED 0x78 /* all the reserved bits */
/*
* the final node structure "in core node"
*/
struct cornode {
unsigned short c_child;
unsigned char c_val;
unsigned char c_flag; /* high bit on == end of list */
};
/*
* One header per file
*/
struct kbd_header {
unsigned char h_magic[10]; /* magic number */
short h_ntabs; /* number of tables in the file */
};
/*
* t_flag definitions:
*/
#define KBD_ONE 0x01 /* contains one-one */
#define KBD_FULL 0x02 /* "filled" root */
#define KBD_ERR 0x04 /* contains Error node */
#define KBD_TIME 0x08 /* default timed table */
#define KBD_ALP 0x10 /* reserved ALP bit */
#define KBD_COT 0xFF /* is a composite table, NOT a real table */
/*
* One "table" structure per table, "h_ntabs" per file.
* FIX ME: could be divvied up better so that LESS needs to be
* kept on disk -- there are lots of unused fields stored out there.
* Also, remove t_swtch -- it's being phased out.
*/
struct kbd_tab {
unsigned char t_name[KBDNL]; /* name of table */
unsigned short t_nodes; /* number of NODES */
unsigned short t_text; /* total length of result text */
unsigned short t_flag; /* flags (incl. oneone flag) */
unsigned short t_error; /* error "text" space */
unsigned char t_min; /* min & max root values */
unsigned char t_max;
struct cornode *t_nodep;/* in-core pointer to nodes */
unsigned char *t_textp; /* in-core pointer to top of text */
unsigned char *t_oneone;/* one-one 256-byte direct map */
struct kbd_tab *t_next; /* in-core next table */
struct tablink *t_child;/* in-core for composite tables */
unsigned int t_asize; /* in-core sizeof actual allocation */
unsigned short t_ref; /* in-core reference count */
};
/*
* Re-use some fields for ALP when (t_flag & KBD_ALP). The ALP hooks
* are here to preserve binary compatibility.
*/
#define t_alp t_nodep /* reserved ALP pointer */
#define t_alpname t_textp /* reserved ALP name offset */
#define t_alpfunc t_oneone /* reserved ALP func */
/*
* kbd module ioctls and structures.
*/
#define KBD_LOAD (KBD| 1) /* initiate a download */
#define KBD_CONT (KBD| 2) /* continuation of download */
#define KBD_END (KBD| 3) /* end of download */
#define KBD_UNLOAD (KBD| 4) /* unload by name */
#define KBD_QUERY (KBD| 5) /* administrative */
#define KBD_ATTACH (KBD| 6) /* attach to named table */
#define KBD_DETACH (KBD| 7) /* detach from named table */
#define KBD_VERB (KBD| 8) /* set verbose mode */
#define KBD_HOTKEY (KBD| 9) /* set hot-key */
#define KBD_ON (KBD|10) /* turn on mapping */
#define KBD_OFF (KBD|11) /* turn off mapping */
#define KBD_LIST (KBD|12) /* list available (loaded) tables */
#define KBD_LINK (KBD|13) /* make composite */
#define KBD_TSET (KBD|14) /* set timer */
#define KBD_TGET (KBD|15) /* get current timer value */
#define KBD_EXT (KBD|16) /* ALP entry (external) */
#define Z_HK0 0 /* hot key modes (low 7 bits) */
#define Z_HK1 1
#define Z_HK2 2
#define Z_HKVERB 0x80 /* verbose mode for hot keys */
/*
* Structure for initiating a download. Only one download can be in
* progress at a time per Stream. "tabsize+onesize+nodesize+textsize" is
* the total space that must be malloc'd for a table. Only root can
* do a public download. Others must attach or do private downloads.
*/
struct kbd_load {
int z_tabsize; /* size of table structure */
int z_onesize; /* size of one-one table */
int z_nodesize; /* total size of nodes */
int z_textsize; /* total size of text */
unsigned char z_name[KBDNL]; /* name of table */
};
/*
* Alignment characteristics.
*/
#define ALIGNER long
#define ALIGNMENT sizeof(long)
/*
* Flags for t_type field:
*/
#define Z_ON 0x01
#define Z_OFF 0x02
/*
* Flags for c_type field:
*/
#define Z_SET 0x01
#define Z_GET 0x02
/*
* Z_UP/Z_DOWN - multiple use. "u_doing" is one or more of these.
*/
#define Z_UP 0x10
#define Z_DOWN 0x20
/*
* Attach/detach structure
*/
struct kbd_tach {
unsigned short t_type; /* one of Attach, Detach with Up or Down */
unsigned char t_table[KBDNL]; /* table name */
};
/*
* Control structure for On/off requests. Also used with KBD_END to
* hold Z_PUBLIC or Z_PRIVATE.
*/
struct kbd_ctl {
unsigned short c_type; /* one of On or Off with Up or Down */
unsigned short c_arg; /* expansion slot */
};
/*
* Structure for timer requests. Since tables can't be multiply attached,
* the name is sufficient to find the table. If it's a composite,
* s_nth is set to the component number. Timer value is 5-150 and
* represents a value in clock ticks, and is not the numerator of
* a fraction in seconds (it is thus machine dependent, but may provide
* greater control). This structure currently unused.
*/
struct timeset {
int s_nth; /* nth child, if composite */
unsigned short s_time; /* timer value, 10-200 */
unsigned char s_table[KBDNL]; /* table name */
};
/*
* Flags for downloading
*/
#define mi_contra_fa 0
#define Z_PUBLIC 1
#define Z_PRIVATE 2
/*
* query structure & "q_flag" flags.
*/
#define KBD_QF_PUB 0x01 /* public, else private */
#define KBD_QF_COT 0x02 /* if composite */
#define KBD_QF_TIM 0x04 /* if timed */
#define KBD_QF_EXT 0x08 /* if ALP */
struct kbd_query {
unsigned char q_name[KBDNL]; /* name of table */
long q_id; /* unique identifier */
int q_nchild; /* number of elements */
long q_child[KBDLNX]; /* element identifiers */
char q_chtim[KBDLNX]; /* element timing data */
int q_seq; /* sequence */
unsigned int q_asize; /* in-core sizeof allocation */
unsigned short q_tach; /* Z_UP and/or Z_DOWN */
unsigned short q_ref; /* in-core reference count */
unsigned short q_flag; /* PUB, COT, TIM */
unsigned short q_time; /* timing data (simple only) */
unsigned char q_hkin; /* in hot key */
unsigned char q_hkout; /* out hot key */
};