home *** CD-ROM | disk | FTP | other *** search
- ; LEXLATE.CSM
- ; Lexical Character order translate
- ; *******************************************************************
- ; Returns a lexical order number of the character argument
- ; *******************************************************************
- ; '\0' translates to itself
- ; ' ' translates to the lowest lexical order
- ;
- ; The Other Ordering is:
- ;
- ; 0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
- ;
- ; ALL other bytes in the range 0 thru 255
- ; translate to a non-existence mark (0xff)
- ;
- ; The equivalent C code if statics and static initialization
- ; were available would be:
- ;
- ; char
- ; lexlate(c)
- ; char c;
- ; {
- ; static char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES};
- ;
- ; return (xlate[c]);
- ; }
- ;
- ; Alternatively, if external initialization were available:
- ;
- ; char xlate[] = {THE_ORDER_SEQUENCE_256_BYTES};
- ; #define lexlate(c) (xlate[c & 0xff])
- ;
- ; *******************************************************************
- ;
-
- maclib bds
-
- X equ 0ffh ; Non-Existence Mark
-
- FUNCTION lexlate
- pop d ; DE = return address
- pop h ; HL = argument
- push h ; argument = HL
- push d ; return address = DE
- lxi d,xlate ; DE = &xlate[0]
- mvi h,0 ; HL = offset into xlate
- dad d ; hl = &xlate[argument]
- mov l,m
- mvi h,0 ; hl = xlate[argument]
- ret
- ;
- xlate: db 0,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G
- db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O
- db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W
- db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_
- db 1,X,X,X,X,X,X,X ; <sp><EXCLAIM>"#$%&'
- db X,X,X,X,X,X,X,X ; ()*+,-./
- db 2,3,4,5,6,7,8,9 ; 01234567
- db 10,11,X,X,X,X,X,X ; 89:;<=>?
- ; note: state 12 not used (WAS previously inadvertently assigned to :)
- db X,13,15,17,19,21,23,25 ; @ABCDEFG
- db 27,29,31,33,35,37,39,41 ; HIJKLMNO
- db 43,45,47,49,51,53,55,57 ; PQRSTUVW
- db 59,61,63,X,X,X,X,X ; XYZ[\]^_
- db X,14,16,18,20,22,24,26 ; `abcdefg
- db 28,30,32,34,36,38,40,42 ; hijklmno
- db 44,46,48,50,52,54,56,58 ; pqrstuvw
- db 60,62,64,X,X,X,X,X ; xyz{|}~<del>
- ;
- ; Same Stuff with MSB SET
- ;
- db X,X,X,X,X,X,X,X ; ^@^A^B^C^D^E^F^G
- db X,X,X,X,X,X,X,X ; ^H^I^J^K^L^M^N^O
- db X,X,X,X,X,X,X,X ; ^P^Q^R^S^T^U^V^W
- db X,X,X,X,X,X,X,X ; ^X^Y^Z^[^\^]^^^_
- db X,X,X,X,X,X,X,X ; <sp><EXCLAIM>"#$%&'
- db X,X,X,X,X,X,X,X ; ()*+,-./
- db X,X,X,X,X,X,X,X ; 01234567
- db X,X,X,X,X,X,X,X ; 89:;<=>?
- db X,X,X,X,X,X,X,X ; @ABCDEFG
- db X,X,X,X,X,X,X,X ; HIJKLMNO
- db X,X,X,X,X,X,X,X ; PQRSTUVW
- db X,X,X,X,X,X,X,X ; XYZ[\]^_
- db X,X,X,X,X,X,X,X ; `abcdefg
- db X,X,X,X,X,X,X,X ; hijklmno
- db X,X,X,X,X,X,X,X ; pqrstuvw
- db X,X,X,X,X,X,X,X ; xyz{|}~<del>
-
- endfunc
- ,X,X ; 89:;<=>?
- ; note: state 12 not used (WAS pr