updates from orpheus for windoze build
[feisty_meow.git] / nucleus / library / filesystem / filename.h
index 9c4eb56beb7b9a582f70e5881dbba7951fcbf9b3..ffbde48e67c18af09de92f70c19b3594c79922f7 100644 (file)
@@ -27,6 +27,17 @@ class status_info;
 // define useful constant for filesystem path length.
 #ifndef MAX_ABS_PATH 
   #ifdef __WIN32__
+    #define MAX_ABS_PATH MAX_PATH
+  #else
+    #define MAX_ABS_PATH PATH_MAX
+  #endif
+/*
+  #ifdef __WIN32__
+  // winsock support...
+//  #undef FD_SETSIZE
+//  #define FD_SETSIZE 1000
+    // if you don't set this, you can only select on a default of 64 sockets.
+  #include <winsock2.h>
     #include <windows.h>
     #define MAX_ABS_PATH MAX_PATH
   #else
@@ -37,9 +48,9 @@ class status_info;
     #endif
     #define MAX_ABS_PATH PATH_MAX
   #endif
+*/
 #endif
 
-
 namespace filesystem {
 
 //! Provides operations commonly needed on file names.
@@ -56,6 +67,8 @@ public:
     /*!< the "name_of_file" can itself be a directory. */
   filename(const filename &to_copy);  //!< copy constructor.
 
+  DEFINE_CLASS_NAME("filename");
+
   virtual ~filename();
 
   bool good() const;
@@ -63,6 +76,9 @@ public:
     /*!< this means that not only was the pathname parsed and found valid,
     but the file actually exists. */
 
+  void reset(const basis::astring &name);
+    //!< changes the file name held by the object.
+
   const basis::astring &raw() const;
     //!< returns the astring that we're holding onto for the path.
   basis::astring &raw();
@@ -185,20 +201,19 @@ public:
     the file to be created or accessed).  the "replacement" is used as the
     character that is substituted instead of illegal characters. */
 
-  void separate(structures::string_array &pieces) const;
+  void separate(bool &rooted, structures::string_array &pieces) const;
     //!< breaks the filename into its component parts.
-    /*!< this returns an array containing the component names.  the last
-    component, unless the filename held is actually a directory, should be the
-    name of the file.
-//hmmm: what does this mean, below?
-  if the first character is a directory, then the first
-    component will be empty. */
-
-  void join(const structures::string_array &pieces);
+    /*!< this returns an array containing the component names for the path in
+    this filename object.  if the "rooted" flag is set to true, then the path
+    was absolute (i.e. started at '/' in unix.  this notion is not needed for
+    dos/windoze, as the first component will be something like 'a:'). */
+
+  void join(bool rooted, const structures::string_array &pieces);
     //!< undoes a separate() operation to get the filename back.
     /*!< "this" is set to a filename made from each of the "pieces".  if there
-    are any directory separators inside the pieces, then they will be removed
-    by canonicalize(). */
+    are any directory separators inside the pieces themselves, then they will
+    be removed by canonicalize().  if separate() said the path was rooted,
+    then join needs to be told that. */
 
   // these implement the packing functionality.
   virtual void pack(basis::byte_array &packed_form) const;