home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / Misc.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  227 lines

  1. /**
  2.  * Module:
  3.  *    Misc
  4.  * File:
  5.  *    Misc.ycp
  6.  * Purpose:
  7.  *    miscellaneous definitions for installation
  8.  * Author:    Klaus Kaempf <kkaempf@suse.de>
  9.  * $Id: Misc.ycp 25956 2005-10-20 13:23:40Z jsuchome $
  10.  */
  11. {
  12.  
  13.     module "Misc";
  14.  
  15.  
  16.     /*
  17.      * Message after finishing installation and before the system
  18.      * boots for the first time.
  19.      *
  20.      */
  21.     global string boot_msg = "";
  22.  
  23.     /**
  24.      * @param    first    string    name of first file to try
  25.      * @param    second    string    name of second file to try
  26.      * @return    any    content of file
  27.      *
  28.      * try to read first file, if it doesn't exist, read second
  29.      * files must reside below /usr/lib/YaST2
  30.      * files must have ycp syntax
  31.      */
  32.  
  33.     global define any ReadAlternateFile ( string first, string second)
  34.     ``{
  35.     any result = SCR::Read (.target.yast2, [first, nil]);
  36.     if (result == nil)
  37.         result = SCR::Read (.target.yast2, second);
  38.     return result;
  39.     }
  40.  
  41.     /**
  42.      * @param    hardware_entry    map    map of .probe entry
  43.      * @return    string    vendor and device name
  44.      *
  45.      * common function to extract 'name' of hardware
  46.      */
  47.  
  48.     global define string hardware_name (map hardware_entry)
  49.     ``{
  50.     string sub_vendor = "";
  51.     string sub_device = "";
  52.  
  53.     sub_vendor = hardware_entry["sub_vendor"]:"";
  54.     sub_device = hardware_entry["sub_device"]:"";
  55.  
  56.     if ((sub_vendor != "") && (sub_device != ""))
  57.     {
  58.         return (sub_vendor + "\n" + sub_device);
  59.     }
  60.     else
  61.     {
  62.         string vendor = hardware_entry["vendor"]:"";
  63.         return (vendor
  64.             + ((vendor != "") ? "\n" : "")
  65.             + hardware_entry["device"]:"");
  66.     }
  67.     }
  68.  
  69.  
  70.     /**
  71.      * @param lmap    map    map of language codes and translations
  72.      *                e.g. $[ "default" : "Defaultstring", "de" : "German....", ...]
  73.      * @param lang    string    language as ISO code, either 2 chars (de)
  74.      *                or 5 chars (de_DE)
  75.      * @return    string        translation
  76.      *
  77.      * Define a macro that looks up a localized string in a language map
  78.      * of the form $[ "default" : "Defaultstring", "de" : "German....", ...]
  79.      */
  80.  
  81.     global define string translate(map lmap, string lang)
  82.     ``{
  83.     string t = lmap[lang]:"";
  84.     if ((size (t) == 0)
  85.         && size(lang) > 2)
  86.     {
  87.         t = lmap[substring(lang, 0, 2)]:"";
  88.     }
  89.     if (size (t) == 0)
  90.     {
  91.         t = lmap["default"]:"";
  92.     }
  93.  
  94.     return t;
  95.     }
  96.  
  97.     /**
  98.      * SysconfigWrite()
  99.      * @param    path level    path behind .sysconfig for all values
  100.      * @param    list values    list of [ .NAME, value] lists
  101.      *
  102.      * @returns boolean        false if SCR::Write reported error
  103.      *
  104.      * write list of sysyconfig entries via rcconfig agent
  105.      */
  106.  
  107.     global define boolean SysconfigWrite (path level, list<list> values)
  108.     ``{
  109.     boolean result = true;
  110.     if (level == .)
  111.         level = .sysconfig;
  112.     else
  113.         level = .sysconfig + level;
  114.  
  115.     foreach (list entry, values,
  116.     ``{
  117.         if (size (entry) != 2)
  118.         y2error ("bad entry in rc_write()");
  119.         else
  120.         {
  121.         if (!SCR::Write (level + entry[0]:., entry[1]:""))
  122.             result = false;
  123.         }
  124.     });
  125.     return result;
  126.     }
  127.  
  128.  
  129.  
  130.     /**
  131.      * MergeOptions
  132.      * Merges "opt1=val1 opt2=val2 ..." and $["opta":"vala", ..."]
  133.      * to $["opt1":"val1", "opt2":"val2", "opta":"vala", ...]
  134.      * as needed by modules.conf agent
  135.      * @param options    string    module options, e.g. "opt1=val1 opt2=val2 ..."
  136.      * @param optmap    map    possible old options $["opta":"vala", ...]
  137.      * @returns map    $["opt1":"val1", "opt2":"val2", ...]
  138.      */
  139.  
  140.     global define map SplitOptions (string options, map optmap)
  141.     ``{
  142.     // step 1: split "opt1=val1 opt2=val2 ..."
  143.     // to ["opt1=val1", "opt2=val2", "..."]
  144.  
  145.     list<string> options_split = splitstring (options, " ");
  146.  
  147.     foreach (string options_element, options_split,
  148.     ``{
  149.         list options_values = splitstring (options_element, "=");
  150.  
  151.         if ((size (options_values) == 1)
  152.         && (optmap[options_element]:"" == ""))
  153.         {
  154.         // single argument
  155.         optmap[options_element] = "";
  156.         }
  157.         else if (size (options_values) == 2)
  158.         {
  159.         // argument with value
  160.         optmap[options_values[0]:""] = options_values[1]:"";
  161.         }
  162.     });
  163.     return optmap;
  164.     }
  165.  
  166.  
  167.     /**
  168.      * SysconfigRead()
  169.      *
  170.      * Try an SCR::Read(...) and return the result if successful.
  171.      * On failure return the the second parameter (default value)
  172.      *
  173.      * @param    sysconfig_path   Sysconfig SCR path.
  174.      * @param    defaultv         Default value
  175.      *
  176.      * @return  Success --> Result of SCR::Read<br>
  177.      *        Failure --> Default value
  178.      *
  179.      */
  180.  
  181.     global define string SysconfigRead( path sysconfig_path, string defaultv )
  182.     ``{
  183.     string local_ret = (string)SCR::Read( sysconfig_path );
  184.  
  185.     if ( local_ret == nil )
  186.     {
  187.         y2error("Failed reading '%1'", sysconfig_path );
  188.         return( defaultv );
  189.     }
  190.     else
  191.     {
  192.         y2milestone("%1: '%2'", sysconfig_path, local_ret );
  193.         return( local_ret );
  194.     }
  195.     }    // SysconfigRead()
  196.  
  197.     /**
  198.      * Try to read value from sysconfig file and return the result if successful.
  199.      * Function reads from arbitrary sysconfig file, for which the agent
  200.      * doesn't exist: e.g. from different partition like /mnt/etc/sysconfig/file.
  201.      *
  202.      * @param    key        Key of the value we want to read from sysconfig file.
  203.      * @param    defaultv        Default value
  204.      * @param    location    Full path to target sysconfig file.
  205.      *
  206.      * @return  Success --> Result of SCR::Read<br>
  207.      *        Failure --> Default value
  208.      *
  209.      * @example Misc::CustomSysconfigRead ("INSTALLED_LANGUAGES", "", Installation::destdir + "/etc/sysconfig/language");
  210.      *
  211.      */
  212.     global define string CustomSysconfigRead (string key, string defval,string location)
  213.     {
  214.     if (location == "")
  215.         return defval;
  216.  
  217.     path custom_path = topath (location);
  218.         SCR::RegisterAgent (custom_path, `ag_ini(
  219.         `SysConfigFile (location)
  220.     ));
  221.     string ret = SysconfigRead (add (custom_path, key), defval);
  222.     SCR::UnregisterAgent (custom_path);
  223.     return ret;
  224.     }
  225.  
  226. }
  227.