! Configuration file for EDWIN Version 5 on the APM
! Created by JGH  10-Aug-84

%const %integer NUM DEV = 11

%dynamic %routine %spec V     %alias "EDWIN___V"     (%integer COM, X, Y)
%dynamic %routine %spec V REQ %alias "EDWIN___V_REQ" (%integer %name STATE, X, Y)
%dynamic %routine %spec F     %alias "EDWIN___F"     (%integer COM, X, Y)
%dynamic %routine %spec F REQ %alias "EDWIN___F_REQ" (%integer %name STATE, X, Y)
%dynamic %routine %spec F SAM %alias "EDWIN___F_SAM" (%integer %name STATE, X, Y)
%dynamic %routine %spec F BOX %alias "EDWIN___F_BOX" (%integer %name XL, YB, XR, YT)
%dynamic %routine %spec I     %alias "EDWIN___I"     (%integer COM, X, Y)
%dynamic %routine %spec I REQ %alias "EDWIN___I_REQ" (%integer %name STATE, X, Y)
%dynamic %routine %spec I SAM %alias "EDWIN___I_SAM" (%integer %name STATE, X, Y)
%dynamic %routine %spec I BOX %alias "EDWIN___I_BOX" (%integer %name XL, YB, XR, YT)
%Dynamic %routine %spec HPPLOT %alias "EDWIN___H"     (%integer COM, X, Y)
%Dynamic %routine %spec H REQ  %alias "EDWIN___H_REQ" (%integer %name STATE, 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
       DEV DATA_DEV NO = -1
       X = X - 'a' + 'A' %if 'a'<=X<='z' %and X#100
       %if X=0 %start                                   { Null device }
           DEV DATA_DEV NO = 0
       %else %if X=7221 %or X=72218 %or X=7475 %or X=7470 %or X=7580 %c
             %or X=7220 %or X=72208 %or X=7585 %or X=7586 %or X=7500 { HP's }
           DEV DATA_DEV NO = 3
       %else %if X='F'                     { 70 ! 102 } { Fred's display }
           DEV DATA_DEV NO = 10
       %else %if X='I'                     { 73 ! 105 } { Igor's display }
           DEV DATA_DEV NO = 11
       %else %if X=200 %or X=550 %or X=52 %or X=100 %or X=55 { C. A. T.'s } -
             %or X='E' { 69 or 101 } %or X='V' { 86 or 118 } %or X='X' { 120&95 }
           DEV DATA_DEV NO = 6
       %finish %else %signal 14, 0, X
   %finish
   %return %if VIEWING<0 %or DEV DATA_DEV NO<=0 %or COM < 0 %or COM > 15
   ! Ignore calls to the null device driver, or if the parameter is out of range
   -> SW(DEV DATA_DEV NO)

SW(10): F (COM, X, Y);   %return;   ! Fred's Level 1 graphics
SW(11): I (COM, X, Y);   %return;   ! Igor's Level 2 graphics
SW(6):  V (COM, X, Y);   %return;   ! Video Terminal driver
SW(3):  HPPLOT (COM, X, Y); %return  { HP plotter driver}
SW(*):  %signal 14, 0
%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(10): F REQ (STATE, X, Y); %return
DC(11): I REQ (STATE, X, Y); %return
DC(6):  V REQ (STATE, X, Y); %return
DC(3):  H 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)
   %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(10): F SAM (STATE, X, Y); %return
DC(11): I SAM (STATE, X, Y); %return
DC(*): %signal 14, 8, DEV DATA_DEV NO
%end

%external %routine AREA OF DEVICE %alias "EDWIN_AREA_DEV" (%integer %name XL, YB, XR, YT)
!   F BOX (XL, YB, XR, YT) {Surely this isn't correct}
   %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(10): F BOX (XL, YB, XR, YT); %return
DC(11): I BOX (XL, YB, XR, YT); %return
DC(*): %signal 14, 8, DEV DATA_DEV NO
%end

%end %of %file
