old_contents: /*jshint boss: true, rhino: true */
  /*globals JSHINT*/
  
  load("jshint.js");
  
  (function (args) {
      var name   = args[0],
          optstr = args[1], // arg1=val1,arg2=val2,...
          predef = args[2], // global1=override,global2,global3,...
          opts   = { rhino: true },
          input;
  
      if (!name) {
          print('Usage: jshint.js file.js');
          quit(1);
      }
  
      if (optstr) {
          optstr.split(',').forEach(function (arg) {
              var o = arg.split('=');
              opts[o[0]] = (function (ov) {
                  switch (ov) {
                  case 'true':
                      return true;
                  case 'false':
                      return false;
                  default:
                      return ov;
                  }
              }(o[1]));
          });
      }
  
      if (predef) {
          opts.predef = {};
          predef.split(',').forEach(function (arg) {
              var global = arg.split('=');
              opts.predef[global[0]] = (function (override) {
                  return (override === 'false') ? false : true;
              }(global[1]));
          });
      }
  
      input = readFile(name);
  
      if (!input) {
          print('jshint: Couldn\'t open file ' + name);
          quit(1);
      }
  
      if (!JSHINT(input, opts)) {
          for (var i = 0, err; err = JSHINT.errors[i]; i += 1) {
              print(err.reason + ' (' + name + ':' + err.line + ':' + err.character + ')');
              print('> ' + (err.evidence || '').replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
              print('');
          }
          quit(1);
      }
  
      quit(0);
  }(arguments));
  
new_contents: /*jshint boss: true, rhino: true */
  /*globals JSHINT*/
  
  load("jshint.js");
  
  (function (args) {
      var filenames = [],
          optstr, // arg1=val1,arg2=val2,...
          predef, // global1=override,global2,global3,...
          opts   = { rhino: true },
          retval = 0;
  
      args.forEach(function(arg){
          if (arg.indexOf("=") > -1){
              //first time it's the options
              if (!optstr){
                  optstr = arg;
              } else if (!predef) {
                  predef = arg;
              }
          } else {
              filenames.push(arg);
          }
      });
  
      if (filenames.length === 0) {
          print('Usage: jshint.js file.js');
          quit(1);
      }
  
      if (optstr) {
          optstr.split(',').forEach(function (arg) {
              var o = arg.split('=');
              opts[o[0]] = (function (ov) {
                  switch (ov) {
                  case 'true':
                      return true;
                  case 'false':
                      return false;
                  default:
                      return ov;
                  }
              })(o[1]);
          });
      }
      
      if (predef) {
          opts.predef = {};
          predef.split(',').forEach(function (arg) {
              var global = arg.split('=');
              opts.predef[global[0]] = (function (override) {
                  return (override === 'false') ? false : true;
              })(global[1]);
          });
      }
  
      filenames.forEach(function(name){
  
          var input = readFile(name);
  
          if (!input) {
              print('jshint: Couldn\'t open file ' + name);
              quit(1);
          }
  
          if (!JSHINT(input, opts)) {
              for (var i = 0, err; err = JSHINT.errors[i]; i++) {
                  print(err.reason + ' (' + name + ':' + err.line + ':' + err.character + ')');
                  print('> ' + (err.evidence || '').replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
                  print('');
              }
              retval = 1;
          }
      });
  
      quit(retval);
  }(arguments));
subject: Allow multiple filenames to be passed in to Rhino CLI