program HttpApp;

{==========================================================}
{                                                          }
{  program HttpApp                     12/11/2002          }
{                                                          }
{  Ukazka HTTP serveru                                     }
{  (Hlavni program)                                        }
{                                                          }
{  (C)2002, SofCon, Stresovicka 49, 160 00 Praha 6         }
{           Petr Cernin                                    }
{                                                          }
{==========================================================}

{$I SETS.INC} { Nastaveni podmineneho prekladu }

uses
  {$ifdef CRT}
  Crt,
  {$endif}
  Process,
  Kernel,       { Jadro realneho casu                      }
  HttpSvr;      { HTTP server                              }

var
  g_fStopFlag: Boolean; { Priznak pro ukonceni vsech procesu aplikace }

begin
  {$ifdef DISPLAY}
  ClrScr;
  WriteLn( 'HTTP Server (HTTPAPP.EXE)' );
  WriteLn( '------------------------------------------' );
  WriteLn( 'Aplikaci ukoncite libovolnou klavesou' );
  WriteLn;
  {$endif}

  g_fStopFlag := False;

  { Spusteni hlavniho procesu }
  StartMain( 250, 0 );

  { Inicializace zasobniku pro preruseni }
  InitInterruptStack( 1, 4096 );

  { Zaveseni algoritmu prepinani procesu na preruseni casovace }
  StartTimeSlicing( 8 );


  {--------------------------------------------------------}
  { Spusteni simulator technologickeho procesu             }
  StartProcess( g_fStopFlag );
  {--------------------------------------------------------}

  {--------------------------------------------------------}
  { Spusteni procesu HTTP serveru                          }
  StartHttpServer( g_fStopFlag );
  {--------------------------------------------------------}

  { Snizeni priority hlavniho procesu }
  SetPriority( 1, 254 );

  { Telo hlavniho procesu }
  repeat
    Kernel.Wait( 1 );

    {$ifdef KEYBOARD}
    { Aplikace se ukonci po stisku libovolne klavesy }
    if KeyPressed then g_fStopFlag := True;
    {$endif}

  until g_fStopFlag;

  Abort( '*' );

  { Ukonceni hlavniho procesu }
  TerminateMain;
end.
