program biblioteka_lista;
uses crt;
type wsk_ksiazka = ^ksiazka;            // wska«nik do ksi¥¾ki
     ksiazka=record                     // typ rekordowy (ze wska«nikiem)
                nr:word;
                autor:string[40];
                nazwa:string[80];
                rokwyd:integer;
                nast_ks: wsk_ksiazka;   // wska«nik na kolejn¥ ksi¥¾k©
                end;                    // - wy¾ej na stosie
var liczba, opcja, i: byte;
    ost_ks:wsk_ksiazka;                 // zmienna do przechowania
                                        // - ostatnie na g¢rze stosu ksi¥¾ki

Procedure menu;
begin
  clrscr;
  writeln('Menu');
  writeln('1) Dodaj ksiazke');
  writeln('2) Pokaz ksiazke');
  writeln();
  writeln('0) Wyjscie');
end;

procedure dodaj_ksiazke(nr: byte);
var dodaj_ks:wsk_ksiazka;
begin
  clrscr;
  new(dodaj_ks);                        // tworzenie nowej przestrzeni
  writeln('Ksi¥zka o numerze: ',nr);    // - w pami©ci dla rekordu ksi¥¾ka
  writeln();
  dodaj_ks^.nr:=nr;
  writeln('Podaj tytul ksiazki:');
  readln(dodaj_ks^.nazwa);
  writeln('Podaj autora ksiazki:');
  readln(dodaj_ks^.autor);
  writeln('Podaj rok wydania:');
  readln(dodaj_ks^.rokwyd);
  dodaj_ks^.nast_ks:=ost_ks;
  ost_ks:=dodaj_ks;
end;

procedure pokaz_ksiazke(nr: byte);
var ks_ks:wsk_ksiazka;
begin
  ks_ks:=ost_ks;                        // kolejne odczytywanie ksi¥¾ek
  while ks_ks<>nil do
    begin
      clrscr;
      writeln('Ksi¥zka o numerze: ',ks_ks^.nr);
      writeln();
      writeln('Tytul ksiazki:        ',ks_ks^.nazwa);
      writeln('Podaj autora ksiazki: ',ks_ks^.autor);
      writeln('Podaj rok wydania:    ',ks_ks^.rokwyd);
      ks_ks:=ks_ks^.nast_ks;
      readln;
    end;
end;

begin
  clrscr;
  liczba:=0;
  ost_ks:=nil;

  repeat
    menu;				//g³ówna pêtla programu
    readln(opcja);
    if (opcja=1) then
      begin
        liczba:=liczba+1;
        dodaj_ksiazke(liczba);
      end;
    if (opcja=2) then
      begin
        pokaz_ksiazke(i);
      end;
    until opcja=0;
end.
