ossp-pkg/rc/00TODO 1.9 -> 1.10
--- 00TODO 2002/01/25 16:04:41 1.9
+++ 00TODO 2002/01/29 15:35:05 1.10
@@ -25,3 +25,70 @@
Error handling
Classic error, give 'restart' command in place of 'start' to stopped prog
+
+Pseudocode
+ ***********************************
+ * psoudocode implementation of rc *
+ ***********************************
+
+parse command line 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 path="%{RCFILE}">(.*)<\/dir>/i
+ Locate ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
+ Locate path/file/regex:regex_inside_file
+
+foreach given locate {
+ for each (locate all possible rcfiles working out the regex) {
+ 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 += %env from 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);
+}
|
|