docs: int runProgram(String[] args) {
          //if (!commandConsole.isInputStreamAvailable()) {
          //	commandConsole.printErrorMessage(CommandUtils.getMessage("error.missingIO", "stdin"));
          //    return 254;
          //}
          if (!commandConsole.isStandardOutAvailable()) {
              commandConsole.printErrorMessage(CommandUtils.getMessage("error.missingIO", "stdout"));
              return 253;
          }
          if (!commandConsole.isStandardErrorAvailable()) {
          	commandConsole.printInfoMessage(CommandUtils.getMessage("error.missingIO", "stderr"));
              return 252;
          }
  
          // Help is always available
          HelpTask help = new HelpTask(SCRIPT_NAME);
          registerTask((CommandTask)help);
          
          
          ExecutionContextImpl executionCtx = new ExecutionContextImpl(commandConsole,args,this.taskResgistry);
  
          if (args.length == 0) {
          	help.execute(executionCtx);
              return 0;
          }
  
          if (looksLikeHelp(help, args[0]))
              args[0] = help.getTaskName();
          
          CommandTask task = getTask(args[0]);
          if (task == null) {
          	commandConsole.printlnErrorMessage(CommandUtils.getMessage("task.unknown", args[0]));
          	help.execute(executionCtx);
              return 0;
          } else {
              try {
                  task.execute(executionCtx);
              } catch (IllegalArgumentException e) {
              	commandConsole.printlnErrorMessage("");
                  commandConsole.printlnErrorMessage(CommandUtils.getMessage("error", e.getMessage()));
                  help.execute(executionCtx);
                  return 20;
              } 
          }
          return 0;
      }