C***********************************************************************
C   SUBROUTINE PCDF GENERATES A PRINTER PLOT OF THE SAMPLE CUMULATIVE
C   DISTRIBUTION FUNCTION(CDF).  INPUT IS THE ORDER STATISTICS, SAMPLE
C   SIZE AND UPPER AND LOWER SCALING LIMITS ON THE RANGE OF X(THE DATA).
C
C   CALLING ARGUMENTS:
C   N    THE SAMPLE SIZE
C   A    THE ARRAY CONTAINING THE ORDER STATISTICS
C   XU   UPPER SCALING LIMIT
C   XL   LOWER SCALING LIMIT
C   INDEX   IF EQUAL TO 1 THEN CALCULATE THE PLOT
C           IF EQUAL TO 2 THEN PRINT THE PLOT
C
C   THE PROGRAM GENERATES A PRINTER PLOT OF THE SAMPLE CDF IN A SPACE
C   100 CHARACTERS WIDE BY 50 CHARACTERS HIGH.  THE X-AXIS IS TRUNCATED
C   AT THE LIMITS XU, XL.  THE Y-AXIS RANGES FROM 0. TO 1.  THE ACTUAL
C   PROGRAMING ONLY REQUIRES THE CONSTRUCTION OF AN ARRAY 1 BY 100
C   WHICH IS ISOMORPHIC TO A SCALED SAMPLE CDF PLOTTED ON A SPACE
C   100 BY 50 CHARACTERS.
C   THIS VERSION HAS BEEN CHANGED SO THAT A 51 BY 100 ARRAY(PLOT) IS ALSO
C   GENERATED AS AN INTERNAL GRAPH.  THIS ARRAY IS RETURNED TO THE MAIN
C   PROGRAM SO IT MAY BE OVER-WRITTEN WITH THE PLOT OF A FITTED DISTRI-
C   BUTION THEN CALLING THIS ROUTINE WITH INDEX.EQ.2 WILL PRINT THIS
C   GRAPH.
C***********************************************************************
      SUBROUTINE PCDF (A,N,XL,XU,INDEX)
C***********************************************************************
C     DECLARATIONS
C***********************************************************************
      CHARACTER*1 PLOT(51,68)
      CHARACTER*1 TI(50)
      CHARACTER*1 LINE(100), AST, BLK, DASH, TIC
      DIMENSION A(1), NS(101), XAXIS(14), YAXIS(50)
C***********************************************************************
C     COMMON STATEMENTS
C***********************************************************************
      COMMON /SPLOT/ PLOT
C***********************************************************************
C     DATA STATEMENTS
C***********************************************************************
      DATA AST /'*'/, BLK /' '/, DASH /'-'/, TIC /'+'/
      DATA YAXIS /1.00,.98,.96,.94,.92,.90,.88,.86,.84,.82,.80,.78,.76,.
     1 74,.72,.70,.68,.66,.64,.62,.60,.58,.56,.54,.52,.50,.48,.46,.44,.4
     2 2,.40,.38,.36,.34,.32,.30,.28,.26,.24,.22,.20,.18,.16,.14,.12,.10
     3 ,.08,.06,.04,.02/
      DATA TI /' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
     1 'C','u','m','u','l','a','t','i','v','e',' ','P','r','o','b','a',
     2 'b','i','l','i','t','y',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
     3 ' ',' ',' ',' '/
      IF (INDEX.EQ.2) GO TO 220
C
C   GENERATE THE ARRAY NS.  NS(J) IS THE NUMBER OF SAMPLE POINTS LESS
C   THAN OR EQUAL TO XL+(J+.5)*DVAR,  WHERE DVAR (XU-XL)/100.
C
      DO 10 J=1,65
   10 NS(J)=0
      NS0=0
      DVAR=(XU-XL)/65.
      XJ=XL+.5*DVAR
      DO 20 I=1,N
      IF (A(I).GT.XJ) GO TO 30
   20 NS0=NS0+1
C
C   NS0 IS THE NUMBER OF SCALED SAMPLE POINTS LESS THAN OR EQUAL TO .5
C
   30 NS(1)=NS0
      DO 60 J=1,65
      XJ=XJ+DVAR
   40 IF (A(I).GT.XJ) GO TO 50
      NS(J)=NS(J)+1
      I=I+1
      IF (I.GT.N) GO TO 70
      GO TO 40
   50 NS(J+1)=NS(J)
   60 CONTINUE
   70 IF (J.GE.65) GO TO 90
      DO 80 M=J,65
   80 NS(M)=N
 90   YSCALE=50./REAL(N)
      DO 100 J=1,65
  100 NS(J)=(REAL(NS(J))*YSCALE)+.001
C
C   NS IS NOW COMPUTED. IT IS ISOMORPHIC TO A SCALED SAMPLE CDF.  NEXT
C   PRINT THIS CDF.
C
      DO 110 J=1,65
         LINE(J)=DASH
         IF (NS(J).EQ.50) LINE(J)=AST
  110    CONTINUE
      DO 120 J=5,65,5
  120    LINE(J)=TIC
      DO 130 J=1,65
  130    PLOT(1,J)=LINE(J)
C
C   THIS PRINTS THE TOP LINE OF THE PLOT. NEXT PRINT LINES 49 TO 1.
C
      DO 170 I=2,50
      K=50-I+1
      LINE(1)=BLK
      IF (NS(2).LT.K) GO TO 140
      IF ((NS(1).GE.K).AND.(NS0.LE.K)) LINE(1)=AST
  140 DO 150 J=2,65
      LINE(J)=BLK
      IF ((NS(J+1).LT.K).OR.(NS(J-1).GT.K)) GO TO 150
      IF (NS(J).LT.K) GO TO 150
      LINE(J)=AST
  150 CONTINUE
      DO 160 J=1,65
  160 PLOT(I,J)=LINE(J)
  170 CONTINUE
C   NOW PRINT THE BOTTOM LINES(X-AXIS AND SCALE)
C
      LINE(1)=DASH
      IF (NS(1).EQ.0) LINE(1)=AST
      DO 180 J=2,65
      LINE(J)=DASH
      IF (NS(J-1).EQ.0) LINE(J)=AST
  180 CONTINUE
      DO 190 J=5,65,5
  190 LINE(J)=TIC
      DO 200 J=1,65
  200 PLOT(51,J)=LINE(J)
      XAXIS(1)=XL
      XAXIS(14)=XU
      DVAR=(XU-XL)/13.
      DO 210 I=2,13
  210 XAXIS(I)=XL+REAL(I-1)*DVAR
      IF (INDEX.EQ.1) RETURN
C
C   ARRAY PLOT STORES THE GRAPH IN REVERSE LINE ORDER AND WITHOUT LABELS.
C   THUS LINE K OF THE GRAPH IS ROW 51-K OF 'PLOT', FOR K 0,...50.
C
  220 WRITE (6,240) YAXIS(1),TIC,(PLOT(1,K),K=1,65),DASH,YAXIS(1)
      DO 230 I=2,50
  230 WRITE (6,250) TI(I),YAXIS(I),DASH,(PLOT(I,K),K=1,65),
     1   DASH,YAXIS(I)
      WRITE (6,260) TIC,(PLOT(51,K),K=1,65),DASH
      WRITE (6,270) (XAXIS(I),I=1,13,2)
      WRITE (6,280) (XAXIS(I),I=2,14,2)
C***********************************************************************
C     FORMAT STATEMENTS
C***********************************************************************
      RETURN
C
  240 FORMAT (3X,F4.2,67A1,F4.2)
  250 FORMAT (1X,A1,1X,F4.2,67A1,F4.2)
  260 FORMAT (3X,'0.00',67A1,'0.00')
  270 FORMAT (3X,7G10.3)
  280 FORMAT (8X,7G10.3)
      END
