SUBROUTINE PLOTSC(Y,X,CHAR,N,D,DMIN,DMAX)
C
C     PURPOSE--THIS SUBROUTINE YIELDS A ONE-PAGE PRINTER PLOT
C              OF Y(I) VERSUS X(I): 
C              1) WITH SPECIAL PLOT CHARACTERS; AND
C              2) WITH ONLY THOSE POINTS (X(I),Y(I)) PLOTTED
C                 FOR WHICH THE CORRESPONDING VALUE OF D(I) 
C                 IS BETWEEN THE SPECIFIED VALUES OF DMIN AND DMAX.
C
C              THE 'SPECIAL PLOTTING CHARACTER' CAPABILITY
C              ALLOWS THE DATA ANALYST TO INCORPORATE INFORMATION
C              FROM A THIRD VARIABLE (ASIDE FROM Y AND X) INTO
C              THE PLOT.
C              THE PLOT CHARACTER USED AT THE I-TH PLOTTING 
C              POSITION (THAT IS, AT THE COORDINATE (X(I),Y(I)))
C              WILL BE
C              1 IF CHAR(I) IS BETWEEN  0.5 AND  1.5
C              2 IF CHAR(I) IS BETWEEN  1.5 AND  2.5
C                .
C                .
C                .
C              9 IF CHAR(I) IS BETWEEN  8.5 AND  9.5
C              0 IF CHAR(I) IS BETWEEN  9.5 AND 10.5
C              A IF CHAR(I) IS BETWEEN 10.5 AND 11.5
C              B IF CHAR(I) IS BETWEEN 11.5 AND 12.5
C              C IF CHAR(I) IS BETWEEN 12.5 AND 13.5
C                .
C                .
C                .
C              W IF CHAR(I) IS BETWEEN 32.5 AND 33.5
C              X IF CHAR(I) IS BETWEEN 33.5 AND 34.5
C              Y IF CHAR(I) IS BETWEEN 34.5 AND 35.5
C              Z IF CHAR(I) IS BETWEEN 35.5 AND 36.5
C              X IF CHAR(I) IS ANY VALUE OUTSIDE THE RANGE
C                                       0.5 TO  36.5.
C              THE USE OF THE SUBSET DEFINTION VECTOR D
C              GIVES THE DATA ANALYST THE CAPABILITY OF
C              PLOTTING SUBSETS OF THE DATA,
C              WHERE THE SUBSET IS DEFINED
C              BY VALUES IN THE VECTOR D.
C
C     INPUT ARGUMENTS--Y      = THE SINGLE PRECISION VECTOR OF
C                               (UNSORTED OR SORTED) OBSERVATIONS
C                               TO BE PLOTTED VERTICALLY.
C                    --X      = THE SINGLE PRECISION VECTOR OF
C                               (UNSORTED OR SORTED) OBSERVATIONS
C                               TO BE PLOTTED HORIZONTALLY. 
C                    --CHAR   = THE SINGLE PRECISION VECTOR OF
C                               OBSERVATIONS WHICH CONTROL THE
C                               VALUE OF EACH INDIVIDUAL PLOT
C                               CHARACTER.
C                    --N      = THE INTEGER NUMBER OF OBSERVATIONS
C                               IN THE VECTOR Y.
C                    --D      = THE SINGLE PRECISION VECTOR 
C                               WHICH 'DEFINES' THE VARIOUS 
C                               POSSIBLE SUBSETS. 
C                    --DMIN   = THE SINGLE PRECISION VALUE
C                               WHICH DEFINES THE LOWER BOUND
C                               (INCLUSIVELY) OF THE PARTICULAR
C                               SUBSET OF INTEREST TO BE PLOTTED.
C                    --DMAX   = THE SINGLE PRECISION VALUE
C                               WHICH DEFINES THE UPPER BOUND
C                               (INCLUSIVELY) OF THE PARTICULAR
C                               SUBSET OF INTEREST TO BE PLOTTED.
C     OUTPUT--A ONE-PAGE PRINTER PLOT OF Y(I) VERSUS X(I),
C             WITH SPECIAL PLOT CHARACTERS,
C             AND FOR ONLY OF A SPECIFIED SUBSET OF THE DATA.
C     PRINTING--YES.
C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
C                   OF N FOR THIS SUBROUTINE.
C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
C     LANGUAGE--ANSI FORTRAN. 
C     COMMENT--FOR A GIVEN DUMMY INDEX I,
C              IF D(I) IS SMALLER THAN DMIN OR LARGER THAN DMAX,
C              THEN THE CORRESPONDING POINT (X(I),Y(I))
C              WILL NOT BE PLOTTED.
C            --VALUES IN THE VERTICAL AXIS VECTOR (Y),
C              THE HORIZONTAL AXIS VECTOR (X),
C              OR THE PLOT CHARACTER VECTOR (CHAR) WHICH ARE
C              EQUAL TO OR IN EXCESS OF 10.0**10 WILL NOT BE
C              PLOTTED.
C              THIS CONVENTION GREATLY SIMPLIFIES THE PROBLEM
C              OF PLOTTING WHEN SOME ELEMENTS IN THE VECTOR Y
C              (OR X, OR CHAR) ARE 'MISSING DATA', OR WHEN WE PURPOSELY
C              WANT TO IGNORE CERTAIN ELEMENTS IN THE VECTOR Y
C              (OR X, OR CHAR) FOR PLOTTING PURPOSES (THAT IS, WE DO NOT
C              WANT CERTAIN ELEMENTS IN Y (OR X, OR CHAR) TO BE
C              PLOTTED).
C              TO CAUSE SPECIFIC ELEMENTS IN Y (OR X, OR CHAR) TO BE
C              IGNORED, WE REPLACE THE ELEMENTS BEFOREHAND
C              (BY, FOR EXAMPLE, USE OF THE   REPLAC   SUBROUTINE)
C              BY SOME LARGE VALUE (LIKE, SAY, 10.0**10) AND
C              THEY WILL SUBSEQUENTLY BE IGNORED IN THE PLOTC
C              SUBROUTINE.
C     REFERENCES--FILLIBEN, 'STATISTICAL ANALYSIS OF INTERLAB
C                 FATIGUE TIME DATA', UNPUBLISHED MANUSCRIPT
C                 (AVAILABLE FROM AUTHOR)
C                 PRESENTED AT THE 'COMPUTER-ASSISTED DATA
C                 ANALYSIS' SESSION AT THE NATIONAL MEETING 
C                 OF THE AMERICAN STATISTICAL ASSOCIATION,
C                 NEW YORK CITY, DECEMBER 27-30, 1973.
C     WRITTEN BY--JAMES J. FILLIBEN
C                 STATISTICAL ENGINEERING LABORATORY (205.03)
C                 NATIONAL BUREAU OF STANDARDS
C                 WASHINGTON, D. C. 20234
C                 PHONE--301-921-2315
C     ORIGINAL VERSION--OCTOBER   1975. 
C     UPDATED         --NOVEMBER  1975. 
C     UPDATED         --FEBRUARY  1976. 
C     UPDATED         --FEBRUARY  1977. 
C
C---------------------------------------------------------------------
C
      CHARACTER*4 IGRAPH
      CHARACTER*4 IPLOTC
      CHARACTER*4 SBNAM1,SBNAM2
      CHARACTER*4 ALPH11,ALPH12,ALPH21,ALPH22,ALPH31,ALPH32 
      CHARACTER*4 ALPH41,ALPH42,ALPH51,ALPH52
      CHARACTER*4 BLANK,HYPHEN,ALPHAI,ALPHAX
      CHARACTER*4 ALPHAM,ALPHAA,ALPHAD,ALPHAN,EQUAL
C
      DIMENSION Y(1)
      DIMENSION X(1)
      DIMENSION D(1)
      DIMENSION CHAR(1)
      DIMENSION YLABLE(11)
      DIMENSION IPLOTC(37)
      COMMON /BLOCK1/ IGRAPH(55,130)
C
      DATA SBNAM1,SBNAM2/'PLOT','SC  '/ 
      DATA ALPH11,ALPH12/'FIRS','T   '/ 
      DATA ALPH21,ALPH22/'SECO','ND  '/ 
      DATA ALPH31,ALPH32/'THIR','D   '/ 
      DATA ALPH41,ALPH42/'FOUR','TH  '/ 
      DATA ALPH51,ALPH52/'FIFT','H   '/ 
      DATA BLANK,HYPHEN,ALPHAI,ALPHAX/' ','-','I','X'/
      DATA ALPHAM,ALPHAA,ALPHAD,ALPHAN,EQUAL/'M','A','D','N','='/
      DATA IPLOTC(1),IPLOTC(2),IPLOTC(3),IPLOTC(4),IPLOTC(5),
     1IPLOTC(6),IPLOTC(7),IPLOTC(8),IPLOTC(9),IPLOTC(10),
     1IPLOTC(11),IPLOTC(12),IPLOTC(13),IPLOTC(14),IPLOTC(15),
     1IPLOTC(16),IPLOTC(17),IPLOTC(18),IPLOTC(19),IPLOTC(20),
     1IPLOTC(21),IPLOTC(22),IPLOTC(23),IPLOTC(24),IPLOTC(25),
     1IPLOTC(26),IPLOTC(27),IPLOTC(28),IPLOTC(29),IPLOTC(30),
     1IPLOTC(31),IPLOTC(32),IPLOTC(33),IPLOTC(34),IPLOTC(35),
     1IPLOTC(36),IPLOTC(37)
     1/'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F',
     1'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V',
     1'W','X','Y','Z','X'/
C
      IPR=6
      CUTOFF=(10.0**10)-1000.0
C
C     CHECK THE INPUT ARGUMENTS FOR ERRORS
C
      WRITE(IPR,998)
      IF(N.LT.1)GOTO52
      GOTO54
   52 WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH41,ALPH42,SBNAM1,SBNAM2
      WRITE(IPR,20)N
      WRITE(IPR,5)
      RETURN
   54 CONTINUE
      IF(N.EQ.1)GOTO56
      GOTO58
   56 WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH41,ALPH42,SBNAM1,SBNAM2
      WRITE(IPR,22)N
      WRITE(IPR,5)
      RETURN
   58 CONTINUE
C
      HOLD=Y(1)
      DO60I=2,N
      IF(Y(I).NE.HOLD)GOTO62
   60 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH11,ALPH12,SBNAM1,SBNAM2
      WRITE(IPR,30)HOLD
      WRITE(IPR,5)
      RETURN
   62 CONTINUE
      HOLD=X(1)
      DO64I=2,N
      IF(X(I).NE.HOLD)GOTO66
   64 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH21,ALPH22,SBNAM1,SBNAM2
      WRITE(IPR,30)HOLD
      WRITE(IPR,5)
      RETURN
   66 CONTINUE
      HOLD=CHAR(1)
      DO68I=2,N
      IF(CHAR(I).NE.HOLD)GOTO70
   68 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,11) 
      WRITE(IPR,15)ALPH31,ALPH32,SBNAM1,SBNAM2
      WRITE(IPR,30)HOLD
      WRITE(IPR,5)
   70 CONTINUE
      HOLD=D(1)
      DO72I=2,N
      IF(D(I).NE.HOLD)GOTO74
   72 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,11) 
      WRITE(IPR,15)ALPH51,ALPH52,SBNAM1,SBNAM2
      WRITE(IPR,30)HOLD
      WRITE(IPR,5)
   74 CONTINUE
C
      DO76I=1,N
      IF(Y(I).LT.CUTOFF)GOTO78
   76 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH11,ALPH12,SBNAM1,SBNAM2
      WRITE(IPR,32) 
      WRITE(IPR,33)CUTOFF
      WRITE(IPR,5)
      RETURN
   78 CONTINUE
      DO80I=1,N
      IF(X(I).LT.CUTOFF)GOTO82
   80 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH21,ALPH22,SBNAM1,SBNAM2
      WRITE(IPR,32) 
      WRITE(IPR,33)CUTOFF
      WRITE(IPR,5)
      RETURN
   82 CONTINUE
      DO84I=1,N
      IF(CHAR(I).LT.CUTOFF)GOTO86
   84 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH31,ALPH32,SBNAM1,SBNAM2
      WRITE(IPR,32) 
      WRITE(IPR,33)CUTOFF
      WRITE(IPR,5)
      RETURN
   86 CONTINUE
      DO88I=1,N
      IF(D(I).LT.CUTOFF)GOTO90
   88 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH51,ALPH52,SBNAM1,SBNAM2
      WRITE(IPR,32) 
      WRITE(IPR,33)CUTOFF
      WRITE(IPR,5)
      RETURN
   90 CONTINUE
C
      DO92I=1,N
      IF(DMIN.LT.D(I).AND.D(I).LT.DMAX)GOTO94
   92 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,15)ALPH51,ALPH52,SBNAM1,SBNAM2
      WRITE(IPR,34) 
      WRITE(IPR,35)DMIN,DMAX
      WRITE(IPR,36) 
      WRITE(IPR,5)
      RETURN
   94 CONTINUE
C
      N2=0
      DO96I=1,N
      IF(Y(I).LT.CUTOFF.AND.X(I).LT.CUTOFF.AND.CHAR(I).LT.CUTOFF.AND. 
     1D(I).LT.CUTOFF)GOTO98
      GOTO96
   98 IF(DMIN.LT.D(I).AND.D(I).LT.DMAX)N2=N2+1
      IF(N2.GE.2)GOTO99
   96 CONTINUE
      WRITE(IPR,5)
      WRITE(IPR,10) 
      WRITE(IPR,18)ALPH11,ALPH12,ALPH21,ALPH22,ALPH31,ALPH32,
     1ALPH51,ALPH52 
      WRITE(IPR,19)SBNAM1,SBNAM2
      WRITE(IPR,40) 
      WRITE(IPR,41)N2
      WRITE(IPR,5)
      RETURN
   99 CONTINUE
C
    5 FORMAT(1H ,'**************************************************',
     1'********************') 
   10 FORMAT(1H ,'                   FATAL ERROR                    ')
   11 FORMAT(1H ,'               NON-FATAL DIAGNOSTIC               ')
   15 FORMAT(1H ,'THE ',A4,A4,' INPUT ARGUMENT TO THE ',A4,A4,
     1' SUBROUTINE')
   18 FORMAT(1H ,'THE ',A4,A4,', ',A4,A4,', ',A4,A4,', AND ',A4,A4)
   19 FORMAT(1H ,'INPUT ARGUMENTS TO THE ',A4,A4,' SUBROUTINE')
   20 FORMAT(1H ,'IS NON-NEGATIVE (WITH VALUE = ',I8,')')
   22 FORMAT(1H ,'HAS THE VALUE 1')
   30 FORMAT(1H ,'HAS ALL ELEMENTS = ',E15.8)
   32 FORMAT(1H ,'HAS ALL ELEMENTS IN EXCESS OF THE CUTOFF')
   33 FORMAT(1H ,'VALUE OF ',E15.8)
   34 FORMAT(1H ,'HAS ALL ELEMENTS OUTSIDE THE INTERVAL')
   35 FORMAT(1H ,'(',E15.8,',',E15.8,')',' AS DEFINED BY')
   36 FORMAT(1H ,'THE SIXTH  AND SEVENTH INPUT ARGUMENTS.') 
   40 FORMAT(1H ,'ARE SUCH THAT TOO MANY POINTS HAVE BEEN', 
     1' EXCLUDED FROM THE PLOT.')
   41 FORMAT(1H ,'ONLY ',I3,' POINTS ARE LEFT TO BE PLOTTED.')
C
C-----START POINT-----------------------------------------------------
C
C     DETERMINE THE VALUES TO BE LISTED ON THE LEFT VERTICAL AXIS
C
      DO200I=1,N
      IF(Y(I).GE.CUTOFF)GOTO200
      IF(X(I).GE.CUTOFF)GOTO200
      IF(CHAR(I).GE.CUTOFF)GOTO200
      IF(D(I).LT.DMIN)GOTO200 
      IF(D(I).GT.DMAX)GOTO200 
      YMIN=Y(I)
      YMAX=Y(I)
      GOTO250
  200 CONTINUE
  250 DO300I=1,N
      IF(Y(I).GE.CUTOFF)GOTO300
      IF(X(I).GE.CUTOFF)GOTO300
      IF(CHAR(I).GE.CUTOFF)GOTO300
      IF(D(I).LT.DMIN)GOTO300 
      IF(D(I).GT.DMAX)GOTO300 
      IF(Y(I).LT.YMIN)YMIN=Y(I)
      IF(Y(I).GT.YMAX)YMAX=Y(I)
  300 CONTINUE
      DO400I=1,9
      AIM1=I-1
      YLABLE(I)=YMAX-(AIM1/8.0)*(YMAX-YMIN)
  400 CONTINUE
C
C     DETERMINE THE VALUES TO BE LISTED ON THE BOTTOM HORIZONTAL AXIS 
C     DETERMINE XMIN, XMAX, XMID, X25 (=THE 25% POINT), AND 
C     X75 (=THE 75% POINT)
C
      DO600I=1,N
      IF(Y(I).GE.CUTOFF)GOTO600
      IF(X(I).GE.CUTOFF)GOTO600
      IF(CHAR(I).GE.CUTOFF)GOTO600
      IF(D(I).LT.DMIN)GOTO600 
      IF(D(I).GT.DMAX)GOTO600 
      XMIN=X(I)
      XMAX=X(I)
      GOTO650
  600 CONTINUE
  650 DO700I=1,N
      IF(Y(I).GE.CUTOFF)GOTO700
      IF(X(I).GE.CUTOFF)GOTO700
      IF(CHAR(I).GE.CUTOFF)GOTO700
      IF(D(I).LT.DMIN)GOTO700 
      IF(D(I).GT.DMAX)GOTO700 
      IF(X(I).LT.XMIN)XMIN=X(I)
      IF(X(I).GT.XMAX)XMAX=X(I)
  700 CONTINUE
      XMID=(XMIN+XMAX)/2.0
      X25=0.75*XMIN+0.25*XMAX 
      X75=0.25*XMIN+0.75*XMAX 
C
C     BLANK OUT THE GRAPH
C
      DO1100I=1,45
      DO1200J=1,109 
      IGRAPH(I,J)=BLANK
 1200 CONTINUE
 1100 CONTINUE
C
C     PRODUCE THE VERTICAL AXES
C
      DO1300I=3,43
      IGRAPH(I,5)=ALPHAI
      IGRAPH(I,109)=ALPHAI
 1300 CONTINUE
      DO1400I=3,43,5
      IGRAPH(I,5)=HYPHEN
      IGRAPH(I,109)=HYPHEN
 1400 CONTINUE
      IGRAPH(3,1)=EQUAL
      IGRAPH(3,2)=ALPHAM
      IGRAPH(3,3)=ALPHAA
      IGRAPH(3,4)=ALPHAX
      IGRAPH(23,1)=EQUAL
      IGRAPH(23,2)=ALPHAM
      IGRAPH(23,3)=ALPHAI
      IGRAPH(23,4)=ALPHAD
      IGRAPH(43,1)=EQUAL
      IGRAPH(43,2)=ALPHAM
      IGRAPH(43,3)=ALPHAI
      IGRAPH(43,4)=ALPHAN
C
C     PRODUCE THE HORIZONTAL AXES
C
      DO1500J=7,107 
      IGRAPH(1,J)=HYPHEN
      IGRAPH(45,J)=HYPHEN
 1500 CONTINUE
      DO1600J=7,107,25
      IGRAPH(1,J)=ALPHAI
      IGRAPH(45,J)=ALPHAI
 1600 CONTINUE
      DO1700J=20,107,25
      IGRAPH(1,J)=ALPHAI
      IGRAPH(45,J)=ALPHAI
 1700 CONTINUE
C
C     DETERMINE THE (X,Y) PLOT POSITIONS
C
      RATIOY=40.0/(YMAX-YMIN) 
      RATIOX=100.0/(XMAX-XMIN)
      DO1800I=1,N
      IF(Y(I).GE.CUTOFF)GOTO1800
      IF(X(I).GE.CUTOFF)GOTO1800
      IF(CHAR(I).GE.CUTOFF)GOTO1800
      IF(D(I).LT.DMIN)GOTO1800
      IF(D(I).GT.DMAX)GOTO1800
      MX=RATIOX*(X(I)-XMIN)+0.5
      MX=MX+7
      MY=RATIOY*(Y(I)-YMIN)+0.5
      MY=43-MY
      IARG=37
      IF(0.5.LT.CHAR(I).AND.CHAR(I).LT.36.5)IARG=CHAR(I)+0.5
      IGRAPH(MY,MX)=IPLOTC(IARG)
 1800 CONTINUE
C
C     WRITE OUT THE GRAPH
C
      DO2100I=1,45
      IP2=I+2
      IFLAG=IP2-(IP2/5)*5
      K=IP2/5
      IF(IFLAG.NE.0)WRITE(IPR,2105)(IGRAPH(I,J),J=1,109)
      IF(IFLAG.EQ.0)WRITE(IPR,2106)YLABLE(K),(IGRAPH(I,J),J=1,109)
 2100 CONTINUE
      WRITE(IPR,2107)XMIN,X25,XMID,X75,XMAX
C
 2105 FORMAT(1H ,20X,109A1)
 2106 FORMAT(1H ,F20.7,109A1) 
 2107 FORMAT(1H ,14X,F20.7,5X,F20.7,5X,F20.7,5X,F20.7,1X,F20.7)
  998 FORMAT(1H1)
C
      RETURN
      END