home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
insidetp
/
1990_06
/
objdemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-05-10
|
3KB
|
114 lines
PROGRAM Object_List_Demo; { OBJDEMO.PAS }
USES Crt;
CONST
FileName = 'SAMPLE.DAT';
TYPE
NodePtr = ^Node;
Node = RECORD Data : String[40];
Next : NodePtr;
Last : NodePtr; END;
Ptr = ^ListObj;
ListObj = OBJECT
Index : NodePtr;
CONSTRUCTOR Init( Fn: String );
DESTRUCTOR Done;
PROCEDURE AddToList( Str: String );
PROCEDURE ReadFile( Fn: String );
PROCEDURE SortList;
PROCEDURE ShowList;
END;
CONSTRUCTOR ListObj.Init( Fn: String );
BEGIN
Index := NIL; ReadFile( Fn ); SortList;
END;
DESTRUCTOR ListObj.Done;
BEGIN
WHILE Index^.Last <> NIL DO
Index := Index^.Last;
WHILE Index <> NIL DO
BEGIN
Dispose( Index ); Index := Index^.Next;
END;
END;
PROCEDURE ListObj.AddToList;
VAR
Local : NodePtr;
BEGIN
WriteLn( 'adding: ', Str );
New( Local ); Local^.Data := Str;
IF( Index = NIL ) THEN Local^.Last := NIL
ELSE Local^.Last := Index;
Local^.Next := NIL;
Index^.Next := Local;
Index := Local;
END;
PROCEDURE ListObj.ReadFile( Fn: String );
VAR
F : Text; Str : String;
BEGIN
Assign( F, Fn );
{$I-} Reset( F ); {$I+}
IF IOResult <> 0 THEN
BEGIN
WriteLn( Fn, ' not found -- exiting!' );
Halt;
END;
REPEAT
ReadLn( F, Str ); AddToList( Str );
UNTIL Eof( F );
END;
PROCEDURE ListObj.ShowList;
VAR
Local : NodePtr;
BEGIN
Local := Index;
WHILE Local^.Last <> NIL DO
Local := Local^.Last;
REPEAT
WriteLn(Local^.Data); Local := Local^.Next;
UNTIL Local = NIL;
END;
PROCEDURE ListObj.SortList;
VAR
P1, P2, P3 : NodePtr; { local pointers }
BEGIN
P1 := Index;
WHILE P1^.Last <> NIL DO P1 := P1^.Last;
REPEAT
P2 := P1^.Next;
REPEAT
IF P1^.Data > P2^.Data THEN
BEGIN
Write('*');
P3^.Data := P1^.Data;
P1^.Data := P2^.Data;
P2^.Data := P3^.Data;
END;
P2 := P2^.Next;
UNTIL P2 = NIL;
P1 := P1^.Next;
UNTIL P1^.Next = NIL;
WriteLn( ' sorted' );
END;
VAR
List : ListObj;
Mem1, Mem2 : Longint;
BEGIN
ClrScr; Mem1 := MemAvail;
List.Init( FileName ); { initialize list }
Mem2 := MemAvail;
List.ShowList; { display data }
List.Done; { dispose of data }
WriteLn( 'Memory -- initial = ', Mem1:7 );
WriteLn( 'Memory -- w/ list = ', Mem2:7 );
WriteLn( 'Memory -- disposed = ', MemAvail:7 );
ReadLn;
END.