! Program to view an EDWIN PDF on any device.

%include "Edwin:consts.inc"
%include "Edwin:specs.inc"
%external %routine %spec SET DEFAULT (%string (5) S)
%const %integer EMAS=1, VMS=2
%const %integer MACHINE = VMS

%routine Fatal Error (%string (255) STR)
   Select output (0)
   Print string ("VIEWPDF fails - ".STR)
   Newline
   %stop
%end

%begin
!%external %routine VIEWPDF (%string (255) CLIPARAM)
   %string(127) OUTPUT, INPUT
   %integer TYPE, I, SIZE, UPCM, XOFF, YOFF, DEVICE, Speed
   %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
   %own %string(7) extn = ".pdf"

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

   ! Apply defaults
   type = default device
   speed = 0
   output = ""

   ! Get parameters
   input = cli param

   %begin { Open input stream }
      %on %event 9 %start
          Fatal Error ("Cannot open input stream")
      %finish
      OPEN INPUT(1, INPUT. ".PDF")
   %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=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
       %begin { Open input stream }
          %on %event 9 %start
              Fatal Error ("Cannot open output stream")
          %finish
          OPEN OUTPUT (2, OUTPUT)
          VIEW ON (2)
       %end
   %finish
   INITIALISE FOR (TYPE)
   DEVICE = DEVICE DATA_DEV NO
   UPcm = device data_units per cm
   Set speed (speed) %if speed # 0
   %if UPCM # 0 %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, VX(SIZE)*UPCM, 0, 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 (XOFF*UPCM, (XOFF+SIZE)*UPCM, YOFF*UPCM, (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 = Terminal
      DRIVE DEVICE (4, 0, 760) %if DEVICE = Tektronix %or DEVICE=X5A %c
                               %or DEVICE = Westward 
      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
