SUBROUTINE LINPLT (Y,NPTS,NCOLS,LP,KFLAG) C C LINPLT 1.2 A.N.S.I. STANDARD FORTRAN 77 JANUARY 1995 C C SUBROUTINE LINPLT PRINTS A LINE PLOT ON THE LINE PRINTER. C PLOTS Y(J) VERSUS J, ONE POINT PER LINE. C C J. P. CHANDLER, COMPUTER SCIENCE DEPARTMENT, C OKLAHOMA STATE UNIVERSITY C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C INPUT QUANTITIES .... Y(*),NPTS,NCOLS,LP C C OUTPUT QUANTITY ..... KFLAG C C C Y(*) -- THE ORDINATES Y(1),...,Y(NPTS) C C NPTS -- THE NUMBER OF Y(J) VALUES C C NCOLS -- THE NUMBER OF COLUMNS (PRINT POSITIONS) IN THE GRAPH C (SUGGESTION... USE NCOLS = 21 OR 51 OR 101) C C LP -- THE LOGICAL UNIT NUMBER OF THE PRINTER C C KFLAG -- A FLAG THAT RETURNS A CONDITION CODE AS FOLLOWS... C = 0 IF LINPLT EXECUTED NORMALLY, C =-1 IF NPTS .LT. 1, C =-2 IF NCOLS .LT. 3 OR NCOLS .GT. NCMAX (SEE BELOW), C =-3 IF DY .EQ. 0.0 (SEE BELOW), C =-4 IF JYZERO .LT. 1 OR JYZERO .GT. NCOLS (SEE BELOW) C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C INTEGER NPTS,NCOLS,LP,KFLAG, NCMAX,J,K,JYZERO,L,NCMU C REAL Y, RZERO,YMAX,YMIN,DY,R1P5,UNITR C CHARACTER*1 KHAXIS,KHLIN,KBLANK,KMINUS,KHPLUS,KHI,KHSYM,KHZERO C DIMENSION Y(NPTS),KHAXIS(101),KHLIN(101) C NCMAX=101 KBLANK=' ' KMINUS='-' KHPLUS='+' KHI='I' KHZERO='0' KHSYM='*' RZERO=0.0D0 UNITR=1.0D0 R1P5=1.5D0 C KFLAG=-1 IF(NPTS.LT.1) RETURN C KFLAG=-2 IF(NCOLS.LT.3 .OR. NCOLS.GT.NCMAX) RETURN C C COMPUTE YMIN AND YMAX. C YMIN=Y(1) YMAX=Y(1) DO 10 J=1,NPTS IF(Y(J).LT.YMIN) YMIN=Y(J) IF(Y(J).GT.YMAX) YMAX=Y(J) 10 CONTINUE C IF(YMIN.GT.RZERO) YMIN=RZERO IF(YMAX.LT.RZERO) YMAX=RZERO C IF(YMIN.GE.YMAX) THEN YMIN=-UNITR YMAX=UNITR ENDIF C C AT THIS POINT, EITHER YMIN .LE. 0.0 .LT. YMAX OR C YMIN .LT. 0.0 .LE. YMAX . C C THEREFORE, KFLAG=-3 OR KFLAG=-4 SHOULD BE IMPOSSIBLE. C NCMU=NCOLS-1 DY=(YMAX-YMIN)/NCMU KFLAG=-3 IF(DY.EQ.RZERO) RETURN C JYZERO=-YMIN/DY+R1P5 KFLAG=-4 IF(JYZERO.LT.1 .OR. JYZERO.GT.NCOLS) RETURN C WRITE(LP,20)YMIN,YMAX 20 FORMAT(/4X,'J',3X,'Y(J)',9X,'YMIN =',1PG15.7,7X,'YMAX =',G15.7/ * ' ---- -----------') C C PRINT THE Y AXIS. C DO 30 J=2,NCMU KHAXIS(J)=KMINUS 30 CONTINUE KHAXIS(1)=KHPLUS KHAXIS(NCOLS)=KHPLUS KHAXIS(JYZERO)=KHZERO WRITE(LP,40)(KHAXIS(J),J=1,NCOLS) 40 FORMAT(18X,101A1) C C LOOP OVER THE LINES IN THE GRAPH. C DO 70 J=1,NPTS C C SET UP THE LINE OF CHARACTERS AND THEN PRINT IT. C DO 50 K=1,NCOLS KHLIN(K)=KBLANK 50 CONTINUE KHLIN(JYZERO)=KHI K=(Y(J)-YMIN)/DY+R1P5 IF(K.GE.1 .AND. K.LE.NCOLS) KHLIN(K)=KHSYM WRITE(LP,60)J,Y(J),(KHLIN(L),L=1,NCOLS) 60 FORMAT(1X,I4,1PG12.4,1X,101A1) 70 CONTINUE C C PRINT ANOTHER Y AXIS AT THE BOTTOM OF THE GRAPH. C WRITE(LP,40)(KHAXIS(J),J=1,NCOLS) WRITE(LP,90)YMIN,YMAX 90 FORMAT(21X,'YMIN =',1PG15.7,7X,'YMAX =',G15.7) C KFLAG=0 RETURN C C END LINPLT C END