RECORDFORMAT FDF(INTEGER LINK, DSNUM, C
BYTEINTEGER STATUS, ACCESSROUTE, VALID ACTION, CUR STATE, C
BYTEINTEGER MODE OF USE, MODE, FILE ORG, DEV CLASS, C
BYTEINTEGER REC TYPE, FLAGS, LM, RM, C
INTEGER ASVAR, AREC, RECSIZE, MINREC, MAXREC, MAXSIZE, C
ROUTECCY, CONAD, CURREC, CUR, END, TRANSFERS, DARECNUM, C
CURSIZE, DATASTART, STRING (31) IDEN, STRING (8) DEVICE)
EXTERNALROUTINESPEC OPENSQ(INTEGER I)
EXTERNALROUTINESPEC CLOSESQ(INTEGER CHAN)
EXTERNALROUTINESPEC WRITESQ(INTEGER CHAN,NAME B,E)
EXTERNALROUTINESPEC READLSQ(INTEGER CHAN,NAME B,E,C
INTEGERNAME LEN)
SYSTEMROUTINESPEC PSYSMES(INTEGER ROOT,FLAG)
SYSTEMROUTINESPEC DEFINE(INTEGER CHAN,STRING (31)IDEN,C
INTEGERNAME AFD,FLAG)
SYSTEMINTEGERFNSPEC FDMAP(INTEGER CHAN)
SYSTEMROUTINE GRAFIO(INTEGERNAME LEN, INTEGER MODE, AD)
!I/O INTERFACE FOR GRAPH PLOTTER ROUTINES
!MODE 0=READ 1=WRITE
!AD=1-100 CHANNEL NO FOR OPEN ELSE ADDRESS OF BUFFER
!LEN=LENGTH OF BUFFER READ
!THIS VERSION USES SQ ROUTINES - COULD BE MODIFIED
!TO USE LOWER LEVEL CALLS
OWNINTEGER INCHAN, OUTCHAN
INTEGER FLAG, CHAN, AFD
RECORDNAME F(FDF)
FLAG = 0; !DEFAULT
LEN = 0; !DEFAULT REPLY
IF 1 <= AD <= 100 START ; !OPEN(AD)
AFD = FDMAP(AD)
IF AFD = 0 START
IF AD = 96 START ; !DEFAULT PLOTTER OUTPUT STREAM
DEFINE(96,".GP23",AFD,FLAG)
-> ERR IF FLAG # 0
FINISH ELSE FLAG = 151 AND -> ERR; !NOT DEFINED
FINISH
IF MODE = 0 THEN INCHAN = AD ELSE START
OUTCHAN = AD
IF AFD > 0 START
F == RECORD(AFD); !FILE DESCRIPTOR FOR OUTPUT FILE
F_RECTYPE = X'01'; !FIXED
F_MINREC = 80
F_MAXREC = 80
FINISH
FINISH
OPENSQ(AD)
-> ERR
FINISH
IF AD = 0 START ; !CLOSE CHAN
IF MODE = 0 THEN CHAN = INCHAN ELSE CHAN = OUTCHAN
CLOSESQ(CHAN)
-> ERR
FINISH
IF MODE = 0 START ; !READ
READLSQ(INCHAN,BYTEINTEGER(AD),BYTEINTEGER(AD+79),LEN)
IF LEN = 0 THEN LEN = -1; !END OF FILE
-> ERR
FINISH
WRITESQ(OUTCHAN,BYTEINTEGER(AD),BYTEINTEGER(AD+79))
ERR:
IF FLAG # 0 START
SELECTOUTPUT(0)
PSYSMES(83,FLAG)
MONITOR
STOP
FINISH
END ; !OF GRAFIO
ENDOFFILE
ENDOFFILE