66cc192095257ddcabbaf699555120d38e056750
[occt.git] / src / OSD / OSD_Path.hxx
1 // Created on: 1992-02-18
2 // Created by: Stephan GARNAUD (ARM)
3 // Copyright (c) 1992-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _OSD_Path_HeaderFile
18 #define _OSD_Path_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <TCollection_AsciiString.hxx>
25 #include <Standard_Boolean.hxx>
26 #include <OSD_SysType.hxx>
27 #include <Standard_Integer.hxx>
28 class Standard_ConstructionError;
29 class Standard_NullObject;
30 class OSD_OSDError;
31 class Standard_NumericError;
32 class Standard_ProgramError;
33 class TCollection_AsciiString;
34
35
36
37 class OSD_Path 
38 {
39 public:
40
41   DEFINE_STANDARD_ALLOC
42
43   
44   //! Creates a Path object initialized to an empty string.
45   //! i.e. current directory.
46   Standard_EXPORT OSD_Path();
47   
48   //! Creates a Path object initialized by dependant path.
49   //! ex: OSD_Path me ("/usr/bin/myprog.sh",OSD_UnixBSD);
50   //!
51   //! OSD_Path me ("sys$common:[syslib]cc.exe",OSD_OSF) will
52   //! raise a ProgramError due to invalid name for this
53   //! type of system.
54   //! In order to avoid a 'ProgramError' , use IsValid(...)
55   //! to ensure you the validity of <aDependentName>.
56   //! Raises ConstructionError when the path is either null
57   //! or contains characters not in range of ' '...'~'.
58   Standard_EXPORT OSD_Path(const TCollection_AsciiString& aDependentName, const OSD_SysType aSysType = OSD_Default);
59   
60   //! Initializes a system independent path.
61   //! By default , the Path conversion will be assumed using
62   //! currently used system.
63   //! A special syntax is used to specify a "aTrek" in an
64   //! independent manner :
65   //! a "|" represents directory separator
66   //! a "^" means directory above (father)
67   //! examples:
68   //! "|usr|bin" - On UNIX -> "/usr/bin"
69   //! - On VMS  -> "[usr.bin]"
70   //! - On MSDOS-> "\usr\bin"
71   //! - On MacOs-> ": usr : bin"
72   //!
73   //! "^|rep"    - On UNIX -> "../rep"
74   //! - On VMS  -> "[-.rep]"
75   //! - On MSDOS -> "..\rep"
76   //! - On MacOS->  ":: rep"
77   //!
78   //! "subdir|" - On UNIX -> "subdir/"
79   //! - On VMS  -> "[.subdir.]"
80   Standard_EXPORT OSD_Path(const TCollection_AsciiString& aNode, const TCollection_AsciiString& aUsername, const TCollection_AsciiString& aPassword, const TCollection_AsciiString& aDisk, const TCollection_AsciiString& aTrek, const TCollection_AsciiString& aName, const TCollection_AsciiString& anExtension);
81   
82   //! Gets each component of a path.
83   Standard_EXPORT void Values (TCollection_AsciiString& aNode, TCollection_AsciiString& aUsername, TCollection_AsciiString& aPassword, TCollection_AsciiString& aDisk, TCollection_AsciiString& aTrek, TCollection_AsciiString& aName, TCollection_AsciiString& anExtension) const;
84   
85   //! Sets each component of a path.
86   Standard_EXPORT void SetValues (const TCollection_AsciiString& aNode, const TCollection_AsciiString& aUsername, const TCollection_AsciiString& aPassword, const TCollection_AsciiString& aDisk, const TCollection_AsciiString& aTrek, const TCollection_AsciiString& aName, const TCollection_AsciiString& anExtension);
87   
88   //! Returns system dependent path
89   //! <aType> is one among Unix,VMS ...
90   //! This function is not private because you may need to
91   //! display system dependent path on a front-end.
92   //! It can be useful when communicating with another system.
93   //! For instance when you want to communicate between VMS and Unix
94   //! to transfer files, or to do a remote procedure call
95   //! using files.
96   //! example :
97   //! OSD_Path myPath ("sparc4", "sga", "secret_passwd",
98   //! "$5$dkb100","|users|examples");
99   //! Internal ( Dependent_name );
100   //! On UNIX  sga"secret_passwd"@sparc4:/users/examples
101   //! On VMS   sparc4"sga secret_passwd"::$5$dkb100:[users.examples]
102   //! Sets each component of a Path giving its system dependent name.
103   Standard_EXPORT void SystemName (TCollection_AsciiString& FullName, const OSD_SysType aType = OSD_Default) const;
104   
105   //! Returns system dependent path resolving logical symbols.
106   Standard_EXPORT void ExpandedName (TCollection_AsciiString& aName);
107   
108   //! Returns TRUE if <theDependentName> is valid for this SysType.
109   Standard_EXPORT static Standard_Boolean IsValid (const TCollection_AsciiString& theDependentName, const OSD_SysType theSysType = OSD_Default);
110   
111   //! This removes the last directory name in <aTrek>
112   //! and returns result.
113   //! ex:  me = "|usr|bin|todo.sh"
114   //! me.UpTrek() gives me = "|usr|todo.sh"
115   //! if <me> contains "|", me.UpTrek() will give again "|"
116   //! without any error.
117   Standard_EXPORT void UpTrek();
118   
119   //! This appends a directory name into the Trek.
120   //! ex: me = "|usr|todo.sh"
121   //! me.DownTrek("bin") gives me = "|usr|bin|todo.sh".
122   Standard_EXPORT void DownTrek (const TCollection_AsciiString& aName);
123   
124   //! Returns number of components in Trek of <me>.
125   //! ex: me = "|usr|sys|etc|bin"
126   //! me.TrekLength() returns 4.
127   Standard_EXPORT Standard_Integer TrekLength() const;
128   
129   //! This removes a component of Trek in <me> at position <where>.
130   //! The first component of Trek is numbered 1.
131   //! ex:   me = "|usr|bin|"
132   //! me.RemoveATrek(1) gives me = "|bin|"
133   //! To avoid a 'NumericError' because of a bad <where>, use
134   //! TrekLength() to know number of components of Trek in <me>.
135   Standard_EXPORT void RemoveATrek (const Standard_Integer where);
136   
137   //! This removes <aName> from <me> in Trek.
138   //! No error is raised if <aName> is not in <me>.
139   //! ex:  me = "|usr|sys|etc|doc"
140   //! me.RemoveATrek("sys") gives me = "|usr|etc|doc".
141   Standard_EXPORT void RemoveATrek (const TCollection_AsciiString& aName);
142   
143   //! Returns component of Trek in <me> at position <where>.
144   //! ex:  me = "|usr|bin|sys|"
145   //! me.TrekValue(2) returns "bin"
146   Standard_EXPORT TCollection_AsciiString TrekValue (const Standard_Integer where) const;
147   
148   //! This inserts <aName> at position <where> into Trek of <me>.
149   //! ex:  me = "|usr|etc|"
150   //! me.InsertATrek("sys",2) gives me = "|usr|sys|etc"
151   Standard_EXPORT void InsertATrek (const TCollection_AsciiString& aName, const Standard_Integer where);
152   
153   //! Returns Node of <me>.
154   Standard_EXPORT TCollection_AsciiString Node() const;
155   
156   //! Returns UserName of <me>.
157   Standard_EXPORT TCollection_AsciiString UserName() const;
158   
159   //! Returns Password of <me>.
160   Standard_EXPORT TCollection_AsciiString Password() const;
161   
162   //! Returns Disk of <me>.
163   Standard_EXPORT TCollection_AsciiString Disk() const;
164   
165   //! Returns Trek of <me>.
166   Standard_EXPORT TCollection_AsciiString Trek() const;
167   
168   //! Returns file name of <me>.
169   //! If <me> hasn't been initialized, it returns an empty AsciiString.
170   Standard_EXPORT TCollection_AsciiString Name() const;
171   
172   //! Returns my extension name.
173   //! This returns an empty string if path contains no file name.
174   Standard_EXPORT TCollection_AsciiString Extension() const;
175   
176   //! Sets Node of <me>.
177   Standard_EXPORT void SetNode (const TCollection_AsciiString& aName);
178   
179   //! Sets UserName of <me>.
180   Standard_EXPORT void SetUserName (const TCollection_AsciiString& aName);
181   
182   //! Sets Password of <me>.
183   Standard_EXPORT void SetPassword (const TCollection_AsciiString& aName);
184   
185   //! Sets Disk of <me>.
186   Standard_EXPORT void SetDisk (const TCollection_AsciiString& aName);
187   
188   //! Sets Trek of <me>.
189   Standard_EXPORT void SetTrek (const TCollection_AsciiString& aName);
190   
191   //! Sets file name of <me>.
192   //! If <me> hasn't been initialized, it returns an empty AsciiString.
193   Standard_EXPORT void SetName (const TCollection_AsciiString& aName);
194   
195   //! Sets my extension name.
196   Standard_EXPORT void SetExtension (const TCollection_AsciiString& aName);
197   
198   //! Finds the full path of an executable file, like the
199   //! "which" Unix utility. Uses the path environment variable.
200   //! Returns False if executable file not found.
201   Standard_EXPORT Standard_Boolean LocateExecFile (OSD_Path& aPath);
202   
203   //! Returns the relative file path between the absolute directory
204   //! path <DirPath>  and the absolute file path <AbsFilePath>.
205   //! If <DirPath> starts with "/", pathes are handled as
206   //! on Unix, if it starts with a letter followed by ":", as on
207   //! WNT. In particular on WNT directory names are not key sensitive.
208   //! If handling fails, an empty string is returned.
209   Standard_EXPORT static TCollection_AsciiString RelativePath (const TCollection_AsciiString& DirPath, const TCollection_AsciiString& AbsFilePath);
210   
211   //! Returns the absolute file path from the absolute directory path
212   //! <DirPath> and the relative file path returned by RelativePath().
213   //! If the RelFilePath is an absolute path, it is returned and the
214   //! directory path is ignored.
215   //! If handling fails, an empty string is returned.
216   Standard_EXPORT static TCollection_AsciiString AbsolutePath (const TCollection_AsciiString& DirPath, const TCollection_AsciiString& RelFilePath);
217
218
219
220
221 protected:
222
223
224
225
226
227 private:
228
229
230
231   TCollection_AsciiString myNode;
232   TCollection_AsciiString myUserName;
233   TCollection_AsciiString myPassword;
234   TCollection_AsciiString myDisk;
235   TCollection_AsciiString myTrek;
236   TCollection_AsciiString myName;
237   TCollection_AsciiString myExtension;
238   Standard_Boolean myUNCFlag;
239   OSD_SysType mySysDep;
240
241
242 };
243
244
245
246
247
248
249
250 #endif // _OSD_Path_HeaderFile