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

  1. Unit Sort;
  2. {========================================================================}
  3. Interface
  4.   Uses
  5.     Dos;
  6.   Function FileExtName(InFileName : PathStr) : ExtStr;
  7.   Procedure GenSort;
  8. {========================================================================}
  9. Implementation
  10.   Uses
  11.     Display, MfmDefs, Screen;
  12. {========================================================================}
  13. Function FileExtName(InFileName : PathStr) : ExtStr;
  14.   Begin
  15.     FSplit(InFileName,D,N,E);
  16.     E := Copy(E+'   ',1,3);
  17.     FileExtName := E+N;
  18.   End;
  19. {========================================================================}
  20. Procedure GenSort;
  21.   Var
  22.     Gsb : Byte;
  23.     Gsc, Gsco, Gscd : Char;
  24.     Gss : String;
  25.     TempSort : ListPtr;
  26.     Exchange : Boolean;
  27.     {========================}
  28.     Function SortCompare : Boolean;
  29.       Var
  30.         TempBoolean : Boolean;
  31.       Begin
  32.         TempBoolean := False;
  33.         Case Gsco Of
  34.           'N' : Begin
  35.                   If Gscd = 'A' Then
  36.                   Begin
  37.                     If NextPrintEntry^.FileName > NextPrintEntry^.NextEntry^.FileName Then TempBoolean := True;
  38.                   End
  39.                   Else
  40.                   Begin
  41.                     If NextPrintEntry^.FileName < NextPrintEntry^.NextEntry^.FileName Then TempBoolean := True;
  42.                   End;
  43.                 End;
  44.           'E' : Begin
  45.                   If Gscd = 'A' Then
  46.                   Begin
  47.                     If FileExtName(NextPrintEntry^.FileName) > FileExtName(NextPrintEntry^.NextEntry^.FileName) Then
  48.                      TempBoolean := True;
  49.                   End
  50.                   Else
  51.                   Begin
  52.                     If FileExtName(NextPrintEntry^.FileName) < FileExtName(NextPrintEntry^.NextEntry^.FileName) Then
  53.                      TempBoolean := True;
  54.                   End;
  55.                 End;
  56.           'S' : Begin
  57.                   If Gscd = 'A' Then
  58.                   Begin
  59.                     If NextPrintEntry^.FileSize > NextPrintEntry^.NextEntry^.FileSize Then TempBoolean := True;
  60.                   End
  61.                   Else
  62.                   Begin
  63.                     If NextPrintEntry^.FileSize < NextPrintEntry^.NextEntry^.FileSize Then TempBoolean := True;
  64.                   End;
  65.                 End;
  66.           'T' : Begin
  67.                   If Gscd = 'A' Then
  68.                   Begin
  69.                     If NextPrintEntry^.FileDate > NextPrintEntry^.NextEntry^.FileDate Then TempBoolean := True;
  70.                   End
  71.                   Else
  72.                   Begin
  73.                     If NextPrintEntry^.FileDate < NextPrintEntry^.NextEntry^.FileDate Then TempBoolean := True;
  74.                   End;
  75.                 End;
  76.           'D' : Begin
  77.                   If Gscd = 'A' Then
  78.                   Begin
  79.                     If NextPrintEntry^.Description > NextPrintEntry^.NextEntry^.Description Then TempBoolean := True;
  80.                   End
  81.                   Else
  82.                   Begin
  83.                     If NextPrintEntry^.Description < NextPrintEntry^.NextEntry^.Description Then TempBoolean := True;
  84.                   End;
  85.                 End;
  86.         End;
  87.         SortCompare := TempBoolean;
  88.       End;
  89.     {========================}
  90.   Begin
  91.     AnsiGotoXY(25,1); AnsiClearToEOL;
  92.     Write('Sort by (N)ame, (E)xt, (S)ize, (T)ime & Date or (D)escription: ');
  93.     Repeat
  94.       Gsco := UpCase(Char(GetInput));
  95.     Until Pos(Gsco,'NESTDQ') > 0;
  96.     If Gsco = 'Q' Then Exit;
  97.     Case Gsco Of
  98.       'N' : Gss := 'Sort by Name, ';
  99.       'E' : Gss := 'Sort by Ext, ';
  100.       'S' : Gss := 'Sort by Size, ';
  101.       'T' : Gss := 'Sort by Time & Date, ';
  102.       'D' : Gss := 'Sort by Description, ';
  103.     End;
  104.     AnsiGotoXY(25,1); AnsiClearToEOL;
  105.     Write(Gss+'(A)sending or (D)esending: ');
  106.     Repeat
  107.       Gscd := UpCase(Char(GetInput));
  108.     Until Pos(Gscd,'ADQ') > 0;
  109.     If Gscd = 'Q' Then Exit;
  110.     Case Gscd Of
  111.       'A' : Gss := Gss+'Assending, ';
  112.       'D' : Gss := Gss+'Desending, ';
  113.     End;
  114.     AnsiGotoXY(25,1); AnsiClearToEOL;
  115.     Write(Gss+'(G)o or (Q)uit: ');
  116.     Repeat
  117.       Gsc := UpCase(Char(GetInput));
  118.     Until Pos(Gsc,'GQ') > 0;
  119.     If Gsc = 'Q' Then Exit;
  120.     If (BeginSort <> NIL) And (EndSort <> NIL) And (BeginSort <> EndSort) Then
  121.     Begin
  122.       Altered := True;
  123.       If MaxAvail > SizeOf(ListRecord) Then
  124.       Begin
  125.         New(TempSort);
  126.         NextPrintEntry := BeginSort;
  127.         While (NextPrintEntry <> EndSort) And (NextPrintEntry <> NIL) Do
  128.         Begin
  129.           NextPrintEntry := NextPrintEntry^.PrevEntry;
  130.           If NextPrintEntry = EndSort Then
  131.           Begin
  132.             EndSort := BeginSort;
  133.             BeginSort := NextPrintEntry;
  134.           End;
  135.         End;
  136.         Repeat
  137.           Exchange := False;
  138.           NextPrintEntry := BeginSort;
  139.           While NextPrintEntry <> EndSort Do
  140.           Begin
  141.             If SortCompare Then
  142.             Begin
  143.               TempSort^.TypeOfRecord := NextPrintEntry^.TypeOfRecord;
  144.               TempSort^.FileName := NextPrintEntry^.FileName;
  145.               TempSort^.FileSize := NextPrintEntry^.FileSize;
  146.               TempSort^.FileDate := NextPrintEntry^.FileDate;
  147.               TempSort^.Description := NextPrintEntry^.Description;
  148.               NextPrintEntry^.TypeOfRecord := NextPrintEntry^.NextEntry^.TypeOfRecord;
  149.               NextPrintEntry^.FileName := NextPrintEntry^.NextEntry^.FileName;
  150.               NextPrintEntry^.FileSize := NextPrintEntry^.NextEntry^.FileSize;
  151.               NextPrintEntry^.FileDate := NextPrintEntry^.NextEntry^.FileDate;
  152.               NextPrintEntry^.Description := NextPrintEntry^.NextEntry^.Description;
  153.               NextPrintEntry^.NextEntry^.TypeOfRecord := TempSort^.TypeOfRecord;
  154.               NextPrintEntry^.NextEntry^.FileName := TempSort^.FileName;
  155.               NextPrintEntry^.NextEntry^.FileSize := TempSort^.FileSize;
  156.               NextPrintEntry^.NextEntry^.FileDate := TempSort^.FileDate;
  157.               NextPrintEntry^.NextEntry^.Description := TempSort^.Description;
  158.               Exchange := True;
  159.             End;
  160.             NextPrintEntry := NextPrintEntry^.NextEntry;
  161.           End;
  162.         Until (Not Exchange);
  163.         DisplayScreen;
  164.         Dispose(TempSort);
  165.       End;
  166.     End;
  167.   End;
  168. {========================================================================}
  169. Begin
  170. End.
  171. {========================================================================}
  172.