2014-03-10 05:18:05 +00:00
|
|
|
"""
|
|
|
|
MS-DOS structures.
|
|
|
|
|
|
|
|
Documentation:
|
|
|
|
- File attributes:
|
|
|
|
http://www.cs.colorado.edu/~main/cs1300/include/ddk/winddk.h
|
|
|
|
"""
|
|
|
|
|
2015-08-15 14:22:29 +00:00
|
|
|
from hachoir_core.field import StaticFieldSet
|
|
|
|
from hachoir_core.field import Bit, NullBits
|
2014-03-10 05:18:05 +00:00
|
|
|
|
|
|
|
_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),)
|
|
|
|
|