[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]