[Back to COPYMOVE SWAG index] [Back to Main SWAG index] [Original]

    {
    >I am interested in the source in Assembler or TP to move a File from one
    >directory to another by means of the FAT table.  I have seen several
    >small utilities to do this but I was unable to understand them after
    >reverse engineering/disassembly.  (Don't worry, they were PD).  <G>
    >Anyway, any help would be appreciated.  Thanks.

    You don't Really need to do much. Dos Interrupt (21h), Function 56h, will
    rename a File, and in essence move it if the source and destination
    directories are not the same. That's all there is to it. I know Function
    56h is available in Dos 3.3 and above. I am not sure about prior
    versions.

    On entry: AH      56H
              DS:DX   Pointer to an ASCIIZ String containing the drive, path,
                      and Filename of the File to be renamed.
              ES:DI   Pointer to an ASCIIZ String containing the new path and
                      Filename
    On return AX      Error codes if carry flag set, NONE if carry flag not set

    Below is some crude TP code I Typed on the fly. It may not be exactly right
    but you get the idea.
    }

    Uses
      Dos;
    Var
      Regs        : Registers;
      Source,
      Destination : PathStr;

    begin
      { Add an ASCII 0 at the end of the Strings to male them ASCIIZ
        Strings, without actually affecting their actual lengths }
      Source[ord(Source[0])] := #0;
      Destination[ord(Destination[0])] := #0;

      { Set the Registers }
      Regs.AH := $56;
      Regs.DS := Seg(Source[1]);
      Regs.DX := ofs(Source[1]);
      Regs.ES := Seg(Destination[1]);
      Regs.DI := ofs(Destination[1]);

      { Do the Interrupt }
      Intr($21,Regs);
    end.

[Back to COPYMOVE SWAG index] [Back to Main SWAG index] [Original]