aboutsummaryrefslogblamecommitdiffstats
path: root/src/classes0/UCommandLine.pas
blob: 3c56c6063bd6729e6cdc0e04abcae0757c50bcd7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                  
                                                                                       










































                                                                                
                             
                                      
                                  



              

               







                                                                            

            
                                                                





















                                                                              

                                                                                 


                                                                 
 

                
                




























































                                                                            

                                       







































































































































































                                                                          
unit UCommandLine;

interface

{$IFDEF FPC}
  {$MODE Delphi}
{$ENDIF}

{$I switches.inc}


type
  //-----------
  // TCMDParams - Class Reads Infos from ParamStr and set some easy Interface Variables
  //-----------
  TCMDParams = class
    private
      sLanguage:   String;
      sResolution: String;
    public
      //Some Boolean Variables Set when Reading Infos
      Debug:      Boolean;
      Benchmark:  Boolean;
      NoLog:      Boolean;
      FullScreen: Boolean;
      Joypad:     Boolean;

      //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:   String;
      ConfigFile: String;
      ScoreFile:  String;

      procedure showhelp();

      //Pseudo Integer Values
      Function GetLanguage:   Integer;
      Property Language:      Integer read GetLanguage;

      Function GetResolution: Integer;
      Property Resolution:    Integer read GetResolution;

      //Some Procedures for Reading Infos
      Constructor Create;

      Procedure ResetVariables;
      Procedure ReadParamInfo;
  end;

var
  Params:    TCMDParams;
  
const
  cHelp            = 'help';
  cDebug           = 'debug';
  cMediaInterfaces = 'showinterfaces';
  cUseLocalPaths   = 'localpaths';


implementation

uses SysUtils,
     uPlatform;
//      uINI   -- Nasty requirement... ( removed with permission of blindy )


//-------------
// Constructor - Create class, Reset Variables and Read Infos
//-------------
Constructor TCMDParams.Create;
begin
  inherited;
  
  if FindCmdLineSwitch( cHelp ) or FindCmdLineSwitch( 'h' ) then
    showhelp();

  ResetVariables;
  ReadParamInfo;
end;

procedure TCMDParams.showhelp();

  function s( aString : String ) : string;
  begin
    result := aString + StringofChar( ' ', 15 - length( aString ) );
  end;
  
begin

  writeln( '' );
  writeln( '**************************************************************' );
  writeln( '  UltraStar Deluxe - Command line switches                    ' );
  writeln( '**************************************************************' );
  writeln( '' );
  writeln( '  '+s( 'Switch' ) +' : Purpose' );
  writeln( '  ----------------------------------------------------------' );
  writeln( '  '+s( cMediaInterfaces ) + #9 + ' : Show in-use media interfaces' );
  writeln( '  '+s( cUseLocalPaths ) + #9 + ' : Use relative paths' );
  writeln( '  '+s( cDebug ) + #9 + ' : Display Debugging info' );



  writeln( '' );

  platform.halt;
end;

//-------------
// ResetVariables - Reset Class Variables
//-------------
Procedure TCMDParams.ResetVariables;
begin
  Debug       := False;
  Benchmark   := False;
  NoLog       := False;
  FullScreen  := False;
  Joypad      := False;

  //Some Value Variables Set when Reading Infos {-1: Not Set, others: Value}
  sResolution := '';
  sLanguage   := '';
  Depth       := -1;
  Screens     := -1;

  //Some Strings Set when Reading Infos {Length=0 Not Set}
  SongPath    := '';
  ConfigFile  := '';
  ScoreFile   := '';
end;

//-------------
// ReadParamInfo - Read Infos from 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);
    //Log.LogError('Start parsing Command: ' + Command);
    //Is String 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
        Fullscreen  := True
      else if (Command = 'window') then
        Fullscreen  := False
      else if (Command = 'joypad') then
        Joypad    := True

      //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
          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
          sLanguage := 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
          sResolution := 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 := 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 := ParamStr(I + 1);

          //is this a relative PAth -> then add Gamepath
          if Not ((Length(ConfigFile) > 2) AND (ConfigFile[2] = ':')) then
            ConfigFile := ExtractFilePath(ParamStr(0)) + 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 := ParamStr(I + 1);
        end;
      end;

    end;

  end;

{  Log.LogError('Values: ');

  if Debug then
    Log.LogError('Debug');

  if Benchmark then
    Log.LogError('Benchmark');

  if NoLog then
    Log.LogError('NoLog');

  if Fullscreen then
    Log.LogError('FullScreen');

  if JoyStick then
    Log.LogError('Joystick');


  Log.LogError('Screens: ' + Inttostr(Screens));
  Log.LogError('Depth: ' + Inttostr(Depth));

  Log.LogError('Resolution: ' + Inttostr(Resolution));
  Log.LogError('Resolution: ' + Inttostr(Language));

  Log.LogError('sResolution: ' + sResolution);
  Log.LogError('sLanguage: ' + sLanguage);

  Log.LogError('ConfigFile: ' + ConfigFile);
  Log.LogError('SongPath: ' + SongPath);
  Log.LogError('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.