! Utility routines for EDWIN on APM.

%const %integer DEL = 127

%external %routine SET IN %alias "ED_SET_IN" (%string(15) TERM)
   ! Ignored at present
%end

%external %routine SET OUT %alias "ED_SET_OUT" (%string(15) TERM)
   ! Ignored at present
%end

%external %routine TTMODE (%integer I)
   ! Ignored at present
%end

%own %string (255) BUFF=""

%external %routine FLUSH OUTPUT
   %integer A, L
   %if VIEWING>=0 %start
       A = OUT STREAM
       SELECT OUTPUT (VIEWING)
       PRINT STRING (BUFF)
       SELECT OUTPUT (A)
   %finish
   BUFF=""
%end

%external %routine TTPUT (%integer SYM)
   LENGTH(BUFF) = LENGTH(BUFF) + 1
   CHARNO (BUFF,LENGTH(BUFF)) = SYM
   FLUSH OUTPUT %if LENGTH(BUFF)>245
%end

%external %integer %fn TTGET
   %integer ST, SYM
   set terminal mode (no echo + single)
   ST = IN STREAM
   SELECT INPUT (0)
   PROMPT (TO STRING (DEL))
   READ SYMBOL (SYM)
   PROMPT ("Data: ")
   SELECT INPUT (ST)
   set terminal mode (0)
   %result = SYM
%end

%external %integer %fn TTREAD
   %integer ST, SYM
   set terminal mode (no echo + single)
   ST = IN STREAM
   SELECT INPUT (0)
   PROMPT (TO STRING (DEL))
   READ SYMBOL (SYM)
   PROMPT ("Data: ")
   SELECT INPUT (ST)
   set terminal mode (0)
   %result = SYM
%end

!%external %routine TEK INPUT (%integer %name A, B, C, D, E, %integer cursor)
!   %integer st, f
!   %string (255) old prompt
!   flush output
!   ST = in stream
!   select input (0)
!   old prompt = "Data: "
!   prompt (to string(27).to string (cursor))
!   read symbol (a) %until a>=' '
!   read symbol (b);   read symbol (c);   read symbol (d);   read symbol (e)
!   read symbol (f) %until f<' '
!   prompt (old prompt)
!   select input (st)
!%end

!%external %integer %fn MUL DIV (%integer A,B,C)
!   ! Calculates int(A*B/C) to double precision.
!   %result = a*b//c
!%end

%end %of %file
