''' =========================================================== title : logical_name_demo_100.py platform: python-3.10.0 on VSI OpenVMS Version 8.4-1H1 I64 author : Neil Rieck created : 2023-07-13 edit : 2023-07-14 notes : 1) demos how to read OpenVMS logical names 2) also shows how to reference STARLET definitions 3) this was a quick hack employing a few shortcuts usage : $ python logical_name_demo_100.py =========================================================== ''' from vms import dscdef as DSC # dscdef is from STARLET from vms import lnmdef as LNM # lnmdef is from STARLET from vms import ssdef as SS # ssdef is from STARLET from vms import ile3 as ILE3 # item list definitions from vms import sys as SYS # system calls via python wrapper import _sys as VMS # native system calls (natural parameter order) from vms.sys import trnlnm # this is a third way from vms.lib import get_hostname # something else def breakout(title, obj): print(title) for x in obj: print("x: ", x) def main(): hn = get_hostname() print("hostname: ", hn[1]) print("debug? (0/1, default=0) ", end="") try: debug = input() if type(debug) != int: debug = int(debug) except Exception: debug = 0 log_table = "LNM$SYSTEM_TABLE" log_name = "SYS$DISK" log_value = "" print(f"TEST> table: {log_table} logical name: {log_name}") # for test in range(1, 3): print(40*"=", f" test #{test}") itmlst = ILE3.ile3list() itmlst.append(LNM.LNM__STRING, DSC.DSC_K_DTYPE_T, 255) # should use 255 here if 1 == 0: # enable for 4 more items itmlst.append(LNM.LNM__LENGTH, DSC.DSC_K_DTYPE_LU) # bytes returned itmlst.append(LNM.LNM__INDEX, DSC.DSC_K_DTYPE_LU) # index itmlst.append(LNM.LNM__ATTRIBUTES, DSC.DSC_K_DTYPE_LU) # created attributes itmlst.append(LNM.LNM__TABLE, DSC.DSC_K_DTYPE_T, 32) # table name if debug > 0: breakout("itmlist before the call", itmlst) if test == 1: rc = SYS.trnlnm(None, log_table, log_name, None, itmlst) # STARLET parameter order else: # # https://wiki.vmssoftware.com/VMS-Specific_Python_Modules # trnlnm(attr:int, tabnam:str, lognam:str, acmode:int, il:object)->int # rc = VMS.trnlnm(log_name, log_table, itmlst) # wrapper parameter order print("rc :", rc) if debug > 0: breakout("itmlist after the call", itmlst) if rc == SS.SS__NORMAL: print("-i-the call to trnlnm was successful") log_value = itmlst[0] print("log_value: ", log_value) else: print("-w-the call to trnlnm failed") # -------------------------------------------- if __name__ == "__main__": main() # this is the end
Note: it might make more sense to rename this file "vms_extras.py" then add more vms specific functions to it.
''' =========================================================== title : logical_name.py platform: python-3.10.0 on VSI OpenVMS Version 8.4-1H1 I64 author : Neil Rieck created : 2024-02-01 (from logical_name_demo_100.py) edit : 2024-02-01 notes : 1) demos how to read OpenVMS logical names 2) also shows how to reference STARLET definitions =========================================================== ''' from vms import dscdef as DSC # dscdef is from STARLET from vms import lnmdef as LNM # lnmdef is from STARLET from vms import ile3 as ILE3 # item list definitions from vms import sys as SYS # system calls via python wrapper def logical_name(log_name="", log_table=""): log_value = "" rc = 0 # VMS-w- try: itmlst = ILE3.ile3list() itmlst.append(LNM.LNM__STRING, DSC.DSC_K_DTYPE_T, 255) rc = SYS.trnlnm(None, log_table, log_name, None, itmlst) # STARLET parameter order if (rc & 7) == 1: log_value = itmlst[0] except Exception: rc = 2 # VMS-e- return rc, log_value # this is the end
''' title : logical_name_how_to_call_100.py author : Neil Rieck created: 2024-02-01 notes : shows how to call the hack library ''' import logical_name as ovms import sys def main(): pgm = sys.argv[0] print(f"\n-i-script: {pgm}") rc = 1 value = "" table = "LNM$SYSTEM_TABLE" name = "SYS$DISK" print(f"-i-data-name: {name} table: {table}") rc, value = ovms.logical_name(name, table) print(f"rc: {rc} value: {value}") rc, value = ovms.logical_name("MARIA_PASSWORD", "LNM$SYSTEM_TABLE" ) print(f"rc: {rc} value: {value}") print("-i-normal exit") if __name__ == "__main__": main() # this is the end