! 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