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

  1. Unit MfmCopy;
  2. {========================================================================}
  3. Interface
  4.   Uses
  5.     Dos;
  6.   Procedure DoFileCopy(FromFileName, ToFileName : PathStr);
  7. {========================================================================}
  8. Implementation
  9.   Type
  10.     BufPtrType = ^BufRecordType;
  11.     BufRecordType = Record
  12.       Next : BufPtrType;
  13.       Buffer : Array[1..$7FFF] Of Byte;
  14.       NumRead : Word;
  15.     End;
  16.   Var
  17.     InFile, OutFile : File;
  18.     NumRead, NumWritten : Word;
  19.     FromFileName, ToFileName : PathStr;
  20.     Current, First, Old : BufPtrType;
  21.     TimeTransfer : LongInt;
  22. {========================================================================}
  23. Procedure DoFileCopy(FromFileName, ToFileName : PathStr);
  24.   Begin
  25.     If MaxAvail > SizeOf(Current^.Buffer) Then
  26.     Begin
  27.       Assign(InFile, FromFileName);
  28.       Reset(InFile, 1);
  29.       Assign(OutFile, ToFileName);
  30.       Rewrite(OutFile, 1);
  31.       Repeat
  32.         First := NIL;
  33.         Repeat
  34.           If MaxAvail > SizeOf(Current^.Buffer) Then
  35.           Begin
  36.             Old := Current;
  37.             New(Current);
  38.             If First = NIL Then First := Current Else Old^.Next := Current;
  39.             BlockRead(InFile,Current^.Buffer,SizeOf(Current^.Buffer),NumRead);
  40.           End;
  41.           Current^.NumRead := NumRead;
  42.         Until (NumRead = 0) Or (SizeOf(Current^.Buffer) <> NumRead) Or (MaxAvail < SizeOf(Current^.Buffer));
  43.         Current^.Next := NIL;
  44.         Current := First;
  45.         Repeat
  46.           BlockWrite(OutFile,Current^.Buffer,Current^.NumRead,NumWritten);
  47.           Old := Current;
  48.           NumRead := Current^.NumRead;
  49.           Current := Current^.Next;
  50.           If Old <> NIL Then Dispose(Old);
  51.         Until Current = NIL;
  52.       Until (NumRead < SizeOf(Current^.Buffer)) Or (NumWritten <> NumRead);
  53.       GetFTime(InFile,TimeTransfer); SetFTime(OutFile,TimeTransfer);
  54.       Close(InFile);
  55.       Close(OutFile);
  56.     End;
  57.   End;
  58. {========================================================================}
  59. Begin
  60. End.
  61. {========================================================================}
  62.