{GOTOXY UNIT FOR VISUAL 550 TERMINAL IN VT52 33 LINE MODE}
{$U-}	  { ALWAYS include this compiler directive. }
UNIT GOTOXY;
INTERFACE
  PROCEDURE AGOTOXY(X,Y: INTEGER);
  
IMPLEMENTATION
USES {$U #4:ANSI.CODE} SCREENOPS (SC_TX_PORT, SC_PORT);
  PROCEDURE AGOTOXY;
  
  CONST	 TELL_LENGTH_MINUS_1 = 3;   {VECTOR LENGTH-1}
	  OFFSET =32;
  
  VAR	  TELL: PACKED ARRAY [0..TELL_LENGTH_MINUS_1]
		 OF 0..255;    
  BEGIN	  {RANGE CHECKING}
    IF X>79 THEN X:=79
       ELSE IF X<0 THEN X:=0;
    IF Y>32 THEN Y:=32
       ELSE IF Y<0 THEN Y:=0;
	
    WITH SC_PORT DO  {UPDATE SCREENOPS CURSOR}
      BEGIN
	CUR_X:=X-COL;
	CUR_Y:=Y-ROW;
      END;
       {ARRAY ELEMENTS OF TELL}
    TELL[0] := 27;	    {ESC}
    TELL[1] := 89;	   {Y  }
    TELL[2] := Y+32;	   {CHAR FOR  Y POS}
    TELL[3] := X+32;	   {CHAR FOR  X POS}
      
    
    UNITWRITE(1,TELL,TELL_LENGTH_MINUS_1 + 1)
  END {AGOTOXY};
END {UNIT GOTOXY}. 

{VISUAL 550 SHOULD BE RUN WITH PARITY ENABLED; ALSO 9600 BAUD IS PROBABLY
  MAX WITH P-SYSTEM; SET SAGE CONFIGURE TO ENABLE XON-XOFF; THE COMPLEX
  GRAPHICS CHECKING IN THE V-550 IMPLIES THAT PROTOCOL IS NECESSARY FOR
  PROPER EDITOR OPERATION}
                                                                                                                                                                                                                                                                                                                                                