home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / MFM_119C.ZIP / PUSHPOP.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-06-03  |  5.7 KB  |  180 lines

  1. Unit PushPop;
  2. {========================================================================}
  3. Interface
  4.   Uses
  5.     MfmDefs;
  6.   Procedure PushRecord(Var TempEntry : ListPtr);
  7.   Procedure PopRecord(Var TempEntry : ListPtr; BeforeOrAfter : Char);
  8.   Procedure ShowStack(Var TempEntry : ListPtr);
  9.   Procedure StackPrev(Var TempEntry : ListPtr);
  10.   Procedure StackNext(Var TempEntry : ListPtr);
  11. {========================================================================}
  12. Implementation
  13.   Uses
  14.     Display, Screen;
  15. {========================================================================}
  16. Procedure PushRecord(Var TempEntry : ListPtr);
  17.   Begin
  18.     If (CurrentEntry^.PrevEntry <> NIL) Or (CurrentEntry^.NextEntry <> NIL) Then
  19.     Begin
  20.       If CurrentEntry^.FileName <> 'FILES.BBS' Then
  21.       Begin
  22.         If CurrentEntry^.TypeOfRecord In [Orphan,FileRecord] Then Dec(NumberOfFiles);
  23.         SizeOfFiles := SizeOfFiles-CurrentEntry^.FileSize;
  24.       End;
  25.       Altered := True;
  26.       OldEntry := CurrentEntry;
  27.       If CurrentEntry^.PrevEntry = NIL Then
  28.       Begin
  29.         CurrentEntry^.NextEntry^.PrevEntry := NIL;
  30.         CurrentEntry := CurrentEntry^.NextEntry;
  31.         TopEntry := CurrentEntry;
  32.         FirstEntry := CurrentEntry;
  33.       End
  34.       Else
  35.       Begin
  36.         If CurrentEntry^.NextEntry = NIL Then
  37.         Begin
  38.           CurrentEntry^.PrevEntry^.NextEntry := NIL;
  39.           CurrentEntry := CurrentEntry^.PrevEntry;
  40.           LastEntry := CurrentEntry;
  41.           If TopEntry^.PrevEntry <> NIL Then
  42.           Begin
  43.             TopEntry := TopEntry^.PrevEntry;
  44.           End
  45.           Else
  46.           Begin
  47.             Dec(Row);
  48.           End;
  49.         End
  50.         Else
  51.         Begin
  52.           CurrentEntry^.PrevEntry^.NextEntry := CurrentEntry^.NextEntry;
  53.           CurrentEntry^.NextEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  54.           CurrentEntry := CurrentEntry^.NextEntry;
  55.           If TopEntry = OldEntry Then TopEntry := CurrentEntry;
  56.         End;
  57.       End;
  58.       If TempEntry = NIL Then
  59.       Begin
  60.         TempEntry := OldEntry;
  61.         TempEntry^.PrevEntry := TempEntry;
  62.         TempEntry^.NextEntry := TempEntry;
  63.       End
  64.       Else
  65.       Begin
  66.         If TempEntry^.PrevEntry = TempEntry Then
  67.         Begin
  68.           OldEntry^.PrevEntry := TempEntry;
  69.           OldEntry^.NextEntry := TempEntry;
  70.           TempEntry^.PrevEntry := OldEntry;
  71.           TempEntry^.NextEntry := OldEntry;
  72.           TempEntry := OldEntry;
  73.         End
  74.         Else
  75.         Begin
  76.           OldEntry^.PrevEntry := TempEntry;
  77.           OldEntry^.NextEntry := TempEntry^.NextEntry;
  78.           TempEntry^.NextEntry^.PrevEntry := OldEntry;
  79.           TempEntry^.NextEntry := OldEntry;
  80.           TempEntry := OldEntry;
  81.         End;
  82.       End;
  83.       Dec(NumberOfEntries);
  84.       DisplayScreen;
  85.     End;
  86.   End;
  87. {========================================================================}
  88. Procedure PopRecord(Var TempEntry : ListPtr; BeforeOrAfter : Char);
  89.   Begin
  90.     If TempEntry <> NIL Then
  91.     Begin
  92.       If TempEntry^.FileName <> 'FILES.BBS' Then
  93.       Begin
  94.         If TempEntry^.TypeOfRecord In [Orphan,FileRecord] Then Inc(NumberOfFiles);
  95.         SizeOfFiles := SizeOfFiles+TempEntry^.FileSize;
  96.       End;
  97.       OldEntry := TempEntry;
  98.       If TempEntry^.PrevEntry = TempEntry Then
  99.       Begin
  100.         TempEntry := NIL;
  101.       End
  102.       Else
  103.       Begin
  104.         TempEntry^.PrevEntry^.NextEntry := TempEntry^.NextEntry;
  105.         TempEntry^.NextEntry^.PrevEntry := TempEntry^.PrevEntry;
  106.         TempEntry := TempEntry^.PrevEntry;
  107.       End;
  108.       If BeforeOrAfter = 'B' Then
  109.       Begin
  110.         If CurrentEntry^.PrevEntry = NIL Then
  111.         Begin
  112.           OldEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  113.           OldEntry^.NextEntry := CurrentEntry;
  114.           CurrentEntry^.PrevEntry := OldEntry;
  115.           CurrentEntry := OldEntry;
  116.           TopEntry := CurrentEntry;
  117.           FirstEntry := CurrentEntry;
  118.         End
  119.         Else
  120.         Begin
  121.           OldEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  122.           OldEntry^.NextEntry := CurrentEntry;
  123.           CurrentEntry^.PrevEntry^.NextEntry := OldEntry;
  124.           CurrentEntry^.PrevEntry := OldEntry;
  125.           CurrentEntry := OldEntry;
  126.         End;
  127.       End
  128.       Else
  129.       Begin
  130.         If CurrentEntry^.NextEntry = NIL Then
  131.         Begin
  132.           OldEntry^.NextEntry := CurrentEntry^.NextEntry;
  133.           OldEntry^.PrevEntry := CurrentEntry;
  134.           CurrentEntry^.NextEntry := OldEntry;
  135.         End
  136.         Else
  137.         Begin
  138.           OldEntry^.NextEntry := CurrentEntry^.NextEntry;
  139.           OldEntry^.PrevEntry := CurrentEntry;
  140.           CurrentEntry^.NextEntry^.PrevEntry := OldEntry;
  141.           CurrentEntry^.NextEntry := OldEntry;
  142.         End;
  143.       End;
  144.       Inc(NumberOfEntries);
  145.       DisplayScreen;
  146.     End;
  147.   End;
  148. {========================================================================}
  149. Procedure ShowStack(Var TempEntry : ListPtr);
  150.   Begin
  151.     If TempEntry <> NIL Then
  152.     Begin
  153.       NextPrintEntry := TempEntry;
  154.       DisplayRecord(25);
  155.       AnsiGotoXY(24,80);
  156.     End;
  157.   End;
  158. {========================================================================}
  159. Procedure StackPrev(Var TempEntry : ListPtr);
  160.   Begin
  161.     If TempEntry <> NIL Then
  162.     Begin
  163.       TempEntry := TempEntry^.PrevEntry;
  164.       ShowStack(TempEntry);
  165.     End;
  166.   End;
  167. {========================================================================}
  168. Procedure StackNext(Var TempEntry : ListPtr);
  169.   Begin
  170.     If TempEntry <> NIL Then
  171.     Begin
  172.       TempEntry := TempEntry^.NextEntry;
  173.       ShowStack(TempEntry);
  174.     End;
  175.   End;
  176. {========================================================================}
  177. Begin
  178. End.
  179. {========================================================================}
  180.