unit uMenuIni;

{==========================================================}
{                                                          }
{  unit uMenuIni                       2005-09-23          }
{                                      Verze 1.0           }
{                                                          }
{  Skelet aplikace pro Touch 51                            }
{                                                          }
{  Inicializace stromu komponent aplikace a procesu        }
{  vizualizace                                             }
{                                                          }
{  (C)2005, SofCon, Stresovicka 49, 160 00 Praha 6         }
{                                                          }
{                                                          }
{==========================================================}

{$I SETS.INC} { Nastaveni prekladu }

interface

{-------------------------
{ StartMenuProcess
{---
{ Spusteni procesu me menu
{ StopFlag je odkaz na promennou, kterou bude po uzavreni
{ aplikace nastavena na True a zpusobi ukonceni pripadnych
{ ostatnich procesu
{---
{ Tuto funkci je mozne volat v pri vytvareni procesu aplikace napr.
{ v tele hlavniho podprogramu.
}

procedure StartMenuProcess( var AStopFlag: Boolean );


implementation

uses
  Objects,    { Standardni knihovna             }
  Kernel,     { ReTOs                           }
  IoDrv,      { Obecne I/O ovladace terminalu   }
  IoAdd,      { Rozsireni I/O ovladacu terminalu}
  Fonts,      { Spravce fontu                   }

  PCDRV,{}    { jen pro driver pro klavesnici }
  T51Drv,     { Ovladace pro T51    }
  TPDRV,      { driver pro TOUCH}
  tick,
  Controls,   { Zakladni komponenty             }

  T51Ccus,

  FoSS16,     { Font Sans Serife 16             }
  StdRSCZ,    { Standardni resource stringy     }
  uMemory,    { Struktury v rezervovane pameti  }
  uMenuDef;   { Definice aplikacniho stromu     }
{  t51setup;}
const

  cMenuStatPri   = 100;   { Staticka priorita procesu menu              }
  cMenuDynPri    = 254;   { Dynamicka pririta procesu menu              }
  cMenuWaitCount = 1;     { Pocet waitu jadra pri necinnosti uzivatele  }
  cMenuStackSize = 8192;  { Velikost zasobniku procesu menu             }



{ ioTouch        = $3F8-$10;       { Adresa Touch (COM1)}
{ ioTouch        = $2F8-$10;       { Adresa Touch (COM2)}
  ioTouch        = $2E8-$10;       { Adresa Touch (COM4)}

{-------------------------
{ AppIdle
{--
{ Funkce volana pri necinnosti uzivatele
{--
}

procedure AppIdle; far;
begin
  { Pri necinnosti uspime proces menu na zadany pocet tiku kernelu }
  Wait( cMenuWaitCount );
end;

{-------------------------
{ InitMenu
{--
{ Inicialize Funkce volana pri necinnosti uzivatele
{--
}

procedure InitMenu;
var
  App : PApplication;
begin
  RegisterCustomizeProc( AppCustomizeProc, 2000 );

UserTick1 := TCDInterruptProc;  {volani touch driveru}

  { Inicializace ovladacu a korenu stromu komponent pro verzi DOS }
  App :=
    New( PApplication, Init (
      New( PInputDriver, Init(
       New( PPCKeybDriver, Init ),{nil,{}
       New( PTouchPanelDriver, Init(ioTouch) ){}
{       New( PPCMouseDriver, Init ){}
      )),
      New( PT51VesaDriver, Init(800,600) ), @g_AppSettings
    ));


  App^.DisplayDriver^.Cursor^.Hide;     {Pri pouziti TouchDriver}
{  App^.DisplayDriver^.Cursor^.Show;     {Pri pouziti MouseDriver}

  App^.Customize( ccApplication );

  { Nasteveni Idle procedury - volana pri necinnosti uzivatele }
  App^.OnIdle := AppIdle;

  { Implicitni font aplikace }
  App^.Font := fidSS20;{20 default}

  { Vytvoreni vsech stranek aplikace }
  CreateAppPages;
end;


{-------------------------
{ RunMenu
{--
{ Spusteni
{--
}

procedure RunMenu;
begin
  if Application <> nil then Application^.Run;
end;

{-------------------------
{ DoneMenu
{--
{ Uvoleni komponent z pameti
{--
}

procedure DoneMenu;
begin
{$IFDEF DOS}
  UserTick1 := Nic;
{$ENDIF}
  if Application <> nil then Application^.Free;
end;


{-------------------------
{ StartMenuProcess
{---
{ Spusteni procesu me menu
{ StopFlag je odkaz na promennou, kterou bude po uzavreni
{ aplikace nastavena na True a zpusobi ukonceni pripadnych
{ ostatnich procesu
{---
{ Tuto funkci je mozne volat v pri vytvareni procesu aplikace napr.
{ v tele hlavniho podprogramu.
}

procedure StartMenuProcess( var AStopFlag: Boolean );
begin
  { Inicializace menu }
  InitMenu;

  { Spusteni procesu menu }

  Start( 'Menu', cMenuStackSize, cMenuStatPri, cMenuDynPri ); Exit;
  repeat
    RunMenu;
    AStopFlag := True;
  until AStopFlag;

  { Uvoleni menu z pameti }
  DoneMenu;
end;


end.
