%ENDOFLIST
!IOLIB.INC
!CONTAINS THE RECORD DEFINITIONS FOR ALL THE INTERNAL I/O RECORDS

!SIZES FOR IOBUFFERS
%CONSTINTEGER DSKBUFFERSIZE=131
%CONSTINTEGER SCBSIZE=39;   !WITH NON-EXTENDED LOOKUP BLOCK
%CONSTINTEGER TTSCBSIZE=9
%CONSTINTEGER STRSCBSIZE=7
%CONSTINTEGER TMPCORSIZE=128

%CONSTINTEGER MAX CHANS=15;  !MAX NUMBER OF I/O CHANNELS AND STREAMS

!DEVICE TYPES AS RETURNED BY 'DEVCHR' UUO
%CONSTINTEGER STRDEV=-3, TMPDEV=-2, UNDEV=-1; !SPECIAL CASES
%CONSTINTEGER DSKDEV=0,
              DTADEV=1,
              MTADEV=2,
              TTYDEV=3,
              XDSKDEV=4;   !ALL DEVICE TYPES>4 TO BE GENERALLY TREATED AS DISK

%CONSTINTEGER STREAM=0, DAFILE=1, SQFILE=2; !CHANNEL TYPES


%RECORDFORMAT OPENBLOCK(  %C
   %INTEGER STATUS,         %C
   %INTEGER DEVNAM,       %C
   %INTEGER BUFHEDS)


%RECORDFORMAT LOOKUPBLOCK( %C
   %INTEGER CNT,          %C
   %INTEGER PPN,          %C
   %INTEGER NAM,          %C
   %INTEGER EXT,           %C
   %INTEGER PRV,           %C
   %INTEGER SIZ, VER, SPL, EST, ALC, POS, TF1, NCA, MTA, DEV,   %C
   STS, ELB, EUN, QTF, QTO, QTR, USD, AUT, NXT, PRD, PCA, UFD, FLR, %C
   XRA, TIM, LAD, DED, ACT)


%RECORDFORMAT RINGHEADER( %C
   %INTEGER BUFADR,       %C
   %INTEGER BYTPTR,       %C
   %INTEGER BYTCNT,
   %INTEGER MPXUDX)


%RECORDFORMAT PATHBLOCK( %C
   %INTEGER FUNCT,       %C
   %INTEGER SWITCHES,    %C
   %INTEGER PPN,         %C
   %INTEGERARRAY SFDS(1:MAXSFDS))


%RECORDFORMAT FILOPBLOCK( %C
   %INTEGER FUNCT,        %C
   %INTEGER STATUS,         %C
   %INTEGER DEVNAM,       %C
   %INTEGER BUFHEDS,      %C
   %INTEGER BUFNUM,       %C
   %RECORD(LOOKUPBLOCK)%NAME LKENT, %C
   %INTEGER PATHARG)


%RECORDFORMAT  SCB(    %C
   %SHORTINTEGER DEVTYP,    %C
   %SHORTINTEGER CHNTYP,   %C
   %INTEGER NXTCHR,    %C
   %INTEGERNAME OPER,  %C
   %INTEGER FLAGS,     %C
   %INTEGER RESERVED , %C
   %STRING(3) TMPNAME, %C
   %INTEGER UDX,       %C
   %INTEGER FILOPFN,   %C
   %INTEGER STATUS,    %C
   %INTEGER DEVNAM,    %C
   %INTEGER BUFHEDS,   %C
   %INTEGER BUFNUM,    %C
   %RECORD(LOOKUPBLOCK)%NAME LKENT, %C
   %INTEGER PATHARG,   %C
   %RECORD(RINGHEADER) RINGHEAD, %C
   %INTEGER IBUFOP,    %C
   %INTEGER OBUFOP,    %C
   %INTEGER USETI,     %C
   %INTEGER USETO,     %C
   %INTEGER STATZ,     %C
   %INTEGER BLOCKSIZE,  %C
   %INTEGER BUFVEC,    %C
   %RECORD(PATHBLOCK) PATHBLK)

%RECORDFORMAT TTSCB(    %C
   %SHORTINTEGER DEVTYP,%C
   %SHORTINTEGER CHNTYP,%C
   %INTEGER NXTCHR,     %C
   %INTEGERNAME OPER,   %C
   %INTEGER FLAGS,      %C
   %INTEGER ARGPTR,     %C
   %INTEGER FUNCT,      %C
   %INTEGER UDX,        %C
   %INTEGER OUTARG)

%RECORDFORMAT STRSCB(  %C
   %SHORTINTEGER DEVTYP,
   %SHORTINTEGER CHNTYP,
   %INTEGER NXTCHR,
   %INTEGERNAME OPER,
   %INTEGER LENGTH,
   %INTEGER LENPTR,
   %INTEGER POINTER)



!AND FOR THE ARRAY OF RECORD POINTERS
%RECORDFORMAT SCBNAME(%RECORD(SCB)%NAME NAME)
%CONSTRECORD(SCB)%NAME UNDSCB=0; !AN UNDEFINED RECORD NAME
%LIST
%ENDOFFILE
!+
!.LC
!.NAP
!.NF
!.FLAG CAP
!^&^DEFINITION OF STREAM CONTROL BLOCKS\&
!.F.S
!^THE STREAM CONTROL BLOCKS FOR ALL THE STREAMS ARE POINTED
!TO BY THE FOLLOWING ARRAYS:-
!.NF.S
!^^%EXTERNALRECORD(SCBNAME)%ARRAY INVEC(0:15)
!%EXTERNALRECORD(SCBNAME)%ARRAY OUTVEC(0:15)\\
!.F.S
!WHERE THE RECORD <SCBNAME IS DEFINED:-
!.NF
!^^%RECORDFORMAT SCBNAME(%RECORD(SCB)%NAME NAME)\\
!.S
!AND THE CURRENT ^^SCB\\S ARE POINTED TO BY
!.NF.S
!^^%EXTERNALRECORD(SCB)%NAME INSCB
!%EXTERNALRECORD(SCB)%NAME OUTSCB\\
!.S.F
!^AND FOR <DA/SQ CHANNELS THEY ARE POINTED TO BY THE ARRAY:-
!.NF.S
!^^%EXTERNALRECORD(SCBNAME)%ARRAY DASQVEC(1:15)\\
!.S.F
!WHERE THE FORMAT OF THE <SCB IS AS FOLLOWS:-
!.NF.S
!<%RECORD <%FORMAT <SCB(   <%C
!    <%INTEGER <DEVTYP    - ^DEVICE TYPE, WHERE
!                         (-3=STRING, -2=TMPCOR, -1=UNASSIGNED
!                         AND >=0 IS DEFINED IN '<DEVTYP' <UUO)
!    <%INTEGER <CHNTYP    - ^STREAM OR CHANNEL TYPE. ^WHERE
!                         (0=STREAM, 1=<DA FILE, 2=<SQ FILE)
!    <%INTEGER <NXTCHR    - ^THE NEXT CHARACTER FOR INPUT
!    <%INTEGERNAME <OPER  - ^ADDRESS OF READ OR WRITE ROUTINE
!    <%INTEGER <FLAGS     - ^FLAG WORD (BIT0=ZERO AS NEXT SYMBOL)
!    <%INTEGER <RESERVED  - ^RESERVED
!    <%STRING(3) <TMPNAME - ^NAME OF A TMPCOR FILE.
!    <%INTEGER <UDX       - ^UNIVERSAL ^DEVICE ^INDEX
!    <%INTEGER <FILOPFN   - ^FIRST WORD OF A FILOP TYPE RECORD
!                         PHYSICAL CHANNEL NUMBER IN LH
!                         AND FILOP FUNCTION CODE IN RH
!    <%INTEGER <STATUS    - ^FIRST WORD OF AN OPEN BLOCK
!                         IS STATUS WORD, INCLUDING <I/O MODE
!    <%INTEGER <DEVNAM    - ^SIXBIT DEVICE NAME
!    <%INTEGER <BUFHEDS   - ^ADDRESSES OF BUFFER RING HEADERS
!                         OUTPUT<(LH) AND INPUT<(RH)
!    <%INTEGER <BUFNUM    - ^NUMBER OF BUFFERS IN RING
!                         OUTPUT<(LH) AND INPUT<(RH)
!    <%RECORD(LOOKUPBLOCK)%NAME <LKENT
!                       - ^ADDRESS OF LOOKUP-ENTER BLOCK
!    <%INTEGER <PATHARG   - ^PATH BLOCK POINTER
!                         LENGTH<(LH) AND ADDRESS<(RH)
!    <%RECORD(RINGHEADER) <RINGHEAD
!                       - ^BUFFER RING HEADER
!    <%INTEGER <IBUFOP    - <IN <CHAN,0
!    <%INTEGER <OBUFOP    - <OUT <CHAN,0
!    <%INTEGER <USETI     - <USETI <CHAN,0
!    <%INTEGER <USETO     - <USETO <CHAN,0
!    <%INTEGER <STATZ     - <STATZ <CHAN,740000
!    <%INTEGER <BLOCKSIZE - ^SIZE OF THE DEVICE BLOCKS
!    <%RECORD(PATHBLOCK) <PATHBLK )
!                       - ^PATH BLOCK
!.S
!^AND FOR TELETYPES
!.S
!<%RECORD <%FORMAT <TTSCB(   <%C
!    <%INTEGER <DEVTYP    - !
!    <%INTEGER <CHNTYP    - !
!    <%INTEGER <NXTCHR    - !    SAME AS IN <SCB
!    <%INTEGERNAME <OPER  - !
!    <%INTEGER <FLAGS     - ^FLAG WORD
!    <%INTEGER <ARGPTR    - ^POINTER TO TRMOP ARG BLOCK
!    <%INTEGER <FUNCT     - ^FIRST WORD OF ARG BLOCK- FUNCTION CODE
!    <%INTEGER <UDX       - ^UNIVERSAL ^DEVICE ^INDEX
!    <%INTEGER <OUTARG)   - ^NEXT CHAR FOR OUTPUT
!.S
!^AND FOR STRINGS
!.S
!<%RECORD <%FORMAT <STRSCB(   <%C
!    <%INTEGER <DEVTYP    - !
!    <%INTEGER <CHNTYP    - !
!    <%INTEGER <NXTCHR    - !    SAME AS IN <SCB
!    <%INTEGERNAME <OPER  - !
!    <%INTEGER <LENGTH    - ^STRING LENGTH
!    <%INTEGER <LENPTR    - ^POINTER TO LENGTH BYTE
!    <%INTEGER <POINTER)  - ^POINTER TO CURRENT BYTE
!.S
!^WHERE THE OTHER RECORDS ARE DEFINED AS FOLLOWS.
!.S 2
!<%RECORDFORMAT <OPENBLOCK(  <%C
!   <%INTEGER <STATUS,    - ^STATUS INCLUDING <I/O MODE
!   <%INTEGER <DEVNAM,    - ^SIXBIT DEVICE NAME
!   <%INTEGER <BUFHEDS)   - ^ADDRESSES OF BUFFERS
!                         OUTPUT<(LH) AND INPUT<(RH)
!.S
!^THIS RECORD CAN BE MAPPED ONTO THE <SCB AT <SCB__STATUS
!.S2
!<%RECORDFORMAT <LOOKUPBLOCK( <%C
!   <%INTEGER <CNT,       - ^LENGTH OF FOLLOWING BLOCK
!                         (DEFAULT=4)
!   <%INTEGER <PPN)       - ^PROJECT-PROGRAMMER NUMBER
!   <%INTEGER <NAM,       - ^SIXBIT FILE NAME
!   <%INTEGER <EXT,       - ^SIXBIT EXTENSION<(LH)
!   <%INTEGER <PRV,       - ^DATE-TIME AND PROTECTION
!.F
!^THE FOLLOWING RECORD ITEMS ARE ONLY USED WHEN THE ^^/EXTEND:\\N SWITCH IS
!GIVEN. ^THEY ARE NAMED ACCORDING TO THE <DEC-10 EXTENDED LOOKUP-BLOCK
!CONVENTIONS (SEE <DEC-10 <MONITOR <CALLS <MANUAL).
!.NF
!   <%INTEGER <SIZ, <VER, <SPL, <EST, <ALC, <POS, <TF1, <NCA, <MTA,
!   <DEV, <STS, <ELB, <EUN, <QTF, <QTO, <USD, <AUT, <PCA, <UFD, <FLR,
!   <XRA, <TIM)
!.S2
!<%RECORDFORMAT <RINGHEADER( <%C
!   <%INTEGER <BUFADR,    - ^ADDRESS OF CURRENT BUFFER
!   <%INTEGER <BYTPTR,    - ^POINTER TO CURRENT BYTE
!   <%INTEGER <BYTCNT,    - ^BYTE COUNT
!   <%INTEGER <MPXUDX)    - ^UNIVERSAL DEVICE INDEX FOR <MPX
!.S2
!<%RECORDFORMAT <PATHBLOCK( <%C
!   <%INTEGER <FUNCT,     - ^REQUIRED FUNCTION
!   <%INTEGER <SWITCHES,  - ^SCAN SWITCHES
!   <%INTEGER <PPN,       - ^PROJECT-PROGRAMMER NUMBER
!   <%INTEGERARRAY <SFDS(1:MAXSFDS)) - ^SIXBIT <SFD NAMES
!.S 2
!<%RECORDFORMAT <FILOPBLOCK( <%C
!   <%INTEGER <FUNCT,     - ^PHYSICAL CHANNEL NUMBER<(LH)
!                         AND FUNCTION CODE<(RH)
!   <%INTEGER <STATUS,    - ^STATUS WORD, INCLUDING <I/O MODE
!   <%INTEGER <DEVNAM,    - ^SIXBIT DEVICE NAME
!   <%INTEGER <BUFHEDS,   - ^ADDRESSES OF BUFFER RING HEADERS
!                         OUTPUT<(LH) AND INPUT<(RH)
!   <%INTEGER <BUFNUM,    - ^NUMBER OF BUFFERS IN EACH
!                         OUTPUT<(LH) AND INPUT<(RH)
!   <%RECORD(LOOKUPBLOCK)%NAME <LKENT,
!                       - ^LOOKUP-ENTER BLOCK ADDRESS
!   <%INTEGER <PATHARG)   - ^PATH BLOCK POINTER
!                         LENGTH<(LH) AND ADDRESS<(RH)
!.S
!^THIS RECORD CAN BE MAPPED ONTO THE <SCB AT <SCB__FILOPFN
!-

