home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / kbd.py < prev    next >
Encoding:
Python Source  |  2000-03-08  |  7.6 KB  |  276 lines

  1. import kudzu
  2. import string
  3. from simpleconfig import SimpleConfigFile
  4.  
  5. class Keyboard (SimpleConfigFile):
  6.     # the *first* item in each of these wins conflicts
  7.     console2xlist = [
  8.             ("be-latin1"         , ('pc102', 'be')),
  9.             ("be2-latin1"        , ('pc102', 'be')),
  10.             ("bg"                , ('pc102', 'bg')),
  11.             ("cf"                , ('pc102', 'cf')),
  12.             ("cz-lat2"           , ('pc102', 'cs')),
  13.             ("cz-lat2-prog"      , ('pc102', 'cs')),
  14.             ("de-latin1"         , ('pc102', 'de')),
  15.             ("de"                , ('pc102', 'de')),
  16.             ("de-latin1-nodeadkeys" , ('pc102', 'de')),
  17.             ("dk"                , ('pc102', 'dk')),
  18.             ("dk-latin1"         , ('pc102', 'dk')),
  19.             ("es"                , ('pc102', 'es')),
  20.             ("fi"                , ('pc102', 'fi')),
  21.             ("fi-latin1"         , ('pc102', 'fi')),
  22.             ("fr"                , ('pc102', 'fr')),
  23.             ("fr-latin0"         , ('pc102', 'fr')),
  24.             ("fr-latin1"         , ('pc102', 'fr')),
  25.             ("fr-pc"             , ('pc102', 'fr')),
  26.             ("fr_CH"             , ('pc102', 'fr_CH')),
  27.             ("fr_CH-latin1"      , ('pc102', 'fr_CH')),
  28.             ("hu"                , ('pc102', 'fr_CH')),
  29.             ("hu101"             , ('pc102', 'hu')),
  30.             ("it"                , ('pc102', 'it')),
  31.             ("it-ibm"            , ('pc101', 'it')),
  32.             ("it2"               , ('pc102', 'it')),
  33.             ("jp106"             , ('jp106', 'jp')),
  34.             ("no-latin1"         , ('pc102', 'no')),
  35.             ("no"                , ('pc102', 'no')),
  36.             ("pl"                , ('pc102', 'pl')),
  37.             ("pt-latin1"         , ('pc102', 'pt')),
  38.             ("ru"                , ('pc102', 'ru')),
  39.             ("ru-cp1251"         , ('pc102', 'ru')),
  40.             ("ru-ms"             , ('microsoft', 'ru')),
  41.             ("ru1"               , ('pc102', 'ru')),
  42.             ("ru2"               , ('pc102', 'ru')),
  43.             ("ru_win"            , ('pc105', 'ru')),
  44.             ("se-latin1"         , ('pc102', 'se')),
  45.             ("uk"                , ('pc101', 'gb')),
  46.             ("us"                , ('pc101', 'us')),
  47.             ]
  48.  
  49.     console2xsun = {
  50.         "sun-pl-altgraph"    : 'pl',
  51.         "sun-pl"        : 'pl',
  52.         "sunt4-es"        : 'es',
  53.         "sunt5-cz-us"    : 'cs',
  54.         "sunt5-de-latin1"    : 'de',
  55.         "sunt5-es"        : 'es',
  56.         "sunt5-fi-latin1"    : 'fi',
  57.         "sunt5-fr-latin1"    : 'fr',
  58.         "sunt5-ru"        : 'ru',
  59.         "sunt5-uk"        : 'en_US',
  60.         "sunt5-us-cz"    : 'cs',
  61.         }
  62.  
  63.     console2x = {}
  64.     for (console, (map, layout)) in console2xlist:
  65.     console2x[console] = (map, layout)
  66.  
  67.     x2console = {}
  68.     for (console, (map, layout)) in console2xlist:
  69.     if not x2console.has_key((map, layout)):
  70.         x2console [(map, layout)] = console
  71.  
  72.     xsun2console = {}
  73.     for (key, value) in console2xsun.items():
  74.         xsun2console [value] = key
  75.     
  76.     
  77.     def __init__ (self):
  78.     self.type = "PC"
  79.     self.model = None
  80.     self.layout = None
  81.         self.info = {}
  82.     list = kudzu.probe(kudzu.CLASS_KEYBOARD, kudzu.BUS_UNSPEC,
  83.                kudzu.PROBE_ONE)
  84.     if list:
  85.         (device, module, desc) = list[0]
  86.         if desc[:14] == 'Serial console':
  87.         self.type = "Serial"
  88.         elif desc[:8] == 'Sun Type':
  89.         self.type = "Sun"
  90.         if desc[8:9] == '4':
  91.             self.model = 'type4'
  92.             desc = desc[10:]
  93.         elif desc[8:14] == '5 Euro':
  94.             self.model = 'type5_euro'
  95.             desc = desc[15:]
  96.         elif desc[8:14] == '5 Unix':
  97.             self.model = 'type5_unix'
  98.             desc = desc[15:]
  99.         else:
  100.             self.model = 'type5'
  101.             desc = desc[10:]
  102.         if desc[:8] == 'Keyboard':
  103.             self.layout = 'us'
  104.         else:
  105.             xx = string.split (desc)
  106.             if xx[0] == 'fr_BE':
  107.             self.layout = 'be'
  108.             elif xx[0] == 'fr_CA':
  109.             self.layout = 'fr'
  110.             elif xx[0] == 'nl' or xx[0] == 'ko' or xx[0] == 'tw':
  111.             self.layout = 'us'
  112.             else:
  113.             self.layout = xx[0]
  114.     if self.type == "Sun":
  115.         self.info["KEYBOARDTYPE"] = "sun"
  116.     elif self.type != "Serial":
  117.         self.info["KEYBOARDTYPE"] = "pc"
  118.  
  119.     def available (self):
  120.     if self.type == "Sun":
  121.         return [
  122.         "sun-pl-altgraph",
  123.         "sun-pl",
  124.         "sundvorak",
  125.         "sunkeymap",
  126.         "sunt4-es",
  127.         "sunt4-no-latin1",
  128.         "sunt5-cz-us",
  129.         "sunt5-de-latin1",
  130.         "sunt5-es",
  131.         "sunt5-fi-latin1",
  132.         "sunt5-fr-latin1",
  133.         "sunt5-ru",
  134.         "sunt5-uk",
  135.         "sunt5-us-cz",
  136.         ]
  137.     if self.type == "Serial":
  138.         return [ "us" ]
  139.         return [
  140.             "azerty",
  141.             "be-latin1",
  142.             "be2-latin1",
  143.             "fr-latin0",
  144.             "fr-latin1",
  145.             "fr-pc",
  146.             "fr",
  147.             "wangbe",
  148.             "ANSI-dvorak",
  149.             "dvorak-l",
  150.             "dvorak-r",
  151.             "dvorak",
  152.             "pc-dvorak-latin1",
  153.             "tr_f-latin5",
  154.             "trf",
  155.             "bg",
  156.             "cf",
  157.             "cz-lat2-prog",
  158.             "cz-lat2",
  159.             "defkeymap",
  160.             "defkeymap_V1.0",
  161.             "dk-latin1",
  162.             "dk",
  163.             "emacs",
  164.             "emacs2",
  165.             "es",
  166.             "fi-latin1",
  167.             "fi",
  168.             "gr-pc",
  169.             "gr",
  170.             "hebrew",
  171.             "hu101",
  172.             "is-latin1",
  173.             "it-ibm",
  174.             "it",
  175.             "it2",
  176.             "jp106",
  177.             "la-latin1",
  178.             "lt",
  179.             "lt.l4",
  180.             "nl",
  181.             "no-latin1",
  182.             "no",
  183.             "pc110",
  184.             "pl",
  185.             "pt-latin1",
  186.             "pt-old",
  187.             "ro",
  188.             "ru-cp1251",
  189.             "ru-ms",
  190.             "ru-yawerty",
  191.             "ru",
  192.             "ru1",
  193.             "ru2",
  194.             "ru_win",
  195.             "se-latin1",
  196.             "sk-prog-qwerty",
  197.             "sk-prog",
  198.             "sk-qwerty",
  199.             "tr_q-latin5",
  200.             "tralt",
  201.             "trf",
  202.             "trq",
  203.             "ua",
  204.             "uk",
  205.             "us",
  206.             "croat",
  207.             "cz-us-qwertz",
  208.             "de-latin1-nodeadkeys",
  209.             "de-latin1",
  210.             "de",
  211.             "fr_CH-latin1",
  212.             "fr_CH",
  213.             "hu",
  214.             "sg-latin1-lk450",
  215.             "sg-latin1",
  216.             "sg",
  217.             "sk-prog-qwertz",
  218.             "sk-qwertz",
  219.             "slovene",
  220.             ]
  221.  
  222.     def set (self, keytable):
  223.     if self.type != "Serial":
  224.         self.info["KEYTABLE"] = keytable
  225.  
  226.     def setfromx (self, model, layout):
  227.     if self.type == "PC":
  228.             mapping = Keyboard.x2console
  229.         else:
  230.             mapping = Keyboard.xsun2console
  231.             
  232.         keys = mapping.keys ()
  233.  
  234.         fuzzy = None
  235.         for key in keys:
  236.             if type(key) == type(()):
  237.                 (mod, lay) = key
  238.             else:
  239.                 mod = model
  240.                 lay = key;
  241.             if model == mod and layout == lay:
  242.                 self.info["KEYTABLE"] = mapping[key]
  243.                 return
  244.             if layout == lay:
  245.                 fuzzy = key
  246.  
  247.         if fuzzy:
  248.             self.info["KEYTABLE"] = mapping[fuzzy]
  249.         else:
  250.             if self.type == "PC":
  251.                 self.info["KEYTABLE"] = "us"
  252.             else:
  253.                 return "sunkeymap"
  254.  
  255.     def get (self):
  256.         if self.info.has_key ("KEYTABLE"):
  257.             return self.info["KEYTABLE"]
  258.         else:
  259.         if self.type == "Sun":
  260.         for map in Keyboard.console2xsun.keys():
  261.             if Keyboard.console2xsun[map] == self.layout:
  262.             return map
  263.         return "sunkeymap"
  264.         else:
  265.         return "us"
  266.  
  267.     def getXKB (self):
  268.     if self.type == "PC":
  269.         if Keyboard.console2x.has_key (self.get ()):
  270.         (model, keylayout) = Keyboard.console2x[self.get ()]
  271.         return ("xfree86", model, keylayout, "", "")
  272.     else:
  273.         if Keyboard.console2xsun.has_key (self.get ()):
  274.         keylayout = Keyboard.console2xsun[self.get ()]
  275.         return ("sun", self.model, keylayout, "", "")
  276.