      SUBROUTINE PXZ10(XX,YY,XP,DEL,IP,SIZE,FMT,NFMT)
C
C  GENERAL SUPPORT ROUTINE FOR LINEAR ANNOTATION
C  OF X AND Y AXIS.
C
C	****************************************************
C	NOTE:  THE ORIGNAL WAHL PACKAGE CONTAINED CALLS TO
C	THE USER-DEFINED ROUTINE "CHAR".  THIS CONFLICTS WITH
C	THE VAX VMS FORTRAN INTRINSIC FUNCTION "CHAR".  THEREFORE
C	ALL CALLS TO THE USER-DEFINED ROUTINE HAVE BEEN CHANGED TO
C	"VCHAR."              CINDY COOPER, 23-JUL-81
C	****************************************************
C
      CHARACTER FMT(1),IFMT(20)
      CHARACTER*20 JFMT
      CHARACTER*20 AA
      DIMENSION XX(1),YY(1)
      INTEGER A
C
$INCLUDE:'pxz99.cmn'
C
      LOGICAL NOPS,NOTL
      DIMENSION XY(2),A(5),THTA(4)
      EQUIVALENCE(AA,A(1)),(IFMT(1),JFMT)
      DATA THTA/1.570796,4.71239,0.,3.14159/
C
      IF (SIZE.LE.0.) GO TO 120
      DO 5 I=1,20
      IFMT(I)=FMT(I)
      IF(FMT(I).EQ.')') GO TO 7
    5 CONTINUE
    7 XY(IYAXC)=YY(1)
      IXYP=MAX0(IABS(IP),1)
      IPSS=0
      THT=THTA(IAXTY)
      IF (XX(1).GT.XX(2)) GO TO 10
      TS=XX(1)
      TE=XX(2)
      GO TO 20
   10 TS=XX(2)
      TE=XX(1)
   20 NOPS=NFMT.LE.0
      NOTL=NOPS.OR.IP.LT.0
      IF (DEL.GT.0.0) GO TO 30
      NTCK=0
      GO TO 40
   30 ISS=TS/DEL
      IE=TE/DEL
      IF (TS.GE.0.0.OR.(TS.LT.0.0.AND.(ISS*DEL).EQ.TS))
     1     ISS=ISS+1
      IF (TE.LT.0.0.OR.(TE.GE.0.0.AND.(IE*DEL).EQ.TE))
     1     IE=IE-1
      NTCK=IE-ISS+1
      DMIN=1.5*SIZE*(TE-TS)/XP
      XYL2=TE-DMIN
   40 CONTINUE
      XOFF=-NFMT*SIZE
      SSB=2.0*SIZE
      XSSB=.333333*SSB
      XSSC=.333333*SIZE
   50 IS=ISS
C
C MIN TICK
C
      XY(IXAXC)=TS
      IF (NOPS) GO TO 60
      WRITE(AA,JFMT) TS
      CALL VCHAR(XY(1),XY(2),A,NFMT,2,SIZE,THT,XOFF,0.)
      XYL=TS+DMIN
   60 CALL VCHAR(XY(1),XY(2),IHYPH,1,1,SSB,THT,XSSB ,0.)
      IF (NTCK.LE.0) GO TO 100
C
C INTERMEDIATE TICK LOOP
C
      DO 90 K=1,NTCK
        XY(IXAXC)=IS*DEL
        IF (MOD(IS,IXYP).NE.0) GO TO 70
        S=SSB
        SO=XSSB
        IF (NOTL.OR.XY(IXAXC).LT.XYL.OR.
     1     XY(IXAXC).GT.XYL2) GO TO 80
        WRITE(AA,JFMT) XY(IXAXC)
        CALL VCHAR(XY(1),XY(2),A,NFMT,2,SIZE,THT,XOFF,0.)
        XYL=XY(IXAXC)+DMIN
        GO TO 80
   70   S=SIZE
        SO=XSSC
   80   CALL VCHAR(XY(1),XY(2),IHYPH,1,1,S,THT,SO,0.)
        IS=IS+1
   90   CONTINUE
C
C MAX TICK
C
  100 XY(IXAXC)=TE
      IF (NOPS) GO TO 110
      WRITE(AA,JFMT) TE
      CALL VCHAR(XY(1),XY(2),A,NFMT,2,SIZE,THT,XOFF,0.)
  110 CALL VCHAR(XY(1),XY(2),IHYPH,1,1,SSB,THT,XSSB ,0.)
      IF (IPSS.GT.0) GO TO 120
      NOPS=.TRUE.
      IPSS=1
      THT=THTA(IAXTY+1)
      XY(IYAXC)=YY(2)
      GO TO 50
  120 RETURN
      END


