---------------------------------------------------------------------
  CLASS: Attributes     --CSB
  PUBLIC METHODS:
     Some (major) member functions for the Attributes class are described
     below:
     
     **general**
 
        toFileEntry() 
       void toFileEntry(FileEntry& fileEntry);
         Sends all state information from the Attributes class to the FileEntry
         passed in.  
         ***note***:  The Attributes class may be modified in this process.  On every
          toFileEntry()  call, the attributes class automatically sets the
         following bits to False to ensure *osta* compliance:  sortedDirectoryBit,
         nonRelocatableBit, contiguousBit, transformedBit, and multiVersionsBit.
         Also, all attributes *except* FileType and accessTime, modificationTime,
         and attributesTime are set to zero on this write if the Attributes is a
         ExtendedAttributes (the other data fields do not apply).
 
        fromFileEntry() 
       void fromFileEntry(FileEntry& fileEntry);
         Populates all values in this Attributes class from the FileEntry object
         passed in, which is not modified.
         from the FileEntry and Attributes class.
 
        linkCount() 
       UINT32 linkCount(void) const;
         This function returns the number of links to this file.  NOTE:  All files
         have ONE link by default for the ".." entry, not two as in UNIX for the
         ".." and "." entries.  However, the ExtendedAttributes type of Attributes
         will always be forced to zero links on a toFileEntry() call.  Each platform 
         is free to set up additional links to the file, as long as the file linkCount 
         is appropriately updated.
         
       uid()
       gid()
       accessTime()
       modificationTime()
       attributeTime()
 
       operator==()
       Boolean operator!=(const Attributes& attributes) const;
         These functions will compare two instances of an Attributes class together.
         If each Attributes class has the same state as the other for all bits, the
         logical "True" or "False" value is returned.
 
       fileType()
       void fileType(FileType newType);
       FileType fileType(void) const;
         This functions set and get an enumerated value that defines the type of
         Attributes class stored.  While the user may directly set an invalid
         type, the value "file_InvalidType" is returned if the file type is not
         a discretely allowed type.
 
     **unix-specific**:
      
       unixMode()
       void   unixMode(UINT16 newMode);
       UINT16 unixMode(void) const;
         These functions allow the user to set parts of the Attributes state with a
         POSIX compliant stat_t type.  This is a UINT16 with RWX bits for owner,
         group, and other defined by POSIX compliant operating systems.  In addition,
         bits are present for setuid, setgid, and sticky.
 
       usrRWXBits()
       UINT16 usrRWXBits(void) const;
       grpRWXBits()
       UINT16 grpRWXBits(void) const;
       othRWXBits()
       UINT16 othRWXBits(void) const;
       usrRWXBits()
       void usrRWXBits(UINT16 newBits);
       grpRWXBits()
       void grpRWXBits(UINT16 newBits);
       othRWXBits()
       void othRWXBits(UINT16 newBits);
         These functions give access to the RWX bits for each usr, grp, or oth.
         NOTE:  although a UINT16 is the parameter, only the RIGHTMOST (low order)
         three bits are used to set and retrieve the RWX bits.  All other bits are
         silently ignored.
 
     **other**
       Many other member functions exist to set and get values for one
       logical bit of permissions, file characteristics, etc. at a time.
 ----------------------------------------------------------------------

---------------------------------------------------------------------
  METHOD: Attributes::toFileEntry  --CSB
       
  Set the FileEntry passed in with our internal data values.
 
  ARGS:
   FileEntry   IN/OUT  Set to new values according to our internal state.
 
  POST-CONDS: (E.g., changes to class data members)
   FileEntry is modified to reflect the Attributes state.
 
  NOTE:
   The Attributes class is aware of the FileEntry interface, but the
     reverse is not true.
 ----------------------------------------------------------------------
void
NSR::Attributes::toFileEntry(NSR::FileEntry& fileEntry)  
         ...?
        printf("ERROR in Attributes::toFileEntry():  Read from Write failure.\n");
        RWCString cstr;
        printf("%s\n", appendAttributes(cstr = "attrib"));
        printf("%s\n", verifyAttributes.appendAttributes(cstr = "verifyAttributes"));
    }
#endif

    return;
}

 ----------------------------------------------------------------------
  METHOD: Attributes::fromFileEntry  --CSB
       
  Set ourselves with values from the FileEntry passed in.
 
  ARGS:
   FileEntry   IN  Source for our new values.
 
  POST-CONDS:
   All internal data members are modified to reflect the state of the
     FileEntry object passed in.
  
  NOTES:
   This function extracts values from the FileEntry passed in, and modifies
     the state of all internal Attribute data members to be consistent
     with the FileEntry passed in.
 ----------------------------------------------------------------------
void
NSR::Attributes::fromFileEntry(NSR::FileEntry& fileEntry)


---------------------------------------------------------------------
  METHOD: Attributes::toFileEntry  --CSB
       
  Set the FileEntry passed in with our internal data values.
 
  ARGS:
   FileEntry   IN/OUT  Set to new values according to our internal state.
 
  POST-CONDS: (E.g., changes to class data members)
   FileEntry is modified to reflect the Attributes state.
 
  NOTE:
   The Attributes class is aware of the FileEntry interface, but the
     reverse is not true.
 ----------------------------------------------------------------------
void
NSR::Attributes::toFileEntry(NSR::FileEntry& fileEntry)  
         ...?
        printf("ERROR in Attributes::toFileEntry():  Read from Write failure.\n");
        RWCString cstr;
        printf("%s\n", appendAttributes(cstr = "attrib"));
        printf("%s\n", verifyAttributes.appendAttributes(cstr = "verifyAttributes"));
    }
#endif

    return;
}

 ----------------------------------------------------------------------
  METHOD: Attributes::fromFileEntry  --CSB
       
  Set ourselves with values from the FileEntry passed in.
 
  ARGS:
   FileEntry   IN  Source for our new values.
 
  POST-CONDS:
   All internal data members are modified to reflect the state of the
     FileEntry object passed in.
  
  NOTES:
   This function extracts values from the FileEntry passed in, and modifies
     the state of all internal Attribute data members to be consistent
     with the FileEntry passed in.
 ----------------------------------------------------------------------
void
NSR::Attributes::fromFileEntry(NSR::FileEntry& fileEntry)


---------------------------------------------------------------------
  METHOD: Attributes::fromFileEntry  --CSB
       
  Set ourselves with values from the FileEntry passed in.
 
  ARGS:
   FileEntry   IN  Source for our new values.
 
  POST-CONDS:
   All internal data members are modified to reflect the state of the
     FileEntry object passed in.
  
  NOTES:
   This function extracts values from the FileEntry passed in, and modifies
     the state of all internal Attribute data members to be consistent
     with the FileEntry passed in.
 ----------------------------------------------------------------------
void
NSR::Attributes::fromFileEntry(NSR::FileEntry& fileEntry)