class Zeile
{  String inhalt;
   Zeile naechste;
   Zeile (String in, Zeile next)
   { this.inhalt = in;
     this.naechste = next;
   }
} // class Zeile

class Stringliste
{ Zeile anker = null;
  Zeile ende  = null;
  Zeile lauf  = null;

  boolean leer()
  { return (anker == null); }

  void zumAnfang()
  { lauf = anker; }

  boolean endeErreicht()
  {  return ((lauf == null) && !leer()); }

  void haengeAn(String zeile)
  { Zeile neu = new Zeile(zeile, null);
    if (leer())
         { anker = neu;
           lauf  = neu;
         }
    else ende.naechste = neu;
    ende = neu;
  } // haengeAn

  String liefere()
  { String ablage = "";
    if (lauf != null) ablage = lauf.inhalt;
    lauf = lauf.naechste;
    return ablage;
  } // liefere

} // class Stringliste

class Zeilenliste
{ static Stringliste liste;

  static boolean vonDateiGelesen(String dateiname)
  { String zeile;
    liste = new Stringliste();
    In.open(dateiname);
    if (In.done())
         {  do
            {  zeile = In.readLine();
               if (In.done()) liste.haengeAn(zeile);
            } while (In.done());
            In.close();
            Out.println("Fertig!");
            return true;
         }
    else {  Out.println("Die Datei " + dateiname + " existiert nicht.");
            return false;
         }
  } // vonDateigelesen

  static void gibListeAus()
  { String zeile;
    if (!liste.leer())
         { liste.zumAnfang();
           while (!liste.endeErreicht())
           { zeile = liste.liefere();
             Out.println(zeile);
           } // while
           Out.println("Ausgabe fertig");
         }
  } // gibListeAus

  public static void main(String[] arg)
  { if (vonDateiGelesen("test.txt")) gibListeAus();
  } // main
} // class DateiAnzeigen
