program mehubaari(input, output);
   uses Crt;

   const eka = 1;
   type nimet = string[60]; {epästandardi turbo-pascal piirre}

{---------tähän jonon tyyppimäärittelyt: --------------------}


{------------------------------------------------------------}

   var komento : char;

{---------tähän jonon muuttujat: ----------------------------}
       jono : array [1..10] of nimet;
       vika : 0..10;
       turva : file of nimet;

{---------tähän jonon operaatiot: ---------------------------}

procedure Jonoon(N: nimet);
   begin
      if vika >= 10 then
         begin
            TextBackground(yellow);
            TextColor(white+blink);
            writeln('Jonossa ei ole tilaa! Tule myöhemmin uudelleen.');
            writeln('                            ENTERILLÄ eteenpäin');
            readln;
         end
      else
         begin
            vika := vika + 1;
            jono[vika] := N
         end;
   end;

procedure Jonosta(var N: nimet);
  {Jos jono on tyhjä, asetetaan N tyhjäksi merkkijonoksi}
   var i : integer;
   begin
       if vika = 0 then
          N := ''
       else
          begin
             N := jono[eka];
             for i := eka to vika - 1 do
                jono[i] := jono[i+1];
             vika := vika-1;
          end;
   end;

procedure LuoTyhjaJono;
   begin
      vika := 0;
   end;


procedure Turvaan;
   var i : integer;
   begin
      assign(turva, 'a:jono.tur'); { TURBOA }
      rewrite(turva);
      for i := eka to vika do
         write(turva, jono[i]);
      close(turva);                 {turboa}
   end;

procedure Turvasta;
   begin
      assign(turva, 'a:jono.tur'); { turboa }
      reset(turva);
      if eof(turva) then
         LuoTyhjaJono
      else
         begin
             vika := 0;
             while not eof(turva) do
                begin
                   vika := vika + 1;
                   read(turva, jono[vika]);
                end;
         end;
      close(turva);                {turboa}
   end;




{---------tähän päättyy jonon toteutus-----------------------------}


   procedure TulostaValikko;
      begin
         TextBackground(blue);
         TextColor(White);
         ClrScr;
         writeln; writeln; writeln;
         writeln('                             ');
         writeln('     MEHUBAARIN JONOTUS      ');
         writeln('     ******************      ');
         writeln('                             ');
         writeln('                             ');
         writeln('     j) lisää jonottaja      ');
         writeln('     p) palvele ensimmäistä  ');
         writeln('     l) loppu                ');
         writeln('                             ');
      end;

   procedure Lisays;
      var nimi : nimet;
      begin
          repeat
             TextColor(black);
             write(' Asiakkaan nimi? ');
             TextColor(lightgreen);
             readln(nimi);
             if nimi = '' then
                writeln('Tyhjä nimi ei kelpaa, anna uudelleen!');
          until nimi <> '';
          Jonoon(nimi);
      end;

   procedure Palvelu;
      var nimi : nimet;
      begin
         Jonosta(nimi);
         TextBackground(green);
         TextColor(White);
         ClrScr;
         writeln;
         if nimi <> '' then
            writeln('NYT PALVELLAAN HENKILÖÄ NIMELTÄ >>> ', nimi, '<<<')
         else
            begin
               writeln('KETÄÄN EI OLE JONOSSA!! (Lepää vaikka!)');
               Sound(440);
               Delay(1000);
               Sound(round(3/2 * 440));
               Delay(1000);
               Sound(round(5/4 * 440));
               Delay(1000);
               Sound(440);
               Delay(2000);
               NoSound;
            end;
         writeln; writeln;
         TextColor(lightblue);
         writeln('                           ENTERILLÄ eteenpäin');
         readln;
      end;

   begin {PÄÄOHJELMA}
      Turvasta;
      repeat
         TulostaValikko;
         komento := ReadKey;
         if komento in ['j', 'J', 'p', 'P', 'l', 'L'] then
            case komento of
               'j', 'J' : Lisays;
               'p', 'P' : Palvelu;
               'l', 'L' : ;
            end;
      until komento in ['l', 'L'];
      Turvaan;
   end.

