docs: public static void main(String[] args) {
  
          JLAN_DISABLED = true;
          boolean wrongUsage = false;
          String webInfPath = null;
          String script = null;
          String servletMapping = null;
          String defaultWebApp = null;
          String additional = null;
          int errorCode = -1;
          if (args.length > 4) {
              wrongUsage = true;
          } else {
              for (int i = 0; i < args.length; i++) {
                  String arg = args[i];
                  if (arg.startsWith(SHELL_PARAM_BASE)) {
                      webInfPath = arg.substring(SHELL_PARAM_BASE.length());
                  } else if (arg.startsWith(SHELL_PARAM_SCRIPT)) {
                      script = arg.substring(SHELL_PARAM_SCRIPT.length());
                  } else if (arg.startsWith(SHELL_PARAM_SERVLET_MAPPING)) {
                      servletMapping = arg.substring(SHELL_PARAM_SERVLET_MAPPING.length());
                  } else if (arg.startsWith(SHELL_PARAM_DEFAULT_WEB_APP)) {
                      defaultWebApp = arg.substring(SHELL_PARAM_DEFAULT_WEB_APP.length());
                  } else if (arg.startsWith(SHELL_PARAM_ADDITIONAL_COMMANDS)) {
                      additional = arg.substring(SHELL_PARAM_ADDITIONAL_COMMANDS.length());
                  } else if (arg.startsWith(SHELL_PARAM_ERROR_CODE)) {
                      errorCode = Integer.valueOf(arg.substring(SHELL_PARAM_ERROR_CODE.length())).intValue();
                  } else if (arg.startsWith(SHELL_PARAM_JLAN)) {
                      JLAN_DISABLED = false;
                  } else {
                      System.out.println(Messages.get().getBundle().key(Messages.GUI_SHELL_WRONG_USAGE_0));
                      wrongUsage = true;
                  }
              }
          }
          if (wrongUsage) {
              System.out.println(Messages.get().getBundle().key(Messages.GUI_SHELL_USAGE_1, CmsShell.class.getName()));
          } else {
  
              I_CmsShellCommands additionalCommands = null;
              if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(additional)) {
                  try {
                      Class<?> commandClass = Class.forName(additional);
                      additionalCommands = (I_CmsShellCommands)commandClass.newInstance();
                  } catch (Exception e) {
                      System.out.println(
                          Messages.get().getBundle().key(Messages.GUI_SHELL_ERR_ADDITIONAL_COMMANDS_1, additional));
                      e.printStackTrace();
                      return;
                  }
              }
              boolean interactive = true;
              FileInputStream stream = null;
              if (script != null) {
                  try {
                      stream = new FileInputStream(script);
                  } catch (IOException exc) {
                      System.out.println(Messages.get().getBundle().key(Messages.GUI_SHELL_ERR_SCRIPTFILE_1, script));
                  }
              }
              if (stream == null) {
                  // no script-file, use standard input stream
                  stream = new FileInputStream(FileDescriptor.in);
                  interactive = true;
              }
              CmsShell shell = new CmsShell(
                  webInfPath,
                  servletMapping,
                  defaultWebApp,
                  "${user}@${project}:${siteroot}|${uri}>",
                  additionalCommands,
                  System.out,
                  System.err,
                  interactive);
              shell.m_errorCode = errorCode;
              shell.execute(stream);
              try {
                  stream.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }