The Linux Cyrillic HOWTO
 Alexander L. Belikoff, ([email protected]), Berger Financial
 Research Ltd.
 v4.0, 23 January 1998

 This document describes how to set up your Linux box to typeset, view
 and print the documents in the Russian language.
 ______________________________________________________________________

 Table of Contents
























































 1. Administrativia

    1.1 Introduction
    1.2 Availability and feedback
    1.3 Acknowledgments and copyrights

 2. Theoretical background

    2.1 Characters and codesets

 3. Preparing your environment

    3.1 Text mode setup
       3.1.1 Linux Console
       3.1.2 FreeBSD Console
    3.2 The X Window System
       3.2.1 The X fonts.
       3.2.2 The input translation
    3.3 First steps - Cyrillic in shells
    3.4 bash
    3.5 csh/tcsh
    3.6 ksh
    3.7 less
    3.8 mc (The Midnight Commander)
    3.9 rlogin
    3.10 zsh

 4. Editing text

    4.1 Emacs and XEmacs
    4.2 Using vi
    4.3 Editing text with joe
    4.4 Spell-checking Russian

 5. Using Cyrillic with mail and news

    5.1 Setting up Mail User Agents
       5.1.1 Emacs-based mail readers
       5.1.2 pine
    5.2 Configuring your MTA
       5.2.1 sendmail
       5.2.2 Other MTAs

 6. Browsing the Cyrillic Web

    6.1 lynx
    6.2 Netscape navigator
       6.2.1 Basic setup
       6.2.2 Cyrillic text in frames and input areas
       6.2.3 Advanced setup

 7. Cyrillic wordprocessing

    7.1 TeX-based environments
       7.1.1 Using the Washington Cyrillic
       7.1.2 KOI-8 package for teTeX
       7.1.3 Using the cmcyralt package for LaTeX
       7.1.4 Using the CyrTUG package
    7.2 The StarOffice suite

 8. Printing and PostScript

    8.1 Text to PostScript conversion
       8.1.1 An a2ps converter
       8.1.2 The GNU enscript
    8.2 Text to TeX conversion
 9. Cyrillic in PostScript

    9.1 Adding Cyrillic fonts to Ghostscript

 10. Print setup

    10.1 Pre-loading Cyrillic fonts into a non-PostScript printer
    10.2 Printing with different fonts

 11. Localization and Internationalization

    11.1 Locale
       11.1.1 How to use locale
       11.1.2 Locale-aware programming
    11.2 Internationalization

 12. Staying compatible

    12.1 MIME-based data compatibility
    12.2 Explicit character set conversion
    12.3 Cyrillic in the DOS emulator

 13. Bibliography

 14. Summary of the various useful resources



 ______________________________________________________________________

 11..  AAddmmiinniissttrraattiivviiaa



 11..11..  IInnttrroodduuccttiioonn


 This document covers the things you need to successfully work with
 information containing cyrillic text (mostly Russian) under Linux.
 Although this document assumes your using Linux as an operating
 system, most of information presented is equally applicable to many
 other Unix flavors. I shall try to keep the distinction as visible as
 possible.

 There are a number of popular Linux distributions. As an example
 system I describe the RedHat 4.1 Linux (Vanderbildt) - the one I am
 personally using. Nevertheless, I shall try to highlight the
 differences, if they exist, in other popular distributions, such as
 Debian GNU/Linux and Slackware Linux.

 Since such setup directly modifies and extends the Operating System,
 you should understand, what you are doing. Even though I tried to keep
 things as easy as possible, having some experience with a given piece
 of software is an advantage. I am not going to describe what the X
 Window System is or how to typeset the documents with TeX and LaTeX,
 or how to install printer in Linux. Those issues are covered in other
 documents.

 For the same reason, in most cases I describe a system-wide setup, by
 default requiring _r_o_o_t privileges. Still, if there is a possibility
 for user-level setup, I'll try to mention it.

 NNOOTTEE:: The X Window System, TeX and other Linux components are complex
 systems with a sofisticated configuration. If you do something wrong,
 you can not only fail with Russian setup, but to break the component
 as well, if not the entire system. This is not to scare you off, but
 merely to make you understand the seriousness of the process and be
 careful. Preliminary backup of the config files is hhiigghhllyy recommended.
 Having a guru around is also advantageous.




 11..22..  AAvvaaiillaabbiilliittyy aanndd ffeeeeddbbaacckk


 This document is available at sunsite.unc.edu or tsx-11.mit.edu as a
 part of the _L_i_n_u_x _D_o_c_u_m_e_n_t _P_r_o_j_e_c_t. Also, it may be available at
 various FTP sites containing Linux. Moreover, it may be included as a
 part of Linux distribution.

 If you have any suggestions or corrections regarding this document,
 please, don't hesitate to contact me as [email protected]. Any new and
 useful information about Cyrillic support in various Unices is _h_i_g_h_l_y
 _a_p_p_r_e_c_i_a_t_e_d. Remember, it will help the others.



 11..33..  AAcckknnoowwlleeddggmmeennttss aanndd ccooppyyrriigghhttss


 Many people helped me (and not only me) with valuable information and
 suggestions. Even more people contributed software to the public
 community. I am sorry if I forgot to mention somebody.

 So, here they go:


 +o  Bas V. de Bakker

 +o  David Daves

 +o  Serge Vakulenko

 +o  Sergei O. Naoumov

 +o  Winfried Truemper

 +o  Ilya K. Orehov

 +o  Michael Van Canneyt

 +o  Alex Bogdanov

 +o  ...and the countless helpful people from the relcom.fido.ru.unix
    and relcom.fido.ru.linux Usenet newsgroups.

 This document is Copyright (C) 1995,1997 by Alexander L. Belikoff. It
 may be used and distributed under the usual Linux HOWTO terms
 described below.

 The following is a Linux HOWTO copyright notice:


      _U_n_l_e_s_s _o_t_h_e_r_w_i_s_e _s_t_a_t_e_d_, _L_i_n_u_x _H_O_W_T_O _d_o_c_u_m_e_n_t_s _a_r_e _c_o_p_y_-
      _r_i_g_h_t_e_d _b_y _t_h_e_i_r _r_e_s_p_e_c_t_i_v_e _a_u_t_h_o_r_s_. _L_i_n_u_x _H_O_W_T_O _d_o_c_u_m_e_n_t_s
      _m_a_y _b_e _r_e_p_r_o_d_u_c_e_d _a_n_d _d_i_s_t_r_i_b_u_t_e_d _i_n _w_h_o_l_e _o_r _i_n _p_a_r_t_, _i_n
      _a_n_y _m_e_d_i_u_m _p_h_y_s_i_c_a_l _o_r _e_l_e_c_t_r_o_n_i_c_, _a_s _l_o_n_g _a_s _t_h_i_s _c_o_p_y_r_i_g_h_t
      _n_o_t_i_c_e _i_s _r_e_t_a_i_n_e_d _o_n _a_l_l _c_o_p_i_e_s_. _C_o_m_m_e_r_c_i_a_l _r_e_d_i_s_t_r_i_b_u_t_i_o_n
      _i_s _a_l_l_o_w_e_d _a_n_d _e_n_c_o_u_r_a_g_e_d_; _h_o_w_e_v_e_r_, _t_h_e _a_u_t_h_o_r _w_o_u_l_d _l_i_k_e _t_o
      _b_e _n_o_t_i_f_i_e_d _o_f _a_n_y _s_u_c_h _d_i_s_t_r_i_b_u_t_i_o_n_s_.

      _A_l_l _t_r_a_n_s_l_a_t_i_o_n_s_, _d_e_r_i_v_a_t_i_v_e _w_o_r_k_s_, _o_r _a_g_g_r_e_g_a_t_e _w_o_r_k_s
      _i_n_c_o_r_p_o_r_a_t_i_n_g _a_n_y _L_i_n_u_x _H_O_W_T_O _d_o_c_u_m_e_n_t_s _m_u_s_t _b_e _c_o_v_e_r_e_d
      _u_n_d_e_r _t_h_i_s _c_o_p_y_r_i_g_h_t _n_o_t_i_c_e_.  _T_h_a_t _i_s_, _y_o_u _m_a_y _n_o_t _p_r_o_d_u_c_e _a
      _d_e_r_i_v_a_t_i_v_e _w_o_r_k _f_r_o_m _a _H_O_W_T_O _a_n_d _i_m_p_o_s_e _a_d_d_i_t_i_o_n_a_l _r_e_s_t_r_i_c_-
      _t_i_o_n_s _o_n _i_t_s _d_i_s_t_r_i_b_u_t_i_o_n_. _E_x_c_e_p_t_i_o_n_s _t_o _t_h_e_s_e _r_u_l_e_s _m_a_y _b_e
      _g_r_a_n_t_e_d _u_n_d_e_r _c_e_r_t_a_i_n _c_o_n_d_i_t_i_o_n_s_; _p_l_e_a_s_e _c_o_n_t_a_c_t _t_h_e _L_i_n_u_x
      _H_O_W_T_O _c_o_o_r_d_i_n_a_t_o_r _a_t _t_h_e _a_d_d_r_e_s_s _g_i_v_e_n _b_e_l_o_w_.



      _I_n _s_h_o_r_t_, _w_e _w_i_s_h _t_o _p_r_o_m_o_t_e _d_i_s_s_e_m_i_n_a_t_i_o_n _o_f _t_h_i_s _i_n_f_o_r_m_a_-
      _t_i_o_n _t_h_r_o_u_g_h _a_s _m_a_n_y _c_h_a_n_n_e_l_s _a_s _p_o_s_s_i_b_l_e_. _H_o_w_e_v_e_r_, _w_e _d_o
      _w_i_s_h _t_o _r_e_t_a_i_n _c_o_p_y_r_i_g_h_t _o_n _t_h_e _H_O_W_T_O _d_o_c_u_m_e_n_t_s_, _a_n_d _w_o_u_l_d
      _l_i_k_e _t_o _b_e _n_o_t_i_f_i_e_d _o_f _a_n_y _p_l_a_n_s _t_o _r_e_d_i_s_t_r_i_b_u_t_e _t_h_e _H_O_W_T_O_s_.


 If you have questions, please contact Tim Bynum, the Linux HOWTO
 coordinator, at [email protected]. You may finger this
 address for phone number and additional contact information.

 Unix is a technology trademark of the X/Open Ltd.; MS-DOS, Windows,
 Windows 95, and Windows NT are trademarks of the Microsoft Corp.; The
 X Window System is a trademark of The X Consortium Inc. Other
 trademarks belong to the appropriate holders.



 22..  TThheeoorreettiiccaall bbaacckkggrroouunndd



 22..11..  CChhaarraacctteerrss aanndd ccooddeesseettss


 In order to understand and print characters of various languages, the
 system and software should be able to distinguish them from other
 characters. That is, each unique character must have a unique
 representation inside the operating system, or the particular software
 package. Such collection of all unique characters, that the system is
 able to represent at once, is called a _c_o_d_e_s_e_t.

 At the time of the most operating system's creation, nobody cared
 about software being multilingual. Therefore, the most popular codeset
 was (and actually is) an _A_S_C_I_I (American Standard Code for Information
 Interchange).

 The _s_t_a_n_d_a_r_d _A_S_C_I_I (aka 7-bit ASCII) comprises 128 unique codes. Some
 of them ASCII defines as real printable characters, and some are so-
 called _c_o_n_t_r_o_l _c_h_a_r_a_c_t_e_r_s, which had special meanings in the old
 communication protocols. Each element of the set is identified by an
 integer _c_h_a_r_a_c_t_e_r _c_o_d_e (0-127). The subset of printable characters
 represents those found on the typewriter's keyboard with some minor
 additions. Each character occupies 7 least significant bits of a byte,
 whereas the most significant one was used for control purposes (say,
 transmission control in old communication packages).

 The 7-bit ASCII concept was extended by 8-bit ASCII (aka _e_x_t_e_n_d_e_d
 _A_S_C_I_I). In this codeset, the characters' codes' range is 0-255. The
 lower half (0-127) is pure ASCII, whereas the upper one contains 127
 more characters. Since this codeset is backward compatible with the
 ASCII (character still occupies 8 bit, the codes correspond the old
 ASCII), this codeset gained wide popularity.

 The 8-bit ASCII doesn't define the contents of the upper half of the
 codeset. Therefore the ISO organization took the responsibility of
 defining a family of standards known as _I_S_O _8_8_5_9_-_X family. It is a
 collection of 8-bit codesets, where the lower half of each codeset
 (characters with codes 0-127) matches the ASCII and the upper parts
 define characters for various languages. For example, the following
 codesets are defined:


 +o  8859-1 - Europe, Latin America (also known as _L_a_t_i_n _1)

 +o  8859-2 - Eastern Europe

 +o  8859-5 - Cyrillic

 +o  8859-8 - Hebrew

 In Latin 1, the upper half of the table defines various characters
 which are not part of the English alphabet, but are present in various
 european languages (german umlauts, french accentes etc).

 Another popular extended ASCII implementation is so-called _I_B_M
 _c_o_d_e_p_a_g_e (named after some computer company, that developed this
 codeset for it's infamous personal computers). This one contains
 pseudo-graphic characters in the upper half.

 Software, that doesn't make any assumptions about the 8-th bit of the
 ASCII data is called _8_-_b_i_t _c_l_e_a_n. Some older programs, designed with
 7-bit ASCII in mind are not 8-bit clean and may work incorrectly with
 your extended ASCII data. Most of packages, however, are able to deal
 with the extended ASCII by default, or require some very basic setup.
 NNOOTTEE:: before posting the question _"_I _d_i_d _a_l_l _s_e_t_u_p _r_i_g_h_t_, _b_u_t _I _c_a_n_n_o_t
 _e_n_t_e_r_/_v_i_e_w _C_y_r_i_l_l_i_c _c_h_a_r_a_c_t_e_r_s_!_", please consult the section ``'' for
 the notes on the program, you are using.

 For information about making your software 8-bit clean, see section
 ``''.

 Since on most systems character occupies 8 bits, there is no way to
 extend ASCII more and more. The way to implement new symbols in ASCII-
 based codesets is creation of other extended ASCII implementations.
 This is the way, the Cyrillic ASCII set is implemented.

 We already mentioned _I_S_O _8_8_5_9_-_5 standard as the one defining the
 Cyrillic codeset. But as it often happens to the standards, this one
 was developed without taking into account the real practices in the
 former USSR. Therefore, one thing that standard really achieved was
 another degree of confusion. I wouldn't say that _I_S_O _8_8_5_9_-_5 is widely
 used anywhere.

 Other standards for Cyrillic include the so-called _A_l_t codeset and
 _M_i_c_r_o_s_o_f_t _C_P_1_2_5_1 codepage. The former one was developed by (who?) for
 MS-DOS quite a while ago. Back then, there was not very buzz yet about
 internetworking, so the intention was to make it as compatible as
 possible with the IBM standard. Therefore the Alt codeset is
 effectively the same IBM codepage, where all specific European
 characters in the upper half were replaced with the Cyrillic ones,
 leaving the pseudographic ones. Therefore, it didn't screw the text
 windowing facilities and provided Cyrillic characters as well.  The
 _A_l_t standard is still alive and extremely popular in MS-DOS.

 _M_i_c_r_o_s_o_f_t _C_P_1_2_5_1 _c_o_d_e_p_a_g_e is just an attempt of Microsoft to come up
 with the new standard for Cyrillic codeset in Windows. As far as I
 know, it is not compatible with anything else (not very surprizing,
 huh?)

 And finally there is _K_O_I_8_-_R. This one is also quite old, but it was
 designed wisely and nowadays the design points of it look really
 useful.
 Again, it is compatible with ASCII, and the Cyrillic characters are
 located in the upper half. But the main design point of _K_O_I_8_-_R is that
 the Cyrillic characters' positions must correspond to the English
 characters with the same phonetics. Namely, if we set the eighth bit
 of the English character 'a', we'll get the Cyrillic 'a'.  This means
 that, given the Cyrillic text written in KOI8-R, we can strip the
 eighth bit of each character _a_n_d _w_e _s_t_i_l_l _g_e_t _a _r_e_a_d_a_b_l_e _t_e_x_t_,
 _a_l_t_h_o_u_g_h _w_r_i_t_t_e_n _w_i_t_h _E_n_g_l_i_s_h _c_h_a_r_a_c_t_e_r_s_! This is very important now,
 since there are many mailers on the Internet, that just strip the
 eighth bit silently, being sure that every single soul on the face of
 the Earth speaks English.

 Not surprisingly, _K_O_I_8_-_R quickly became a de-facto standard for
 Cyrillic on the Internet. Andrew A. Chernov did a tremendous amount of
 work to make a standard in this area. He is an author of RFC 1489
 (_"_R_e_g_i_s_t_r_a_t_i_o_n _o_f _a _C_y_r_i_l_l_i_c _C_h_a_r_a_c_t_e_r _S_e_t_").

 These two standards differ only in positions of the cyrillic
 characters in the table (that is in cyrillic character codes).

 The principal difference is that the Alt codeset is used by MS-DOS
 users only, whereas KOI8-R is used in Unix, as well as in MS-DOS
 (though in the latter KOI8-R is much less popular). Since we are doing
 the right thing (namely working in the Unix operating system), we
 shall focuse mostly on KOI8-R.

 As for the ISO standard, it is more popular in Europe and the US as a
 standard for Cyrillic. The leader in Russia is definitely KOI8-R.

 There are other standards, which are different from ASCII and much
 more flexible. _U_n_i_c_o_d_e is most known. However, they are not
 implemented as good as the basic ones in Unix in general and  Linux in
 particular. Therefore, I am not describing them here.



 33..  PPrreeppaarriinngg yyoouurr eennvviirroonnmmeenntt


 Before we start customizing various parts of the system functionality,
 we have to set up a couple basic things. Most of tools described below
 assume that there are Cyrillic fonts available and a user is able to
 input Cyrillic characters. To make it true we have to configure the
 environment to provide both fonts and input facility for Cyrillic.

 There are effectively two interface models supported by Linux. One is
 the text mode, and the other one is the graphic mode, provided by the
 X Window System. Both require different setup, which will be described
 below.



 33..11..  TTeexxtt mmooddee sseettuupp


 Generally, the text mode setup is the easiest way to show and input
 Cyrillic characters. There is one significant complication, however:
 the text mode fonts and keyboard layout manipulations depend on
 terminal driver implementation. Therefore, there is no portable way to
 achieve the goal across different systems.

 Right now, I describe the way to deal with the Linux console driver.
 Thus, if you have another system, don't expect it to work for you.
 Instead, consult your terminal driver manual. Nevertheless, send me
 any information you find, so I'll be able to include it in further
 versions of this document.
 33..11..11..  LLiinnuuxx CCoonnssoollee


 The Linux console driver is quite a flexible piece of software. It is
 capable of changing fonts as well as keyboard layouts. To achieve it,
 you'll need the kbd package. Both RedHat and Slackware install kbd as
 part of a system.

 The kbd package contains keyboard control utilities as well as a big
 collection of fonts and keyboard layouts.

 Cyrillic setup with kkbbdd usually involves two things:


 1. Screen font setup. This is performed by the setfont program. The
    fonts files are located in /usr/lib/kbd/consolefonts.

    NNOOTTEE:: Never run the setfont program under X because it will hang
    your system. This is because it works with low-level video card
    calls which X doesn't like.

 2. Load the appropriate keyboard layout with the loadkeys program.

 NOTE: In RedHat 3.0.3, /usr/bin/loadkeys has too restrictive access
 permissions, namely 700 (rwx------). There are no reasons for that,
 since everyone may compile his own copy and execute it (the
 appropriate system calls are not root-only). Thus, just ask your
 sysadmin to set more reasonable permissions for it (for example, 755).

 The following is an excerpt from my cyrload script, which sets up the
 Cyrillic mode for Linux console:


 if [ notset.$DISPLAY != notset. ]; then
     echo "`basename $0`:  cannot run under X"
     exit
 fi

 loadkeys /usr/lib/kbd/keytables/ru.map
 setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
 mapscrn /usr/lib/kbd/consoletrans/koi2alt
 echo -ne "\033(K"              # the magic sequence
 echo "Use the right Ctrl key to switch the mode..."



 Let me explain it a bit. You load the appropriate keyboard mapping.
 Then you load a font corresponding to the _A_l_t codeset. Then, in order
 to be able to display text in _K_O_I_8_-_R correctly, you load a _s_c_r_e_e_n
 _t_r_a_n_s_l_a_t_i_o_n _t_a_b_l_e. What it does is a translation of _s_o_m_e characters
 from the upper half of the codeset to the _A_l_t encoding. The word
 'some' is crucial here - not all characters get translated, therefore
 some of them, like IBM pseudographic characters get unmodified to the
 screen and display correctly, since they are compatible with the _A_l_t
 codeset, as opposed to _K_O_I_8_-_R. To ensure this, run mmcc and pretend you
 are back to MS-DOS 3.3...

 Finally, the magic sequence is important but I have no idea what on
 the Earth it does. I stole/borrowed/learned it from German HOWTO back
 in 1994, when it was like the only national language oriented HOWTO.
 _I_f _y_o_u _h_a_v_e _a_n_y _i_d_e_a _a_b_o_u_t _t_h_i_s _m_a_g_i_c _s_e_q_u_e_n_c_e_, _p_l_e_a_s_e _t_e_l_l _m_e.

 Finally, for those purists, who don't wont to give the _A_l_t codeset a
 chance, I'm attaching yet another version of the script above, using
 native _K_O_I_8_-_R fonts.

 if [ notset.$DISPLAY != notset. ]; then
     echo "`basename $0`:  cannot run under X"
     exit
 fi

 loadkeys /usr/lib/kbd/keytables/ru.map
 setfont /usr/lib/kbd/consolefonts/koi-8x16
 echo "Use the right Ctrl key to switch the mode..."



 However, don't expect nice borders in your text mode-based windowing
 applications.

 Now you probably want to test it. Do the appropriate bash or tcsh
 setup, rerun it, then press the right Control key and make sure you
 are getting the cyrillic characters right. The 'q' key must produce
 russian "short i" character, 'w' generates "ts", etc.

 If you've screwed something up, the very best thing to do is to reset
 to the original (that is, US) settings. Execute the following
 commands:


 loadkeys /usr/lib/kbd/keytables/defkeymap.map
 setfont /usr/lib/kbd/consolefonts/default8x16



 NNOOTTEE:: unfortunately enough, the console driver is not able to preserve
 it's state (at least easily enough), while running the X Window
 System. Therefore, after you leave the X (or switch from it to a
 console), you have to reload the console russian font.



 33..11..22..  FFrreeeeBBSSDD CCoonnssoollee


 I am not using FreeBSD so I couldn't test the following information.
 All data in this section should be treated as just pointers to begin
 with. The FreeBSD project homepage may have some information on the
 subject. Another good source is the relcom.fido.ru.unix newsgroup.
 Also, check the resources listed in section ``''.

 Anyway, this is what Ilya K. Orehov suggests to do in order to make
 FreeBSD console speak Russian:


 1. In /etc/sysconfig add:



    keymap=ru.koi8-r
    keyrate=fast
    # NOTE: '^[' below is a single control character
    keychange="61 ^[[K"
    cursor=destructive
    scrnmap=koi8-r2cp866
    font8x16=cp866b-8x16
    font8x14=cp866-8x14
    font8x8=cp866-8x8




 2. In /etc/csh.login:


    setenv ENABLE_STARTUP_LOCALE
    setenv LANG ru_SU.KOI8-R
    setenv LESSCHARSET latin1



 3. Make analogous changes in /etc/profile



 33..22..  TThhee XX WWiinnddooww SSyysstteemm


 Like the console mode, the X environment also requires some setup.
 This involves setting up the input mode and the X fonts. Both are
 being discussed below.



 33..22..11..  TThhee XX ffoonnttss..


 First of all, you have to obtain the fonts having the Cyrillic glyphs
 at the appropriate positions.

 If you are using the most recent X (or XFree86) distribution, chances
 are, that you already have such fonts. In the late 1995, the X Window
 System incorporated a set of Cyrillic fonts, created by Cronyx. Ask
 your system administrator, or, if _y_o_u are the one, check your system,
 namely:


 1. Run 'xlsfonts | grep koi8'. If there are fonts listed, your X
    server is already aware about the fonts.

 2. Otherwise, run


    find -name crox\*.pcf\*



 to find the location of the Cyrillic fonts in the system. You'll have
 to enable those fonts to the X server, as I explain below.

 If you haven't found such fonts installed, you'll have to do it
 yourself.

 There is some ambiguity with the fonts. XFree86 docs claim that the
 russian fonts collection included in the distribution is developed by
 Cronyx. Nevertheless, you may find another set of Cronyx Cyrillic
 fonts on the net (eg. on ftp.kiae.su), known as the xxrruuss package
 (don't confuse it with the xrus program, which is used to setup a
 Cyrillic keyboard layout. Hopefully, tha letter one was renamed to
 xxrruusskkbb recently). XXrruuss has fewer fonts than the collection in Xfree86
 (38 vs 68), but the latter one didn't go along with my ``Netscape''
 setup - it gave me some really huge font in the menubar. The xxrruuss
 package doesn't have this problem.

 I would suggest you to download and try both of them. Pick up the one
 which you'll like more. Also, I'm going to creat RPM packages soon for
 both collections and download them to ftp.redhat.com.

 There are also older stuff, for example the vvaakkuuffoonnttss package, created
 by Serge Vakulenko, which was the base for the one in the X
 distribution. There are also a number of others. The important point
 is that the fonts' names in the old collection were not strictly
 conforming to the standard. The latter is fine in general, but
 sometimes it may cause various weird errors. For example, I had a bad
 experience with Maple V for Linux, which crashed mysteriously with the
 vvaakkuuffoonnttss package, but ran smoothly with the "standard" ones.

 So, let's start with the fonts:


 1. Download the appropriate fonts collection. The package for XFree86
    may be found at any FTP site, containing the X distribution, for
    example, directly from the XFree86 FTP site. The xxrruuss package may
    be found on ftp.kiae.su

 2. Now when you have the fonts, you create some directory for them. It
    is generally a bad idea to put new fonts to the already existing
    font directory. So, place them, to, say,
    /usr/lib/X11/fonts/cyrillic for a system-wide setup, or just create
    a private directory for personal use.

 3. If the new fonts are in BDF format (*.bdf files), you have to
    compile them. For each font do:


    bdftopcf -o <font>.pcf <font>.bdf



 If your server supports compressed fonts, do it, using the _c_o_m_p_r_e_s_s
 program:


 compress *.pcf



 Also, if you do want to put the new fonts to an already existing font
 directory. you have to concatenate the old and the new files named
 fonts.alias in the case both of them exist.

 4. Each font directory in the X must contain a list of fonts in it.
    This list is stored in the file fonts.dir. You don't have to create
    this list manually. Instead, do:


    cd <new font directory>
    mkfontdir .



 5. Now you have to make this font directory known to the X server.
    Here, you have a number of options:


 +o  System-wide setup for XFree86. If you are running this version of
    X, then append the new directory to the list of directories in the
    file XF86Config. To find the location of this file, see output of
    startx. Also, see XXFF8866CCoonnffiigg((44//55)) for details.

 +o  System-wide setup through xinit. Add the new directory to the xinit
    startup file. See xxiinniitt((11xx)) and the next option for details.


 +o  Personal setup. You have a special start-up file for the X -
    ~/.xinitrc (or ~/.Xclients, or ~/.xsession for the RedHat users).
    Add the following commands to it:



    xset +fp <new font directory>
    xset fp rehash



 It is important to note that '+fp' means that the new fonts will be
 added to the head of the font path list. That is, if an application
 requests say a fixed font, it'll be given the one with Cyrillic char-
 acters, which is definitely what we are trying to achieve.

 There are problems, though. The fixed font in the cyrillic fonts dis-
 tribution doesn't have it's bold and italic counterparts. My font of
 choice is 6x13, so, since it also lacks bold and italic typefaces, I
 cannot use Emacs/XEmacs faces in their full glory. Hopefully somebody
 will ultimately create those fonts and the situation will change.

 6. Now restart your X. If you have done everything right, the tests in
    the beginning of the section will be successful. Also, play with
    xxffoonnttsseell((11xx)) to make sure you are able to select the cyrillic
    fonts.

 In order to make the X clients use the Cyrillic fonts, you have to set
 up the appropriate X resources. For example, I make the russian font
 the default one in my ~/.Xdefaults:


 *font:         6x13



 Since my cyrillic fonts are first in the font path (see output of

 This just a simple case. If you want to set the appropriate part of
 the X client to a cyrillic font, you have to figure out the name of
 the resource (eg. using eeddiittrreess((11xx))) and to specify it either in the
 resource database, or in the command line. Here go some examples:


 $ xterm -font '-cronyx-*-bold-*-*-*-19-*-*-*-*-*-*-*'



 ...will run xterm with some ugly font; and


 $ xfontsel -xrm '*quitButton.font: -*-times-*-*-*-*-13-*-*-*-*-*-koi8-*'



 ...will set a Cyrillic Times font for the QQuuiitt button in xfontsel.



 33..22..22..  TThhee iinnppuutt ttrraannssllaattiioonn


 In the newest X releases (X11R61 and higher) there are two "standard"
 input methods: the original one, working through the xxmmooddmmaapp utility,
 and the new one called _X_k_b (X KeyBoard). The very first thing you have
 to do is ttoo ddiissaabbllee tthhee XXkkbb mmeetthhoodd!! Don't get charmed by it's ability
 to set up a "russian keyboard". It looks like this method is using the
 Cyrillic keysyms defined in keysymdef.h. This file defines keysyms for
 many languages. The only problem is that those definitions have
 nothing to do with the extended ASCII codeset - the one most programs
 are only able to operate with! I hardly know any programs being able
 to grok the keysymdef.h keysyms, different from 8-bit ASCII. However
 our goal is to get the KOI8-R support to work.

 To disable the Xkb support, browse through the Keyboard section of
 your XF86Config file and comment all lines starting with _X_k_b (case
 doesn't matter). Instead, put the following line:


 XkbDisable



 The xmodmap program.allows customization of codes emitted by various
 characters and their combinations. It sets the things up based on the
 file containing the translation table.

 In the previous versions of this document I used to describe the
 xmodmap-based setup in a great detail. This proved to be almost
 useless. The Xmodmap-based input translation method is well known as
 being it is non-portable, inflexible, and incomplete.  Your
 configuration may work with one XFree version and fail with a
 different one. Even worse, sometimes things differ accross different
 servers in the same distribution.

 I strongly suggest you not to play with this xmodmap, at least for
 now. Apart from headache and disappointment you'll gain nothing.
 Instead, I recommend installing the xruskb package, which allows you
 to configure most of the input translation parameters without having
 to know about xmodmap. Again, the RedHat Linux users are free to
 download and install an RPM package.



 33..33..  FFiirrsstt sstteeppss -- CCyyrriilllliicc iinn sshheellllss



 33..44..  bbaasshh


 Three variables should be set on order to make bash understand the
 8-bit characters. The best place is ~/.inputrc file. The following
 should be set:


 set meta-flag on
 set convert-meta off
 set output-meta on





 33..55..  ccsshh//ttccsshh


 The following should be set in .cshrc:




 setenv LC_CTYPE iso_8859_5
 stty pass8



 If you don't have the POSIX stty (impossible for Linux), then replace
 the last call to the following:


 stty -istrip cs8





 33..66..  kksshh


 As for the public domain ksh implementation - pdksh 5.1.3, you can
 input 8 bit characters only in vi input mode. Use:


 set -o vi





 33..77..  lleessss


 So far, less doesn't support the KOI8-R character set, but the
 following environment variable will do the job:


 LESSCHARSET=latin1





 33..88..  mmcc ((TThhee MMiiddnniigghhtt CCoommmmaannddeerr))


 To display Cyrillic text correctly, select the _f_u_l_l _8 _b_i_t_s item in the
 OOppttiioonnss//DDiissppllaayy menu.

 If your problem is the ugly windows' borders, consult the ``''
 section.

 As an off-topic, if you want to make mmcc use color in an Xterm window,
 set the variable COLORTERM:


 COLORTERM= ; export COLORTERM





 33..99..  rrllooggiinn


 Make sure that the shell on the destination site is properly set up.
 Then, if your rlogin doesn't work by default, use 'rlogin -8'.

 33..1100..  zzsshh


 Use the same way as with csh (see section ``csh''). The startup files
 in this case are .zshrc or /etc/zshrc.



 44..  EEddiittiinngg tteexxtt


 In this section I'll describe how to customize various text editors to
 work with Cyrillic text. This doesn't cover the _w_o_r_d _p_r_o_c_e_s_s_o_r_s, which
 will be described later (see section ``'').



 44..11..  EEmmaaccss aanndd XXEEmmaaccss


 There are two version of the Emacs editor - GGNNUU EEmmaaccss and XXEEmmaaccss.
 While they provide more or less same functionality, some
 implementation details are significantly different. Cyrillic setup
 requires some low-level (in Emacs Lisp sense) tweaking, and it differs
 a bit for those two versions.

 NNOOTTEE:: Apart from the setup described here, there is an alternative way
 to configure both versions of emacs - use MMUULLEE (MULtilanguage Emacs
 support). The latter way is fairly complicated and (to the best of my
 knowledge) rarely used, so I don't discuss it here.

 The minimal cyrillic support in GGNNUU eemmaaccss (you don't have to do it for
 the XXEEmmaaccss) is done by adding the following calls to one's .emacs
 (provided that the Cyrillic character set support is installed for
 console or X respectively):


 (standard-display-european t)

 (set-input-mode (car (current-input-mode))
    (nth 1 (current-input-mode))
    0)



 This allows the user to view and input documents in Russian.

 However, it isn't enough. Emacs doesn't know yet, that Cyrililic
 characters may constitute a word, let alon the upper/lower case
 conversion rules. In order to teach Emacs doing that, you have to
 modify the syntax and case tables of emacs:


 (require 'case-table)

 (let* ((ruc "\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361")
        (rlc "\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321")
        (i 0)
        (len (length ruc)))
   (while (< i len)
     (modify-syntax-entry (elt ruc i) "w  ")
     (modify-syntax-entry (elt rlc i) "w  ")
     (set-case-syntax-pair (elt ruc i) (elt rlc i) (standard-case-table))
     (setq i (+ i 1))))


 For this purpose I created a rusup.el file which does this, as well as
 a couple handy functions. You have to load it in your ~/.emacs.

 Finally, the russian.el <http://www.math.uga.edu/~valery/russian.el>
 package by Valery Alexeev ([email protected]) allows the user to
 switch between cyrillic and regular input mode and to translate the
 contents of a buffer from one Cyrillic coding standard to another
 (which is especially useful while reading the texts imported from MS-
 DOS or Windows).



 44..22..  UUssiinngg vvii


 The vvii editor (at least it's clone vviimm, available in most Linux
 distributions) is aware of 8-bit characters. It will allow you to
 enter cyrillic characters and will be able to recognize the word
 boundaries correctly. I don't know about the upper-/lower-case
 conversion rules, since I don't use vvii much. _I_f _y_o_u _k_n_o_w _s_o_m_e_t_h_i_n_g
 _a_b_o_u_t _i_t_, _p_l_e_a_s_e _i_n_f_o_r_m _m_e.



 44..33..  EEddiittiinngg tteexxtt wwiitthh jjooee


 JJooee requires a special -asis option to recognize 8-bit characters. You
 may either specify this option at the command line, or to put it in
 ~/.joerc file (for personal use, or in /usr/lib/joerc for system-wide
 setup.

 If your program doesn't understand -asis option, you have to upgrade
 to the newer version.

 However, jjooee doesn't seem to understand the cyrillic words' boundaries
 correctly. I assume, that it applies both to the case conversion
 rules.



 44..44..  SSppeellll--cchheecckkiinngg RRuussssiiaann


 The program I use to spell-check text is the GGNNUU iissppeellll. It is very
 flexible and extensible, so it is possible to use it to spell-check
 text in languages, other than English, by adding new _s_p_e_l_l
 _d_i_c_t_i_o_n_a_r_i_e_s.

 Constantine Knizhnik has created a very good Russian dictionary for
 iissppeellll. You may find it at his homepage. The distribution includes a
 handy incremental spelling script for eemmaaccss.

 Ideally, if you already have an iissppeellll properly installed, you have to
 just step into the newly-created directory and generate the
 dictionary, using the commands provided in the Makefile. However,
 chances are quite high, that you'll see a lot of complaints about the
 iissppeellll's unawareness of the 8-bit data. This is because in most
 distributions, iissppeellll is compiled without 8-bit data support. In this
 case, you cannot avoid recompiling the iissppeellll package.

 Again, RedHat users will be delighted to know that I've rebuilt the
 iissppeellll package with both Russian and German dictionaries. As usual,
 you may grab it from the RedHat FTP site.


 Once you have everything installed, you may invoke Russian spell-
 check, by supplying '-d russian' option to iissppeellll.

 Now, if you use EEmmaaccss, you may want to add a menu item for a russian
 dictionary. I sent a proposed menu entry to the ispell.el maintainer
 and he kindly agreed to include it in the the next public release of
 the file. Meanwhile, you may do it by adding the following code in
 your ~/.emacs (or in /usr/share/emacs/site-lisp/site-start.el for a
 system-wide setup):


 (setq ispell-dictionary-alist
   (append ispell-dictionary-alist
           '(("russian"
              "[\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]"
              "[^\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]"
              "[']" t ("-C" "-d" "russian") "~latin1"))))

 (define-key-after ispell-menu-map [ispell-select-russian]
   '("Select Russian (KOI-8)" . (lambda ()
                                  (interactive)
                                  (ispell-change-dictionary "russian")))
   'british)



 Unfortunately, it won't work for the XXEEmmaaccss. I'll try to solve this
 problem later.



 55..  UUssiinngg CCyyrriilllliicc wwiitthh mmaaiill aanndd nneewwss


 Setting up your mail and news software to recognize Cyrillic text is
 not very difficult, although you have to possess some knowledge of
 principles, mail and news work by.

 Internet electronic mail software generally consists of two parts: MMUUAA
 (Mail User Agent) and MMTTAA (Mail Transfer Agent). MUA is the program
 you use to read, compose, and send mail. However, MUA doesn't transfer
 mail messages by itself. Instead, it calls the MTA, which is
 reponsible to send message using an appropriate protocol to the
 appropriate direction. For example, your MUA may be PPiinnee and MTA -
 qqmmaaiill.

 Until quite recently, both MTA and MUA weren't 8-bit clean by default.
 Therefore, whenever you sent your message from say America to Russia,
 you were never sure, that some intermediate MTA won't strip the 8th
 bit from each character of your message. Therefore, a set of protocols
 was developed, which allowed encoding various kinds of data using only
 printable characters from 7-bit ASCII. This family of protocols is
 called MMIIMMEE (MultimedIa Mail Encoding).

 Since MIME is usually pre-configured to reasonable defaults, we won't
 describe it here. We will talk more about MIME when we provide a
 backward compatibility with other Cyrillic encodings (section ``'').

 Meanwhile, we start MUA setup, because it is usually up to an end-
 user. Then, we will describe the basic priciples of the MTA
 configuration for Cyrillic.





 55..11..  SSeettttiinngg uupp MMaaiill UUsseerr AAggeennttss




 55..11..11..  EEmmaaccss--bbaasseedd mmaaiill rreeaaddeerrss


 Basically, you don't need any special setup for Emacs-based readers,
 geivedn, that you've already configured the emacs itself (see section
 ``'').



 55..11..22..  ppiinnee


 Set the following directive in ~/.pinerc for personal configuration,
 or in /usr/lib/pine.conf for a global one:


 character-set=ISO-8859-5





 55..22..  CCoonnffiigguurriinngg yyoouurr MMTTAA


 There are a number of MTAs available now. These include sseennddmmaaiill,
 qqmmaaiill, ssmmaaiill, eexxiimm, and others.



 55..22..11..  sseennddmmaaiill


 So far, sseennddmmaaiill is much more popular than other MTAs, because it's
 long history and widespread use. Personally, I hate this program - it
 is a perfect example of a completely moronic design and even it's
 "improvements" with the passion of time show, that this approach is
 not going to cease. Any system administrator shudders, when he hears
 the ominous "sendmail.cf" name...

 As of now, sseennddmmaaiill doesn't strip the 8th bit anymore. However, it may
 _e_n_c_o_d_e the 8-bit data using a special _b_a_s_e_6_4 encoding. Although most
 MUAs are supposed to recognize it and decode it back to a regular
 data, you may want to start with sending raw 8-bit text to make sure
 everything works.

 As of version 8, sseennddmmaaiill handles 8-bit data correctly by default. If
 it doesn't do it for you, check the EightBitMode option and option 7
 given to mailers in your /etc/sendmail.cf. See _"_S_e_n_d_m_a_i_l_. _O_p_e_r_a_t_i_o_n
 _a_n_d _I_n_s_t_a_l_l_a_t_i_o_n _G_u_i_d_e_" for details.



 55..22..22..  OOtthheerr MMTTAAss


 I don't know much about other MTAs. If you know something, which may
 be important for Cyrillic setup, please inform me.



 66..  BBrroowwssiinngg tthhee CCyyrriilllliicc WWeebb


 Unlike e-mail and news, there is no definitive standard for Cyrillic
 encoding for the Web. This is primarily because Microsoft offers Web
 authoring tools, which only allow _c_p_1_2_5_1 codeset for Cyrillic,
 completely ignoring the fact that any other standards may already
 exist.

 The setup described here is very basic. It will allow you to view
 pages in the _K_O_I_8_-_R codeset. If the situation improves, I'll add more
 information.



 66..11..  llyynnxx


 As of version 2.6, you may select the appropriate encoding for the
 display Character set option.



 66..22..  NNeettssccaappee nnaavviiggaattoorr


 Make sure you are using Netscape version higher than 3. If your
 Netscape is older, download a new one from www.netscape.com.



 66..22..11..  BBaassiicc sseettuupp


 To be able to see Cyrillic text in most parts of the HTML document, do
 the following:


 +o  In menu OOppttiioonnss//DDooccuummeenntt EEnnccooddiinngg select CCyyrriilllliicc((KKOOII--88)).

 +o  In menu OOppttiioonnss//GGeenneerraall PPrreeffeerreenncceess//FFoonnttss select CCyyrriilllliicc ((KKOOII--88))
    encoding, TTiimmeess((CCrroonnyyxx)) as a proportional font and CCoouurriieerr((CCrroonnyyxx))
    as a fixed one.

 +o  save options.

 NNOOTTEE:: This setup will work with most parts of the document. However,
 you won't be able to display Cyrillic text in the window header, menus
 and some controls. Attempts to fix it follows.



 66..22..22..  CCyyrriilllliicc tteexxtt iinn ffrraammeess aanndd iinnppuutt aarreeaass


 To fix this, it is usually enough to:


 1. Copy the Netscape properties database (usually Netscape.ad) to
    ~/Netscape.

 2. In the latter file, set the following property:


    *documentFonts.charset*iso8859-1:           koi8-r

 This will force all frame and input elements to use the fonts with
 _k_o_i_8_-_r encoding instead of the default ones, therefore you have to
 make sure you have installed such fonts (see section ``'').

 The bad news about the trick above is that if you load a document
 which is supposed to be displayed in iso-8859-1 fonts, it will be
 displayed using the koi8 fonts instead. Sometimes such documents will
 look worse.



 66..22..33..  AAddvvaanncceedd sseettuupp


 Andrew A. Chernov is the one, who knows more than others about KOI-8
 in general and netscape in particular. Visit his excellent KOI-8 page
 and download a patch for Netscape resource file, making Netscape speak
 Russian as much as it is able to.



 77..  CCyyrriilllliicc wwoorrddpprroocceessssiinngg




 77..11..  TTeeXX--bbaasseedd eennvviirroonnmmeennttss


 In this section I'll describe several ways to make TeX and LaTeX
 typeset Cyrillic texts. There are several ways, which differ in setup
 sophistication and usage convenience. For example, one possibility is
 to start without any preliminary setup and use the _W_a_s_h_i_n_g_t_o_n _A_M_S_T_e_X
 _C_y_r_i_l_l_i_c _f_o_n_t_s. On the other hand, you may install a LaTeX package,
 providing a very high degree of Cyrillic setup. I have an experience
 with two such packages. One is the cmcyralt package by Vadim V.
 Zhytnikov ([email protected]) and Alexander Harin
 ([email protected]), and the other one is the LH package by the
 _C_y_r_T_U_G group with styles and hyphenation for LaTeX2e by Sergei O.
 Naoumov ([email protected]). I'll describe both.

 Note, that there are two versions of LaTeX available - 2.09 is the old
 one, while 2e is a new pre-3.0 release. If you are using LaTeX 2.09,
 then switch quickly to the 2e. The latter retains compatibility with
 the old one, but has much more features. Hopefully, version 3 will be
 released soon. I describe a LaTeX 2e setup.

 Also, both of these packages require the Cyrillic text to be typeset
 using the _A_l_t codeset, not _K_O_I_8_-_R! This is caused by historical
 reasons, since the creators of these packages used to work with EmTeX
 - the MS-DOG version of TeX (they didn't know about Linux yet :-).
 Switching to the _K_O_I_8_-_R requires some effort and is being expected to
 be done soon. So far, use some utility to convert your russian text
 from _K_O_I_8_-_R to _A_l_t. See section ``''.



 77..11..11..  UUssiinngg tthhee WWaasshhiinnggttoonn CCyyrriilllliicc


 This package was created for the American Mathematic Society to
 provide documents with Russian references. Therefore, the authors were
 not very careful and the fonts look quite clumsy. This package is
 usually referred to as a "really bad cyrillic package for TeX".


 Nevertheless, we'll discuss it, because it is very easy to use and
 doesn't require any setup - this collection is supplied with most of
 TeX distributions.

 Of course, you won't be able to use such luxury as automatic
 hyphenation, but anyway...

 1. Prepend your document with the following directives:


 \input cyracc.def
 \font\tencyr=wncyr10
 \def\cyr{\tencyr\cyracc}



 2. Now to type a cyrillic letter, you enter


 \cyr



 and use a corresponding latin letter or a TeX command. Thus, the lower
 case of the Russian alphabet is expressed by the following codes:


 a b v g d e \"e zh z i {\u i} k l m n o p r s t u f kh c ch sh shch
 {\cprime} y {\cdprime} \`e yu ya



 It is extremely inconvenient to convert your Russian texts to such
 encoding, but you can automate the process. The translit program
 (section ``'') supports a TeX output option.



 77..11..22..  KKOOII--88 ppaacckkaaggee ffoorr tteeTTeeXX


 There is some new teTeX-rus package. It is reported to support KOI-8
 character set and have all basic stuff required for TeX and LaTeX. I
 personally haven't tried it yes, although I heard about it's
 successfull usage.

 NNOOTTEE:: This package requires you to reconfigure and rebuild some parts
 of your tteeTTeeXX package (for example the precompiled LaTeX macros).
 UUnnlleessss yyoouu kknnooww wwhhaatt yyoouu aarree ddooiinngg,, yyoouu sshhoouullddnn''tt ttrryy iitt wwiitthhoouutt
 nneecceessssaarryy ccaarree.. OOtthheerrwwiissee,, yyoouu mmaayy bbee bbeetttteerr ooffff bbyy bboorrrroowwiinngg tthhee
 pprreeccoommppiilleedd ppaarrttss ffrroonn ssoommeebbooddyy oonn tthhee nneett



 77..11..33..  UUssiinngg tthhee ccmmccyyrraalltt ppaacckkaaggee ffoorr LLaaTTeeXX


 The cmcyralt package can be found on any CTAN (Comprehensive TeX
 Archive Network) site like ftp.dante.de. You should obtain two pieces:
 the fonts collection from fonts/cmcyralt and the styles and
 hyphenation rules from macros/latex/contrib/others/cmcyralt.

 NNoottee:: Make sure you have the Sauter package installed, since cmcyralt
 requires some fonts from it. You can get this package from CTAN site
 as well.

 Now you should do the following:


 1. Put the new fonts to the TeX fonts tree. On my system (Slackware
    2.2) I created a cmcyralt directory in the
    /usr/lib/texmf/fonts/cm/. Create the src, tfm, and vf
    subdirectories in it. Put there .mf, .tfm, and vf files
    respectively.

 2. Put the font driver files (*.fd) from the styles archive to the
    appropriate place (in my case it was /usr/lib/texmf/tex/latex/fd).

 3. Put the style files (*.sty) to the appropriate LaTeX styles
    directory (in my case /usr/lib/texmf/tex/latex/sty).

 Now the hyphenation setup. This requires to remake the LaTeX base
 file.


 1. The file hyphen.cfg contains the directives for both English and
    Russian hyphenation. Extract the one for Russian and place it to
    the LaTeX hyphenation config file lthyphen.ltx. In my case, that
    file was in /usr/lib/texmf/tex/latex/latex-base.

 2. Put the rhyphen.tex to the same directory. It is needed for making
    the new base file. Later, you can remove it.

 3. Do 'make' in that directory. Don't for get to make a link from
    Makefile to Makefile.unx. During the make process check the output.
    There should be a message:


    Loading hyphenation patterns for Russian.



 If everything goes OK, you will get the new latex.fmt in that direc-
 tory. Put it to the appropriate place, where the previous one was
 (like /usr/lib/texmf/ini/). DDoonn''tt ffoorrggeett ttoo ssaavvee tthhee pprreevviioouuss oonnee!!.

 This is it. The installation is complete. Try processing the examples
 found in the styles archive. If you are to create the PostScript files
 without any problems, then everything is OK. Now, to use Cyrillic in
 LaTeX, prepend your document with the following directive:


 \usepackage{cmcyralt}



 For more details, see the README file in the cmcyralt styles archive.

 NNoottee:: if you do have problems with the examples, provided you have
 installed the things right, then probably your TeX system hasn't been
 installed correctly. For example, during my first try, every attempt
 to create the .pk files for the russian fonts failed (MakeTeXPK
 stage). A substantial investigation discovered some implicit conflict
 between the _l_o_c_a_l_f_o_n_t and _l_j_f_o_u_r METAFONT configurations. It used to
 work before, but kept crashing after the cmcyralt installation.
 Contact your local TeX guru - TeX is very (sometimes too much)
 complicated to reconfigure it without any prior knowledge.





 77..11..44..  UUssiinngg tthhee CCyyrrTTUUGG ppaacckkaaggee


 You can obtain the CyrTUG package from the SunSite archive. Get the
 files CyrTUGfonts.tar.gz, CyrTUGmacro.tar.gz, and hyphen.tar.Z.

 The process of installation doesn't differ from too much the previous
 one.





 77..22..  TThhee SSttaarrOOffffiiccee ssuuiittee


 Youri Kovalenko () has compiled a concise summary on StarOffice
 russification. It is located at .  I never had a chance to try it, so
 I cannot say anything about it's correctness.

 Another source of information on the subject is compiled by Eugene
 Demidov () and is located at .



 88..  PPrriinnttiinngg aanndd PPoossttSSccrriipptt




 88..11..  TTeexxtt ttoo PPoossttSSccrriipptt ccoonnvveerrssiioonn


 Sometimes you have just a plain ASCII KOI8-R text and you want to
 print it just to get it on the paper. One of the easiest ways to
 achieve that is to use special programs converting text to PostScript.

 There are a number of programs doing such conversion. I personally
 prefer a2ps. Originally developed as a simple text-to-PostScript
 converter it became a big and highly configurable program with many
 options and allows you to manage various page layouts, syntax
 highlighting etc. Another tool (now available as a part of the _G_N_U
 project) is enscript.



 88..11..11..  AAnn aa22ppss ccoonnvveerrtteerr


 A text to PostScript converter has been around for a while and is one
 of the most versatile printing tools. The author proved to be very
 open to suggestions, so since the release 4.9.8 aa22ppss supports Cyrillic
 right off-the-shelf. All you need is a PostScript printer.

 The command I use is:


 a2ps -X koi8r --print-anyway  <file>








 88..11..22..  TThhee GGNNUU eennssccrriipptt


 The GNU eennssccrriipptt program is also designed for converting text to
 PostScript and it also has a non-ASCII codeset support. It doesn't
 have Cyrillic PostScript fonts, but it is very easy to get them, as
 will be explained below (thanks to Michael Van Canneyt):


 1. Install the newest eennssccrriipptt. As of now, the most recent release is
    1.5. You may either get the one from the GNU FTP archive, or take
    an RPM package from the Redhat site.

 2. Now, if you are a lucky RedHat Linux user, download and install
    Cyrillic Textbook font
    <ftp://ftp.redhat.com/pub/contrib/i386/enscript-fonts-
    koi8-1.0-1.i386.rpm>.

 3. If you don't use RPM, download a file textbook.tar.gz from the
    Cyrillic Software collection on sunsite.unc.edu
    <ftp://sunsite.unc.edu/pub/academic/russian-studies/Software/>.
    Extract it to a directory, where eennssccrriipptt fonts are located
    (usually /usr/share/enscript). Now change to that directory and run
    the following command:


        mkafmmap *.afm



 4. The setup is finished. Try to print some text in KOI8-R Cyrillic
    with the following command:


        enscript --font=Textbook8 --encoding=koi8 some.file



 If you want a really quick and dirty solution and you don't care about
 the output quality and all you need is just Cyrillic on the paper, try
 the rtxt2ps package. It is a very simple no-frills text-to-PostScript
 conversion program. The output quality is not very good (or, to be
 honest, just _b_a_d) but it does it's job.



 88..22..  TTeexxtt ttoo TTeeXX ccoonnvveerrssiioonn


 If all you need is just to print an ASCII text without any additional
 word processing, you may try to use some programs, which would convert
 your Cyrillic text to a ready-to-process TeX file. One of the best
 programs for such purposes is ttrraannsslliitt (see section ``''). In this
 case, you don't even have to bother about installing the Cyrillic
 fonts for TeX, since ttrraannsslliitt uses a _W_a_s_h_i_n_g_t_o_n _C_y_r_i_l_l_i_c package,
 which is included in most TeX distributions (or am I wrong?)



 99..  CCyyrriilllliicc iinn PPoossttSSccrriipptt


 Experts say PostScript is easy. I cannot judge - I've got too many
 things to learn to spare some time to learn PostScript. So I'll try to
 use my sad experience with it. II''llll aapppprreecciiaattee aannyy ffeeeeddbbaacckk ffrroomm yyoouu
 gguuyyss wwhhoo kknnooww mmoorree oonn tthhee ssuubbjjeecctt tthhaann II ddoo (approx. 99% of the Earth
 population).

 Basically, in order to print a Cyrillic text using PostScript, you
 have to make sure about the following things:


 +o  Cyrillic font is _l_o_a_d_e_d or included in the document.

 +o  Cyrillic text is included in the document.

 +o  Cyrillic text uses the appropriate character codes which correspond
    to the font's requirements.

 +o  An appropriate font is _s_e_l_e_c_t_e_d in order to print Cyrillic text.

 There is no solution general enough to be recommended as an ultimate
 treatment. I'll try to outline various ways to cope with different
 problems related to the subject.

 One way to address Cyrillic setup problems generally enough is to use
 Ghostscript. GGhhoossttssccrriipptt (or just ggss in the newspeak) is a free (well
 quasi-free) PostScript interpreter. It has many advantages; among
 them:


 +o  Ability to run on many platforms (various Unices, Windows etc)

 +o  Support for a wide number of non-PostScript printers

 +o  Good degree of configurability

 What is important in our particular case, is that once GGhhoossttssccrriipptt is
 set up, we can do all printing through it, thus eliminating extra
 setup for other PostScript devices (for example _H_P _L_a_s_e_r_J_e_t _I_V)



 99..11..  AAddddiinngg CCyyrriilllliicc ffoonnttss ttoo GGhhoossttssccrriipptt


 This is important, since you probably don't want to put a
 responsibility to other programs to insert Cyrillic fonts in the
 PostScript output. Instead, you add them to ggss and just make the
 programs generate Cyrillic output compatible with the fonts.

 To add a new font (in pfa or pfb form) in ggss, you have to:


 1. Put it in the ggss fonts directory (ie.  /usr/lib/ghostscript/fonts).

 2. Add the appropriate names and aliases for the font in the Fontmap
    file in the ggss directory.

 Recently a decent set of Cyrillic fonts for GGhhoossttSSccrriipptt appeared.  It
 is located in ftp.kapella.gpi.ru. This one even has a necessary part
 to add to the Fontmap file. You have to download the contents of the
 /pub/cyrillic/psfonts directory. The README file describes the
 necessary details.



 1100..  PPrriinntt sseettuupp


 Printing is always tricky. There are different printers from different
 vendors with different facilities. Even for a native printing there is
 no uniform solution (this applies not only to UNIX, but to other
 operating systems as well.

 Printers have different control languages and often they have very
 different views on foreign language support.  The good news is that on
 control language seems to be recognized as a de-facto standard for
 print job description - it is a PostScript language developed by Adobe
 Corporation.

 Another problem is a variety of requirements to the print services.
 For example, sometimes you want just to print a piece if C program,
 containing comments in Russian, so you don't need any pretty-printing
 - just a raw ASCII output in a single font. Another time, when you
 design a postcard for your girlfriend, you'll probably need to typeset
 some document with different fonts etc. This will definitely require
 more effort to setup Cyrillic support.

 To accomplish the former task you just have to make your printer
 understand _o_n_e Cyrillic font and (maybe) install some filter program
 to generate data in appropriate format. To accomplish the latter one,
 you have to teach your printer different fonts and have a special
 software.

 There is also something in the middle, when you get a program which
 knows how to generate both the fonts and the appropriate printer
 input, so you can say do some aource code pretty-printing without
 sophisticated word processing systems.

 All these options will be more or less covered below.



 1100..11..  PPrree--llooaaddiinngg CCyyrriilllliicc ffoonnttss iinnttoo aa nnoonn--PPoossttSSccrriipptt pprriinntteerr


 If you have a good old dot matrix printer and all you need is to print
 a raw KOI8-R text, try the following:


 1. Find a proper KOI8-R font for your printer. Check out the MS-DOSish
    stuff on the Internet (for example the SimTel archive
    <ftp://ftp.simtel.net>).

 2. Learn from the manual, how to load such font into your printer and,
    probably, write a simple program doing that.

 3. Run this program from the appropriate rc file at a boot time.

 Thus, having Cyrillic characters in the upper part of the printer's
 character set will allow you to print you texts in Russian without any
 hussle.

 Alternatively to the _K_O_I_8_-_R fonts you may try to use the _A_l_t font.
 There are two reasons for that:


 +o  It may be probably much easier to find an _A_l_t font, since those
    were very widespread in the MS-DOS culture.

 +o  Having a proper _A_l_t font will allow you to print pseudo-graphic
    characters as well.

 However in this case, you'll have to convert your texts from _K_O_I_8_-_R to
 _A_l_t before sending them to a printer. This is quite easy, since there
 are a lot of programs doing that (see ``translit'' for example), so
 you just have to call such program properly in the if field in
 /etc/printcap file. For example, with the ttrraannsslliitt program you may
 specify:



 if=/usr/bin/translit -t koi8-alt.rus



 See pprriinnttccaapp((55)) for details.



 1100..22..  PPrriinnttiinngg wwiitthh ddiiffffeerreenntt ffoonnttss


 One great way to cope with different printers and fonts is to use TTeeXX
 (see section ``''). TeX drivers handle all details, so once you make
 TeX understand Cyrillic fonts, you are done.

 Another possibility is to use _P_o_s_t_S_c_r_i_p_t. I decided to devote an
 entire chapter ``'' to the subject, since it is not simple.

 Finally, there are other word processors, which have printer drivers.
 I never tried anything apart from TeX, so I cannot suggest anything.



 1111..  LLooccaalliizzaattiioonn aanndd IInntteerrnnaattiioonnaalliizzaattiioonn


 So far, I described how to make various programs understand Cyrillic
 text. Basically, each program required it's own method, very different
 from the others. Moreover, some programs had incomplete support of
 languages other than English. Not to mention their inability to
 interact using user's mother tongue instead of English.

 The problems outlined above are very pressing, since software is
 rarely developed for home market only. Therefore, rewriting
 substantial parts of software each time the new international market
 is approached is very ineffective; and making each program implement
 it's own proprietary solution for handling different languages is not
 a great idea in a long term either.

 Therefore, a need for standardization arises. And the standard shows
 up.

 Everything related to the problems above is divided by two basic
 concepts: _l_o_c_a_l_i_z_a_t_i_o_n and _i_n_t_e_r_n_a_t_i_o_n_a_l_i_z_a_t_i_o_n. By localization we
 mean making programs able to handle different language conventions for
 different countries. Let me give an example. The way date is printed
 in the United States is MM/DD/YY. In Russia however, the most popular
 format is DD.MM.YY. Another issues include time representation,
 printing numbers and currency representation format. Apart from it,
 one of the most important aspect of localization is defining the
 appropriate character classes, that is, defining which characters in
 the character set are language units (letters) and how they are
 ordered. On the other hand, localization doesn't deal with fonts.

 Internationalization (or _i_1_8_n for brevity) is supposed to solve the
 problems related to the ability of the program interact with the user
 in his native language.

 Both of the concepts above had to be implemented in a standard, giving
 programmers a consistent way of making the programs aware of national
 environments.
 Althogh the standard hasn't been finished yet, many parts actually
 have; so they can be used without much of a problem.

 I am going to outline the general scheme of making the programs use
 the features above in a standard way. Since this deserves a separate
 document, I'll just try to give a very basic description and pointers
 to more thorough sources.



 1111..11..  LLooccaallee


 One of the main concept of the localization is a _l_o_c_a_l_e. By locale is
 meant a set of conventions specific to a certain language in a certain
 country. It is usually wrong to say that locale is just country-
 specific. For example, in Canada two locales can be defined -
 Canada/English language and Canada/French language. Moreover,
 Canada/English is not equivalent to UK/English or US/English, just as
 Canada/French is not equivalent to France/French or
 Switzerland/French.



 1111..11..11..  HHooww ttoo uussee llooccaallee


 Each locale is a special database, defining at least the following
 rules:


 1. character classification and conversion

 2. monetary values representation

 3. number representation (ie. the decimal character)

 4. date/time formatting


 In RedHat 4.1, which I am using there are actually _t_w_o locale
 databases: one for the C library (libc) and one for the X libraries.
 In the ideal case there should be only one locale database for
 everything.

 To change your default locale, it is usually enough to set the LANG
 environment variable. For example, in sshh:


 LANG=ru_RU
 export LANG



 Sometimes, you may want to change only one aspect of the locale
 without affecting the others. For example, you may decide (God knows
 why) to stick with ru_RU locale, but print numbers according to the
 standard POSIX one. For such cases, there is a set of environment
 variables, which you can you to configure specific parts for the
 current locale. In the last exaple it would be:


 LANG=ru_RU
 LC_NUMERIC=POSIX
 export LANG LC_NUMERIC

 For the full description of those variables, see llooccaallee((77)).

 Now let's be more Linux-specific. Unfortunately, Linux libc version
 5.3.12, supplied with RedHat 4.1, doesn't have a russian locale. In
 this case one must be downloaded from the Internet (I don't know the
 exact address, however).

 To check, locale for which languages you have, run 'locale -a'. It
 will list all locale databases, available to libc.

 Fortunately, Linux community is rapidly moving to the new GNU libc
 (glibc version 2, which is much more POSIX-compliant and has a proper
 russian locale. Next "stable" RedHat system will already use glibc.

 As for the X libraries, they have their own locale database. In the
 version I am using (XFree86 3.3), there already is a russian locale
 database. I am not sure about the previous versions. In any case, you
 may check it by looking into usr/lib/X11/locale/ (on most systems). In
 my case, there already are subdirectories named koi8-r and even
 iso8859-5.



 1111..11..22..  LLooccaallee--aawwaarree pprrooggrraammmmiinngg


 With locale, program don't have to implement explicitly various
 character conversion and comparison rules, described above. Instead,
 they use special API which make use of the rules defined by locale.
 Also, it is not necessary for program to use the same locale for all
 rules - it is possible to handle different rules using different
 locales (although such technique should be strongly discouraged).

 From the sseettllooccaallee((33)) manual page:


      A  program  may be made portable to all locales by calling
      setlocale(LC_ALL, "" ) after program   initialization,  by
      using  the  values  returned  from a localeconv() call for
      locale - dependent information and by using  strcoll()  or
      strxfrm() to compare strings.


 SunSoft, for example, defines 5 levels of program localization:


 1. _8_-_b_i_t _c_l_e_a_n software. That is, the program calls setlocale(), it
    doesn't make any assumptions about the 8th bit of each character,
    it users functions from ctype.h and limits from limits.h, and it
    takes care about signed/unsigned issues.

    It is very important _n_o_t to do any assumption about the character
    set nature and ordering. The following programming practices must
    be avoided:


        if (c >= 'A' && c <= 'Z') {
            ...



 Instead, macros from the ctype.h header file are locale-aware and
 should be used in all such occasions.

 2. Formats, sorting methods, paper sizes. The program uses strcoll()
    and strxfrm() instead of strcmp() for strings, it uses time(),
    localtime(), and strftime()/ for time services, and finally, it
    uses localeconv() for a proper numbers and currency representation.

 3. Visible text in message catalogs. The program must isolate all
    visible text in special _m_e_s_s_a_g_e _c_a_t_a_l_o_g_s. Those map strings in
    English to their translation to other languages. Selection of
    messages in an appropriate for a particular environment language is
    done in a way which is completely transparent for both the program
    and it's user. To make use of those facilities, the program must
    call gettext() (Sun/POSIX standard), or catgets() (X/Open
    standard). For more information on that see section ``''.


 4. EUC/Unicode support. At this level, the program doesn't use the
    char type. Instead it uses wchar_t, which defines entities big
    enough to contain Unicode characters. ANSI C defines this data type
    and an appropriate API.


 For a more detaled explanation of locale, see, for example (``'') or
 (``'').



 1111..22..  IInntteerrnnaattiioonnaalliizzaattiioonn


 While localization describes, how to adapt a program to a foreign
 environment, _i_n_t_e_r_n_a_t_i_o_n_a_l_i_z_a_t_i_o_n (or _i_1_8_n for brevity) details the
 ways to make program communicate with a non-English speaking user.

 Before, that was done by developing some abstraction of the messages
 to output from the program's code. Now, such mechanism is (more or
 less) standardized. And, of course, there are free implementations of
 it!

 The GNU project has finally adopted the way of making the
 internationalized applications. Ulrich Drepper ([email protected]
 karlsruhe.de) developed a package gettext. This package is available
 at all GNU sites like prep.ai.mit.edu. It allows you to develop
 programs in the way that you can easily make them support more
 languages. I don't intend to describe the programming techniques,
 especially because the gettext package is delivered with excellent
 manual.

 RReeqquueesstt ffoorr ccoollllaabboorraattiioonn:: If you want to learn the gettext package
 and to contribute to the GNU project simultaneously; or even if you
 just want to contribute, then you can do it! GNU goes international,
 so all the utilities are being made locale-aware. The problem is to
 translate the messages from English to Russian (and other languages if
 you'd like). Basically, what one has to do is to get the special .po
 file consisting of the English messages for a certain utility and to
 append each message with it's equivalent in Russian. Ultimately, this
 will make the system speak Russian if the user wants it to! For more
 details and further directions contact Ulrich Drepper
 ([email protected]).




 1122..  SSttaayyiinngg ccoommppaattiibbllee


 Being standard is not the only issue. To be really nice, one has to
 provide the backward compatibility. In our case, this means that the
 configuration should be tolerant to the data created using non-
 standard character sets - that is the _A_l_t _(_c_p_8_6_6_) and _c_p_1_2_5_1 ones.
 Also, we should be able to run Cyrillic programs for MS-DOS.

 In most cases (except for HTTP), it is enough to provide a timely
 conversion of data to _K_O_I_8_-_R. When we talk about raw unstructured
 data, it is quite trivial - see section ``Conversion Utilities''.

 Another issue is the structured data. This case is more tricky. I'll
 try to outline the basic roadmap of fixing it.



 1122..11..  MMIIMMEE--bbaasseedd ddaattaa ccoommppaattiibbiilliittyy


 _M_I_M_E is a standard for architecture-independent data representation.
 Originally developed for mail messages, it has now many more
 applications. MIME defines format, which is open to extensions and
 allows architecture-specific handling of data. For example, if I
 receive a mail message, containing a _M_I_M_E _o_b_j_e_c_t of the video/mpeg
 type (an encoded MPEG file), my mail reader will automatically decode
 it and start an MPEG player.

 Most UNIX programs, offering MIME capabilities, are based on the
 mmeettaammaaiill package, which contains a set of utilities and data files to
 work with MIME objects. Several configuration files (/etc/mailcap for
 global usage and ~/.mailcap for personal setup) define rules for
 handling MIME object of various types.

 Thus, if you receive a proper MIME data stream, containing text in one
 of the obsolete character sets, you may define a MIME rule to convert
 such text to KOI8.

 Below a number of MIME rules are shown, which are supposed to handle
 plain text and richtext objects, using both of the obsolete codesets,
 discussed above. You may incorporate these rules into one of the MIME
 configuration files.

 Note, that these rules use the ttrraannsslliitt package to perform the actual
 conversion. For more information on that program and the conversion in
 general see section ``Conversion Utilities''.


 text/plain; translit -t cp1251-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp1251; copiousoutput

 text/richtext; translit -t cp1251-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp1251; copiousoutput

 text/plain; translit -t alt-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp866; copiousoutput

 text/richtext; translit -t alt-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp866; copiousoutput

 text/plain; translit -t alt-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = alt; copiousoutput

 text/richtext; translit -t alt-koi8.rus < %s; test=test \
     "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = alt; copiousoutput



 Obviously enough, this will work for plain text data only. Binary
 files are supposed to handle the codeset issues themselves (at least
 their "parent" applications are). Therefore, if you receive a
 Microsoft Word document in the _c_p_1_2_5_1 character set, the duty of
 providing appropriate conversion capabilities lays upon an application
 you use to read that document (for example Microsoft Word, or Applix
 Words).

 Unfortunately, the real situation is not that ideal. Many application
 have their own idea on how to use MIME. Until recently Microsoft Mail
 software had a broken MIME engine. Also, the Netscape
 Navigator/Communicator mail client is notorious because of it's
 sending of mail messages, encoded in _c_p_1_2_5_1 with the _c_h_a_r_s_e_t_=_k_o_i_8_-_r
 field in the message header and vice versa.



 1122..22..  EExxpplliicciitt cchhaarraacctteerr sseett ccoonnvveerrssiioonn


 There are a lot of conversion routines for Cyrillic on the Internet.
 Each of them has it's own quirks and it's own degree of Cyrillic
 support.

 In my opinion tools must be standard. In this particular case the
 "standard" conversion tool is GGNNUU rreeccooddee. Unfortunately, the version,
 found on the official GNU site (3.4) doesn't support Cyrillic yet
 (only _I_S_O_-_8_8_5_9_-_5). I developed a set of conversion tables for _K_O_I_8_-_R,
 _A_l_t, and _c_p_1_2_5_1 for rreeccooddee and submitted them to the rreeccooddee
 maintainer. He promised to provide Cyrillic support in the upcoming
 release. Once it happens, I'll rewrite this section to recommend GGNNUU
 rreeccooddee as the standard conversion engine for Cyrillic.

 Meanwhile, I would recommend a translit package. It supports many
 popular codesets and is even able to produce a *TeX files (see section
 ``'') from text in Russian. Also, RedHat users will enjoy an RPM
 package for translit.

 For other conversion routines, Look at SovInformBureau or
 ftp.funet.fi. You can even use the special mode for emacs (see section
 ``Emacs'').



 1122..33..  CCyyrriilllliicc iinn tthhee DDOOSS eemmuullaattoorr


 This seems to be the only application, which may require Alt Cyrillic
 character set. The reason is that Alt is native to DOS and most of DOS
 programs dealing with Cyrillic are Alt-oriented.

 For the console version (dos) you just have to load a keyboard and
 screen driver. Most of DOS drivers will work fine. I personally use
 the rrkk driver by A. Strakhov, which works for both console and X
 versions of ddoosseemmuu. Another choice is the r driver by V. Kurland
 (sorry for possible misspelling). It is perfectly customizable and
 supports many codesets, Alt and KOI8 among them. However it won't work
 for the X window (at least version 1.14 I'm using).

 Both drivers can be found on most Russian Internet sites, for example
 Kurchatov Institute FTP server <ftp://ftp.kiae.su/pub/cyrillic/msdos>.

 For the X version of ddoosseemmuu you have to provide an appropriate X font
 as well. Alex Bogdanov sent me such font by e-mail. It is an original
 vga font from the ddoosseemmuu distribution, modified for the Alt codeset.
 Unfortunately I don't know who is the creator of this font and where
 the official site is.


 To setup the font for dosemu you should


 +o  Introduce this font to the X. This is described in ``X fonts
    setup''.

 +o  Introduce this font to dosemu. If the font just replaces the
    original vga font, then it will be recognized by default.
    Otherwise, you have to describe it in /etc/dosemu.conf:


    # Font to use (without filename extensions). For example:
    X { updatefreq 8 title "MS DOS" icon_name "xdos" font "vga-alt"}



 Finally, you have to load a keyboard driver. Note, the you don't need
 a screen driver for the X window. Therefore, not all drivers will
 work. At least two will: rk by A. Strakhov, and cyrkeyb by Pete
 Kvitek.



 1133..  BBiibblliiooggrraapphhyy



 1. Andrey Chernov. KOI-8 <http://www.nagual.ru/~ache/koi8.html>. KOI-8
    information and setup.

 2. Ulrich Drepper. Internationalization in the GNU project
    <http://i44www.info.uni-karlsruhe.de/~drepper/conf96/paper.html>.
    Very thorough description of a GNU approach to i18n.

 3. Michael Karl Gschwind. Internationalization
    <http://www.vlsivie.tuwien.ac.at/mike/i18n.html>. Various resources
    on i18n.

 4. Sergei Naumov. Information on Cyrillic Software
    <http://sunsite.oit.unc.edu/sergei/Software/Software.html>.
    Cyrillic setup information.

 5. The Open Group Single UNIX specification <http://www.UNIX-
    systems.org/online.html>.

 6. RFC 1489 RFC 1489 <file://ds.internic.net/rfc/rfc1489.txt>

 7. Alec Voropay. Localization as it is
    <http://www.sensi.org/~alec/locale>. General locale usage in
    Russian.




 1144..  SSuummmmaarryy ooff tthhee vvaarriioouuss uusseeffuull rreessoouurrcceess


 a2ps homepage <http://www-inf.enst.fr/~demaille/a2ps.html>

 General Linux Information <http://www.linux.org>

 Collection of Cyrillic resources
 <ftp://ftp.ccl.net/pub/central\_eastern\_europe/russian>

 Cyrillic resources at KIAE <ftp://ftp.kiae.su/cyrillic/>

 Cyrillic resources at RELCOM <ftp://ftp.relcom.ru/cyrillic/>

 Cyrillic resources at FUNET
 <ftp://ftp.funet.fi/pub/culture/russian/comp/>

 Cronyx <http://www.cronyx.ru> - the creators of Cyrillic fonts for the
 X Window System.

 Cyrillic fonts for Ghostscript and StarOffice
 <ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts>

 Cyrillic fonts for X
 <ftp://ftp.kiae.su/cyrillic/x11/fonts/xrus-2.1.1-src.tgz>

 Ghostscript <http://www.cs.wisc.edu/~ghost/index.html>

 GNU enscript <ftp://prep.ai.mit.edu/pub/gnu>

 relcom.fido.ru.linux newsgoup.

 relcom.fido.ru.unix newsgoup.

 Russian dictionary for GNU ispell <http://www.ispras.ru/~knizhnik>

 SovInformBureau <http://www.siber.com/sib/russify/>

 teTeX russification package <ftp://xray.sai.msu.su/pub/outgoing/teTeX-
 rus/>

 The kbd package for Linux
 <ftp://sunsite.unc.edu/pub/Linux/system/Keyboards/>

 The remap package for Emacs <ftp://ftp.iesd.auc.dk/>

 The rtxt2ps package <http://www.siber.com/sib/russify/converters/>

 The russian.el package for emacs
 <http://www.math.uga.edu/~valery/russian.el>

 The translit package
 <ftp://ftp.osc.edu/pub/russian/translit/translit.tar.Z>

 The xruskb package <ftp://ftp.relcom.ru/pub/x11/cyrillic/>

 Useful Cyrillic packages <ftp://sunsite.unc.edu/pub/academic/russian-
 studies/Software>

 X fonts collections <ftp://ftp.switch.ch/mirror/linux/X11/fonts/>

 XFree86 FTP site <http://www.xfree86.org>