matreadu statement

The matreadu form of the matread statement tests if an item is already locked and locks the item if it is not. The item lock set by matreadu prevents the item from being read using the matreadu statement or updated by other processes while the lock is set.

Syntax

 matreadu array.var from {file.var,} ID.exp{locked statement.block}
 {then|else statement.block}

Description

Warning: Using a matreadu from a program that is called from dictionary item is not recommended.

This statement can optionally be written matread or read. If mat is omitted, a matrix read can be determined by the definition of the variable, array.var. If no dim statement appears, it is automatically treated as a dynamic array.

The locked clause occurs before the then and/or else clauses and specifies the statements to execute if the item is locked when the read is attempted. The locked clause can be used in conjunction with a then or else clause, but not both.

  • If the matreadu form is specified and no locked clause is present, the program pauses (and beeps continuously) at the locked item until it is available.
  • If a locked clause is specified, the statements in the locked clause are executed if the item is already locked by another process or the current process at a different level.
  • system(0) contains the port number that has the item locked. For backwards compatibility, system(0) in the locked clause also returns the port number that has the item locked.

The item lock is only released by a release, delete, or matwrite statement.

Note:
  • If the number of attributes read in the item is less than the dimensioned array size, the trailing array elements are assigned a null string value.
  • If more attributes are present in the item read than elements in the previously dimensioned array, then the last array element contains the extra attributes, with each attribute delimited by an attribute mark. Everything functions properly while the last array element remains unreferenced.
  • Repeated executions of matreadu statements does not implicitly unlock item locks. In this case, using the release statement is recommended.

Example(s)

 dim customer.item(20)
 matreadu customer.item from cust.fv,item-ID locked
    crt item-ID:’ is locked by port ’:system(0)
 end then
    crt ’got it’
 end else
    crt ’not on file’
 end