lots of mods getting windows to build under cygwin without visual studio.
[feisty_meow.git] / nucleus / library / filesystem / filename.h
index 9c4eb56beb7b9a582f70e5881dbba7951fcbf9b3..d1f2fb4233253af5ccab6207da3853e46c2ac851 100644 (file)
@@ -27,6 +27,11 @@ class status_info;
 // define useful constant for filesystem path length.
 #ifndef MAX_ABS_PATH 
   #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
@@ -56,6 +61,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 +70,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 +195,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;