!TITLE Record Formats
!
! This chapter contains the record formats used by Director. Where
! appropriate, the fields are described.    The record formats are
! given in alphabetical order. There are also the following constants:
!
constinteger  ISEPCH = '@';  conststring (1) ISEP = "@"
constinteger  NSEPCH = ':';  conststring (1) NSEP = ":"

!
!STOP
!<AFDF
      recordformat  c 
AFDF  (string (11)NAME, integer  TSN,
      halfinteger  PGS, DATE, LAST RESTORE,
      byteinteger  S0, S1, COUNT, EEP, PHEAD, TYPE,
      integer  CHAP)
!
! This the format of a file descriptor in archive index
!
      ownrecord (AFDF)arrayformat  c 
AFDSF (1:32768)
!
! This is the format of the record array
!>
!<COMF
!
! This is the Supervisor Communications Record Format, defined in EMAS
! 2900 Supervisor Note 15.
!
      recordformat  c 
CDRF(byteinteger  DAP NO, DAP BLKS, DAP PROCESS, DAP STATE,
      integer  DAP1, DAP INT)
!
      recordformat  c 
COMF(integer  OCPTYPE, IPLDEV, SBLKS, SEPGS,
      NDISCS, DLVNADDR, GPCTABSIZE, GPCA,
      SFCTABSIZE, SFCA, SFCK, DIRSITE,
      DCODEDA, SUPLVN, TOJDAY, DATE0,
      DATE1, DATE2, TIME0, TIME1,
      TIME2, EPAGESIZE, USERS, CATTAD,
      SERVAAD, byteinteger  NSACS, RESV1, SACPORT1, SACPORT0, 
      NOCPS, RESV2, OCPPORT1, OCPPORT0, 
      integer  ITINT,
      CONTYPEA, GPCCONFA, FPCCONFA, SFCCONFA, 
      BLKADDR, RATION, SMACS, TRANS,
      longinteger  KMON, integer  DITADDR, SMACPOS,
      SUPVSN, PSTVA, SECSFRMN, SECSTOCD, 
      SYNC1DEST, SYNC2DEST, ASYNCDEST, MAXPROCS,
      KINSTRS, ELAPHEAD, COMMSRECA, STOREAAD,
      PROCAAD, SFCCTAD, DRUMTAD, TSLICE,
      FEPS, MAXCBT, PERFORMAD,
      record (CDRF)array  CDR(1 : 2),
      integer  LSTL, LSTB, PSTL,
      PSTB, HKEYS, HOOT, SIM,
      CLKX, CLKY, CLKZ, HBIT,
      SLAVEOFF, INHSSR, SDR1, SDR2,
      SDR3, SDR4, SESR, HOFFBIT,
      BLOCKZBIT, BLKSHIFT, BLKSIZE, END)
!
constrecord (COMF)name  COM = X'80000000' + 48 << 18
!>
!<DDTF
!
! The Disc Device Table Format, described in EMAS 2900 Supervisor
! Note 18.
!
      recordformat  c 
DDTF(integer  SER, PTS, PROPADDR, STICK,
      CCA, RQA, LBA, ALA,
      STATE, IW1, CONCOUNT, SENSE1,
      SENSE2, SENSE3, SENSE4, REPSNO,
      halfinteger  SBASE, BASE, integer  ID, DLVN, MNEMONIC,
      string  (6) LAB, byteinteger  MECH)
!
ownbyteintegerarrayformat  DLVNAF(0:99)
!>
!<DIRCOM
! On the IPL disc, the first X'900 pages are not covered by the 'BITMAP'
! this means that as many bits (=288 bytes) may be used for other
! purposes.  All discs have X'140 bits (40 bytes) available. The
! remaining 248 bytes are described by this format. The address of the
! record is given by SYSAD(DIRCOMKEY, -1).
!
constinteger  DIRCOM KEY = 5
constinteger  DIRCOMSIZE = 136
!
      recordformat  c 
DIRCOMF(integer  DIRLOG SEMA, FEP SEMA,
{..8}      string (6)array  DAP USER(0 : 2),
{.20}      integer  SUBSYS  SITE COUNT, string (19)DEFAULT SUBSYS,
{.38}      integer  STUDENT SITE COUNT, string (19)DEFAULT STUDENT,
{.50}      string (6)array  DAP BATCH USER(0 : 1),
{.60}      integerarray  DAP INTEGER(1 : 6))
{.78}
!
!     integer(1) is CLAIM Q LIMIT
!             2     INTER
!             3     LO BATCH 0
!             4     HI BATCH 0
!             5     LO BATCH 1
!             6     HI BATCH 1
!>

!<DISCDATAF
!
      recordformat  c 
DISCDATAF(integer  START, BITSIZE, NNTSTART, NNTSIZE,
      NNTTOP, NNTHASH, INDEXSTART, FILESTART,
      END)
!
! This format is used in the procedure FBASE2 to return a record giving
! addresses and lengths of the various parts of the disc.
!
! START indicates whether an IPL disc or not, value X40 or X800
!
! BITSIZE size of the bitmap, X1000, X2000 or X5000
!
! NNTSTART where the NNT starts
!
! NNTSIZE the size of the name-number table, X1000, X2000 or X4000
!
! NNTTOP the NNT is a record array declared 0:n, this is n: 340, 681 or 1364
!
! NNTHASH the largest prime less than NNTTOP, 331, 677 or 1361
!
! INDEXSTART the total number of pages used for bitmaps and NNTs
!
! FILESTART the number of pages used for bitmaps, NNTs and indexes
!
! END the highest numbered page
!>
!<FDF
!
      recordformat  c 
FDF   (string (11)NAME,
      integer  SD,
      halfinteger  PGS, H0,
      byteinteger  CODES, CODES2, DAYNO, USE,
      OWNP, EEP, PHEAD, ARCH,
      CCT, SSBYTE, S0, S1)
!
! This the format of a file descriptor in an online file index
!
!
!
!
! Note:
!
!    CODES     CODES2
!  1 unava     wrconn
!  2 offer
!  4 temp      oldgen
!  8 vtemp     wsallow
! 16 chersh    comms ???
! 32 privat    disc ???
! 64 violat    stack ???
!128 noarch    dead ???
!
!
constinteger  FDSIZE = 32
                    !
      ownrecord (FDF)arrayformat  c 
FDSF (1:32768)
!>
!<FF
      recordformat  c 
FF    (integer  SDSTART, PDSTART, FDSTART, SEMA,
      RESERVE1, RESERVE2, SEMANO, RESTORES,
      string (6)OWNER, byteinteger  SIZE, string (11)NAME,
      byteinteger  FSYS, FIPHEAD, TEMPFILES, EEP,
      integer  FILES, MAXFILE, MAXKB, CHERFILES,
      CHERKB, TOTKB, TEMPKB, CHKSUM,
      FILES0, FILES1, AFILES, ATOTKB,
      ASEMA,
      byteinteger  ATTRIBUTES, DAY42)
!       only 26 more bytes spare
! PDSTART etc    Add to FINDAD to get addr of array
! FILES Number of usable files, ie not 'oldgens'
!>
!<HH
      recordformat  c 
HF   (string (6)OWNER, byteinteger  MARK,
      integer  SPARE1, MSGSEMA,
      SPARE2, SPARE3, INUTS, IINSTRS,
      byteinteger  ACR, DIRVSN, SIGMON, PASSFAILS,
      IMAX, BMAX, TMAX, STKKB,
      IUSE, BUSE, ISESSM, GPFSYS,
      FSYS, SB0, SB1, TYPE,
      integer  TOP, DWSPK, BWSPK, BINSTRS,
      TRYING, DINSTRS, IPTRNS, BPTRNS,
      IMSECS, BMSECS, NKBIN, NKBOUT,
      MAIL COUNT, CONNECTT, DIRMON, LASTLOGON,
      LAST NON INT START, TELL REJ, DWSPDT, BWSPDT,
      SPARE4, SPARE5, DAPSECS, SI3,
      longinteger  DWSP, BWSP,
      string (6)GPHOLDR,
      string (31)SURNAME, DELIVERY,
      string (18)BATCHSS, BASEFILE, STARTF, TESTSS,
      string (11)LOGFILE, MAIN,
      string (15)DEFAULTLP,
      string (63)DATA,
      string (6)SUPERVISOR,
      string (15)GATEWAY ACCESS ID)
!>
!<Logfile formats
constinteger  TOPLOG = 5
constinteger  TOP FE NO = 7
constinteger  ITP = 0
constinteger  X29 = 1
constinteger  FEP IO BUFF SIZE = 2048;  ! bytes in each control buffer
constinteger  MAXTCPNAME = 15    {TCP-name length}
                                 {ERCC TCP names have max 23 chars).
      recordformat  c 
FEP DETAILF(integer  INPUT STREAM, OUTPUT STREAM,
      IN BUFF DISC ADDR, OUT BUFF DISC ADDR,
      IN BUFF DISC BLK LIM, OUT BUFF DISC BLK LIM,
      IN BUFF CON ADDR, OUT BUFF CON ADDR,
      IN BUFF OFFSET, OUT BUFF OFFSET, IN BUFF LENGTH, OUT BUFF LENGTH,
      INPUT CURSOR, OUTPUT CURSOR)
!
      recordformat  c 
FEPF(record (FEP DETAILF)array  FEP DETAILS(ITP:X29), integer  AVAILABLE)
!
      recordformat  c 
LF(string (11)NAME, integer  FSYS, DISC ADDR, STATE)
!
      recordformat  C 
PROCDATF(string (6)USER, string (MAXTCPNAME)TCPNAME, byteinteger  LOGKEY,
      byteinteger  INVOC, PROTOCOL, NODENO, FSYS,
      integer  LOGSNO,
      byteinteger  SITE, REASON, CONSOLE1, CONSOLE2,
      integer  ID, PROCESS, PREV WARN, SESSEND,
      byteinteger  GETMODE, PREEMPT, BLNK, LINK)
!
      recordformat  c 
LOGF HDF(integer  LOGMAPST,SPARE0,
      byteinteger  FREEHD,LIVEHD,BACKHD,SPARE,
      integer  FES FOUND,
      byteintegerarray  FE USECOUNT(0:TOP FE NO),
      record (LF)array  LOGS(0:TOPLOG),
      record (FEPF)array  FEPS(0:TOP FE NO),
      record (PROCDATF)array  PROCLIST(0:255),
      integer  LEND)
!
      recordformat  c 
TMODEF(halfinteger  FLAGS1, FLAGS2,
{.04}  byteinteger  PROMPTCHAR, ENDCHAR,
{.06}  bytearray  BREAKBIT1(0:3) {%or %halfintegerarray BREAKBIT2(0:1))} ,
{.0A}  byteinteger  PADS, RPTBUF, LINELIMIT, PAGELENG,
{.0E}  byteintegerARRAY  TABVEC(0:7),
{.16}  byteinteger  CR, ESC, DEL, CAN,
{.1A}  byteinteger  FLAGS, INTERNAL STATE, LEADIN1, LEADIN2, XLO, XHI)
{.20}

!>
!<NNF
      recordformat  c 
NNF(string (6)NAME, byteinteger  KB, TAG, MARKER, halfinteger  INDNO)
!>
!<DIROWNF
!
! Format describing Directors 'own' variables
constinteger  TOPCONENT = 95
      recordformat  c 
CTF(string (30)FULL, byteinteger  FSYS, NODISCO, INDEX)
!
      recordformat  c 
DIROWNF(byteintegerarray  CPOINT(0:255),
      record (CTF)array  CONLIST(0 : TOPCONENT),
      string (63)SEMAHOLDER)
!>
!<PARMF
!
! The standard format for system messages
      recordformat  c 
PARMF(integer  DEST, SRCE,
      (integer  P1, P2, P3, P4, P5, P6 or  string (23)S))
!>
!<PDF
      recordformat  c 
PDF  (string (6)NAME, byteinteger  PERM, LINK)
!
constinteger  PDSIZE = 9
!
ownrecord (PDF)arrayformat  PDSF(1:512)
!>
!<SDF
!     %recordformat SDF(13-bit LINK, 19-bit DA)
ownintegerarrayformat  SDSF(1:8191)
!>
!<UINFF
      recordformat  c 
UINFF (string (6)USER, string (31)JOBDOCFILE,
{.28}  integer  MARK, FSYS,
{.30}  PROCNO, ISUFF, REASON, BATCHID, 
{.40}  SESSICLIM, SCIDENSAD, SCIDENS, STARTCNSL,
{.50}  AIOSTAT, SCT DATE, SYNC1 DEST, SYNC2 DEST, 
{.60}  ASYNC DEST, AACCT REC, AIC REVS,
{.6C}  string (15)JOBNAME,
{.7C}  string (31)BASEFILE,
{.9C}  integer  PREVIC,
{.A0}  ITADDR0, ITADDR1, ITADDR2, ITADDR3,
{.B0}  ITADDR4, STREAM ID, DIDENT, SCARCITY, 
{.C0}  PREEMPTAT, string (11)SPOOLRFILE,
{.D0}  integer  FUNDS, SESSLEN, PRIORITY, DECKS,
{.E0}  DRIVES, PART CLOSE,
{.E8}  record (TMODEF)TMODES,
{108}  integer  PSLOT,
{10C}  string (63)ITADDR,
{14C}  integerarray  FCLOSING(0:3), integer  CLO FES,
{160}  integer  OUTPUT LIMIT, DAPSECS, longinteger  DAPINSTRS,
{170}  integer  OUT, string (15)OUTNAME,
{184}  integer  HISEG,
{188}  string (31)FORK,
{1A8}  integer  INSTREAM, OUTSTREAM,
{1B0}  integer  DIRVSN, DAP NO, SCT BLOCK AD,
       integer  PROTOCOL,
      integer  UEND)
ENDOFLIST 
!
!
!
!   USER            The six-character name of the process owner.
!
!   JOBDOCFILE      For a batch process (see REASON) the name of a file
!                   containing commands to be executed.
!
!   MARK            Currently 1, to be used in achieving forward
!                   compatibility if this record format is to be
!                   drastically changed.
!
!   FSYS            The file system (disc number) on which the user's
!                   file index and files reside.
!
!   PROCNO          The process number.
!
!   ISUFF           The "invocation number" for the process.  This number
!                   is appended to the names of workfiles so that, in the
!                   case of multiple invocations of a process, each
!                   invocation uses a unique set of names.
!
!   REASON          This gives the reason for the creation of the
!                   process:
!
!                   0 = interactive log-on
!                   1 = started from an OPER console
!                   2 = started as a batch (non-interactive) process by
!                       SPOOLR.
!                   3 = test process
!                   4 = D/NEWSTART from OPER console
!
!   BATCH ID        A unique integer identifier associated with the
!                   batch job (for REASON=2).
!
!   SESS IC LIM     The maximum number of thousands of machine
!                   instructions which may be executed during the
!                   current session by the process.  For interactive
!                   sessions this is currently a very large number.  For
!                   batch sessions it is a number given when a job is
!                   submitted to the SPOOLR process for queuing and
!                   subsequent execution.  If this limit is reached by
!                   the process, it is terminated with a message at the
!                   main Oper console:
!
!                           SIGNAL FAIL 4
!
!                   A subsystem should preferably guard against this
!                   occurrence by keeping an eye on the number of
!                   instructions executed in the current session, using
!                   Director procedure DSFI (TYPE=21).
!
!   SC IDENS AD,    These are used to acquire access to the Director
!   SC IDENS        procedures, as described in Chapter 4.
!
!   STARTCNSL       Gives the logical number of the Oper console from
!                   which the process was started (for REASON=1).
!
!   AIOSTAT         The address of a record describing interactive I/O
!                   status.  The format of the record is:
!
!                    (integer IAD, string(15) INTMESS,
!                     integer INBUFLEN, OUTBUFLEN, INSTREAM, OUTSTREAM)
!
!   SCT DATE        This may be used in conjunction with SC IDENS AD and
!                   SC IDENS.
!
!   SYNC1 DEST      The three service numbers allocated by the
!   SYNC2 DEST      Supervisor to the local process (see Ref. 10).
!   ASYNC DEST
!
!   AACCTREC        The address of a record, visible at ACR 15, of
!                   format:
!
!                       (longinteger MICROSECS, integer PTURNS, KINSTRS)
!
!                   The MICROSECS field holds the number of microseconds
!                   of OCP time used by the process.
!  
!                   The KINSTRS field of this record contains the number
!                   of K instructions (1K=1024) executed during the
!                   current session, it is updated only at calls of
!                   certain Director functions.
!
!                   The PTURNS field contains the total number of page
!                   turns performed on behalf of the process.
!
!   AICREVS         The address of a word containing the number of
!                   "revolutions" of the IC machine register (or
!                   "IC-register-fulls") to be expended (in addition to
!                   the current value of the IC register) before an
!                   instruction-counter interrupt is given to the user
!                   process.
!
!   The fields above may be used to determine a number of K instructions
!   executed during the current session using the formula:
!
!           AACCTREC_KINSTRS + (UINF_PREVIC - GETIC)
!
!   where GETIC is
!
!           (Image store 6)>>10 + integer(UINF-AICREVS)<<14
!
!   (with certain modifications depending on the state of the IC carry
!    bit).
!   JOBNAME         A character string identifier associated with the
!                   batch job when it was submitted to the SPOOLR
!                   process (for REASON=2).
!
!   BASEFILE NAME   The name of the basefile in use by the process.
!
!   PREVIC          The value of the current instruction-execution limit
!                   (in K instructions) at the time the KINSTRS field in
!                   the ACCT REC field was last updated.
!
!
!
!   ITADDR0-4       Reserved for a full network address of the process's
!                   interactive terminal.
!   STREAM ID
!
!   D IDENT
!
!
!   SCARCITY        The number of users on the System at and above
!                   which the machine resource is deemed to be scarce
!                   (the funds field of the process owner's index header
!                   is decremented according to the local charging
!                   formula for interactive sessions while the number of
!                   System users is greater than or equal to this value)
!                   This value is kept in the RATION field of the COM
!                   record (in public segment 48), see below.
!
!   PREEMPT AT      The number of users on the System at and above which
!                   an interactive user currently having no funds
!                   is eligible for pre-emption (i.e. automatic
!                   logging-off) by interactive users with positive
!                   funds.  This value is also kept in
!                   the RATION field in the COM record (in public
!                   segment 48).
!
!
!   The four bytes of the integer COM_RATION hold the following data
!   (most significant byte = byte zero):
!
!           0       number of interactive users at and above which
!                   resources for interaction are deemed to be scarce
!                   (SCARCITY)
!
!           1       number of interactive users at and above which a
!                   user having no scarce resource units may be pre
!                   -empted (logged off with 5 minutes' warning)
!                   because a new user with some scarce-resource units
!                   has logged on (PREEMPT A)
!
!           2       spare (zero)
!
!           3       current number of interactive processes
!
!   These values should be used in preference to those in the UINF
!   record, the fields in UINF are to be withdrawn.
!
!
!   SPOOLR FILE     is used by Director during batch process
!                   start up and has no subsequent relevance
!
!   FUNDS           the current number of funds
!                   held by the process owner (or his group-holder)
!                   This field is relevant only when resources are
!                   deemed to be scarce.
!   SESSLEN         is the limit in minutes of the session, i.e. the
!                   maximum duration of the process in elapsed minutes.
!                   A value of zero implies no limit. Relevant only for
!                   interactive sessions.
!
!   PRIORITY        For a batch job, the priority as specified by the
!                   user:
!                       1 = very low
!                       2 = low
!                       3 = standard
!                       4 = high
!                       5 = very high
!
!   DECKS           The number of tape decks to be available to this
!                   (batch) job.
!
!   DRIVES          The number of disc drives to be available to this
!                   (batch) job.
!
!   PARTCLOSE       Set -1 at process startup if a partial close is in
!                   force otherwise zero.
!
!   TMODES          Describes the terminal characteristics. This record
!                   is zero until a DGETMODE has been issued.
!                   Subsequently it contains data from the TCP.
!
!   UEND            marks the end of the record.
!>
LIST 
!>
!
!---------------end-of-included-file-------------------------------------
!