# HG changeset patch # User Joe Doyle (Ginto8) # Date 1354331286 18000 # Node ID f837447298c3c7e473c83bfdc10d4f3ce3a10629 # Parent e226be871b6ef166a98bf0bda87d57552a1a1bc5 Make user folder default to global folder in hwengine diff -r e226be871b6e -r f837447298c3 hedgewars/ArgParsers.inc --- a/hedgewars/ArgParsers.inc Fri Nov 30 23:36:18 2012 +0100 +++ b/hedgewars/ArgParsers.inc Fri Nov 30 22:08:06 2012 -0500 @@ -64,155 +64,180 @@ end; {$ENDIF} -procedure DisplayUsage; +procedure setVideo(screenWidth: LongInt; screenHeight: LongInt; bitsStr: LongInt); +begin + cScreenWidth:= screenWidth; + cScreenHeight:= screenHeight; + cBits:= bitsStr +end; + +procedure setVideoWithParameters(screenWidthParam: string; screenHeightParam: string; bitsParam: string); +var screenWidthAsInt, screenHeightAsInt, bitsStrAsInt, c: LongInt; +begin + val(screenWidthParam, screenWidthAsInt, c); + val(screenHeightParam, screenHeightAsInt, c); + val(bitsParam, bitsStrAsInt, c); + setVideo(screenWidthAsInt,screenHeightAsInt,bitsStrAsInt) +end; + +procedure setOtherOptions(languageFile: string; fullScreen: boolean); begin - WriteLn(stdout, 'Usage:'); - WriteLn(stdout, ''); - 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, ' --height [screen height in pixels]'); - WriteLn(stdout, ' --depth [color depth]'); - WriteLn(stdout, ' --volume [sound level]'); - WriteLn(stdout, ' --time [number of seconds]'); - 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, 'http://code.google.com/p/hedgewars/wiki/CommandLineOptions'); + cLocaleFName:= languageFile; + cFullScreen:= fullScreen +end; + +procedure setShowFPS(showFPS: boolean); +begin + cShowFPS:= showFPS +end; + +procedure setOtherOptionsWithParameters(languageFileParam: string; fullScreenParam: string; showFPSParam: string); +var fullScreen, showFPS: boolean; +begin + fullScreen:= fullScreenParam = '1'; + showFPS:= showFPSParam = '1'; + setOtherOptions(languageFileParam,fullScreen); + setShowFPS(showFPS) +end; + +procedure setAudio(initialVolume: LongInt; musicEnabled: boolean; soundEnabled: boolean); +begin + SetVolume(initialVolume); + SetMusic(musicEnabled); + SetSound(soundEnabled); end; -function getLongIntParameter(str:String; var paramIndex:LongInt; var wrongParameter:Boolean): LongInt; -var tmpInt, c: LongInt; +procedure setAudioWithParameters(initialVolumeParam: string; musicEnabledParam: string; soundEnabledParam: string); +var initialVolumeAsInt, c: LongInt; + musicEnabled, soundEnabled: boolean; begin - paramIndex:= paramIndex + 1; - val(str, tmpInt, c); - wrongParameter:= c <> 0; - if wrongParameter then - WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a number, you passed "'+str+'"'); - getLongIntParameter:= tmpInt; + val(initialVolumeParam, initialVolumeAsInt, c); + musicEnabled:= musicEnabledParam = '1'; + soundEnabled:= soundEnabledParam = '1'; + setAudio(initialVolumeAsInt,musicEnabled, soundEnabled) +end; + +procedure setMultimediaOptionsWithParameters(screenWidthParam, screenHeightParam, bitsParam: string; + initialVolumeParam, musicEnabledParam, soundEnabledParam: string; + languageFileParam, fullScreenParam: string); +begin + setVideoWithParameters(screenWidthParam,screenHeightParam, bitsParam); + setAudioWithParameters(initialVolumeParam,musicEnabledParam,soundEnabledParam); + setOtherOptions(languageFileParam,fullScreenParam = '1') end; -function getStringParameter(str:String; var paramIndex:LongInt): String; +procedure setAltDamageTimerValueAndQuality(altDamage: boolean; timeIterval: LongInt; reducedQuality: boolean); begin - paramIndex:= paramIndex + 1; - getStringParameter:= str; + cAltDamage:= altDamage; + cTimerInterval:= timeIterval; + if (reducedQuality) then //HACK + cReducedQuality:= $FFFFFFFF xor rqLowRes +end; + +procedure setAllOptionsWithParameters(screenWidthParam:string; screenHeightParam:string; bitsParam:string; + initialVolumeParam:string; musicEnabledParam:string; soundEnabledParam:string; + languageFileParam:string; fullScreenParam:string; showFPSParam:string; + altDamageParam:string; timeItervalParam:string; reducedQualityParam: string); +var showFPS, altDamage, reducedQuality: boolean; + timeIterval, c: LongInt; +begin + setMultimediaOptionsWithParameters(screenWidthParam,screenHeightParam, bitsParam, + initialVolumeParam,musicEnabledParam,soundEnabledParam, + languageFileParam,fullScreenParam); + showFPS := showFPSParam = '1'; + setShowFPS(showFPS); + + altDamage:= altDamageParam = '1'; + val(timeItervalParam, timeIterval, c); + reducedQuality:= reducedQualityParam = '1'; + setAltDamageTimerValueAndQuality(altDamage,timeIterval,reducedQuality); end; -procedure parseClassicParameter(cmdArray: Array of String; size:LongInt; var paramIndex:LongInt); Forward; - -function parseParameter(cmd:String; arg:String; var paramIndex:LongInt): Boolean; -const videoArray: Array [1..3] of String = ('--width','--height','--depth'); -const audioArray: Array [1..3] of String = ('--volume','--nomusic','--nosound'); -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'); +procedure playReplayFileWithParameters(paramIndex : LongInt); +var wrongParameter: boolean; begin - parseParameter:= false; - case cmd of - '--locale' : cLocaleFName := getStringParameter (arg, paramIndex); - '--width' : cScreenWidth := getLongIntParameter(arg, paramIndex, parseParameter); - '--height' : cScreenHeight := getLongIntParameter(arg, paramIndex, parseParameter); - '--depth' : cBits := getLongIntParameter(arg, paramIndex, parseParameter); - '--time' : cTimerInterval := getLongIntParameter(arg, paramIndex, parseParameter); - '--volume' : SetVolume ( getLongIntParameter(arg, paramIndex, parseParameter) ); - '--nomusic' : SetMusic ( false ); - '--nosound' : SetSound ( false ); - '--fullscreen' : cFullScreen := true; - '--showfps' : cShowFPS := true; - '--altdmg' : cAltDamage := true; - '--lowquality' : cReducedQuality:= ($FFFFFFFF * getLongIntParameter(arg, paramIndex, parseParameter)) xor rqLowRes; //HACK! - '--set-video' : parseClassicParameter(videoArray,3,paramIndex); - '--set-audio' : parseClassicParameter(audioArray,3,paramIndex); - '--set-other' : parseClassicParameter(otherArray,3,paramIndex); - '--set-multimedia' : parseClassicParameter(mediaArray,8,paramIndex); - '--set-everything' : parseClassicParameter(allArray,12,paramIndex); - '--stats-only' : begin - cOnlyStats:= true; - SetSound(false); - SetMusic(false); - cReducedQuality:= $FFFFFFFF xor rqLowRes; - end; - '--gci' : 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' : begin - DisplayUsage(); - GameType:= gmtSyntax; - end; - else + WriteLn(stdout,IntToStr(paramIndex)); + wrongParameter:= false; + while (paramIndex <= ParamCount) and (not wrongParameter) do begin - WriteLn(stderr, 'ERROR: '+cmd+' is not a valid argument'); - parseParameter:= true; - end - end; + if ParamStr(paramIndex) = '--set-video' then +//--set-video [screen width] [screen height] [color dept] + begin + if(ParamCount-paramIndex < 3) then + begin + wrongParameter:= true; + GameType:= gmtSyntax + end; + setVideoWithParameters(ParamStr(paramIndex+1), ParamStr(paramIndex+2), ParamStr(paramIndex+3)); + paramIndex:= paramIndex + 4 + end + else +//--set-audio [volume] [enable music] [enable sounds] + if ParamStr(paramIndex) = '--set-audio' then + begin + if(ParamCount-paramIndex < 3) then + begin + wrongParameter := true; + GameType:= gmtSyntax + end; + setAudioWithParameters(ParamStr(paramIndex+1),ParamStr(paramIndex+2), ParamStr(paramIndex+3)); + paramIndex:= paramIndex + 4 + end + else +// --set-other [language file] [full screen] [show FPS] + if ParamStr(paramIndex) = '--set-other' then + begin + if(ParamCount-paramIndex < 3) then + begin + wrongParameter:= true; + GameType:= gmtSyntax + end; + setOtherOptionsWithParameters(ParamStr(paramIndex+1),ParamStr(paramIndex+2), ParamStr(paramIndex+3)); + paramIndex:= paramIndex + 4 + end + else +//--set-multimedia [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] + if ParamStr(paramIndex) = '--set-multimedia' then + begin + if ParamCount-paramIndex < 8 then + begin + wrongParameter:= true; + GameType:= gmtSyntax + end; + setMultimediaOptionsWithParameters(ParamStr(paramIndex+1),ParamStr(paramIndex+2),ParamStr(paramIndex+3), + ParamStr(paramIndex+4),ParamStr(paramIndex+5),ParamStr(paramIndex+6), + ParamStr(paramIndex+7),ParamStr(paramIndex+8)); + paramIndex:= paramIndex + 9 + end + else +//--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] + if ParamStr(paramIndex) = '--set-everything' then + begin + if ParamCount-paramIndex < 12 then + begin + wrongParameter:= true; + GameType:= gmtSyntax + end; + setAllOptionsWithParameters(ParamStr(paramIndex+1),ParamStr(paramIndex+2),ParamStr(paramIndex+3), + ParamStr(paramIndex+4),ParamStr(paramIndex+5),ParamStr(paramIndex+6), + ParamStr(paramIndex+7),ParamStr(paramIndex+8),ParamStr(paramIndex+9), + ParamStr(paramIndex+10),ParamStr(paramIndex+11),ParamStr(paramIndex+12)); + paramIndex:= paramIndex + 13 + end + else + if ParamStr(paramIndex) = '--stats-only' then + begin + cOnlyStats:= true; + SetSound(false); + SetMusic(false); + cReducedQuality:= $FFFFFFFF xor rqLowRes; // HACK + paramIndex:= paramIndex + 1 + end + else + begin + wrongParameter:= true; + GameType:= gmtSyntax + end + end end; -procedure parseClassicParameter(cmdArray: Array of String; size:LongInt; var paramIndex:LongInt); -var index, tmpInt: LongInt; - isBool: Boolean; -begin - index:= 0; - tmpInt:= 1; - while (index < size) do - begin - paramIndex:= paramIndex+1; - //This next line is a really strange (but short), way to check if the parameter is a boolean one - isBool:= true; case cmdArray[index] of '--nomusic':;'--nosound':;'--fullscreen':;'--showfps':;'--altdmg':;'--lowquality':; else isBool:= false; end; - if (not isBool) or ((ParamStr(paramIndex)='1') and (cmdArray[index]<>'--nomusic') and (cmdArray[index]<>'--nosound')) then - parseParameter(cmdArray[index], ParamStr(paramIndex), tmpInt); - //if isBool then - // paramIndex:= paramIndex+1; - index:= index+1; - end; -end; - -procedure playReplayFileWithParameters(); -var paramIndex, tmpInt: LongInt; - wrongParameter: boolean; -begin - UserPathPrefix:= ParamStr(1); - PathPrefix:= ParamStr(2); - recordFileName:= ParamStr(3); - paramIndex:= 4; - wrongParameter:= false; - while (paramIndex <= ParamCount) do - begin - if parseParameter( ParamStr(paramIndex), ParamStr(paramIndex+1), paramIndex) then - wrongParameter:= true; - paramIndex:= paramIndex+1; - end; - if wrongParameter = true then - begin - WriteLn(stderr, 'Please use --help to see possible arguments and their usage'); - GameType:= gmtSyntax; - end -end; diff -r e226be871b6e -r f837447298c3 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Nov 30 23:36:18 2012 +0100 +++ b/hedgewars/hwengine.pas Fri Nov 30 22:08:06 2012 -0500 @@ -536,28 +536,69 @@ end; {$IFNDEF HWLIBRARY} +/////////////////////////////////////////////////////////////////////////////// +procedure DisplayUsage; +var i: LongInt; +begin + WriteLn(stdout, 'Wrong argument format: correct configurations is'); + WriteLn(stdout, ''); + WriteLn(stdout, ' hwengine [path to user hedgewars folder] [options]'); + WriteLn(stdout, ''); + WriteLn(stdout, 'where [options] must be specified either as:'); + 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, ' --stats-only'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Read documentation online at http://code.google.com/p/hedgewars/wiki/CommandLineOptions for more information'); + WriteLn(stdout, ''); + Write(stdout, 'PARSED COMMAND: '); + + for i:=0 to ParamCount do + Write(stdout, ParamStr(i) + ' '); + + WriteLn(stdout, ''); +end; /////////////////////////////////////////////////////////////////////////////// {$INCLUDE "ArgParsers.inc"} procedure GetParams; -var tmpInt: LongInt; +var startIndex : LongInt; begin - if (ParamCount < 3) then - begin - DisplayUsage(); - GameType:= gmtSyntax; - end + if (ParamCount < 2) then + GameType:= gmtSyntax else - if (ParamCount = 3) and (ParamStr(3) = 'landpreview') then + if (ParamCount >= 2) then + begin + UserPathPrefix:= ParamStr(1); + PathPrefix:= ParamStr(2) + end; + if (ParamCount >= 3) then + recordFileName:= ParamStr(3); + if (ParamCount = 2) or + ((ParamCount >= 3) and (Copy(recordFileName,1,2) = '--')) then + begin + recordFileName := PathPrefix; + PathPrefix := UserPathPrefix; + startIndex := 3; + WriteLn(stdout,'defaulting UserPathPrefix') + end + else + startIndex := 4; + if (ParamCount = startIndex) and + (ParamStr(startIndex) = 'landpreview') then begin ipcPort:= StrToInt(ParamStr(2)); GameType:= gmtLandPreview; end else begin - if (ParamCount = 3) and (ParamStr(3) = '--stats-only') then - playReplayFileWithParameters() + if (ParamCount = startIndex) and + (ParamStr(startIndex) = '--stats-only') then + playReplayFileWithParameters(startIndex) else if ParamCount = cDefaultParamNum then internalStartGameWithParameters() @@ -566,7 +607,7 @@ internalStartVideoRecordingWithParameters() {$ENDIF} else - playReplayFileWithParameters(); + playReplayFileWithParameters(startIndex); end end; @@ -580,7 +621,7 @@ if GameType = gmtLandPreview then GenLandPreview() else if GameType = gmtSyntax then - //Exit cleanly + DisplayUsage() else Game(); // return 1 when engine is not called correctly