Fix QSettings problems:
- Reopen file in ReadOnly mode if it was open in ReadWrite mode
and is being read. This is needed for stupid QSettings which
opens file in ReadWrite mode just to call readAll() on it.
- Implement setSize(0)
(*
* Hedgewars, a free turn based strategy game
* Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*)
procedure internalStartGameWithParameters();
var tmp: LongInt;
begin
UserPathPrefix:= ParamStr(1);
cScreenWidth:= StrToInt(ParamStr(2));
cScreenHeight:= StrToInt(ParamStr(3));
cBits:= StrToInt(ParamStr(4));
ipcPort:= StrToInt(ParamStr(5));
cFullScreen:= ParamStr(6) = '1';
SetSound(ParamStr(7) = '1');
SetMusic(ParamStr(8) = '1');
SetVolume(StrToInt(ParamStr(9)));
cTimerInterval:= StrToInt(ParamStr(10));
PathPrefix:= ParamStr(11);
cShowFPS:= ParamStr(12) = '1';
cAltDamage:= ParamStr(13) = '1';
UserNick:= DecodeBase64(ParamStr(14));
cReducedQuality:= StrToInt(ParamStr(15));
tmp:= StrToInt(ParamStr(16));
GrayScale:= false;
if (tmp > 9) and (tmp < 16) then
begin
GrayScale:= true;
cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp-9)))
end
else if tmp <= 9 then
cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp)))
else
cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp-6)));
cLocaleFName:= ParamStr(17);
end;
{$IFDEF USE_VIDEO_RECORDING}
procedure internalStartVideoRecordingWithParameters();
begin
internalStartGameWithParameters();
GameType:= gmtRecord;
cVideoFramerateNum:= StrToInt(ParamStr(18));
cVideoFramerateDen:= StrToInt(ParamStr(19));
RecPrefix:= ParamStr(20);
cAVFormat:= ParamStr(21);
cVideoCodec:= ParamStr(22);
cVideoQuality:= StrToInt(ParamStr(23));
cAudioCodec:= ParamStr(24);
end;
{$ENDIF}
procedure DisplayUsage;
begin
WriteLn(stdout, 'Usage:');
WriteLn(stdout, '');
WriteLn(stdout, ' hwengine <path to user hedgewars folder> <path to global data folder> <path to replay file> [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');
end;
function getLongIntParameter(str:String; var paramIndex:LongInt; var wrongParameter:Boolean): LongInt;
var tmpInt, c: LongInt;
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;
end;
function getStringParameter(str:String; var paramIndex:LongInt): String;
begin
paramIndex:= paramIndex + 1;
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;
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');
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
begin
WriteLn(stderr, 'ERROR: '+cmd+' is not a valid argument');
parseParameter:= true;
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;