program testing_vstupnich_parametru;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  barvy     : array [1..4]  of string;
  hoven     : integer;
  barva     : string;
  i         : byte;


// vypise napovedu
procedure help;

begin
  writeln ;
  writeln ('help:');
  writeln ;
  writeln ('  -h    vypise tuto napovedu');
  writeln ;
  writeln ('  -hoven [ integer, interval 0 az 99 ]');
  writeln ('        pocet hoven, defaultne "1"');
  writeln ;
  write   ('  -barva [ ');
    for i:=1 to length(barvy) do begin
      write(barvy[i]);
      if i<>length(barvy) then write(' | ');
    end;
  writeln (' ]');
  writeln ('        barva hoven, defaultne "hneda"');
  writeln ;
end;


// vyplni promenne zadanymi argumenty
procedure input_param (var shits:integer; var color:string);
var
  parametry   : array [1..10] of string;
  y           : byte;
  returned    : integer;
  allparamok  : boolean;

begin

  parametry[1]:='-h';
  parametry[2]:='-hoven';
  parametry[3]:='-barva';

  allparamok := false;

  for i:=1 to paramcount do begin

    for y:=1 to length(parametry) do begin
      if paramstr(i) = parametry[y] then begin
        allparamok := true;
        break;
        end;
    end;

    if allparamok = false then begin
      writeln ;
      writeln ('neexistujici parametr nebo spatna hodnota parametru: ',paramstr(i));
      break;
    end;

  end;


  if allparamok = false then begin
    help;
    halt(0);
    end
  else begin
    for i:=1 to paramcount do begin

  //  napoveda
      if paramstr(i)=parametry[1] then begin
        help;
        halt(0);
      end;

  //  hoven
      if paramstr(i)=parametry[2] then begin
        val(paramstr(i+1),shits,returned);
        if (returned<>0) or not(shits in [0..99]) then begin
          shits:=1;
          writeln ('wrong value of parameter "-hoven"');
          writeln ('pouziji hodnotu: ',shits);
          continue;
        end;
      end;

  //  barva
      if paramstr(i)=parametry[3] then begin
        if  (paramstr(i+1)=barvy[1])  or
            (paramstr(i+1)=barvy[2])  or
            (paramstr(i+1)=barvy[3])  or
            (paramstr(i+1)=barvy[4])  then color:=paramstr(i+1)
        else begin
          color:=barvy[1];
          writeln ('wrong value of parameter "-barva"');
          writeln ('pouzije se hodnota ',color);
        end;
      end;

    end;

  end;

end;


(* PROGRAM *)

begin

barvy[1]:='hneda';
barvy[2]:='cerna';
barvy[3]:='seda';
barvy[4]:='sracka';

writeln (chr(10),'testing vstupnich parametru');

hoven:=1;
barva:='hneda';

if paramcount >= 1 then begin
  input_param(hoven,barva);
  writeln ;
  writeln ('pocet hoven je: ',hoven);
  writeln ('jejich barva je: ',barva);
  writeln ;
  writeln ('for EXIT press Enter');
  readln;
  end
else begin
  help;
end;

end.