(LOGO.JPG) Python for OpenVMS

This example demonstrates use of several RMS blocks.

It alters a file's revision date + time (RDT) to the same value of its creation date + time (CDT).

Wildcards are possible. Files, however, must not be in use. Error checks are minimal - it's just a demo ...


#$% RMS_CDT2RDT.PY
# -----

import pyvms, sys
import vms_lib, vms_sys

def cdt2rdt (filespec):
  print "F:", filespec
  fab    = vmsobj_fab()    # create RMS objects
  xabdat = pyvms.vmsobj_xabdat()
  xabrdt = pyvms.vmsobj_xabrdt()

  fab.FNA    = filespec        # filename
  fab.M_UPD  = 1               # FAB$M_UPD in FAB$B_FAC
  fab.XAB    = xabdat          # link XABDAT to FAB
  xabdat.NXT = xabrdt          # next XAB in chain

  status = vms_sys.open (fab)
  if ((status & 1) != 1):
    print "O:", vms_sys.getmsg (status) [0]
    return

  xabrdt.Q_RDT = xabdat.Q_CDT  # update RDT

  status = vms_sys.close (fab)
  if ((status & 1) != 1):
    print "C:", vms_sys.getmsg (status) [0]
    return
# -def cdt2rdt (filespec):

# -----
if (len (sys.argv) != 2):
  print "? parameter 1 must be filespec"
  sys.exit(1)


context = 0
while (1):
  status, status_value, context, resultant_filespec = \
          vms_lib.find_file (sys.argv[1], context, None, None, 0)

  if (resultant_filespec != None):
    cdt2rdt (resultant_filespec)
  else:
    if (status != 99018):    # RMS$_NMF - no more files found
      print status, status_value, context, resultant_filespec
    break                    # abort while() loop

# -----
#%$


Example run:

$! create a test directory
$ set DEFAULT PYTHON_VMS:
$ set DEFAULT [.TMP]
$ create /directory [.CDT2RDT_TEST]
$ copy NLA0: [.CDT2RDT_TEST]TEST_1.DAT
$ copy NLA0: [.CDT2RDT_TEST]TEST_2.DAT
$ copy NLA0: [.CDT2RDT_TEST]TEST_3.DAT
$ wait 00:00:30
$!
$ set FILE /BACKUP [.CDT2RDT_TEST]TEST_%.DAT	! update RDT
$!
$ directory /date=(created,modified) [.CDT2RDT_TEST]*.DAT

Directory PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]

TEST_1.DAT;1     8-JUL-1999 09:56:32.18   8-JUL-1999 09:57:04.37
TEST_2.DAT;1     8-JUL-1999 09:56:32.85   8-JUL-1999 09:57:04.71
TEST_3.DAT;1     8-JUL-1999 09:56:33.49   8-JUL-1999 09:57:04.76

Total of 3 files.
$!
$! lock a file
$ open /read /write F [.CDT2RDT_TEST]TEST_2.DAT
$!
$ python CDT2RDT.PY [.CDT2RDT_TEST]*.DAT
F: PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]TEST_1.DAT;1
F: PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]TEST_2.DAT;1
O: %RMS-E-FLK, file currently locked by another user
F: PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]TEST_3.DAT;1
$!
$ close F
$!
$ directory /date=(created,modified) [.CDT2RDT_TEST]*.DAT

Directory PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]

TEST_1.DAT;1     8-JUL-1999 09:56:32.18   8-JUL-1999 09:56:32.18
TEST_2.DAT;1     8-JUL-1999 09:56:32.85   8-JUL-1999 09:57:41.59
TEST_3.DAT;1     8-JUL-1999 09:56:33.49   8-JUL-1999 09:56:33.49

Total of 3 files.
$!
$!
$ python  CDT2RDT.PY  [.CDT2RDT_TEST]TEST_2.DAT
F: PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]TEST_2.DAT;1
$ directory /date=(created,modified) [.CDT2RDT_TEST]*.DAT

Directory PYTHON_DISK:[PYTHON.PYTHON-1_5_2.VMS.TMP.CDT2RDT_TEST]

TEST_1.DAT;1     8-JUL-1999 09:56:32.18   8-JUL-1999 09:56:32.18
TEST_2.DAT;1     8-JUL-1999 09:56:32.85   8-JUL-1999 09:56:32.85
TEST_3.DAT;1     8-JUL-1999 09:56:33.49   8-JUL-1999 09:56:33.49

Total of 3 files.
$!
$!
$ set PROTECTION=(O:RWED) [.CDT2RDT_TEST]*.DAT;*, []CDT2RDT_TEST.DIR;*
$ delete [.CDT2RDT_TEST]*.DAT;*, []CDT2RDT_TEST.DIR;*
$!


(go to: table of contents, index)

20-FEB-2000 ZE.