home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / recode-3.2.4 / recode.info < prev    next >
Encoding:
GNU Info File  |  1992-08-23  |  43.5 KB  |  1,139 lines

  1. This is Info file recode.info, produced by Makeinfo-1.47 from the input
  2. file recode.texi.
  3.  
  4.    Copyright (C) 1990 Free Software Foundation, Inc. Francois Pinard
  5. <pinard@iro.umontreal.ca>, 1988.
  6.  
  7.    This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2, or (at your option) any
  10. later version.
  11.  
  12.    This program is distributed in the hope that it will be useful, but
  13. WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15. General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software Foundation,
  19. Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21. 
  22. File: recode.info,  Node: Top,  Next: Usage,  Prev: (dir),  Up: (dir)
  23.  
  24. Conversion of files between different charsets and usages
  25. *********************************************************
  26.  
  27.    This `recode' program has the purpose of converting files between
  28. various character sets and usages.  When exact transliterations are not
  29. possible, as it is often the case, the program may get rid of the
  30. offending characters or fall back on approximations.
  31.  
  32.    Let us coin the term "charset" to represent, without distinction, a
  33. character set "per se" or a particular usage of a character set.  This
  34. program recognizes or produces a little more than a dozen of such
  35. charsets. Since it can convert each charset to almost any other one,
  36. more than one hundred different conversions are possible.
  37.  
  38.    This tool pays special attention to superimposition of diacritics,
  39. particularily for French representation.  This orientation is mostly
  40. historical, it does not impair the usefulness, generality or
  41. extensibility of the program.  In fact, this program evolved for
  42. several years, through several programming languages and computer
  43. brands, because I used a lot of different coding for French characters
  44. on different machines, each system having its own peculiarities.
  45.  
  46.    You may find in this document:
  47.  
  48. * Menu:
  49.  
  50. * Usage::               How to use this program
  51. * Charsets::            Character sets recognized of produced
  52. * Easy French::         Easy French conventions
  53. * Internals::           Internal aspects
  54. * Future::              Future things
  55.  
  56.  -- The Detailed Node Listing --
  57.  
  58. Character sets recognized of produced
  59.  
  60. * applemac::            ASCII 8-bits for Apple's Macintosh
  61. * ascii::               ASCII 7-bits, BS to overstrike
  62. * bangbang::            ASCII "bang bang", escapes are ! and !!
  63. * cccascii::            ASCII 8-bits as seen by Perkin Elmer
  64. * cdcascii::            ASCII 8-bits a seen by Control Data
  65. * cdcnos::              ASCII 6/12 from NOS, escapes are ^ and @
  66. * ebcdic::              EBCDIC with no further comments
  67. * flat::                ASCII without diacritics nor underline
  68. * ibmpc::               ASCII 8-bits for IBM's PC
  69. * iconqnx::             ASCII as coded on Unisys' ICON
  70. * latex::               ASCII with LaTeX codes
  71. * latin1::              ASCII extended by Latin Alphabet 1
  72. * texte::               ASCII with easy French conventions
  73.  
  74. ASCII 7-bits, BS to overstrike
  75.  
  76. * Commented ASCII::
  77. * Octal ASCII::
  78. * Decimal ASCII::
  79. * Hexadecimal ASCII::
  80.  
  81. ASCII "bang bang", escapes are ! and !!
  82.  
  83. * Display Code::        Control Data's Display Code
  84.  
  85. ASCII extended by Latin Alphabet 1
  86.  
  87. * Commented Latin-1::
  88. * Octal Latin-1::
  89. * Decimal Latin-1::
  90. * Hexadecimal Latin-1::
  91.  
  92. Easy French conventions
  93.  
  94. * French quotes::       How to type them.
  95. * Latin ligatures::     They are not representable.
  96. * Diacritics::          How to type them, things to know.
  97. * Ending diaeresis::    List of words ending with diaeresis.
  98. * Easy French History::  When, How and Who.
  99.  
  100. Internal aspects
  101.  
  102. * Main flow::           Overall organization of the program.
  103. * Piping::              Distinction between internal or external piping.
  104. * Limitations::         A few limitations of the choosen implementation.
  105. * New charsets::        How to proceed in adding new charsets.
  106.  
  107. 
  108. File: recode.info,  Node: Usage,  Next: Charsets,  Prev: Top,  Up: Top
  109.  
  110. How to use this program
  111. =======================
  112.  
  113.    The general format of the program call is:
  114.  
  115.      recode [OPTION]... [BEFORE]:[AFTER] [FILE]...
  116.  
  117.    Each file FILE will be read assuming it is coded with charset
  118. BEFORE, it will be recoded over itself so to use the charset AFTER.  If
  119. there is no such FILE, the program rather acts as a filter and recode
  120. standard input to standard output.
  121.  
  122.    The available options are:
  123.  
  124. `-C'
  125.      Given this option, all other parameters and options are ignored. 
  126.      The program prints briefly the Copyright and copying conditions. 
  127.      See the file `COPYING' in the distribution for full statement of
  128.      the Copyright and copying conditions.
  129.  
  130. `-c'
  131.      With Easy French conventions, use the column `:' instead of the
  132.      double-quote `"' for marking diaeresis. See: *Note Easy French::.
  133.  
  134. `-f'
  135.      This option is recognized, but otherwise ignored.  Eventually, this
  136.      option will be necessary for a file to be replaced by its recoded
  137.      contents, if it is found that the recoding is not fully
  138.      reversible.  In this version, the replacement is unconditionnaly
  139.      done.
  140.  
  141. `-i'
  142.      When the recoding requires a combination of two or more elementary
  143.      recoding steps, this option forces many passes over the data, using
  144.      intermediate files between passes.  This is the default behaviour
  145.      when files are recoded over themselves.  If this option is
  146.      selected in filter mode, that is, when the program reads standard
  147.      input and writes standard output, it might take longer for
  148.      programs further down the pipe chain to start receiving some
  149.      recoded data.
  150.  
  151. `-o'
  152.      When the recoding requires a combination of two or more elementary
  153.      recoding steps, this option forces the creation of a chain of
  154.      program instances initiated through the `popen(3)' library call,
  155.      all operating in parallel.  In filter mode, at cost of some
  156.      overhead, recoded data will be available soon after the program
  157.      starts, even if many elementary recoding steps are required.
  158.  
  159.      If, at installation time, the `popen(3)' call is said to be
  160.      unavailable, selecting option `-o' is equivalent to selecting
  161.      option `-i'.
  162.  
  163. `-p'
  164.      When the recoding requires a combination of two or more elementary
  165.      recoding steps, this option forces the program to fork itself into
  166.      a few copies interconnected with pipes, using the `pipe(2)' system
  167.      call. All copies of the program operate in parallel.  This method
  168.      is similar to the method used through option `-o', but is slightly
  169.      more efficient.  This is the default behaviour in filter mode.  If
  170.      this option is used when files are recoded over themselves, this
  171.      should save some disk accesses and some disk space, at cost of
  172.      more system overhead.
  173.  
  174.      If, at installation time, the `pipe(2)' call is said to be
  175.      unavailable, selecting option `-p' is equivalent to selecting
  176.      option `-o'.  If both `pipe(2)' and `popen(3)' are unavailable,
  177.      selecting option `-p' is equivalent to selecting option `-i'.
  178.  
  179. `-t'
  180.      The *touch* option is meaningful only when files are recoded over
  181.      themselves.  Without it, the timestamps associated with files are
  182.      preserved, to reflect the fact that changing the code of a file
  183.      does not really alter its informational contents.  When the user
  184.      wants the recoded files to be timestamped at the recoding time;
  185.      this option inhibits the automatic protection of the timestamps.
  186.  
  187. `-v'
  188.      Before proceeding, the program will print on `stderr' the list and
  189.      order of application of elementary conversions which are planned
  190.      to achieve the global conversion.  Then, the program will print on
  191.      `stderr' one message per FILE recoded, so to let the user informed
  192.      of the progress of its command.
  193.  
  194.    One or both of the BEFORE or AFTER keywords may be omitted, but the
  195. colon which separates them cannot.  An omitted keyword implies the
  196. usual or default code in usage on the system where this program is
  197. installed.  Usually, this default code is `latin1' for UNIX systems or
  198. `ibmpc' for MS-DOS machines, but it might be changed to any other
  199. supported code when this program is installed.
  200.  
  201. 
  202. File: recode.info,  Node: Charsets,  Next: Easy French,  Prev: Usage,  Up: Top
  203.  
  204. Character sets recognized of produced
  205. =====================================
  206.  
  207.    The possible values for charset BEFORE or charset AFTER are provided
  208. as the keys in the following menu.
  209.  
  210. * Menu:
  211.  
  212. * applemac::            ASCII 8-bits for Apple's Macintosh
  213. * ascii::               ASCII 7-bits, BS to overstrike
  214. * bangbang::            ASCII "bang bang", escapes are ! and !!
  215. * cccascii::            ASCII 8-bits as seen by Perkin Elmer
  216. * cdcascii::            ASCII 8-bits a seen by Control Data
  217. * cdcnos::              ASCII 6/12 from NOS, escapes are ^ and @
  218. * ebcdic::              EBCDIC with no further comments
  219. * flat::                ASCII without diacritics nor underline
  220. * ibmpc::               ASCII 8-bits for IBM's PC
  221. * iconqnx::             ASCII as coded on Unisys' ICON
  222. * latex::               ASCII with LaTeX codes
  223. * latin1::              ASCII extended by Latin Alphabet 1
  224. * texte::               ASCII with easy French conventions
  225.  
  226. 
  227. File: recode.info,  Node: applemac,  Next: ascii,  Prev: Charsets,  Up: Charsets
  228.  
  229. ASCII 8-bits for Apple's Macintosh
  230. ----------------------------------
  231.  
  232.    The file has been obtained or is aimed to a Macintosh micro-computer
  233. from Apple.  This is an eight bit code.  The file is the data fork only.
  234.  
  235. 
  236. File: recode.info,  Node: ascii,  Next: bangbang,  Prev: applemac,  Up: Charsets
  237.  
  238. ASCII 7-bits, BS to overstrike
  239. ------------------------------
  240.  
  241.    The file is straight ASCII, seven bits only.  According to the
  242. definition of ASCII: diacritics are applied by a sequence of three
  243. characters: the letter, one BS, the diacritic mark.  We deviate
  244. slightly from this by exchanging the diacritic mark and the letter so,
  245. on a screen device, the diacritic will disappear and let the letter
  246. alone.  At recognition time, both methods are acceptable.
  247.  
  248.    The French quotes are coded by the sequences: `< BS "' or `" BS <'
  249. for the opening quote and `> BS "' or `" BS >' for the closing quote. 
  250. This artifical convention was inherited in straight `ascii' from habits
  251. around `bangbang' entry, and is not well known.  But we decided to
  252. stick to it so that `ascii' charset will not loose French quotes.
  253.  
  254. * Menu:
  255.  
  256. * Commented ASCII::
  257. * Octal ASCII::
  258. * Decimal ASCII::
  259. * Hexadecimal ASCII::
  260.  
  261. 
  262. File: recode.info,  Node: Commented ASCII,  Next: Octal ASCII,  Prev: ascii,  Up: ascii
  263.  
  264. Commented ASCII
  265. ...............
  266.  
  267.      oct dec hex     name    description
  268.      
  269.      000   0  0      nul     null character
  270.      001   1  1      soh     start of header
  271.      002   2  2      stx     start of text
  272.      003   3  3      etx     end of text
  273.      004   4  4      eot     end of transmission
  274.      005   5  5      enq     enquiry
  275.      006   6  6      ack     acknowledge
  276.      007   7  7      bel     bell
  277.      010   8  8      bs      back space
  278.      011   9  9      ht      horizontal tab
  279.      012  10  a      nl      new line
  280.      013  11  b      vt      vertical tab
  281.      014  12  c      np      new page
  282.      015  13  d      cr      carriage return
  283.      016  14  e      so      shift out
  284.      017  15  f      si      shift in
  285.      020  16 10      dle     data link escape
  286.      021  17 11      dc1     device control 1
  287.      022  18 12      dc2     device control 2
  288.      023  19 13      dc3     device control 3
  289.      024  20 14      dc4     device control 4
  290.      025  21 15      nak     negative acknowledge
  291.      026  22 16      syn     synchronize
  292.      027  23 17      etb     end of transmitted block
  293.      030  24 18      can     cancel
  294.      031  25 19      em      end of medium
  295.      032  26 1a      sub     substitute
  296.      033  27 1b      esc     escape
  297.      034  28 1c      fs      file separator
  298.      035  29 1d      gs      group separator
  299.      036  30 1e      rs      record separator
  300.      037  31 1f      us      unit separator
  301.      040  32 20      sp      space
  302.      
  303.      177 127 7f      del     delete
  304.  
  305. 
  306. File: recode.info,  Node: Octal ASCII,  Next: Decimal ASCII,  Prev: Commented ASCII,  Up: ascii
  307.  
  308. Octal ASCII
  309. ...........
  310.  
  311.      000 nul  020 dle  040 sp 060 0  100 @  120 P  140 `  160 p
  312.      001 soh  021 dc1  041 !  061 1  101 A  121 Q  141 a  161 q
  313.      002 stx  022 dc2  042 "  062 2  102 B  122 R  142 b  162 r
  314.      003 etx  023 dc3  043 #  063 3  103 C  123 S  143 c  163 s
  315.      004 eot  024 dc4  044 $  064 4  104 D  124 T  144 d  164 t
  316.      005 enq  025 nak  045 %  065 5  105 E  125 U  145 e  165 u
  317.      006 ack  026 syn  046 &  066 6  106 F  126 V  146 f  166 v
  318.      007 bel  027 etb  047 '  067 7  107 G  127 W  147 g  167 w
  319.      010 bs   030 can  050 (  070 8  110 H  130 X  150 h  170 x
  320.      011 ht   031 em   051 )  071 9  111 I  131 Y  151 i  171 y
  321.      012 nl   032 sub  052 *  072 :  112 J  132 Z  152 j  172 z
  322.      013 vt   033 esc  053 +  073 ;  113 K  133 [  153 k  173 {
  323.      014 np   034 fs   054 ,  074 <  114 L  134 \  154 l  174 |
  324.      015 cr   035 gs   055 -  075 =  115 M  135 ]  155 m  175 }
  325.      016 so   036 rs   056 .  076 >  116 N  136 ^  156 n  176 ~
  326.      017 si   037 us   057 /  077 ?  117 O  137 _  157 o  177 del
  327.  
  328. 
  329. File: recode.info,  Node: Decimal ASCII,  Next: Hexadecimal ASCII,  Prev: Octal ASCII,  Up: ascii
  330.  
  331. Decimal ASCII
  332. .............
  333.  
  334.        0 nul  16 dle  32 sp 48 0  64 @  80 P   96 `  112 p
  335.        1 soh  17 dc1  33 !  49 1  65 A  81 Q   97 a  113 q
  336.        2 stx  18 dc2  34 "  50 2  66 B  82 R   98 b  114 r
  337.        3 etx  19 dc3  35 #  51 3  67 C  83 S   99 c  115 s
  338.        4 eot  20 dc4  36 $  52 4  68 D  84 T  100 d  116 t
  339.        5 enq  21 nak  37 %  53 5  69 E  85 U  101 e  117 u
  340.        6 ack  22 syn  38 &  54 6  70 F  86 V  102 f  118 v
  341.        7 bel  23 etb  39 '  55 7  71 G  87 W  103 g  119 w
  342.        8 bs   24 can  40 (  56 8  72 H  88 X  104 h  120 x
  343.        9 ht   25 em   41 )  57 9  73 I  89 Y  105 i  121 y
  344.       10 nl   26 sub  42 *  58 :  74 J  90 Z  106 j  122 z
  345.       11 vt   27 esc  43 +  59 ;  75 K  91 [  107 k  123 {
  346.       12 np   28 fs   44 ,  60 <  76 L  92 \  108 l  124 |
  347.       13 cr   29 gs   45 -  61 =  77 M  93 ]  109 m  125 }
  348.       14 so   30 rs   46 .  62 >  78 N  94 ^  110 n  126 ~
  349.       15 si   31 us   47 /  63 ?  79 O  95 _  111 o  127 del
  350.  
  351. 
  352. File: recode.info,  Node: Hexadecimal ASCII,  Prev: Decimal ASCII,  Up: ascii
  353.  
  354. Hexadecimal ASCII
  355. .................
  356.  
  357.       00 nul  10 dle  20 sp 30 0  40 @  50 P  60 `  70 p
  358.       01 soh  11 dc1  21 !  31 1  41 A  51 Q  61 a  71 q
  359.       02 stx  12 dc2  22 "  32 2  42 B  52 R  62 b  72 r
  360.       03 etx  13 dc3  23 #  33 3  43 C  53 S  63 c  73 s
  361.       04 eot  14 dc4  24 $  34 4  44 D  54 T  64 d  74 t
  362.       05 enq  15 nak  25 %  35 5  45 E  55 U  65 e  75 u
  363.       06 ack  16 syn  26 &  36 6  46 F  56 V  66 f  76 v
  364.       07 bel  17 etb  27 '  37 7  47 G  57 W  67 g  77 w
  365.       08 bs   18 can  28 (  38 8  48 H  58 X  68 h  78 x
  366.       09 ht   19 em   29 )  39 9  49 I  59 Y  69 i  79 y
  367.       0a nl   1a sub  2a *  3a :  4a J  5a Z  6a j  7a z
  368.       0b vt   1b esc  2b +  3b ;  4b K  5b [  6b k  7b {
  369.       0c np   1c fs   2c ,  3c <  4c L  5c \  6c l  7c |
  370.       0d cr   1d gs   2d -  3d =  4d M  5d ]  6d m  7d }
  371.       0e so   1e rs   2e .  3e >  4e N  5e ^  6e n  7e ~
  372.       0f si   1f us   2f /  3f ?  4f O  5f _  6f o  7f del
  373.  
  374. 
  375. File: recode.info,  Node: bangbang,  Next: cccascii,  Prev: ascii,  Up: Charsets
  376.  
  377. ASCII "bang bang", escapes are ! and !!
  378. ---------------------------------------
  379.  
  380.    This is the local code in use on Cybers at Universite de Montreal,
  381. which grave and serious people there prefer to name "ASCII code
  382. display". This code is also known as "Bang-bang".  It is based on a six
  383. bits character set in which capitals, French diacritics and a few
  384. others are coded using an `!' escape followed by a single character,
  385. and control characters using a double `!' escape followed by a single
  386. character.
  387.  
  388.    The routines given here presume that the six bits code is already
  389. expressed in ASCII by the communication channel, with embedded ASCII `!'
  390. escapes.
  391.  
  392.    Here is a table showing which characters are being used to encode
  393. each ASCII character.
  394.  
  395.      000 !!@  020 !!P  040    060 0  100 @   120 !P  140 !@ 160 P
  396.      001 !!A  021 !!Q  041 !" 061 1  101 !A  121 !Q  141 A  161 Q
  397.      002 !!B  022 !!R  042 "  062 2  102 !B  122 !R  142 B  162 R
  398.      003 !!C  023 !!S  043 #  063 3  103 !C  123 !S  143 C  163 S
  399.      004 !!D  024 !!T  044 $  064 4  104 !D  124 !T  144 D  164 T
  400.      005 !!E  025 !!U  045 %  065 5  105 !E  125 !U  145 E  165 U
  401.      006 !!F  026 !!V  046 &  066 6  106 !F  126 !V  146 F  166 V
  402.      007 !!G  027 !!W  047 '  067 7  107 !G  127 !W  147 G  167 W
  403.      010 !!H  030 !!X  050 (  070 8  110 !H  130 !X  150 H  170 X
  404.      011 !!I  031 !!Y  051 )  071 9  111 !I  131 !Y  151 I  171 Y
  405.      012 !!J  032 !!Z  052 *  072 :  112 !J  132 !Z  152 J  172 Z
  406.      013 !!K  033 !![  053 +  073 ;  113 !K  133 [   153 K  173 ![
  407.      014 !!L  034 !!\  054 ,  074 <  114 !L  134 \   154 L  174 !\
  408.      015 !!M  035 !!]  055 -  075 =  115 !M  135 ]   155 M  175 !]
  409.      016 !!N  036 !!^  056 .  076 >  116 !N  136 ^   156 N  176 !^
  410.      017 !!O  037 !!_  057 /  077 ?  117 !O  137 _   157 O  177 !_
  411.  
  412. * Menu:
  413.  
  414. * Display Code::        Control Data's Display Code
  415.  
  416. 
  417. File: recode.info,  Node: Display Code,  Prev: bangbang,  Up: bangbang
  418.  
  419. Control Data's Display Code
  420. ...........................
  421.  
  422.      Octal display code to graphic       Octal display code to octal ASCII
  423.      
  424.      00  :    20  P    40  5   60  #     00 072  20 120  40 065  60 043
  425.      01  A    21  Q    41  6   61  [     01 101  21 121  41 066  61 133
  426.      02  B    22  R    42  7   62  ]     02 102  22 122  42 067  62 135
  427.      03  C    23  S    43  8   63  %     03 103  23 123  43 070  63 045
  428.      04  D    24  T    44  9   64  "     04 104  24 124  44 071  64 042
  429.      05  E    25  U    45  +   65  _     05 105  25 125  45 053  65 137
  430.      06  F    26  V    46  -   66  !     06 106  26 126  46 055  66 041
  431.      07  G    27  W    47  *   67  &     07 107  27 127  47 052  67 046
  432.      10  H    30  X    50  /   70  '     10 110  30 130  50 057  70 047
  433.      11  I    31  Y    51  (   71  ?     11 111  31 131  51 050  71 077
  434.      12  J    32  Z    52  )   72  <     12 112  32 132  52 051  72 074
  435.      13  K    33  0    53  $   73  >     13 113  33 060  53 044  73 076
  436.      14  L    34  1    54  =   74  @     14 114  34 061  54 075  74 100
  437.      15  M    35  2    55      75  \     15 115  35 062  55 040  75 134
  438.      16  N    36  3    56  ,   76  ^     16 116  36 063  56 054  76 136
  439.      17  O    37  4    57  .   77  ;     17 117  37 064  57 056  77 073
  440.  
  441. 
  442. File: recode.info,  Node: cccascii,  Next: cdcascii,  Prev: bangbang,  Up: Charsets
  443.  
  444. ASCII 8-bits as seen by Perkin Elmer
  445. ------------------------------------
  446.  
  447.    This charset represents the way Concurrent Computer Corporation
  448. (formerly Perkin Elmer) expresses EBCDIC using ASCII.
  449.  
  450. 
  451. File: recode.info,  Node: cdcascii,  Next: cdcnos,  Prev: cccascii,  Up: Charsets
  452.  
  453. ASCII 8-bits a seen by Control Data
  454. -----------------------------------
  455.  
  456.    This charset represents the way Control Data Corporation relates
  457. EBCDIC to ASCII.  We also select the lower half of this table to do
  458. straigth ASCII to EBCDIC conversions, back and forth.
  459.  
  460. 
  461. File: recode.info,  Node: cdcnos,  Next: ebcdic,  Prev: cdcascii,  Up: Charsets
  462.  
  463. ASCII 6/12 from NOS, escapes are ^ and @
  464. ----------------------------------------
  465.  
  466.    This is one of the charset in use on CDC Cyber NOS systems to
  467. represent ASCII, sometimes named "NOS 6/12" code for coding ASCII. 
  468. This code is also known as "caret ASCII".  It is based on a six bits
  469. character set in which small letters and control characters are coded
  470. using a `^' escape and, sometimes, a `@' escape.
  471.  
  472.    The routines given here presume that the six bits code is already
  473. expressed in ASCII by the communication channel, with embedded ASCII
  474. `^' and `@' escapes.
  475.  
  476.    Here is a table showing which characters are being used to encode
  477. each ASCII character.
  478.  
  479.      000  ^5  020  ^#  040     060  0  100 @A  120  P  140  @G  160  ^P
  480.      001  ^6  021  ^[  041  !  061  1  101  A  121  Q  141  ^A  161  ^Q
  481.      002  ^7  022  ^]  042  "  062  2  102  B  122  R  142  ^B  162  ^R
  482.      003  ^8  023  ^%  043  #  063  3  103  C  123  S  143  ^C  163  ^S
  483.      004  ^9  024  ^"  044  $  064  4  104  D  124  T  144  ^D  164  ^T
  484.      005  ^+  025  ^_  045  %  065  5  105  E  125  U  145  ^E  165  ^U
  485.      006  ^-  026  ^!  046  &  066  6  106  F  126  V  146  ^F  166  ^V
  486.      007  ^*  027  ^&  047  '  067  7  107  G  127  W  147  ^G  167  ^W
  487.      010  ^/  030  ^'  050  (  070  8  110  H  130  X  150  ^H  170  ^X
  488.      011  ^(  031  ^?  051  )  071  9  111  I  131  Y  151  ^I  171  ^Y
  489.      012  ^)  032  ^<  052  *  072 @D  112  J  132  Z  152  ^J  172  ^Z
  490.      013  ^$  033  ^>  053  +  073  ;  113  K  133  [  153  ^K  173  ^0
  491.      014  ^=  034  ^@  054  ,  074  <  114  L  134  \  154  ^L  174  ^1
  492.      015  ^   035  ^\  055  -  075  =  115  M  135  ]  155  ^M  175  ^2
  493.      016  ^,  036  ^^  056  .  076  >  116  N  136 @B  156  ^N  176  ^3
  494.      017  ^.  037  ^;  057  /  077  ?  117  O  137  _  157  ^O  177  ^4
  495.  
  496. 
  497. File: recode.info,  Node: ebcdic,  Next: flat,  Prev: cdcnos,  Up: Charsets
  498.  
  499. EBCDIC with no further comments
  500. -------------------------------
  501.  
  502.    This charset is the IBM's external binary coded decimal for
  503. interchange coding.  This is an eight bits code.
  504.  
  505. 
  506. File: recode.info,  Node: flat,  Next: ibmpc,  Prev: ebcdic,  Up: Charsets
  507.  
  508. ASCII without diacritics nor underline
  509. --------------------------------------
  510.  
  511.    This code is ASCII expunged of all diacritics and underlines, as
  512. long as they are applied using three character sequences, with BS in the
  513. middle.  Also, despite slightly unrelated, each control character is
  514. represented by a sequence of two or three graphic characters.  The
  515. newline character, however, keeps its functionnality and is not
  516. represented.
  517.  
  518.    Note that charset `flat' is a terminal charset.  We can convert *to*
  519. `flat', but not *from* it.
  520.  
  521. 
  522. File: recode.info,  Node: ibmpc,  Next: iconqnx,  Prev: flat,  Up: Charsets
  523.  
  524. ASCII 8-bits for IBM's PC
  525. -------------------------
  526.  
  527.    The file was obtained or is aimed towards a PC microcomputer from
  528. IBM or any compatible.  This is an eight-bit code.
  529.  
  530. 
  531. File: recode.info,  Node: iconqnx,  Next: latex,  Prev: ibmpc,  Up: Charsets
  532.  
  533. ASCII for the Unisys' ICON
  534. --------------------------
  535.  
  536.    The file is using Unisys' ICON way to represent diacritics with 0x19
  537. escape sequences.  This is a seven-bit code, even if eight-bit codes
  538. can flow through as part of IBM-PC charset.
  539.  
  540. 
  541. File: recode.info,  Node: latex,  Next: latin1,  Prev: iconqnx,  Up: Charsets
  542.  
  543. ASCII with LaTeX codes
  544. ----------------------
  545.  
  546.    This charset is an ASCII file coded to be read by LaTeX or, in
  547. certain cases, by TeX.
  548.  
  549. 
  550. File: recode.info,  Node: latin1,  Next: texte,  Prev: latex,  Up: Charsets
  551.  
  552. ASCII extended by Latin Alphabet 1
  553. ----------------------------------
  554.  
  555.    This charset corresponds to the ISO Latin Alphabet 1.  It is an
  556. eight-bit code which coincides with ASCII for the lower half.
  557.  
  558. * Menu:
  559.  
  560. * Commented Latin-1::
  561. * Octal Latin-1::
  562. * Decimal Latin-1::
  563. * Hexadecimal Latin-1::
  564.  
  565. 
  566. File: recode.info,  Node: Commented Latin-1,  Next: Octal Latin-1,  Prev: latin1,  Up: latin1
  567.  
  568. Commented Latin-1
  569. .................
  570.  
  571.      oct dec hex     description
  572.      
  573.      240 160 a0      no-break space
  574.      241 161 a1      inverted exclamation mark
  575.      242 162 a2      cent sign
  576.      243 163 a3      pound sign
  577.      244 164 a4      currency sign
  578.      245 165 a5      yen sign
  579.      246 166 a6      broken bar
  580.      247 167 a7      paragraph sign, section sign
  581.      250 168 a8      diaeresis
  582.      251 169 a9      copyright sign
  583.      252 170 aa      feminine ordinal indicator
  584.      253 171 ab      left angle quotation mark
  585.      254 172 ac      not sign
  586.      255 173 ad      soft hyphen
  587.      256 174 ae      registered trade mark sign
  588.      257 175 af      macron
  589.      260 176 b0      degree sign
  590.      261 177 b1      plus-minus sign
  591.      262 178 b2      superscript two
  592.      263 179 b3      superscript three
  593.      264 180 b4      acute accent
  594.      265 181 b5      small greek mu, micro sign
  595.      266 182 b6      pilcrow sign
  596.      267 183 b7      middle dot
  597.      270 184 b8      cedilla
  598.      271 185 b9      superscript one
  599.      272 186 ba      masculine ordinal indicator
  600.      273 187 bb      right angle quotation mark
  601.      274 188 bc      vulgar fraction one quarter
  602.      275 189 bd      vulgar fraction one half
  603.      276 190 be      vulgar fraction three quarters
  604.      277 191 bf      inverted question mark
  605.      300 192 c0      capital A with grave accent
  606.      301 193 c1      capital A with acute accent
  607.      302 194 c2      capital A with circumflex accent
  608.      303 195 c3      capital A with tilde
  609.      304 196 c4      capital A diaeresis
  610.      305 197 c5      capital A with ring above
  611.      306 198 c6      capital diphthong A with E
  612.      307 199 c7      capital C with cedilla
  613.      310 200 c8      capital E with grave accent
  614.      311 201 c9      capital E with acute accent
  615.      312 202 ca      capital E with circumflex accent
  616.      313 203 cb      capital E with diaeresis
  617.      314 204 cc      capital I with grave accent
  618.      315 205 cd      capital I with acute accent
  619.      316 206 ce      capital I with circumflex accent
  620.      317 207 cf      capital I with diaeresis
  621.      320 208 d0      capital icelandic ETH
  622.      321 209 d1      capital N with tilde
  623.      322 210 d2      capital O with grave accent
  624.      323 211 d3      capital O with acute accent
  625.      324 212 d4      capital O with circumflex accent
  626.      325 213 d5      capital O with tilde
  627.      326 214 d6      capital O with diaeresis
  628.      327 215 d7      multiplication sign
  629.      330 216 d8      capital O with oblique stroke
  630.      331 217 d9      capital U with grave accent
  631.      332 218 da      capital U with acute accent
  632.      333 219 db      capital U with circumflex accent
  633.      334 220 dc      capital U with diaeresis
  634.      335 221 dd      capital Y with acute accent
  635.      336 222 de      capital icelandic THORN
  636.      337 223 df      small german sharp s
  637.      340 224 e0      small a with grave accent
  638.      341 225 e1      small a with acute accent
  639.      342 226 e2      small a with circumflex accent
  640.      343 227 e3      small a with tilde
  641.      344 228 e4      small a with diaeresis
  642.      345 229 e5      small a with ring above
  643.      346 230 e6      small diphthong a with e
  644.      347 231 e7      small c with cedilla
  645.      350 232 e8      small e with grave accent
  646.      351 233 e9      small e with acute accent
  647.      352 234 ea      small e with circumflex accent
  648.      353 235 eb      small e with diaeresis
  649.      354 236 ec      small i with grave accent
  650.      355 237 ed      small i with acute accent
  651.      356 238 ee      small i with circumflex accent
  652.      357 239 ef      small i with diaeresis
  653.      360 240 f0      small icelandic eth
  654.      361 241 f1      small n with tilde
  655.      362 242 f2      small o with grave accent
  656.      363 243 f3      small o with acute accent
  657.      364 244 f4      small o with circumflex accent
  658.      365 245 f5      small o with tilde
  659.      366 246 f6      small o with diaeresis
  660.      367 247 f7      division sign
  661.      370 248 f8      small o with oblique stroke
  662.      371 249 f9      small u with grave accent
  663.      372 250 fa      small u with acute accent
  664.      373 251 fb      small u with circumflex accent
  665.      374 252 fc      small u with diaeresis
  666.      375 253 fd      small y with acute accent
  667.      376 254 fe      small icelandic thorn
  668.      377 255 ff      small y with diaeresis
  669.  
  670. 
  671. File: recode.info,  Node: Octal Latin-1,  Next: Decimal Latin-1,  Prev: Commented Latin-1,  Up: latin1
  672.  
  673. Octal Latin-1
  674. .............
  675.  
  676.      200    220    240 nsp 260 ++  300 A`  320 DD  340 a`  360 dd
  677.      201    221    241 !!  261 +-  301 A'  321 N~  341 a'  361 n~
  678.      202    222    242 c|  262 22  302 A^  322 O`  342 a^  362 o`
  679.      203    223    243 ##  263 33  303 A~  323 O'  343 a~  363 o'
  680.      204    224    244 cur 264 ''  304 A"  324 O^  344 a"  364 o^
  681.      205    225    245 y-  265 uu  305 A+  325 O~  345 a+  365 o~
  682.      206    226    246 ||  266 pil 306 AE  326 O"  346 ae  366 o"
  683.      207    227    247 $$  267 ..  307 C,  327 xx  347 c,  367 //
  684.      210    230    250 ""  270 ,,  310 E`  330 O/  350 e`  370 o/
  685.      211    231    251 cO  271 11  311 E'  331 U`  351 e'  371 u`
  686.      212    232    252 a-  272 o-  312 E^  332 U'  352 e^  372 u'
  687.      213    233    253 <<  273 >>  313 E"  333 U^  353 e"  373 u^
  688.      214    234    254 -.  274 14  314 I`  334 U"  354 i`  374 u"
  689.      215    235    255 --  275 12  315 I'  335 Y'  355 i'  375 y'
  690.      216    236    256 tO  276 34  316 I^  336 PP  356 i^  376 pp
  691.      217    237    257 mac 277 ??  317 I"  337 ss  357 i"  377 y"
  692.  
  693. 
  694. File: recode.info,  Node: Decimal Latin-1,  Next: Hexadecimal Latin-1,  Prev: Octal Latin-1,  Up: latin1
  695.  
  696. Decimal Latin-1
  697. ...............
  698.  
  699.      128    144    160 nsp 176 ++  192 A`  208 DD  224 a`  240 dd
  700.      129    145    161 !!  177 +-  193 A'  209 N~  225 a'  241 n~
  701.      130    146    162 c|  178 22  194 A^  210 O`  226 a^  242 o`
  702.      131    147    163 ##  179 33  195 A~  211 O'  227 a~  243 o'
  703.      132    148    164 cur 180 ''  196 A"  212 O^  228 a"  244 o^
  704.      133    149    165 y-  181 uu  197 A+  213 O~  229 a+  245 o~
  705.      134    150    166 ||  182 pil 198 AE  214 O"  230 ae  246 o"
  706.      135    151    167 $$  183 ..  199 C,  215 xx  231 c,  247 //
  707.      136    152    168 ""  184 ,,  200 E`  216 O/  232 e`  248 o/
  708.      137    153    169 cO  185 11  201 E'  217 U`  233 e'  249 u`
  709.      138    154    170 a-  186 o-  202 E^  218 U'  234 e^  250 u'
  710.      139    155    171 <<  187 >>  203 E"  219 U^  235 e"  251 u^
  711.      140    156    172 -.  188 14  204 I`  220 U"  236 i`  252 u"
  712.      141    157    173 --  189 12  205 I'  221 Y'  237 i'  253 y'
  713.      142    158    174 tO  190 34  206 I^  222 PP  238 i^  254 pp
  714.      143    159    175 mac 191 ??  207 I"  223 ss  239 i"  255 y"
  715.  
  716. 
  717. File: recode.info,  Node: Hexadecimal Latin-1,  Prev: Decimal Latin-1,  Up: latin1
  718.  
  719. Hexadecimal Latin-1
  720. ...................
  721.  
  722.       80    90    a0 nsp  b0 ++  c0 A`  d0 DD  e0 a`  f0 dd
  723.       81    91    a1 !!   b1 +-  c1 A'  d1 N~  e1 a'  f1 n~
  724.       82    92    a2 c|   b2 22  c2 A^  d2 O`  e2 a^  f2 o`
  725.       83    93    a3 ##   b3 33  c3 A~  d3 O'  e3 a~  f3 o'
  726.       84    94    a4 cur  b4 ''  c4 A"  d4 O^  e4 a"  f4 o^
  727.       85    95    a5 y-   b5 uu  c5 A+  d5 O~  e5 a+  f5 o~
  728.       86    96    a6 ||   b6 pil c6 AE  d6 O"  e6 ae  f6 o"
  729.       87    97    a7 $$   b7 ..  c7 C,  d7 xx  e7 c,  f7 //
  730.       88    98    a8 ""   b8 ,,  c8 E`  d8 O/  e8 e`  f8 o/
  731.       89    99    a9 cO   b9 11  c9 E'  d9 U`  e9 e'  f9 u`
  732.       8a    9a    aa a-   ba o-  ca E^  da U'  ea e^  fa u'
  733.       8b    9b    ab <<   bb >>  cb E"  db U^  eb e"  fb u^
  734.       8c    9c    ac -.   bc 14  cc I`  dc U"  ec i`  fc u"
  735.       8d    9d    ad --   bd 12  cd I'  dd Y'  ed i'  fd y'
  736.       8e    9e    ae tO   be 34  ce I^  de PP  ee i^  fe pp
  737.       8f    9f    af mac  bf ??  cf I"  df ss  ef i"  ff y"
  738.  
  739. 
  740. File: recode.info,  Node: texte,  Prev: latin1,  Up: Charsets
  741.  
  742. ASCII with easy French conventions
  743. ----------------------------------
  744.  
  745.    This charset is identical to `ascii', save for French diacritics
  746. which are noted using a slightly different convention.
  747.  
  748.    See *Note Easy French:: for more details.
  749.  
  750. 
  751. File: recode.info,  Node: Easy French,  Next: Internals,  Prev: Charsets,  Up: Top
  752.  
  753. Easy French conventions
  754. =======================
  755.  
  756.    These conventions are used in `texte' and `latexte' charsets, which
  757. are seven bits codes.  At text entry time, these conventions provide a
  758. little speed up.  At read time, they slightly improve the readability. 
  759. Of course, it would better to have a specialized keyboard to make
  760. direct eight bits entries and fonts for immediately displaying eight
  761. bit ISO Latin-1 characters.  But not everybody is so fortunate. In
  762. several mailing environment, the eight bit is often willfully destroyed
  763. (an horrible Crime that most people do not care to straighten up).
  764.  
  765.    See:
  766.  
  767. * Menu:
  768.  
  769. * French quotes::       How to type them.
  770. * Latin ligatures::     They are not representable.
  771. * Diacritics::          How to type them, things to know.
  772. * Ending diaeresis::    List of words ending with diaeresis.
  773. * Easy French History::  When, How and Who.
  774.  
  775. 
  776. File: recode.info,  Node: French quotes,  Next: Latin ligatures,  Prev: Easy French,  Up: Easy French
  777.  
  778. French quotes
  779. -------------
  780.  
  781.    French quotes (sometimes called "angle quotes") are noted the same
  782. way English quotes are noted in TeX, *id est* by ```' and `'''.
  783.  
  784. 
  785. File: recode.info,  Node: Latin ligatures,  Next: Diacritics,  Prev: French quotes,  Up: Easy French
  786.  
  787. Latin ligatures
  788. ---------------
  789.  
  790.    No effort has been put to preserve Latin ligatures (`ae', `oe')
  791. which are representable in several other charsets.  So, these ligatures
  792. may be lost through Easy French conventions.
  793.  
  794. 
  795. File: recode.info,  Node: Diacritics,  Next: Ending diaeresis,  Prev: Latin ligatures,  Up: Easy French
  796.  
  797. Diacritics
  798. ----------
  799.  
  800.    This is almost the French convention for simplified diacritics entry:
  801.  
  802. `e''
  803.      Acute accent
  804.  
  805. `e`'
  806.      Grave accent
  807.  
  808. `e^'
  809.      Circumflex accent
  810.  
  811. `e"'
  812.      Diaeresis
  813.  
  814. `c,'
  815.      Cedilla
  816.  
  817.    In some countries, `:' is used instead of `"' to mark diaeresis.
  818. `recode' support one convention on a single call, depending on the `-c'
  819. option of the `recode' command.
  820.  
  821.    The convention is prone to loosing information, because the diacritic
  822. meaning overloads some characters that already have other uses.  To
  823. alleviate this, some knowledge of the French language is insufflated
  824. into the recognition routines.  So, the following subtleties are
  825. systematically obeyed by the various recognizers.
  826.  
  827.    * A single quote which follows a `e' does not necessarily means an
  828.      acute accent if it is followed by a single other one.  For example:
  829.  
  830.     `e''
  831.           will give an `e' with an acute accent.
  832.  
  833.     `e'''
  834.           will give a simple `e', with a closing quotation mark.
  835.  
  836.     `e''''
  837.           will give an `e' with an acute accent, followed by a closing
  838.           quotation mark.
  839.  
  840.      There is a problem induced by this convention if there are English
  841.      citations with a French text.  In sentences like:
  842.  
  843.           There's a meeting at Archie's restaurant.
  844.  
  845.      the single quotes will be mistaken twice for acute accents.  So
  846.      English contractions and suffix possessives could be mangled.
  847.  
  848.    * A double quote or colon, depending on `-c' option, which follows a
  849.      vowel is interpreted as diaeresis only if it is followd by another
  850.      letter. But there are in French several words that *end* with a
  851.      diaeresis, the program also recognizes them.
  852.  
  853.      See *Note Ending diaeresis:: for a study of all the problematic
  854.      cases.
  855.  
  856.    * A comma which follows a `c' is interpreted as a cedilla only if it
  857.      is followd by one of the vowels `a', `o' and `u'.
  858.  
  859. 
  860. File: recode.info,  Node: Ending diaeresis,  Next: Easy French History,  Prev: Diacritics,  Up: Easy French
  861.  
  862. List of words ending with diaeresis
  863. -----------------------------------
  864.  
  865.    Here is a classification of all cases of a diaeresis at the end of a
  866. French word:
  867.  
  868.    * Words ending in "igue"
  869.  
  870.         - Feminine words without a relative masculine:
  871.  
  872.                besaigue" cigue"
  873.  
  874.         - Feminine words with a relative masculine: (1)
  875.  
  876.                aigue" ambigue" contigue" exigue" subaigue" suraigue"
  877.  
  878.    * Words not ending in "igue"
  879.  
  880.         - Ended by "i": (2)
  881.  
  882.                ai" congai" goi" hai"kai" inoui" sai" samurai" thai" tokai"
  883.  
  884.         - Ended by "e":
  885.  
  886.                canoe"
  887.  
  888.         - Ended by "u": (3)
  889.  
  890.                Esau"
  891.  
  892.    Notes:
  893.  
  894.   1. There are supposed to be seven words in this case.  So, one is
  895.      missing.
  896.  
  897.   2. Look at the following sentence:
  898.  
  899.           "Ai"e!  Voici le proble`me que j'ai"
  900.  
  901.      or, using the `-c' option:
  902.  
  903.           Ai:e!  Voici le proble`me que j'ai:
  904.  
  905.      There is an ambiguity between an *ai"*, the small animal, and the
  906.      indicative future of *avoir* (first person singular), when
  907.      followed by what could be a diaeresis mark.  Hopefully, the case
  908.      is solved by the fact that an apostrophe always precedes the verb
  909.      and almost never the animal.
  910.  
  911.   3. I did not pay attention to proper nouns, but this one showed up as
  912.      being fairly evident.
  913.  
  914.  
  915.    Just to complete this topic, note that it would be wrong to make a
  916. rule for all words ending in "igue" as needing a diaerisis.  Here are
  917. counter-examples:
  918.  
  919.      becfigue be`sigue bigue bordigue bourdigue brigue contre-digue
  920.      digue d'intrigue fatigue figue garrigue gigue igue intrigue
  921.      ligue prodigue sarigue zigue
  922.  
  923. 
  924. File: recode.info,  Node: Easy French History,  Prev: Ending diaeresis,  Up: Easy French
  925.  
  926. When, How and Who.
  927. ------------------
  928.  
  929.    Easy French has been in use in France for a while.  Loic Dachary
  930. <loic@design.axis.fr> first exposed me to this particular convention. I
  931. only slightly adapted it (the diaeresis option) to make it more
  932. comfortable to several usages in Que'bec originating from Universite' de
  933. Montre'al.
  934.  
  935.    In fact, the main problem for me was not to necessarily to invent
  936. Easy French, but to recognize the "best" convention to use, (best is not
  937. being defined, here) and to try to solve the main pithfalls associated
  938. with the selected convention.  I'm particularily grateful to Claude
  939. Goutier <6@cc.umontreal.ca> whom, through numerous discussions in
  940. August 1988, was quite helpful in evaluating various hypothesis.
  941.  
  942. 
  943. File: recode.info,  Node: Internals,  Next: Future,  Prev: Easy French,  Up: Top
  944.  
  945. Internal aspects
  946. ================
  947.  
  948.    This information is organized in:
  949.  
  950. * Menu:
  951.  
  952. * Main flow::           Overall organization of the program.
  953. * Piping::              Distinction between internal or external piping.
  954. * Limitations::         A few limitations of the choosen implementation.
  955. * New charsets::        How to proceed in adding new charsets.
  956.  
  957. 
  958. File: recode.info,  Node: Main flow,  Next: Piping,  Prev: Internals,  Up: Internals
  959.  
  960. Overall organization
  961. --------------------
  962.  
  963.    The main driver has a table giving the conversion routines available
  964. and for each, the starting charset and the ending charset.  It then
  965. tries to figure out the shortest sequence of conversions that will
  966. transform the input charset into the final charset.  Let us consider
  967. these charsets as being the nodes of a directed graph.  `recode' has
  968. internally a few elementary recoding methods, called "single-step"s,
  969. each of which may be considered as oriented arc from one node to the
  970. other.  A cost is attributed to each single-step.  Given a starting
  971. code and a goal code, `recode' computes the most economical route
  972. through the elementary recodings.
  973.  
  974.    The main part of `recode' is written in C, as are most single-steps.
  975.  A few single-steps which need to recognize sequences of multiple
  976. characters are written in `lex'.
  977.  
  978. 
  979. File: recode.info,  Node: Piping,  Next: Limitations,  Prev: Main flow,  Up: Internals
  980.  
  981. Internal vs external piping
  982. ---------------------------
  983.  
  984.    Suppose that four elementary steps are selected at path optimization
  985. time.  Then `recode' will split itself into four different tasks
  986. interconnected with pipes, logically equivalent to:
  987.  
  988.      step1 <input | step2 | step3 | step4 >output
  989.  
  990. 
  991. File: recode.info,  Node: Limitations,  Next: New charsets,  Prev: Piping,  Up: Internals
  992.  
  993. Some limitations
  994. ----------------
  995.  
  996.    Here are some limitations of the program.
  997.  
  998.    * There is a limit (currently 10) on the number of steps allowed in
  999.      one single recodification work.  It should stay sufficient for
  1000.      quite a while, maybe for ever.  This is a simple compilation
  1001.      `#define', in any case.
  1002.  
  1003. 
  1004. File: recode.info,  Node: New charsets,  Prev: Limitations,  Up: Internals
  1005.  
  1006. Adding new charsets
  1007. -------------------
  1008.  
  1009.    It is fairly easy for a programmer to add a new charset to `recode'.
  1010. All it requires is making two routines, modifying a few tables, and
  1011. `make'ing `recode' again.
  1012.  
  1013.    One of the routine should convert from any previous charset to the
  1014. new one.  Any previous charset will do, but try to select it so you
  1015. will not loose too much information while converting.  If you have to
  1016. read multiple bytes of the old charset before recognizing the character
  1017. to produce, you might write this routine in `lex'; otherwize, use C.
  1018. Prototype your routine after one of those which exists, so to keep the
  1019. sources uniform.
  1020.  
  1021.    The other routine should convert from the new charset to any older
  1022. one. You do not have to select the same old charset than what you
  1023. selected for the previous routine.  Select any charset for which you
  1024. will not loose too much information while converting.  If the routine
  1025. has to read multiple bytes of the new charset before deciding which
  1026. character it will produce, you might write this routine in `lex';
  1027. otherwize, use C.  Prototype your routine after one of those which
  1028. exists, so to keep the sources uniform.
  1029.  
  1030.    Edit `Makefile' to add the object name of your two routines to the
  1031. `C_STEPS' or `L_STEPS' macro definition, depending on the fact your
  1032. routines is written in C or in `lex'.  Then edit `steps.h' in the four
  1033. following places:
  1034.  
  1035.   1. Create a symbol for your new charset in `enum TYPE_code'
  1036.      definition.
  1037.  
  1038.   2. Add the option name of your new charset in `code_keywords'
  1039.      initialization.
  1040.  
  1041.   3. Add two `extern' declarations for your routines at the appropriate
  1042.      places.
  1043.  
  1044.   4. Add two lines in `single_steps' array initialization to declare
  1045.      your routines.  For each line, include the four following fields:
  1046.  
  1047.        1. The function name of your routine.
  1048.  
  1049.        2. The starting code `enum' constant, that is, the code your
  1050.           routine *reads*.
  1051.  
  1052.        3. The goal code `enum' constant, that is, the code your routine
  1053.           *produces*.
  1054.  
  1055.        4. The cost of your routine, using the predefined constants
  1056.           `STEP', `LOOSE', `EXACT', `SLOW' and `FAST'.  See the comments
  1057.           for the exact meaning of each of these and follow the
  1058.           examples.  Respect these meanings and be honest with the
  1059.           costs!
  1060.  
  1061.      In some circumstances, one of your routines would be a mere copy. 
  1062.      It is better in this case to not provide the routine, but still
  1063.      declare it in `single_steps' using `NULL' as its function name and
  1064.      `ALREADY' *alone* as its cost.
  1065.  
  1066. 
  1067. File: recode.info,  Node: Future,  Prev: Internals,  Up: Top
  1068.  
  1069. Future things
  1070. =============
  1071.  
  1072.    I will be glad to hear critics and suggestions, even for details. 
  1073. This program is made up of hundreds of details, in fact.  Write to
  1074. `pinard@iro.umontreal.ca'.
  1075.  
  1076.    Some notes and suggestions.
  1077.  
  1078.    * Accept abbreviations for charsets on the command call.  Accept more
  1079.      than one conversion with intermediate filters in a single call.
  1080.  
  1081.    * Support Universite de Montreal "accent" convention.
  1082.  
  1083.    * Support `[nt]roff' diacritics.
  1084.  
  1085.    * Support the Atari-ST internal code.
  1086.  
  1087.    * Segregate charsets and usages.
  1088.  
  1089.    * Is there some way of specifying that recode should not contract
  1090.      something that looks like an accent?  Like "There\'s a meeting at
  1091.      Archie\'s restaurant"?  (With corresponding insertion of
  1092.      backslashes or whatevers when converting the other way, of course
  1093.      - the transformation from accented to ascii should be exactly
  1094.      invertable in all cases.) Of course, There\'s will not be
  1095.      contracted.
  1096.  
  1097.  
  1098. 
  1099. Tag Table:
  1100. Node: Top850
  1101. Node: Usage4110
  1102. Node: Charsets8392
  1103. Node: applemac9422
  1104. Node: ascii9723
  1105. Node: Commented ASCII10698
  1106. Node: Octal ASCII12314
  1107. Node: Decimal ASCII13465
  1108. Node: Hexadecimal ASCII14542
  1109. Node: bangbang15575
  1110. Node: Display Code17531
  1111. Node: cccascii18896
  1112. Node: cdcascii19180
  1113. Node: cdcnos19529
  1114. Node: ebcdic21422
  1115. Node: flat21679
  1116. Node: ibmpc22291
  1117. Node: iconqnx22544
  1118. Node: latex22865
  1119. Node: latin123083
  1120. Node: Commented Latin-123457
  1121. Node: Octal Latin-127856
  1122. Node: Decimal Latin-129048
  1123. Node: Hexadecimal Latin-130246
  1124. Node: texte31334
  1125. Node: Easy French31640
  1126. Node: French quotes32607
  1127. Node: Latin ligatures32876
  1128. Node: Diacritics33198
  1129. Node: Ending diaeresis35198
  1130. Node: Easy French History36949
  1131. Node: Internals37782
  1132. Node: Main flow38219
  1133. Node: Piping39174
  1134. Node: Limitations39562
  1135. Node: New charsets39971
  1136. Node: Future42609
  1137. 
  1138. End Tag Table
  1139.