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 / clients / runlevel.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  223 lines

  1. /**
  2.  * File:    runlevel.ycp
  3.  * Module:    System Services (Runlevel) (formerly known as Runlevel Editor)
  4.  * Summary:    Main File
  5.  * Authors:    Martin Lazar <mlazar@suse.cz>, 2004
  6.  *
  7.  * $Id: runlevel.ycp 21394 2005-02-08 09:36:55Z jsuchome $
  8.  *
  9.  */
  10. {
  11.  
  12. textdomain "runlevel";
  13.  
  14. import "RunlevelEd";
  15. import "CommandLine";
  16.  
  17. include "runlevel/wizard.ycp";
  18.  
  19. boolean AddHandler(map<string,string> opts) {
  20.     if (nil == CommandLine::UniqueOption( opts, ["service"])) 
  21.     return false;
  22.     list<string> rls = nil;
  23.     if (opts["runlevels"]:nil != nil) {
  24.     rls = splitstring(opts["runlevels"]:"", ",");
  25.     }
  26.     list<string> services = splitstring(opts["service"]:"", ",");
  27.     foreach(string service, services, {
  28.     integer ierr = RunlevelEd::ServiceInstall(service, rls);
  29.     if (ierr == 1) {
  30.         CommandLine::Print(sformat(_("Error: service '%1' not found."), service));
  31.     }
  32.     });
  33.     return true;
  34. }
  35.  
  36. boolean DeleteHandler(map<string,string> opts) {
  37.     if (nil == CommandLine::UniqueOption( opts, ["service"])) 
  38.     return false;
  39.     list<string> rls = nil;
  40.     if (opts["runlevels"]:nil != nil) {
  41.     rls = splitstring(opts["runlevels"]:"", ",");
  42.     }
  43.     list<string> services = splitstring(opts["service"]:"", ",");
  44.     foreach(string service, services, {
  45.     RunlevelEd::ServiceRemove(service, rls);
  46.     });
  47.     return true;
  48. }
  49.  
  50. boolean SetHandler(map<string,string> opts) {
  51.     if (nil == CommandLine::UniqueOption( opts, ["runlevel"])) 
  52.     return false;;
  53.     RunlevelEd::SetDefaultRunlevel(opts["runlevel"]:"5");
  54.     return true;
  55. }
  56.  
  57. void CommandLineTableDump(list<list> table)
  58. {
  59.     integer columns = 0;
  60.     list<integer> len = [];
  61.     integer totallen = 0;
  62.     integer c = 0;
  63.     foreach(list l, table, {
  64.     columns = size(l) > columns ? size(l) : columns;
  65.     c = 0;
  66.     while(c<size(l)) {
  67.         if (l[c]:nil != nil) {
  68.         len[c] = size(l[c]:"") > len[c]:0 ? size(l[c]:"") : len[c]:0;
  69.         }
  70.         c = c+1;
  71.     }
  72.     });
  73.     c=0;
  74.     while(c<columns) {
  75.     totallen = totallen + len[c]:0 + 3;
  76.     c = c+1;
  77.     }
  78.     if (totallen >= 80) {
  79.     len[columns-1] = 80 - (totallen - len[columns-1]:0);
  80.     if (len[columns-1]:0<3) len[columns-1] = 3;
  81.     }
  82.     foreach(list l, table, {
  83.     string line = "";
  84.     c=0;
  85.     if (size(l)>0) {
  86.         while(c<columns) {
  87.         totallen = size(line);
  88.         line = line + l[c]:"";
  89.         if (c<columns-1) {
  90.             while(size(line)<totallen+len[c]:0) {line=line+" ";}
  91.             line = line + " | ";
  92.         }
  93.         c=c+1;
  94.         }
  95.     } else {
  96.         while(c<columns) {
  97.         totallen = size(line);
  98.         while(size(line)<totallen+len[c]:0) {line=line+"-";}
  99.         if (c<columns-1) {
  100.             line = line + "-+-";
  101.         }
  102.         c=c+1;
  103.         }
  104.     }
  105.     CommandLine::Print(line);
  106.     });
  107. }
  108.  
  109. boolean SummaryHandler(map<string,string> opts) {
  110.     list<string> service_names = nil;
  111.     // translators: table headers
  112.     list<list> services = [[_("Service"),_("Runlevels"),_("Description")],[]];
  113.     map<string,boolean> rl = $[];
  114.     if (opts["service"]:nil != nil) {
  115.     service_names = (list<string>)union([ opts["service"]:"" ], RunlevelEd::ServiceDependencies(opts["service"]:"", true));
  116.     } else {
  117.     service_names = RunlevelEd::GetAvailableServices(true);
  118.     CommandLine::Print(sformat(_("Default Runlevel after Boot: %1"), RunlevelEd::GetDefaultRunlevel()));
  119.     CommandLine::Print(sformat(_("Current Runlevel: %1"), RunlevelEd::GetCurrentRunlevel()));
  120.     CommandLine::Print("");
  121.     }
  122.     foreach(string service_name, service_names, {
  123.     string description = RunlevelEd::GetServiceShortDescription(service_name);
  124.     if (description == nil || size(description) == 0) {
  125.         description = RunlevelEd::GetServiceDescription(service_name);
  126.         if (findfirstof(description, "\n")!=nil) {
  127.         description = substring(description, 0, findfirstof(description, "\n"));
  128.         }
  129.     }
  130.     list<string> runlevels = [];
  131.     if (opts["defaults"]:nil != nil) {
  132.         runlevels = RunlevelEd::GetServiceDefaultStartRunlevels(service_name);
  133.     } else {
  134.         runlevels = RunlevelEd::GetServiceCurrentStartRunlevels(service_name);
  135.     }
  136.     foreach(string r, runlevels, {rl[r]=true;});
  137.     services = add(services, [service_name, runlevels, description]);
  138.     });
  139.     integer c = 0;
  140.     while(c<size(services)) {
  141.     if (services[c,1]:nil != nil && is(services[c,1]:nil, list)) {
  142.         list<string> rll = [];
  143.         foreach(string r, boolean l, rl, { rll=add(rll, contains(services[c,1]:[], r) ? r: " ");});
  144.         services[c,1] = mergestring(rll, " ");
  145.     }
  146.     c = c+1;
  147.     }
  148.     CommandLineTableDump(services);
  149. }
  150.  
  151. map cmdline = $[
  152.     "id": "runlevel",
  153.     // translators: command line help text for runlevel module
  154.     "help": _("Configuration of system services (runlevel)"),
  155.     "guihandler": RunlevelSequence,
  156.     "initialize": RunlevelEd::Read,
  157.     "finish": RunlevelEd::Write,
  158.     "actions": $[
  159.     "summary": $[
  160.         // translators: command line help text for "summary" action
  161.         "help": _("Show a list of current system service status"),
  162.         "handler": SummaryHandler,
  163.     ],
  164.     "add": $[
  165.         // translators: command line help text for "add" action
  166.         "help": _("Enable the service"),
  167.         "handler": AddHandler,
  168.     ],
  169.     "delete": $[
  170.         // translators: command line help text for "delete" action
  171.         "help": _("Disable the service"),
  172.         "handler": DeleteHandler,
  173.     ],
  174.     "set": $[
  175.         // translators: command line help text for "set" action
  176.         "help": _("Set default runlevel after boot"),
  177.         "handler": SetHandler,
  178.     ],
  179.     ],
  180.     "options": $[
  181.     "runlevel" : $[
  182.         // translators: command line help text for "runlevel" option
  183.         "help": _("Specify default runlevel"),
  184.         "type": "enum",
  185.         "typespec": ["2", "3", "5"],
  186.     ],
  187.     "runlevels" : $[
  188.         // translators: command line help text for "runlevels" option
  189.         "help": _("Comma separated list of runlevels"),
  190.         "type": "string",
  191.     ],
  192.     "service": $[
  193.         // translators: command line help text for "service" option
  194.         "help": _("Comma separated service names"),
  195.         "type": "string",
  196.     ],
  197.     "defaults": $[
  198.         // translators: command line help text for "defaults" option
  199.         "help": _("List default runlevels instead of current"),
  200.         "type": "",
  201.     ],
  202.     ],
  203.     "mappings": $[
  204.     "summary": ["service", "defaults"],
  205.     "add": ["service", "runlevels"],
  206.     "delete": ["service", "runlevels"],
  207.     "set": ["runlevel"],
  208.     ]
  209. ];
  210.  
  211. y2milestone("----------------------------------------");
  212. y2milestone("System service (runlevel) started");
  213.  
  214.  
  215. any ret = CommandLine::Run(cmdline);
  216.     
  217. y2milestone("System service (runlevel) finished");
  218. y2milestone("----------------------------------------");
  219.  
  220. return ret;
  221.  
  222. }
  223.