home *** CD-ROM | disk | FTP | other *** search
/ Mega CD-ROM 1 / megacd_rom_1.zip / megacd_rom_1 / MAGAZINE / INSIDE_T / ITPJUN90.ZIP / NORMDEMO.PAS < prev    next >
Pascal/Delphi Source File  |  1990-05-10  |  2KB  |  98 lines

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