home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / libs / matlab.lzh / MATLAB / MATLAB.LZH / Source / Plot / PLTPRP.FOR < prev    next >
Encoding:
Text File  |  1991-04-13  |  4.8 KB  |  165 lines

  1.       SUBROUTINE PLTPRP (X, Y, M, N, XXX, YYY, ICURS, TAG, NLINES,
  2.      .                  LINX, LINY, NPTS, IDEF)
  3.       IMPLICIT NONE
  4. C
  5. C ***      DETERMINES THE ORDERING AND NUMBER OF LINES ON THE PLOTS
  6. C
  7. C IDEF FLAG:
  8. C      = 1 INDICATES IMPLICIT X MODE (CALLED FROM XYPLT),
  9. C      = 2 INDICATES EXPLICIT X MODE (CALLED FROM XYPLT),
  10. C      = 3 INDICATES THAT THE PLOT IS TYPE REAL (R-THETA) (CALLED FROM POLPLT),
  11. C      = 4 INDICATES THE PLOT IS TYPE COMPLEX (X+IY) (CALLED FROM POLPLT).
  12. C
  13.       INCLUDE MATLAB$KOM:SIZEPARMS.INC
  14. C
  15.       INTEGER M, N, NLINES, LINX(LINES), LINY(LINES), NPTS, IDEF
  16.       REAL X(LINES,VECSIZ), Y(LINES,VECSIZ), XXX(M,N), YYY(M,N)
  17.       CHARACTER*8 ICURS
  18.       CHARACTER*4 TAG
  19. C
  20.       INCLUDE MATLAB$KOM:IOP.KOM
  21.       INCLUDE MATLAB$KOM:MATPLT.KOM
  22. C
  23.       CHARACTER*1 ANS
  24.       CHARACTER*4 ROWTAG, COLTAG
  25.       INTEGER INDEXY, INDEXX, I
  26. C
  27.       DATA ROWTAG /' ROW'/, COLTAG/' COL'/
  28. C
  29. C
  30. 6     CONTINUE
  31.       CALL CHKEND
  32.       CALL DSSTRN (' PLOTTING FROM A ', 0)
  33.       CALL DSWDI (M, 0)
  34.       CALL DSSTRN (' ROW BY ', 0)
  35.       CALL DSWDI (N, 0)
  36.       CALL DSSTRN (' COLUMN ARRAY.', 1)
  37.       CALL DSSTRN ('  SHOULD WE PLOT ALONG ROWS OR COLUMNS?', 1)
  38.       CALL DSCURS (ICURS)
  39.       READ (RTE, 15) ANS
  40. 15    FORMAT (A1)
  41.       IF (WIO.NE.0) WRITE (WIO, 16) ANS
  42. 16    FORMAT (1X, A1)
  43.       IF (ANS.NE.'R' .AND. ANS.NE.'r' .AND.
  44.      .    ANS.NE.'C' .AND. ANS.NE.'c') THEN
  45.         CALL DSERR ('ERROR. PLEASE ANSWER WITH ROWS OR COLUMNS')
  46.         GO TO 6
  47.       ENDIF
  48.       IF (ANS.EQ.'R' .OR. ANS.EQ.'r') THEN
  49.         TAG = ROWTAG
  50.         NPTS = N
  51.       ELSE
  52.         TAG = COLTAG
  53.         NPTS = M
  54.       ENDIF
  55. C
  56. C ***      FIND OUT HOW MANY PLOTS TO PREPARE
  57. 24    CONTINUE
  58.       CALL DSSTRN (' HOW MANY LINES WILL BE ENTERED ON THIS PLOT?', 1)
  59.       CALL DSCURS (ICURS)
  60.       CALL VALGET (0, NLINES, 'I')
  61.       IF (NLINES.GT.LINES) THEN
  62.         CALL DSERR ('ERROR. MAXIMUM LINES PER PLOT VALUE EXCEEDED.')
  63.         GO TO 24
  64.       ENDIF
  65. C
  66. C ***      ASK ABOUT EACH SET OF PLOTS
  67.       DO 100 INDEX = 1, NLINES
  68.         IF (IDEF.EQ.2 .OR. IDEF.EQ.3 .OR. IDEF.EQ.4) THEN
  69. 26        CONTINUE
  70.           CALL DSSTRN (' FOR LINE NUMBER ', 0)
  71.           CALL DSWDI (INDEX, 1)
  72.           CALL DSSTRN ('  ENTER THE', 0)
  73.           CALL DSSTRN (TAG, 0)
  74.           CALL DSSTRN (' NUMBER OF THE ', 0)
  75.           IF (IDEF.EQ.2) THEN
  76.             CALL DSSTRN ('X COMPONENT', 1)
  77.           ELSEIF (IDEF.EQ.3) THEN
  78.             CALL DSSTRN ('RADIAL COMPONENT', 1)
  79.           ELSEIF (IDEF.EQ.4) THEN
  80.             CALL DSSTRN ('COMPLEX VARIABLE', 1)
  81.           ENDIF
  82.           CALL DSCURS (ICURS)
  83. C
  84.           CALL VALGET (0, INDEXX, 'I')
  85.           IF (TAG.EQ.COLTAG .AND. (INDEXX.GT.N .OR. INDEXX.LT.1)) THEN
  86.             CALL MENUER (N)
  87.             GO TO 26
  88.           ELSEIF (TAG.EQ.ROWTAG .AND.
  89.      .            (INDEXX.GT.M .OR. INDEXX.LT.1)) THEN
  90.             CALL MENUER (M)
  91.             GO TO 26
  92.           ENDIF
  93.           LINX(INDEX) = INDEXX
  94.           IF (TAG.EQ.ROWTAG) THEN
  95.             DO 50 I = 1, N
  96.               X(INDEX,I) = XXX(INDEXX,I)
  97. 50          CONTINUE
  98.           ELSE
  99.             DO 52 I = 1, M
  100.               X(INDEX,I) = XXX(I,INDEXX)
  101. 52          CONTINUE
  102.           ENDIF
  103.         ELSE
  104.           LINX(INDEX) = 0
  105.           IF (TAG.EQ.ROWTAG) THEN
  106.             DO 53 I = 1, N
  107.               X(INDEX,I) = FLOAT(I)
  108. 53          CONTINUE
  109.           ELSE
  110.             DO 54 I = 1, M
  111.               X(INDEX,I) = FLOAT(I)
  112. 54          CONTINUE
  113.           ENDIF
  114.         ENDIF
  115.         IF (IDEF.EQ.1 .OR. IDEF.EQ.2 .OR. IDEF.EQ.3) THEN
  116. 56        CONTINUE
  117.           CALL DSSTRN (' FOR LINE NUMBER ', 0)
  118.           CALL DSWDI (INDEX, 1)
  119.           CALL DSSTRN ('  ENTER THE', 0)
  120.           CALL DSSTRN (TAG, 0)
  121.           CALL DSSTRN (' NUMBER OF THE ', 0)
  122.           IF (IDEF.EQ.1 .OR. IDEF.EQ.2) THEN
  123.             CALL DSSTRN ('Y COMPONENT', 1)
  124.           ELSE
  125.             CALL DSSTRN ('ANGULAR COMPONENT', 1)
  126.           ENDIF
  127.           CALL DSCURS (ICURS)
  128.           CALL VALGET (0, INDEXY, 'I')
  129.           IF (TAG.EQ.COLTAG .AND. (INDEXY.GT.N .OR. INDEXY.LT.1)) THEN
  130.             CALL MENUER (N)
  131.             GO TO 56
  132.           ELSEIF (TAG.EQ.ROWTAG .AND.
  133.      .            (INDEXY.GT.M .OR. INDEXY.LT.1)) THEN
  134.             CALL MENUER (M)
  135.             GO TO 56
  136.           ENDIF
  137.         ENDIF
  138.         LINY(INDEX) = INDEXY
  139.         IF (IDEF.NE.4) THEN
  140.           IF (TAG.EQ.ROWTAG) THEN
  141.             DO 80 I = 1, N
  142.               Y(INDEX,I) = XXX(INDEXY,I)
  143. 80          CONTINUE
  144.           ELSE
  145.             DO 82 I = 1, M
  146.               Y(INDEX,I) = XXX(I,INDEXY)
  147. 82          CONTINUE
  148.           ENDIF
  149.         ELSE
  150.           IF (TAG.EQ.ROWTAG) THEN
  151.             DO 90 I = 1, N
  152.               Y(INDEX,I) = YYY(INDEXY,I)
  153. 90          CONTINUE
  154.           ELSE
  155.             DO 92 I = 1, M
  156.               Y(INDEX,I) = YYY(I,INDEXY)
  157. 92          CONTINUE
  158.           ENDIF
  159.         ENDIF
  160. C
  161. 100   CONTINUE
  162. C
  163.       RETURN
  164.       END
  165.