.
. 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