Enscribe Programmer's Guide
Access Examples
These examples show how to access queue files. For brevity, the timestamps shown in the examples
have been truncated to 4-byte numeric strings (for example, “1001”). If the key used in the example
is longer than eight bytes, the key is displayed as “<user-key><timestamp>”for example, “AB1001”).
Example 1: Opening a Queue File
This TAL example opens a queue file:
INT QF^Num; ! Queue File number
STRING .QF^Name[0:33] := "$spool.lkp.qfile"; ! File name
LITERAL QF^NameLength = 16; ! Length in bytes of file name
INT Error; ! Returned error code
?SOURCE $SYSTEM.SYSTEM.EXTDECS0 (FILE_OPEN_)
!
! Open the Queue File
!Key^Len := Key^Length;
Error := FILE_OPEN_(
QF^Name:QF^NameLength, ! filename:length
QF^Num, ! filenum
0, ! access = read/write (can be > 0)
0, ! exclusion = shared (can be > 0)
0, ! nowait-depth = 0 (can be > 0)
0); ! sync-depth (must be 0 if
! READUPDATELOCK is used)
Example 2: Enqueuing a Record
This example shows a TAL procedure that inserts a record into a queue file:
INT QF^Num; ! Queue File number
STRING .QF^Name[0:33] := "$spool.lkp.qfile"; ! File name
LITERAL QF^NameLength = 16; ! Length in bytes of file name
INT QF^NameLen;
LITERAL Key^Length = 8; ! Key length (must be >= 8)
INT Key^Len;
STRING .Key[0:Key^Length - 8];! Application key
LITERAL Rec^Len = 100; ! Record length
INT Byte^Count; ! Number of bytes read/written
INT Error; ! Returned error code
FIXED Trans^Tag; ! Transaction ID
STRING .Buffer[0:Rec^Len - 1]; ! Record buffer
STRING .Data[0:Rec^Len - Key^Length - 1]; ! Data
?SOURCE $SYSTEM.SYSTEM.EXTDECS0 (WRITE, BEGINTRANSACTION) ?SOURCE
$SYSTEM.SYSTEM.EXTDECS0 (ENDTRANSACTION)
! Enqueue a record into a Queue File
INT PROC ENQUEUE(Error);
INT .Error; ! Error code
BEGIN
Buffer[0] ':=' Key FOR Key^Len - 8; ! Move key into front
! of buffer
Buffer[Key^Len] ':=' Data FOR Rec^Len - Key^Len;
! Move data record
! into buffer
Error := BEGINTRANSACTION(Trans^Tag);! Start a transaction
CALL WRITE(QF^Num, Buffer, Rec^Len, Byte^Count);
! Write the record
IF = THEN
Error := 0 ! Clear error code
ELSE
CALL FILEINFO(QF^Num, Error); ! Obtain error code
118 Queue Files