{GOTOXY UNIT FOR VISUAL 550 TERMINAL}
{$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 = 7;   {VECTOR LENGTH-1}
	  OFFSET = 1;
  
  VAR	  TELL: PACKED ARRAY [0..TELL_LENGTH_MINUS_1]
		 OF 0..255;    
	  X_1,X_2,Y_1,Y_2: INTEGER;   {DECIMAL DIGITS SENT TO TERMINAL}
  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;
    {CONVERT X-Y POSITION FOR V550 DIGIT INPUT}
       X_1:=(X+1)DIV 10;
       X_2:=(X+1)MOD 10;
       Y_1:=(Y+1)DIV 10;
       Y_2:=(Y+1)MOD 10;
       {ARRAY ELEMENTS OF TELL}
    TELL[0] := 27;	    {ESC}
    TELL[1] := 91;	   {[  }
    TELL[2] := Y_1+48;	   {1ST DIGIT Y POS}
    TELL[3] := Y_2+48;	   {2ND DIGIT Y POS}
    TELL[4] := 59;	   {ANSI SEPARATOR,;}
    TELL[5] := X_1+48;	   {1ST X POS}
    TELL[6] := X_2+48;	   {2ND X POS DIGIT}
    TELL[7] := 72;	   {TERMINATOR,H}
      
    
    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}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  