home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
language
/
pp_demo
/
lesen.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-10-23
|
3KB
|
122 lines
UNIT Lesen;
(* öffentlicher Teil *)
INTERFACE
CONST WortLaenge = 80;
TYPE WortTyp = STRING[WortLaenge];
FUNCTION HoleNaechstes : WortTyp;
(* nicht-öffentlicher Teil *)
IMPLEMENTATION
CONST DateiName = 'WORTE.TXT';
MaxSpruenge = 10;
TYPE WortZeiger = ^WortListe;
WortListe = RECORD
Wort : WortTyp;
Naechstes : WortZeiger
END;
VAR NaechstesWort : WortZeiger;
OldProc : POINTER;
(* ein Wort aus der Liste ermitteln *)
FUNCTION HoleNaechstes : WortTyp;
VAR Spruenge, i : 0..MaxSpruenge;
Vorgaenger : WortZeiger;
BEGIN
(* Kein Wort in der Liste? *)
IF NaechstesWort = NIL THEN
HoleNaechstes := ''
ELSE
(* Noch Worte in der Liste! *)
BEGIN
(* Anzahl der Felder, die übersprungen werden *)
Spruenge := RANDOM(MaxSpruenge);
(* Felder überspringen *)
FOR i:=1 TO Spruenge DO
NaechstesWort := NaechstesWort^.Naechstes;
(* Wort ermitteln *)
HoleNaechstes := NaechstesWort^.Wort;
(* War es das letzte Wort? *)
IF NaechstesWort = NaechstesWort^.Naechstes THEN
NaechstesWort := NIL
ELSE
BEGIN
(* Vorgänger ermitteln *)
Vorgaenger := NaechstesWort;
WHILE Vorgaenger^.Naechstes <> NaechstesWort DO
Vorgaenger := Vorgaenger^.Naechstes;
Vorgaenger^.Naechstes := NaechstesWort^.Naechstes;
DISPOSE(NaechstesWort);
NaechstesWort := Vorgaenger^.Naechstes
END
END
END;
(* Worte aus Datei lesen und Liste aufbauen *)
PROCEDURE WorteLesen;
VAR Datei : Text;
Wort : STRING;
NeuesWort : WortZeiger;
BEGIN
ASSIGN(Datei, DateiName);
RESET(Datei);
(* Lesen, bis Datei leer ist *)
IF IORESULT = 0 THEN
BEGIN
WHILE NOT(EOF(Datei)) DO
BEGIN
READLN(Datei, Wort);
(* Wort nicht über 80 Zeichen? *)
IF (LENGTH(Wort) <= WortLaenge) AND
(LENGTH(Wort) >= 1) THEN
BEGIN
NEW(NeuesWort);
NeuesWort^.Wort := Wort;
(* Wort in der Liste anhängen *)
(* Das letzte Feld zeigt immer auf das erste! *)
IF NaechstesWort = NIL THEN
BEGIN
NaechstesWort := NeuesWort;
NaechstesWort^.Naechstes := NeuesWort
END
ELSE
BEGIN
NeuesWort^.Naechstes := NaechstesWort^.Naechstes;
NaechstesWort^.Naechstes := NeuesWort;
NaechstesWort := NeuesWort
END
END
END;
CLOSE(Datei)
END
END;
(* Ggf. reservierter Speicher muß freigegeben werden! *)
PROCEDURE ExitHandler;
VAR AktWort, StartWort : WortZeiger;
BEGIN
IF NaechstesWort <> NIL THEN
BEGIN
StartWort := NaechstesWort;
REPEAT
AktWort := NaechstesWort;
NaechstesWort := NaechstesWort^.Naechstes;
DISPOSE(AktWort)
UNTIL NaechstesWort = StartWort;
END;
EXITPROC := OldProc
END;
(* Initialisierung der Unit *)
BEGIN
NaechstesWort := NIL;
RANDOMIZE;
OldProc := EXITPROC;
EXITPROC := @ExitHandler;
WorteLesen
END.