Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-01 - decus/20-0004/charcode.tty
There are no other files named charcode.tty in the archive.
CHARCODE

The facilities in this file make it possible to gain the efficiency
that comes from dealing with character codes instead of character atoms
without losing the symbolic advantages of the latter.

Two functions (with appropriate macros, etc.) are provided:

charcode[c]  Nlambda that returns the character code structure specified
	by c.  If c is a 1-character atom or string, the corresponding character
	code is simply returned.  Thus (CHARCODE A) is 65, (CHARCODE 0) is 48.
	If c is a list structure, the value is an image of c with all the
	leaves replaced by the corresponding character codes.  E.g.,
	(CHARCODE (A (B C))) is (65 (66 67)).

	charcode permits easy specification of certain peculiar character
	codes:
	  A multi-character atom or string whose first character is ^ is
	  interpreted as the control-character equivalent of the character
	  denoted by its remaining characters.  Thus, (CHARCODE ^A) is 1,
	  the code for control-A.

	  A multi-character atom or string whose first character is # is
	  interpreted as the meta-character equivalent of the character
	  denoted by its remaining characters (= that character code + 128).
	  Thus, (CHARCODE #^A) is 129, the code for meta-control-A.

	  The following key words are mapped into the indicated codes:
		CR	13
		LF	10
		SPACE or SP	32
		EOL	13 (= CR) for Interlisp-D, 31 (= TENEXEOL) for
			    other system types
		TENEXEOL	31
		FF 	17 (form feed)
		ESCAPE or ESC	27
		BELL	7
		BS	8
		TAB 	9
		NULL	0
		DEL	127

	Finally, charcode maps NIL into NIL.  This is included because
	some character-code producing functions sometimes return NIL
	(e.g. NTHCHARCODE); a test for that value can be included
	in a charcode list along with true character-code values.

Charcode of symbolic arguments can be used wherever a structure of
character codes would be appropriate.  For example
	(FMEMB (NTHCHARCODE X 1) (CHARCODE (CR LF SPACE)))  or
	(EQ (BIN FOO) (CHARCODE ^C))

There is a macro for charcode which causes the character-code structure
to be constructed at compile-time.  Thus, the compiled code for these
examples is exactly as efficient as the less readable
	(FMEMB (NTHCHARCODE X 1) (QUOTE (13 10 32)))
	(EQ (BIN FOO) 3)

The second function in this file is a selection function similar to
SELECTQ, except that the selection keys are determined by applying
charcode (instead of QUOTE) to the key-expressions:

selcharq[e;clause1...clausen;default]  Nlambda like selectq.  If the value of
	e is a character code or NIL and it is EQ or MEMB to the result
	of applying charcode to the first element of a clause, the remaining
	forms of that clause are evaluated.  Otherwise, the default is evaluated.
Thus
	(SELCHARQ (BIN FOO)
		  ((SPACE TAB) (FUM))
		  ((^D NIL) (BAR))
		  (a (BAZ))
		  (ZIP))
is exactly equivalent to
	(SELECTQ  (BIN FOO)
		  ((32 9) (FUM))
		  ((4 NIL) (BAR))
		  (97 (BAZ))
		  (ZIP))

Furthermore, selcharq has a macro such that it always compiles as
an equivalent selectq.

-----
Comments and suggestions to Ron Kaplan