      SUBROUTINE ARCELL(XSTART,YSTART,ANGLE,ECCEN)
C
C          ------------------------------------------------
C          ROUTINE NO. ( 103)   VERSION (A8.6)    20:JUN:86
C          ------------------------------------------------
C
C          THIS DRAWS THE ARC OF AN ELLIPSE WHICH IS
C          CENTRED ON THE CURRENT PLOTTING POSITION.
C
C
C          <XSTART> IS THE STARTING X-COORDINATE,
C          <YSTART> IS THE STARTING Y-COORDINATE,
C          <ANGLE>  IS THE ARC ANGLE ANTI-CLOCKWISE
C                   FROM THE STARTING POSITION,
C          <ECCEN>  IS THE ECCENTRICITY OF THE ELLIPSE.
C
C
      REAL    RDATA(4)
      INTEGER IDATA(1)
C
      COMMON /T0ACON/ ANGCON
      COMMON /T0MAPP/ X1MAP0,X2MAP0,Y1MAP0,Y2MAP0
      COMMON /T0PPOS/ XPLOT0,YPLOT0
      COMMON /T0TRAC/ IPRINT
      COMMON /T0TRAR/ RTRAC1,RTRAC2,RTRAC3,RTRAC4
      COMMON /T3CONS/ PI
      COMMON /T3NBYR/ NBYTR
C
      DATA IDATA /0/
C
C
      RTRAC1= XSTART
      RTRAC2= YSTART
      RTRAC3= ANGLE
      RTRAC4= ECCEN
      IF (IPRINT.EQ.1) CALL G0MESG(45,4)
C
      RDATA(1)= XSTART-XPLOT0
      RDATA(2)= YSTART-YPLOT0
      RDATA(4)= ABS(ECCEN)
C
C          CALCULATE THE TRUE ROTATION ANGLE ALLOWING FOR
C          DIFFERENT SCALING ON THE X AND Y AXES.
C
      YCOORD= RDATA(2)*(X2MAP0-X1MAP0)/(Y2MAP0-Y1MAP0)
      ANG= ANGLE*ANGCON
      SINANG= SIN(ANG)
      COSANG= COS(ANG)
      ANUM= RDATA(4)*SINANG*(RDATA(1)*RDATA(1)+YCOORD*YCOORD)
      DENOM= COSANG*(RDATA(1)*RDATA(1)+
     &       YCOORD*YCOORD*RDATA(4)*RDATA(4))+
     &       SINANG*RDATA(1)*YCOORD*(RDATA(4)*RDATA(4)-1)
      RDATA(3)= ATAN2(ANUM,DENOM)
      IF ((RDATA(3)*ANG).LT.0.0)
     &     RDATA(3)= RDATA(3)+PI*SIGN(1.0,ANG)
    1   IF (ABS(RDATA(3)-ANG).LT.PI*0.5) GO TO 2
        RDATA(3)= RDATA(3)+PI*SIGN(1.0,ANG)
       GO TO 1
C
    2 CALL G3LINK(0,9,4*NBYTR,IDATA,RDATA)
C
      RETURN
      END
