diff --git a/python/local/ovms_module/ovms/atrdef/__init__.py b/python/local/ovms_module/ovms/atrdef/__init__.py
index 91c3454e812412de41b668f72f91f5989f64521d_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvYXRyZGVmL19faW5pdF9fLnB5..5d7d55d0d9c3e4f7f8cdd5799031e1c126017f89_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvYXRyZGVmL19faW5pdF9fLnB5 100644
--- a/python/local/ovms_module/ovms/atrdef/__init__.py
+++ b/python/local/ovms_module/ovms/atrdef/__init__.py
@@ -1,5 +1,14 @@
-'vms Extension Series for Python'
-__version__ = '0.3'
+"vms Extension Series for Python"
+from ctypes import (
+    Structure,
+    c_ushort,
+    c_void_p,
+    c_char,
+    POINTER,
+    cast,
+    sizeof,
+)
+
 """vms Extension Series for Python
     
 Copyright (c) 2002-2020, Jean-Francois Pieronne jf.pieronne@laposte.net
@@ -8,7 +17,7 @@
 """
 # vms Extension Series version number
 # (note that subpackages have their own version number)
-__version__ = '0.3'
+__version__ = "0.3"
 
 # Copyright notice string
 __copyright__ = """
@@ -17,7 +26,7 @@
     or contact the author. All Rights Reserved.
 
 """
-#*** MODULE $ATRDEF ***
+# *** MODULE $ATRDEF ***
 #  ATTRIBUTE LIST DESCRIPTION. THE ATTRIBUTE CONTROL LIST IS USED TO READ AND
 #  WRITE FILE ATTRIBUTES. IT CONSISTS OF CONCATENATED ATTRIBUTE CONTROL BLOCKS
 #  TERMINATED BY A SINGLE ZERO LONGWORD.
@@ -21,6 +30,6 @@
 #  ATTRIBUTE LIST DESCRIPTION. THE ATTRIBUTE CONTROL LIST IS USED TO READ AND
 #  WRITE FILE ATTRIBUTES. IT CONSISTS OF CONCATENATED ATTRIBUTE CONTROL BLOCKS
 #  TERMINATED BY A SINGLE ZERO LONGWORD.
-# 
-#  4 BYTE USER FILE CHARACTERISTICS 
+#
+#  4 BYTE USER FILE CHARACTERISTICS
 ATR_C_UCHAR = 3
@@ -26,3 +35,3 @@
 ATR_C_UCHAR = 3
-#  32 BYTES RECORD ATTRIBUTES 
+#  32 BYTES RECORD ATTRIBUTES
 ATR_C_RECATTR = 4
@@ -28,3 +37,3 @@
 ATR_C_RECATTR = 4
-#  6 BYTE RAD-50 FILE NAME 
+#  6 BYTE RAD-50 FILE NAME
 ATR_C_FILNAM = 5
@@ -30,3 +39,3 @@
 ATR_C_FILNAM = 5
-#  2 BYTE RAD-50 FILE TYPE 
+#  2 BYTE RAD-50 FILE TYPE
 ATR_C_FILTYP = 6
@@ -32,3 +41,3 @@
 ATR_C_FILTYP = 6
-#  2 BYTE BINARY FILE VERSION 
+#  2 BYTE BINARY FILE VERSION
 ATR_C_FILVER = 7
@@ -34,3 +43,3 @@
 ATR_C_FILVER = 7
-#  7 BYTE ASCII EXPIRATION DATE 
+#  7 BYTE ASCII EXPIRATION DATE
 ATR_C_EXPDAT = 8
@@ -36,3 +45,3 @@
 ATR_C_EXPDAT = 8
-#  32 BYTE STATISTICS BLOCK 
+#  32 BYTE STATISTICS BLOCK
 ATR_C_STATBLK = 9
@@ -38,3 +47,3 @@
 ATR_C_STATBLK = 9
-#  512 BYTE FILE HEADER 
+#  512 BYTE FILE HEADER
 ATR_C_HEADER = 10
@@ -40,3 +49,3 @@
 ATR_C_HEADER = 10
-#  MAGTAPE BLOCK SIZE 
+#  MAGTAPE BLOCK SIZE
 ATR_C_BLOCKSIZE = 11
@@ -42,3 +51,3 @@
 ATR_C_BLOCKSIZE = 11
-#  USER FILE LABEL 
+#  USER FILE LABEL
 ATR_C_USERLABEL = 12
@@ -44,3 +53,3 @@
 ATR_C_USERLABEL = 12
-#  REVISION COUNT THRU EXP DATE IN ASCII 
+#  REVISION COUNT THRU EXP DATE IN ASCII
 ATR_C_ASCDATES = 13
@@ -46,3 +55,3 @@
 ATR_C_ASCDATES = 13
-#  COMPATIBILITY MODE ALLOCATION DATA 
+#  COMPATIBILITY MODE ALLOCATION DATA
 ATR_C_ALCONTROL = 14
@@ -48,3 +57,3 @@
 ATR_C_ALCONTROL = 14
-#  END OF MAGTAPE LABEL PROCESSING AND SUPPLY AST CONTROL BLOCK 
+#  END OF MAGTAPE LABEL PROCESSING AND SUPPLY AST CONTROL BLOCK
 ATR_C_ENDLBLAST = 15
@@ -50,3 +59,3 @@
 ATR_C_ENDLBLAST = 15
-#  FILE NAME, TYPE & VERSION IN ASCII 
+#  FILE NAME, TYPE & VERSION IN ASCII
 ATR_C_ASCNAME = 16
@@ -52,3 +61,3 @@
 ATR_C_ASCNAME = 16
-#  64 BIT CREATION DATE 
+#  64 BIT CREATION DATE
 ATR_C_CREDATE = 17
@@ -54,3 +63,3 @@
 ATR_C_CREDATE = 17
-#  64 BIT REVISION DATE 
+#  64 BIT REVISION DATE
 ATR_C_REVDATE = 18
@@ -56,3 +65,3 @@
 ATR_C_REVDATE = 18
-#  64 BIT EXPIRATION DATE 
+#  64 BIT EXPIRATION DATE
 ATR_C_EXPDATE = 19
@@ -58,3 +67,3 @@
 ATR_C_EXPDATE = 19
-#  64 BIT BACKUP DATE 
+#  64 BIT BACKUP DATE
 ATR_C_BAKDATE = 20
@@ -60,3 +69,3 @@
 ATR_C_BAKDATE = 20
-#  4 BYTE FILE OWNER UIC 
+#  4 BYTE FILE OWNER UIC
 ATR_C_UIC = 21
@@ -62,3 +71,3 @@
 ATR_C_UIC = 21
-#  2 BYTE FILE PROTECTION 
+#  2 BYTE FILE PROTECTION
 ATR_C_FPRO = 22
@@ -64,3 +73,3 @@
 ATR_C_FPRO = 22
-#  2 BYTE RECORD PROTECTION 
+#  2 BYTE RECORD PROTECTION
 ATR_C_RPRO = 23
@@ -66,3 +75,3 @@
 ATR_C_RPRO = 23
-#  1 BYTE FILE ACCESS LEVEL 
+#  1 BYTE FILE ACCESS LEVEL
 ATR_C_ACLEVEL = 24
@@ -68,3 +77,3 @@
 ATR_C_ACLEVEL = 24
-#  FILE SECURITY MASK AND LIMIT 
+#  FILE SECURITY MASK AND LIMIT
 ATR_C_SEMASK = 25
@@ -70,3 +79,3 @@
 ATR_C_SEMASK = 25
-#  READ ONLY UIC 
+#  READ ONLY UIC
 ATR_C_UIC_RO = 26
@@ -72,3 +81,3 @@
 ATR_C_UIC_RO = 26
-#  DIRECTORY UPDATE SEQUENCE COUNT 
+#  DIRECTORY UPDATE SEQUENCE COUNT
 ATR_C_DIRSEQ = 27
@@ -74,3 +83,3 @@
 ATR_C_DIRSEQ = 27
-#  FILE BACK LINK POINTER 
+#  FILE BACK LINK POINTER
 ATR_C_BACKLINK = 28
@@ -76,3 +85,3 @@
 ATR_C_BACKLINK = 28
-#  JOURNAL CONTROL FLAGS 
+#  JOURNAL CONTROL FLAGS
 ATR_C_JOURNAL = 29
@@ -78,4 +87,4 @@
 ATR_C_JOURNAL = 29
-#  ANSI TAPE HEADER 1 ACCESSIBILITY 
+#  ANSI TAPE HEADER 1 ACCESSIBILITY
 ATR_C_HDR1_ACC = 30
 #   CHARACTER
@@ -80,4 +89,4 @@
 ATR_C_HDR1_ACC = 30
 #   CHARACTER
-#  ADD AN ACCESS CONTROL ENTRY 
+#  ADD AN ACCESS CONTROL ENTRY
 ATR_C_ADDACLENT = 31
@@ -83,3 +92,3 @@
 ATR_C_ADDACLENT = 31
-#  REMOVE AN ACCESS CONTROL ENTRY 
+#  REMOVE AN ACCESS CONTROL ENTRY
 ATR_C_DELACLENT = 32
@@ -85,3 +94,3 @@
 ATR_C_DELACLENT = 32
-#  MODIFY AN ACL ENTRY 
+#  MODIFY AN ACL ENTRY
 ATR_C_MODACLENT = 33
@@ -87,3 +96,3 @@
 ATR_C_MODACLENT = 33
-#  LOCATE AN ACL ENTRY 
+#  LOCATE AN ACL ENTRY
 ATR_C_FNDACLENT = 34
@@ -89,5 +98,5 @@
 ATR_C_FNDACLENT = 34
-#  FIND A SPECIFIC TYPE OF ACE 
+#  FIND A SPECIFIC TYPE OF ACE
 ATR_C_FNDACLTYP = 35
 #  DELETE ACL LEAVING PROTECTED
 ATR_C_DELETEACL = 36
@@ -91,7 +100,7 @@
 ATR_C_FNDACLTYP = 35
 #  DELETE ACL LEAVING PROTECTED
 ATR_C_DELETEACL = 36
-#  READ THE ENTIRE ACL 
+#  READ THE ENTIRE ACL
 ATR_C_READACL = 37
 #  RETURN THE LENGTH OF THE ACL
 ATR_C_ACLLENGTH = 38
@@ -99,7 +108,7 @@
 ATR_C_READACE = 39
 #  MODIFY RESERVED AREA
 ATR_C_RESERVED = 40
-#  HIGHWATER MARK (USER READ ONLY)    
+#  HIGHWATER MARK (USER READ ONLY)
 ATR_C_HIGHWATER = 41
 #  *** AVAILABLE CODE
 ATR_C_DUMMY_0 = 42
@@ -122,5 +131,5 @@
 ATR_C_GRANT_ACE = 50
 #  Increment ACE number
 ATR_C_NEXT_ACE = 51
-#  Delete the entire ACL 
+#  Delete the entire ACL
 ATR_C_DELETE_ALL = 52
@@ -126,8 +135,8 @@
 ATR_C_DELETE_ALL = 52
-#  Alter backup info in RMS journaling ACEs	
+#  Alter backup info in RMS journaling ACEs
 ATR_C_BACKUP_DONE = 53
 #  ISO 9660 Descriptors
 #  ISO 9660 Backup Date
 ATR_C_EFFDATE = 54
 #  ISO 9660 Recorded Date
 ATR_C_RCDDATE = 55
@@ -128,8 +137,8 @@
 ATR_C_BACKUP_DONE = 53
 #  ISO 9660 Descriptors
 #  ISO 9660 Backup Date
 ATR_C_EFFDATE = 54
 #  ISO 9660 Recorded Date
 ATR_C_RCDDATE = 55
-#  Volume Descriptor	
+#  Volume Descriptor
 ATR_C_VD = 56
@@ -135,3 +144,3 @@
 ATR_C_VD = 56
-#  Primary Volume Descriptor	
+#  Primary Volume Descriptor
 ATR_C_PVD = 57
@@ -137,3 +146,3 @@
 ATR_C_PVD = 57
-#  Supplementary Volume Descriptor	
+#  Supplementary Volume Descriptor
 ATR_C_SVD = 58
@@ -139,3 +148,3 @@
 ATR_C_SVD = 58
-#  Volume Partition Descriptor	
+#  Volume Partition Descriptor
 ATR_C_VPD = 59
@@ -141,3 +150,3 @@
 ATR_C_VPD = 59
-#  Volume Descriptor Set Terminator	
+#  Volume Descriptor Set Terminator
 ATR_C_VDST = 60
@@ -143,3 +152,3 @@
 ATR_C_VDST = 60
-#  Boot Record	
+#  Boot Record
 ATR_C_BOOT = 61
@@ -145,3 +154,3 @@
 ATR_C_BOOT = 61
-#  Path Table Record	
+#  Path Table Record
 ATR_C_PTR = 62
@@ -147,3 +156,3 @@
 ATR_C_PTR = 62
-#  Directory Record	
+#  Directory Record
 ATR_C_DIR = 63
@@ -149,5 +158,5 @@
 ATR_C_DIR = 63
-#  Extended Attribute Record	
+#  Extended Attribute Record
 ATR_C_XAR = 64
 #  ISO 9660 Descriptors Fields
 #  Volume Identifier
@@ -160,5 +169,5 @@
 ATR_C_VOLUME_SET_ID = 68
 #  Copyright File Identifier
 ATR_C_COPYRIGHT_FID = 69
-#  Abstract File Identifier 
+#  Abstract File Identifier
 ATR_C_ABSTRACT_FID = 70
@@ -164,5 +173,5 @@
 ATR_C_ABSTRACT_FID = 70
-#  Bibliographic File Identifier 
+#  Bibliographic File Identifier
 ATR_C_BIBLIOGRAPHIC_FID = 71
 #  Cache sequence number
 ATR_C_CACHE_SEQ = 72
@@ -195,7 +204,7 @@
 ATR_C_SYMLINK = 85
 #  All new attributes should be
 #   added here before MAX_PLUS1
-#  Maximum code plus one 
+#  Maximum code plus one
 ATR_C_MAX_PLUS1 = 86
 #
 ATR_C_MAX_CODE = 85
@@ -208,6 +217,6 @@
 ATR_C_CACHE_POLICY_WRITEBACK = 2
 #
 ATR_C_CACHE_POLICY_DEFAULT = 3
-#  ATTRIBUTE MAXIMUM LENGTHS 
-#  4 BYTE USER FILE CHARACTERISTICS 
+#  ATTRIBUTE MAXIMUM LENGTHS
+#  4 BYTE USER FILE CHARACTERISTICS
 ATR_S_UCHAR = 4
@@ -213,3 +222,3 @@
 ATR_S_UCHAR = 4
-#  32 BYTES RECORD ATTRIBUTES 
+#  32 BYTES RECORD ATTRIBUTES
 ATR_S_RECATTR = 32
@@ -215,3 +224,3 @@
 ATR_S_RECATTR = 32
-#  6 BYTE RAD-50 FILE NAME 
+#  6 BYTE RAD-50 FILE NAME
 ATR_S_FILNAM = 6
@@ -217,3 +226,3 @@
 ATR_S_FILNAM = 6
-#  2 BYTE RAD-50 FILE TYPE 
+#  2 BYTE RAD-50 FILE TYPE
 ATR_S_FILTYP = 2
@@ -219,3 +228,3 @@
 ATR_S_FILTYP = 2
-#  2 BYTE BINARY FILE VERSION 
+#  2 BYTE BINARY FILE VERSION
 ATR_S_FILVER = 2
@@ -221,3 +230,3 @@
 ATR_S_FILVER = 2
-#  7 BYTE ASCII EXPIRATION DATE 
+#  7 BYTE ASCII EXPIRATION DATE
 ATR_S_EXPDAT = 7
@@ -223,3 +232,3 @@
 ATR_S_EXPDAT = 7
-#  32 BYTE STATISTICS BLOCK 
+#  32 BYTE STATISTICS BLOCK
 ATR_S_STATBLK = 32
@@ -225,3 +234,3 @@
 ATR_S_STATBLK = 32
-#  512 BYTE FILE HEADER 
+#  512 BYTE FILE HEADER
 ATR_S_HEADER = 512
@@ -227,3 +236,3 @@
 ATR_S_HEADER = 512
-#  MAGTAPE BLOCK SIZE 
+#  MAGTAPE BLOCK SIZE
 ATR_S_BLOCKSIZE = 2
@@ -229,3 +238,3 @@
 ATR_S_BLOCKSIZE = 2
-#  USER FILE LABEL 
+#  USER FILE LABEL
 ATR_S_USERLABEL = 80
@@ -231,3 +240,3 @@
 ATR_S_USERLABEL = 80
-#  REVISION COUNT THRU EXP DATE IN ASCII 
+#  REVISION COUNT THRU EXP DATE IN ASCII
 ATR_S_ASCDATES = 35
@@ -233,3 +242,3 @@
 ATR_S_ASCDATES = 35
-#  COMPATIBILITY MODE ALLOCATION DATA 
+#  COMPATIBILITY MODE ALLOCATION DATA
 ATR_S_ALCONTROL = 14
@@ -235,5 +244,5 @@
 ATR_S_ALCONTROL = 14
-#  END OF MAGTAPE LABEL PROCESSING AND SUPPLY AST CONTROL BLOCK 
+#  END OF MAGTAPE LABEL PROCESSING AND SUPPLY AST CONTROL BLOCK
 ATR_S_ENDLBLAST = 4
 #  FILE NAME, TYPE & VERSION
 ATR_S_ASCNAME = 252
@@ -237,5 +246,5 @@
 ATR_S_ENDLBLAST = 4
 #  FILE NAME, TYPE & VERSION
 ATR_S_ASCNAME = 252
-#  64 BIT CREATION DATE 
+#  64 BIT CREATION DATE
 ATR_S_CREDATE = 8
@@ -241,3 +250,3 @@
 ATR_S_CREDATE = 8
-#  64 BIT REVISION DATE 
+#  64 BIT REVISION DATE
 ATR_S_REVDATE = 8
@@ -243,3 +252,3 @@
 ATR_S_REVDATE = 8
-#  64 BIT EXPIRATION DATE 
+#  64 BIT EXPIRATION DATE
 ATR_S_EXPDATE = 8
@@ -245,3 +254,3 @@
 ATR_S_EXPDATE = 8
-#  64 BIT BACKUP DATE 
+#  64 BIT BACKUP DATE
 ATR_S_BAKDATE = 8
@@ -247,3 +256,3 @@
 ATR_S_BAKDATE = 8
-#  4 BYTE FILE OWNER UIC 
+#  4 BYTE FILE OWNER UIC
 ATR_S_UIC = 4
@@ -249,3 +258,3 @@
 ATR_S_UIC = 4
-#  2 BYTE FILE PROTECTION 
+#  2 BYTE FILE PROTECTION
 ATR_S_FPRO = 2
@@ -251,3 +260,3 @@
 ATR_S_FPRO = 2
-#  2 BYTE RECORD PROTECTION 
+#  2 BYTE RECORD PROTECTION
 ATR_S_RPRO = 2
@@ -253,3 +262,3 @@
 ATR_S_RPRO = 2
-#  1 BYTE FILE ACCESS LEVEL 
+#  1 BYTE FILE ACCESS LEVEL
 ATR_S_ACLEVEL = 1
@@ -255,3 +264,3 @@
 ATR_S_ACLEVEL = 1
-#  FILE SECURITY MASK AND LIMIT 
+#  FILE SECURITY MASK AND LIMIT
 ATR_S_SEMASK = 8
@@ -257,3 +266,3 @@
 ATR_S_SEMASK = 8
-#  READ ONLY UIC 
+#  READ ONLY UIC
 ATR_S_UIC_RO = 4
@@ -259,3 +268,3 @@
 ATR_S_UIC_RO = 4
-#  DIRECTORY UPDATE SEQUENCE COUNT 
+#  DIRECTORY UPDATE SEQUENCE COUNT
 ATR_S_DIRSEQ = 2
@@ -261,3 +270,3 @@
 ATR_S_DIRSEQ = 2
-#  FILE BACK LINK POINTER 
+#  FILE BACK LINK POINTER
 ATR_S_BACKLINK = 6
@@ -263,3 +272,3 @@
 ATR_S_BACKLINK = 6
-#  JOURNAL CONTROL FLAGS 
+#  JOURNAL CONTROL FLAGS
 ATR_S_JOURNAL = 1
@@ -265,4 +274,4 @@
 ATR_S_JOURNAL = 1
-#  ANSI TAPE HEADER 1 ACCESSIBILITY 
+#  ANSI TAPE HEADER 1 ACCESSIBILITY
 ATR_S_HDR1_ACC = 1
 #   CHARACTER
@@ -267,4 +276,4 @@
 ATR_S_HDR1_ACC = 1
 #   CHARACTER
-#  ADD AN ACCESS CONTROL ENTRY 
+#  ADD AN ACCESS CONTROL ENTRY
 ATR_S_ADDACLENT = 255
@@ -270,3 +279,3 @@
 ATR_S_ADDACLENT = 255
-#  REMOVE AN ACCESS CONTROL ENTRY 
+#  REMOVE AN ACCESS CONTROL ENTRY
 ATR_S_DELACLENT = 255
@@ -272,3 +281,3 @@
 ATR_S_DELACLENT = 255
-#  MODIFY AN ACL ENTRY 
+#  MODIFY AN ACL ENTRY
 ATR_S_MODACLENT = 255
@@ -274,3 +283,3 @@
 ATR_S_MODACLENT = 255
-#  LOCATE AN ACL ENTRY 
+#  LOCATE AN ACL ENTRY
 ATR_S_FNDACLENT = 255
@@ -276,3 +285,3 @@
 ATR_S_FNDACLENT = 255
-#  FIND A SPECIFIC TYPE OF ACE 
+#  FIND A SPECIFIC TYPE OF ACE
 ATR_S_FNDACLTYP = 255
@@ -278,5 +287,5 @@
 ATR_S_FNDACLTYP = 255
-#  FIND A SPECIFIC TYPE OF ACE 
+#  FIND A SPECIFIC TYPE OF ACE
 ATR_S_FNDACETYP = 255
 #  DELETE ACL LEAVING PROTECTED
 ATR_S_DELETEACL = 255
@@ -280,7 +289,7 @@
 ATR_S_FNDACETYP = 255
 #  DELETE ACL LEAVING PROTECTED
 ATR_S_DELETEACL = 255
-#  READ THE ENTIRE ACL 
+#  READ THE ENTIRE ACL
 ATR_S_READACL = 512
 #  RETURN THE LENGTH OF THE ACL
 ATR_S_ACLLENGTH = 4
@@ -288,7 +297,7 @@
 ATR_S_READACE = 255
 #  MODIFY RESERVED AREA
 ATR_S_RESERVED = 380
-#  FILE HIGH WATER MARK (USER READ ONLY)    
+#  FILE HIGH WATER MARK (USER READ ONLY)
 ATR_S_HIGHWATER = 4
 #  *** AVAILABLE CODE
 ATR_S_DUMMY_0 = 4
@@ -310,10 +319,10 @@
 ATR_S_GRANT_ACE = 255
 #  Increment ACE number
 ATR_S_NEXT_ACE = 4
-#  Delete the entire ACL 
+#  Delete the entire ACL
 ATR_S_DELETE_ALL = 255
 #  Alter backup info in RMS journaling ACEs
 ATR_S_BACKUP_DONE = 1
 #  ISO 9660 Descriptors
 #  64 BIT EFFECTIVE DATE
 ATR_S_EFFDATE = 8
@@ -314,8 +323,8 @@
 ATR_S_DELETE_ALL = 255
 #  Alter backup info in RMS journaling ACEs
 ATR_S_BACKUP_DONE = 1
 #  ISO 9660 Descriptors
 #  64 BIT EFFECTIVE DATE
 ATR_S_EFFDATE = 8
-#  64 BIT RECORDED DATE 
+#  64 BIT RECORDED DATE
 ATR_S_RCDDATE = 8
@@ -321,3 +330,3 @@
 ATR_S_RCDDATE = 8
-#  Volume Descriptor	
+#  Volume Descriptor
 ATR_S_VD = 7
@@ -323,3 +332,3 @@
 ATR_S_VD = 7
-#  Primary Volume Descriptor	
+#  Primary Volume Descriptor
 ATR_S_PVD = 1395
@@ -325,3 +334,3 @@
 ATR_S_PVD = 1395
-#  Supplementary Volume Descriptor	
+#  Supplementary Volume Descriptor
 ATR_S_SVD = 1395
@@ -327,3 +336,3 @@
 ATR_S_SVD = 1395
-#  Volume Partition Descriptor	
+#  Volume Partition Descriptor
 ATR_S_VPD = 88
@@ -329,3 +338,3 @@
 ATR_S_VPD = 88
-#  Volume Descriptor Set Terminator	
+#  Volume Descriptor Set Terminator
 ATR_S_VDST = 7
@@ -331,3 +340,3 @@
 ATR_S_VDST = 7
-#  Boot Record	
+#  Boot Record
 ATR_S_BOOT = 71
@@ -333,3 +342,3 @@
 ATR_S_BOOT = 71
-#  Path Table Record	
+#  Path Table Record
 ATR_S_PTR = 45
@@ -335,3 +344,3 @@
 ATR_S_PTR = 45
-#  Directory Record	
+#  Directory Record
 ATR_S_DIR = 512
@@ -337,5 +346,5 @@
 ATR_S_DIR = 512
-#  Extended Attribute Record	
+#  Extended Attribute Record
 ATR_S_XAR = 512
 #  ISO 9660 Descriptors Fields
 #  Volume Identifier
@@ -348,5 +357,5 @@
 ATR_S_VOLUME_SET_ID = 128
 #  Copyright File Identifier
 ATR_S_COPYRIGHT_FID = 37
-#  Abstract File Identifier 
+#  Abstract File Identifier
 ATR_S_ABSTRACT_FID = 37
@@ -352,5 +361,5 @@
 ATR_S_ABSTRACT_FID = 37
-#  Bibliographic File Identifier 
+#  Bibliographic File Identifier
 ATR_S_BIBLIOGRAPHIC_FID = 37
 #  Cache sequence number
 ATR_S_CACHE_SEQ = 8
@@ -382,7 +391,7 @@
 ATR_S_SYMLINK = 1024
 #
 ATR_S_ATRDEF = 8
-#  ATTRIBUTE CODES 
+#  ATTRIBUTE CODES
 #  Define fields and constant values for ATR$_CACHING_OPTIONS longword.
 #  These must match [STARLET]FIBDEF.SDL exactly
 #
@@ -425,3 +434,32 @@
 ATR_C_ODS64 = 64
 #
 ATR_S_ATR_FILESYSTEM_INFO_FIELDS = 2
+
+
+class ATR(Structure):
+    _fields_ = [
+        ("atr_w_size", c_ushort),  # Length of buffer in bytes
+        ("atr_w_type", c_ushort),  # Item code value
+        ("atr_l_addr", c_void_p),  # Buffer address
+    ]
+
+
+def set_atr_item(item, size=None, type=0, buffer=None):
+    if (
+        size is None
+        and buffer is not None
+        and isinstance(buffer, c_char * sizeof(buffer))
+    ):
+        size = sizeof(buffer) - 1
+    if size is None:
+        size = 0
+    item.atr_w_size = size
+    item.atr_w_type = type
+    if buffer is not None:
+        buffer = cast(buffer, c_void_p)
+    item.atr_l_addr = buffer
+
+
+def get_atr_string_item(item):
+    retlen = item.atr_w_size + 1
+    return cast(item.atr_l_addr, POINTER(c_char * (retlen))).contents
diff --git a/python/local/ovms_module/ovms/fatdef/__init__.py b/python/local/ovms_module/ovms/fatdef/__init__.py
index 91c3454e812412de41b668f72f91f5989f64521d_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvZmF0ZGVmL19faW5pdF9fLnB5..5d7d55d0d9c3e4f7f8cdd5799031e1c126017f89_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvZmF0ZGVmL19faW5pdF9fLnB5 100644
--- a/python/local/ovms_module/ovms/fatdef/__init__.py
+++ b/python/local/ovms_module/ovms/fatdef/__init__.py
@@ -1,8 +1,6 @@
-'vms Extension Series for Python'
-__version__ = '0.3'
 """vms Extension Series for Python
     
 Copyright (c) 2002-2020, Jean-Francois Pieronne jf.pieronne@laposte.net
 See the documentation for further information on copyrights,
 or contact the author. All Rights Reserved.
 """
@@ -3,8 +1,16 @@
 """vms Extension Series for Python
     
 Copyright (c) 2002-2020, Jean-Francois Pieronne jf.pieronne@laposte.net
 See the documentation for further information on copyrights,
 or contact the author. All Rights Reserved.
 """
+from ctypes import (
+    Structure,
+    c_ushort,
+    c_int,
+    c_ulong,
+    c_ubyte,
+)
+
 # vms Extension Series version number
 # (note that subpackages have their own version number)
@@ -9,6 +15,6 @@
 # vms Extension Series version number
 # (note that subpackages have their own version number)
-__version__ = '0.3'
+__version__ = "0.3"
 
 # Copyright notice string
 __copyright__ = """
@@ -17,5 +23,5 @@
     or contact the author. All Rights Reserved.
 
 """
-#*** MODULE $FATDEF ***
+# *** MODULE $FATDEF ***
 # +
@@ -21,3 +27,3 @@
 # +
-# 
+#
 #  Record attributes area as used by FCS and RMS.
@@ -23,3 +29,3 @@
 #  Record attributes area as used by FCS and RMS.
-# 
+#
 # -
@@ -25,3 +31,3 @@
 # -
-#  undefined record type 
+#  undefined record type
 FAT_C_UNDEFINED = 0
@@ -27,3 +33,3 @@
 FAT_C_UNDEFINED = 0
-#  fixed record type 
+#  fixed record type
 FAT_C_FIXED = 1
@@ -29,3 +35,3 @@
 FAT_C_FIXED = 1
-#  variable length 
+#  variable length
 FAT_C_VARIABLE = 2
@@ -31,3 +37,3 @@
 FAT_C_VARIABLE = 2
-#  variable + fixed control 
+#  variable + fixed control
 FAT_C_VFC = 3
@@ -33,3 +39,3 @@
 FAT_C_VFC = 3
-#  RMS-11 (DEC traditional) stream format 
+#  RMS-11 (DEC traditional) stream format
 FAT_C_STREAM = 4
@@ -35,3 +41,3 @@
 FAT_C_STREAM = 4
-#  LF-terminated stream format 
+#  LF-terminated stream format
 FAT_C_STREAMLF = 5
@@ -37,3 +43,3 @@
 FAT_C_STREAMLF = 5
-#  CR-terminated stream format 
+#  CR-terminated stream format
 FAT_C_STREAMCR = 6
@@ -39,3 +45,3 @@
 FAT_C_STREAMCR = 6
-#  sequential organization 
+#  sequential organization
 FAT_C_SEQUENTIAL = 0
@@ -41,3 +47,3 @@
 FAT_C_SEQUENTIAL = 0
-#  relative organization 
+#  relative organization
 FAT_C_RELATIVE = 1
@@ -43,3 +49,3 @@
 FAT_C_RELATIVE = 1
-#  indexed organization 
+#  indexed organization
 FAT_C_INDEXED = 2
@@ -45,5 +51,5 @@
 FAT_C_INDEXED = 2
-#  direct organization 
+#  direct organization
 FAT_C_DIRECT = 3
 #  Special file organization
 FAT_C_SPECIAL = 4
@@ -79,5 +85,5 @@
 FAT_S_FATDEF = 32
 #
 FAT_S_FAT = 32
-#  record type subfield 
+#  record type subfield
 FAT_S_RTYPE = 4
@@ -83,6 +89,6 @@
 FAT_S_RTYPE = 4
-#  file organization 
+#  file organization
 FAT_S_FILEORG = 4
 #   (record attributes are
 #   meaningless for special files)
 #    any values in GBC16 or GBC32
@@ -85,4 +91,46 @@
 FAT_S_FILEORG = 4
 #   (record attributes are
 #   meaningless for special files)
 #    any values in GBC16 or GBC32
+
+
+class FAT(Structure):
+    _fields_ = [
+        ("fat_b_rtype", c_ushort),  # record type
+        ("fat_v_fortrancc", c_int, 1),  # fat$v_fortrancc
+        ("fat_v_impliedcc", c_int, 1),  # implied carriage control
+        ("fat_v_fat$v_printcc", c_int, 1),  # print file carriage control
+        ("fat_v_nospan", c_int, 1),  # print file carriage control
+        ("fat_v_msbrcw", c_int, 1),  # Format of RCW (0=LSB, 1=MSB)
+        ("fat_v_fill_1", c_int, 3),  # MBZ (or should be zero)
+        ("fat_w_rsize", c_ushort),  # MBZ (or should be zero)
+        ("fat_l_hiblk", c_ulong),  # highest allocated VBN
+        ("fat_l_efblk", c_ulong),  #  end of file VBN
+        ("fat_w_ffbyte", c_ushort),  # first free byte in EFBLK
+        ("fat_b_bktsize", c_ubyte),  # bucket size in blocks
+        (
+            "fat_b_vfcsize",
+            c_ubyte,
+        ),  # size in bytes of fixed length control for VFC records
+        ("fat_w_maxrec", c_ushort),  # maximum record size in bytes
+        ("fat_w_defext", c_ushort),  # default extend quantity
+        ("fat_w_gbc", c_ushort),  # global buffer count (original word)
+        (
+            "fat_v_gbc_percent",
+            c_int,
+            1,
+        ),  # Interpret value in GBC32 as percent instead of count
+        (
+            "fat_v_gbc_default",
+            c_int,
+            1,
+        ),  # RMS should set default for GBC at runtime and ignore
+        ("fat___fill_4", c_int, 6),  # Reserved for future use
+        (
+            "fat___fill_2",
+            c_ubyte,
+        ),  # reserved for future use (possible flags word union)
+        ("fat_l_gbc32", c_ulong),  # longword implementation of global buffer count
+        ("fat___fill_3", c_ushort),  # spare space documented as unused in I/O REF
+        ("fat_w_versions", c_ushort),  # default version limit for directory file
+    ]
diff --git a/python/local/ovms_module/ovms/iledef/__init__.py b/python/local/ovms_module/ovms/iledef/__init__.py
index 91c3454e812412de41b668f72f91f5989f64521d_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvaWxlZGVmL19faW5pdF9fLnB5..5d7d55d0d9c3e4f7f8cdd5799031e1c126017f89_cHl0aG9uL2xvY2FsL292bXNfbW9kdWxlL292bXMvaWxlZGVmL19faW5pdF9fLnB5 100755
--- a/python/local/ovms_module/ovms/iledef/__init__.py
+++ b/python/local/ovms_module/ovms/iledef/__init__.py
@@ -1,5 +1,16 @@
 """vms Extension Series for Python"""
-__version__ = '0.3'
+from ctypes import (
+    Structure,
+    Union,
+    c_ushort,
+    c_ulong,
+    c_void_p,
+    c_char,
+    POINTER,
+    cast,
+    sizeof,
+    pointer,
+)
 """vms Extension Series for Python
     
 Copyright (c) 2002-2020, Jean-Francois Pieronne jf.pieronne@laposte.net
@@ -67,20 +78,6 @@
 #  Length of ILEA
 ILEA_64_C_LENGTH = 24
 
-from ctypes import (
-    Structure,
-    Union,
-    c_ushort,
-    c_ulong,
-    c_uint32,
-    c_void_p,
-    c_char,
-    POINTER,
-    cast,
-    sizeof,
-    pointer,
-)
-
 
 class RETLEN(Union):
     _fields_ = [('ushort', POINTER(c_ushort)), ('ulong', POINTER(c_ulong))]