program T10Demo4;
{$I Sets.inc}
uses
  {$ifdef VerPc}
  Dos,
  {$endif}
  {$ifdef VerMc}
  RtcTime,
  {$endif}
  uTermGr,                  { Graficky terminal                         }
  G240x128,                 { Grafika pro rozmer 240 x 128 pixelu       }
  Menu4,                    { Uzivatelske menu                          }
  Kernel,                   { Operacni system ReTOS                     }
  uInit,                    { Inicializace                              }
  uExit;                    { Ukonceni                                  }

var
  Hour,Minute,Second,Sec100:Word; { Promenne pro zjisteni casu          }

const

  cCasMer     =50;          { meritko cas.osy pro zapisovac v ms/pixel  }
  cTeplMer    =2.5;         { meritko osy teploty v st.C/pixel          }

  LastTime    :Word=0;      { Promenne pro cas zapisovace               }
  Time        :Word=0;
  DifTime     :Word=0;      { Rozdil casu pro zapisovac v pixelech      }
  YZap        :Word=0;      { Poloha y pisatka v pixelech               }

begin
  PrgInit;                  { Inicialzace                               }
  UserMenu;                 { Spusteni uzivatelskeho menu               }
  SetPriority(1,254);       { Nastaveni priority v o.s.RETOS            }

  repeat                    { Smycka hlavniho procesu                   }

  if SledRealVel>120        { simuluje zmeny sledovanych velicin        }
    then SledRealVel:=-120
    else SledRealVel:=SledRealVel+11.24;

  if SledIntVel>93
    then SledIntVel:=1
    else SledIntVel:=SledIntVel+3;

                             { teplota pro zapisovac                    }
    GetTime(Hour,Minute,Second,Sec100);   { Zjisteni casu               }
    Time:=10*Sec100+1000*Second;          { Vypocet casu v ms           }

                             { simulace menici se teploty               }
    Teplota:=70+40*sin(2*3.14159*Time/15000)
               +20*sin(2*3.14159*Time/5000)
               +10*sin(2*3.14159*Time/1500)
               +random(10);

                             { zjisteni rozdilu casu od min. kroku zap. }
    if Time>=LastTime then DifTime:=Round((Time-LastTime)/cCasMer)
                      else DifTime:=Round((Time+60000-LastTime)/cCasMer);
    LastTime:=Time;
                             { souradnice Y zapisovace v pixelech       }
    YZap:=MyGrRecorder.My2-Round(Teplota/cTeplMer);
    LockKernel;              { Pocatek chranene sekce                   }
    if DifTime>0 then
    begin                    
      MyGrRecorder.WrDifXToRecorder(DifTime,YZap);  { Krok zapisovace   }
      mFillBox(224,35,228,99,b_NOT,MyGrArea.Img); { smaz.osy s pisatkem }
      mDrawLine(226,35,226,99,b_OR,MyGrArea.Img); { kresleni osy        }
      mDrawBox(225,Yzap-1,227,YZap+1,b_OR,MyGrArea.Img); {kresleni pis. }
      mDrawLine(224,YZap,228,Yzap,b_OR,MyGrArea.Img);
    end;
    UnLockKErnel;            { Konec chranene sekce                     }


    Wait(2);                { a ceka                                    }
  until FlgEnd;             { na nastaveni priznaku ukonceni programu   }

  PrgExit;                  { Ukonceni programu a HW                    }
end.
