{* UltraStar Deluxe - Karaoke Game * * UltraStar Deluxe is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * 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; either version 2 * of the License, or (at your option) any later version. * * 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; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * $URL$ * $Id$ *} unit UCommandLine; interface {$IFDEF FPC} {$MODE Delphi} {$ENDIF} {$I switches.inc} uses UPath; type TScreenMode = (scmDefault, scmFullscreen, scmWindowed); TSplitMode = (spmDefault, spmNoSplit, spmSplit); {** * Reads infos from ParamStr and set some easy interface variables *} TCMDParams = class private fLanguage: string; fResolution: string; procedure ShowHelp(); procedure ReadParamInfo; procedure ResetVariables; function GetLanguage: integer; function GetResolution: integer; public // some boolean variables set when reading infos Debug: boolean; Benchmark: boolean; NoLog: boolean; ScreenMode: TScreenMode; Joypad: boolean; Split: TSplitMode; // some value variables set when reading infos {-1: Not Set, others: Value} Depth: integer; Screens: integer; // some strings set when reading infos {Length=0: Not Set} SongPath: IPath; ConfigFile: IPath; ScoreFile: IPath; // pseudo integer values property Language: integer read GetLanguage; property Resolution: integer read GetResolution; // some procedures for reading infos constructor Create; end; var Params: TCMDParams; const cHelp = 'help'; cDebug = 'debug'; cMediaInterfaces = 'showinterfaces'; implementation uses SysUtils, UPlatform; {** * Resets variables and reads info *} constructor TCMDParams.Create; begin inherited; if FindCmdLineSwitch( cHelp ) or FindCmdLineSwitch( 'h' ) then ShowHelp(); ResetVariables; ReadParamInfo; end; procedure TCMDParams.ShowHelp(); function Fmt(aString : string) : string; begin Result := Format('%-15s', [aString]); end; begin writeln; writeln('**************************************************************'); writeln(' UltraStar Deluxe - Command line switches '); writeln('**************************************************************'); writeln; writeln(' '+ Fmt('Switch') +' : Purpose'); writeln(' ----------------------------------------------------------'); writeln(' '+ Fmt(cMediaInterfaces) +' : Show in-use media interfaces'); writeln(' '+ Fmt(cDebug) +' : Display Debugging info'); writeln; platform.halt; end; {** * Reset Class Variables *} procedure TCMDParams.ResetVariables; begin Debug := False; Benchmark := False; NoLog := False; ScreenMode := scmDefault; Joypad := False; Split := spmDefault; // some value variables set when reading infos {-1: Not Set, others: Value} fResolution := ''; fLanguage := ''; Depth := -1; Screens := -1; // some strings set when reading infos {Length=0 Not Set} SongPath := PATH_NONE; ConfigFile := PATH_NONE; ScoreFile := PATH_NONE; end; {** * Read command-line parameters *} procedure TCMDParams.ReadParamInfo; var I: integer; PCount: integer; Command: string; begin PCount := ParamCount; //Log.LogError('ParamCount: ' + Inttostr(PCount)); // check all parameters for I := 1 to PCount do begin Command := ParamStr(I); // check if the string is a parameter if (Length(Command) > 1) and (Command[1] = '-') then begin // remove '-' from command Command := LowerCase(Trim(Copy(Command, 2, Length(Command) - 1))); //Log.LogError('Command prepared: ' + Command); // check command // boolean triggers if (Command = 'debug') then Debug := True else if (Command = 'benchmark') then Benchmark := True else if (Command = 'nolog') then NoLog := True else if (Command = 'fullscreen') then ScreenMode := scmFullscreen else if (Command = 'window') then ScreenMode := scmWindowed else if (Command = 'joypad') then Joypad := True else if (Command = 'split') then Split := spmSplit else if (Command = 'nosplit') then Split := spmNoSplit // integer variables else if (Command = 'depth') then begin // check if there is another Parameter to get the Value from if (PCount > I) then begin Command := ParamStr(I + 1); // check for valid value // FIXME: guessing an array-index of depth is very error prone. If (Command = '16') then Depth := 0 Else If (Command = '32') then Depth := 1; end; end else if (Command = 'screens') then begin // check if there is another parameter to get the value from if (PCount > I) then begin Command := ParamStr(I + 1); // check for valid value If (Command = '1') then Screens := 0 Else If (Command = '2') then Screens := 1; end; end // pseudo integer values else if (Command = 'language') then begin // check if there is another parameter to get the value from if (PCount > I) then begin // write value to string fLanguage := Lowercase(ParamStr(I + 1)); end; end else if (Command = 'resolution') then begin // check if there is another parameter to get the value from if (PCount > I) then begin // write value to string fResolution := Lowercase(ParamStr(I + 1)); end; end // string values else if (Command = 'songpath') then begin // check if there is another parameter to get the value from if (PCount > I) then begin // write value to string SongPath := Path(ParamStr(I + 1)); end; end else if (Command = 'configfile') then begin // check if there is another parameter to get the value from if (PCount > I) then begin // write value to string ConfigFile := Path(ParamStr(I + 1)); // is this a relative path -> then add gamepath if (not ConfigFile.IsAbsolute) then ConfigFile := Platform.GetExecutionDir().Append(ConfigFile); end; end else if (Command = 'scorefile') then begin // check if there is another parameter to get the value from if (PCount > I) then begin // write value to string ScoreFile := Path(ParamStr(I + 1)); end; end; end; end; { Log.LogInfo('Screens: ' + Inttostr(Screens)); Log.LogInfo('Depth: ' + Inttostr(Depth)); Log.LogInfo('Resolution: ' + Inttostr(Resolution)); Log.LogInfo('Resolution: ' + Inttostr(Language)); Log.LogInfo('sResolution: ' + sResolution); Log.LogInfo('sLanguage: ' + sLanguage); Log.LogInfo('ConfigFile: ' + ConfigFile); Log.LogInfo('SongPath: ' + SongPath); Log.LogInfo('ScoreFile: ' + ScoreFile); } end; //------------- // GetLanguage - Get Language ID from saved String Information //------------- function TCMDParams.GetLanguage: integer; {var I: integer; } begin Result := -1; {* JB - 12sep07 to remove uINI dependency //Search for Language For I := 0 to high(ILanguage) do if (LowerCase(ILanguage[I]) = sLanguage) then begin Result := I; Break; end; *} end; //------------- // GetResolution - Get Resolution ID from saved String Information //------------- function TCMDParams.GetResolution: integer; {var I: integer; } begin Result := -1; {* JB - 12sep07 to remove uINI dependency //Search for Resolution For I := 0 to high(IResolution) do if (LowerCase(IResolution[I]) = sResolution) then begin Result := I; Break; end; *} end; end.