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