CANONIC.PAS

{* Что спрятано под SUBST *}

Unit CANONIC;
Interface
Implementation
Begin
 writeln('
Определение канонического имени драйва, созданного по SUBST
'
);
End.

Program pas;

Uses CANONIC.pas; {* Эту строку можно удалить *}
{Определение канонического имени драйва, созданного по SUBST}
Uses Dos; {* Вызов внешних функций *}
Function CanonicalName( Path : String ) : String;
( * Errors In InOutRes :            0 : OK            2 : invalid source name            3 : invalid device Or malformed path
Else : ? * )
  Var {* Необходимые переменные *}
    Reg : Registers;
  S   : String[128];
  P   : String[128];
Begin
  P := Path + #0;
  With Reg Do
  Begin
    AH := $60;
    DS := Seg(P[1]);
    SI := Ofs(P[1]);
    ES := Seg(S[1]);
    DI := Ofs(S[1]);
    MsDos(Reg);
    If Odd(Flags) Then
    Begin
      InOutRes := AX;
      CanonicalName := '';
    End;
    Else Begin
      InOutRes := 0;
    S[0] := #128;
    S[0] := Chr(Pos(#0, S) - 1);
    CanonicalName := S;
  End;
  
End;

  End;
  Begin
  WriteLn(CanonicalName(ParamStr(1)));
  WriteLn('IOResult = ', IOResult);
  End......