code: public void initShell(I_CmsShellCommands additionalShellCommands, PrintStream out, PrintStream err) {
  
          // set the output streams
          m_out = out;
          m_err = err;
  
          // initialize the settings of the user
          m_settings = initSettings();
  
          // initialize shell command object
          m_shellCommands = new CmsShellCommands();
          m_shellCommands.initShellCmsObject(m_cms, this);
  
          // initialize additional shell command object
          if (additionalShellCommands != null) {
              m_additionalShellCommands = additionalShellCommands;
              m_additionalShellCommands.initShellCmsObject(m_cms, this);
              m_additionalShellCommands.shellStart();
          } else {
              m_shellCommands.shellStart();
          }
  
          m_commandObjects = new ArrayList<CmsCommandObject>();
          if (m_additionalShellCommands != null) {
              // get all shell callable methods from the additional shell command object
              m_commandObjects.add(new CmsCommandObject(m_additionalShellCommands));
          }
          // get all shell callable methods from the CmsShellCommands
          m_commandObjects.add(new CmsCommandObject(m_shellCommands));
          // get all shell callable methods from the CmsRequestContext
          m_commandObjects.add(new CmsCommandObject(m_cms.getRequestContext()));
          // get all shell callable methods from the CmsObject
          m_commandObjects.add(new CmsCommandObject(m_cms));
      }
docs: Initializes the CmsShell.<p>
  
  @param additionalShellCommands optional object for additional shell commands, or null
  @param out stream to write the regular output messages to
  @param err stream to write the error messages output to