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;










