/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos720 src/bos/kernel/sys/ttmap.h 1.6 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1989,1996 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)18 1.6 src/bos/kernel/sys/ttmap.h, cmdtty, bos720 9/13/96 13:24:25 */ /* src/bos/kernel/sys/ttmap.h, cmdtty, bos720 9/13/96 13:24:25 */ /* * COMPONENT_NAME: (sysxtty) System Extension for tty support * * FUNCTIONS: * * ORIGINS: 3, 9, 27 * * (C) COPYRIGHT International Business Machines Corp. 1989 * All Rights Reserved * Licensed Materials - Property of IBM * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #ifndef _H_TMAP #define _H_TMAP /* structures for Terminal Mapping support */ #define TTMAP_VERSION 1 /* current map version (incompat w/version 0) */ #define TTMAP_NAMELEN 32 /* length of a ttmap's name (31 + null) */ #define TTMAP_BUFMAX 10 /* maximum number of buffered characters. */ #define TTMAP_MAXSIZE 131072 /* maximum size of a tty map */ #define TTMAP_PAT_SIZE 10 /* max length of pattern match string */ /* pattern length is limited by $ meta-char */ #define TTMAP_REP_SIZE 16 /* max length of replacement string */ /* code values for tty_map.tm_flags */ #define TM_INPUT 1 /* operation applies to the input map */ #define TM_OUTPUT 2 /* operation applies to output map */ #define TM_CLEAR 4 /* no longer do mapping on this tty */ #define TM_USE 8 /* use named map for this tty */ /* only root may use the following */ #define TM_LOAD 0x10 /* load a map, may be for no specific tty */ #define TM_RELOAD 0x20 /* To force loading of a map even if loaded */ #define TM_STICKY 0x40 /* map will hang around after last user */ #define TM_DEFUNCT 0x80 /* map was replaced (used inside kernel) */ /* structure defining a single mapping rule */ struct ttrule { short tm_next; /* index of next rule to try if match fails */ char tm_pattern [TTMAP_PAT_SIZE+1]; /* pattern to try to match */ char tm_replace [TTMAP_REP_SIZE+1]; /* pattern to replace it with */ }; /* these sizes work out to an even number of words */ /* * Structure defining a single shared tty map * This is the actual map. These float around in the kernel and are * chained together in a linked list. One or more ttys can be pointing * at any given map, the info here is shared. The array of rules is * variable in size and continues contiguous to the one element declared * here. There are ttmap->tm_num_rules rules in the array, including the * one declared. The length in ttmap->tm_len is the total overall length * of the map, used by ioctl routines for copying maps in and out. */ struct ttmap { struct ttmap *tm_next; /* next map in chain */ int tm_len; /* total length of this map */ int tm_count; /* how many ttys using this map */ unsigned char tm_flags; /* sticky, defunct, etc */ short tm_num_rules; /* number of xlate rules in map */ short tm_default; /* index of default rule */ short tm_first_wild; /* index of first wildcard rule */ char tm_mapname [TTMAP_NAMELEN]; /* map unique name */ short tm_hash [256]; /* hash table of rule indexes */ struct ttrule tm_rule [1]; /* variable size */ }; #define NULL_MAP (struct ttmap *)0 /* * State information about a map in use. Two of these per tty structure * This structure lives in the actual tty structure, it holds the pointer * to the real map in use, if any, and holds state information about * translations in progress. There may not be enough characters queued * on a tty to unambiguously satisfy a rule at the time the kernel mapping * function is called, in that case, this structure is used to hold the * mapping state so that translation can continue when more characters * come in. There is one of these structs for the tty input queue and * one for the output queue, each can point at different maps (usually do). */ struct ttmapinfo { struct ttmap *tm_map; /* null if no mapping here */ char tm_trouble; /* counts rule overruns */ char tm_state; /* state: user byte */ char tm_bufindx; /* state: buffer index */ short tm_rulindx; /* state: rules index */ char tm_buffer [TTMAP_BUFMAX]; /* Used internally */ }; /* * structure for ioctls TCSMAP and TCGMAP * This is a special structure for communicating with the kernel in order * manipulate maps. This struct is passed as an argument to an ioctl and * tells the kernel what is to be done and to which maps or ttys. See * comments about the flags above */ struct tty_map { char tm_version; /* Must be TTMAP_VERSION */ unsigned char tm_flags; /* specifies what this operation is */ char tm_mapname [TTMAP_NAMELEN]; /* name of map */ char *tm_addr; /* pointer to map in user space */ int tm_len; /* length of map */ }; #endif /* _H_TMAP */