GDSX Manual
DCCBDECS and ULHDECSE Listings
Extended General Device Support (GDSX) Manual–134303
C-9
DCCBDECS Listing
! that it can be CHECKOPENed automatically by the GDS. In addition, the FCB !
! holds the last file management error occuring on the file as well as the !
! list header for the chain of IOCBs associated with the file. Also included !
! in the FCB is an OWNER field. FCB.FLAGS.<0> determines whether this file !
! is opened PRIVATE (address of NUMBER parameter to ^OPEN in swappable !
! stack or in upper memory) or PUBLIC (NUMBER parameter in GLOBAL storage). !
! For public files, the OWNER field of the FCB contains the address of the !
! NUMBER parameter to ^OPEN. For PRIVATE files, the OWNER contains the !
! address of the TCB for the task opening the file. Files opened in PRIVATE !
! mode are automatically closed when the owning task is stopped. !
!------------------------------------------------------------------------------!
Struct FCB^Template (*);
Begin
Int File; !File #
Int Error; !Last file management error #
Int(32) Iocbh, !List header for iocbs
Iocbt; ! " tailer "
!**************** Checkpointed part of the FCB ***************************
Int Flags; !Pre-Exceed. For ^OPEN
Int Access; !Access Mode \
Int Exclusion; !Exclusion Mode > replaces flags
Int Nowait; !Nowait Depth / variable
Int Sync; !Sync depth
Int(32) Lhaddr; !Recipient's TCB address (ITC)
Int(32) Owner; !if private file -> TCB address
!if public file -> Address of variable
! where file # stored
Int Options; !Open Options
Int Blockbufid; !Seq Block Buffer id
Int Blockbuflen; !Seq Block Buffer len
Int Public; !if true, public file
Int Type[0:4]; !Device Type/subtype/etc. Now 5 words
End;
!------------------------------------------------------------------------------!
! For each of our openers, a Requester Control Block (RCB) is allocated. !
!------------------------------------------------------------------------------!
Struct Rcb^Template (*);
Begin !Non-Checkpointed Part
Int(32) Link[0:1]; !List Links for available RCBs or
!list of RCBs corresponding to
!same hash bucket
Int(32) Iocbh; !List Header for IOCBs from this
Int(32) Iocbt; !Requester
!**************** Checkpointed part of the RCB ***************************
Int(32) Tcbaddr; !Address of TCB for This requester
Int Pri^Process^Handle[0:9]; !Process Handle for primary
Int P^Phandle[0:9]= Pri^Process^Handle;
Int Processid[0:3]= P^Phandle;!Processid Pre^D00 was [0:2]
Int Bu^Process^Handle[0:9]; !Process Handle for backup
Int B^Phandle[0:9]= Bu^Process^Handle;
Int Pfile; !Primary Requester's file number
Int Tcp^File = Pfile; !TCPs internal file # for this terminal
Int Bfile; !Backup Requester's file number
Int Flags; !Requester's open options
Int Syncdepth; !Opener's <syncdepth> param for open
Int Owner; !PROCESSACCESSID of Opener/Requester
Int Access^Mode; !Requester's access mode
Int Exclusion^Mode; !Requester's exclusion mode
Int Options; !Requester's open options
Int Nowaitdepth; !Requester's nowaitdepth
Int Len; !Length of Process Descriptor
Int Desc[0:15]; !32 bytes! !Process Descriptor (may be unnamed)
End;
Define P^Pid = Processid[3]#,
B^Pid = Processid[4]#;
Define Ppid = Processid[3]#,
Bpid = Processid[4]#;
?Section Common^Data
! The TABLE pointers must be initialized to point to the upper memory tables
Int .EXT Linetbl (Line^Template), !GDSX Line table for EXT usage
.EXT LinetblX (Line^Template) = Linetbl;