! Configuration file for EDWIN Version 5 on EMAS for use with ERCC Imp (groan)

%constant %string (23) VERSION = "EDWIN version 5.2.1"

%external %string (31) %fn EDWIN VERSION %alias "EDWIN_VERSION"
   %result = VERSION
%end

%const %integer NUM DEV = 18

%include "Edwins_Device"
%include "Edwins_Consts"

%external %routine %spec BBC    %alias "EDWIN___B"     (%integer COM, X, Y)
%external %routine %spec B REQ  %alias "EDWIN___B_REQ" (%integer %name STATE, X, Y)
%external %routine %spec B SAM  %alias "EDWIN___B_SAM" (%integer %name STATE, X, Y)
%external %routine %spec CHAS   %alias "EDWIN___C"     (%integer COM, X, Y)
%external %routine %spec C REQ  %alias "EDWIN___C_REQ" (%integer %name STATE, X, Y)
%external %routine %spec C SAM  %alias "EDWIN___C_SAM" (%integer %name STATE, X, Y)
%external %routine %spec C MAP  %alias "EDWIN___C_MAP" (%integer A, R, B, G)
%external %routine %spec D GIGI %alias "EDWIN___G"     (%integer COM, X, Y)
%external %routine %spec G REQ  %alias "EDWIN___G_REQ" (%integer %name STATE, X, Y)
%external %routine %spec G SAM  %alias "EDWIN___G_SAM" (%integer %name STATE, X, Y)
%external %routine %spec HPPLOT %alias "EDWIN___H"     (%integer COM, X, Y)
%external %routine %spec H REQ  %alias "EDWIN___H_REQ" (%integer %name STATE, X, Y)
%external %routine %spec CALCOM %alias "EDWIN___L"     (%integer COM, X, Y)
%external %routine %spec DGP300 %alias "EDWIN___M"     (%integer COM, X, Y)
%external %routine %spec ERCCGP %alias "EDWIN___N"     (%integer COM, X, Y)
%external %routine %spec ERCCHP %alias "EDWIN___O"     (%integer COM, X, Y)
%external %routine %spec P300   %alias "EDWIN___P"     (%integer COM, X, Y)
%external %routine %spec DHPTER %alias "EDWIN___R"     (%integer COM, X, Y)
%external %routine %spec R REQ  %alias "EDWIN___R_REQ" (%integer %name STATE, X, Y)
%external %routine %spec DSIGMA %alias "EDWIN___S"     (%integer COM, X, Y)
%external %routine %spec S REQ  %alias "EDWIN___S_REQ" (%integer %name STATE, X, Y)
%external %routine %spec S MAP  %alias "EDWIN___S_MAP" (%integer A, R, B, G)
%external %routine %spec T4000  %alias "EDWIN___T"     (%integer COM, X, Y)
%external %routine %spec T REQ  %alias "EDWIN___T_REQ" (%integer %name STATE, X, Y)
%external %routine %spec T4100  %alias "EDWIN___U"     (%integer COM, X, Y)
%external %routine %spec U REQ  %alias "EDWIN___U_REQ" (%integer %name STATE, X, Y)
%external %routine %spec VIDEOS %alias "EDWIN___V"     (%integer COM, X, Y)
%external %routine %spec V REQ  %alias "EDWIN___V_REQ" (%integer %name STATE, X, Y)
%external %routine %spec WC2014 %alias "EDWIN___W"     (%integer COM, X, Y)
%external %routine %spec W REQ  %alias "EDWIN___W_REQ" (%integer %name STATE, X, Y)
%external %routine %spec W MAP  %alias "EDWIN___W_MAP" (%integer A, R, B, G)
%external %routine %spec D X5A  %alias "EDWIN___X"     (%integer COM, X, Y)
%external %routine %spec X REQ  %alias "EDWIN___X_REQ" (%integer %name STATE, X, Y)
%external %routine %spec X SAM  %alias "EDWIN___X_SAM" (%integer %name STATE, X, Y)
%external %routine %spec X MAP  %alias "EDWIN___X_MAP" (%integer A, R, B, G)
%external %routine %spec YAWN   %alias "EDWIN___Y"     (%integer COM, X, Y)
%external %routine %spec Y REQ  %alias "EDWIN___Y_REQ" (%integer %name STATE, X, Y)
%external %routine %spec LAZER  %alias "EDWIN___Z"     (%integer COM, X, Y)

%external %routine DRIVE DEVICE %alias "EDWIN_DRIVE_DEV"  (%integer COM, X, Y)
   %switch SW(0:NUM DEV)

   %if COM=0 %start
       DEV DATA = 0
       X = X - 'a' + 'A' %if 'a'<=X<='z' %and X#100
       %if X=0 %start                                     { Null device }
           DEV DATA_NAME = "null"
           %return
       %finish %else %if 4002<=X<=4099 %or X=1015 %or X=2015 %or X=4662 %start
                                                          { Tektronix-Westward }
           DEV DATA_DEV NO = 1
       %finish %else %if X='C'                        { 67 ! 99 } { Charles } %start
           DEV DATA_DEV NO = 2
       %finish %else %if X=7221 %or X=72218 %or X=7475 %or X=7470 %or X=7580 %c
             %or X=7550 %c
             %or X=7220 %or X=72208 %or X=7585 %or X=7586 %or X=7500 { HP's } %start
           DEV DATA_DEV NO = 3
       %finish %else %if X=906 %or X=1012                         { Calcomp plotters } %start
           DEV DATA_DEV NO = 4    
       %finish %else %if X=300                                    { Printronix printer } %start
           DEV DATA_DEV NO = 5
       %finish %else %if X=200 %or X=550 %or X=52 %or X=100 %or X=55 { C. A. T.'s } %c
                       %or X='E' { 69 or 101 } %or X='V' { 86 or 118 } %c
                       %or X='L' { 76 or 108 } %or X='X' { 120&95 } %start
           DEV DATA_DEV NO = 6
       %finish %else %if X=2648                                 { HP terminal } %start
           DEV DATA_DEV NO = 7
       %finish %else %if X=2014                                 { Westward colour } %start
           DEV DATA_DEV NO = 8
       %finish %else %if X=5688 %or X=5684 %or X=5680           { Sigma displays } %start
           DEV DATA_DEV NO = 9
       %finish %else %if X='G'                                  { GIGI terminal } %start
           DEV DATA_DEV NO = 10
       %finish %else %if X=16_BBC %or X=16_BBC1 %or X=16_BBC2 %or X=16_BBC0 %start
           DEV DATA_DEV NO = 11
       %finish %else %if X=5555 %or X=5 %or X=1                 { X5A or XK1 } %start
           DEV DATA_DEV NO = 12
       %finish %else %if X=30072 %or X=300144                   { GP 300 printer } %start
           DEV DATA_DEV NO = 13
       %finish %else %if X=2686 %or X=2686150 %or X=2686300     { HP laser printer } %start
           DEV DATA_DEV NO = 14
       %finish %else %if 4105 <= X <= 4109                      { Tek colour terminals } %start
           DEV DATA_DEV NO = 15
!       %finish %else %if 563<=X<=1051                           { Network Calcomp plotters } %start
!           DEV DATA_DEV NO = 16
!       %finish %else %if X=-7220                                { Network HP plotter } %start
!           DEV DATA_DEV NO = 17
       %finish %else %if X=220 %or X=131 %or X=-200 %or X=-55   { Line terminals } %start
            DEV DATA_DEV NO = 18
       %finish %else %signal 14, 0, X
   %finish
   %return %if VIEWING<0 %or DEV DATA_DEV NO<=0 %or COM < 0 %or COM > NUM DEV
   ! Ignore calls to the null device driver, or if the parameter is out of range
   -> SW(DEV DATA_DEV NO)

SW(1):  T4000  (COM, X, Y); %return  { Tektronix 4000 series storage tubes
SW(2):  CHAS   (COM, X, Y); %return  { Charles protocol
SW(3):  HPPLOT (COM, X, Y); %return  { HP plotter driver
SW(4):  CALCOM (COM, X, Y); %return  { Calcomps
SW(5):  P300   (COM, X, Y); %return  { Printronix 300 printer.
SW(6):  VIDEOS (COM, X, Y); %return  { Cursor Addressable Terminal driver
SW(7):  DHPTER (COM, X, Y); %return  { HP raster scan terminal.
SW(8):  WC2014 (COM, X, Y); %return  { Westwood Colour display
SW(9):  DSIGMA (COM, X, Y); %return  { Sigma Colour display
SW(10): DGIGI  (COM, X, Y); %return  { DEC GIGI terminal
SW(11): BBC    (COM, X, Y); %return  { BBC micro
SW(12): DX5A   (COM, X, Y); %return  { Datatype X5A terminal
!SW(13): DGP300 (COM, X, Y); %return  { GP 300 maxtix printer
SW(14): LAZER  (COM, X, Y); %return  { HP Laser printer
SW(15): T4100  (COM, X, Y); %return  { Tek 4100 series displays
!SW(16): ERCCGP (COM, X, Y); %return  { ERCC Calcomp plotters (Graph pack)
!SW(17): ERCCHP (COM, X, Y); %return  { ERCC Network HP plotters (HP-GL + JCL)
SW(18): YAWN   (COM, X, Y); %return  { Line terminals
%end

%external %routine REQUEST DEVICE %alias "EDWIN_REQUEST_DEV" (%integer %name STATE, X, Y)
   %switch DC(0:NUM DEV)
   %signal 14,8,DEV DATA_DEV NO %unless 0 <= DEV DATA_DEV NO <= NUM DEV
   -> DC(DEV DATA_DEV NO)

DC(1):  T REQ (STATE, X, Y); %return
DC(2):  C REQ (STATE, X, Y); %return
DC(3):  H REQ (STATE, X, Y); %return
DC(6):  V REQ (STATE, X, Y); %return
DC(7):  R REQ (STATE, X, Y); %return
DC(8):  W REQ (STATE, X, Y); %return
DC(9):  S REQ (STATE, X, Y); %return
DC(10): G REQ (STATE, X, Y); %return
DC(11): B REQ (STATE, X, Y); %return
DC(12): X REQ (STATE, X, Y); %return
DC(15): U REQ (STATE, X, Y); %return
DC(18): Y REQ (STATE, X, Y); %return
DC(*):  %signal 14, 8, DEV DATA_DEV NO
%end

%external %routine SAMPLE DEVICE %alias "EDWIN_SAMPLE_DEV" (%integer %name STATE, X, Y)
   %signal 14, 8 %if DEV DATA_DEV NO # 2
   C Sam (STATE, X, Y)
%end

%external %routine AREA OF DEVICE %alias "EDWIN_AREA_DEV" (%integer %name XL, YB, XR, YT)
   %signal 14, 8
%end

%external %routine SET COLOUR MAP %alias "EDWIN_SET_COLOUR_MAP" (%integer ADR, RED, BLUE, GREEN)
   %integer DEVICE
   DEVICE = DEV DATA_DEV NO
   %if DEVICE=CHARLES %start
       C MAP (ADR, RED, BLUE, GREEN)
   %finish %else %if DEVICE=SIGMA %start
       S MAP (ADR, RED, BLUE, GREEN)
   %finish %else %if DEVICE=WESTWARD %start
       W MAP (ADR, RED, BLUE, GREEN)
   %finish %else %if DEVICE=X5A %start
       X MAP (ADR, RED, BLUE, GREEN)
   %finish
%end

%end %of %file
