{Scrieti un program care creeaza o lista unidirectionala,
 adaugand cate un element la baza listei.}
Program Tema_2_3_Probl_3;
type AdrCel = ^Celula;
     Celula = record  {O celula din lista}
       Info: String;  {Continutul celulei}
       Urm:  AdrCel;  {Adresa urmatoarei celule}
     end;
var P, L: AdrCel; {L - baza listei; P - variabila contor pentru parcurgerea listei L}
begin
  L := nil; {Baza listei}
  writeln;  writeln;
  writeln('Scrie un text:');
  writeln;
  repeat
    new(P);           {Alocarea memoriei pentru celula curenta P}
    readln(P^.Info);  {Popularea celulei cu informatie citita de la tastiera}
    P^.Urm := L;      {Amplasarea celulei la baza listei}
    L := P;
  until P^.Info = ''; {Cresterea listei continua pana cand utilizatorul introduce date}
  writeln('----------------------------------');
  {Afisarea listei}
  P := L;  {Inceputul listei}
  while P <> nil do  {Pana nu se ajunge la sfarsitul listei}
    with P^ do begin
      Writeln(Info); {Afisarea informatiei din celula}
      P := Urm;      {Trecerea la urmatorul element}
    end;

  {Distrugerea listei}
  while L <> nil do 
    with L^ do begin
      P := Urm;   {Salvarea adresei celulei urmatoare}
      Dispose(L); {Eliberarea memoriei ocupate de celula curenta}
      L := P;     {Trecerea la urmatoarea celula}
    end;

  readln;
end.
