! Utility routines for EDWIN on EMAS

%external %integer %fn %spec IN STREAM
%external %integer %fn %spec OUT STREAM
%external %routine %spec TO CONSOLE (%integer ADDR, LEN)

%external %string (255) BUFF = ""
%external %integer VIEWING = 0

%external %routine %spec TTMODE (%integer STATE)
   ! Set terminal characteristics -
   ! 0 => Normal mode => SET MODE  U + L
   ! 1 => Graphics output mode => SET MODE  G  (subsystem not seeing it!)
   ! 2 => Graphics input mode  NOT YET IMPLEMENTED.

%external %routine FLUSH OUTPUT
   %if length(buff)#0 %start
       TO CONSOLE (ADDR(BUFF)+1, length(BUFF))
       BUFF = ""
   %finish
%end

%external %routine TTPUT (%integer I)
   BUFF = BUFF.TO STRING (I)
   FLUSH OUTPUT %if LENGTH(BUFF)>250
%end

%external %integer %fn TTREAD
   %integer I, S
   S = IN STREAM
   SELECT INPUT (0)
   READ CH (I)
   SELECT INPUT (S)
   %result = I
%end

%external %integer %fn TTGET
   %result = TTREAD;  ! For EMAS at present.
%end

%external %integer %fn MULDIV (%integer A, B, C)
   %long %integer AB, RES, REM

   %if C#0 %start
       AB = A * B
       RES = AB // C
       REM = AB - RES * C
       RES = RES + 1 %if REM > C//2
   %finish %else RES = 0
   %result = RES
%end

%end %of %file
