home *** CD-ROM | disk | FTP | other *** search
/ Languages Around the World / LanguageWorld.iso / language / russian / cyrilic2 / addpage.doc < prev    next >
Text File  |  1989-06-22  |  14KB  |  353 lines

  1.                    ADDPAGE
  2.                 Dimitri Vulis
  3.                Department of Mathematics
  4.                  CUNY Graduate Center
  5.                   33 W 42 St
  6.                 New York, NY 10036-8099
  7.                       USA
  8.  
  9.                   dlv@cunyvms1.bitnet
  10.  
  11.                  June 22, 1989
  12.  
  13. 1. General overview:
  14.  
  15. MS/PC DOS 3.3 (and later) is distributed with the following code pages:
  16.  
  17. 437  - USA
  18. 865  - Norway
  19. 860  - Portuguese
  20. 863  - Canada-French
  21. 850  - Multilingual
  22.  
  23. This package will allow you to patch your copy of DOS to add more code pages. A
  24. Cyrillic code page, arbitrarily numbered 880, corresponding to the standards ISO
  25. 8859 part 5, ECMA 113 and GOST 19768-74 is provided with the package. There is
  26. also an INCOMPLETE Greek code page, arbitrarily numbered 890, corresponding to
  27. the standards ECMA 118 and ISO 8859-3 (and hence the appropriate ELOT standard)
  28. (see below).
  29.  
  30. Hardware requirements: you have to have EGA, VGA or MCGA to use code pages. DOS
  31. code pages don't work with CGA or Hercules.
  32.  
  33. Once the Cyrillic code page is loaded and selected, you will be able to
  34. correctly display on your screen documents that contain Cyrillic text coded in
  35. accordance with the above standards, in particular GOST-coded (Soviet) text.
  36.  
  37. In addition, a TSR program called KEYBRU will redefine your keyboard into a
  38. standard Russian layout when ScrollLock is pressed. This program will allow you
  39. to type in Russian text. Unfortunately, there is no easy way to patch DOS
  40. (KEYBOARD.SYS) to add an additional keyboard layout.
  41.  
  42. In order to print out Cyrillic documents you need standard font(s) for your
  43. particular printer. A downloadable font for Epson FX (9-pin) is included. One of
  44. the updates for this program will include downloadable fonts for HP LJ. A
  45. technique for printing out Cyrillic documents using TeX and American Math
  46. Society's Cyrillic fonts is provided.
  47.  
  48. A Russian version of TeX, Donald Knuth's typesetting system, is currently being
  49. developed at various sites. A set of Russian hyphenation patterns is included.
  50.  
  51. 2. The code pages.
  52.  
  53. ISO 8859-3/ECMA-113 includes the characters necessary to handle Russian,
  54. Bulgarian, Byelorussian, Macedonian, Serbocroatian and Ukrainian text.
  55.  
  56. The positions of the Russian letters coincide with GOST. The positions of
  57. Serbian letters in ISO 8859-5 do NOT coincide with the Jugoslavian standard JUS
  58. I.B1.003, ISO registration 146/147.
  59.  
  60. Several additional rasters that may be useful for Russian text (obsolete
  61. letters and guillemets) have been placed in the unused positions. Depending on
  62. your applications, you may want to replace some Serbian characters with them.
  63.  
  64. I made an effort to make Russian letters shapes distinct from usually identical
  65. Latin letters, e.g. Russian ░ and Latin A. The shapes generally resemble those
  66. produced by Soviet DP equipment. If you improve the shape of any of the
  67. letters in 880.ASM, please let me know.
  68.  
  69. The Greek code page includes the characters necessary to handle Modern Greek
  70. text. The only accents are diaeresis and tonos. It does nor include asper,
  71. lenis, acute, grave, circumflex accents and their combinations that are
  72. necessary for Classical Greek.
  73.  
  74. I lack the expertise to draw the remaining Greek rasters. Although many people
  75. have expressed interest in a Greek code page, no one has been willing to write
  76. the rasters. I am distributing 890.ASM with most characters missing, hoping
  77. that someone will volunteer to complete it.
  78.  
  79. 3. The keyboard driver.
  80.  
  81. Only the Russian keyboard driver is provided. Scroll Lock switches between
  82. Russian and Latin keyboards. The layout is:
  83.  
  84. ≡  ²  /  "  :  ,  .  ;  ?  ò  <  > (Alt-1, etc)
  85. 1  2  3  4  5  6  7  8    9  0  - =
  86.  
  87. ┘  µ  π  ┌  ╒  ▌  ╙  Φ    Θ  ╫  σ Ω
  88. q  w  e  r  t  y  u  i    o  p  [ ]
  89.  
  90. Σ  δ  ╥  ╨  ▀  α  ▐  █    ╘  ╓  φ
  91. a  s  d  f  g  h  j  k    l  ;  '
  92.  
  93. ∩  τ  ß  ▄  ╪  Γ  ∞  ╤    ε  ±
  94. z  x  c  v  b  n  m  ,    .  /
  95.  
  96. The funny symbols should be displayed at Russian letters if you've installed
  97. the code page properly.
  98.  
  99. Most newer Soviet keyboards have the /? key in the same place as US keyboards
  100. do. I put the ± character here, like on a typewriter, since it is used by
  101. students of Russian. If you don't need this character, you may want to edit
  102. KEYBRU.ASM and comment out the 2 relevant lines. Soviet keyboards have 2 extra
  103. keys (as do most European keyboards): <> and *. For this reason, in Russian
  104. mode some punctuation marks can only be obtained using Alt- and a key in the
  105. upper row.
  106.  
  107. Like any TSR (terminate and stay resident) program, KEYBRU may interfere with
  108. the normal operation of your computer. Whenever this happens, try changing the
  109. order in which your TSRs are loaded.
  110.  
  111. Caps Lock does not work properly for several keys. Also Scroll Lock is examined
  112. when the character is dequeued, not when it is enqueued, which changes nothing,
  113. unless you type ahead while switching between Russian and Latin modes. These
  114. problems would not occur if I could include the keyboard in KEYBOARD.SYS.
  115.  
  116. Later versions of this package may include standard Serbian, Ukrainian, etc,
  117. keyboard layouts as well. Please let me know if you know what these layouts
  118. are.
  119.  
  120. The standard Greek keyboard layout includes dead keys; one has to really
  121. include it in KEYBOARD.SYS.
  122.  
  123. 4. Installation.
  124.  
  125. Notation: DOS directory is usually the root. Work directory may be a floppy
  126. disk (A:). Make sure the following files are available:
  127.  
  128. EGA.CPI in the DOS directory (from your DOS distribution disk).
  129. DISPLAY.SYS in the DOS directory (from your DOS distribution disk).
  130.  
  131. MODE.COM on your PATH (from your DOS distribution disk).
  132. KEYBRU.COM on your PATH (from this archive).
  133.  
  134. 880.CP and ADDPAGE.BAS in the work directory (from this archive).
  135.  
  136. Run the basic program ADDPAGE as follows:
  137.  
  138. ------------------->Type:
  139.  
  140. C>            BASIC A:ADDPAGE
  141. CPI filename:          \DOS\EGA.CPI         (or just \EGA.CPI etc)
  142. Target codepage:    880
  143. In or Out?        I
  144. CP filename:         A:880.CP            (or whereever)
  145. Code page not in file---replacing...
  146. <long wait>
  147. Ok
  148.             SYSTEM
  149. -----
  150.  
  151. Erase 880.CP and ADDPAGE.BAS from your hard disk, you don't need them anymore.
  152.  
  153. Use your favorite editor to add the following to your CONFIG.SYS:
  154.  
  155. DEVICE=C:\DOS\DISPLAY.SYS CON:=(EGA,437,(1,3))
  156.  
  157. If you are using EGA, not VGA, change the last 3 to 2.
  158.  
  159. (You have to say 'EGA' even if you're really using a VGA. 1 is the number of
  160. code pages you are going to load; increase this number if you want to load
  161. other pages. 3 is the number of font variants; 3 is for VGA (16, 14 and 8
  162. pixels high); 2 is for EGA (only 14 and 8). See your DOS manual if you need
  163. more info.)
  164.  
  165. Use your favorite editor to add the following to your AUTOEXEC.BAT:
  166.  
  167. MODE CON CP PREPARE=((880) \DOS\EGA.CPI)
  168. MODE CON CP SELECT=880
  169. KEYBRU
  170.  
  171. Reboot.
  172.  
  173. You can switch the code pages anytime using
  174. MODE CON CP SELECT=437
  175. for U.S. page and
  176. MODE CON CP SELECT=880
  177. for Cyrillic page. CHCP won't work.
  178.  
  179. 5. Printing
  180.  
  181. To print Russian text on a 9-pin Epson FX printer, first send the downloadable
  182. font in EPSON9.FNT to the printer: COPY/B EPSON9.FNT PRN. If you print from
  183. within a word processor, make sure it does not reset the printer and delete the
  184. fonts before you print.
  185.  
  186. The enclosed program TRR.C will translate Russian characters in STDIN into calls
  187. to AMS Cyrillic fonts for TeX in STDOUT. It is assumed that \mcyr is defined as
  188. a font or font family. (Just say \font\mcyr=mcyr10, if you're not sure.) This
  189. has been tested with both Plain TeX and LaTeX. Unfortunately, this approach is
  190. not compatible with TeX's hyphenation algorithm.
  191.  
  192. 6. Hyphenation
  193.  
  194. The file RUSSHYPH.PAT contains an improved version of the patterns presented in
  195. my M.A. thesis, "An Implementation of Liang's Algorithm for the Russian
  196. language", submitted to CCNY in October of 1988. The patterns find all the valid
  197. and no invalid hyphens in a 50,000+ word dictionary (including inflections). The
  198. main improvements, compared with the thesis, are:
  199.  
  200. a) I fixed a few incorrect hyphenations, e.g., ▀▐-▄▌╪Γ∞, from ▀▐▄-▌╪Γ∞, etc. I
  201. also keyed in the balance of the dictionary, and added a few words supplied by
  202. A. Samarin (see below).
  203.  
  204. b) All the technical terms that I could find that are borrowed from German,
  205. Dutch, English, etc, are hyphenated correctly.
  206.  
  207. c) The patterns won't split a single vowel off a part of many compound words.
  208. Thus, ▀α∩▄▐π-╙▐█∞▌╪┌, ╤╪-▐█▐╙, ▌╒▐-╤δτ▌δ┘, ▌╒-▐Σ╨Φ╪╫▄, etc, are now suppressed.
  209. (Such breaks are not strictly illegal, but certainly offensive, and a good break
  210. is just 1 letter away.)
  211.  
  212. d) The patterns will handle many common abbreviations, such as ╤▐αΓ-▀α▐╥▐╘▌╪µ╨,
  213. ▀╨αΓ-πτ╒╤╨, ┌▐▄ß-▐α╙, etc. (Most such words are not considered to be part of the
  214. language, but occur often in certain kinds of texts.)
  215.  
  216. Although (c) and (d) sound like neat tricks, such words usually fit one of the
  217. common patterns. I used a slightly modified PATGEN, running on a Kouwei computer
  218. from Barry Hu, Microstar, to generate the patterns. PATGEN is an extremely
  219. powerful tool, and I would never have generated such good patterns without it.
  220. Like PATGEN says,
  221.  
  222. 127685 good, 0 bad, 0 missed
  223.  
  224. In April of 1989 I was informed by Alexander Samarin of the Institute for High
  225. Energy Physics in Serpukhov, USSR, currently at CEARN, that an algorithm for
  226. automatic hyphenation of Russian words was developed at IHEP and a preprint was
  227. published in 1983. I was unable to get the paper or the algorithm. Alexander
  228. Samarin kindly sent me a file with about 21,000 inflected Russian words, for
  229. which I am very grateful.
  230.  
  231. These patterns are 'final', in a sense that I don't expect to change or improve
  232. them in the future. I am not aware of any Russian words that are not hyphenated
  233. correctly by the patterns. It is possible to manufacture abbreviations (4) that
  234. won't be broken up completely, although invalid breaks are unlikely. It is very
  235. hard to find a compound word (3) where a single vowel might be split off. Of
  236. course, if you use the patterns and find any word that's not fully and correctly
  237. hyphenated, please let me know.
  238.  
  239. The patterns, meant as input to Liang's algorithm, consist of strings of
  240. letters and digits, where a digit placed between two letters indicates a
  241. `hyphenation value' for its position. Odd values permit breaks; even values
  242. (including zero, assumed when the digit is omitted) prohibit breaks. The text
  243. processing program finds all the patterns whose letters match part of the word,
  244. takes the maximum hyphenation value for each position between letters and examines
  245. its parity to exhibit the legal breaks.
  246.  
  247. I have been told that both Microsoft Word and WordPerfect use Liang's algorithm
  248. for hyphenation, but have English patterns hardwired.
  249.  
  250. 7. Possible problems
  251.  
  252. Q: The installation is too complex.
  253.  
  254. A: I cannot give out patched out EGA.CPI because it's copyrighted. Ask someone
  255. to help.
  256.  
  257. Q: BASIC won't run on this machine.
  258.  
  259. A: Do the installation on another machine that has BASIC, and then copy
  260. EGA.CPI.
  261.  
  262. Q: KEYBRU conflicts with other TSRs.
  263.  
  264. A: Sigh. Try changing the order in which the TRSs are loaded. A better solution
  265. would be to add the Russian keyboard layout to KEYBOARD.SYS and to use a
  266. vanilla DOS KEYB command; alas, I was unable to do it.
  267.  
  268. Q: Why does WordPerfect misinterpret some of the Russian letters?
  269.  
  270. A: I don't know. Typing lowercase p α (224) causes WP to look for a file
  271. "alth.wmp". This is a problem with WP, not with the keyboard driver.
  272.  
  273. Q: Is it possible to change the codes for some of the letters?
  274.  
  275. A: Yes, you can alter 880.ASM, and MASM/LINK/EXE2BIN it to obtain 880.CP, and
  276. then repeat the installation. The resulting code page will not be compatible
  277. with 880, so it should be given a different number. This is not a good idea.
  278.  
  279. 8. Technical remark
  280.  
  281. Here is some C code that uses code pages:
  282.  
  283. #include <stdio.h>
  284. #include <dos.h>
  285.  
  286. main()
  287. {
  288.  union REGS regs;
  289.  union SREGS sregs;
  290.  unsigned filhandl=0; /* or open /dev/con */
  291.  int *foo; /* model= compact! A 32-bit pointer */
  292.  short hwcpcount,prepcpcount;
  293.  int i;
  294.  
  295.  regs.x.bx=filhandl;        /* handle for STDIN, hopefully=/dev/con */
  296.  regs.h.ah=0x44;        /* IOCTL */
  297.  regs.h.al=0x00;        /* get info */
  298.  intdosx(®s,®s,&sregs);
  299.  if (!(regs.x.dx&0x4000))      /* code page supported bit */
  300.      {
  301.      printf("Code page not supported by STDIN");
  302.      return;
  303.      }
  304.  regs.h.ah=0x44;        /* IOCTL */
  305.  regs.h.al=0x0c;        /* generic character IOCTL */
  306.  regs.x.bx=filhandl;
  307.  regs.h.ch=0x03; /*console?*/
  308.  regs.h.cl=0x6b;        /* query prepared code pages */
  309.  intdosx(®s,®s,&sregs);
  310.  foo=(int *)((sregs.ds<<16)+regs.x.dx);
  311.  foo++; /* # bytes returned */
  312.  hwcpcount=*foo++;
  313.  printf("%d hardware pages: ",hwcpcount);
  314.  for (i=0; i<hwcpcount; i++ )
  315.   printf("%d ",*foo++);
  316.  prepcpcount=*foo++;
  317.  printf("%d prepared pages: ",prepcpcount);
  318.  for (i=0; i<prepcpcount; i++ )
  319.   printf("%d ",*foo++);
  320. }
  321.  
  322. 8. Credits, acknowledgements, etc
  323.  
  324. The contents of this archive are placed in public domain; all copyright is
  325. waived. You may use it as you please.
  326.  
  327. If you find this package useful, please let me know at:
  328.  
  329. DLV@CUNYVMS1.BITNET
  330.  
  331. or:
  332.  
  333. Dimitri Vulis
  334. Department of Mathematics
  335. CUNY Graduate Center
  336. New York, NY 10036-8099
  337. U.S. of A.
  338.  
  339. (Note: never use my old "529 W 111th" address listed in some directories!)
  340.  
  341. I may then notify you of updates (this is more likely if you provide a e-mail
  342. address reachable from BITNET).
  343.  
  344. Feel free to comment on the letter shapes. I always appreciate constructive
  345. criticism.
  346.  
  347. I would like to thank Burton Randol, Giorgio Mantzivis, Johann van
  348. Wingen, Donald Parsons and my father L.N.Klyukvin for their help with
  349. this project.
  350.  
  351. You may try contacting your DOS OEM and asking them to include the Cyrillic and
  352. Greek code pages in their standard DOS distribution.
  353.