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

    {
     BP> Is there some way I can use interrupts or whatever to detect whether
     BP> the "file name" contained in the S string variable is a device name
     BP> (such as "CON", "LPT1", "AUX", etc) or not?

    Yes: use the ubiquitious INT $21. }

    FUNCTION IsDevice(CONST Fname: PathStr): boolean;
    { -- Returns TRUE if named file is actually a device.
      -- Example: IsDevice('CON') = TRUE, IsDevice(paramstr(0)) = FALSE.
      -- N.B.: returns FALSE if FName is a non-existent file. }
    VAR Regs: Registers;
        F   : FILE;
        FH  : word ABSOLUTE F;
    BEGIN IsDevice := FALSE;
          assign(F, Fname);
          reset(F, 1);
          IF IOresult <> 0 THEN exit;
          WITH Regs
          DO BEGIN { -- Get information about file: }
                   AX := $4400;
                   BX := FH;
                   MsDos(Regs);
                   IF NOT odd(Flags) AND (DL AND $80 <> 0)
                   THEN IsDevice := TRUE
             END;
          close(F);
          IF IOresult <> 0 THEN ;
    END;

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