home *** CD-ROM | disk | FTP | other *** search
- 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.
-