! Utilites for Graphpack on VAX under VMS.

external routine spec ARRAY (name N, integer ADDR, LB, UB)
record format STRING FM (short LENGTH, THING, integer ADDRESS)

from Imp include Lognames
external string (127) fn spec UINFS alias "EDWIN_UINFS" (integer I)
external string (63) fn spec ITOSTR alias "ITOS" (integer I,M)
external string (127) fn spec RTOSTR alias "RTOS" (long real R, integer FP, AP)
external routine spec read record (integer name len, integer adr)
external routine spec print record (integer len, integer adr)

routine JOBINF (string (*) name MACHINE, JOBNAME, integer M,
                 string (*) name DELIVERY, integer N)
   MACHINE = "(".UINFS(10).")   "
   JOB NAME <- UINFS (1)
   JOB NAME = JOB NAME." " while LENGTH(JOB NAME)<M
   DELIVERY <- UINFS(2)
end

routine FILEINF (integer N, string (*) name FILE, integer name FLAG)
   external string (127) fn spec out file name
   integer S = outputstream
   on 9 start
       FLAG = event_extra
   finish
   FLAG = 0
   select output (n)
   FILE = out file name
   select output (s)
end

! The source of GRAFIO for VAX VMS (IO in fixed 80 byte records)
external routine GRAFIO alias "EDWIN_GRAFIO" (integername F, integer IO, AD)

! F < 0 => End of file
! IO = 0 => read, IO = 1 => write
! AD = address of buffer, unless in range 0 - 99 when -
! 0 => close current I/O, 1 - 99 => open on appropriate channel

   const integer IN = 0, OUT = 1
   own integer in stm = 0
   own integer out stm = 0
   own string (80) TEMP, JCL
   integer STATE, STM

   routine CLOSE IN
      integer S = input stream
      select input (in stm)
      close input
      select input (s)
      in stm = 0
   end

   routine CLOSE OUT
      integer S = output stream
      select output (out stm)
      close output
      select output (s)
      out stm = 0
   end

   if IO = IN start
       if 0<=AD<=99 start
           if AD=0 then CLOSE IN else in stm = ad
           return
       finish
       stm = input stream
       select input (in stm)
       read record (f, AD)
       select input (stm)
   finish else start
       if 0<=AD<=99 start
           if AD=0 then CLOSE OUT else out stm = ad
           return
       finish
       stm = output stream
       select output (out stm)
       print record (80, ad)
       select output (stm)
   finish
   F = 0
end

external string (1) fn PLU TITLE
   result = ""
end

end of file