# HG changeset patch # User jfp <jf.pieronne@laposte.net> # Date 1715783053 -7200 # Wed May 15 16:24:13 2024 +0200 # Node ID 5d7d55d0d9c3e4f7f8cdd5799031e1c126017f89 # Parent 91c3454e812412de41b668f72f91f5989f64521d Clean code, update atrdef and fatdef diff --git a/python/local/ovms_module/ovms/atrdef/__init__.py b/python/local/ovms_module/ovms/atrdef/__init__.py --- 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,81 +26,81 @@ 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. -# -# 4 BYTE USER FILE CHARACTERISTICS +# +# 4 BYTE USER FILE CHARACTERISTICS ATR_C_UCHAR = 3 -# 32 BYTES RECORD ATTRIBUTES +# 32 BYTES RECORD ATTRIBUTES ATR_C_RECATTR = 4 -# 6 BYTE RAD-50 FILE NAME +# 6 BYTE RAD-50 FILE NAME ATR_C_FILNAM = 5 -# 2 BYTE RAD-50 FILE TYPE +# 2 BYTE RAD-50 FILE TYPE ATR_C_FILTYP = 6 -# 2 BYTE BINARY FILE VERSION +# 2 BYTE BINARY FILE VERSION ATR_C_FILVER = 7 -# 7 BYTE ASCII EXPIRATION DATE +# 7 BYTE ASCII EXPIRATION DATE ATR_C_EXPDAT = 8 -# 32 BYTE STATISTICS BLOCK +# 32 BYTE STATISTICS BLOCK ATR_C_STATBLK = 9 -# 512 BYTE FILE HEADER +# 512 BYTE FILE HEADER ATR_C_HEADER = 10 -# MAGTAPE BLOCK SIZE +# MAGTAPE BLOCK SIZE ATR_C_BLOCKSIZE = 11 -# USER FILE LABEL +# USER FILE LABEL ATR_C_USERLABEL = 12 -# REVISION COUNT THRU EXP DATE IN ASCII +# REVISION COUNT THRU EXP DATE IN ASCII ATR_C_ASCDATES = 13 -# COMPATIBILITY MODE ALLOCATION DATA +# COMPATIBILITY MODE ALLOCATION DATA 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 -# FILE NAME, TYPE & VERSION IN ASCII +# FILE NAME, TYPE & VERSION IN ASCII ATR_C_ASCNAME = 16 -# 64 BIT CREATION DATE +# 64 BIT CREATION DATE ATR_C_CREDATE = 17 -# 64 BIT REVISION DATE +# 64 BIT REVISION DATE ATR_C_REVDATE = 18 -# 64 BIT EXPIRATION DATE +# 64 BIT EXPIRATION DATE ATR_C_EXPDATE = 19 -# 64 BIT BACKUP DATE +# 64 BIT BACKUP DATE ATR_C_BAKDATE = 20 -# 4 BYTE FILE OWNER UIC +# 4 BYTE FILE OWNER UIC ATR_C_UIC = 21 -# 2 BYTE FILE PROTECTION +# 2 BYTE FILE PROTECTION ATR_C_FPRO = 22 -# 2 BYTE RECORD PROTECTION +# 2 BYTE RECORD PROTECTION ATR_C_RPRO = 23 -# 1 BYTE FILE ACCESS LEVEL +# 1 BYTE FILE ACCESS LEVEL ATR_C_ACLEVEL = 24 -# FILE SECURITY MASK AND LIMIT +# FILE SECURITY MASK AND LIMIT ATR_C_SEMASK = 25 -# READ ONLY UIC +# READ ONLY UIC ATR_C_UIC_RO = 26 -# DIRECTORY UPDATE SEQUENCE COUNT +# DIRECTORY UPDATE SEQUENCE COUNT ATR_C_DIRSEQ = 27 -# FILE BACK LINK POINTER +# FILE BACK LINK POINTER ATR_C_BACKLINK = 28 -# JOURNAL CONTROL FLAGS +# JOURNAL CONTROL FLAGS ATR_C_JOURNAL = 29 -# ANSI TAPE HEADER 1 ACCESSIBILITY +# ANSI TAPE HEADER 1 ACCESSIBILITY ATR_C_HDR1_ACC = 30 # CHARACTER -# ADD AN ACCESS CONTROL ENTRY +# ADD AN ACCESS CONTROL ENTRY ATR_C_ADDACLENT = 31 -# REMOVE AN ACCESS CONTROL ENTRY +# REMOVE AN ACCESS CONTROL ENTRY ATR_C_DELACLENT = 32 -# MODIFY AN ACL ENTRY +# MODIFY AN ACL ENTRY ATR_C_MODACLENT = 33 -# LOCATE AN ACL ENTRY +# LOCATE AN ACL ENTRY 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 -# 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,32 +131,32 @@ 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 -# 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 -# Volume Descriptor +# Volume Descriptor ATR_C_VD = 56 -# Primary Volume Descriptor +# Primary Volume Descriptor ATR_C_PVD = 57 -# Supplementary Volume Descriptor +# Supplementary Volume Descriptor ATR_C_SVD = 58 -# Volume Partition Descriptor +# Volume Partition Descriptor ATR_C_VPD = 59 -# Volume Descriptor Set Terminator +# Volume Descriptor Set Terminator ATR_C_VDST = 60 -# Boot Record +# Boot Record ATR_C_BOOT = 61 -# Path Table Record +# Path Table Record ATR_C_PTR = 62 -# Directory Record +# Directory Record ATR_C_DIR = 63 -# Extended Attribute Record +# Extended Attribute Record ATR_C_XAR = 64 # ISO 9660 Descriptors Fields # Volume Identifier @@ -160,9 +169,9 @@ 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 -# 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,79 +217,79 @@ 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 -# 32 BYTES RECORD ATTRIBUTES +# 32 BYTES RECORD ATTRIBUTES ATR_S_RECATTR = 32 -# 6 BYTE RAD-50 FILE NAME +# 6 BYTE RAD-50 FILE NAME ATR_S_FILNAM = 6 -# 2 BYTE RAD-50 FILE TYPE +# 2 BYTE RAD-50 FILE TYPE ATR_S_FILTYP = 2 -# 2 BYTE BINARY FILE VERSION +# 2 BYTE BINARY FILE VERSION ATR_S_FILVER = 2 -# 7 BYTE ASCII EXPIRATION DATE +# 7 BYTE ASCII EXPIRATION DATE ATR_S_EXPDAT = 7 -# 32 BYTE STATISTICS BLOCK +# 32 BYTE STATISTICS BLOCK ATR_S_STATBLK = 32 -# 512 BYTE FILE HEADER +# 512 BYTE FILE HEADER ATR_S_HEADER = 512 -# MAGTAPE BLOCK SIZE +# MAGTAPE BLOCK SIZE ATR_S_BLOCKSIZE = 2 -# USER FILE LABEL +# USER FILE LABEL ATR_S_USERLABEL = 80 -# REVISION COUNT THRU EXP DATE IN ASCII +# REVISION COUNT THRU EXP DATE IN ASCII ATR_S_ASCDATES = 35 -# COMPATIBILITY MODE ALLOCATION DATA +# COMPATIBILITY MODE ALLOCATION DATA 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 -# 64 BIT CREATION DATE +# 64 BIT CREATION DATE ATR_S_CREDATE = 8 -# 64 BIT REVISION DATE +# 64 BIT REVISION DATE ATR_S_REVDATE = 8 -# 64 BIT EXPIRATION DATE +# 64 BIT EXPIRATION DATE ATR_S_EXPDATE = 8 -# 64 BIT BACKUP DATE +# 64 BIT BACKUP DATE ATR_S_BAKDATE = 8 -# 4 BYTE FILE OWNER UIC +# 4 BYTE FILE OWNER UIC ATR_S_UIC = 4 -# 2 BYTE FILE PROTECTION +# 2 BYTE FILE PROTECTION ATR_S_FPRO = 2 -# 2 BYTE RECORD PROTECTION +# 2 BYTE RECORD PROTECTION ATR_S_RPRO = 2 -# 1 BYTE FILE ACCESS LEVEL +# 1 BYTE FILE ACCESS LEVEL ATR_S_ACLEVEL = 1 -# FILE SECURITY MASK AND LIMIT +# FILE SECURITY MASK AND LIMIT ATR_S_SEMASK = 8 -# READ ONLY UIC +# READ ONLY UIC ATR_S_UIC_RO = 4 -# DIRECTORY UPDATE SEQUENCE COUNT +# DIRECTORY UPDATE SEQUENCE COUNT ATR_S_DIRSEQ = 2 -# FILE BACK LINK POINTER +# FILE BACK LINK POINTER ATR_S_BACKLINK = 6 -# JOURNAL CONTROL FLAGS +# JOURNAL CONTROL FLAGS ATR_S_JOURNAL = 1 -# ANSI TAPE HEADER 1 ACCESSIBILITY +# ANSI TAPE HEADER 1 ACCESSIBILITY ATR_S_HDR1_ACC = 1 # CHARACTER -# ADD AN ACCESS CONTROL ENTRY +# ADD AN ACCESS CONTROL ENTRY ATR_S_ADDACLENT = 255 -# REMOVE AN ACCESS CONTROL ENTRY +# REMOVE AN ACCESS CONTROL ENTRY ATR_S_DELACLENT = 255 -# MODIFY AN ACL ENTRY +# MODIFY AN ACL ENTRY ATR_S_MODACLENT = 255 -# LOCATE AN ACL ENTRY +# LOCATE AN ACL ENTRY ATR_S_FNDACLENT = 255 -# FIND A SPECIFIC TYPE OF ACE +# FIND A SPECIFIC TYPE OF ACE 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 -# 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,32 +319,32 @@ 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 -# 64 BIT RECORDED DATE +# 64 BIT RECORDED DATE ATR_S_RCDDATE = 8 -# Volume Descriptor +# Volume Descriptor ATR_S_VD = 7 -# Primary Volume Descriptor +# Primary Volume Descriptor ATR_S_PVD = 1395 -# Supplementary Volume Descriptor +# Supplementary Volume Descriptor ATR_S_SVD = 1395 -# Volume Partition Descriptor +# Volume Partition Descriptor ATR_S_VPD = 88 -# Volume Descriptor Set Terminator +# Volume Descriptor Set Terminator ATR_S_VDST = 7 -# Boot Record +# Boot Record ATR_S_BOOT = 71 -# Path Table Record +# Path Table Record ATR_S_PTR = 45 -# Directory Record +# Directory Record ATR_S_DIR = 512 -# Extended Attribute Record +# Extended Attribute Record ATR_S_XAR = 512 # ISO 9660 Descriptors Fields # Volume Identifier @@ -348,9 +357,9 @@ 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 -# 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 --- a/python/local/ovms_module/ovms/fatdef/__init__.py +++ b/python/local/ovms_module/ovms/fatdef/__init__.py @@ -1,14 +1,20 @@ -'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. """ +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) -__version__ = '0.3' +__version__ = "0.3" # Copyright notice string __copyright__ = """ @@ -17,33 +23,33 @@ or contact the author. All Rights Reserved. """ -#*** MODULE $FATDEF *** +# *** MODULE $FATDEF *** # + -# +# # Record attributes area as used by FCS and RMS. -# +# # - -# undefined record type +# undefined record type FAT_C_UNDEFINED = 0 -# fixed record type +# fixed record type FAT_C_FIXED = 1 -# variable length +# variable length FAT_C_VARIABLE = 2 -# variable + fixed control +# variable + fixed control FAT_C_VFC = 3 -# RMS-11 (DEC traditional) stream format +# RMS-11 (DEC traditional) stream format FAT_C_STREAM = 4 -# LF-terminated stream format +# LF-terminated stream format FAT_C_STREAMLF = 5 -# CR-terminated stream format +# CR-terminated stream format FAT_C_STREAMCR = 6 -# sequential organization +# sequential organization FAT_C_SEQUENTIAL = 0 -# relative organization +# relative organization FAT_C_RELATIVE = 1 -# indexed organization +# indexed organization FAT_C_INDEXED = 2 -# direct organization +# direct organization FAT_C_DIRECT = 3 # Special file organization FAT_C_SPECIAL = 4 @@ -79,10 +85,52 @@ FAT_S_FATDEF = 32 # FAT_S_FAT = 32 -# record type subfield +# record type subfield 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 + + +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 --- 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))]