! Fortran interface to EDWIN.

from Edwin include Specs
from Edwin include Types
from Edwin include Shapes

external routine INIT FOR (integer name DEVICE TYPE)
   on 14 start
       Terminate Edwin
       Print string ("EDWIN error - ".Edwin error(event_sub))
       newline
       stop
   finish
   INITIALISE FOR (DEVICE TYPE)
end

external routine MOVE A (integer name X, Y)
   MOVE ABS (X, Y)
end

external routine MOVE R (integer name DX, DY)
   MOVE REL (DX, DY)
end

external routine LINE A (integer name X, Y)
   LINE ABS (X, Y)
end

external routine LINE R (integer name DX, DY)
   LINE REL (DX, DY)
end

external routine MARK A (integer name N, X, Y)
   MARKER ABS (N, X, Y)
end

external routine MARK R (integer name N, DX, DY)
   MARKER REL (N, DX, DY)
end

external routine CHAR (integer name SYM)
   CHARACTER (SYM)
end

external routine STR ON (integer name STREAM)
   STORE ON (STREAM)
end

external routine V ON (integer name STREAM)
   VIEW ON (STREAM)
end

external routine ASPECT RAT (integer name MODE)
   ASPECT RATIOING (MODE)
end

external routine F WINDOW (integer name XL, XR, YB, YT)
   WINDOW (XL, XR, YB, YT)
end

external routine F VIEWPORT (integer name XL, XR, YB, YT)
   VIEWPORT (XL, XR, YB, YT)
end

external routine S COLOUR (integer name COLOUR)
   SET COLOUR (COLOUR)
end

external routine S COLOUR MODE (integer name MODE)
   SET COLOUR MODE (MODE)
end

external routine S LINE STYLE (integer name STYLE)
   SET LINE STYLE (STYLE)
end

external routine S CHAR SIZE (integer name SIZE)
   SET CHAR SIZE (SIZE)
end

external routine S MARKER SIZE (integer name S)
   SET MARKER SIZE (S)
end

external routine S CHAR ROT (integer name ROT)
   SET CHAR ROT (ROT)
end

external routine S CHAR QUALITY (integer name WHICH)
   SET CHAR QUALITY (WHICH)
end

external routine S CHAR FONT (integer name WHICH)
   SET CHAR FONT (WHICH)
end

external routine S CHAR SLANT (integer name ANGLE)
   SET CHAR SLANT (ANGLE)
end

external routine S CHORD STEP (integer TO)
   SET CHORD STEP (TO)
end

external routine S SHADE MODE (integer TO)
   SET SHADE MODE (TO)
end

external routine F DRIVE DEVICE (integer name COM, X, Y)
   DRIVE DEVICE (COM, X, Y)
end

external routine S COLOUR MAP (integer name A, B, C, D)
   SET COLOUR MAP (A, B, C, D)
end

external routine spec edwin text alias "EDWIN_TEXT" (string (255) STR)

!! A Fortan interface for the routine TEXT on EMAS
!
!%external %routine F TEXT %alias "TEXT" (%integer %name S, N)
!   %integer L, M
!   %string (255) ST
!   L = N&255
!   %if L=0 %then ST="" %else %start
!      LENGTH(ST) = L
!      %begin
!         %byte %integer %array %name SBYTE
!         %byte %integer %array %format F(1:L)
!         SBYTE == ARRAY(ADDR(S),F)
!         CHARNO(ST,M) = SBYTE(M) %FOR M=L,-1,1
!      %end
!   %finish
!   EDWIN TEXT (ST)
!%end

! A Fortran interface for the routine TEXT on VMS

record format strgf (short len, thing, integer adr)

external routine ftext alias "TEXT" (record (strgf) name str)
   string (255) ds
   byte name b
   integer I
   b == byte integer (str_adr)
   ds = ""
   ds = ds.to string (b) and b == b[1] for I = 1, 1, str_len
   edwin text (ds)
end

end of file