home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / insidetp / 1990_06 / objdemo.pas < prev    next >
Pascal/Delphi Source File  |  1990-05-10  |  3KB  |  114 lines

  1. PROGRAM Object_List_Demo; { OBJDEMO.PAS }
  2. USES Crt;
  3. CONST
  4.    FileName = 'SAMPLE.DAT';
  5. TYPE
  6.    NodePtr = ^Node;
  7.    Node = RECORD  Data : String[40];
  8.                   Next : NodePtr;
  9.                   Last : NodePtr;      END;
  10.    Ptr = ^ListObj;
  11.    ListObj = OBJECT
  12.       Index : NodePtr;
  13.       CONSTRUCTOR Init( Fn: String );
  14.       DESTRUCTOR  Done;
  15.       PROCEDURE   AddToList( Str: String );
  16.       PROCEDURE   ReadFile( Fn: String );
  17.       PROCEDURE   SortList;
  18.       PROCEDURE   ShowList;
  19.    END;
  20.  
  21. CONSTRUCTOR ListObj.Init( Fn: String );
  22. BEGIN
  23.    Index := NIL; ReadFile( Fn ); SortList;
  24. END;
  25.  
  26. DESTRUCTOR  ListObj.Done;
  27. BEGIN
  28.    WHILE Index^.Last <> NIL DO
  29.       Index := Index^.Last;
  30.    WHILE Index <> NIL DO
  31.    BEGIN
  32.       Dispose( Index ); Index := Index^.Next;
  33.    END;
  34. END;
  35.  
  36. PROCEDURE   ListObj.AddToList;
  37. VAR
  38.    Local : NodePtr;
  39. BEGIN
  40.    WriteLn( 'adding: ', Str );
  41.    New( Local ); Local^.Data := Str;
  42.    IF( Index = NIL ) THEN Local^.Last := NIL
  43.                      ELSE Local^.Last := Index;
  44.    Local^.Next := NIL;
  45.    Index^.Next := Local;
  46.    Index := Local;
  47. END;
  48.  
  49. PROCEDURE   ListObj.ReadFile( Fn: String );
  50. VAR
  51.    F : Text;   Str : String;
  52. BEGIN
  53.    Assign( F, Fn );
  54.    {$I-} Reset( F ); {$I+}
  55.    IF IOResult <> 0 THEN
  56.    BEGIN
  57.       WriteLn( Fn, ' not found -- exiting!' );
  58.       Halt;
  59.    END;
  60.    REPEAT
  61.       ReadLn( F, Str ); AddToList( Str );
  62.    UNTIL Eof( F );
  63. END;
  64.  
  65. PROCEDURE   ListObj.ShowList;
  66. VAR
  67.    Local : NodePtr;
  68. BEGIN
  69.    Local := Index;
  70.    WHILE Local^.Last <> NIL DO
  71.       Local := Local^.Last;
  72.    REPEAT
  73.       WriteLn(Local^.Data); Local := Local^.Next;
  74.    UNTIL Local = NIL;
  75. END;
  76.  
  77. PROCEDURE   ListObj.SortList;
  78. VAR
  79.    P1, P2, P3 : NodePtr;     { local pointers }
  80. BEGIN
  81.    P1 := Index;
  82.    WHILE P1^.Last <> NIL DO P1 := P1^.Last;
  83.    REPEAT
  84.       P2 := P1^.Next;
  85.       REPEAT
  86.          IF P1^.Data > P2^.Data THEN
  87.          BEGIN
  88.             Write('*');
  89.             P3^.Data := P1^.Data;
  90.             P1^.Data := P2^.Data;
  91.             P2^.Data := P3^.Data;
  92.          END;
  93.          P2 := P2^.Next;
  94.       UNTIL P2 = NIL;
  95.       P1 := P1^.Next;
  96.    UNTIL P1^.Next = NIL;
  97.    WriteLn( ' sorted' );
  98. END;
  99.  
  100. VAR
  101.    List : ListObj;
  102.    Mem1, Mem2 : Longint;
  103. BEGIN
  104.    ClrScr; Mem1 := MemAvail;
  105.    List.Init( FileName );        { initialize list }
  106.    Mem2 := MemAvail;
  107.    List.ShowList;                { display data    }
  108.    List.Done;                    { dispose of data }
  109.    WriteLn( 'Memory -- initial  = ', Mem1:7 );
  110.    WriteLn( 'Memory -- w/ list  = ', Mem2:7 );
  111.    WriteLn( 'Memory -- disposed = ', MemAvail:7 );
  112.    ReadLn;
  113. END.
  114.