diff -r 8bf36d368291 -r a7934cd12469 hedgewars/ArgParsers.inc --- a/hedgewars/ArgParsers.inc Sat Dec 15 23:00:07 2012 +0100 +++ b/hedgewars/ArgParsers.inc Sun Dec 16 01:25:11 2012 +0100 @@ -75,32 +75,26 @@ begin WriteLn(stdout, 'Usage:'); WriteLn(stdout, ''); - WriteLn(stdout, ' hwengine [path to user hedgewars folder] [options]'); + WriteLn(stdout, ' hwengine [options]'); WriteLn(stdout, ''); WriteLn(stdout, 'where [options] are any of the following:'); - WriteLn(stdout, ' --locale [path to language file]'); - WriteLn(stdout, ' --width [screen width in pixels]'); + WriteLn(stdout, ' --user-dir [path to user data folder]'); + WriteLn(stdout, ' --locale [name of language file]'); + WriteLn(stdout, ' --width [screen width in pixels]'); WriteLn(stdout, ' --height [screen height in pixels]'); - WriteLn(stdout, ' --depth [color depth]'); WriteLn(stdout, ' --volume [sound level]'); - WriteLn(stdout, ' --time [number of seconds]'); + WriteLn(stdout, ' --frame-interval [milliseconds]'); + WriteLn(stdout, ' --raw-quality [flags]'); + WriteLn(stdout, ' --low-quality'); WriteLn(stdout, ' --nomusic'); WriteLn(stdout, ' --nosound'); WriteLn(stdout, ' --fullscreen'); WriteLn(stdout, ' --showfps'); WriteLn(stdout, ' --altdmg'); - WriteLn(stdout, ' --lowquality'); WriteLn(stdout, ' --stats-only'); WriteLn(stdout, ' --help'); WriteLn(stdout, ''); - WriteLn(stdout, 'Deprecated options:'); - WriteLn(stdout, ' --set-video [screen width] [screen height] [color dept]'); - WriteLn(stdout, ' --set-audio [volume] [enable music] [enable sounds]'); - WriteLn(stdout, ' --set-other [language file] [full screen] [show FPS]'); - WriteLn(stdout, ' --set-multimedia [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]'); - WriteLn(stdout, ' --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]'); - WriteLn(stdout, ''); - WriteLn(stdout, 'For a more detailed help and examples go to:'); + WriteLn(stdout, 'For more detailed help and examples go to:'); WriteLn(stdout, 'http://code.google.com/p/hedgewars/wiki/CommandLineOptions'); end; @@ -115,12 +109,16 @@ getLongIntParameter:= tmpInt; end; -function getStringParameter(str:String; var paramIndex:LongInt): String; +function getStringParameter(str:String; var paramIndex:LongInt; var wrongParameter:Boolean): String; begin paramIndex:= paramIndex + 1; + wrongParameter:= (str='') or (Copy(str,1,2) = '--'); + if wrongParameter then + WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a string, you passed "'+str+'"'); getStringParameter:= str; end; + procedure parseClassicParameter(cmdArray: Array of String; size:LongInt; var paramIndex:LongInt); Forward; function parseParameter(cmd:String; arg:String; var paramIndex:LongInt): Boolean; @@ -129,60 +127,67 @@ const otherArray: Array [1..3] of String = ('--locale','--fullscreen','--showfps'); const mediaArray: Array [1..8] of String = ('--width','--height','--depth','--volume','--nomusic','--nosound','--locale','--fullscreen'); const allArray: Array [1..12] of String = ('--width','--height','--depth','--volume','--nomusic','--nosound','--locale','--fullscreen','--showfps','--altdmg','--time','--lowquality'); -const reallyAll: array[0..19] of shortstring = ( - '--locale', '--width', '--height', '--depth', '--time' - , '--volume', '--nomusic', '--nosound', '--fullscreen', '--showfps' - , '--altdmg', '--lowquality', '--set-video', '--set-audio', '--set-other' - , '--set-multimedia', '--set-everything', '--stats-only', '--gci', '--help'); +const reallyAll: array[0..21] of shortstring = ( + '--user-dir', '--locale', '--width', '--height', '--frame-interval', '--volume','--nomusic', '--nosound', + '--fullscreen', '--showfps', '--altdmg', '--low-quality', '--raw-quality', + {deprecated} '--depth', '--set-video', '--set-audio', '--set-other', '--set-multimedia', '--set-everything', + '--stats-only', '--gci', '--help'); var cmdIndex: byte; begin parseParameter:= false; cmdIndex:= 0; + + //NOTE: Any update to the list of parameters must be reflected in the case statement below, the reallyAll array above, + // the the DisplayUsage() procedure, the HWForm::getDemoArguments() function, and the online wiki + while (cmdIndex <= High(reallyAll)) and (cmd <> reallyAll[cmdIndex]) do inc(cmdIndex); case cmdIndex of - {--locale} 0 : cLocaleFName := getStringParameter (arg, paramIndex); - {--width} 1 : cScreenWidth := getLongIntParameter(arg, paramIndex, parseParameter); - {--height} 2 : cScreenHeight := getLongIntParameter(arg, paramIndex, parseParameter); - {--depth} 3 : cBits := getLongIntParameter(arg, paramIndex, parseParameter); - {--time} 4 : cTimerInterval := getLongIntParameter(arg, paramIndex, parseParameter); - {--volume} 5 : SetVolume ( getLongIntParameter(arg, paramIndex, parseParameter) ); - {--nomusic} 6 : SetMusic ( false ); - {--nosound} 7 : SetSound ( false ); - {--fullscreen} 8 : cFullScreen := true; - {--showfps} 9 : cShowFPS := true; - {--altdmg} 10 : cAltDamage := true; - {--lowquality} 11 : cReducedQuality:= ($FFFFFFFF * getLongIntParameter(arg, paramIndex, parseParameter)) xor rqLowRes; //HACK! - {--set-video} 12 : parseClassicParameter(videoArray,3,paramIndex); - {--set-audio} 13 : parseClassicParameter(audioArray,3,paramIndex); - {--set-other} 14 : parseClassicParameter(otherArray,3,paramIndex); - {--set-multimedia} 15 : parseClassicParameter(mediaArray,8,paramIndex); - {--set-everything} 16 : parseClassicParameter(allArray,12,paramIndex); - {--stats-only} 17 : begin - cOnlyStats:= true; - SetSound(false); - SetMusic(false); - cReducedQuality:= $FFFFFFFF xor rqLowRes; - end; - {--gci} 18 : begin // We had to make up all this saved space some how... \\ - WriteLn(stdout, ' '); - WriteLn(stdout, ' /\\\\\\\\\\\\ /\\\\\\\\\ /\\\\\\\\\\\ '); - WriteLn(stdout, ' /\\\////////// /\\\//////// \/////\\\/// '); - WriteLn(stdout, ' /\\\ /\\\/ \/\\\ '); - WriteLn(stdout, ' \/\\\ /\\\\\\\ /\\\ \/\\\ '); - WriteLn(stdout, ' \/\\\ \/////\\\ \/\\\ \/\\\ '); - WriteLn(stdout, ' \/\\\ \/\\\ \//\\\ \/\\\ '); - WriteLn(stdout, ' \/\\\ \/\\\ \///\\\ \/\\\ '); - WriteLn(stdout, ' \//\\\\\\\\\\\\/ \////\\\\\\\\\ /\\\\\\\\\\\ '); - WriteLn(stdout, ' \//////////// \///////// \/////////// '); - WriteLn(stdout, ' '); - WriteLn(stdout, ' Command Line Parser Implementation by a Google Code-In Student '); - WriteLn(stdout, ' ASCII Art easter egg idea by @sheepluva '); - WriteLn(stdout, ' '); - end; - {--help} 19 : begin - DisplayUsage(); - GameType:= gmtSyntax; - end; + {--user-dir} 0 : UserPathPrefix := getStringParameter (arg, paramIndex, parseParameter); + {--locale} 1 : cLocaleFName := getStringParameter (arg, paramIndex, parseParameter); + {--width} 2 : cScreenWidth := getLongIntParameter(arg, paramIndex, parseParameter); + {--height} 3 : cScreenHeight := getLongIntParameter(arg, paramIndex, parseParameter); + {--frame-interval} 4 : cTimerInterval := getLongIntParameter(arg, paramIndex, parseParameter); + {--volume} 5 : SetVolume ( getLongIntParameter(arg, paramIndex, parseParameter) ); + {--nomusic} 6 : SetMusic ( false ); + {--nosound} 7 : SetSound ( false ); + {--fullscreen} 8 : cFullScreen := true; + {--showfps} 9 : cShowFPS := true; + {--altdmg} 10 : cAltDamage := true; + {--low-quality} 11 : cReducedQuality:= $FFFFFFFF xor rqLowRes; + {--raw-quality} 12 : cReducedQuality:= getLongIntParameter(arg, paramIndex, parseParameter); + {deprecated options} + {--depth} 13 : cBits := getLongIntParameter(arg, paramIndex, parseParameter); + {--set-video} 14 : parseClassicParameter(videoArray,3,paramIndex); + {--set-audio} 15 : parseClassicParameter(audioArray,3,paramIndex); + {--set-other} 16 : parseClassicParameter(otherArray,3,paramIndex); + {--set-multimedia} 17 : parseClassicParameter(mediaArray,8,paramIndex); + {--set-everything} 18 : parseClassicParameter(allArray,12,paramIndex); + {anything else} + {--stats-only} 19 : begin + cOnlyStats:= true; + cReducedQuality:= $FFFFFFFF xor rqLowRes; + SetSound(false); + end; + {--gci} 20 : begin // We had to make up all this saved space some how... \\ + WriteLn(stdout, ' '); + WriteLn(stdout, ' /\\\\\\\\\\\\ /\\\\\\\\\ /\\\\\\\\\\\ '); + WriteLn(stdout, ' /\\\////////// /\\\//////// \/////\\\/// '); + WriteLn(stdout, ' /\\\ /\\\/ \/\\\ '); + WriteLn(stdout, ' \/\\\ /\\\\\\\ /\\\ \/\\\ '); + WriteLn(stdout, ' \/\\\ \/////\\\ \/\\\ \/\\\ '); + WriteLn(stdout, ' \/\\\ \/\\\ \//\\\ \/\\\ '); + WriteLn(stdout, ' \/\\\ \/\\\ \///\\\ \/\\\ '); + WriteLn(stdout, ' \/\\\\\\\\\\\\\/ \////\\\\\\\\\ /\\\\\\\\\\\ '); + WriteLn(stdout, ' \///////////// \///////// \/////////// '); + WriteLn(stdout, ' '); + WriteLn(stdout, ' Command Line Parser Implementation by a Google Code-In Student '); + WriteLn(stdout, ' ASCII Art easter egg idea by @sheepluva '); + WriteLn(stdout, ' '); + end; + {--help} 21 : begin + DisplayUsage(); + GameType:= gmtSyntax; + end; else begin WriteLn(stderr, 'ERROR: '+cmd+' is not a valid argument'); @@ -206,7 +211,7 @@ or (cmdArray[index] = '--fullscreen') or (cmdArray[index] = '--showfps') or (cmdArray[index] = '--altdmg') - or (cmdArray[index] = '--lowquality'); + or (cmdArray[index] = '--low-quality'); if (not isBool) or ((ParamStr(paramIndex)='1') and (cmdArray[index]<>'--nomusic') and (cmdArray[index]<>'--nosound')) then parseParameter(cmdArray[index], ParamStr(paramIndex), tmpInt); index:= index+1;