home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk1.iso / altsrc / articles / 10817 < prev    next >
Text File  |  1994-07-11  |  64KB  |  1,544 lines

  1. Path: wupost!psuvax1!news.pop.psu.edu!news.cac.psu.edu!howland.reston.ans.net!pipex!sunic!news.funet.fi!hydra.Helsinki.FI!news.helsinki.fi!not-for-mail
  2. From: Kari.Hurtta@Helsinki.FI (Kari E. Hurtta)
  3. Newsgroups: alt.sources
  4. Subject: kehpager V1.2 (part 01/14)
  5. Followup-To: alt.sources.d
  6. Date: 9 Jul 1994 14:22:01 +0300
  7. Organization: University of Helsinki
  8. Lines: 1527
  9. Sender: hurtta@cc.Helsinki.FI
  10. Message-ID: <2vm18p$hl5@plootu.Helsinki.FI>
  11. Reply-To: "Kari E. Hurtta" <Kari.Hurtta@Helsinki.FI>
  12. NNTP-Posting-Host: plootu.helsinki.fi
  13. Mime-Version: 1.0
  14. Content-Type: text/plain; charset=ISO-8859-1
  15. Content-Transfer-Encoding: 8bit
  16.  
  17. Title: kehpager V1.2 - Charset aware pager for VTxxx terminals
  18. Archive-Name: kehpager0120/part01
  19. Author: Kari E. Hurtta <Kari.Hurtta@Helsinki.FI>
  20. Part: 01/14
  21. Environment: Ansi C, SunOS 4.1.2 (OS/MP 4.1B), 4.1.3, 5.2, 5.3, 
  22.     HP-UX A.09.01, IRIX 4.0.5 (?), FreeBSD (?), NetBSD(?),
  23.     386BSD(?), VTxxx
  24.  
  25. #!/bin/sh
  26. # shar:    Shell Archiver  (v1.22)
  27. #
  28. # This is part 1 of a multipart archive                                    
  29. # do not concatenate these parts, unpack them in order with /bin/sh        
  30. #
  31. #    Run the following text with /bin/sh to create:
  32. #      COPYRIGHT
  33. #      Makefile
  34. #      Makefile.bsd
  35. #      Makefile.hpux
  36. #      Makefile.irix
  37. #      README
  38. #      VERSION
  39. #      charset.c
  40. #      charset.h
  41. #      content.c
  42. #      content.h
  43. #      control.c
  44. #      control.h
  45. #      edit.c
  46. #      edit.h
  47. #      env.c
  48. #      env.h
  49. #      esc.c
  50. #      esc.h
  51. #      kehpager.1
  52. #      kehpager.c
  53. #      kehpager.h
  54. #      kehpager.init
  55. #      kehpager.init.hpux
  56. #      keyboard.c
  57. #      keyboard.h
  58. #      memory.c
  59. #      memory.h
  60. #      rc.c
  61. #      rc.h
  62. #      terminal.c
  63. #      terminal.h
  64. #      window.c
  65. #      window.h
  66. #
  67. if test -r s2_seq_.tmp
  68. then echo "Must unpack archives in sequence!"
  69.      next=`cat s2_seq_.tmp`; echo "Please unpack part $next next"
  70.      exit 1; fi
  71. echo "x - extracting COPYRIGHT (Text)"
  72. sed 's/^X//' << 'SHAR_EOF' > COPYRIGHT &&
  73. X
  74. X  kehpager, Charset aware pager, Kari E. Hurtta
  75. X
  76. X  Copyright (c) 1993, 1994 Kari E. Hurtta
  77. X
  78. X  Redistribution and use in source and binary forms are permitted
  79. X  provided that the above copyright notice and this paragraph are
  80. X  duplicated in all such forms. This software is provided 'as is'
  81. X  and without any warranty.
  82. SHAR_EOF
  83. chmod 0444 COPYRIGHT || echo "restore of COPYRIGHT fails"
  84. echo "x - extracting Makefile (Text)"
  85. sed 's/^X//' << 'SHAR_EOF' > Makefile &&
  86. X# acc
  87. X#CC = acc
  88. X#CFLAGS = -O4 -Xa
  89. X#CFLAGS = -Xa
  90. X
  91. X# Gcc
  92. XCC = gcc 
  93. X#CFLAGS = -g
  94. X#CFLAGS = -g -W -O1 
  95. XCFLAGS = -W -O9 
  96. X
  97. XLDFLAGS = -lm 
  98. X
  99. X.KEEP_STATE:
  100. X
  101. XSOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
  102. Xrc.c env.c keyboard.c content.c edit.c
  103. X#OBJS = $(SOURCES:.c=.o) /usr/lib/debug/malloc.o
  104. XOBJS = $(SOURCES:.c=.o)
  105. XCFLAGS += -DGLOBAL_INIT_FILE=\"/home/hydra/hurtta/src/kehpager/kehpager.init\"
  106. X#CFLAGS += -DGLOBAL_INIT_FILE=\"/usr/local/contrib/lib/kehpager.init\"
  107. X
  108. X# SunOS4 preserves VLNEXT character when in ICANON not set (at least when input
  109. X#  is timed)
  110. Xsunos4 := CFLAGS += -DSUNOS4 -DVLNEXT_preserved
  111. X# Wall only in SunOS5 bacause in SunOS4 haven't Ansi C headers (ie. prototypes)
  112. Xsunos5 := CFLAGS += -DSUNOS5 -Wall
  113. Xsunos53 := CC = /usr/local2/bin/gcc
  114. X
  115. Xbad:
  116. X    @echo "Use ${MAKE} sunos4"
  117. X    @echo " or ${MAKE} sunos5"
  118. X    @echo " or ${MAKE} -f Makefile.hpux"
  119. X    @echo " or ${MAKE} -f Makefile.bsd"
  120. X
  121. Xkehpager: $(OBJS)
  122. X    $(LINK.c) -o $@ $(OBJS)
  123. X
  124. Xsunos4: kehpager
  125. Xsunos5: kehpager
  126. Xsunos52: sunos5
  127. Xsunos53: sunos5
  128. SHAR_EOF
  129. chmod 0644 Makefile || echo "restore of Makefile fails"
  130. echo "x - extracting Makefile.bsd (Text)"
  131. sed 's/^X//' << 'SHAR_EOF' > Makefile.bsd &&
  132. X# For stupid make !!!
  133. X
  134. X# cc
  135. X#CC = cc
  136. X#CFLAGS = -O $(DEFS)
  137. X
  138. X# Gcc
  139. XCC = gcc 
  140. XCFLAGS = -g -Wall -O2 $(DEFS)
  141. X
  142. XINITF = -DGLOBAL_INIT_FILE=\"/usr/local/lib/kehpager.init\"
  143. XDEFS = $(INITF)
  144. XLDFLAGS = -lm
  145. X
  146. Xall: kehpager
  147. X
  148. X
  149. XSOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
  150. X    rc.c env.c keyboard.c content.c edit.c
  151. X
  152. XOBJS    = kehpager.o terminal.o esc.o memory.o control.o charset.o window.o \
  153. X    rc.o env.o keyboard.o content.o edit.o
  154. X
  155. X
  156. Xkehpager: $(OBJS)
  157. X    $(CC) -o $@ $(OBJS) $(LDFLAGS)
  158. SHAR_EOF
  159. chmod 0444 Makefile.bsd || echo "restore of Makefile.bsd fails"
  160. echo "x - extracting Makefile.hpux (Text)"
  161. sed 's/^X//' << 'SHAR_EOF' > Makefile.hpux &&
  162. XINIT = -DGLOBAL_INIT_FILE=\"/home/hydra/hurtta/src/kehpager/kehpager.init.hpux\"
  163. X
  164. X# Compiling with GNU C
  165. X#CC = gcc
  166. X#CFLAGS = -g $(INIT) -W -O1
  167. X#CFLAGS = $(INIT) -Wall -O9
  168. X
  169. X# Compiling with HP C
  170. XCC = cc
  171. XCFLAGS = -Aa +O3 -D_HPUX_SOURCE -O $(INIT) 
  172. X
  173. XLDFLAGS = -lm 
  174. X
  175. X.KEEP_STATE:
  176. X
  177. XSOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
  178. Xrc.c env.c keyboard.c  content.c edit.c
  179. XOBJS = $(SOURCES:.c=.o) 
  180. X
  181. X
  182. Xkehpager: $(OBJS)
  183. X    $(CC) $(LDFLAGS) -o $@ $(OBJS) 
  184. SHAR_EOF
  185. chmod 0444 Makefile.hpux || echo "restore of Makefile.hpux fails"
  186. echo "x - extracting Makefile.irix (Text)"
  187. sed 's/^X//' << 'SHAR_EOF' > Makefile.irix &&
  188. XINIT = -DGLOBAL_INIT_FILE=\"/usr/people/hurtta/kehpager/kehpager.init\"
  189. X
  190. X# Compiling with SGI C
  191. XCC = cc
  192. XCFLAGS = -xansi -O2 $(INIT) 
  193. X
  194. XLDFLAGS = -lm 
  195. X
  196. X.KEEP_STATE:
  197. X
  198. XSOURCES = kehpager.c terminal.c esc.c memory.c control.c charset.c window.c \
  199. Xrc.c env.c keyboard.c  content.c edit.c
  200. XOBJS = $(SOURCES:.c=.o) 
  201. X
  202. X
  203. Xkehpager: $(OBJS)
  204. X    $(CC) $(LDFLAGS) -o $@ $(OBJS) 
  205. SHAR_EOF
  206. chmod 0644 Makefile.irix || echo "restore of Makefile.irix fails"
  207. echo "x - extracting README (Text)"
  208. sed 's/^X//' << 'SHAR_EOF' > README &&
  209. Xkehpager V1.2 - Charset aware pager for VTxxx terminals
  210. X
  211. X     Look file COPYRIGHT to see your rights.
  212. X
  213. X     Kehpager is a pager that displays the  contents  of  a  text
  214. X     file on the terminal, one screenful at a time. It translates
  215. X     file's charset to the terminal's charsets.  Too  long  lines
  216. X     are  wrapped in between words. Kehpager  can also interprete
  217. X     text/enriched and text/richtext -formatted text files.
  218. X
  219. X     Text/enriched is a clarification, simplification and refine-
  220. X     ment  of  type  defined  as  text/richtext. Text/enriched is
  221. X     intended to make text/richtext obsolete.
  222. X
  223. X     When kehpager starts, it tests if the terminal supports  8 -
  224. X     bit  characters  (see  also usage of options -e, -7 and -8).
  225. X     If the terminal supports 8-bit  characters,  kehpager  turns
  226. X     the  terminal  to  Multinational  mode.   Otherwise kehpager
  227. X     turns the terminal to National mode and use current national
  228. X     font  and  ASCII. National font is determined by asking key-
  229. X     board language from the terminal.  Kehpager  may  also  uses
  230. X     Special, Latin/1 and Technical fonts.
  231. X
  232. X     Kehpager works on VT100, but VT300 is recommended.  Kehpager
  233. X     doesn't  work  with  emulators where character conversion is
  234. X     done for characters in line. Conversions should be done with
  235. X     respect     of    bank    assigments    (G0   -   G3)    and
  236. X     multinational/national -mode.
  237. X
  238. XKehpager knows following charsets:
  239. X    Latin/1                      ISO-8859-1
  240. X    Latin/2                      ISO-8859-2
  241. X    Latin/3                      ISO-8859-3
  242. X    Latin/4                      ISO-8859-4
  243. X    Latin/5                      ISO-8859-9
  244. X    Ascii                        US-ASCII
  245. X    MS-DOS CP437                 X-CP437            (*)
  246. X    Macintosh                    X-MAC
  247. X    Multinational                X-DEC-MCS
  248. X    Mnemonics encoding from RFC1345                (*)
  249. X    Unicode 1.1 with UTF-7       UNICODE-1-1-UTF7        (*)
  250. X    Unicode 1.1 with UTF-8       UNICODE-1-1-UTF8        (*)
  251. X    French Canadian national     X-ISO646-CA
  252. X    German national              X-ISO646-DE
  253. X    Finnish national             X-ISO646-FI
  254. X    French/Belgian national      X-ISO646-FR
  255. X    Italian national             X-ISO646-ITA
  256. X    Norwegian national           X-ISO646-NO
  257. X    Swedish national             X-ISO646-SE
  258. X    Spanish national             X-ISO646-SPA
  259. X    British national (UK-ASCII)  X-UK-ASCII
  260. X
  261. X    (*) subset
  262. X
  263. XSo kehpager are still missings many charsets: 
  264. X    some national fonts (for support of national mode of terminal)
  265. X    some ISO 8859 fonts (for support of MIME)
  266. X
  267. XAll charsets aren't complete. Specially kehpager knows only
  268. Xsmall subset from Unicode 1.1 and mnemonics encoding. 'Raw'
  269. XUnicode (ie. UCS-2 encoding) isn't supported. You can get list
  270. Xof known characters with command 'kehpager -T3'.
  271. X
  272. XYou can get charset listing with command 'kehpager -cs'.
  273. X
  274. XIf you want add charsets, ask help from me (Kari.Hurtta@Helsinki.FI).
  275. XYou can also check files charset.c and control.c (see 'sets' array).
  276. XIf you add charsets to kehpager, I like to get diffs.
  277. X
  278. XSevere limitation is, that kehpager requires that letters are written 
  279. Xform left to right. This limitation is not easy lift. This affect at
  280. Xleast routines in control.c and formating machine (wrap_line) in
  281. Xwindow.c.
  282. X
  283. XText/enriched commands:
  284. X    Bold        implemented
  285. X    Italic        implemented as command Underline
  286. X    Fixed        has no-op
  287. X    Smaller        NOT implemented
  288. X    Bigger        NOT implemented
  289. X    Underline    implemented
  290. X    Center        implemented
  291. X    FlushLeft    implemented
  292. X    FlushRight    implemented
  293. X    FlushBoth    implemented
  294. X    Indent        implemented
  295. X    IndentRight    implemented
  296. X    Excerpt        implemented 
  297. X    Verbatim    implemented
  298. X    Nofill        implemented (if I understood this)
  299. X    Param        implemented (but commands in param are still executed)
  300. X   - Enriched interpreter is stack based, so balancing rule must stricly be
  301. X    followed; unrecognized commands also must be balanced
  302. X   - By default justification of text is selectable (if input.full_justify
  303. X    is false, it is FlushLeft, else it is FlushBoth. 
  304. X    Default value is false)
  305. X   - FlushRight and Center changes semantic of TAB character
  306. X
  307. XInstallation
  308. XSunOS 4:
  309. X    Set correct value for use.keyboard.language -field in
  310. X        kehpager.init (you can also comment it out if your
  311. X        terminals is inteelligent enough). You probably also
  312. X     want add
  313. X       use.vt100.national_available: Enabled
  314. X     to kehpager.init (this was default prior version 1.06).
  315. X    Copy kehpager.init to library direction
  316. X    Edit Makefile and put defination of GLOBAL_INIT_FILE
  317. X      point correct location of kehpager.init
  318. X      Also select correct compiler (gcc, or SUN's acc)
  319. X      to Makefile.'s define.
  320. X    Compile it with
  321. X        make sunos4
  322. X    Copy kehpager and kehpager.1 to correct directories
  323. XSunOS 5:
  324. X    Set correct value for use.keyboard.language -field in
  325. X        kehpager.init (you can also comment it out if your
  326. X        terminals is intelligent enough). You probably also
  327. X     want add
  328. X       use.vt100.national_available: Enabled
  329. X     to kehpager.init (this was default prior version 1.06).
  330. X    Copy kehpager.init to library direction
  331. X    Edit Makefile and put defination of GLOBAL_INIT_FILE
  332. X      point correct location of kehpager.init
  333. X      Also select correct compiler (gcc, or SUN's acc)
  334. X      to Makefile.'s define.
  335. X    Compile it with
  336. X        make sunos5
  337. X    Copy kehpager and kehpager.1 to correct directories
  338. XHP-UX:
  339. X    Set correct value for use.keyboard.language -field in
  340. X        kehpager.int (you can also comment it out if your
  341. X        terminals is intelligent enough). You probably also
  342. X     want add
  343. X       use.vt100.national_available: Enabled
  344. X     to kehpager.init.hpux (this was default prior version 1.06).
  345. X    Copy kehpager.init.hpux to library direction
  346. X    Edit Makefile.hpux and put defination of GLOBAL_INIT_FILE
  347. X      point correct location of kehpager.init.hpux
  348. X      Also select correct compiler (gcc, or HP's cc (ANSI C version))
  349. X      to Makefile.hpux's define.
  350. X    Compile it with
  351. X        make -f Makefile.hpux
  352. X    Copy kehpager and kehpager.1 to correct directories
  353. X386BSD, FreeBSD, NetBSD: (I haven't tested this!)
  354. X    Set correct value for use.keyboard.language -field in
  355. X        kehpager.init (you can also comment it out if your
  356. X        terminals is intelligent enough). You probably also
  357. X     want add
  358. X       use.vt100.national_available: Enabled
  359. X     to kehpager.init (this was default prior version 1.06).
  360. X    Copy kehpager.init to library direction
  361. X    Edit Makefile and put defination of GLOBAL_INIT_FILE
  362. X      point correct location of kehpager.init
  363. X    Compile it with
  364. X        make -f Makefile.bsd
  365. X    Copy kehpager and kehpager.1 to correct directories
  366. XIRIX 4:
  367. X    (I get ENOTDEV error when closing terminal, so there is still
  368. X     some problems...)
  369. X    Set correct value for use.keyboard.language -field in
  370. X        kehpager.init (you can also comment it out if your
  371. X        terminals is intelligent enough). You probably also
  372. X     want add
  373. X       use.vt100.national_available: Enabled
  374. X     to kehpager.init (this was default prior version 1.06).
  375. X    Copy kehpager.init to library direction
  376. X    Edit Makefile and put defination of GLOBAL_INIT_FILE
  377. X      point correct location of kehpager.init
  378. X    Compile it with
  379. X        make -f Makefile.irix
  380. X    Copy kehpager and kehpager.1 to correct directories. If you don't
  381. X        hace troff or groff, ask someone to compile kehpager.1
  382. X
  383. X
  384. XTested platforms:
  385. X    Kehpager works on SunOS 4.1.2 (OS/MP 4.1B), 4.1.3, 5.2, 5.3, 
  386. X    HP-UX A.09.01, IRIX 4.0.5 (at least some way).
  387. X
  388. XCompiler:
  389. X    Kehpager is compiled with gcc in SunOS 4.1.2, 5.2, 5.3
  390. X    In HP-UX it is compiled with cc (ANSI C version).
  391. X        (notice that ANSI C version of cc isn't bundled with HP-UX)
  392. X    In SunOS 4.1.3 it is compiled with acc.
  393. X    In IRIX 4.0.5 it is compiled with cc (in -xansi mode).
  394. X    Kehpager compiles without error or warning messages 
  395. X        (with gcc's -Wall in SunOs 5.2. Also HP's cc
  396. X         don't give any warnigs even that it is more strict than
  397. X         gcc).
  398. X
  399. XChanges to version 1.1:
  400. X    Terminal output is buffered
  401. X    New options: -sp, -sp+, -j, -j+, -st, -st+, -rt, -tn, -in,
  402. X        -erc, -pm, -pm+, --, -rs, -rs+, -IT, -MN, -MN:n, 
  403. X        -U7, -U8
  404. X    Option processing is disabable now ('option' --)
  405. X     Composed input for HORN, RING BELOW, LINE BELOW and CIRCUMFLEX BELOW
  406. X    Initfile fields: keyboard.toggle_eatspc, input.eat_spaces,
  407. X        input.full_justify, keyboard.toggle_time, input.tab_step,
  408. X        input.indent_step, keyboard.toggle_pagemode, input.pagemode,
  409. X        keyboard.tab_step,keyboard.tab_step.self_insert,
  410. X        keyboard.tab_step.enter, keyboard.indent_step,
  411. X        keyboard.indent_step.self_insert, keyboard.indent_step.enter, 
  412. X        env.size, exit.newline, use.query_size
  413. X    charsets: Italian, Mnemonics encoding, 
  414. X        more characters from MS-DOS CP437, 
  415. X            Unicode 1.1 with UTF-7 and UTF-8 encodings. 
  416. X            (No support for Unicode decomposition/composition)
  417. X    Handling of pagebreaks (FF, richtext's <np>)
  418. X    Text/Enriched is better
  419. X    Screen updating is better in some situtations 
  420. X        (specially SEARCH: -prompt works nicer)
  421. X        Updated Text/Enriched according RFC1563 (previous version
  422. X                  of enriched specification was RFC1523):
  423. X                  - Added FlushBoth environment
  424. X                  - Now Text/Enriched allows initial state justification 
  425. X                    to be any of FlushLeft, FlushRight or FlushBoth (in 
  426. X                    RFC1523 it was FlushBoth ie. fully justified). 
  427. X                  > Because kehpager heve difficulties with fully justified
  428. X                    text (kehpager may print justified text twise), I changed
  429. X                    default state to be FlushLeft. That is: default value
  430. X                    of input.full_justify is now false.
  431. X    Content-type: text/richtext 
  432. X    Compiles with Sun's acc (on SunOS 4) and IRIX's cc
  433. X    Many bug fixes
  434. X    Support for rc -shell, now $SHELL is matched agaist to table
  435. X        Added some changes posted by 
  436. X            J÷rg Wunsch <joerg_wunsch@tcd-dresden.de> so this propably
  437. X            compiles on 386BSD, FreeBSD and NetBSD
  438. X        $LINES overdrives use.terminal.lines and $COLUMNS overdrives
  439. X                 use.terminal.columns (if env.size is set)
  440. X     I marked VT500 as unsupported, because I don't have seen manuals yet.
  441. X        Now kehpager asks terminal size from terminal itself (as
  442. X                  'resize' does it). Disable with -rs or 
  443. X                  use.query_size: Disabled
  444. X        Now esc.c don't eat nulls and binding to Ctrl-space 
  445. X        (ie. NUL) is possible
  446. X
  447. XChanges to version 1.14:
  448. X                Avoid unnecessary redrawing of window when remapped by setting
  449. X                  windows priority temporary to zero (so now SEARCH: -prompt
  450. X                  works little nicer)
  451. X                Support for Unicode 1.1 with UTF-7 and UTF-8 encodings. 
  452. X                  Only small part of Unicode is supported. No support for
  453. X                  Unicode decomposition/composition.
  454. X                Options: -U7, -U8
  455. X                MAP_RFC134 replaced with MAP_UNICODE11
  456. X                MAP_UTF7, MAP_UTF8
  457. X                Now internal characters are type CHAR_IDX
  458. X                Latin/3 213 fixed
  459. X                  from LATIN CAPITAL LETTER O WITH DOT ABOVE
  460. X                  to LATIN CAPITAL LETTER G WITH DOT ABOVE
  461. X                Latin/4 241 fixed
  462. X                  from LATIN SMALL LETTER N WITH OGONEK
  463. X                  to LATIN SMALL LETTER N WITH CEDILLA
  464. X                Latin/4 209 fixed
  465. X                  from LATIN CAPITAL LETTER N WITH OGONEK
  466. X                  to LATIN CAPITAL LETTER N WITH CEDILLA
  467. X
  468. XThanks to: 
  469. X    Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
  470. X    Tim Lasko <lasko@regent.enet.dec.com>
  471. X    David E A Wilson <david@cs.uow.edu.au>
  472. X    J÷rg Wunsch <joerg_wunsch@tcd-dresden.de>
  473. SHAR_EOF
  474. chmod 0644 README || echo "restore of README fails"
  475. echo "x - extracting VERSION (Text)"
  476. sed 's/^X//' << 'SHAR_EOF' > VERSION &&
  477. Xkehpager V1.2
  478. SHAR_EOF
  479. chmod 0644 VERSION || echo "restore of VERSION fails"
  480. echo "x - extracting charset.c (Text)"
  481. sed 's/^X//' << 'SHAR_EOF' > charset.c &&
  482. X/*  file: charset.c
  483. X *
  484. X *  kehpager, Charset aware pager, Kari E. Hurtta
  485. X *
  486. X *  Copyright (c) 1993, 1994 Kari E. Hurtta
  487. X *
  488. X *  Redistribution and use in source and binary forms are permitted
  489. X *  provided that the above copyright notice and this paragraph are
  490. X *  duplicated in all such forms. This software is provided 'as is'
  491. X *  and without any warranty. 
  492. X */
  493. X
  494. X#include <string.h>
  495. X#include <limits.h>
  496. X#include <ctype.h>
  497. X#include <stdio.h>
  498. X
  499. X#include "kehpager.h"
  500. X#include "memory.h"
  501. X
  502. X#include "charset.h"
  503. X#include "rc.h"
  504. X#include "terminal.h"
  505. X#include "control.h"
  506. X
  507. XCHAR_IDX CH_WRA;
  508. XCHAR_IDX CH_NL;
  509. XCHAR_IDX CH_SUB_M;
  510. XCHAR_IDX CH_SUP_M;
  511. XCHAR_IDX CH_END_M;
  512. XCHAR_IDX CH_SPC_C;
  513. XCHAR_IDX CH_IND_B;
  514. XCHAR_IDX CH_IND_E;
  515. XCHAR_IDX CH_MAR_B;
  516. XCHAR_IDX CH_MAR_E;
  517. XCHAR_IDX CH_NP;
  518. XCHAR_IDX CH_OVER;
  519. X
  520. XCHAR_IDX CH_SPC;
  521. XCHAR_IDX CH_TAB;
  522. XCHAR_IDX CH_SHY;
  523. XCHAR_IDX CH_SHY2;
  524. XCHAR_IDX CH_NBSP;
  525. XCHAR_IDX CH_HY;
  526. XCHAR_IDX CH_NBHY;
  527. XCHAR_IDX CH_HY2;
  528. XCHAR_IDX CH_UL;
  529. XCHAR_IDX CH_GT;
  530. XCHAR_IDX CH_LT;
  531. XCHAR_IDX CH_ZERO;
  532. XCHAR_IDX CH_FF;
  533. XCHAR_IDX CH_PLUS;
  534. XCHAR_IDX CH_LSEP;
  535. XCHAR_IDX CH_PSEP;
  536. X
  537. Xstruct CV chars [] = {
  538. X  /*              ASCII,   LATIN1,   MULT, SPECIAL, FINNISH 
  539. X                     UK    NORWEGIAN,  SWEDISH, LATIN4,  LATIN5,
  540. X             ISO-8859-*,LATIN2, BELGIAN, GERMAN, CAN,
  541. X             LATIN3,  CP437, TECHNICAL, SPANISH, MAC,
  542. X             ITAL, Unicode 1.1 */
  543. X  /* Mnemonics */
  544. X  { "[NUL]", {0,0}, 0, NULL, 
  545. X      {               0,        0,      0,        0,       0,
  546. X              0,        0,      0,        0,       0,
  547. X              0,        0,      0,        0,       0,
  548. X                  0,        0,      0,        0,       0,
  549. X              0,        0 },
  550. X      {  NULL, NULL } },
  551. X
  552. X  { "\\",    {0,0}, 0, &CH_WRA,
  553. X      {              -1,       -1,     -1,       -1,      -1,
  554. X             -1,       -1,     -1,       -1,      -1,
  555. X             -1,       -1,     -1,       -1,      -1,
  556. X             -1,       -1,     -1,       -1,      -1,
  557. X             -1,       -1 },
  558. X      {  NULL, NULL } },  
  559. X  { "[NL]",  {0,0}, 0, &CH_NL,
  560. X      {                -1,       -1,     -1,     -1,      -1,
  561. X               -1,       -1,     -1,     -1,      -1,
  562. X               -1,       -1,     -1,     -1,      -1,
  563. X                   -1,       -1,     -1,     -1,    -1,
  564. X               -1,       -1 },
  565. X      {  NULL, NULL } },  
  566. X  { "_(",  {0,0}, 0, &CH_SUB_M,
  567. X      {                -1,       -1,     -1,     -1,      -1,
  568. X               -1,       -1,     -1,     -1,      -1,
  569. X               -1,       -1,     -1,     -1,      -1,
  570. X                   -1,       -1,     -1,     -1,      -1,
  571. X               -1,       -1 },
  572. X      {  NULL, NULL } },
  573. X  { "^(",  {0,0}, 0, &CH_SUP_M,
  574. X      {                -1,       -1,     -1,     -1,      -1,
  575. X               -1,       -1,     -1,     -1,      -1,
  576. X               -1,       -1,     -1,     -1,      -1,
  577. X                   -1,       -1,     -1,     -1,    -1,
  578. X               -1,       -1 },
  579. X      {  NULL, NULL } }, 
  580. X  { ")",  {0,0}, 0, &CH_END_M,
  581. X      {                -1,       -1,     -1,     -1,      -1,
  582. X               -1,       -1,     -1,     -1,      -1,
  583. X               -1,       -1,     -1,     -1,      -1,
  584. X                   -1,       -1,     -1,     -1,    -1,
  585. X               -1,       -1 },
  586. X      {  NULL, NULL } },
  587. X  { " ",  {0,0}, 0, &CH_SPC_C,
  588. X      {                -1,       -1,     -1,     -1,      -1,
  589. X               -1,       -1,     -1,     -1,      -1,
  590. X               -1,       -1,     -1,     -1,      -1,
  591. X                   -1,       -1,     -1,     -1,    -1,
  592. X               -1,       -1 },
  593. X      {  NULL, NULL } },
  594. X  { " ",  {0,0}, 0, &CH_IND_B,
  595. X      {                -1,       -1,     -1,     -1,      -1,
  596. X               -1,       -1,     -1,     -1,      -1,
  597. X               -1,       -1,     -1,     -1,      -1,
  598. X                   -1,       -1,     -1,     -1,    -1,
  599. X               -1,       -1 },
  600. X      {  NULL, NULL } }, 
  601. X  { " ",  {0,0}, 0, &CH_IND_E,
  602. X      {                -1,       -1,     -1,     -1,      -1,
  603. X               -1,       -1,     -1,     -1,      -1,
  604. X               -1,       -1,     -1,     -1,      -1,
  605. X                   -1,       -1,     -1,     -1,    -1,
  606. X               -1,       -1 },
  607. X      {  NULL, NULL } }, 
  608. X  { " ",  {0,0}, 0, &CH_MAR_B,
  609. X      {                -1,       -1,     -1,     -1,      -1,
  610. X               -1,       -1,     -1,     -1,      -1,
  611. X               -1,       -1,     -1,     -1,      -1,
  612. X                   -1,       -1,     -1,     -1,    -1,
  613. X               -1,       -1 },
  614. X      {  NULL, NULL } }, 
  615. X  { " ",  {0,0}, 0, &CH_MAR_E,
  616. X      {                -1,       -1,     -1,     -1,      -1,
  617. X               -1,       -1,     -1,     -1,      -1,
  618. X               -1,       -1,     -1,     -1,      -1,
  619. X                   -1,       -1,     -1,     -1,    -1,
  620. X               -1,       -1 },
  621. X      {  NULL, NULL } }, 
  622. X  { "[NP]",  {0,0}, 0, &CH_NP,
  623. X      {                -1,       -1,     -1,     -1,      -1,
  624. X               -1,       -1,     -1,     -1,      -1,
  625. X               -1,       -1,     -1,     -1,      -1,
  626. X                   -1,       -1,     -1,     -1,    -1,
  627. X               -1,       -1 },
  628. X      {  NULL, NULL } },
  629. X  { "[*OVER*]",  {0,0}, 0, &CH_OVER,
  630. X      {                -1,       -1,     -1,     -1,      -1,
  631. X               -1,       -1,     -1,     -1,      -1,
  632. X               -1,       -1,     -1,     -1,      -1,
  633. X                   -1,       -1,     -1,     -1,    -1,
  634. X               -1,       -1 },
  635. X      {  NULL, NULL } },
  636. X
  637. X  /* Control characters */
  638. X  { "[BEL]", {0,0}, 0, NULL,
  639. X      {               7,        7,      7,       7,       7,
  640. X              7,        7,      7,       7,       7,
  641. X                      7,        7,      7,       7,       7,
  642. X                         7,        7,      7,       7,       7,
  643. X            7,        7 },
  644. X      { NULL, NULL } },
  645. X  { "[BS]",  {0,0}, 0, NULL,
  646. X      {               8,        8,      8,       8,       8,
  647. X                      8,        8,      8,       8,       8,
  648. X                      8,        8,      8,       8,       8,
  649. X                         8,        8,      8,       8,       8,
  650. X            8,        8 },
  651. X      { NULL, NULL } },
  652. X  { "[HT]",  {0,0}, 0, &CH_TAB,
  653. X      {               9,        9,      9,       9,       9,
  654. X                      9,        9,      9,       9,       9,
  655. X                      9,        9,      9,       9,       9,
  656. X                      9,        9,      9,       9,       9,
  657. X            9,        9 },
  658. X      { NULL, NULL } },
  659. X  { "[LF]",  {0,0}, 0, NULL,
  660. X      {              10,       10,     10,      10,      10,
  661. X                     10,       10,     10,      10,      10,
  662. X                     10,       10,     10,      10,      10 ,
  663. X                     10,       10,     10 ,     10,      10,
  664. X           10,        10 },
  665. X      { NULL, NULL } },
  666. X  { "[VT]",  {0,0}, 0, NULL,
  667. X      {              11,       11,     11,      11,      11,
  668. X             11,       11,     11,      11,      11,
  669. X                     11,       11,     11,      11,      11 ,
  670. X                     11,       11,     11,      11,     11,
  671. X           11,        11 },
  672. X      { NULL, NULL } },
  673. X  { "[FF]",  {0,0}, 0, &CH_FF,
  674. X      {              12,       12,     12,      12,      12,
  675. X             12,       12,     12,      12,      12,
  676. X                     12,       12,     12,      12,      12 ,
  677. X                     12,       12,     12,     12,    12,
  678. X           12,        12 },
  679. X      { NULL, NULL } },
  680. X  { "[CR]",  {0,0}, 0, NULL,
  681. X      {              13,       13,     13,      13,      13,
  682. X             13,       13,     13,      13,      13,
  683. X                     13,       13,     13,      13,      13 ,
  684. X                     13,       13,     13,     13,    13,
  685. X           13,        13 },
  686. X      { NULL, NULL } },
  687. X  { "[ESC]",  {0,0}, 0, NULL,
  688. X      {              27,       27,     27,      27,      27,
  689. X             27,       27,     27,      27,      27,
  690. X                     27,       27,     27,      27,      27 ,
  691. X                     27,       27,     27,     27,    27,
  692. X           27,        27 },
  693. X      { NULL, NULL } },
  694. X
  695. X  { "[DEL]", {0,0}, 0, NULL,
  696. X      {            0x7F,     0x7F,   0x7F,   0x7F,     0x7F,
  697. X           0x7F,     0x7F,   0x7F,   0x7F,     0x7F,
  698. X                   0x7F,     0x7F,   0x7F,   0x7F,     0x7F,
  699. X                   0x7F,     0x7F,   0x7F,   0x7F,     0x7F,
  700. X         0x7F,        0x7F },
  701. X      { NULL, NULL } },
  702. X
  703. X  /* printable characters */
  704. X  { " ",  {0,0},  1, &CH_SPC,
  705. X      {          0x20,     0x20,   0x20,    0x20,    0x20,
  706. X         0x20,     0x20,   0x20,    0x20,    0x20,
  707. X                 0x20,     0x20,   0x20,    0x20,    0x20,
  708. X                 0x20,     0x20,   0x20,    0x20,    0x20,
  709. X             0x20,   0x0020 },
  710. X      { "SP", "SPACE" } },
  711. X  { "!",  {0,0},  1, NULL,
  712. X      {          0x21,     0x21,   0x21,    0x21,    0x21,
  713. X         0x21,     0x21,   0x21,    0x21,    0x21,
  714. X                 0x21,     0x21,   0x21,    0x21,    0x21,
  715. X                 0x21,     0x21,     -1,    0x21,    0x21,
  716. X             0x21,   0x0021 },
  717. X      { "!", "EXCLAMATION MARK" } },
  718. X  { "\"",  {0,0}, 1, NULL,
  719. X      {          0x22,     0x22,   0x22,    0x22,    0x22,
  720. X         0x22,     0x22,   0x22,    0x22,    0x22,
  721. X                 0x22,     0x22,   0x22,    0x22,    0x22,
  722. X                 0x22,     0x22,   -1  ,    0x22,    0x22,
  723. X             0x22,   0x0022 },
  724. X       { "\"", "QUOTATION MARK" } },
  725. X  { "#",  {'+','+'},  1, NULL,
  726. X      {          0x23,     0x23,   0x23,    0x23,    0x23,
  727. X           -1,     0x23,   0x23,    0x23,    0x23,
  728. X                 0x23,     0x23,     -1,    0x23,    0x23,
  729. X                 0x23,     0x23,   -1,        -1,    0x23,
  730. X               -1,   0x0023 },
  731. X      { "Nb", "NUMBER SIGN" } }, /* NAT 1 */
  732. X  { "$",  {'S','S'},  1, NULL,
  733. X      {          0x24,     0x24,   0x24,    0x24,    0x24, 
  734. X         0x24,     0x24,   0x24,    0x24,    0x24,
  735. X                 0x24,     0x24,   0x24,    0x24,    0x24,
  736. X                 0x24,     0x24,     -1,    0x24,   0x24,
  737. X             0x24,   0x0024 },
  738. X       { "DO", "DOLLAR SIGN" } }, /* NAT 2 */
  739. X  { "%",  {0,0},  1, NULL,
  740. X      {          0x25,     0x25,   0x25,    0x25,    0x25,
  741. X         0x25,     0x25,   0x25,    0x25,    0x25,
  742. X                 0x25,     0x25,   0x25,    0x25,    0x25,
  743. X                 0x25,     0x25,     -1,    0x25,   0x25,
  744. X             0x25,   0x0025 },
  745. X       { "%", "PERCENT SIGN" } },
  746. X  { "&",  {0,0},  1, NULL,
  747. X      {          0x26,     0x26,   0x26,    0x26,    0x26,
  748. X         0x26,     0x26,   0x26,    0x26,    0x26,
  749. X                 0x26,     0x26,   0x26,    0x26,    0x26,
  750. X                 0x26,     0x26,     -1,    0x26,   0x26,
  751. X             0x26,   0x0026 },
  752. X       { "&", "AMPERSAND" } },
  753. X  /* APOSTROPHE 
  754. X     APOSTROPHE-QUOTE */
  755. X  { "'",  {0,0},  1, NULL,
  756. X      {          0x27,     0x27,   0x27,    0x27,    0x27,
  757. X         0x27,     0x27,   0x27,    0x27,    0x27,
  758. X                 0x27,     0x27,   0x27,    0x27,    0x27,
  759. X                 0x27,     0x27,     -1,    0x27,   0x27,
  760. X             0x27,   0x0027 },
  761. X      { "'", "APOSTROPHE" } },
  762. X  /* LEFT PARENTHESIS
  763. X     OPENING PARENTHESIS */
  764. X  { "(",  {0,0}, 1, NULL,
  765. X      {          0x28,     0x28,   0x28,    0x28,    0x28,
  766. X         0x28,     0x28,   0x28,    0x28,    0x28,
  767. X                 0x28,     0x28,   0x28,    0x28,    0x28,
  768. X                 0x28,     0x28,     -1,    0x28,   0x28,
  769. X             0x28,   0x0028 },
  770. X      { "(", "LEFT PARENTHESIS" } },
  771. X  /* RIGHT PARENTHESIS
  772. X     CLOSING PARENTHESIS */
  773. X  { ")",  {0,0}, 1, NULL,
  774. X      {          0x29,     0x29,   0x29,    0x29,    0x29,
  775. X         0x29,     0x29,   0x29,    0x29,    0x29,
  776. X                 0x29,     0x29,   0x29,    0x29,    0x29,
  777. X                 0x29,     0x29,     -1,    0x29,    0x29,
  778. X             0x29,   0x0029 },
  779. X      { ")", "RIGHT PARENTHESIS" } },
  780. X  { "*",  {0,0}, 1, NULL,
  781. X      {          0x2A,     0x2A,   0x2A,    0x2A,    0x2A,
  782. X         0x2A,     0x2A,   0x2A,    0x2A,    0x2A,
  783. X                 0x2A,     0x2A,   0x2A,    0x2A,    0x2A,
  784. X                 0x2A,     0x2A,     -1,    0x2A,    0x2A,
  785. X             0x2A,   0x002a },
  786. X      { "*", "ASTERISK" } },
  787. X  { "+",  {0,0}, 1, &CH_PLUS,
  788. X      {          0x2B,     0x2B,   0x2B,    0x2B,    0x2B,
  789. X         0x2B,     0x2B,   0x2B,    0x2B,    0x2B,
  790. X                 0x2B,     0x2B,   0x2B,    0x2B,    0x2B,
  791. X                 0x2B,     0x2B,     -1,    0x2B,   0x2B,
  792. X             0x2B,   0x002b },  
  793. X      { "+", "PLUS SIGN" } },
  794. X  { ",",  {0,0}, 1, NULL,
  795. X      {          0x2C,     0x2C,   0x2C,    0x2C,    0x2C,
  796. X         0x2C,     0x2C,   0x2C,    0x2C,    0x2C,
  797. X                 0x2C,     0x2C,   0x2C,    0x2C,    0x2C,
  798. X                 0x2C,     0x2C,     -1,    0x2C,   0x2C,
  799. X             0x2C,   0x002c },
  800. X      { ",", "COMMA" } },
  801. X  { "-",  {0,0}, 1, &CH_HY,
  802. X      {          0x2D,     0x2D,   0x2D,    0x2D,    0x2D,
  803. X         0x2D,     0x2D,   0x2D,    0x2D,    0x2D,
  804. X                 0x2D,     0x2D,   0x2D,    0x2D,    0x2D,
  805. X                 0x2D,     0x2D,     -1,    0x2D,   0x2D,
  806. X             0x2D,   0x002d },
  807. X      { "-", "HYPHEN-MINUS" } },
  808. X  /* FULL STOP
  809. X     PERIOD */
  810. X  { ".",  {0,0}, 1, NULL,
  811. X      {          0x2E,     0x2E,   0x2E,    0x2E,    0x2E,
  812. X         0x2E,     0x2E,   0x2E,    0x2E,    0x2E,
  813. X                 0x2E,     0x2E,   0x2E,    0x2E,    0x2E,
  814. X                 0x2E,     0x2E,     -1,    0x2E,   0x2E,
  815. X             0x2E,   0x002e },
  816. X      { ".", "FULL STOP" } },
  817. X  /* SOLIDUS
  818. X     SLASH */
  819. X  { "/",  {0,0}, 1, NULL,
  820. X      {          0x2F,     0x2F,   0x2F,    0x2F,    0x2F,
  821. X         0x2F,     0x2F,   0x2F,    0x2F,    0x2F,
  822. X                 0x2F,     0x2F,   0x2F,    0x2F,    0x2F,
  823. X                 0x2F,     0x2F,     -1,    0x2F,   0x2F,
  824. X             0x2F,   0x002f },
  825. X      { "/", "SOLIDUS" } },
  826. X
  827. X  { "0",  {0,0}, 1, &CH_ZERO,
  828. X      {          0x30,     0x30,   0x30,    0x30,    0x30,
  829. X         0x30,     0x30,   0x30,    0x30,    0x30,
  830. X                 0x30,     0x30,   0x30,    0x30,    0x30,
  831. X                 0x30,     0x30,     -1,    0x30,   0x30,
  832. X             0x30,   0x0030 },
  833. X      { "0", "DIGIT ZERO" } },
  834. X  { "1",  {0,0}, 1, NULL,
  835. X      {          0x31,     0x31,   0x31,    0x31,    0x31,
  836. X         0x31,     0x31,   0x31,    0x31,    0x31,
  837. X                 0x31,     0x31,   0x31,    0x31,    0x31,
  838. X                 0x31,     0x31,     -1,    0x31,   0x31,
  839. X             0x31,   0x0031 },
  840. X      { "1", "DIGIT ONE" } },
  841. X  { "2",  {0,0}, 1, NULL,
  842. X      {          0x32,     0x32,   0x32,    0x32,    0x32,
  843. X         0x32,     0x32,   0x32,    0x32,    0x32,
  844. X                 0x32,     0x32,   0x32,    0x32,    0x32,
  845. X                 0x32,     0x32,     -1,    0x32,   0x32,
  846. X             0x32,   0x0032 },
  847. X      { "2", "DIGIT TWO" } },
  848. X  { "3",  {0,0}, 1, NULL,
  849. X      {          0x33,     0x33,   0x33,    0x33,    0x33,
  850. X         0x33,     0x33,   0x33,    0x33,    0x33,
  851. X                 0x33,     0x33,   0x33,    0x33,    0x33,
  852. X                 0x33,     0x33,     -1,    0x33,   0x33,
  853. X             0x33,   0x0033 },
  854. X      { "3", "DIGIT THREE" } },
  855. X  { "4",  {0,0}, 1, NULL,
  856. X      {          0x34,     0x34,   0x34,    0x34,    0x34,
  857. X         0x34,     0x34,   0x34,    0x34,    0x34,
  858. X                 0x34,     0x34,   0x34,    0x34,    0x34,
  859. X                 0x34,     0x34,     -1,    0x34,   0x34,
  860. X             0x34,   0x0034 },
  861. X      { "4", "DIGIT FOUR" } },
  862. X  { "5",  {0,0}, 1, NULL,
  863. X      {          0x35,     0x35,   0x35,    0x35,    0x35,
  864. X         0x35,     0x35,   0x35,    0x35,    0x35,
  865. X                 0x35,     0x35,   0x35,    0x35,    0x35,
  866. X                 0x35,     0x35,     -1,    0x35,   0x35,
  867. X             0x35,   0x0035 },
  868. X      { "5", "DIGIT FIVE" } },
  869. X  { "6",  {0,0}, 1, NULL,
  870. X      {          0x36,     0x36,   0x36,    0x36,    0x36,
  871. X         0x36,     0x36,   0x36,    0x36,    0x36,
  872. X                 0x36,     0x36,   0x36,    0x36,    0x36,
  873. X                 0x36,     0x36,     -1,    0x36,   0x36,
  874. X             0x36,   0x0036 },
  875. X      { "6", "DIGIT SIX" } },
  876. X  { "7",  {0,0}, 1, NULL,
  877. X      {          0x37,     0x37,   0x37,    0x37,    0x37,
  878. X         0x37,     0x37,   0x37,    0x37,    0x37,
  879. X                 0x37,     0x37,   0x37,    0x37,    0x37,
  880. X                 0x37,     0x37,     -1,    0x37,   0x37,
  881. X             0x37,   0x0037 },
  882. X      { "7", "DIGIT SEVEN" } },
  883. X  { "8",  {0,0}, 1, NULL,
  884. X      {          0x38,     0x38,   0x38,    0x38,    0x38,
  885. X         0x38,     0x38,   0x38,    0x38,    0x38,
  886. X                 0x38,     0x38,   0x38,    0x38,    0x38,
  887. X                 0x38,     0x38,     -1,    0x38,   0x38,
  888. X             0x38,   0x0038 },
  889. X      { "8", "DIGIT EIGHT" } },
  890. X  { "9",  {0,0}, 1, NULL,
  891. X      {          0x39,     0x39,   0x39,    0x39,    0x39,
  892. X         0x39,     0x39,   0x39,    0x39,    0x39,
  893. X                 0x39,     0x39,   0x39,    0x39,    0x39,
  894. X                 0x39,     0x39,     -1,    0x39,   0x39,
  895. X             0x39,   0x0039 },
  896. X      { "9", "DIGIT NINE" } },
  897. X  { ":",  {0,0}, 1, NULL,
  898. X      {          0x3A,     0x3A,   0x3A,    0x3A,    0x3A,
  899. X         0x3A,     0x3A,   0x3A,    0x3A,    0x3A,
  900. X                 0x3A,     0x3A,   0x3A,    0x3A,    0x3A,
  901. X                 0x3A,     0x3A,     -1,    0x3A,   0x3A,
  902. X             0x3A,   0x003a },
  903. X      { ":", "COLON" } },
  904. X
  905. X  { ";",  {0,0}, 1, NULL,
  906. X      {          0x3B,     0x3B,   0x3B,    0x3B,    0x3B,
  907. X         0x3B,     0x3B,   0x3B,    0x3B,    0x3B,
  908. X                 0x3B,     0x3B,   0x3B,    0x3B,    0x3B,
  909. X                 0x3B,     0x3B,     -1,    0x3B,   0x3B,
  910. X             0x3B,   0x003b },
  911. X      { ";", "SEMICOLON" } },
  912. X  { "<",  {0,0}, 1, &CH_LT,
  913. X      {          0x3C,     0x3C,   0x3C,    0x3C,    0x3C,
  914. X         0x3C,     0x3C,   0x3C,    0x3C,    0x3C,
  915. X                 0x3C,     0x3C,   0x3C,    0x3C,    0x3C,
  916. X                 0x3C,     0x3C,     -1,    0x3C,   0x3C,
  917. X             0x3C,   0x003c },
  918. X      { "<", "LESS-THAN SIGN" } },
  919. X  { "=",  {0,0}, 1, NULL,
  920. X      {          0x3D,     0x3D,   0x3D,    0x3D,    0x3D,
  921. X         0x3D,     0x3D,   0x3D,    0x3D,    0x3D,
  922. X                 0x3D,     0x3D,   0x3D,    0x3D,    0x3D,
  923. X                 0x3D,     0x3D,   0x3D,    0x3D,   0x3D,
  924. X             0x3D,   0x003d },
  925. X      { "=", "EQUALS SIGN" } },
  926. X  { ">",  {0,0}, 1, &CH_GT,
  927. X      {          0x3E,     0x3E,   0x3E,    0x3E,    0x3E,
  928. X         0x3E,     0x3E,   0x3E,    0x3E,    0x3E,
  929. X                 0x3E,     0x3E,   0x3E,    0x3E,    0x3E,
  930. X                 0x3E,     0x3E,   -1,      0x3E,     0x3E,
  931. X             0x3E,   0x003e },
  932. X      { ">", "GREATER-THAN SIGN" } },
  933. X  { "?",  {0,0}, 1, NULL,
  934. X      {          0x3F,     0x3F,   0x3F,    0x3F,    0x3F,
  935. X         0x3F,     0x3F,   0x3F,    0x3F,    0x3F,
  936. X                 0x3F,     0x3F,   0x3F,    0x3F,    0x3F,
  937. X                 0x3F,     0x3F,     -1,    0x3F,   0x3F,
  938. X             0x3F,   0x003f },
  939. X      { "?", "QUESTION MARK" } },
  940. X
  941. X  /*             ASCII,   LATIN1,   MULT, SPECIAL, FINNISH 
  942. X                 UK    NORWEGIAN,  SWEDISH, LATIN4, LATIN5
  943. X                 ISO-8859-* LATIN2, BELGIAN, GERMAN, CANADIAN,
  944. X                 LATIN3,   CP437,                    MAC,
  945. X         ITAL,    UNICODE */
  946. X  { "AT",  {'A','A'},1, NULL,
  947. X      {          0x40,     0x40,   0x40,    0x40,    0x40 | FC_uncertain,
  948. X         0x40,     0x40,   0x40,    0x40,    0x40,
  949. X                 0x40,     0x40,     -1,      -1,      -1,
  950. X             0x40,     0x40,     -1,      -1,    0x40,
  951. X               -1,   0x0040 },
  952. X      { "At", "COMMERCIAL AT" } }, /* NAT 3 */
  953. X  { "A",  {0,0}, 1, NULL,
  954. X      {          0x41,     0x41,   0x41,    0x41,    0x41,
  955. X         0x41,     0x41,   0x41,    0x41,    0x41,
  956. X                 0x41,     0x41,   0x41,    0x41,    0x41,
  957. X                 0x41,     0x41,     -1,    0x41,    0x41,
  958. X             0x41,   0x0041 },
  959. X      { "A", "LATIN CAPITAL LETTER A" } },
  960. X  { "B",  {0,0}, 1, NULL,
  961. X      {          0x42,     0x42,   0x42,    0x42,    0x42,
  962. X         0x42,     0x42,   0x42,    0x42,    0x42,
  963. X                 0x42,     0x42,   0x42,    0x42,    0x42,
  964. X                 0x42,     0x42,     -1,    0x42,    0x42,
  965. X             0x42,   0x0042 },
  966. X      { "B", "LATIN CAPITAL LETTER B" } },
  967. X  { "C",  {0,0}, 1, NULL,
  968. X      {          0x43,     0x43,   0x43,    0x43,    0x43,
  969. X         0x43,     0x43,   0x43,    0x43,    0x43,
  970. X                 0x43,     0x43,   0x43,    0x43,    0x43,
  971. X                 0x43,     0x43,     -1,    0x43,    0x43,
  972. X             0x43,   0x0043 },
  973. X      { "C", "LATIN CAPITAL LETTER C" } },
  974. X  { "D",  {0,0}, 1, NULL,
  975. X      {          0x44,     0x44,   0x44,    0x44,    0x44,
  976. X         0x44,     0x44,   0x44,    0x44,    0x44,
  977. X                 0x44,     0x44,   0x44,    0x44,    0x44,
  978. X                 0x44,     0x44,     -1,    0x44,    0x44,
  979. X             0x44,   0x0044 },
  980. X      { "D", "LATIN CAPITAL LETTER D" } },
  981. X  { "E",  {0,0}, 1, NULL,
  982. X      {          0x45,     0x45,   0x45,    0x45,    0x45,
  983. X         0x45,     0x45,   0x45,    0x45,    0x45,
  984. X                 0x45,     0x45,   0x45,    0x45,    0x45,
  985. X                 0x45,     0x45,     -1,    0x45,    0x45,
  986. X             0x45,   0x0045 },
  987. X      { "E", "LATIN CAPITAL LETTER E" } },
  988. X  { "F",  {0,0}, 1, NULL,
  989. X      {          0x46,     0x46,   0x46,    0x46,    0x46,
  990. X         0x46,     0x46,   0x46,    0x46,    0x46,
  991. X                 0x46,     0x46,   0x46,    0x46,    0x46,
  992. X                 0x46,     0x46,     -1,    0x46,    0x46,
  993. X             0x46,   0x0046 },
  994. X      { "F", "LATIN CAPITAL LETTER F" } },
  995. X  { "G",  {0,0}, 1, NULL,
  996. X      {          0x47,     0x47,   0x47,    0x47,    0x47,
  997. X         0x47,     0x47,   0x47,    0x47,    0x47,
  998. X                 0x47,     0x47,   0x47,    0x47,    0x47,
  999. X                 0x47,     0x47,     -1,    0x47,    0x47,
  1000. X             0x47,   0x0047 },
  1001. X      { "G", "LATIN CAPITAL LETTER G" } },
  1002. X  { "H",  {0,0}, 1, NULL,
  1003. X      {          0x48,     0x48,   0x48,    0x48,    0x48,
  1004. X         0x48,     0x48,   0x48,    0x48,    0x48,
  1005. X                 0x48,     0x48,   0x48,    0x48,    0x48,
  1006. X                 0x48,     0x48,     -1,    0x48,   0x48,
  1007. X             0x48,   0x0048 },
  1008. X      { "H", "LATIN CAPITAL LETTER H" } },
  1009. X  { "I",  {0,0}, 1, NULL,
  1010. X      {          0x49,     0x49,   0x49,    0x49,    0x49,
  1011. X         0x49,     0x49,   0x49,    0x49,    0x49,
  1012. X                 0x49,     0x49,   0x49,    0x49,    0x49,
  1013. X                 0x49,     0x49,     -1,    0x49,   0x49,
  1014. X             0x49,   0x0049 },
  1015. X      { "I", "LATIN CAPITAL LETTER I" } },
  1016. X  { "J",  {0,0}, 1, NULL,
  1017. X      {          0x4A,     0x4A,   0x4A,    0x4A,    0x4A,
  1018. X         0x4A,     0x4A,   0x4A,    0x4A,    0x4A,
  1019. X                 0x4A,     0x4A,   0x4A,    0x4A,    0x4A,
  1020. X                 0x4A,     0x4A,     -1,    0x4A,    0x4A,
  1021. X             0x4A,   0x004a },
  1022. X      { "J", "LATIN CAPITAL LETTER J" } },
  1023. X  { "K",  {0,0}, 1, NULL,
  1024. X      {          0x4B,     0x4B,   0x4B,    0x4B,    0x4B,
  1025. X         0x4B,     0x4B,   0x4B,    0x4B,    0x4B,
  1026. X                 0x4B,     0x4B,   0x4B,    0x4B,    0x4B,
  1027. X                 0x4B,     0x4B,     -1,    0x4B,   0x4B,
  1028. X             0x4B,   0x004b },
  1029. X      { "K", "LATIN CAPITAL LETTER K" } },
  1030. X  { "L",  {0,0}, 1, NULL,
  1031. X      {          0x4C,     0x4C,   0x4C,    0x4C,    0x4C,
  1032. X         0x4C,     0x4C,   0x4C,    0x4C,    0x4C,
  1033. X                 0x4C,     0x4C,   0x4C,    0x4C,    0x4C,
  1034. X                 0x4C,     0x4C,     -1,    0x4C,    0x4C,
  1035. X             0x4C,   0x004c },
  1036. X      { "L", "LATIN CAPITAL LETTER L" } },
  1037. X  { "M",  {0,0}, 1, NULL,
  1038. X      {          0x4D,     0x4D,   0x4D,    0x4D,    0x4D,
  1039. X         0x4D,     0x4D,   0x4D,    0x4D,    0x4D,
  1040. X                 0x4D,     0x4D,   0x4D,    0x4D,    0x4D,
  1041. X                 0x4D,     0x4D,     -1,    0x4D,    0x4D,
  1042. X             0x4D,   0x004d }, 
  1043. X      { "M", "LATIN CAPITAL LETTER M" } },
  1044. X  { "N",  {0,0}, 1, NULL,
  1045. X      {          0x4E,     0x4E,   0x4E,    0x4E,    0x4E,
  1046. X         0x4E,     0x4E,   0x4E,    0x4E,    0x4E,
  1047. X                 0x4E,     0x4E,   0x4E,    0x4E,    0x4E,
  1048. X                 0x4E,     0x4E,     -1,    0x4E,    0x4E,
  1049. X             0x4E,   0x004e },
  1050. X      { "N", "LATIN CAPITAL LETTER N" } },
  1051. X  { "O",  {0,0}, 1, NULL,
  1052. X      {          0x4F,     0x4F,   0x4F,    0x4F,    0x4F,
  1053. X         0x4F,     0x4F,   0x4F,    0x4F,    0x4F,
  1054. X                 0x4F,     0x4F,   0x4F,    0x4F,    0x4F,
  1055. X                 0x4F,     0x4F,     -1,    0x4F,   0x4F,
  1056. X         0x4F,   0x004f },
  1057. X      { "O", "LATIN CAPITAL LETTER O" } },
  1058. X  { "P",  {0,0}, 1, NULL,
  1059. X      {          0x50,     0x50,   0x50,    0x50,    0x50,
  1060. X         0x50,     0x50,   0x50,    0x50,    0x50,
  1061. X         0x50,     0x50,   0x50,    0x50,    0x50,
  1062. X         0x50,     0x50,     -1,    0x50,   0x50,
  1063. X         0x50,   0x0050 },
  1064. X      { "P", "LATIN CAPITAL LETTER P" } },
  1065. X  { "Q",  {0,0}, 1, NULL,
  1066. X      {          0x51,     0x51,   0x51,    0x51,    0x51,
  1067. X         0x51,     0x51,   0x51,    0x51,    0x51,
  1068. X                 0x51,     0x51,   0x51,    0x51,    0x51,
  1069. X                 0x51,     0x51,     -1,    0x51,   0x51,
  1070. X             0x51,   0x0051 },
  1071. X      { "Q", "LATIN CAPITAL LETTER Q" } },
  1072. X  { "R",  {0,0}, 1, NULL,
  1073. X      {          0x52,     0x52,   0x52,    0x52,    0x52,
  1074. X         0x52,     0x52,   0x52,    0x52,    0x52,
  1075. X                 0x52,     0x52,   0x52,    0x52,    0x52,
  1076. X                 0x52,     0x52,     -1,    0x52,   0x52,
  1077. X             0x52,   0x0052 },
  1078. X    { "R", "LATIN CAPITAL LETTER R" } },
  1079. X  { "S",  {0,0}, 1, NULL,
  1080. X      {          0x53,     0x53,   0x53,    0x53,    0x53,
  1081. X         0x53,     0x53,   0x53,    0x53,    0x53,
  1082. X                 0x53,     0x53,   0x53,    0x53,    0x53,
  1083. X                 0x53,     0x53,     -1,    0x53,   0x53,
  1084. X         0x53,   0x0053 },
  1085. X      { "S", "LATIN CAPITAL LETTER S" } },
  1086. X  { "T",  {0,0}, 1, NULL,
  1087. X      {          0x54,     0x54,   0x54,    0x54,    0x54,
  1088. X         0x54,     0x54,   0x54,    0x54,    0x54,
  1089. X                 0x54,     0x54,   0x54,    0x54,    0x54,
  1090. X                 0x54,     0x54,     -1,    0x54,   0x54,
  1091. X         0x54,   0x0054 },
  1092. X      { "T", "LATIN CAPITAL LETTER T" } },
  1093. X  { "U",  {0,0}, 1, NULL,
  1094. X      {          0x55,     0x55,   0x55,    0x55,    0x55,
  1095. X         0x55,     0x55,   0x55,    0x55,    0x55,
  1096. X                 0x55,     0x55,   0x55,    0x55,    0x55,
  1097. X                 0x55,     0x55,     -1,    0x55,   0x55,
  1098. X             0x55,   0x0055 },
  1099. X      { "U", "LATIN CAPITAL LETTER U" } },
  1100. X  { "V",  {0,0}, 1, NULL,
  1101. X      {          0x56,     0x56,   0x56,    0x56,    0x56,
  1102. X         0x56,     0x56,   0x56,    0x56,    0x56,
  1103. X                 0x56,     0x56,   0x56,    0x56,    0x56,
  1104. X                 0x56,     0x56,     -1,    0x56,   0x56,
  1105. X         0x56,   0x0056 },
  1106. X      { "V", "LATIN CAPITAL LETTER V" } },
  1107. X  { "W",  {0,0}, 1, NULL,
  1108. X      {          0x57,     0x57,   0x57,    0x57,    0x57,
  1109. X         0x57,     0x57,   0x57,    0x57,    0x57,
  1110. X                 0x57,     0x57,   0x57,    0x57,    0x57,
  1111. X                 0x57,     0x57,     -1,    0x57,   0x57,
  1112. X             0x57,   0x0057 },
  1113. X      { "W", "LATIN CAPITAL LETTER W" } },
  1114. X  { "X",  {0,0}, 1, NULL,
  1115. X      {          0x58,     0x58,   0x58,    0x58,    0x58,
  1116. X         0x58,     0x58,   0x58,    0x58,    0x58,
  1117. X                 0x58,     0x58,   0x58,    0x58,    0x58,
  1118. X                 0x58,     0x58,     -1,    0x58,   0x58,
  1119. X             0x58,   0x0058 },
  1120. X      { "X", "LATIN CAPITAL LETTER X" } },
  1121. X  { "Y",  {0,0}, 1, NULL,
  1122. X      {          0x59,     0x59,   0x59,    0x59,    0x59,
  1123. X         0x59,     0x59,   0x59,    0x59,    0x59,
  1124. X                 0x59,     0x59,   0x59,    0x59,    0x59,
  1125. X                 0x59,     0x59,     -1,    0x59,   0x59,
  1126. X             0x59,   0x0059 },
  1127. X      { "Y", "LATIN CAPITAL LETTER Y" } },
  1128. X  { "Z",  {0,0}, 1, NULL,
  1129. X      {          0x5A,     0x5A,   0x5A,    0x5A,    0x5A,
  1130. X         0x5A,     0x5A,   0x5A,    0x5A,    0x5A,
  1131. X                 0x5A,     0x5A,   0x5A,    0x5A,    0x5A,
  1132. X                 0x5A,     0x5A,     -1,    0x5A,   0x5A,
  1133. X             0x5A,   0x005a },
  1134. X      { "Z", "LATIN CAPITAL LETTER Z" } },
  1135. X
  1136. X  /*          ASCII,   LATIN1,   MULT, SPECIAL, FINNISH 
  1137. X                 UK,    NORW,   SWEDISH,   LATIN4,   LATIN5,
  1138. X              ISO-8859-*, LATIN2, BELGIAN, GERMAN, French Canadian,
  1139. X                         CP437, TECHNICAL,          MAC,
  1140. X        ITAL, RFC1345 */   
  1141. X  /* LEFT SQUARE BRACKET
  1142. X     OPENING SQUARE BRACKET */
  1143. X  { "[",  {'(','('},1, NULL,
  1144. X      {          0x5B,     0x5B,   0x5B,    0x5B,      -1,
  1145. X         0x5B,       -1,     -1,    0x5B,    0x5B,
  1146. X                 0x5B,     0x5B,     -1,      -1,      -1,
  1147. X                 0x5B,     0x5B,     -1,      -1,    0x5B,
  1148. X               -1,   0x005b },
  1149. X      { "<(", "LEFT SQUARE BRACKET" } },   /* NAT 4 */
  1150. X  /* REVERSE SOLIDUS
  1151. X     BACKSLASH */
  1152. X  { "\\",  {'/','/'},1, NULL,
  1153. X      {          0x5C,     0x5C,   0x5C,    0x5C,      -1,
  1154. X         0x5C,       -1,     -1,    0x5C,    0x5C,
  1155. X                 0x5C,     0x5C,     -1,      -1,      -1,
  1156. X                 0x5C,     0x5C,     -1,      -1,    0x5C,
  1157. X               -1,   0x005c },
  1158. X      { "//", "REVERSE SOLIDUS" } },   /* NAT 5 */
  1159. X  /* RIGHT SQUARE BRACKET
  1160. X     CLOSING SQUARE BRACKET */
  1161. X  { "]",  {')',')'},1, NULL,
  1162. X      {          0x5D,     0x5D,   0x5D,    0x5D,      -1,
  1163. X         0x5D,       -1,     -1,    0x5D,    0x5D,
  1164. X                 0x5D,     0x5D,     -1,      -1,      -1,
  1165. X                 0x5D,     0x5D,     -1,      -1,    0x5D,
  1166. X               -1,   0x005d },
  1167. X      { ")>", "RIGHT SQUARE BRACKET" } },   /* NAT 6 */
  1168. X  /* CIRCUMFLEX ACCENT
  1169. X     SPACING CIRCUMFLEX */
  1170. X  { "^",  {'*','*'},1, NULL,
  1171. X      {          0x5E,     0x5E,   0x5E,    0x5E,      -1,
  1172. X         0x5E,     0x5E,   0x5E,    0x5E,    0x5E,
  1173. X                 0x5E,     0x5E,   0x5E,    0x5E,      -1,
  1174. X                 0x5E,     0x5E,     -1,    0x5E,    0x5E,
  1175. X             0x5E,   0x005e },
  1176. X      /* UNICODE Decomposition: [0020] & [0302]  */
  1177. X      { "'>", "CIRCUMFLEX ACCENT" } },   /* NAT 7 */
  1178. X  /* LOW LINE
  1179. X     SPACING UNDERSCORE */
  1180. X  { "_",  {' ','-'}, 1, &CH_UL,
  1181. X      {          0x5F,     0x5F,   0x5F,      -1,    0x5F,
  1182. X         0x5F,     0x5F,   0x5F,    0x5F,    0x5F,
  1183. X                 0x5F,     0x5F,   0x5F,    0x5F,    0x5F,
  1184. X                 0x5F,     0x5F,     -1,    0x5F,    0x5F,
  1185. X             0x5F,   0x005f },
  1186. X      /* UNICODE Decompositation: [0020] & [0332] */
  1187. X      { "_", "LOW LINE" } },   /* NAT 8 */
  1188. X  /* GRAVE ACCENT
  1189. X     SPACING GRAVE */
  1190. X  { "`",  {'\'','\''}, 1, NULL,
  1191. X      {          0x60,     0x60,   0x60,      -1,      -1,
  1192. X         0x60,     0x60,   0x60,    0x60,    0x60,
  1193. X                 0x60,     0x60,   0x60,    0x60,      -1,
  1194. X                 0x60,     0x60,     -1,    0x60,    0x60,
  1195. X               -1,   0x0060 },
  1196. X      /* UNICODE Decompositation: [0020] & [0300] */   
  1197. X      { "'!", "GRAVE ACCENT" } },   /* NAT 9 */
  1198. X
  1199. X  { "a",  {0,0}, 1, NULL,
  1200. X      {          0x61,     0x61,   0x61,      -1,    0x61,
  1201. X         0x61,     0x61,   0x61,    0x61,    0x61,
  1202. X                 0x61,     0x61,   0x61,    0x61,    0x61,
  1203. X                 0x61,     0x61,     -1,    0x61,    0x61,
  1204. X             0x61,   0x0061 },
  1205. X      { "a", "LATIN SMALL LETTER A" } },
  1206. X  { "b",  {0,0}, 1, NULL,
  1207. X      {          0x62,     0x62,   0x62,      -1,    0x62,
  1208. X         0x62,     0x62,   0x62,    0x62,    0x62,
  1209. X                 0x62,     0x62,   0x62,    0x62,    0x62,
  1210. X                 0x62,     0x62,     -1,    0x62,    0x62,
  1211. X         0x62,   0x0062 },
  1212. X      { "b", "LATIN SMALL LETTER B" } },
  1213. X  { "c",  {0,0}, 1, NULL,
  1214. X      {          0x63,     0x63,   0x63,      -1,    0x63,
  1215. X         0x63,     0x63,   0x63,    0x63,    0x63,
  1216. X                 0x63,     0x63,   0x63,    0x63,    0x63,
  1217. X                 0x63,     0x63,     -1,    0x63,    0x63,
  1218. X             0x63,   0x0063 },
  1219. X      { "c", "LATIN SMALL LETTER C" } },
  1220. X  { "d",  {0,0}, 1, NULL,
  1221. X      {          0x64,     0x64,   0x64,      -1,    0x64,
  1222. X         0x64,     0x64,   0x64,    0x64,    0x64,
  1223. X                 0x64,     0x64,   0x64,    0x64,    0x64,
  1224. X                 0x64,     0x64,     -1,    0x64,    0x64,
  1225. X             0x64,   0x0064 },
  1226. X      { "d", "LATIN SMALL LETTER D" } },
  1227. X  { "e",  {0,0}, 1, NULL,
  1228. X      {          0x65,     0x65,   0x65,      -1,    0x65,
  1229. X         0x65,     0x65,   0x65,    0x65,    0x65,
  1230. X                 0x65,     0x65,   0x65,    0x65,    0x65,
  1231. X                 0x65,     0x65,     -1,    0x65,    0x65,
  1232. X             0x65,   0x0065 },
  1233. X      { "e", "LATIN SMALL LETTER E" } },
  1234. X  { "f",  {0,0}, 1, NULL,
  1235. X      {          0x66,     0x66,   0x66,      -1,    0x66,
  1236. X         0x66,     0x66,   0x66,    0x66,    0x66,
  1237. X                 0x66,     0x66,   0x66,    0x66,    0x66,
  1238. X                 0x66,     0x66,     -1,    0x66,    0x66,
  1239. X             0x66,   0x0066 },
  1240. X      { "f", "LATIN SMALL LETTER F" } },
  1241. X  { "g",  {0,0}, 1, NULL,
  1242. X      {          0x67,     0x67,   0x67,      -1,    0x67,
  1243. X         0x67,     0x67,   0x67,    0x67,    0x67,
  1244. X                 0x67,     0x67,   0x67,    0x67,    0x67,
  1245. X                 0x67,     0x67,     -1,    0x67,   0x67,
  1246. X             0x67,   0x0067 },
  1247. X      { "g", "LATIN SMALL LETTER G" } },
  1248. X  { "h",  {0,0}, 1, NULL,
  1249. X      {          0x68,     0x68,   0x68,      -1,    0x68,
  1250. X         0x68,     0x68,   0x68,    0x68,    0x68,
  1251. X                 0x68,     0x68,   0x68,    0x68,    0x68,
  1252. X         0x68,     0x68,     -1,    0x68,   0x68,
  1253. X             0x68,   0x0068 },
  1254. X      { "h", "LATIN SMALL LETTER H" } },
  1255. X  { "i",  {0,0}, 1, NULL,
  1256. X      {          0x69,     0x69,   0x69,      -1,    0x69,
  1257. X         0x69,     0x69,   0x69,    0x69,    0x69,
  1258. X                 0x69,     0x69,   0x69,    0x69,    0x69,
  1259. X                 0x69,     0x69,     -1,    0x69,   0x69,
  1260. X             0x69,   0x0069 },
  1261. X      { "i", "LATIN SMALL LETTER I" } },
  1262. X  { "j",  {0,0}, 1, NULL,
  1263. X      {          0x6A,     0x6A,   0x6A,      -1,    0x6A,
  1264. X         0x6A,     0x6A,   0x6A,    0x6A,    0x6A,
  1265. X                 0x6A,     0x6A,   0x6A,    0x6A,    0x6A,
  1266. X                 0x6A,     0x6A,     -1,    0x6A,   0x6A,
  1267. X         0x6A,   0x006a },
  1268. X      { "j", "LATIN SMALL LETTER J" } },
  1269. X  { "k",  {0,0}, 1, NULL,
  1270. X      {          0x6B,     0x6B,   0x6B,      -1,    0x6B,
  1271. X         0x6B,     0x6B,   0x6B,    0x6B,    0x6B,
  1272. X                 0x6B,     0x6B,   0x6B,    0x6B,    0x6B,
  1273. X                 0x6B,     0x6B,     -1,    0x6B,   0x6B,
  1274. X         0x6B,   0x006b },
  1275. X      { "k", "LATIN SMALL LETTER K" } },
  1276. X  { "l",  {0,0}, 1, NULL,
  1277. X      {          0x6C,     0x6C,   0x6C,      -1,    0x6C,
  1278. X         0x6C,     0x6C,   0x6C,    0x6C,    0x6C,
  1279. X                 0x6C,     0x6C,   0x6C,    0x6C,    0x6C,
  1280. X                 0x6C,     0x6C,     -1,    0x6C,   0x6C,
  1281. X             0x6C,   0x006c },
  1282. X      { "l", "LATIN SMALL LETTER L" } },
  1283. X  { "m",  {0,0}, 1, NULL,
  1284. X      {          0x6D,     0x6D,   0x6D,      -1,    0x6D,
  1285. X         0x6D,     0x6D,   0x6D,    0x6D,    0x6D,
  1286. X                 0x6D,     0x6D,   0x6D,    0x6D,    0x6D,
  1287. X                 0x6D,     0x6D,     -1,    0x6D,   0x6D,
  1288. X         0x6D,   0x006d },
  1289. X      { "m", "LATIN SMALL LETTER M" } },
  1290. X  { "n",  {0,0}, 1, NULL,
  1291. X      {          0x6E,     0x6E,   0x6E,      -1,    0x6E,
  1292. X         0x6E,     0x6E,   0x6E,    0x6E,    0x6E,
  1293. X                 0x6E,     0x6E,   0x6E,    0x6E,    0x6E,
  1294. X                 0x6E,     0x6E,     -1,    0x6E,   0x6E,
  1295. X             0x6E,   0x006e },
  1296. X      { "n", "LATIN SMALL LETTER N" } },
  1297. X  { "o",  {0,0}, 1, NULL,
  1298. X      {          0x6F,     0x6F,   0x6F,      -1,    0x6F,
  1299. X         0x6F,     0x6F,   0x6F,    0x6F,    0x6F,
  1300. X                 0x6F,     0x6F,   0x6F,    0x6F,    0x6F,
  1301. X                 0x6F,     0x6F,     -1,    0x6F,   0x6F,
  1302. X             0x6F,   0x006f },
  1303. X      { "o", "LATIN SMALL LETTER O" } },
  1304. X  { "p",  {0,0}, 1, NULL,
  1305. X      {          0x70,     0x70,   0x70,      -1,    0x70,
  1306. X         0x70,     0x70,   0x70,    0x70,    0x70,
  1307. X                 0x70,     0x70,   0x70,    0x70,    0x70,
  1308. X                 0x70,     0x70,     -1,    0x70,   0x70,
  1309. X             0x70,   0x0070 },
  1310. X      { "p", "LATIN SMALL LETTER P" } },
  1311. X  { "q",  {0,0}, 1, NULL,
  1312. X      {          0x71,     0x71,   0x71,      -1,    0x71,
  1313. X         0x71,     0x71,   0x71,    0x71,    0x71,
  1314. X                 0x71,     0x71,   0x71,    0x71,    0x71,
  1315. X                 0x71,     0x71,     -1,    0x71,   0x71,
  1316. X             0x71,   0x0071 },
  1317. X     { "q", "LATIN SMALL LETTER Q" } },
  1318. X  { "r",  {0,0}, 1, NULL,
  1319. X      {          0x72,     0x72,   0x72,      -1,    0x72,
  1320. X         0x72,     0x72,   0x72,    0x72,    0x72,
  1321. X                 0x72,     0x72,   0x72,    0x72,    0x72,
  1322. X                 0x72,     0x72,     -1,    0x72,   0x72,
  1323. X             0x72,   0x0072 },
  1324. X      { "r", "LATIN SMALL LETTER R" } },
  1325. X  { "s",  {0,0}, 1, NULL,
  1326. X      {          0x73,     0x73,   0x73,      -1,    0x73,
  1327. X         0x73,     0x73,   0x73,    0x73,    0x73,
  1328. X                 0x73,     0x73,   0x73,    0x73,    0x73,
  1329. X                 0x73,     0x73,     -1,    0x73,   0x73,
  1330. X             0x73,   0x0073 },
  1331. X      { "s", "LATIN SMALL LETTER S" } },
  1332. X  { "t",  {0,0}, 1, NULL,
  1333. X      {          0x74,     0x74,   0x74,      -1,    0x74,
  1334. X         0x74,     0x74,   0x74,    0x74,    0x74,
  1335. X                 0x74,     0x74,   0x74,    0x74,    0x74,
  1336. X                 0x74,     0x74,     -1,    0x74,   0x74,
  1337. X             0x74,   0x0074 },
  1338. X      { "t", "LATIN SMALL LETTER T" } },
  1339. X  { "u",  {0,0}, 1, NULL,
  1340. X      {          0x75,     0x75,   0x75,      -1,    0x75,
  1341. X         0x75,     0x75,   0x75,    0x75,    0x75,
  1342. X                 0x75,     0x75,   0x75,    0x75,    0x75,
  1343. X                 0x75,     0x75,     -1,    0x75,   0x75,
  1344. X             0x75,   0x0075 },
  1345. X      { "u", "LATIN SMALL LETTER U" } },
  1346. X  { "v",  {0,0}, 1, NULL,
  1347. X      {          0x76,     0x76,   0x76,      -1,    0x76,
  1348. X         0x76,     0x76,   0x76,    0x76,    0x76,
  1349. X                 0x76,     0x76,   0x76,    0x76,    0x76,
  1350. X                 0x76,     0x76,     -1,    0x76,   0x76,
  1351. X             0x76,   0x0076 },
  1352. X      { "v", "LATIN SMALL LETTER V" } },
  1353. X  { "w",  {0,0}, 1, NULL,
  1354. X      {          0x77,     0x77,   0x77,      -1,    0x77,
  1355. X         0x77,     0x77,   0x77,    0x77,    0x77,
  1356. X                 0x77,     0x77,   0x77,    0x77,    0x77,
  1357. X                 0x77,     0x77,     -1,    0x77,   0x77,
  1358. X             0x77,   0x0077 },
  1359. X      { "w", "LATIN SMALL LETTER W" } },
  1360. X  { "x",  {0,0}, 1, NULL,
  1361. X      {          0x78,     0x78,   0x78,      -1,    0x78,
  1362. X         0x78,     0x78,   0x78,    0x78,    0x78,
  1363. X                 0x78,     0x78,   0x78,    0x78,    0x78,
  1364. X                 0x78,     0x78,     -1,    0x78,   0x78,
  1365. X         0x78,   0x0078 },
  1366. X      { "x", "LATIN SMALL LETTER X" } },
  1367. X  { "y",  {0,0}, 1, NULL,
  1368. X      {          0x79,     0x79,   0x79,      -1,    0x79,
  1369. X         0x79,     0x79,   0x79,    0x79,    0x79,
  1370. X                 0x79,     0x79,   0x79,    0x79,    0x79,
  1371. X                 0x79,     0x79,     -1,    0x79,   0x79,
  1372. X             0x79,   0x0079 },
  1373. X      { "y", "LATIN SMALL LETTER Y" } },
  1374. X  { "z",  {0,0}, 1, NULL,
  1375. X      {          0x7A,     0x7A,   0x7A,      -1,    0x7A,
  1376. X         0x7A,     0x7A,   0x7A,    0x7A,    0x7A,
  1377. X                 0x7A,     0x7A,   0x7A,    0x7A,    0x7A,
  1378. X                 0x7A,     0x7A,     -1,    0x7A,   0x7A,
  1379. X             0x7A,   0x007a },
  1380. X      { "z", "LATIN SMALL LETTER Z" } },
  1381. X
  1382. X  /*          ASCII,   LATIN1,   MULT, SPECIAL, FINNISH,
  1383. X                 UK,      NORW,   SWEDISH,  LATIN4,   LATIN5,
  1384. X          ISO-8859-*,  LATIN2,
  1385. X               LATIN3,     CP437, TECHNICAL, SPANISH, MAC,
  1386. X            ITAL,    Unicode 1.1 */
  1387. X  /* LEFT CURLY BRACKET
  1388. X     OPENING CURLY BRACKET */
  1389. X  { "{",  {'(','-'},1, NULL,
  1390. X      {          0x7B,     0x7B,   0x7B,      -1,      -1,
  1391. X         0x7B,       -1,     -1,    0x7B,    0x7B,
  1392. X                 0x7B,     0x7B,     -1,      -1,      -1,
  1393. X           /* What character is in position 0x7B in spanish charset ?
  1394. X            */
  1395. X                 0x7B,     0x7B,     -1,    0x7B | FC_uncertain,
  1396. X                                                     0x7B,
  1397. X               -1,   0x007b },
  1398. X      { "(!", "LEFT CURLY BRACKET" } },  /* NAT 10 */
  1399. X  /* VERTICAL LINE
  1400. X     VERTICAL BAR */
  1401. X  { "|",  {'^','/'}, 1, NULL,
  1402. X      {          0x7C,     0x7C,   0x7C,      -1,      -1,
  1403. X         0x7C,       -1,     -1,    0x7C,    0x7C,
  1404. X                 0x7C,     0x7C,     -1,      -1,      -1,
  1405. X                 0x7C,     0x7C,   -1,        -1,    0x7C,
  1406. X               -1,   0x007c },
  1407. X      { "!!", "VERTICAL LINE" } },  /* NAT 11 */
  1408. X  /* RIGHT CURLY BRACKET
  1409. X     CLOSING CURLY BRACKET */
  1410. X  { "}",  {')','-'},1, NULL,
  1411. X      {          0x7D,     0x7D,   0x7D,      -1,      -1,
  1412. X         0x7D,       -1,     -1,    0x7D,    0x7D,
  1413. X                 0x7D,     0x7D,     -1,      -1,      -1,
  1414. X                 0x7D,     0x7D,     -1,      -1,    0x7D,
  1415. X               -1,   0x007d },
  1416. X      { "!)", "RIGHT CURLY BRACKET" } },  /* NAT 12 */
  1417. X  { "~",  {'^','^'},1, NULL,
  1418. X      {          0x7E,     0x7E,   0x7E,      -1,      -1,
  1419. X         0x7E,     0x7E,   0x7E,    0x7E,    0x7E,
  1420. X           /* What is this belgian character ? 
  1421. X            * I set diaresis but perhaps it is wrong! */
  1422. X                 0x7E,     0x7E,     -1,    -1,        -1,
  1423. X                 0x7E,     0x7E,     -1,    -1,      0x7E,
  1424. X               -1,   0x007e },
  1425. X      { "'?", "TILDE" } },  /* NAT 13 */
  1426. X
  1427. X  /* Forms characters */
  1428. X  /*          ASCII,   LATIN1,   MULT, SPECIAL,  FINNISH,
  1429. X                 UK,   NORW,     SWEDISH,   LATIN4,    LATIN5,
  1430. X           ISO-8859-*, LATIN2,
  1431. X               LATIN3,     CP437, TECHNICAL, SPANISH, MAC,
  1432. X           ITAL,  Unicode 1.1 */
  1433. X  /* FORMS LIGHT HORIZONTAL / BOX DRAWINGS LIGHT HORIZONTAL */
  1434. X  { "-",  {0,0}, 1, NULL,
  1435. X      {            -1,       -1,     -1,    0x71,      -1,
  1436. X           -1,       -1,     -1,      -1,      -1,
  1437. X                   -1,       -1,     -1,      -1,      -1,
  1438. X                   -1,      196,     -1,      -1,      -1,
  1439. X           -1,   0x2500 },
  1440. X      { "hh", "BOX DRAWINGS LIGHT HORIZONTAL" } },  
  1441. X  /* FORMS HEAVY HORIZONTAL / BOX DRAWINGS HEAVY HORIZONTAL */
  1442. X  { "-",  {0,0}, 1, NULL,
  1443. X      {            -1,       -1,     -1,    0x71 | FC_fallback,      
  1444. X                                               -1,
  1445. X           -1,       -1,     -1,      -1,      -1,
  1446. X                   -1,       -1,     -1,      -1,      -1,
  1447. X                   -1,      205,     -1,      -1,      -1,
  1448. X           -1,   0x2501 },
  1449. X      { "HH", "BOX DRAWINGS HEAVY HORIZONTAL" } },  
  1450. X  /* FORMS LIGHT VERTICAL  / BOX DRAWINGS LIGHT VERTICAL */
  1451. X  { "|",  {0,0}, 1, NULL,
  1452. X      {            -1,       -1,     -1,    0x78,      -1,
  1453. X           -1,       -1,     -1,      -1,      -1,
  1454. X                   -1,       -1,     -1,      -1,      -1,
  1455. X                   -1,      179,     -1,      -1,      -1,
  1456. X           -1,   0x2502 },
  1457. X      { "vv", "BOX DRAWINGS LIGHT VERTICAL" } }, 
  1458. X  /* FORMS HEAVY VERTICAL  / BOX DRAWINGS HEAVY VERTICAL */
  1459. X  { "|",  {0,0}, 1, NULL,
  1460. X      {            -1,       -1,     -1,    0x78 | FC_fallback,      
  1461. X                                               -1,
  1462. X           -1,       -1,     -1,      -1,      -1,
  1463. X                   -1,       -1,     -1,      -1,      -1,
  1464. X                   -1,      186,     -1,      -1,      -1,
  1465. X           -1,   0x2503 },
  1466. X      { "VV", "BOX DRAWINGS HEAVY VERTICAL" } }, 
  1467. X  /* Missing: x
  1468. X              BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL,
  1469. X             FORMS LIGHT TRIPLE DASH HORIZONTAL, UNICODE 0x2504
  1470. X         rfc1345 encoding: 3-
  1471. X              BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL,
  1472. X             FORMS HEAVY TRIPLE DASH HORIZONTAL, UNICODE 0x2505
  1473. X         rfc1345 encoding: 3_
  1474. X              BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL,
  1475. X             FORMS LIGHT TRIPLE DASH VERTICAL, UNICODE 0x2506
  1476. X         rfc1345 encoding: 3!
  1477. X              BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL,
  1478. X             FORMS HEAVY TRIPLE DASH VERTICAL, UNICODE 0x2507
  1479. X         rfc1345 encoding: 3/
  1480. X              BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL,
  1481. X             FORMS LIGHT QUADRUPLE DASH HORIZONTAL, UNICODE 0x2508
  1482. X         rfc1345 encoding: 4-
  1483. X              BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL,
  1484. X             FORMS HEAVY QUADRUPLE DASH HORIZONTAL, UNICODE 0x2509
  1485. X         rfc1345 encoding: 4_
  1486. X              BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL,
  1487. X             FORMS LIGHT QUADRUPLE DASH VERTICAL, UNICODE 0x250A
  1488. X         rfc1345 encoding: 4!
  1489. X              BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL,
  1490. X             FORMS HEAVY QUADRUPLE DASH VERTICAL, UNICODE 0x250B
  1491. X         rfc1345 encoding: 4/  */ 
  1492. X  /* FORMS LIGHT DOWN AND RIGHT / BOX DRAWINGS LIGHT DOWN AND RIGHT */
  1493. X  { "+",  {0,0}, 1, NULL,
  1494. X      {            -1,       -1,     -1,    0x6C,      -1,
  1495. X           -1,       -1,     -1,      -1,      -1,
  1496. X                   -1,       -1,     -1,      -1,      -1,
  1497. X                   -1,      218,   -1,        -1,        -1,
  1498. X           -1,   0x250c },
  1499. X      { "dr", "BOX DRAWINGS LIGHT DOWN AND RIGHT" } },
  1500. X  /* FORMS DOWN LIGHT AND RIGHT HEAVY 
  1501. X     BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY */
  1502. X  { "+",  {0,0}, 1, NULL,
  1503. X      {            -1,       -1,     -1,    0x6C | FC_fallback,      
  1504. X                                               -1,
  1505. X           -1,       -1,     -1,      -1,      -1,
  1506. X                   -1,       -1,     -1,      -1,      -1,
  1507. X                   -1,      213,   -1,        -1,      -1,
  1508. X           -1,   0x250d },
  1509. X      { "dR", "BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" } },
  1510. X  /* FORMS DOWN HEAVY AND RIGHT LIGHT 
  1511. X     BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT */
  1512. X  { "+",  {0,0}, 1, NULL,
  1513. X      {            -1,       -1,     -1,    0x6C | FC_fallback,      
  1514. X                                               -1,
  1515. X           -1,       -1,     -1,      -1,      -1,
  1516. X                   -1,       -1,     -1,      -1,      -1,
  1517. X                   -1,      214,   -1,        -1,      -1,
  1518. X           -1,   0x250e },
  1519. X      { "Dr", "BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" } }, 
  1520. X  /* FORMS HEAVY DOWN AND RIGHT / BOX DRAWINGS HEAVY DOWN AND RIGHT */
  1521. X  { "+",  {0,0}, 1, NULL,
  1522. X      {            -1,       -1,     -1,    0x6C | FC_fallback,      
  1523. X                                               -1,
  1524. X           -1,       -1,     -1,      -1,      -1,
  1525. X                   -1,       -1,     -1,      -1,      -1,
  1526. X                   -1,      201,   -1,        -1,      -1,
  1527. X           -1,   0x250f },
  1528. X      { "DR", "BOX DRAWINGS HEAVY DOWN AND RIGHT" } }, 
  1529. X  /* FORMS LIGHT DOWN AND LEFT / BOX DRAWINGS LIGHT DOWN AND LEFT */
  1530. X  { "+",  {0,0}, 1, NULL,
  1531. X      {            -1,       -1,     -1,    0x6B,      -1,
  1532. X           -1,       -1,     -1,      -1,      -1,
  1533. X                   -1,       -1,     -1,      -1,      -1,
  1534. X                   -1,      191,     -1,      -1,      -1,
  1535. X           -1,   0x2510 },
  1536. X      { "dl", "BOX DRAWINGS LIGHT DOWN AND LEFT" } }, 
  1537. X  /* FORMS DOWN LIGHT AND LEFT HEAVY 
  1538. X     BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY */
  1539. SHAR_EOF
  1540. echo "End of part 1"
  1541. echo "File charset.c is continued in part 2"
  1542. echo "2" > s2_seq_.tmp
  1543. exit 0
  1544.