! Program to view an EDWIN PDF on any device.

%include "ECSLIB.EDWIN_INC"
%include "ECSC17.IMP77SPECS"
%external %integer %spec DEVICE
%external %routine %spec SET DEFAULT (%string (5) S)
%external %string (127) %fn %spec UINFS (%integer I)

%external %routine VIEWPDF (%string (255) STR)
   %string(127) OUT
   %begin
      %string (63) IN1, IN2
      %routine ERROR
         Print string ("Parameters are PDF/outfile")
         NEWLINE
         STR=""
      %end

      %on %event 9 %start
          Print string ("Cannot open input stream")
          STR=""
          NEWLINE
      %finish

      SET DEFAULT ("#PDF")
      SELECT INPUT (0)
      %if STR="" %start
          PROMPT("Parameters:")
          SKIP SYMBOL %while NEXT SYMBOL<=' '
          STR=STR.TO STRING(NEXT SYMBOL) %and SKIP SYMBOL %while NEXT SYMBOL#NL
      %finish
      %if STR-> STR.("/").OUT %start; %finish %else OUT = ""
      %unless STR -> IN1.(",").IN2 %start
             OPEN INPUT (1,STR) 
             OUT = STR %if OUT = ""
      %finish %else ERROR
   %end
   %integer TYPE, I, SIZE, UPCM

   %on %event 4,9,14 %start
       %if EVENT_EVENT=14 %start
           UPDATE
           NEWLINE
           Print string ("EDWIN error")
           WRITE (EVENT_SUB,1)
           Print string ("  : ".EDWIN ERROR(EVENT_SUB))
           NEWLINE
       %finish
       TERMINATE EDWIN
       %stop
   %finish

   SELECT INPUT (0)
   PROMPT ("Device type:")
   READ (TYPE)
   %if TYPE=300 %or TYPE=7220 %or 563<=TYPE<=963 %start
       %if TYPE=300 %then SET DEFAULT ("#LIS") %else SET DEFAULT ("#GP")
       %if UINFS(10)->("29") %start; ! An EMAS
           %if OUT -> OUT.("#") %start; %finish
           %if OUT -> (".").OUT %start; %finish
           %if OUT -> ("_").OUT %start; %finish
       %finish %else %start
           %if OUT -> (":").OUT %start; %finish
           %if OUT -> ("]").OUT %start; %finish
           %if OUT -> OUT.(".") %start; %finish
       %finish
       OPEN OUTPUT (2, OUT)
       VIEW ON (2)
   %finish
   INITIALISE FOR (TYPE)
   VIEWPORT (0,1023,0,767); ! Default
   %IF DEVICE = 3  %or DEVICE = 4 %or DEVICE = 12 %or DEVICE = 13 %start
       %if DEVICE=4 %then UPCM=100 %else UPCM=400
       PROMPT ("Size (cms):")
       SKIP SYMBOL %while NEXT SYMBOL <=' '
       %if NEXT SYMBOL & 95 = 'A' %start
           SKIP SYMBOL
           %if NEXT SYMBOL # '3' %and NEXT SYMBOL # '4' %start
               PRINT STRING ("Options are A4 or A3 only")
               NEWLINE
               %signal 9
          %finish
          %if NEXT SYMBOL = '3' %then VIEWPORT (0, 40*UPCM, 0, 28*UPCM) %c
                                %else VIEWPORT (0, 28*UPCM, 0, 20*UPCM)
          READ SYMBOL (SIZE) %until SIZE = NL
       %finish %else %start
           READ (SIZE)
           SKIP SYMBOL %while NEXT SYMBOL = ' '
           %if '0'<= NEXT SYMBOL <= '9' %then READ (TYPE) %else TYPE=SIZE
           VIEWPORT (0, SIZE*UPCM, 0, TYPE*UPCM)
       %finish
   %finish
   %if DEVICE = 6 %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, 450, 0, 791) %if SIZE='N'; ! W = default.
   %finish

   %cycle
      NEWFRAME
      SELECT INPUT (1)
      REVIEW
      DRIVE DEV (4, 0, 22) %if TYPE=550 %or TYPE=200
      DRIVE DEV (4, 0, 767) %if 4000 <= TYPE <= 4999
      UPDATE
      SELECT INPUT (0)
      PROMPT (" Another?")
      READ SYMBOL (I) %and I=I&95 %until I='Y' %or I='N'
      SKIP SYMBOL %while NEXT SYMBOL # NL
      %exit %if I='N'
   %repeat

TERMINATE EDWIN
%end

%endoffile
