.
.         BUILD I/O FCT FROM FDT
.
.
.         (C)  Copyright 1972-1978  John Walker
.
.         This software is in the public domain
.
          AXR$
          DEFUNCT$
          FANG
          PURE      CODE
.
.         LA,U      A1,<FDT>
.         LMJ       A2,IOGET
.         <RETURN>                      A0 = FCT   REST:  ZAP!!
.
IOGET*    BGET      IOL                 ALLOCATE AN I/O TABLE
          SA        A1,IOFDT,A0         SAVE FDT POINTER
          DL        A3,FDIN,A1          LOAD INTERNAL NAME FROM FDT
          DS        A3,IOFN,A0          PUT INTO I/O PACKET
          SZ        IOSTATUS,A0         INSURE STATUS IS POSITIVE
          SZ        IOWAD,A0            CLEAR WORD-ADDRESSABLE FLAG
          SZ        IOMASS,A0           CLEAR MASS STORAGE FLAG
          SZ        IOOPT,A0            CLEAR I/O OPTIONS (MODE) FLAG
          LA        A3,FDEQT,A1         LOAD EQUIPMENT CODE
          SSL       A3,3                SHIFT OFF SUBTYPE
          TNE,U     A3,2                WORD ADDRESSABLE STORAGE ?
          SNONZ     IOWAD,A0            YES.  MARK IT AS SUCH
          TG,U      A3,2                AND IS IT MASS STORAGE ?
          SNONZ     IOMASS,A0           YES.  FLAG IT
          LA        A3,FDBLEN,A1        LOAD ASSUMED BLOCK LENGTH
          SA        A3,IOBLEN,A0        STORE INTO FCT FOR BUFFER ALLOCATION PUR
          LA        A3,A1               SAVE FDT ACROSS INITBB
          LA        A1,LOOKAHEAD        LOAD I/O BUFFERING DEPTH
          AA,U      A0,IOBB             ADVANCE TO BOUNDED BUFFER ADDRESS
          INITBB    .                   INITIALISE THE I/O BOUNDED BUFFER
          ANA,U     A0,IOBB             BACK UP TO START OF FCT
          LA        A1,A3               RESTORE FDT ADDRESS
.         UPDATE FACILITY STATUS INFORMATION
          SA        A0,A3               SAVE FCT ADDRESS
          LA,U      A0,,A1              LOAD ADDRESS OF FDT
          LXI,U     A0,11               GET LENGTH OF INFORMATION TO TRANSFER
          TZ        IOMASS,A3           IS IT A TAPE FILE ?
          LXI,U     A0,10               NO.  TRANSFER CORRECT WORD COUNT (GRRRR!
          FITEM$    .                   UPDATE FACILITY INFORMATION
          tz        iomass,a3           is this a mass storage file ?
          j         iogntp              yes.  don't ask for tape position
          dl        a4,x5               save original x5, x6
          sa        a1,x5               save the FDT address
          lmj       x6,uptpos           update tape position
          lx        a1,x5               reload I/O FCT address
          ds        a4,x5               restore original x5, x6
iogntp    LA        A0,A3               RESTORE FCT POINTER
          LA        A3,FDBEXT,A1        LOAD BLOCKS EXTENDED FROM STATUS
          TNZ       IOMASS,A0           IS IT A TAPE FILE ?
          SA        A3,FDBLKN,A1        UPDATE CURRENT BLOCK IN FDT
          LA        A3,FDMSAD,A1        LOAD BLOCK NUMBER / ADDRESS
          SA        A3,FDIPLC,A1        PUT ADDRESS IN OUTSIDE WORLD WORD
          SA        A3,IODRAD,A0        PUT INTO I/O PACKET
          J         0,A2                RETURN
.
.         BUILD NON I/O FCT (FOR PRINT, ETC.)
.
.         LMJ       A2,IOGNF
.         <RETURN>                      A0 = FCT
.
IOGNF*    BGET      IOL                 ALLOCATE AN FDT
          LA        A1,LOOKAHEAD        LOAD I/O BUFFERING DEPTH
          AA,U      A0,IOBB             ADVANCE POINTER TO BOUNDED BUFFER
          INITBB    .                   INITIALISE THE BOUNDED BUFFER
          ANA,U     A0,IOBB             BACK UP POINTER TO FCT START
          SZ        IOMASS,A0           CLEAR MASS STORAGE FLAG
          SZ        IOWAD,A0            CLEAR W. A. D. MODE
          SZ        IOOPT,A0            CLEAR OPTIONS
          J         0,A2                RETURN
          END