! Program to view an EDWIN PDF on any device.

external string(31) Version   = "5",
                      Release   = "2",
                      Revision  = "0",
                      Fname     = "VIEWPDF",
                   Product Code = "VIEWPDF"

from Imp include Cliparse
from LL  include Common
from Edwin include Consts
from Edwin include Specs
const integer EMAS=1, VMS=2
const integer MACHINE = VMS

begin
   string(127) OUTPUT, INPUT
   integer TYPE, I, SIZE, XOFF, YOFF, DEVICE
   long real UPCM
   const integer array VX ('1':'5') = 20 * 4, 28 * 2, 20 * 2, 28, 20
   const integer array VY ('1':'5') = 28 * 2, 20 * 2, 28, 20, 14

   on event 9,14 start
       TERMINATE EDWIN
       if EVENT_EVENT=14 start
           NEWLINE
           Fatal Error ("EDWIN error".ItoS(EVENT_SUB,1)."  : ".EDWIN ERROR(EVENT_SUB))
       finish
       return
   finish

   if Qualifier Present("IDENTIFY") start
      Print Identification
      return unless Qualifier Present("FILE")
   finish

   Type = default device
   Type = Qualifier I ("DEVICE") if Qualifier Present ("DEVICE")
   Output = Qualifier S ("OUTPUT")
   Input = Qualifier S ("FILE")

   begin { Open input stream }
      on event 9 start
          Fatal Error ("Cannot open input stream")
      finish
      OPEN LL INPUT (1, LL EDWIN PDF File, 0, INPUT, "")
   end
   SELECT INPUT (0)
   if OUTPUT#"" or TYPE=300 c
                 or TYPE=2686 or TYPE=2686300 c
                 or TYPE=30072 or TYPE=300144 c
                 or TYPE=7500  or TYPE=-7220 or 563<=TYPE<=1051 start
       OUTPUT = INPUT if OUTPUT = ""
       if MACHINE=EMAS start
           if OUTPUT -> OUTPUT.("#") start; finish
           if OUTPUT -> (".").OUTPUT start; finish
           if OUTPUT -> ("_").OUTPUT start; finish
       else
           if OUTPUT -> (":").OUTPUT start; finish
           if OUTPUT -> ("]").OUTPUT start; finish
           if OUTPUT -> (">").OUTPUT start; finish
           if OUTPUT -> OUTPUT.(".") start; finish
           if OUTPUT -> OUTPUT.(";") start; finish
       finish
       if TYPE=300 or TYPE=2686 or TYPE=2686300 or TYPE=30072 or TYPE=300144 start
           I = LL Listing File
       finish else if TYPE=-7220 or TYPE=7500 start
           I = LL HP Plotter File
       else
           I = LL Calcomp Plotter File
       finish
       begin { Open input stream }
          on event 9 start
              Fatal Error ("Cannot open output stream")
          finish
          OPEN LL OUTPUT (2, I, 0, OUTPUT, "")
          VIEW ON (2)
       end
   finish
   INITIALISE FOR (TYPE)
   DEVICE = DEVICE DATA_DEV NO
   UPCM = DEVICE DATA_UNITS PER CM
   if UPCM > 1 start
       PROMPT ("Size (cms):")
       SKIP SYMBOL while NEXT SYMBOL <=' '
       if NEXT SYMBOL & 95 = 'A' start
           SKIP SYMBOL
           READ SYMBOL (SIZE)
           unless '1' <= SIZE <= '5' start
               Fatal Error ("Paper size must be A5, A4, A3, A2 or A1")
           finish
           VIEWPORT (0, Round(VX(SIZE)*UPCM), 0, Round(VY(SIZE)*UPCM))
           READ SYMBOL (SIZE) until SIZE = NL
       else
           begin
              on 3,4 start
                  SKIP SYMBOL while NEXT SYMBOL # NL
                  Fatal Error ("Invalid size specified")
              finish
              READ (SIZE)
              SKIP SYMBOL while NEXT SYMBOL = ' ' or NEXT SYMBOL = ','
              if '0'<= NEXT SYMBOL <= '9' then READ (TYPE) else TYPE=SIZE
              XOFF = 0;   YOFF = 0
              SKIP SYMBOL while NEXT SYMBOL = ' ' or NEXT SYMBOL = ','
              if '0'<= NEXT SYMBOL <= '9' then READ (XOFF)
              SKIP SYMBOL while NEXT SYMBOL = ' ' or NEXT SYMBOL = ','
              if '0'<= NEXT SYMBOL <= '9' then READ (YOFF)
              VIEWPORT (Round(XOFF*UPCM), Round((XOFF+SIZE)*UPCM),
                        Round(YOFF*UPCM), Round((YOFF+TYPE)*UPCM))
           end
       finish
   finish
!   %if DEVICE = Printronix %start
!       SELECT OUTPUT (0)
!       PRINT STRING ("Is this for a Printronix with narrow or wide paper?")
!       NEWLINE
!       PROMPT ("Narrow or Wide? ")
!       READ SYMBOL (SIZE) %and SIZE=SIZE&95 %until SIZE='N' %or SIZE='W'
!       READ SYMBOL (TYPE) %until TYPE=NL
!       VIEWPORT (0, 460, 0, 791) %if SIZE='N'; ! W = default.
!   %finish

   cycle
      NEWFRAME
      SELECT INPUT (1)
      REVIEW
      DRIVE DEVICE (4, 0, 22) if DEVICE = VT100
      DRIVE DEVICE (4, 0, 760) if DEVICE = Tektronix or DEVICE=X5A
      UPDATE
      if Qualifier Present ("MULTIPLE") or Device Data_Devno = BBC Micro start
          SELECT INPUT (0)
          if Device Data_Devno = BBC Micro start
              Prompt ("More?")
          else
              Prompt (" Another?")
          finish
          READ SYMBOL (I) and I=I&95 until I='Y' or I='N'
          SKIP SYMBOL while NEXT SYMBOL # NL
          exit if I='N'
      else
          exit
      finish
   repeat

TERMINATE EDWIN
end

endoffile