Lines 4-6 were replaced by lines 4-8 |
- one list when adding a new feature. Let us start with an |
- example: You have written a new environment driver, and you |
- want to add it to the system... |
+ one list when adding a new feature. The aim is not |
+ to make the source code shorter. In fact, the initialization |
+ code is just moved from a central place to the modules. |
+ The main goal is to have a better structure of the code, |
+ which should be easier to maintain, and less error-prone. |
Line 8 was replaced by lines 10-12 |
- !Adding a new feature |
+ Let us look at the difference when adding a command or driver. |
+ Before using this scheme, there were many different places in |
+ psi/psi.c where modifications had to be added: |
At line 9 added 46 lines. |
+ when adding a new command: |
+ |
+ * prototype declaration of the command function or include |
+ statement |
+ * inserting the command to the ''AddPsiCommands'' function |
+ * if it is a startup command, inserting the command to |
+ the ''RemovePsiCommands'' function |
+ |
+ when adding a new driver: |
+ |
+ * prototype declaration of the driver creation function or |
+ include statement |
+ * adding an "else if" clause to the ''CreatePsi''XXX function |
+ * in the case of an environment driver, also add an "else if" |
+ clause to the ''ConfigureController'' function. |
+ |
+ With the new scheme, for a module one has one init function, |
+ with prototype "void (void)" placed in the source file of the module. |
+ In this function, you call ''AddCmd'', ''AddIniCmd'' or ''AddCommand''(SCinter.h) to |
+ insert a standalone command, startup command or an object command. To |
+ create a new driver, use either the ''MakeDriver'' function, if you want |
+ to use the ''MakeObject'' command to create the driver, or the functions |
+ ''MakeInitializer/GetInitializer'', if you want to do use an other |
+ factory command (see initializer.h). |
+ The init function has to be added to the system by inserting one line |
+ to the ''SiteInit'' (psi.c) or ''InitGeneral'' (ofac.c) function. |
+ |
+ ''Suggestion by [Markus Zolliker]'' |
+ |
+ At present, only the new stuff I inserted uses this scheme. I propose |
+ to move to the new scheme during next shutdown. |
+ |
+ ofac.c: |
+ |
+ * remove ''InitIniCommands'' (moving first few lines ''InitObjectCommands'') |
+ and ''RemoveIniCommands'' |
+ * move ''InitGeneral'' to a new file named ''inigen.c'' |
+ * Create init functions for all modules defining commands, and add |
+ calls to the ''InitGeneral'' function |
+ |
+ psi.c: |
+ |
+ * all stuff (except ''SiteInit'') is moved to the corresponding modules, |
+ using ''MakeInitializer/GetInitializer'' |
+ |
+ These modifications will not change the behaviour of SICS. |