Update copyright notices for 2013.
[bpt/emacs.git] / lisp / term / internal.el
CommitLineData
ff586413 1;;; internal.el --- support for PC internal terminal
c8b836f6 2
ab422c4d
PE
3;; Copyright (C) 1993-1994, 1998-1999, 2001-2013 Free Software
4;; Foundation, Inc.
c8b836f6
RS
5
6;; Author: Morten Welinder <terra@diku.dk>
c8b836f6
RS
7
8;; This file is part of GNU Emacs.
9
1fecc8fe 10;; GNU Emacs is free software: you can redistribute it and/or modify
c8b836f6 11;; it under the terms of the GNU General Public License as published by
1fecc8fe
GM
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
c8b836f6
RS
14
15;; GNU Emacs is distributed in the hope that it will be useful,
16;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;; GNU General Public License for more details.
19
20;; You should have received a copy of the GNU General Public License
1fecc8fe 21;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2fe590dc 22
e8af40ee
PJ
23;;; Commentary:
24
2fe590dc
EN
25;;; Code:
26
c8b836f6 27;; ---------------------------------------------------------------------------
d8dbc0d0
EZ
28(defvar msdos-key-remapping-map
29 (let ((map (make-sparse-keymap)))
30 ;; keyboard setup -- that's simple!
d8dbc0d0
EZ
31 (define-key map [M-backspace] [?\M-\d])
32 (define-key map [M-delete] [?\M-d])
33 (define-key map [M-tab] [?\M-\t])
34 (define-key map [M-linefeed] [?\M-\n])
35 (define-key map [M-clear] [?\M-\013])
36 (define-key map [M-return] [?\M-\015])
37 (define-key map [M-escape] [?\M-\e])
38 map)
39 "Keymap for remapping special keys on MS-DOS keyboard.")
40
d8dbc0d0
EZ
41(defun msdos-setup-keyboard (frame)
42 "Setup `local-function-key-map' for MS-DOS keyboard."
43 ;; Don't do this twice on the same display, or it would break
44 ;; normal-erase-is-backspace-mode.
45 (unless (terminal-parameter frame 'msdos-setup-keyboard)
46 ;; Map certain keypad keys into ASCII characters that people usually expect.
47 (with-selected-frame frame
48 (let ((map (copy-keymap msdos-key-remapping-map)))
49 (set-keymap-parent map (keymap-parent local-function-key-map))
50 (set-keymap-parent local-function-key-map map)))
51 (set-terminal-parameter frame 'msdos-setup-keyboard t))
52 (set-input-mode nil nil 0))
53
0064ab85
EZ
54;; ----------------------------------------------------------------------
55;; DOS display setup
56;; =================
57;;
58;; DOS can only support a single font. On most systems (with the
59;; possible exception of Far Eastern DOS versions), this means that
60;; two character sets are available at any given time: the ASCII
61;; charset, and a single national charset, usually mapped to codes
62;; above 128 (i.e., with 8th bit set). Which national charset is
63;; supported depends on the codepage loaded by the system when it
64;; boots; usually, this codepage cannot be changed without
65;; rebooting.
66;;
67;; Since each codepage can usually display character of a single
68;; MULE charset, Emacs can display a single MULE charset with the
ff586413
EZ
69;; glyphs of the current codepage. When Emacs starts on DOS, it
70;; automatically sets its default coding systems for file I/O and
da6062e6 71;; terminal output according to the current DOS codepage, given by
ff586413 72;; the `dos-codepage' variable.
0064ab85
EZ
73;;
74;; This leaves us with the problem of displaying character sets
75;; other than the one which maps directly into the current codepage.
76;; The following functions and variables handle this nuisance by
77;; defining a display table where each character that doesn't have a
78;; glyph in some codepage is mapped to a string which represents it.
79;; For example, a small c with cedilla is mapped to the string
ff586413 80;; ",c". A nice feature of the display tables is that Emacs
0064ab85
EZ
81;; knows that the string represents a single character, and thus
82;; cursor motion works as you'd expect: a single `C-f' moves past
83;; the entire string which represents a single character.
84;; ----------------------------------------------------------------------
85
8a3d1f8b
EZ
86(defvar IT-unicode-translations
87 '(
ff586413
EZ
88 (160 563 ; first, last
89 [ 255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" ; Latin-1
90 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3"
91 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2"
92 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C"
93 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N"
94 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^"
95 "\"U" "Y'" "-P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao"
96 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i"
97 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u"
98 "u'" "u^" "\"u" "y'" "-p" "\"y" ; 255
99 "A-" "a-" "A(" "a(" "A;" "a;" "C'" "c'" "C>" "c>" ; Latin Extended-A
8a3d1f8b
EZ
100 "C." "c." "C<" "c<" "D<" "d<" "D/" "d/" "E-" "e-"
101 "E(" "e(" "E." "e." "E;" "e;" "E<" "e<" "G>" "g>"
102 "G(" "g(" "G." "g." "G," "g," "H>" "h>" "H/" "h/"
103 "I~" "i~" "I-" "i-" "I(" "i(" "I;" "i;" "I." "i."
104 "IJ" "ij" "J>" "j>" "K," "k," "kk" "L'" "l'" "L,"
105 "l," "L<" "l<" "L." "l." "L/" "l/" "N'" "n'" "N,"
106 "n," "N<" "n<" "'n" "NG" "ng" "O-" "o-" "O(" "o("
107 "O\"" "o\"" "OE" "oe" "R'" "r'" "R," "r," "R<" "r<"
108 "S'" "s'" "S>" "s>" "S," "s," "S<" "s<" "T," "t,"
109 "T<" "t<" "T/" "t/" "U~" "u~" "U-" "u-" "U(" "u("
110 "U0" "u0" "U\"" "u\"" "U;" "u;" "W>" "w>" "Y>" "y>"
111 "Y:" "Z'" "z'" "Z." "z." "Z<" "z<" "s1" ; 017f
112 "b/" "B2" "=B" "=b" "B6" "b6" "!C" "C2" "c2" "-D" ;Lat. Extended-B
113 "D2" "=D" "=d" "!d" "!E" "-E" "Eps" "F2" "f2" "G2"
114 "V0" "hv" "io" "-I" "K2" "k2" "-l" "la-" "!M" "2N"
115 "n_" "-O" "O9" "o9" "OI" "oi" "P2" "p2" "'R" "!S"
116 "!s" "Esh" "!esh" "t~" "T2" "t2" "T~" "U9" "u9" "Ups"
117 "V2" "Y2" "y2" "Z/" "z/" "ED" "!ED" "!ed" "ed;" "2/"
118 "5-" "_5-" "ts" "wn" "|_" "||" "|=" "!_" "DZ<" "Dz<"
119 "dz<" "LJ3" "Lj3" "lj3" "NJ3" "Nj3" "nj3" "A<" "a<" "I<"
120 "i<" "O<" "o<" "U<" "u<" "U:-" "u:-" "U:'" "u:'" "U:<"
121 "u:<" "U:!" "u:!" "e1" "A:-" "a:-" "A.-" "a.-" "AE-" "ae-"
122 "G/" "g/" "G<" "g<" "K<" "k<" "O;" "o;" "O1" "o1"
123 "EZ" "ez" "j<" "DZ3" "Dz3" "dz3" "G'" "g'" "Hv" "Wn"
124 "N`" "n`" "AA'" "aa'" "AE'" "ae'" "O/'" "o/'" "A!!" "a!!"
125 "A)" "a)" "E!!" "e!!" "E)" "e)" "I!!" "i!!" "I)" "i)"
126 "O!!" "o!!" "O)" "o)" "R!!" "r!!" "R)" "r)" "U!!" "u!!"
127 "U)" "u)" ",S" ",s" ",T" ",t" "'3" "'3_" "H<" "h<"
128 nil nil "8" "8_" "Z2" "z2" "A." "a." "E," "e,"
129 "O:-" "o:-" "O~-" "o~-" "O." "o." "O.-" "o.-" "Y-" "y-"] ; 0x233
130
131 )
132
ff586413 133 (884 1123 ; first, last
8a3d1f8b
EZ
134 [ "'" "," nil nil nil nil "j3" nil nil nil ; Greek
135 "?;" nil nil nil nil nil "'*" "'%" "A%" ".*"
136 "E%" "Y%" "I%" nil "O%" nil "U%" "W%" "i3" "A*"
137 "B*" "G*" "D*" "E*" "Z*" "H*" "Th*" "I*" "K*" "L*"
138 "M*" "N*" "C*" "O*" "P*" "R*" nil "S*" "T*" "U*"
139 "F*" "X*" "Q*" "W*" "J*" "V*" "a%" "e%" "y%" "i%"
140 "u3" "a*" "b*" "g*" "d*" "e*" "z*" "h*" "th*" "i*"
141 "k*" "l*" "m*" "n*" "c*" "o*" "p*" "r*" "*s" "s*"
142 "t*" "u*" "f*" "x*" "q*" "w*" "j*" "v*" "o%" "u%"
143 "w%" nil "b3" "th%" "U2*" "'U2*" "U:2*" "ph*" "pi*" "ka*"
144 nil nil "Sti" "sti" "Dig" "dig" "Kop" "kop" "Sam" "sam"
145 "She" "she" "Fei" "fei" "Khe" "khe" "Hor" "hor" "Gan" "gan"
146 "Shi" "shi" "Dei" "dei" "ka*" "rh*" "ls*" "yo*" nil nil
147 nil nil nil nil nil nil nil nil nil nil
148 "IE'" "E:" "D%" "G%" "IE" "DS" "II" "YI" "J%" "LJ" ; Cyrillic
149 "NJ" "Ts" "KJ" "`I=" "V%" "DZ" 65 "B=" 66 "G="
150 68 69 "Z%" 51 85 "J=" 75 "L=" 77 72
151 79 "P=" 80 67 84 89 "F=" 88 "C=" "C%"
152 "S%" "Sc" "=\"" "Y=" "%\"" "Ee" "JU" "JA" 97 "b="
153 98 "g=" 103 101 "z%" "z=" 117 "j=" 107 "l="
154 109 "n=" 111 "p=" 112 99 "t=" 121 "f=" 120
155 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "ju" "ja"
156 "ie'" "e:" "d%" "g%" "ie" "ds" "ii" "yi" "j%" "lj"
157 "nj" "ts" "kj" "v%" "`i=" "dz" "OM=" "om=" "Y3" "y3"] ; 0x463
158 )
159
ff586413 160 (1454 1645 ; first, last
cf8f0b68
EZ
161 [ nil nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'"
162 "-," "`." nil "\\." "(.)" "|'" "`-" nil "||" nil
163 nil "::" nil nil nil nil nil nil nil nil
164 nil nil nil nil
165 "A+" "B+" "G+" "D+" "H+" "W+" "Z+" "X+" "Tj" "J+" ; Hebrew
8a3d1f8b
EZ
166 "K%" "K+" "L+" "M%" "M+" "N%" "N+" "S+" "E+" "P%"
167 "P+" "Zj" "ZJ" "Q+" "R+" "Sh" "T+" nil nil nil
168 nil nil "WW+" "WJ+" "JJ+" "'+" "\"+" nil nil nil
169 nil nil nil nil nil nil nil nil nil nil
170 nil nil nil nil nil nil nil nil nil nil
171 ",+" nil nil nil nil nil nil nil nil nil ; Arabic
172 nil nil nil nil nil ";+" nil nil nil "?+"
173 nil "H'" "aM" "aH" "wH" "ah" "yH" "a+" "b+" "tm"
174 "t+" "tk" "g+" "hk" "x+" "d+" "dk" "r+" "z+" "s+"
175 "sn" "c+" "dd" "tj" "zH" "e+" "i+" nil nil nil
176 nil nil "++" "f+" "q+" "k+" "l+" "m+" "n+" "h+"
177 "w+" "j+" "y+" ":+" "\"+" "=+" "/+" "'+" "1+" "3+"
178 "0+" nil nil nil nil nil nil nil nil nil
179 nil nil nil nil "0a" "1a" "2a" "3a" "4a" "5a"
180 "6a" "7a" "8a" "9a" "a%" "a." "a," "a*" ]
181 )
182
ff586413 183 (7680 9450 ; first, last
8a3d1f8b
EZ
184 [ "A-0" "a-0" "B." "b." "B-." "b-." "B_" "b_" "C,'" "c,'" ; Lat Ext Add
185 "D." "d." "D-." "d-." "D_" "d_" "D," "d," "D->" "d->"
186 "E-!" "e-!" "E-'" "e-'" "E->" "e->" "E-?" "e-?" "E,(" "e,("
187 "F." "f." "G-" "g-" "H." "h." "H-." "h-." "H:" "h:"
188 "H," "h," "H-(" "h-(" "I-?" "i-?" "I:'" "i:'" "K'" "k'"
189 "K-." "k-." "K_" "k_" "L-." "l-." "_L-." "_l-." "L_" "l_"
190 "L->" "l->" "M'" "m'" "M." "m." "M-." "m-." "N." "n."
191 "N-." "n-." "N_" "n_" "N->" "n->" "O?'" "o?'" "O?:" "o?:"
192 "O-!" "o-!" "O-'" "o-'" "P'" "p'" "P." "p." "R." "r."
193 "R-." "r-." "_R-." "_r-." "R_" "r_" "S." "s." "S-." "s-."
194 "S'." "s'." "S<." "s<." ".S-." ".s-." "T." "t." "T-." "t-."
195 "T_" "t_" "T->" "t->" "U_:" "u_:" "U-?" "u-?" "U->" "u->"
196 "U?'" "u?'" "U-:" "u-:" "V?" "v?" "V-." "v-." "W!" "w!"
197 "W'" "w'" "W:" "w:" "W." "w." "W-." "w-." "X." "x."
198 "X:" "x:" "Y." "y." "Z>" "z>" "Z-." "z-." "Z_" "z_"
199 "h_" "t:" "w0" "y0" "a))" "s1." nil nil nil nil
200 "A-." "a-." "A2" "a2" "A>'" "a>'" "A>!" "a>!" "A>2" "a>2"
201 "A>~" "a>~" ".A>" ".a>" "A('" "a('" "A(!" "a(!" "A(2" "a(2"
202 "A(~" "a(~" ".A(" ".a(" "E-." "e-." "E2" "e2" "E~" "e~"
203 "E>'" "e>'" "E>!" "e>!" "E>2" "e>2" "E>~" "e>~" ".E>" ".e>"
204 "I2" "i2" "I-." "i-." "O-." "o-." "O2" "o2" "O>'" "o>'"
205 "O>!" "o>!" "O>2" "o>2" "O>~" "o>~" ".O>" ".o>" "O9'" "o9'"
206 "O9!" "o9!" "O92" "o92" "O9~" "o9~" ".O9" ".o9" "U-." "u-."
207 "U2" "u2" "U9'" "u9'" "U9!" "u9!" "U92" "u92" "U9~" "u9~"
208 ".U9" ".u9" "Y!" "y!" "Y-." "y-." "Y2" "y2" "Y~" "y~"
209 nil nil nil nil nil nil "a*," "a*;" nil nil ; Greek Ext (0x1f00)
210 nil nil nil nil "A*," "A*;" nil nil nil nil
211 nil nil "e*," "e*;" nil nil nil nil nil nil
212 "E*," "E*;" nil nil nil nil nil nil "y*," "y*;"
213 nil nil nil nil nil nil "Y*," "Y*;" nil nil
214 nil nil nil nil "i*," "i*;" nil nil nil nil
215 nil nil "I*," "I*;" nil nil nil nil nil nil
216 "o*," "o*;" nil nil nil nil nil nil "O*," "O*;"
217 nil nil nil nil nil nil "u*," "u*;" nil nil
218 nil nil nil nil nil "U*;" nil nil nil nil
219 nil nil "w*," "w*;" nil nil nil nil nil nil
220 "W*," "W*;" nil nil nil nil nil nil "a*!" "a*'"
221 "e*!" "e*'" "y*!" "y*'" "i*!" "i*'" "o*!" "o*'" "u*!" "u*'"
222 "w*!" "w*'" nil nil nil nil nil nil nil nil
223 nil nil nil nil nil nil nil nil nil nil
224 nil nil nil nil nil nil nil nil nil nil
225 nil nil nil nil nil nil nil nil nil nil
226 nil nil nil nil nil nil nil nil nil nil
227 nil nil "a*(" "a*-" nil "a*j" nil nil "a*~" nil
228 "A*(" "A*-" "A*!" "A*'" "A*J" ")*" "J3" ",," "?*" "?:"
229 nil "y*j" nil nil "y*?" nil "E*!" "E*'" "Y*!" "Y*'"
230 "Y*J" ",!" ",'" "?," "i*(" "i*-" nil nil nil nil
231 "i*?" nil "I*(" "I*-" "I*!" "I*'" nil ";!" ";'" "?;"
232 "u*(" "u*-" nil nil "r*," "r*;" "u*?" nil "U*(" "U*-"
233 "U*!" "U*'" "R*;" "!:" ":'" "!*" nil nil nil "w*j"
234 nil nil "w*?" nil "O*!" "O*'" "W*!" "W*'" "W*J" "/*"
235 ";;" nil nil nil "1N" "1M" "3M" "4M" "6M" nil ; Gen Punct
236 nil "1T" "1H" nil nil nil "LRM" "RLM" "-1" nil
be8cf99e 237 nil "--" "---" "===" "!2" "=2" "6`" "'9" ".9" "9'"
8a3d1f8b
EZ
238 "``" "''" ":9" "9``" "/-" "/=" "sb" "3b" nil ".."
239 "..." ".-" "LSep" "PSep" "LR[" "RL[" "PDF" "LRO" "RLO" 255
240 "%o" "%oo" "'" "''" "\"'" "`" "``" "```" ".^" "<,"
241 ",>" ":X" "!!" "?!" "'-" nil nil nil nil "-b"
242 "/f" nil nil nil nil nil nil nil nil nil
243 nil nil nil nil nil nil nil nil nil nil
244 nil nil nil nil nil nil nil nil nil nil
245 nil nil nil nil nil nil nil nil nil nil
246 nil nil nil nil "^0" nil nil nil "^4" "^5"
247 "^6" "^7" "^8" "^9" "^+" "^-" "^=" "^(" "^)" "^n"
248 "_0" "_1" "_2" "_3" "_4" "_5" "_6" "_7" "_8" "_9"
249 "_+" "_-" "_=" "_(" "_)" nil nil nil nil nil
250 nil nil nil nil nil nil nil nil nil nil
251 nil nil nil nil nil "Ff" "Li" nil nil "Pt"
252 nil "W=" "NIS" nil "E=" nil nil nil nil nil
253 nil nil nil nil nil nil nil nil nil nil
254 nil nil nil nil nil nil nil nil nil nil
255 nil nil nil nil nil nil nil nil nil nil
256 nil nil nil nil nil nil nil nil nil nil
257 nil nil nil nil nil nil nil nil nil nil
258 nil nil nil nil nil nil nil nil nil nil
259 nil nil nil nil nil nil nil nil nil nil
260 nil nil nil nil nil nil nil nil "a/c" "a/s"
261 nil "oC" nil "c/o" "c/u" "=e" nil "oF" nil nil
262 nil nil "-h" "=h" nil nil nil nil nil nil
263 "N0" "PO" nil nil nil nil "Re" nil "Rx" nil
264 "SM" "TEL" "TM" nil nil nil "Om" nil nil nil
265 "oK" "AO" nil nil "Est" nil nil nil nil nil
266 nil "Aleph" "Bet" "Gimel" "Dalet" "=i=" nil nil nil nil
267 nil nil nil nil nil nil nil nil nil nil
268 nil nil nil nil nil nil nil nil nil nil
269 nil "1/3" "2/3" "1/5" "2/5" "3/5" "4/5" "1/6" "5/6" "1/8"
270 "3/8" "5/8" "7/8" "1/" ".I" "II" "III" "IV" ".V" "VI"
271 "VII" "VIII" "IX" "X" "XI" "XII" ".L" ".C" ".D" ".M"
272 ".i" "ii" "iii" "iv" ".v" "vi" "vii" "viii" "ix" ".x"
273 "xi" ".l" ".c" ".d" ".m" "CD" "DD" "CoD" "CI" nil
274 nil nil nil nil nil nil nil nil nil nil
275 nil "<-" "|^" "->" "|v" "<->" "v|^" "^\\" "/^" "\\v"
276 "v/" "<-/" "/->" "<~" "~>" "<<-" "|^^" "->>" "|vv" "<-<"
277 ">->" "<-|" "_|^" "|->" "-|v" "_v|^" "<-?" "?->" "<-o" "o->"
278 "<~>" "<-/>" nil nil nil nil nil nil nil nil
279 nil nil nil nil nil nil nil nil nil nil
280 nil nil nil nil nil nil nil nil nil nil
281 nil nil nil "<=/" "<=/>" "/=>" "<=" "||^" "=>" "||v"
282 "<=>" "v||^" "^\\\\" "//^" "\\\\v" "v//" "<-=" "=->" nil nil
283 nil nil "<.." ":^" "..>" ":v" nil nil "<::" "::^"
284 "::>" "::v" nil nil nil nil nil nil nil nil
285 nil nil nil nil nil nil nil nil nil nil
286 nil nil nil nil "FA" "C." "dP" "TE" "~TE" "/0"
287 "DE" "NB" "(-" "~(-" "e-" "-)" "~-)" "-e" "QED" "*P"
288 nil "+Z" "--" "-+" ".+" "./" ".\\" "*-" "Ob" "Sb"
289 "SQR" "CBR" nil "0(" "00" "-L" "-V" nil nil ".|"
290 "~.|" "||" "/||" "AND" "OR" "(U" ")U" "In" "DI" nil
291 "Io" nil nil nil nil nil ".:" ":." ":R" "::"
292 ".-." "-:" ":-:" ":~:" "?~" "~?" "??" nil nil "/~"
293 "-~" "~-" "/~-" "~=" "~/=" "/~=" "~~" "/~~" nil nil
294 "=?" ")(" "v^" "^_" ".=" "=;" ".=." nil ":=" "=:"
295 nil "=o" "=)" "=^" "=v" "*=" "=<>" "=df" nil "?="
296 "!=" "-=" "!-=" "==" "=<" ">=" nil nil nil nil
297 "<<" ">>" "()" "/)(" "!<" "!>" nil nil nil nil
298 nil nil nil nil nil nil "<'" "`>" "=<'" "`>="
299 "~<'" "`>~" "/<'" "/`>" "(C" ")C" "/(C" "/)C" "(_" ")_"
300 "/(_" "/)_" nil nil nil nil nil nil nil nil
301 nil nil nil "0+" "0-" "0x" "0/" "0." "0o" "0*"
302 "0=" "0_" nil nil nil nil "|T" "T|" "-T" "_T"
303 nil nil nil nil nil nil nil nil nil nil
304 nil nil nil nil nil nil nil nil nil "-,-"
305 nil "XOR" "NAND" "NOR" nil nil nil nil nil nil
306 nil nil nil nil nil nil nil nil nil nil
307 nil nil nil nil nil nil nil nil "<." ".>"
308 "<<<" ">>>" nil nil nil nil nil nil nil nil
309 nil nil nil nil nil nil nil nil nil nil
310 nil nil ":3" "..." nil nil nil nil nil nil
311 nil nil nil nil nil nil nil nil nil nil
312 nil nil "Eh" nil nil nil nil nil "<7" ">7"
313 "7<" "7>" nil nil nil nil "~I" nil "(A" nil
314 nil "TR" nil "=||" "88" nil nil nil nil nil
315 nil nil "Iu" "Il" nil nil "-^-" "-`-" "D->" nil
316 nil "</" "/>" "<-D" nil nil nil nil nil nil
317 nil nil nil nil nil nil nil nil nil nil
318 nil nil nil nil nil nil nil nil nil nil
319 nil nil nil nil nil nil nil nil nil nil
320 nil nil nil nil nil nil nil nil nil nil
321 nil nil nil nil nil nil nil nil nil nil
322 nil nil nil nil nil nil nil nil nil nil
323 nil nil nil nil nil nil nil nil nil nil
324 nil nil nil nil nil nil nil nil nil nil
325 nil nil nil nil nil nil nil nil nil nil
326 nil nil nil nil nil nil nil nil nil nil
327 nil nil nil nil nil nil nil nil nil nil
328 nil nil nil nil nil nil nil nil nil nil
329 nil nil nil nil nil nil nil nil nil nil
330 nil nil nil nil nil nil nil nil nil nil
331 nil nil nil nil nil nil nil nil nil nil
332 nil nil nil nil nil nil nil nil nil nil
333 nil nil nil nil nil nil nil nil nil nil
334 nil nil nil nil nil nil nil nil nil nil
335 nil nil nil nil nil nil nil nil nil nil
336 nil nil nil nil nil nil nil nil nil nil
337 nil nil nil nil nil nil "NUL" "SOH" "STX" "ETX"
338 "EOT" "ENQ" "ACK" "BEL" "BS" "HT" "LF" "VT" "FF" "CR"
339 "SS" "SI" "DLE" "DC1" "DC2" "DC3" "DC4" "NAK" "SYN" "ETB"
340 "CAN" "EM" "SUB" "ESC" "FS" "GS" "RS" "US" "SP" "DEL"
341 "b/" ",_," "NL" nil "?^" nil nil nil nil nil
342 nil nil nil nil nil nil nil nil nil nil
343 nil nil nil nil nil nil nil nil nil nil
344 nil nil nil nil nil nil nil nil nil nil
345 nil nil nil nil nil nil nil nil nil nil
346 nil nil nil nil nil nil nil nil nil nil
347 nil nil "1-o" "2-o" "3-o" "4-o" "5-o" "6-o" "7-o" "8-o"
348 "9-o" "10-o" "11-o" "12-o" "13-o" "14-o" "15-o" "16-o" "17-o" "18-o"
349 "19-o" "20-o" "(1)" "(2)" "(3)" "(4)" "(5)" "(6)" "(7)" "(8)"
350 "(9)" "(10)" "(11)" "(12)" "(13)" "(14)" "(15)" "(16)" "(17)" "(18)"
351 "(19)" "(20)" "1." "2." "3." "4." "5." "6." "7." "8."
352 "9." "10." "11." "12." "13." "14." "15." "16." "17." "18."
353 "19." "20." "(a)" "(b)" "(c)" "(d)" "(e)" "(f)" "(g)" "(h)"
354 "(i)" "(j)" "(k)" "(l)" "(m)" "(n)" "(o)" "(p)" "(q)" "(r)"
355 "(s)" "(t)" "(u)" "(v)" "(w)" "(x)" "(y)" "(z)" "A-o" "B-o"
356 "C-o" "D-o" "E-o" "F-o" "G-o" "H-o" "I-o" "J-o" "K-o" "L-o"
357 "M-o" "N-o" "O-o" "P-o" "Q-o" "R-o" "S-o" "T-o" "U-o" "V-o"
358 "W-o" "X-o" "Y-o" "Z-o" "a-o" "b-o" "c-o" "d-o" "e-o" "f-o"
359 "g-o" "h-o" "i-o" "j-o" "k-o" "l-o" "m-o" "n-o" "o-o" "p-o"
360 "q-o" "r-o" "s-o" "t-o" "u-o" "v-o" "w-o" "x-o" "y-o" "z-o"
361 "0-o" ]
362 )
363 )
364
ff586413
EZ
365 "A list of strings that should be used to represent Unicode
366characters on a DOS terminal which does not have corresponding
367glyphs built into the installed codepage.")
8a3d1f8b 368
ff586413 369(defun IT-setup-unicode-display (coding &optional table)
8a3d1f8b 370 "Set up display table TABLE for displaying mule-unicode-* characters
ff586413
EZ
371on a DOS terminal whose codepage provides the coding-system CODING.
372If TABLE is nil or omitted, `standard-display-table' is used."
373 (interactive "zCode page: ")
8a3d1f8b
EZ
374 (let ((disp-tab (or table standard-display-table))
375 (tail IT-unicode-translations)
376 translation)
377 (while tail
378 (setq translation (car tail) tail (cdr tail))
ff586413
EZ
379 (let* ((first (car translation))
380 (last (nth 1 translation))
381 (table (nth 2 translation))
8a3d1f8b 382 (i 0)
ff586413 383 (this first)
8a3d1f8b
EZ
384 glyph)
385 (while (<= i (- last first))
386 (setq glyph (aref table i))
ff586413
EZ
387 (when (and glyph
388 (unencodable-char-position 0 1 coding nil (string this)))
389 (aset disp-tab this
390 (vconcat (if (numberp glyph)
391 (string glyph)
392 glyph))))
8a3d1f8b
EZ
393 (setq i (1+ i) this (1+ this)))))))
394
ff586413 395(defvar dos-codepage)
4009e4f8
EZ
396(defvar dos-country-code)
397
398;; The following alist was compiled from:
399;;
400;; Ralf Brown's Interrupt List. file INTERRUP.F, D-2138, Table 01400
401;; http://www.ethnologue.com/country_index.asp (official languages)
402;; http://unicode.org/onlinedat/languages.html
403;; http://unicode.org/onlinedat/countries.html
404;;
405;; Only the official languages listed for each country.
406;;
407(defvar dos-locale-alist
408 '(( 1 . "en_US")
409 ( 2 . "fr_CA")
410 ( 3 . "es_MX") ; what the heck is "Latin America"?
411 ( 4 . "en_CA")
412 ( 7 . "ru_RU")
413 ( 20 . "ar_EG")
414 ( 27 . "af_ZA")
415 ( 30 . "el_GR")
416 ( 31 . "nl_NL")
417 ( 32 . "nl_BE")
418 ( 33 . "fr_FR")
419 ( 34 . "es_ES")
420 ( 35 . "bg_BG")
421 ( 36 . "hu_HU")
422 ( 38 . "sh_YU")
423 ( 39 . "it_IT")
424 ( 40 . "ro_RO")
425 ( 41 . "de_CH")
426 ( 42 . "cs_CZ")
427 ( 43 . "de_AT")
428 ( 44 . "en_UK")
429 ( 45 . "da_DK")
430 ( 46 . "sv_SE")
431 ( 47 . "no_NO")
432 ( 48 . "pl_PL")
433 ( 49 . "de_DE")
434 ( 51 . "es_PE")
435 ( 52 . "es_MX")
436 ( 53 . "es_CU")
437 ( 54 . "es_AR")
438 ( 55 . "pt_BR")
439 ( 56 . "es_CL")
440 ( 57 . "es_CO")
441 ( 58 . "es_VE")
442 ( 60 . "ms_MY")
443 ( 61 . "en_AU")
444 ( 62 . "id_ID")
445 ( 63 . "fil_PH")
446 ( 64 . "en_NZ")
447 ( 65 . "zh_SG")
448 ( 66 . "th_TH")
449 ( 81 . "ja_JP")
450 ( 82 . "ko_KR")
451 ( 84 . "vi_VN")
452 ( 86 . "zh_CN")
453 ( 88 . "zh_TW")
454 ( 90 . "tr_TR")
455 ( 91 . "hi_IN")
456 ( 92 . "ur_PK")
457 ( 93 . "ps_AF")
458 ( 94 . "si_LK")
459 ( 98 . "fa_IR")
460 ( 99 . "en" )
461 (102 . "he_IL")
462 (112 . "be_BY")
463 (212 . "ar_MA")
464 (213 . "ar_DZ")
465 (216 . "ar_TN")
466 (218 . "ar_LY")
467 (220 . "en_GM")
468 (221 . "fr_SN")
469 (222 . "mey_MR")
470 (223 . "fr_ML")
471 (224 . "fr_GN")
472 (227 . "fr_NE")
473 (228 . "fr_TG")
474 (230 . "fr_MU")
475 (231 . "en_LR")
476 (232 . "en_SL")
477 (233 . "en_GH")
478 (234 . "en_NG")
479 (235 . "ar_TD")
480 (236 . "fr_CF")
481 (237 . "fr_CM")
482 (241 . "fr_GA")
483 (242 . "fr_CG")
484 (243 . "sw_ZR")
485 (244 . "pt_AO")
486 (245 . "pt_GW")
487 (249 . "ar_SD")
488 (250 . "fr_RW")
489 (251 . "am_ET")
490 (252 . "so_SO")
491 (253 . "fr_DJ")
492 (254 . "sw_KE")
493 (255 . "sw_TZ")
494 (256 . "en_UG")
495 (257 . "fr_BI")
496 (259 . "pt_MZ")
497 (260 . "en_ZM")
498 (261 . "mg_MG")
499 (263 . "en_ZW")
500 (264 . "en_NA")
501 (265 . "en_MW")
502 (266 . "st_LS")
503 (267 . "en_BW")
504 (268 . "en_SZ")
505 (299 . "kl_GL")
506 (350 . "en_GI")
507 (351 . "pt_PT")
508 (352 . "fr_LU")
509 (353 . "ga_IE")
510 (354 . "is_IS")
511 (355 . "sq_AL")
512 (356 . "mt_MT")
513 (357 . "gr_CY")
514 (358 . "fi_FI")
515 (359 . "bg_BG")
516 (370 . "lt_LT")
517 (371 . "lv_LV")
518 (372 . "et_EE")
519 (373 . "mo_MD")
520 (380 . "uk_UA")
521 (381 . "sr_RS")
522 (384 . "hr_HR")
523 (385 . "hr_HR")
524 (386 . "sl_SI")
525 (387 . "bs_BA")
526 (388 . "sr_BA")
527 (389 . "mk_MK")
528 (421 . "cs_CZ")
529 (422 . "sk_SK")
530 (502 . "es_GT")
531 (503 . "es_SV")
532 (504 . "es_HN")
533 (505 . "es_NI")
534 (506 . "es_CR")
535 (507 . "es_PA")
536 (509 . "ht_HT")
537 (590 . "fr_GP")
538 (591 . "es_BO")
539 (592 . "en_GY")
540 (593 . "es_EC")
541 (594 . "fr_GF")
542 (595 . "gn_PY")
543 (596 . "fr_MQ")
544 (597 . "nl_SR")
545 (598 . "es_UY")
546 (785 . "ar" )
547 (804 . "uk_UA")
548 (850 . "ko_KP")
549 (855 . "km_KH")
550 (856 . "lo_LA")
551 (880 . "bn_BD")
552 (886 . "zh_TW")
553 (960 . "dv_MV")
554 (961 . "ar_LB")
555 (962 . "ar_JO")
556 (963 . "ar_SY")
557 (964 . "ar_IQ")
558 (965 . "ar_KW")
559 (966 . "ar_SA")
560 (967 . "ar_YE")
561 (968 . "ar_OM")
562 (969 . "ar_YE")
563 (971 . "ar_AE")
564 (972 . "he_IL")
565 (973 . "ar_BH")
566 (974 . "ar_QA")
567 (975 . "dz_BT")
568 (976 . "mn_MN")
569 (977 . "ne_NP")
570 (995 . "my_MM")
571 )
572 "Alist of MS-DOS country codes and the corresponding locale names.")
08baac3d
EZ
573
574(defun dos-codepage-setup ()
ff586413 575 "Set up multilingual environment for the installed DOS codepage.
08baac3d
EZ
576
577This function sets coding systems, display tables, and the language
578environment options as appropriate for the current value of `dos-codepage'.
579
ff586413 580This function is automatically run at startup via the `after-init-hook'
4009e4f8 581list. You can (and should) also run it if and when the value of
08baac3d
EZ
582`dos-codepage' changes."
583 (interactive)
4009e4f8
EZ
584 (let ((locale (cdr (assq dos-country-code dos-locale-alist)))
585 (coding (format "cp%s" dos-codepage))
586 coding-dos coding-unix)
ff586413
EZ
587 (setq coding-dos (intern (format "%s-dos" coding))
588 coding-unix (intern (format "%s-unix" coding)))
4009e4f8
EZ
589 (setq locale (if locale
590 (format "%s.cp%s" locale dos-codepage)
591 "en_US.cp437"))
592 (set-locale-environment locale)
ff586413 593 (set-selection-coding-system coding-dos)
ff586413
EZ
594 (IT-setup-unicode-display coding-unix)
595 (prefer-coding-system coding-dos)
52199878 596 (and (default-value 'enable-multibyte-characters)
ff586413
EZ
597 (setq unibyte-display-via-language-environment t))
598 ;; Some codepages have sporadic support for Latin-1, Greek, and
599 ;; symbol glyphs, which don't belong to their native character
600 ;; set. It's a nuisance to have all those glyphs here, for all
601 ;; the codepages (for starters, I don't even have references for
602 ;; all the codepages). So provide a hook for those who want to
603 ;; squeeze every bit of support out of their terminal/font.
604 (run-hooks 'dos-codepage-setup-hook)
605 ))
08baac3d 606
092af6d8 607;;; internal.el ends here