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