""" MS-DOS structures. Documentation: - File attributes: http://www.cs.colorado.edu/~main/cs1300/include/ddk/winddk.h """ from hachoir.field import StaticFieldSet from hachoir.field import Bit, NullBits _FIELDS = ( (Bit, "read_only"), (Bit, "hidden"), (Bit, "system"), (NullBits, "reserved[]", 1), (Bit, "directory"), (Bit, "archive"), (Bit, "device"), (Bit, "normal"), (Bit, "temporary"), (Bit, "sparse_file"), (Bit, "reparse_file"), (Bit, "compressed"), (Bit, "offline"), (Bit, "dont_index_content"), (Bit, "encrypted"), ) class MSDOSFileAttr16(StaticFieldSet): """ MSDOS 16-bit file attributes """ format = _FIELDS + ((NullBits, "reserved[]", 1),) _text_keys = ( # Sort attributes by importance "directory", "read_only", "compressed", "hidden", "system", "normal", "device", "temporary", "archive") def createValue(self): mode = [] for name in self._text_keys: if self[name].value: if 4 <= len(mode): mode.append("...") break else: mode.append(name) if mode: return ", ".join(mode) else: return "(none)" class MSDOSFileAttr32(MSDOSFileAttr16): """ MSDOS 32-bit file attributes """ format = _FIELDS + ((NullBits, "reserved[]", 17),)