00TODO: Tasks left to accomplish before rc is complete Spec fehlt Command interpreter (probably goes in rc.usecase.pod) Beispiel Default Error Control flow Errors during execution Multiple sections given Wildcard 'all' given Both wildcard and multiple sections Avoid a silent failure when giving non-existent run commands (Marcus.) Use case - give 'restart' command in place of 'start' to stopped prog User assumes stop implicitly dropped if program not running Consider Removing the OSSP_RC_DEACT deactivation feature (thl.) Make return code and error definitions unique to OSSP rc. Offer include directive in config file. Dynamic handling of command interpreter option. Environment of manpage has redundant text. Must do Strip local popt code, and move in OSSP popt library. Translate rc bourne shell script to ANSI C. Finish man page. Start latex or Docbook guide. If a variable is defined for which no default exists, warn user (Scholli.) /-------------------OSSP rc Inhalt------------------\ | Manpage | | rc.1 Section 1 oder 8-Konflict? | | rc-sample.5 Vielleicht umnennen rc.usecases.5 | | rc.conf.5 Beschreibung aber kein Beispiel | | | | Geliefert | | rc.env Leer | | rc.conf Ausgekommentet Beispiel | | | | Beispiele | | rc.example Soll rc.fooboar umgenannt werden | \---------------------------------------------------/ Pseudocode *********************************** * psoudocode implementation of rc * *********************************** parse options read and merge all "rc.conf" files parse "Locate" Locate /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/} Locate /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/} Locate %{RCFILE}/.duerc Locate ${HOME}/.duerc:m/^(.*)<\/dir>/i Locate ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g} Locate path/file/regex:regex_inside_file foreach locate { for each (locate all possible rcfiles after variable expansion and shell globbing) { continue if (absolute path seen previously) //avoid duplicates if (filename matches given rcfile && securitycheck(RequireUmask, RequireOwner, RequireGroup)) load file and grab only a part of the file according to info after colon given in "locate" } } foreach located_rcfile_fraction { parse rcfile into blocks according to --ParseSectionDef take out %config section according to --NameConfig take out %common section according to --NameCommon take out any sections given on command line } foreach section { if (multiple rcfiles, i.e. all) sort rcfiles by section priority. foreach rcfile { script = ""; script += %config from rcfile script += rc.env and override it create_script_for_rcfile(script, section, parent=no) expand our internal variables execute, print or printeval script with user & group priveleges and command interpreter according to options or section header } } EXIT create_script_for_rcfile(script, section, parent) { script += "${body}" //start with a pseudo value if (!parent) { //only one rc.func!? replace ${body} with %common from rc.func if no ${body} assume prepend } replace ${body} with %common from rcfile if no ${body} assume prepend if (!parent) { //only one rc.func!? replace ${body} with %section from rc.func if no ${body} assume prepend } replace ${body} with %section from rcfile expand references using --ParseSectionRef and calling create_script_for_rcfile(section, parent=yes); }