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

(*
RF>   Has anyone written a function for creating a pathname ?
RF>   I'm having a problem with putting together a function that you
RF>   can pass a pathname to, such as: C:\WINDOWS\SYSTEM\STUFF
RF>   and have it create the path if it's at all possible.

Try the following, taken from a couple (one DOS, one Windows) of
install programs I am working on.  Lines beginning {} should
be replaced with your preferred error reporting methods (they
currently use my UNIXGUI package).  This is not guaranteed to
trap all possible errors.

LEGALDIR will return true if the path is legal.  You *must* specify
the drive in the path as in C:\WINDOWS\SYSTEM\STUFF
*)
Function LegalDir(path:string):boolean;
    var flag:boolean;
    begin
         path:=short(path);
         flag:=true;
         if path[1]<'A' then flag:=false;
         if path[1]>'Z' then flag:=false;
         if path[2]<>':' then flag:=false;
         if path[3]<>'\' then flag:=false;
         delete(path,1,3);
         While path<>'' do
         begin
              if pos('\',path)>9 then flag:=false;
              if ((length(path)>1) and (path[1]='\') and (path[2]='\'))
                 then flag:=false;
              if path[1]=' ' then flag:=false;
              if  not (path[1] in
                 ['A','B','C','D','E','F','G','H','I','J','K','L','M',
                  'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                  '1','2','3','4','5','6','7','8','9','0','_','^','$',
                  '~','!','#','%','&','-','{','}','(',')','\'])
                 then flag:=false;

              delete(path,1,1);
         end;
         if not flag then
         begin
{}             WinOkDialogue('Cannot Install',
                             'Illegal Directory name!',
                             'Please re-edit and',
                             'try again.');
         end;
         LegalDir:=flag;
    end;
{
MAKEDIRECTORY will make the directory structure you pass to it.  Best
to call LEGALDIR first, for obvious reasons.
}
    Procedure MakeDirectory(st:string);
    var ns:string;
        ior:word;
    begin
        Chdir(st);
        if ioresult=0 then exit;
        MKDIR(st);
        ior:=ioresult;
        if ior=3 then
        begin
            ns:=st;
            while ns[length(ns)]<>'\' do delete(ns,length(ns),1);
            delete(ns,length(ns),1);
            MakeDirectory(ns);
            MakeDirectory(st);
        end;
        if ((ior<>0) and (ior<>3)) then
        begin
{}             Popdialogue;
{}             WinOkDialogue('Error',
                             'Illegal Directory',
                             'or drive error!',
                             'Halting...');
{}             closegui;
             halt;
        end;
    end;

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