home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d2xx / d267 / matlab.lha / Matlab / matlab.zoo / matlab / src / plot.for < prev   
Encoding:
Text File  |  1989-06-20  |  84.7 KB  |  3,139 lines

  1. C
  2. C   AMIGA PLOT ROUTINE FOR MATLAB.  COPYRIGHT 1988,1989 BY JAMES LOCKER.
  3. C   ALL RIGHTS RESERVED.  THIS PROGRAM FILE MAY NOT BE USED IN WHOLE OR IN 
  4. C   PART FOR ANY COMMERCIAL APPLICATION WITHOUT THE PRIOR WRITTEN PERMISSION
  5. C   OF THE AUTHOR, EXCEPT WHEN SUPPLIED IN COMPILED FORM AS PART OF MATLAB.
  6. C   THIS FILE MAY BE FREELY REDISTRIBUTED SO LONG AS THIS NOTICE IS INTACT.  
  7. C
  8. C   MATLAB WRITTEN BY CLEVE MOLER OF UNIVERSITY OF NEW MEXICO.
  9. C          PUBLIC DOMAIN VERSION ENHANCED BY JAMES LOCKER, SOFTECH INC.
  10. C
  11. C   DIGLIB WRITTEN BY HAL BRAND.
  12. C          PORTED TO AMIGA BY DR. CRAIG WUEST OF LLNL
  13. C          DEBUGGED AND ENHANCED BY JAMES LOCKER, SOFTECH INC.
  14. C
  15. C
  16.       SUBROUTINE PLOT(LOC,M,N,INCTRL)
  17.       INTEGER LOC,M,N,INCTRL,BGRP
  18.       DIMENSION XXX(5005),YYY(5005)
  19. C
  20. C MATLAB SYSTEM VARIABLES
  21. C
  22.       DOUBLE PRECISION STKR(5005),STKI(5005)
  23.       INTEGER IDSTK(4,48),LSTK(48),MSTK(48),NSTK(48),VSIZE,LSIZE,BOT,TOP
  24.       INTEGER IDS(4,32),PSTK(32),RSTK(32),PSIZE,PT,PTZ
  25.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  26.       INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
  27.       INTEGER ALFA(52),ALFB(52),ALFL,CASE
  28.       INTEGER EPS(4),FLOPS(4),EYE(4),RAND(4)
  29.       INTEGER ALPHA(52),ALPHB(52)
  30.       COMMON /VSTK/ STKR,STKI,IDSTK,LSTK,MSTK,NSTK,VSIZE,LSIZE,BOT,TOP
  31.       COMMON /RECU/ IDS,PSTK,RSTK,PSIZE,PT,PTZ
  32.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  33.       COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
  34.       COMMON /ALFS/ ALFA,ALFB,ALFL,CASE
  35.  
  36. C
  37. C PLOT SPECIFIC VARIABLES
  38. C
  39.       INTEGER*4 VAR(4)
  40.       CHARACTER*4 ICURS(2)
  41.       CHARACTER*1 IZ(5000)
  42.       INTEGER*4 COLOR1,COLOR2,COLOR3,MARPLT,FGRP3D
  43.       REAL*4 LABE3D
  44.       CHARACTER*1 XLAB3D(80),YLAB3D(80),ZLAB3D(80)
  45.       DIMENSION XYLIM(2,6),CAMLOC(3)
  46.       INTEGER*4 FGRPXY(10),ISYMNO(10)
  47.       INTEGER*4 INTSYM(10),LINSYL(10),LINXYX(10),LINXYY(10)
  48.       DIMENSION SYMSZ(10)
  49.       LOGICAL ISECY,PLTST,SETBG,BNHERE
  50.       CHARACTER*1 XLABXY(80),YLABXY(80),SYLBXY(80),LABXY(80),ANS
  51.       CHARACTER*4 ROWTAG,COLTAG,TAG
  52.       INTEGER*4 WIDTH,HEIGHT,ICOLOR,Window,Screen,viewport
  53.  
  54.       INTEGER*4 WBST
  55.       COMMON /SYS/ WBST
  56. C
  57. C THE GLOBAL PLOT COMMON
  58. C
  59.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  60. C
  61. C THE 3D PLOT ROUTINE COMMON
  62. C
  63.       COMMON /PLT3D/ XLAB3D,YLAB3D,ZLAB3D,XYLIM,CAMLOC,MARPLT,FGRP3D
  64.      1,XST3D,YST3D,XFRC3D,YFRC3D,LABE3D
  65. C
  66. C THE XYPLOT ROUTINE COMMON
  67. C
  68.       COMMON /PLTXY/ XLABXY,YLABXY,SYLBXY,LABXY,IAXSPN,IPLTP1,IPLTP2
  69.      1,IPLTP3,NLINES,IDEFXY,XMINXY,YMINXY,XMAXXY,YMAXXY,FGRPXY,INTSYM
  70.      2,SYMSZ,ISYMNO,XLO,XHI,YLO,YHI,LINSYL,ISECY,ISYOPT,XSTXY,YSTXY
  71.      3,XFRCXY,YFRCXY,TAG,LINXYX,LINXYY,CHRSIZ,NPTS
  72. C
  73. C BARPLT VARIABLES
  74. C
  75.       INTEGER NOBARS,COLIST(8),FGRPBP(8)
  76.       REAL*4    XLOWBP,XHIBP,XSTBP,YSTBP,XFRCBP,YFRCBP,CHSZBP
  77.       DIMENSION FIMX(8)
  78.       CHARACTER*1 XLABBP(80),YLABBP(80),LABBP(80),SYLBBP(80)
  79.       LOGICAL ISCYBP,STATBP
  80.       INTEGER IMXC
  81.       REAL*4  FBAR,YLOWBP,YHIBP
  82. C
  83. C THE BARPLOT COMMON
  84.       COMMON /BAR/ FGRPBP,XLOWBP,XHIBP,IMXC,NOBARS,YLOWBP,YHIBP,
  85.      1 FBAR,XLABBP,YLABBP,LABBP,IMXPTS,IMYPTS,XSTBP,YSTBP,XFRCBP,
  86.      2 YFRCBP,CHSZBP,ISCYBP,IPLBP1,STATBP,IXCLBP,SYLBBP,SYLOBP,SYHIBP,
  87.      3 SYOPBP
  88. C
  89. C THE CONTOUR PLOT VARIABLES
  90. C
  91.       CHARACTER*1 XLABCP(80),YLABCP(80),LABCP(80)
  92.       DIMENSION CNLCP(20)
  93.       REAL LABECP,LBSZCP,XSTCP,YSTCP,XFRCCP,YFRCCP,X1CP,XMXCP,Y1CP
  94.       REAL YMXCP
  95.       INTEGER FGRPCP,IOPTCP,IOP2CP,ICNNCP
  96.       COMMON /PLTCP/ XLABCP,YLABCP,LABCP,FGRPCP,XSTCP,YSTCP
  97.      1 ,XFRCCP,YFRCCP,LABECP,X1CP,XMXCP,Y1CP,YMXCP,IOPTCP,IOP2CP
  98.      2 ,ICNNCP,CNLCP,LBSZCP
  99. C
  100. C THE POLAR PLOT VARIABLES
  101. C
  102.       DIMENSION LINXPP(10),LINYPP(10),SMSZPP(10),NTSMPP(10),ISMNPP(10)
  103.       DIMENSION LNSLPP(10)
  104.       INTEGER*4 FGRPPP(10),BGRPPP,LABEPP
  105.       CHARACTER*1 LABPP(80)
  106.       INTEGER*2 MODEPP(8)
  107.       REAL XSTPP,YSTPP,XFRCPP,YFRCPP
  108.       REAL RMAX
  109.       CHARACTER*4 TAGPP
  110.       INTEGER NLINPP
  111.       COMMON /PLTPP/ RMAX,LABPP,FGRPPP,XSTPP,YSTPP,LABEPP
  112.      1 ,XFRCPP,YFRCPP,MODEPP,LINXPP,LINYPP,IDEFPP,SMSZPP,NTSMPP
  113.      2 ,ISMNPP,LNSLPP,MODE1A,MODE1B,MODE2A,NPTSPP,BGRPPP,TAGPP,NLINPP
  114. C
  115. C PLOT SAVE VARIABLES
  116.       INTEGER PLTCNT,PLTMAX
  117.       CHARACTER*1 ISAV(10,720),QUOT,BUFFF(4,32)
  118.       CHARACTER*4 NAME(32)
  119.       CHARACTER*1 NAME2(128)
  120.       EQUIVALENCE (BUFFF,BUF),(NAME,NAME2)
  121. C
  122. C
  123. C THE PLTSAV COMMON
  124. C
  125.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  126. C
  127. C DIGLIB AND AMIGA SYSTEM VARIABLES, COMMONS, STRUCTURES
  128. C
  129.       EXTERNAL LEN
  130.       INCLUDE GRAPH.INC
  131.       INCLUDE EXEC.INC
  132.       INCLUDE INTUIT.INC
  133.       INCLUDE GCBIG.PRM
  134. C
  135.  
  136.       DATA (ICURS(I),I=1,2)/'Plot','  >>'/,QUOT/1H'/
  137.  
  138. C
  139. C ESTABLISH DEFAULTS
  140. C
  141.       COLOR1=Z'9B33336D'
  142.       COLOR2=Z'9B30306D'
  143.       COLOR3=Z'9B33326D'
  144.       BGRP = 0
  145.       SETBG = .FALSE.
  146.       IF(PLTMAX .EQ. 0) THEN
  147.        PLTCNT = 0
  148.        DO 2 I=1,10
  149.        DO 2 J=1,720
  150. 2      ISAV(I,J)=Z'20'
  151.        DO 3 I=1,10
  152. 3      IPLTYP(I)=0
  153.       ENDIF
  154. C
  155. C IF WE ARE INTERACTIVE, ISSUE STACK WARNING TO PREVENT CRASHES,
  156. C UNLESS WE STARTED FROM WORKBENCH OR HAVE BEEN HERE BEFORE.
  157. C
  158.       IF(.NOT. PLTST .AND. (INCTRL .EQ. 0) .AND. (WBST .EQ. 0)
  159.      1 .AND. .NOT. BNHERE) THEN
  160.       WRITE(WTE,10)COLOR3,COLOR1,ICURS,COLOR2
  161.       IF(WIO.NE.0) WRITE(WIO,10)COLOR3,COLOR1,ICURS,COLOR2
  162. 10    FORMAT(1X,"ENTERING PLOT."//,A4,"WARNING...HAS THE STACK SIZE
  163.      1 BEEN SET TO AT LEAST 100K?"/,4A4,$)
  164.       READ(WTE,11)ANS
  165. 11    FORMAT(A1)
  166.       IF(WIO .NE. 0) WRITE(WIO,12)ANS
  167. 12    FORMAT(1X,A1)
  168.       IF(ANS .NE. 'Y' .AND. ANS .NE. 'y') THEN
  169.        WRITE(WTE,901)
  170.        IF(WIO .NE. 0) WRITE(WIO,901)
  171.        RETURN
  172.       ENDIF
  173.       ENDIF
  174.       BNHERE = .TRUE.
  175. C
  176. C     START THE PLOTS
  177. C
  178.       ISRC=0
  179.       DO 70 J=LOC,LOC+N*M-1
  180.       XX = STKR(J)
  181.       XXX(J-LOC+1) = SNGL(XX)
  182.       XX = STKI(J)
  183.       YYY(J-LOC+1) = SNGL(XX)
  184. 70    CONTINUE
  185. C
  186. C SET THE PLOT SCREEN TITLE
  187. C
  188.       w_title = "Matlab Plots"//CHAR(0)
  189. C
  190. C SELECT THE PLOT DEVICE
  191. C
  192.       IF (.NOT. PLTST) CALL DEVSEL(1,NDUM,IERR)
  193. C
  194. C FIND OUT IF THIS IS A BATCH JOB USING SAVED PLOT DEFINITIONS
  195. C IF SO, EXTRACT THE SAVED FILE NAME AND SHIP IT TO LODFIL
  196. C
  197.       IF(INCTRL .EQ. 1)THEN
  198.       DO 45 I=1,128
  199. 45    NAME2(I)=Z'20'
  200.        ISRC = 2
  201.        DO 22 IK=1,32
  202.        IF(BUFFF(1,IK) .NE.QUOT)CYCLE
  203.        GOTO 27
  204. 22     CONTINUE
  205. 27     CONTINUE
  206.        DO 23 JK=IK+1,32
  207.        IF(BUFFF(1,JK) .EQ. QUOT)GOTO 24
  208.        NAME(JK-IK)=BUF(JK)
  209. 23     CONTINUE
  210. 24     CONTINUE
  211.        GOTO 800
  212.       ENDIF
  213. C
  214. 75    CONTINUE
  215.       ISRC = 0
  216.       CALL CHKEND
  217.       WRITE(WTE,80)
  218. 80    FORMAT(1X,//"PLEASE SELECT AN OPTION",/,
  219.      1" [1]  3-D PLOT",/,
  220.      2" [2]  X-Y PLOT",/,
  221.      3" [3]  POLAR  PLOT",/,
  222.      5" [4]  CONTOUR PLOT",/,
  223.      6" [5]  HISTOGRAM",/,
  224.      4" [6]  SET BACKGROUND COLOR",/,
  225.      7" [7]  PLOT BUFFER CONTROL",/,
  226.      8" [8]  READ PLOT FILE")
  227.       WRITE(WTE,81)COLOR1,ICURS,COLOR2
  228. 81    FORMAT(1X,
  229.      1"[9]  END THE CURRENT PLOT"/,
  230.      1 " [10] EXIT TO MATLAB",/,
  231.      2 4A4,$)
  232.       IF(WIO .NE. 0) THEN
  233.         WRITE(WIO,80)
  234.         WRITE(WIO,81)
  235.       ENDIF
  236.       CALL VALGET(0,ICHOICE,'I')
  237.       GOTO(100,200,300,500,600,400,700,800,899,900),ICHOICE
  238.       CALL MENUER(10)
  239.       GOTO 75
  240. 100   CALL D3PLOT(XXX,M,N,ISRC,IERR,IZ)
  241.       GOTO 75
  242. 200   CALL XYPLT(XXX,M,N,ISRC,IERR)
  243.       GOTO 75
  244. 300   CALL POLPLT(XXX,YYY,M,N,ISRC,IERR,IZ)
  245.       GOTO 75
  246. 400   CONTINUE
  247.       CALL CHBACK(ICURS)
  248.       GOTO 75
  249. 500   CONTINUE
  250.       CALL CONTUR(XXX,M,N,ISRC,IERR,IZ)
  251.       GOTO 75
  252. 600   CONTINUE
  253.       CALL BARPLT(XXX,M,N,ISRC,IERR)
  254.       GOTO 75
  255. 700   CONTINUE
  256.       IF(PLTCNT .EQ. 0) PLTCNT=PLTMAX
  257.       CALL PLCTRL(XXX,YYY,M,N,IZ)
  258.       GOTO 75
  259. 800   CONTINUE
  260.       CALL LODFIL(XXX,YYY,M,N,NAME,ISRC,IERR,IZ)
  261.       GOTO 75
  262. 899   IF (PLTST) THEN
  263.        PLTST = .FALSE.
  264.        CALL PLTFIN
  265.       ENDIF
  266.       GOTO 75
  267. 900   WRITE(WTE,901)
  268. 901   FORMAT(1X,"EXITING PLOT FUNCTION")
  269.       IF(WIO .NE. 0) WRITE(WIO,901)
  270.       GOTO 999
  271.  
  272. C
  273. C   FIND THE VARIABLE IN THE STACKS
  274. C
  275. 107   CONTINUE
  276. C      VARKEP = 0
  277. C      DO 345 J = 1,48
  278. C      DO 344 K = 1,4
  279. C      IF (VAR(K) .NE. IDSTK(K,J))GOTO 346
  280. C 344  CONTINUE
  281. C      VARKEP = J
  282. C 346  CONTINUE
  283. C 345  CONTINUE
  284. C      IF(VARKEP .EQ. 0) GOTO 90
  285. C      M=MSTK(VARKEP)
  286. C      N=NSTK(VARKEP)
  287. C      L=LSTK(VARKEP)
  288. C      WRITE(WTE,321)M,N,L
  289. C321   FORMAT(1X,"FOUND THE VARIABLE.  IT IS A ",I3," BY ",I3
  290. C     1," MATRIX LOCATED AT ",I4," IN STKR")
  291. C      MN=M*N-1
  292. C      DO 444 J=0,MN
  293. C      WRITE(WTE,322)STKR(L+J)
  294. C322   FORMAT(1X,"THE VALUES ARE: ",D10.3)
  295. C444   CONTINUE
  296. C      GOTO 91
  297. C90    WRITE(WTE,654)
  298. C654   FORMAT(1X,"FAILED TO FIND THE VARIABLE")
  299. C91    CONTINUE
  300. C
  301.  
  302. 999   CONTINUE
  303.       IF (.NOT. PLTST) CALL RLSDEV
  304.       RETURN
  305.       END
  306. C
  307. C THE 3D PLOTTING ROUTINE
  308. C
  309.       SUBROUTINE D3PLOT(XXX,M,N,INCTRL,IOCTRL,IZ)
  310.       INTEGER M,N
  311.       DIMENSION XXX(M,N)
  312.       INTEGER INCTRL,IOCTRL
  313.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  314.       INTEGER*4 COLOR1,COLOR2,COLOR3,FGRP3D,CHOICE,MARPLT
  315.       CHARACTER*1 XLAB3D(80),YLAB3D(80),ZLAB3D(80)
  316.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  317.  
  318. C
  319. C PLOT SPECIFIC VARIABLES
  320. C
  321.  
  322.       DIMENSION XYLIM(2,6),CAMLOC(3)
  323.       CHARACTER*1 IZ(5000)
  324.       LOGICAL PLTST,SETBG,BNHERE
  325.       CHARACTER*4 ICURS(2)
  326.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST
  327.      1,SETBG,BNHERE
  328.       REAL LABE3D,LABSIZ
  329.       COMMON /PLT3D/ XLAB3D,YLAB3D,ZLAB3D,XYLIM,CAMLOC,MARPLT,FGRP3D
  330.      1,XST3D,YST3D,XFRC3D,YFRC3D,LABE3D
  331. C
  332.       DATA (ICURS(I),I=1,2)/'3DPl','ot>>'/
  333. C
  334. C FIGURE OUT WHO CALLED US AND IF SO INDICATED JUMP DIRECTLY TO THE PLOT
  335. C
  336.       IF(INCTRL .NE. 0) GOTO 900
  337. C
  338. C SET UP THE DEFAULTS
  339. C
  340.       DO 25 I=1,80
  341.       XLAB3D(I)=Z'20'
  342.       YLAB3D(I)=Z'20'
  343. 25    ZLAB3D(I)=Z'20'
  344.       LABE3D=0
  345.       XST3D=0
  346.       YST3D=0
  347.       XFRC3D=1
  348.       YFRC3D=1
  349.       XYLIM(1,1)=0
  350.       XYLIM(2,1)=M
  351.       XYLIM(1,2)=0
  352.       XYLIM(2,2)=N
  353.       XYLIM(1,4)=0.0
  354.       XYLIM(2,4)=0.0
  355.       XYLIM(1,6)=XST3D
  356.       XYLIM(2,6)=YST3D
  357.       CAMLOC(1)=2000.
  358.       CAMLOC(2)=45
  359.       CAMLOC(3)=30
  360.       FGRP3D=1
  361.       IOCTRL=0
  362.       MARPLT = 0
  363.       XMAX = GSXLCM()
  364.       YMAX = GSYLCM()
  365.       XYLIM(1,5) = XMAX
  366.       XYLIM(2,5) = YMAX * .9
  367.       MN=M*N
  368. C      write(WTE,657)((XXX(J,K),J=1,M ),K=1,N)
  369. C657   FORMAT(1X,F10.2)
  370.  
  371.       CALL MINMAX(XXX,MN,ZMIN,ZMAX)
  372.       XYLIM(1,3)=ZMIN
  373.       XYLIM(2,3)=ZMAX
  374. C
  375. C DETERMINE THE CHOICES
  376. C
  377. C75    CONTINUE
  378.        CALL CHKEND
  379. C      WRITE(WTE,76)COLOR1,ICURS,COLOR2
  380. C76    FORMAT(1X,"USE THE DEFAULT VALUES?",/4A4,$)
  381. C      READ(RTE,80)ANS
  382. C80    FORMAT(A1)
  383. C      IF(ANS .EQ.'N' .OR. ANS .EQ. 'n') THEN
  384. C      GOTO 100
  385. C      ELSE IF (ANS .EQ. 'Y' .OR. ANS .EQ. 'y') THEN
  386. C      GOTO 900
  387. C      ELSE
  388. C      WRITE(WTE,87)COLOR3,COLOR2
  389. C      IF(WIO .NE. 0)WRITE(WIO,87)COLOR3,COLOR2
  390. C87    FORMAT(1X,A4,"ERROR. PLEASE ANSWER YES (Y) OR NO (N)",A4)
  391. C      GOTO 75
  392. C      ENDIF
  393. 100   WRITE(WTE,101)COLOR1,ICURS,COLOR2
  394.       CALL CHKEND
  395.       IF(WIO .NE. 0) WRITE(WIO,101)COLOR1,ICURS,COLOR2
  396. 101   FORMAT(1X,//"PLEASE CHOOSE AN OPTION"/,
  397.      1 " [1] CHOOSE PLOT LABELS"/,
  398.      2 " [2] CHOOSE PLOT VALUES"/,
  399.      3 " [3] CHOOSE VIEWER PERSPECTIVE"/,
  400.      4 " [4] CHOOSE HIDDEN LINES OPTIONS"/,
  401.      5 " [5] CHOOSE PLOT COLOR"/,
  402.      6 " [6] CHOOSE PLOT SIZE"/,
  403.      7 " [7] DO THE PLOT"/,
  404.      8 " [8] END THE CURRENT PLOT"/,
  405.      8 " [9] EXIT 3D PLOT"/,
  406.      94A4,$)
  407.       CALL VALGET(0,CHOICE,'I')
  408.       GOTO(200,300,400,500,700,800,900,899,990),CHOICE
  409.       CALL MENUER(9)
  410.       GOTO 100
  411. C
  412. C  SELECT THE LABELS
  413. C
  414. 200   CONTINUE
  415.       CALL CHKEND
  416.       WRITE(WTE,201)COLOR1,ICURS,COLOR2
  417. 201   FORMAT(1X,//"ENTER THE X AXIS LABEL"/,4A4,$)
  418.       IF(WIO .NE. 0)WRITE(WIO,201)COLOR1,ICURS,COLOR2
  419.       CALL GETLAB(XLAB3D)
  420.       WRITE(WTE,202)COLOR1,ICURS,COLOR2
  421.       IF(WIO .NE. 0)WRITE(WIO,202)COLOR1,ICURS,COLOR2
  422. 202   FORMAT(1X,//"ENTER THE Y AXIS LABEL"/,4A4,$)
  423.       CALL GETLAB(YLAB3D)
  424.       WRITE(WTE,203)COLOR1,ICURS,COLOR2
  425.       IF(WIO .NE. 0) WRITE(WIO,203)COLOR1,ICURS,COLOR2
  426.       CALL GETLAB(ZLAB3D)
  427. 203   FORMAT(1X,//"ENTER THE Z AXIS LABEL"/,4A4,$)
  428.       WRITE(WTE,204)COLOR1,ICURS,COLOR2
  429.       IF(WIO .NE. 0) WRITE(WIO,204)COLOR1,ICURS,COLOR2
  430. 204   FORMAT(1X,//"ENTER THE SIZE OF THE LABELS (CM)"/,A4
  431.      1 ,4A4,$)
  432.       CALL VALGET(LABSIZ,0,'F')
  433.       IF(LABSIZ .NE. 0) LABE3D = LABSIZ
  434.       GOTO 100
  435. C
  436. C SELECT THE DATA
  437. C
  438. 300   CONTINUE
  439.       CALL CHKEND
  440.       WRITE(WTE,301)COLOR1,ICURS,COLOR2
  441. 301   FORMAT(1X,"ENTER THE MINIMUM VALUE OF X"/,4A4,$)
  442.       IF(WIO .NE. 0)WRITE(WIO,301)COLOR1,ICURS,COLOR2
  443.       CALL VALGET(XYLIM(1,1),0,'F')
  444.       WRITE(WTE,302)COLOR1,ICURS,COLOR2
  445. 302   FORMAT(1X,"ENTER THE MAXIMUM VALUE OF X"/,4A4,$)
  446.       IF(WIO .NE. 0)WRITE(WIO,302)COLOR1,ICURS,COLOR2
  447.       CALL VALGET(XYLIM(2,1),0,'F')
  448.       WRITE(WTE,303)COLOR1,ICURS,COLOR2
  449. 303   FORMAT(1X,"ENTER THE MINIMUM VALUE OF Y"/,4A4,$)
  450.       IF(WIO .NE. 0)WRITE(WIO,303)COLOR1,ICURS,COLOR2
  451.       CALL VALGET(XYLIM(1,2),0,'F')
  452.       WRITE(WTE,304)COLOR1,ICURS,COLOR2
  453. 304   FORMAT(1X,"ENTER THE MAXIMUM VALUE OF Y"/,4A4,$)
  454.       IF(WIO .NE. 0)WRITE(WIO,304)COLOR1,ICURS,COLOR2
  455.       CALL VALGET(XYLIM(2,2),0,'F')
  456.       WRITE(WTE,305)COLOR1,ICURS,COLOR2
  457. 305   FORMAT(1X,"ENTER THE X/Z LENGTH RATIO"/,4A4,$)
  458.       IF(WIO .NE. 0)WRITE(WIO,305)COLOR1,ICURS,COLOR2
  459.       CALL VALGET(XYLIM(1,4),0,'F')
  460.       WRITE(WTE,306)COLOR1,ICURS,COLOR2
  461. 306   FORMAT(1X,"ENTER THE Y/Z LENGTH RATIO"/,4A4,$)
  462.       IF(WIO .NE. 0)WRITE(WIO,306)COLOR1,ICURS,COLOR2
  463.       CALL VALGET(XYLIM(2,4),0,'F')
  464.       GOTO 100
  465. C
  466. C DEFINE THE VIEWER PERSPECTIVE
  467. C
  468. 400   CONTINUE
  469.       CALL CHKEND
  470.       WRITE(WTE,430)COLOR1,ICURS,COLOR2
  471.       IF(WIO .NE. 0) WRITE(WIO,430)COLOR1,ICURS,COLOR2
  472. 430   FORMAT(1X,"ENTER THE DISTANCE OF THE OBSERVER FROM THE"/,
  473.      1 "CENTER OF THE PICTURE (SAME UNITS AS Z)"/,4A4,$)
  474.       CALL VALGET(CAMLOC(1),0,'F')
  475.       WRITE(WTE,431)COLOR1,ICURS,COLOR2
  476.       IF(WIO .NE. 0) WRITE(WIO,431)COLOR1,ICURS,COLOR2
  477. 431   FORMAT(1X,"ENTER THE ANGLE BETWEEN THE VIEWER AND THE"/
  478.      1 ," X-AXIS"/,4A4,$)
  479.       CALL VALGET(CAMLOC(2),0,'F')
  480.       WRITE(WTE,432)COLOR1,ICURS,COLOR2
  481.       IF(WIO .NE. 0) WRITE(WIO,432)COLOR1,ICURS,COLOR2
  482. 432   FORMAT(1X,"ENTER THE ANGLE BETWEEN THE VIEWER AND THE"/
  483.      1," X-Z PLANE"/,4A4,$)
  484.       CALL VALGET(CAMLOC(3),0,'F')
  485.       GOTO 100
  486. C
  487. C CHOOSE THE HIDDEN LINE DRAWING MODE
  488. C
  489. 500   CONTINUE
  490.       CALL CHKEND
  491. 507   WRITE(WTE,508)COLOR1,ICURS,COLOR2
  492.       IF(WIO .NE. 0) WRITE(WIO,508)COLOR1,ICURS,COLOR2
  493. 508   FORMAT(1X,//"SELECT THE DRAWING MODE"/,
  494.      1 " [1] DRAW ALL LINES, HIDDEN OR NOT"/,
  495.      2 " [2] SUPPRESS HIDDEN LINES, BUT DRAW TOP AND BOTTOM"/,
  496.      3 "     OF THE SURFACE"/,
  497.      4 " [3] SUPPRESS HIDDEN LINES, AS WELL AS ALL LINES SHOWING THE"/,
  498.      5 "     BOTTOM OF THE SURFACE"/,
  499.      6 4A4,$)
  500.       CALL VALGET(0,MARPLT,'I')
  501.       GOTO (515,515,525)MARPLT
  502.       CALL MENUER(3)
  503.       GOTO 507
  504. 515   MARPLT = MARPLT - 1
  505. 525   CONTINUE
  506.  
  507.       GOTO 100
  508. C
  509. C SELECT THE PLOT COLOR
  510. C
  511. 700   CONTINUE
  512.       CALL CHKEND
  513.       CALL SETFG(FGRP3D,ICURS)
  514.       GOTO 100
  515. C
  516. C SELECT THE PLOT SIZE
  517. C
  518. 800   CONTINUE
  519. C
  520.       CALL CHKEND
  521.       CALL MAKSIZ(ICURS,XST3D,XFRC3D,YST3D,YFRC3D)
  522.       XYLIM(1,6)=XST3D*XMAX
  523.       XYLIM(2,6)=YST3D*YMAX
  524.       XYLIM(1,5)=XFRC3D*XMAX
  525.       XYLIM(2,5)=YFRC3D*YMAX
  526.       GOTO 100
  527. 899   IF (PLTST) THEN
  528.        PLTST = .FALSE.
  529.        CALL PLTFIN
  530.       ENDIF
  531.       GOTO 100
  532. C
  533. C DO THE PLOT
  534. C
  535. 900   CONTINUE
  536.       CALL CHKEND
  537. C
  538. C SAVE THE PLOT SETTINGS, UNLESS WE ARE WORKING FROM A SAVED FILE
  539. C
  540.       IF(INCTRL .EQ. 0) CALL SAVPLT(1)
  541.       IF (.NOT. PLTST)THEN
  542.        PLTST = .TRUE.
  543.        CALL BGNPLT
  544.       ENDIF
  545.       IF(SETBG) THEN
  546.        SETBG = .FALSE.
  547.        CALL SETBAK(BGRP)
  548.       ENDIF
  549.       CALL GSCOLR(FGRP3D,IERR)
  550. C       DO 940 I=1,6
  551. C       WRITE(WTE,950)XYLIM(1,I),XYLIM(2,I)
  552. C 950   FORMAT(1X,2F10.3)
  553. C 940   CONTINUE
  554. C       WRITE(WTE,960)(CAMLOC(I),I=1,3)
  555. C 960   FORMAT(1X,"CAMLOC:",3F8.2)
  556. C      WRITE(WTE,962)M,N,MARPLT
  557. C962   FORMAT(3I4)
  558.       CALL PURJOY(XXX,M,IZ,M,N,CAMLOC,XYLIM,XLAB3D,YLAB3D,
  559.      *ZLAB3D,LABE3D,MARPLT)
  560.       IF(INCTRL .NE. 0)RETURN
  561.       GOTO 100
  562. 990   CONTINUE
  563.       RETURN
  564.       END
  565. C
  566. C  ROUTINE TO BRING IN AN ASCII STRING.  IF A BLANK LINE IS ENTERED,
  567. C  THE INPUT STRING IS UNCHANGED.
  568. C
  569.       SUBROUTINE GETLAB(LAB1)
  570.       CHARACTER*1 LAB1(80),LAB(80),RTN
  571.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  572.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  573.       DATA RTN/Z'0A'/
  574.  
  575.       DO 2 I=1,80
  576. 2     LAB(I)=Z'20'
  577.       INDEX = 80
  578.       READ(RTE,4)(LAB(I),I=1,80)
  579. 4     FORMAT(80A1)
  580. C2     WRITE(WTE,13)(LAB(I),I=1,80)
  581. C13    FORMAT(1X,80Z2)
  582.       IF(WIO .NE. 0) WRITE(WIO,6)(LAB(I),I=1,80)
  583. 6     FORMAT(1X,80A1)
  584.       LABTAG=0
  585.       DO 23 I=1,80
  586.       IF(LAB(I) .NE. ' ') THEN
  587.        LABTAG=1
  588.        GOTO 24
  589.       ENDIF
  590. 23    CONTINUE
  591. 24    CONTINUE
  592.       IF(LABTAG .NE. 0) THEN
  593.        DO 7 I=1,80
  594. 7      LAB1(I)=LAB(I)
  595. 8      CONTINUE
  596.        IF (LAB1(INDEX) .NE. ' ' .OR. INDEX .LE. 0) GOTO 9
  597.           INDEX = INDEX - 1
  598.        GOTO 8
  599. 9       LAB1(INDEX+1)=Z'00'
  600.       ENDIF
  601. C      WRITE(WTE,13)(LAB1(I),I=1,80)
  602.       RETURN
  603.       END
  604. C
  605. C ROUTINE TO BRING IN A NUMERIC VALUE IN FREE FORMAT
  606. C X IS THE FLOATING POINT VERSION WHICH IS RETURNED
  607. C INTEG IS THE INTEGER VERSION WHICH IS RETURNED
  608. C IVAL IS A CONTROL CODE TELLING WHETHER OR NOT A FLOATING POINT VALUE
  609. C  IS EXPECTED.
  610. C
  611.       SUBROUTINE VALGET(X,INTEG,IVAL)
  612.       REAL X
  613.       INTEGER INTEG
  614.       CHARACTER*1,IVAL,A(80),NULL
  615.       INTEGER INTX(80)
  616.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  617.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  618.       DATA NULL/Z'00'/
  619. C
  620.       DO 40 I=1,80
  621. 40    A(I)=Z'20'
  622. C
  623. C CHECK IF THE CURRENT PLOT IS DONE
  624. C THIS IS MERELY THE MOST CONVENIENT PLACE TO DO IT
  625. C
  626.       CALL CHKEND
  627. C
  628. C GET THE TERMINAL INPUT STRING
  629. C
  630.       CALL GETLAB(A)
  631. C
  632. C TEST FOR A BLANK INPUT LINE
  633. C IF SO, RETURN (DON'T CHANGE THE INPUT VALUE)
  634. C
  635.       DO 1 I = 1,80
  636.       IF(A(I) .NE. ' ')GOTO 2
  637. 1     CONTINUE
  638.       RETURN
  639. 2     CONTINUE
  640.       INTEG = 0
  641.       X = 0
  642. C
  643. C TEST FOR LEADING BLANKS AND LOOK FOR A NEGATIVE SIGN
  644. C
  645. C      WRITE(WTE,342)(A(I),I=1,80)
  646. C342   FORMAT(1X,80Z2)
  647.       ICOUNT = 1
  648.       ISIGN = 1
  649. 3     CONTINUE
  650.       IF(A(ICOUNT) .EQ. ' ' .AND. ICOUNT .LE. 80) THEN
  651.        ICOUNT = ICOUNT + 1
  652. C       WRITE(WTE,657)
  653. C657    FORMAT(1X,'FOUND A LEADING BLANK')
  654.        GOTO 3
  655.       ENDIF
  656.       IF(A(ICOUNT) .EQ. '-') THEN
  657.        ISIGN = -1
  658.        ICOUNT = ICOUNT + 1
  659. C       WRITE(WTE,546)ICOUNT
  660. C546    FORMAT(1X,'FOUND A NEGATIVE SIGN',I2)
  661.       ENDIF
  662.       ISTART=ICOUNT
  663. C
  664. C NOW RESOLVE THE INTEGER PORTION OF THE NUMBER.  STOP AT END OF STRING
  665. C OR AT A DECIMAL POINT.
  666. C
  667. 4     CONTINUE
  668.       IF(A(ICOUNT) .NE. '.' .AND. A(ICOUNT) .NE. NULL .AND. ICOUNT
  669.      1   .LE.80) THEN
  670.        INTX(ICOUNT) = ICHAR(A(ICOUNT))-48
  671.        ICOUNT = ICOUNT+1
  672.        GOTO 4
  673.       ENDIF
  674.       ICOUNT = ICOUNT-1
  675. C      WRITE(WTE,7)ICOUNT
  676. C7     FORMAT(1X,'ICOUNT=',I2)
  677.       DO 5 J=ISTART,ICOUNT
  678. 5      INTEG = INTEG+INTX(J) * 10**(ICOUNT-J)
  679.       INTEG=INTEG*ISIGN
  680. C      WRITE(WTE,10)INTEG
  681. C10    FORMAT(1X,I6)
  682. C
  683. C SEE IF THIS IS NUMBER HAS A FRACTIONAL PORTION.  IF SO,
  684. C RESOLVE ITS VALUE AND RETURN IT AS PART OF THE FLOATING
  685. C POINT NUMBER.
  686. C
  687.       ICOUNT = ICOUNT+1
  688.       FRAC = 0.
  689.       IF(IVAL .EQ. 'F' .AND. A(ICOUNT) .EQ. '.') THEN
  690.        ICOUNT = ICOUNT+1
  691.        IFCOUN = ICOUNT
  692. 20     CONTINUE
  693.        IF(A(ICOUNT) .NE. NULL .AND. ICOUNT .LE. 80) THEN
  694.         INTX(ICOUNT) = ICHAR(A(ICOUNT))-48
  695.         ICOUNT = ICOUNT+1
  696.         GOTO 20
  697.        ENDIF
  698.        ICOUNT = ICOUNT - 1
  699.        DO 25 J=IFCOUN,ICOUNT
  700.         EX = FLOAT(IFCOUN-J-1)
  701.         BAS = FLOAT(INTX(J))
  702. 25      FRAC = FRAC+ BAS * 10.** EX
  703.       ENDIF
  704.       FSIGN = ISIGN
  705.       FRAC = FRAC*FSIGN
  706.       X=FLOAT(INTEG)+FRAC
  707.  
  708. C      WRITE(WTE,30)X,FRAC
  709. C30    FORMAT(1X,'X=',2F10.4)
  710.       RETURN
  711.       END
  712.  
  713. C
  714. C ERROR ROUTINE FOR WRONG PLOT COLOR SELECTION
  715. C
  716.       SUBROUTINE PENERR
  717.       INTEGER*4 COLOR1,COLOR2,COLOR3
  718.       LOGICAL PLTST,SETBG,BNHERE
  719.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  720.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  721.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  722.       WRITE(WTE,5)COLOR3,COLOR2
  723. 5     FORMAT(1X,A4,"ERROR.  COLOR NUMBER MUST BE BETWEEN 0 AND 15",A4,/)
  724.       IF(WIO .NE. 0)WRITE(WIO,5)COLOR3,COLOR2
  725.       RETURN
  726.       END
  727. C
  728. C  ROUTINE TO SET RASTPORT BACKGROUND COLOR
  729. C
  730.       SUBROUTINE SETBAK(BGRP)
  731.       INTEGER*4 BGRP,amiga,Window,Screen,viewport,WIDTH,HEIGHT,ICOLOR
  732.       EXTERNAL LEN
  733.       INCLUDE WINDOW.INC
  734.       INCLUDE GRAPH.INC
  735.       INCLUDE EXEC.INC
  736.       INCLUDE INTUIT.INC
  737. C
  738. C  DIGLIB WON'T LET US SET THE BACKGROUND IN THE AMIGA RASTPORT.  THEREFORE
  739. C  WE MUST MAKE A DIRECT CALL TO AMIGA GRAPHICS ROUTINES HERE.  IF PORTED TO
  740. C  ANOTHER MACHINE, THIS SEGMENT MUST BE DEFEATED.  I MIGHT FIX DIGLIB LATER.
  741. C          J. LOCKER 11/29/88
  742. C
  743. C      write(WTE,967)BGRP
  744. C967   format(1x,'here I am',i3)
  745.        CALL amiga(SetRast,long(Window+wd_RPort),BGRP)
  746.        RETURN
  747.        END
  748. C
  749. C THE GENERAL X-Y PLOTTING ROUTINE
  750. C
  751.       SUBROUTINE XYPLT(XXX,M,N,INCTRL,IOCTRL)
  752.       INTEGER M,N
  753.       DIMENSION XXX(M,N)
  754.       INTEGER INCTRL,IOCTRL
  755.       DIMENSION X(10,500),Y(10,500),XPL(500),YPL(500)
  756.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  757.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP,FGRPXY(10),ISYMNO(10)
  758.       INTEGER*4 INTSYM(10),LINSYL(10),LINXYX(10),LINXYY(10)
  759.       DIMENSION SYMSZ(10)
  760.       LOGICAL ISECY
  761.       CHARACTER*1 XLABXY(80),YLABXY(80),SYLBXY(80),LABXY(80),ANS
  762.       CHARACTER*4 ROWTAG,COLTAG,TAG,ICURS(2)
  763.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  764. C
  765. C PLOT SPECIFIC VARIABLES
  766. C
  767.       LOGICAL PLTST,SETBG,BNHERE
  768.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  769.       COMMON /PLTXY/ XLABXY,YLABXY,SYLBXY,LABXY,IAXSPN,IPLTP1,IPLTP2
  770.      1,IPLTP3,NLINES,IDEFXY,XMINXY,YMINXY,XMAXXY,YMAXXY,FGRPXY,INTSYM
  771.      2,SYMSZ,ISYMNO,XLO,XHI,YLO,YHI,LINSYL,ISECY,ISYOPT,XSTXY,YSTXY
  772.      3,XFRCXY,YFRCXY,TAG,LINXYX,LINXYY,CHRSIZ,NPTS
  773.  
  774.       DATA ROWTAG/' ROW'/,COLTAG/' COL'/,(ICURS(I),I=1,2)/'XYPl','ot>>'/
  775. C
  776. C FIND OUT WHO CALLED US
  777. C
  778.       IF(INCTRL .NE. 0) GOTO 800
  779. C
  780. C SET UP THE DEFAULTS
  781. C
  782.       ISECY = .FALSE.
  783.       CHRSIZ = 0
  784.       ISYOPT = 0
  785.       IAXSPN = 1
  786.       DO 1 I=1,80
  787.       XLABXY(I)=' '
  788.       YLABXY(I)=' '
  789.       SYLBXY(I)=' '
  790.       LABXY(I) =' '
  791. 1     CONTINUE
  792.       XLABXY(2)=Z'00'
  793.       YLABXY(2)=Z'00'
  794.       SYLBXY(2)=Z'00'
  795.       LABXY(2)=Z'00'
  796.       IPLTP1 = 0
  797.       IPLTP2 = 0
  798.       IPLTP3 = 0
  799.       NLINES = 0
  800.       DO 2 I = 1,10
  801.       LINSYL(I)=1
  802.       SYMSZ(I)=.2
  803.       INTSYM(I)=5
  804.       ISYMNO(I)=0
  805. 2     FGRPXY(I)=I+1
  806.       XLIM = GSXLCM()
  807.       YLIM = GSYLCM()
  808.       XSTXY = 0.
  809.       YSTXY = 0.
  810.       XFRCXY = 100.
  811.       YFRCXY = 95
  812. C
  813. C CHOOSE THE PLOT MODE 
  814. C
  815.       CALL CHKEND
  816. 7     WRITE(WTE,3)COLOR1,ICURS,COLOR2
  817.       IF(WIO .NE. 0)WRITE(WIO,3)COLOR1,ICURS,COLOR2
  818. 3     FORMAT(1X,"PLEASE CHOOSE THE X-Y PLOT MODE:"/,
  819.      1" [1] IMPLICIT X, EXPLICIT Y"/,
  820.      2" [2] EXPLICIT X, EXPLICIT Y"/,4A4,$)
  821.       CALL VALGET(0,IDEFXY,'I')
  822.       GOTO(4,4),IDEFXY
  823.       CALL MENUER(2)
  824.       GOTO 7
  825. 4     CONTINUE
  826. C
  827. C DO AN ERROR TEST
  828. C
  829.       IF((M .EQ. 1 .OR. N .EQ. 1) .AND. IDEFXY .EQ. 2) THEN
  830.        WRITE(WTE,5)COLOR3,COLOR2
  831. 5      FORMAT(1X,A4,"ERROR.  ARRAY IS ONE DIMENSIONAL. INSUFFICIENT",/,
  832.      1 1X,"INFORMATION TO DO AN EXPLICIT X EXPLICIT Y PLOT",A4)
  833.        IF(WIO .NE. 0) WRITE(WIO,5)COLOR3,COLOR2
  834.        RETURN
  835.       ENDIF
  836. C
  837. C DETERMINE WHETHER TO PLOT ALONG ROWS OR COLUMNS
  838. C
  839.       CALL PLTPRP(X,Y,M,N,XXX,YYY,ICURS,TAG,NLINES
  840.      1,LINXYX,LINXYY,NPTS,IDEFXY)
  841.  
  842. C
  843. C DETERMINE AXIS SCALING
  844. C
  845.       XMINXY =9999
  846.       YMINXY =9999
  847.       XMAXXY =-99999
  848.       YMAXXY =-99999
  849.       DO 150 J = 1,NLINES
  850.       XMINH = 99999
  851.       XMAXH = -99999
  852.       YMINH = 99999
  853.       YMAXH = -99999
  854.       DO 130 K = 1,NPTS
  855.       XMINH = AMIN1(XMINH,X(J,K))
  856.       XMAXH = AMAX1(XMAXH,X(J,K))
  857.       YMINH = AMIN1(YMINH,Y(J,K))
  858.       YMAXH = AMAX1(YMAXH,Y(J,K))
  859. 130   CONTINUE
  860.       XMINXY = AMIN1(XMINH,XMINXY)
  861.       XMAXXY = AMAX1(XMAXH,XMAXXY)
  862.       YMINXY = AMIN1(YMINH,YMINXY)
  863.       YMAXXY = AMAX1(YMAXH,YMAXXY)
  864. 150   CONTINUE
  865.       XLO=XMINXY
  866.       XHI=XMAXXY
  867.       YLO=YMINXY
  868.       YHI=YMAXXY
  869.       SYMNXY=YMINXY
  870.       SYMXXY=YMAXXY
  871. C
  872. C SELECT PLOT OPTIONS:
  873. C
  874. 160   WRITE(WTE,161)COLOR1,ICURS,COLOR2
  875.       CALL CHKEND
  876. 161   FORMAT(1X,"PLEASE CHOOSE AN OPTION"/,
  877.      1" [1]  SELECT THE TYPE OF PLOT AXES"/,
  878.      2" [2]  SELECT THE X AND Y GRID MARKINGS"/,
  879.      3" [3]  SELECT X AND Y AXIS TICK MARK OPTIONS"/,
  880.      4" [4]  SELECT THE LINE OPTIONS"/
  881.      4" [5]  SELECT THE PLOT COLORS"/,
  882.      5" [6]  SELECT THE BACKGROUND COLOR"/,
  883.      5" [7]  SELECT THE AXIS SCALES"/,
  884.      5" [8]  CHOOSE THE PLOT SIZE"/,
  885.      6" [9]  CHOOSE THE PLOT LABELS"/,
  886.      4" [10]  DO THE PLOT"/,
  887.      5" [11] END THE CURRENT PLOT"/,
  888.      5" [12] EXIT XYPLOT"/,4A4,$)
  889.       IF(WIO .NE. 0) WRITE(WIO,161)COLOR1,ICURS,COLOR2
  890.       CALL VALGET(0,IANS,'I')
  891.       GOTO (180,300,400,620,500,750,550,600,700,800,899,995),IANS
  892.       CALL MENUER(12)
  893.       GOTO 160
  894. 180   CONTINUE
  895.       CALL SETAXS(ICURS,IPLTP1,ISYOPT,ISECY,SYMNXY,SYMMXY,XLO,YLO)
  896.       GOTO 160
  897. C
  898. C SELECT THE GRID LINES OPTIONS
  899. C
  900. 300   CONTINUE
  901.       CALL CHKEND
  902.       WRITE(WTE,310)COLOR1,ICURS,COLOR2
  903.       IF(WIO .NE. 0) WRITE(WIO,310)COLOR1,ICURS,COLOR2
  904. 310   FORMAT(1X,"PLEASE CHOOSE A GRID LINE OPTION"/,
  905.      1" [1] NO GRID LINES"/,
  906.      2" [2] GRID LINES ON X AXIS ONLY"/,
  907.      3" [3] GRID LINES ON Y AXIS ONLY"/,
  908.      4" [4] GRID LINES ON BOTH AXES"/,4A4,$)
  909.       CALL VALGET(0,IPLTP2,'I')
  910.       GOTO (320,330,340,350),IPLTP2
  911.       CALL MENUER(4)
  912.       GOTO 300
  913. 320   IPLTP2 = 0
  914.       GOTO 160
  915. 330   IPLTP2 = 4
  916.       GOTO 160
  917. 340   IPLTP2 = 8
  918.       GOTO 160
  919. 350   IPLTP2 = 12
  920.       GOTO 160
  921. C
  922. C SELECT THE TICK MARK OPTIONS
  923. C
  924. 400   CONTINUE
  925.       IPLTP3=0
  926. 405   WRITE(WTE,410)COLOR1,ICURS,COLOR2
  927.       CALL CHKEND
  928.       IF(WIO.NE.0) WRITE(WIO,410)COLOR1,ICURS,COLOR2
  929. 410   FORMAT(1X,"PLEASE CHOOSE TICK MARK OPTIONS, ONE BY ONE."/,
  930.      1"  NOTE THAT TICK MARK OPTIONS ARE CUMULATIVE."/,
  931.      2" [1] CLEAR ALL TICK MARK OPTIONS"/,
  932.      3" [2] ALLOW X AXIS TO END NOT ON A TICK MARK"/,
  933.      4" [3] ALLOW Y AXIS TO END NOT ON A TICK MARK"/,
  934.      5" [4] DO NOT PLOT X AXIS TICK MARKS"/,
  935.      6" [5] DO NOT PLOT Y AXIS TICK MARKS"/,
  936.      7" [6] EXTRA X-AXIS AND TICKS ON TOP OF PLOT"/,
  937.      8" [7] EXTRA Y-AXIS AND TICKS TO RIGHT OF PLOT"/,
  938.      9" [8] SELECT TICK MARK AND TICK CHARACTER SIZE"/,
  939.      7" [9] RETURN TO XYPLOT MENU"/,4A4,$)
  940.       CALL VALGET(0,IANS,'I')
  941.       GOTO (420,430,440,450,460,470,480,490,160),IANS
  942.       CALL MENUER(9)
  943.       GOTO 405
  944. 420   CONTINUE
  945.       GOTO 400
  946. 430   CONTINUE
  947.       IPLTP3=IPLTP3+16
  948.       GOTO 405
  949. 440   IPLTP3=IPLTP3+32
  950.       GOTO 405
  951. 450   IPLTP3=IPLTP3+512
  952.       GOTO 405
  953. 460   IPLTP3=IPLTP3+1024
  954.       GOTO 405
  955. 470   IPLTP3=IPLTP3+64
  956.       GOTO 405
  957. 480   IPLTP3=IPLTP3+128
  958.       GOTO 405
  959. 490   WRITE(WTE,492)COLOR1,ICURS,COLOR2
  960.       CALL CHKEND
  961.       IF(WIO .NE. 0) WRITE(WIO,492)COLOR1,ICURS,COLOR2
  962. 492   FORMAT(1X,"PLEASE CHOOSE A TICK MARK SIZING OPTION"/,
  963.      1" [1] USE AUTO SIZING"/,
  964.      2" [2] CHOOSE THE SIZE"/,4A4,$)
  965.       CALL VALGET(0,IANS,'I')
  966.       GOTO (494,496),IANS
  967.       CALL MENUER(2)
  968.       GOTO 490
  969. 494   CHRSIZ = 0
  970.       GOTO 405
  971. 496   WRITE(WTE,497)COLOR1,ICURS,COLOR2
  972.       IF(WIO .NE. 0)WRITE(WIO,497)COLOR1,ICURS,COLOR2
  973. 497   FORMAT(1X,"ENTER THE TICK MARK CHARACTER SIZE (CM)"/,4A4,$)
  974.       CALL VALGET(CHRSIZ,0,'F')
  975.       GOTO 405
  976. C
  977. C DEFINE THE PLOT COLORS
  978. C
  979. 500   CONTINUE
  980.       WRITE(WTE,510)COLOR1,ICURS,COLOR2
  981.       CALL CHKEND
  982.       IF(WIO .NE. 0)WRITE(WIO,510)COLOR1,ICURS,COLOR2
  983. 510   FORMAT(1X,"PLEASE CHOOSE A PLOT COLOR OPTION"/,
  984.      1" [1] SELECT THE LINE COLORS"/,
  985.      2" [2] SELECT THE AXIS COLORS"/,
  986.      3" [3] RETURN TO XYPLOT MENU"/,4A4,$)
  987.       CALL VALGET(0,IANS,'I')
  988.       GOTO (520,540,160),IANS
  989.       CALL MENUER(3)
  990.       GOTO 500
  991. 520   CONTINUE
  992.       DO 536 I=1,NLINES
  993.       WRITE(WTE,535)I
  994. 535   FORMAT(1X,"FOR LINE NUMBER ",I2)
  995.       IF(WIO .NE. 0) WRITE(WIO,535)I
  996.       CALL SETFG(FGRPXY(I),ICURS)
  997. 536   CONTINUE
  998.       GOTO 500
  999. 540   WRITE(WTE,545)
  1000.       IF(WIO.NE.0) WRITE(WIO,545)
  1001. 545   FORMAT(1X,"FOR THE X-Y AXES,")
  1002.       CALL SETFG(IAXSPN,ICURS)
  1003.       GOTO 500
  1004. C
  1005. C SET THE AXIS SCALING
  1006. C
  1007. 550   CONTINUE
  1008.       WRITE(WTE,560)COLOR1,ICURS,COLOR2
  1009.       CALL CHKEND
  1010. 560   FORMAT(1X,"PLEASE CHOOSE PLOT SCALE OPTIONS"/,
  1011.      1" [1] USE AUTO-SCALING"/,
  1012.      2" [2] SELECT X-AXIS SCALE"/,
  1013.      3" [3] SELECT Y-AXIS SCALE"/,
  1014.      4" [4] RETURN TO XYPLOT MENU"/,4A4,$)
  1015.       CALL VALGET(0,IANS,'I')
  1016.       GOTO (565,570,580,160),IANS
  1017.       CALL MENUER(4)
  1018. 565   XMINXY=XLO
  1019.       XMAXXY=XHI
  1020.       YMINXY=YLO
  1021.       YMAXXY=YHI
  1022.       GOTO 160
  1023. 570   WRITE(WTE,572)COLOR1,ICURS,COLOR2
  1024.       IF(WIO .NE. 0) WRITE(WIO,572)COLOR1,ICURS,COLOR2
  1025. 572   FORMAT(1X,"CHOOSE MINIMUM X-AXIS VALUE"/,4A4)
  1026.       CALL VALGET(XMINXY,0,'F')
  1027.       WRITE(WTE,573)COLOR1,ICURS,COLOR2
  1028.       IF(WIO .NE. 0) WRITE(WIO,573)COLOR1,ICURS,COLOR2
  1029. 573   FORMAT(1X,"CHOOSE MAXIMUM X-AXIS VALUE"/,4A4)
  1030.       CALL VALGET(XMAXXY,0,'F')
  1031.       GOTO 550
  1032. 580   WRITE(WTE,582)COLOR1,ICURS,COLOR2
  1033.       IF(WIO .NE. 0) WRITE(WIO,582)COLOR1,ICURS,COLOR2
  1034. 582   FORMAT(1X,"CHOOSE MINIMUM Y-AXIS VALUE"/,4A4)
  1035.       CALL VALGET(YMINXY,0,'F')
  1036.       WRITE(WTE,583)COLOR1,ICURS,COLOR2
  1037.       IF(WIO .NE. 0) WRITE(WIO,583)COLOR1,ICURS,COLOR2
  1038. 583   FORMAT(1X,"CHOOSE MAXIMUM Y-AXIS VALUE"/,4A4)
  1039.       CALL VALGET(YMAXXY,0,'F')
  1040.       GOTO 550
  1041. C
  1042. C CHOOSE THE PLOT SIZE
  1043. C
  1044. 600   CONTINUE
  1045. C
  1046.       CALL CHKEND
  1047.       CALL MAKSIZ(ICURS,XSTXY,XFRCXY,YSTXY,YFRCXY)
  1048.       XSTXY=XSTXY*100.
  1049.       YSTXY=YSTXY*100.
  1050.       XFRCXY=XFRCXY*100.+XSTXY
  1051.       YFRCXY=YFRCXY*100.+YSTXY
  1052.       GOTO 160
  1053. C
  1054. C SET LINE OPTIONS
  1055. C
  1056. 620   CONTINUE
  1057.       CALL CHKEND
  1058.       CALL LNOPTS(NLINES,SYMSZ,INTSYM,ISYMNO,LINSYL,ICURS)
  1059.       GOTO 160
  1060. C
  1061. C SET THE PLOT LABELS
  1062. C
  1063. 700   CONTINUE
  1064.       WRITE(WTE,710)COLOR1,ICURS,COLOR2
  1065.       CALL CHKEND
  1066.       IF(WIO .NE. 0)WRITE(WIO,710)COLOR1,ICURS,COLOR2
  1067. 710   FORMAT(1X,"ENTER THE X-AXIS LABEL"/,4A4,$)
  1068.       CALL GETLAB(XLABXY)
  1069.       WRITE(WTE,720)COLOR1,ICURS,COLOR2
  1070.       IF(WIO .NE. 0)WRITE(WIO,720)COLOR1,ICURS,COLOR2
  1071. 720   FORMAT(1X,"ENTER THE Y-AXIS LABEL"/,4A4,$)
  1072.       CALL GETLAB(YLABXY)
  1073.       WRITE(WTE,730)COLOR1,ICURS,COLOR2
  1074.       IF(WIO .NE. 0)WRITE(WIO,730)COLOR1,ICURS,COLOR2
  1075. 730   FORMAT(1X,"ENTER THE PLOT LABEL"/,4A4,$)
  1076.       CALL GETLAB(LABXY)
  1077.       IF(ISECY) THEN
  1078.        WRITE(WTE,740)COLOR1,ICURS,COLOR2
  1079.        IF(WIO .NE. 0)WRITE(WIO,740)COLOR1,ICURS,COLOR2
  1080. 740    FORMAT(1X,"ENTER THE SECOND Y-AXIS LABEL"/,4A4,$)
  1081.        CALL GETLAB(SYLBXY)
  1082.       ENDIF
  1083.       GOTO 160
  1084. C
  1085. C SET BACKGROUND COLOR
  1086. C
  1087. 750    CONTINUE
  1088.        CALL CHKEND
  1089.        CALL CHBACK(ICURS)
  1090.        GOTO 160
  1091. C
  1092. C END THE PLOT
  1093. C
  1094. 899   IF (PLTST) THEN
  1095.        PLTST = .FALSE.
  1096.        CALL PLTFIN
  1097.       ENDIF
  1098.       GOTO 160
  1099. C
  1100. C BEGIN PLOTTING
  1101. C
  1102. 800   CONTINUE
  1103.       CALL CHKEND
  1104. C
  1105. C SAVE THE SETTINGS UNLESS WE ARE PLOTTING FROM SAVED SETTINGS
  1106. C IF PLOTTING FROM SAVED SETTINGS, RESTORE THE VALUES TO BE
  1107. C PLOTTED.
  1108. C
  1109.       IF(INCTRL .EQ. 0) THEN
  1110.        CALL SAVPLT(2)
  1111.       ELSE
  1112.       DO 840 J=1,NLINES
  1113.       IF(TAG .EQ. ROWTAG) THEN
  1114.        DO 810 I = 1,N
  1115.        IF(IDEFXY .EQ. 2)THEN
  1116.        X(J,I)=XXX(LINXYX(J),I)
  1117.        ELSE
  1118.        X(J,I)=FLOAT(I)
  1119.        ENDIF
  1120. 810   CONTINUE
  1121.       ELSE
  1122.        DO 820 I=1,M
  1123.         IF(IDEFXY .EQ. 2)THEN
  1124.         X(J,I)=XXX(I,LINXYX(J))
  1125.         ELSE
  1126.         X(J,I)=FLOAT(I)
  1127.         ENDIF
  1128. 820   CONTINUE
  1129.       ENDIF
  1130.       IF(TAG .EQ. ROWTAG) THEN
  1131.        DO 830 I = 1,N
  1132. 830    Y(J,I)=XXX(LINXYY(J),I)
  1133.       ELSE
  1134.        DO 832 I=1,M
  1135. 832    Y(J,I)=XXX(I,LINXYY(J))
  1136.       ENDIF
  1137. 840   CONTINUE
  1138.       ENDIF
  1139. C
  1140. C IF MODE 1, SCALE THE X-AXES
  1141. C
  1142.       IF(IDEFXY .EQ. 1) THEN
  1143.       DO 845 J=1,NLINES
  1144.        IF(TAG .EQ. ROWTAG) THEN
  1145.         DO 843 I=1,N
  1146. 843     X(J,I)=X(J,I)*XMAXXY/FLOAT(N)
  1147.         ELSE
  1148.         DO 844 I=1,M
  1149. 844     X(J,I)=X(J,I)*XMAXXY/FLOAT(M)
  1150.         ENDIF
  1151. 845   CONTINUE
  1152.       ENDIF
  1153.       IF((XMINXY .LE. 0 .AND. (IPLTP1 .EQ. 1 .OR. IPLTP1 .EQ. 3))
  1154.      1 .OR. (YMINXY .LE. 0 .AND. (IPLTP1 .EQ. 2 .OR. IPLTP1 .EQ. 3)))
  1155.      2THEN
  1156.        WRITE(WTE,854)COLOR3,COLOR2
  1157.        IF(WIO .NE. 0)WRITE(WIO,854)COLOR3,COLOR2
  1158. 854    FORMAT(1X,A4,"ERROR. AXIS LIMITS INCOMPATIBLE WITH LOG PLOT")
  1159.        GOTO 160
  1160.       ENDIF
  1161.       IF(ISECY .AND. SYMNXY .LE. 0 .AND. ISYOPT .EQ. 2) THEN
  1162.         WRITE(WTE,855)COLOR3,COLOR2
  1163.         IF(WIO .NE. 0)WRITE(WIO,855)COLOR3,COLOR2
  1164. 855     FORMAT(1X,A4,"ERROR. SECOND Y-AXIS LIMITS INCOMPATIBLE
  1165.      1WITH LOG PLOT",A4)
  1166.         GOTO 160
  1167.        ENDIF
  1168.  
  1169.       IF (.NOT. PLTST)THEN
  1170.        PLTST = .TRUE.
  1171.        CALL BGNPLT
  1172.       ENDIF
  1173.       IF(SETBG) THEN
  1174.        SETBG = .FALSE.
  1175.        CALL SETBAK(BGRP)
  1176.       ENDIF
  1177.       CALL GSCOLR(IAXSPN,IERR)
  1178. C
  1179. C DEFINE PLOT SIZE
  1180. C
  1181.       IF(ISECY) THEN
  1182.        CALL MAPSZ2(XSTXY,XFRCXY,YSTXY,YFRCXY,CHRSIZ)
  1183.       ELSE
  1184.        CALL MAPSIZ(XSTXY,XFRCXY,YSTXY,YFRCXY,CHRSIZ)
  1185.       ENDIF
  1186. C
  1187. C GENERATE THE AXES
  1188. C
  1189.       IOPTNS=IPLTP1+IPLTP2+IPLTP3
  1190.       CALL GSLTYP(1)
  1191.       CALL MAPIT(XMINXY,XMAXXY,YMINXY,YMAXXY,XLABXY,YLABXY,LABXY,IOPTNS)
  1192.  
  1193. C
  1194. C DO THE LINES ON THE PLOT
  1195. C
  1196.       DO 900 INDEX = 1,NLINES
  1197.       DO 882 I=1,NPTS
  1198.        XPL(I)=X(INDEX,I)
  1199. 882    YPL(I)=Y(INDEX,I)
  1200.       CALL GSCOLR(FGRPXY(INDEX),IERR)
  1201.       CALL GSLTYP(LINSYL(INDEX))
  1202.       CALL CURVE(XPL,YPL,NPTS,ISYMNO(INDEX),SYMSZ(INDEX),INTSYM(INDEX))
  1203. 900   CONTINUE
  1204. C
  1205. C DO THE SECOND Y AXIS
  1206. C
  1207.       IF(ISECY) THEN
  1208.        CALL GSCOLR(IAXSPN,IERR)
  1209.        CALL GSLTYP(1)
  1210.        CALL SYAXIS(SYMNXY,SYMXXY,SYLBXY,ISYOPT)
  1211.       ENDIF
  1212.       IF(INCTRL .NE. 0) RETURN
  1213.       GOTO 160
  1214. 995   CONTINUE
  1215.       RETURN
  1216.       END
  1217. C
  1218. C  ROUTINE TO SET THE FOREGROUND PEN COLOR
  1219. C
  1220.       SUBROUTINE SETFG(ICOL,ICURS)
  1221.       INTEGER*4 ICOL
  1222.       CHARACTER*4 ICURS(2)
  1223.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1224.       INTEGER*4 COLOR1,COLOR2,COLOR3
  1225.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1226. C
  1227. C PLOT SPECIFIC VARIABLES
  1228. C
  1229.       LOGICAL PLTST,SETBG,BNHERE
  1230.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1231. C
  1232. C BEGIN
  1233. C
  1234. 105   WRITE(WTE,106)COLOR1,ICURS,COLOR2
  1235. 106   FORMAT(1X,"ENTER THE PLOT PEN NUMBER"/,4A4,$)
  1236.       IF(WIO .NE. 0)WRITE(WIO,106)COLOR1,ICURS(1),ICURS(2),COLOR2
  1237.       CALL VALGET(0,ICOL,'I')
  1238.       IF(WIO .NE. 0)WRITE(WIO,108)ICOL
  1239. 108   FORMAT(1X,I2)
  1240.       IF(ICOL .LT. 0 .OR. ICOL .GT. 15) THEN
  1241.        CALL PENERR
  1242.        GOTO 105
  1243.       ENDIF
  1244.       RETURN
  1245.       END
  1246. C
  1247. C  ROUTINE TO HANDLE MENU ERROR MESSAGES
  1248. C
  1249.       SUBROUTINE MENUER(I)
  1250.       INTEGER*4 I
  1251.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1252.       INTEGER*4 COLOR1,COLOR2,COLOR3,ICOL
  1253.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1254. C
  1255. C PLOT SPECIFIC VARIABLES
  1256. C
  1257.       LOGICAL PLTST,SETBG,BNHERE
  1258.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1259. C
  1260.       WRITE(WTE,10)COLOR3,I,COLOR2
  1261. 10    FORMAT(1X,A4,"ERROR.  PLEASE ENTER A VALUE BETWEEN 1 AND ",I2,A4)
  1262.       IF(WIO .NE. 0) WRITE(WIO,10)COLOR3,I,COLOR2
  1263.       RETURN
  1264.       END
  1265. C
  1266. C ROUTINE TO CHOOSE BACKGROUND COLOR
  1267. C
  1268.       SUBROUTINE CHBACK(ICURS)
  1269.       CHARACTER*4 ICURS(2)
  1270.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  1271.       LOGICAL PLTST,SETBG,BNHERE
  1272.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1273.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1274.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1275. C
  1276.       SETBG = .TRUE.
  1277. 400   CONTINUE
  1278.       WRITE(WTE,401)COLOR1,ICURS,COLOR2
  1279. 401   FORMAT(1X,"ENTER THE BACKGROUND COLOR NUMBER"/,4A4,$)
  1280.       IF(WIO .NE. 0)WRITE(WIO,401)COLOR1,ICURS,COLOR2
  1281.       CALL VALGET(0,BGRP,'I')
  1282.       IF(BGRP .LT.0 .OR. BGRP .GT. 15) THEN
  1283.        CALL PENERR
  1284.        GOTO 400
  1285.       ENDIF
  1286.       RETURN
  1287.       END
  1288. C
  1289. C ROUTINE TO DO HISTOGRAMS AND BAR PLOTS
  1290. C
  1291.       SUBROUTINE BARPLT(XXX,M,N,INCTRL,IERR)
  1292.       INTEGER M,N
  1293.       DIMENSION XXX(M,N)
  1294.       INTEGER INCTRL,IOCTRL
  1295.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1296.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  1297.       CHARACTER*1 ANS
  1298.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1299. C
  1300. C PLOT SPECIFIC VARIABLES
  1301. C
  1302.       LOGICAL PLTST,SETBG,BNHERE
  1303.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1304.       INTEGER NOBARS,COLIST(8),FGRPBP(8)
  1305.       REAL*4    XLOWBP,XHIBP,XSTBP,YSTBP,XFRCBP,YFRCBP,CHSZBP
  1306.       DIMENSION FIMX(8)
  1307.       CHARACTER*1 XLABBP(80),YLABBP(80),LABBP(80),SYLBBP(80)
  1308.       LOGICAL ISCYBP,STATBP
  1309.       CHARACTER*4 ICURS(2)
  1310. C
  1311.       INTEGER I,J,IMXC,SYOPBP
  1312.       REAL*4    COUNT(512,8),STEP,FBAR,YLOWBP,YHIBP,X0,Y0,VX0,VX1
  1313.       REAL*4    VY0,VY1
  1314. C
  1315. C THE BARPLOT COMMON
  1316.       COMMON /BAR/ FGRPBP,XLOWBP,XHIBP,IMXC,NOBARS,YLOWBP,YHIBP,
  1317.      1 FBAR,XLABBP,YLABBP,LABBP,IMXPTS,IMYPTS,XSTBP,YSTBP,XFRCBP,
  1318.      2 YFRCBP,CHSZBP,ISCYBP,IPLBP1,STATBP,IXCLBP,SYLBBP,SYLOBP,SYHIBP,
  1319.      3 SYOPBP
  1320.  
  1321.       DATA (ICURS(I),I=1,2)/'BARP','lt>>'/
  1322. C
  1323. C SEE WHO CALLED US
  1324. C
  1325.       IF(INCTRL .NE. 0)GOTO 90
  1326. C
  1327. C SET UP THE DEFAULTS
  1328. C
  1329.       DO 9 I=1,8
  1330. 9     FGRPBP(I)=I
  1331.       CALL MINMAX(XXX,M*N,XLOWBP,XHIBP)
  1332.       IMXC   = 512
  1333.       NOBARS = M
  1334.       YLOWBP   = 0.0
  1335.       YHIBP  = 1.0
  1336.       FBAR   = FLOAT(NOBARS)
  1337.       DO 1 I=1,80
  1338.       XLABBP(I)=' '
  1339.       YLABBP(I)=' '
  1340.       LABBP(I) =' '
  1341. 1     CONTINUE
  1342.       XLABBP(2)=Z'00'
  1343.       YLABBP(2)=Z'00'
  1344.       LABBP(2)=Z'00'
  1345.       IMXPTS=M
  1346.       IMYPTS=N
  1347.       XSTBP=0
  1348.       YSTBP=0
  1349.       XFRCBP=100
  1350.       YFRCBP=95
  1351.       CHSZBP=0
  1352.       ISCYBP =0
  1353.       IPLBP1=0
  1354.       STATBP = .TRUE.
  1355.       IXCLBP = 1
  1356. C
  1357. C Main Menu
  1358. C
  1359. 4     WRITE(WTE,5)COLOR1,ICURS,COLOR2
  1360.       CALL CHKEND
  1361.       IF(WIO .NE. 0)WRITE(WIO,5)COLOR1,ICURS,COLOR2
  1362. 5     FORMAT(1X,"PLEASE SELECT AN OPTION"/,
  1363.      1" [1]  CHOOSE THE BAR GRAPH TYPE"/,
  1364.      1" [2]  CHOOSE BAR GRAPH AXIS TYPES"/,
  1365.      2" [3]  CHOOSE BAR GRAPH AXIS COLORS"/,
  1366.      2" [4]  CHOOSE THE BAR GRAPH LABELS"/,
  1367.      3" [5]  SET THE BAR GRAPH COLORS"/,
  1368.      4" [6]  SET THE BACKGROUND COLOR"/,
  1369.      5" [7]  SET THE PLOT SIZE"/,
  1370.      5" [8]  DO THE PLOT"/,
  1371.      6" [9]  END THE CURRENT PLOT"/,
  1372.      6" [10] EXIT BARGRAPH"/,4A4,$)
  1373.       CALL VALGET(0,IANS,'I')
  1374.       GOTO (15,10,20,60,30,40,50,90,899,9999),IANS
  1375.       CALL MENUER(10)
  1376.       GOTO 4
  1377. C
  1378. C DEFINE THE BAR GRAPH AXIS TYPES
  1379. C
  1380. 10    CONTINUE
  1381.       CALL CHKEND
  1382.       CALL SETAXS(ICURS,IPLBP1,SYOPBP,ISCYBP,SYLOBP,SYHIBP,XLOWBP
  1383.      1 ,YLOWBP)
  1384.       GOTO 4
  1385. C
  1386. C DETERMINE WHETHER TO COUNT OCCURENCES OR DO STATISTICAL DISTRIBUTION
  1387. C
  1388. 15    CONTINUE
  1389.       WRITE(WTE,16)COLOR1,ICURS,COLOR2
  1390.       CALL CHKEND
  1391.       IF(WIO .NE. 0) WRITE(WIO,16)COLOR1,ICURS,COLOR2
  1392. 16    FORMAT(1X,"PLEASE CHOOSE THE DESIRED Y-AXIS TYPE:"/,
  1393.      1" [1] STATISTICAL (MAXIMUM Y VALUE IS 1.0)"/,
  1394.      2" [2] OCCURRENCE COUNT"/,4A4,$)
  1395.       CALL VALGET(0,IANS,'I')
  1396.       GOTO (17,18),IANS
  1397.       CALL MENUER(2)
  1398.       GOTO 15
  1399. 17    STATBP = .TRUE.
  1400.       GOTO 4
  1401. 18    STATBP = .FALSE.
  1402.       GOTO 4
  1403. C
  1404. C DO THE PLOT LABELS
  1405. C
  1406. 20    CONTINUE
  1407.       WRITE(WTE,21)COLOR1,ICURS,COLOR2
  1408.       IF(WIO .NE. 0)WRITE(WIO,21)COLOR1,ICURS,COLOR2
  1409. 21    FORMAT(1X,"ENTER THE X-AXIS LABEL"/,4A4,$)
  1410.       CALL GETLAB(XLABBP)
  1411.       WRITE(WTE,22)COLOR1,ICURS,COLOR2
  1412.       IF(WIO .NE. 0)WRITE(WIO,22)COLOR1,ICURS,COLOR2
  1413. 22    FORMAT(1X,"ENTER THE Y-AXIS LABEL"/,4A4,$)
  1414.       CALL GETLAB(YLABBP)
  1415.       WRITE(WTE,23)COLOR1,ICURS,COLOR2
  1416.       IF(WIO .NE. 0)WRITE(WIO,23)COLOR1,ICURS,COLOR2
  1417. 23    FORMAT(1X,"ENTER THE PLOT LABEL"/,4A4,$)
  1418.       CALL GETLAB(LABBP)
  1419.       GOTO 4
  1420. C
  1421. C SET THE BAR GRAPH COLORS
  1422. C
  1423. 30    CONTINUE
  1424.       CALL CHKEND
  1425.       KK=IMYPTS
  1426.       IF(KK .GT. 8) KK = 8
  1427.       DO 35 I=1,KK
  1428.       WRITE(WTE,33)I
  1429.       IF(WIO .NE. 0) WRITE(WIO,33)I
  1430. 33    FORMAT(1X,"FOR BAR GRAPH NUMBER ",I1)
  1431.       CALL SETFG(FGRPBP(I),ICURS)
  1432. 35    CONTINUE
  1433.       GOTO 4
  1434. C
  1435. C  CHANGE THE BACKGROUND PEN COLOR
  1436. C
  1437. 40    CONTINUE
  1438.       CALL CHKEND
  1439.       CALL CHBACK(ICURS)
  1440.       GOTO 4
  1441. C
  1442. C SET THE PLOT SIZE
  1443. C
  1444. 50    CONTINUE
  1445.       CALL CHKEND
  1446.       CALL MAKSIZ(ICURS,XSTBP,XFRCBP,YSTBP,YFRCBP)
  1447.       XSTBP=XSTBP*100.
  1448.       YSTBP=YSTBP*100.
  1449.       XFRCBP=XFRCBP*100.+XSTBP
  1450.       YFRCBP=YFRCBP*100.+YSTBP
  1451.       GOTO 4
  1452. C
  1453. C SET THE AXIS COLORS
  1454. C
  1455. 60    CONTINUE
  1456.       CALL CHKEND
  1457.       CALL SETFG(IXCLBP,IERR)
  1458.       GOTO 4
  1459. C
  1460. C DO THE PLOT
  1461. C
  1462. 90    CONTINUE
  1463.       CALL CHKEND
  1464. C
  1465. C SAVE THE PLOT UNLESS THIS IS ALREADY A SAVED PLOT
  1466. C
  1467.       IF(INCTRL .EQ. 0)CALL SAVPLT(3)
  1468. C
  1469. C
  1470.       IF((XLOWBP .LE. 0 .AND. (IPLBP1 .EQ. 1 .OR. IPLBP1 .EQ. 3))
  1471.      1 .OR. (YLOWBP .LE. 0 .AND. (IPLBP1 .EQ. 2 .OR. IPLBP1 .EQ. 3)))
  1472.      2THEN
  1473.        WRITE(WTE,854)COLOR3,COLOR2
  1474.        IF(WIO .NE. 0)WRITE(WIO,854)COLOR3,COLOR2
  1475. 854    FORMAT(1X,A4,"ERROR. AXIS LIMITS INCOMPATIBLE WITH LOG PLOT")
  1476.        GOTO 4
  1477.       ENDIF
  1478.       IF(ISCYBP .AND. (SYLOBP .LE. 0) .AND. (SYOPBP .EQ. 2)) THEN
  1479.         WRITE(WTE,855)COLOR3,COLOR2
  1480.         IF(WIO .NE. 0)WRITE(WIO,855)COLOR3,COLOR2
  1481. 855     FORMAT(1X,A4,"ERROR. SECOND Y-AXIS LIMITS INCOMPATIBLE
  1482.      1WITH LOG PLOT",A4)
  1483.         GOTO 4
  1484.        ENDIF
  1485.  
  1486.         IF (XLOWBP .GT. XHIBP) THEN
  1487.          WRITE(WTE,871)COLOR3,COLOR2
  1488.          IF(WIO .NE. 0) WRITE(WIO,871)COLOR3,COLOR2
  1489. 871      FORMAT(1X,A4,"INTERNAL ERROR.  XMIN GREATER THAN XMAX"/,
  1490.      1 "CALLED FROM BARPLT.  THIS CAN'T HAPPEN, SO IF IT HAS,"/,
  1491.      2 "YOU'RE SCREWED!  SORRY.",A4)
  1492.         GOTO 9999
  1493.         ENDIF
  1494.  
  1495.         IF (NOBARS .GT. IMXC) THEN
  1496.          WRITE(WTE,873)COLOR3,COLOR2
  1497.          IF(WIO .NE. 0) WRITE(WIO,873)COLOR3,COLOR2
  1498. 873      FORMAT(1X,A4,"ERROR.  TOO MANY BINS.  THE MAXIMUM IS 512",A4)
  1499.          GOTO 9999
  1500.         ENDIF
  1501.         IF(IMYPTS .GT. 8) THEN
  1502.          WRITE(WTE,876)COLOR3,COLOR2
  1503.          IF(WIO .NE. 0)WRITE(WIO,876)COLOR3,COLOR2
  1504. 876      FORMAT(1X,A4,"WARNING. TOO MANY BARGRAPHS SPECIFIED.
  1505.      1  ONLY THE FIRST 8 ROWS WILL BE GRAPHED",A4)
  1506.          IMYPTS = 8
  1507.         ENDIF
  1508. C
  1509.         STEP   = (XHIBP - XLOWBP) / FBAR
  1510. C
  1511.         DO 100 I = 1,512
  1512.         DO 100 J = 1,8
  1513. C
  1514.             COUNT(I,J) = 0.0
  1515. C
  1516.  100    CONTINUE
  1517. C
  1518.         DO 350 KK=1,IMYPTS
  1519.         DO 200 I = 1,IMXPTS
  1520. C
  1521.             J      = INT((XXX(I,KK)-XLOWBP)/STEP) + 1
  1522.             IF (J .GT. NOBARS) J = NOBARS
  1523.             COUNT(J,KK) = COUNT(J,KK) + 1.0
  1524. C
  1525.  200    CONTINUE
  1526. C
  1527.         IF(STATBP) THEN
  1528.          FIMX(KK)   = FLOAT(IMXPTS) * STEP
  1529. C
  1530.         DO 300 I = 1,NOBARS
  1531. C
  1532.             COUNT(I,KK) = COUNT(I,KK) / FIMX(KK)
  1533. C
  1534.  300    CONTINUE
  1535.         ENDIF
  1536.  
  1537.  350    CONTINUE
  1538. C
  1539.         CALL MINMAX(COUNT,4096,YLOWBP,YHIBP)
  1540.         YLOWBP   = 0.0
  1541.         YHIBP  = YHIBP + 0.1 * YHIBP
  1542. C
  1543.       IF (.NOT. PLTST)THEN
  1544.        PLTST = .TRUE.
  1545.        CALL BGNPLT
  1546.       ENDIF
  1547. C
  1548. C SET THE BACKGROUND COLOR
  1549. C
  1550.       IF(SETBG) THEN
  1551.         SETBG = .FALSE.
  1552.         CALL SETBAK(BGRP)
  1553.       ENDIF
  1554. C
  1555. C DEFINE PLOT SIZE
  1556. C
  1557. C      WRITE(WTE,1324)XSTBP,XFRCBP,YSTBP,YFRCBP,CHSZBP
  1558. C1324  FORMAT(1X,"MAPSIZE",5F10.3)
  1559.       IF(ISCYBP) THEN
  1560.        CALL MAPSZ2(XSTBP,XFRCBP,YSTBP,YFRCBP,CHSZBP)
  1561.       ELSE
  1562.        CALL MAPSIZ(XSTBP,XFRCBP,YSTBP,YFRCBP,CHSZBP)
  1563.       ENDIF
  1564.          CALL GSCOLR(IXCLBP,IERR)
  1565. C      WRITE(WTE,1789)XLOWBP,XHIBP,YLOWBP,YHIBP
  1566. C1789  FORMAT(1X,"MAPIT",4F10.3)
  1567.          CALL MAPIT(XLOWBP,XHIBP,YLOWBP,YHIBP,XLABBP,YLABBP,LABBP,
  1568.      1    IPLBP1)
  1569. C
  1570.         DO 500 KK=1,IMYPTS
  1571.         CALL GSCOLR(FGRPBP(KK),IERR)
  1572.         X0     = XLOWBP
  1573.         Y0     = 0.0
  1574.         CALL SCALE(X0,Y0,VX0,VY0)
  1575.         CALL GSMOVE(VX0,VY0)
  1576. C
  1577.         DO 400 I = 1,NOBARS
  1578. C
  1579.             X0     = XLOWBP + I * STEP
  1580.             Y0     = COUNT(I,KK)
  1581.             CALL SCALE(X0,Y0,VX1,VY1)
  1582.             CALL GSDRAW(VX0,VY1)
  1583.             CALL GSDRAW(VX1,VY1)
  1584.             CALL GSDRAW(VX1,VY0)
  1585. C
  1586.             VX0    = VX1
  1587. C
  1588.  400    CONTINUE
  1589.  500    CONTINUE
  1590. C
  1591. C
  1592. C DO THE SECOND Y AXIS
  1593. C
  1594.       IF(ISCYBP) THEN
  1595. C       CALL GSCOLR(IXCLBP,IERR)
  1596.        CALL GSLTYP(1)
  1597.        CALL SYAXIS(SYLOBP,SYHIBP,SYLBBP,SYOPBP)
  1598.       ENDIF
  1599.       IF(INCTRL .NE. 0) RETURN
  1600.         GOTO 4
  1601. C
  1602. 899   IF (PLTST) THEN
  1603.        PLTST = .FALSE.
  1604.        CALL PLTFIN
  1605.       ENDIF
  1606.       GOTO 4
  1607.  9999   CONTINUE
  1608. C
  1609. C       BYE
  1610. C
  1611.         RETURN
  1612.         END
  1613.  
  1614. C
  1615. C  ROUTINE TO SET AXIS TYPES
  1616. C
  1617.       SUBROUTINE SETAXS(ICURS,IPLTP1,ISYOPT,ISECY,SYMN,SYMX,XLO,YLO)
  1618.  
  1619.       CHARACTER*4 ICURS(2)
  1620.       INTEGER IPLTP1,ISYOPT
  1621.       REAL SYMN,SYMX,XLO,YLO
  1622.       LOGICAL ISECY
  1623.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1624.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1625.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  1626.       LOGICAL PLTST,SETBG,BNHERE
  1627.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1628. 180   WRITE(WTE,185)COLOR1,ICURS,COLOR2
  1629.       CALL CHKEND
  1630. 185   FORMAT(1X,"PLEASE CHOOSE THE TYPE OF PLOT AXES"/,
  1631.      1" [1] LIN-LIN PLOT"/,
  1632.      2" [2] LOG-LIN PLOT"/,
  1633.      3" [3] LIN-LOG PLOT"/,
  1634.      4" [4] LOG-LOG PLOT"/,
  1635.      5" [5] USE SECOND Y-AXIS"/
  1636.      6" [6] RETURN TO PREVIOUS MENU"/,4A4,$)
  1637.       IF(WIO .NE. 0) WRITE(WIO,185)COLOR1,ICURS,COLOR2
  1638.       CALL VALGET(0,IANS,'I')
  1639.       GOTO (210,220,230,240,250,999),IANS
  1640.       CALL MENUER(6)
  1641.       GOTO 180
  1642. 210   IPLTP1 = 0
  1643.       GOTO 180
  1644. 220   CONTINUE
  1645.       IF(XLO .LT. 0)THEN
  1646.        WRITE(WTE,222)COLOR3,COLOR2
  1647.        IF(WIO .NE. 0)WRITE(WIO,222)COLOR3,COLOR2
  1648. 222    FORMAT(1X,A4,"ERROR. X-AXIS LIST HAS VALUES LESS THAN 0."/
  1649.      1," THIS IS INCOMPATIBLE WITH A LOG X AXIS",A4)
  1650.        GOTO 180
  1651.       ENDIF
  1652.       IPLTP1 = 1
  1653.       GOTO 180
  1654. 230   CONTINUE
  1655.       IF(YLO .LT. 0)THEN
  1656.        WRITE(WTE,232)COLOR3,COLOR2
  1657.        IF(WIO .NE. 0)WRITE(WIO,232)COLOR3,COLOR2
  1658. 232    FORMAT(1X,A4,"ERROR. Y-AXIS LIST HAS VALUES LESS THAN 0."/
  1659.      1," THIS IS INCOMPATIBLE WITH A LOG Y AXIS",A4)
  1660.        GOTO 180
  1661.       ENDIF
  1662.       IPLTP1=2
  1663.       GOTO 180
  1664. 240   CONTINUE
  1665.       IF(XLO .LT. 0)THEN
  1666.        WRITE(WTE,222)COLOR3,COLOR2
  1667.        IF(WIO .NE. 0)WRITE(WIO,222)COLOR3,COLOR2
  1668.        GOTO 180
  1669.       ENDIF
  1670.       IF(YLO .LT. 0)THEN
  1671.        WRITE(WTE,232)COLOR3,COLOR2
  1672.        IF(WIO .NE. 0)WRITE(WIO,232)COLOR3,COLOR2
  1673.        GOTO 180
  1674.       ENDIF
  1675.       IPLTP1 = 3
  1676.       GOTO 180
  1677. 250   CONTINUE
  1678.       ISECY=.TRUE.
  1679. 252   WRITE(WTE,255)COLOR1,ICURS,COLOR2
  1680.       CALL CHKEND
  1681.       IF(WIO .NE. 0) WRITE(WIO,255)COLOR1,ICURS,COLOR2
  1682. 255   FORMAT(1X,"PLEASE CHOOSE SECOND Y-AXIS OPTIONS:"/,
  1683.      1" [1] LINEAR SCALE"/,
  1684.      2" [2] LOG SCALE"/,
  1685.      3" [3] CHOOSE SECOND AXIS LIMITS"/,
  1686.      3" [4] DELETE SECOND Y AXIS"/,
  1687.      4" [5] RETURN TO AXIS SELECTION MENU"/,4A4,$)
  1688.       CALL VALGET(0,IANS,'I')
  1689.       GOTO (260,270,290,280,180),IANS
  1690.       CALL MENUER(5)
  1691. 260   ISYOPT=0
  1692.       GOTO 252
  1693. 270   ISYOPT=2
  1694.       GOTO 252
  1695. 280   ISECY=.FALSE.
  1696.       GOTO 252
  1697. 290   WRITE(WTE,292)COLOR1,ICURS,COLOR2
  1698.       IF(WIO .NE. 0) WRITE(WIO,292)COLOR1,ICURS,COLOR2
  1699. 292   FORMAT(1X,"ENTER THE MINIMUM SCALE VALUE OF THE SECOND Y AXIS"/,
  1700.      14A4,$)
  1701.       CALL VALGET(SYMN,0,'F')
  1702.       WRITE(WTE,294)COLOR1,ICURS,COLOR2
  1703.       IF(WIO .NE. 0) WRITE(WIO,294)COLOR1,ICURS,COLOR2
  1704. 294   FORMAT(1X,"ENTER THE MAXIMUM SCALE VALUE OF THE SECOND Y AXIS"/,
  1705.      14A4,$)
  1706.       CALL VALGET(SYMX,0,'F')
  1707.       GOTO 252
  1708. 999   CONTINUE
  1709.       RETURN
  1710.       END
  1711. C
  1712. C ROUTINE TO DEFINE PLOT SIZE
  1713. C
  1714.       SUBROUTINE MAKSIZ(ICURS,XST,XFRC,YST,YFRC)
  1715.       CHARACTER*4 ICURS(2)
  1716.       REAL XST,XFRC,YST,YFRC
  1717.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  1718.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP,FGRPXY(10),ISYMNO(10)
  1719.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  1720. C
  1721. C PLOT SPECIFIC VARIABLES
  1722. C
  1723.       LOGICAL PLTST,SETBG,BNHERE
  1724.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1725. C
  1726.       WRITE(WTE,601)COLOR1,ICURS,COLOR2
  1727. 601   FORMAT(1X,"ENTER THE X ORIGIN OF THE PLOT AS A FRACTION OF THE
  1728.      1 TOTAL XAXIS LENGTH"/,4A4,$)
  1729.       IF(WIO .NE. 0) WRITE(WIO,601)COLOR1,ICURS,COLOR2
  1730.       CALL VALGET(XST,0,'F')
  1731.       WRITE(WTE,602)COLOR1,ICURS,COLOR2
  1732. 602   FORMAT(1X,"ENTER THE Y ORIGIN OF THE PLOT AS A FRACTION OF THE
  1733.      1 TOTAL YAXIS LENGTH"/,4A4,$)
  1734.       IF(WIO .NE. 0) WRITE(WIO,602)COLOR1,ICURS,COLOR2
  1735.       CALL VALGET(YST,0,'F')
  1736.       WRITE(WTE,603)COLOR1,ICURS,COLOR2
  1737. 603   FORMAT(1X,"ENTER THE FRACTION OF THE XAXIS TO BE OCCUPIED BY
  1738.      1 THE PLOT"/,4A4,$)
  1739.       IF(WIO. NE. 0) WRITE(WIO,603)COLOR1,ICURS(1),ICURS(2),COLOR2
  1740.       CALL VALGET(XFRC,0,'F')
  1741.       WRITE(WTE,604)COLOR1,ICURS,COLOR2
  1742. 604   FORMAT(1X,"ENTER THE FRACTION OF THE YAXIS TO BE OCCUPIED BY
  1743.      1 THE PLOT"/,4A4,$)
  1744.       IF(WIO .NE. 0) WRITE(WIO,604)COLOR1,ICURS,COLOR2
  1745.       CALL VALGET(YFRC,0,'F')
  1746.       RETURN
  1747.       END
  1748. C
  1749. C ROUTINE TO CLOSE OUT THE PLOTS
  1750. C
  1751.       SUBROUTINE PLTFIN
  1752. C
  1753.       CALL ENDPLT
  1754.       RETURN
  1755.       END
  1756. C
  1757. C ROUTINE TO REMEMBER PLOT SETTINGS
  1758. C
  1759.       SUBROUTINE SAVPLT(PLTP)
  1760.       INTEGER PLTP
  1761. C
  1762. C PLTP IS TYPE OF PLOT
  1763. C      =1 IS 3D PLOT
  1764. C      =2 IS X-Y PLOT OF ANY TYPE
  1765. C      =3 IS BAR PLOT (HISTOGRAM)
  1766. C      =4 IS CONTOUR PLOT
  1767. C      =5 IS POLAR PLOT
  1768. C
  1769. C
  1770. C PLOT SPECIFIC VARIABLES
  1771. C
  1772.       INTEGER VAR(4)
  1773.       CHARACTER*4 ICURS(2)
  1774.       INTEGER*4 COLOR1,COLOR2,COLOR3,MARPLT,FGRP3D
  1775.       REAL*4 LABE3D
  1776.       CHARACTER*1 XLAB3D(80),YLAB3D(80),ZLAB3D(80)
  1777.       DIMENSION XYLIM(2,6),CAMLOC(3)
  1778.       INTEGER*4 FGRPXY(10),ISYMNO(10)
  1779.       INTEGER*4 INTSYM(10),LINSYL(10),LINXYX(10),LINXYY(10)
  1780.       DIMENSION SYMSZ(10)
  1781.       LOGICAL ISECY,PLTST,SETBG,BNHERE
  1782.       CHARACTER*1 XLABXY(80),YLABXY(80),SYLBXY(80),LABXY(80),ANS
  1783.       CHARACTER*4 TAG
  1784.       INTEGER*4 WIDTH,HEIGHT,ICOLOR,Window,Screen,viewport
  1785. C
  1786. C THE GLOBAL PLOT COMMON
  1787. C
  1788.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1789. C
  1790. C THE 3D PLOT ROUTINE COMMON
  1791. C
  1792.       COMMON /PLT3D/ XLAB3D,YLAB3D,ZLAB3D,XYLIM,CAMLOC,MARPLT,FGRP3D
  1793.      1,XST3D,YST3D,XFRC3D,YFRC3D,LABE3D
  1794. C
  1795. C THE XYPLOT ROUTINE COMMON
  1796. C
  1797.       COMMON /PLTXY/ XLABXY,YLABXY,SYLBXY,LABXY,IAXSPN,IPLTP1,IPLTP2
  1798.      1,IPLTP3,NLINES,IDEFXY,XMINXY,YMINXY,XMAXXY,YMAXXY,FGRPXY,INTSYM
  1799.      2,SYMSZ,ISYMNO,XLO,XHI,YLO,YHI,LINSYL,ISECY,ISYOPT,XSTXY,YSTXY
  1800.      3,XFRCXY,YFRCXY,TAG,LINXYX,LINXYY,CHRSIZ,NPTS
  1801. C
  1802. C BARPLT VARIABLES
  1803. C
  1804.       INTEGER NOBARS,COLIST(8),FGRPBP(8)
  1805.       REAL*4    XLOWBP,XHIBP,XSTBP,YSTBP,XFRCBP,YFRCBP,CHSZBP
  1806.       DIMENSION FIMX(8)
  1807.       CHARACTER*1 XLABBP(80),YLABBP(80),LABBP(80),SYLBBP(80)
  1808.       LOGICAL ISCYBP,STATBP
  1809.       INTEGER IMXC
  1810.       REAL*4  FBAR,YLOWBP,YHIBP
  1811. C
  1812. C THE BARPLOT COMMON
  1813. C
  1814.       COMMON /BAR/ FGRPBP,XLOWBP,XHIBP,IMXC,NOBARS,YLOWBP,YHIBP,
  1815.      1 FBAR,XLABBP,YLABBP,LABBP,IMXPTS,IMYPTS,XSTBP,YSTBP,XFRCBP,
  1816.      2 YFRCBP,CHSZBP,ISCYBP,IPLBP1,STATBP,IXCLBP,SYLBBP,SYLOBP,SYHIBP,
  1817.      3 SYOPBP
  1818. C
  1819. C THE CONTOUR PLOT VARIABLES
  1820. C
  1821.       CHARACTER*1 XLABCP(80),YLABCP(80),LABCP(80)
  1822.       DIMENSION CNLCP(20)
  1823.       REAL LABECP,LBSZCP,XSTCP,YSTCP,XFRCCP,YFRCCP,X1CP,XMXCP,Y1CP
  1824.       REAL YMXCP
  1825.       INTEGER FGRPCP,IOPTCP,IOP2CP,ICNNCP
  1826.  
  1827.       COMMON /PLTCP/ XLABCP,YLABCP,LABCP,FGRPCP,XSTCP,YSTCP
  1828.      1 ,XFRCCP,YFRCCP,LABECP,X1CP,XMXCP,Y1CP,YMXCP,IOPTCP,IOP2CP
  1829.      2 ,ICNNCP,CNLCP,LBSZCP
  1830. C
  1831. C
  1832. C THE POLAR PLOT VARIABLES
  1833. C
  1834.       DIMENSION LINXPP(10),LINYPP(10),SMSZPP(10),NTSMPP(10),ISMNPP(10)
  1835.       DIMENSION LNSLPP(10)
  1836.       INTEGER*4 FGRPPP(10),BGRPPP,LABEPP
  1837.       CHARACTER*1 LABPP(80)
  1838.       INTEGER*2 MODEPP(8)
  1839.       REAL XSTPP,YSTPP,XFRCPP,YFRCPP
  1840.       REAL RMAX
  1841.       CHARACTER*4 TAGPP
  1842.       INTEGER NLINPP
  1843.       COMMON /PLTPP/ RMAX,LABPP,FGRPPP,XSTPP,YSTPP,LABEPP,
  1844.      1 XFRCPP,YFRCPP,MODEPP,LINXPP,LINYPP,IDEFPP,SMSZPP,NTSMPP,
  1845.      2 ISMNPP,LNSLPP,MODE1A,MODE1B,MODE2A,NPTSPP,BGRPPP,TAGPP,NLINPP
  1846.  
  1847.       INTEGER PLTCNT,PLTMAX
  1848.       CHARACTER*1 ISAV(10,720)
  1849. C
  1850. C THE PLTSAV COMMON
  1851. C
  1852.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  1853.       CHARACTER*1 D3PL(328),XYPL(692),BPPL(440),CPPL(376),POPL(432)
  1854.       EQUIVALENCE (D3PL,XLAB3D),(XYPL,XLABXY),(BPPL,FGRPBP)
  1855.       EQUIVALENCE (XLABCP,CPPL),(RMAX,POPL)
  1856. C
  1857.       IF( PLTCNT .EQ. 0)PLTMAX = 0
  1858.       PLTCNT=PLTCNT+1
  1859.       IF(PLTCNT .GT. 10) PLTCNT = 1
  1860.       IF(PLTMAX .LE. 10)PLTMAX = PLTCNT
  1861.       IPLTYP(PLTCNT)=PLTP
  1862.       GOTO(100,200,300,400,500)PLTP
  1863.       RETURN
  1864. 100   DO 110 I=1,328
  1865. 110   ISAV(PLTCNT,I)=D3PL(I)
  1866.       RETURN
  1867. 200   DO 210 I=1,692
  1868. 210   ISAV(PLTCNT,I)=XYPL(I)
  1869.       RETURN
  1870. 300   DO 310 I=1,440
  1871. 310   ISAV(PLTCNT,I)=BPPL(I)
  1872.       RETURN
  1873. 400   DO 410 I=1,376
  1874. 410   ISAV(PLTCNT,I)=CPPL(I)
  1875.       RETURN
  1876. 500   DO 510 I=1,432
  1877. 510   ISAV(PLTCNT,I)=POPL(I)
  1878.       RETURN
  1879.       END
  1880. C
  1881. C ROUTINE TO RESTORE PLOTS AS SAVED BY SAVPLT
  1882. C
  1883.       SUBROUTINE PLREST(XXX,YYY,M,N,INCTRL,IOCTRL,IZ)
  1884.       INTEGER M,N,INCTRL,IOCTRL
  1885.       DIMENSION XXX(M,N),YYY(M,N)
  1886. C
  1887. C PLOT SPECIFIC VARIABLES
  1888. C
  1889.       INTEGER VAR(4)
  1890.       CHARACTER*4 ICURS(2)
  1891.       INTEGER*4 COLOR1,COLOR2,COLOR3,MARPLT,FGRP3D
  1892.       REAL*4 LABE3D
  1893.       CHARACTER*1 XLAB3D(80),YLAB3D(80),ZLAB3D(80)
  1894.       DIMENSION XYLIM(2,6),CAMLOC(3)
  1895.       INTEGER*4 FGRPXY(10),ISYMNO(10)
  1896.       INTEGER*4 INTSYM(10),LINSYL(10),LINXYX(10),LINXYY(10)
  1897.       DIMENSION SYMSZ(10)
  1898.       LOGICAL ISECY,PLTST,SETBG,BNHERE
  1899.       CHARACTER*1 XLABXY(80),YLABXY(80),SYLBXY(80),LABXY(80),ANS
  1900.       CHARACTER*4 TAG
  1901.       INTEGER*4 WIDTH,HEIGHT,ICOLOR,Window,Screen,viewport
  1902. C
  1903. C THE GLOBAL PLOT COMMON
  1904. C
  1905.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  1906. C
  1907. C THE 3D PLOT ROUTINE COMMON
  1908. C
  1909.       COMMON /PLT3D/ XLAB3D,YLAB3D,ZLAB3D,XYLIM,CAMLOC,MARPLT,FGRP3D
  1910.      1,XST3D,YST3D,XFRC3D,YFRC3D,LABE3D
  1911. C
  1912. C THE XYPLOT ROUTINE COMMON
  1913. C
  1914.       COMMON /PLTXY/ XLABXY,YLABXY,SYLBXY,LABXY,IAXSPN,IPLTP1,IPLTP2
  1915.      1,IPLTP3,NLINES,IDEFXY,XMINXY,YMINXY,XMAXXY,YMAXXY,FGRPXY,INTSYM
  1916.      2,SYMSZ,ISYMNO,XLO,XHI,YLO,YHI,LINSYL,ISECY,ISYOPT,XSTXY,YSTXY
  1917.      3,XFRCXY,YFRCXY,TAG,LINXYX,LINXYY,CHRSIZ,NPTS
  1918. C
  1919. C BARPLT VARIABLES
  1920. C
  1921.       INTEGER NOBARS,COLIST(8),FGRPBP(8)
  1922.       REAL*4    XLOWBP,XHIBP,XSTBP,YSTBP,XFRCBP,YFRCBP,CHSZBP
  1923.       DIMENSION FIMX(8)
  1924.       CHARACTER*1 XLABBP(80),YLABBP(80),LABBP(80),SYLBBP(80)
  1925.       LOGICAL ISCYBP,STATBP
  1926.       INTEGER IMXC
  1927.       REAL*4  FBAR,YLOWBP,YHIBP
  1928. C
  1929. C THE BARPLOT COMMON
  1930. C
  1931.       COMMON /BAR/ FGRPBP,XLOWBP,XHIBP,IMXC,NOBARS,YLOWBP,YHIBP,
  1932.      1 FBAR,XLABBP,YLABBP,LABBP,IMXPTS,IMYPTS,XSTBP,YSTBP,XFRCBP,
  1933.      2 YFRCBP,CHSZBP,ISCYBP,IPLBP1,STATBP,IXCLBP,SYLBBP,SYLOBP,SYHIBP,
  1934.      3 SYOPBP
  1935. C
  1936. C
  1937. C THE CONTOUR PLOT VARIABLES
  1938. C
  1939.       CHARACTER*1 XLABCP(80),YLABCP(80),LABCP(80)
  1940.       DIMENSION CNLCP(20)
  1941.       REAL LABECP,LBSZCP,XSTCP,YSTCP,XFRCCP,YFRCCP,X1CP,XMXCP,Y1CP
  1942.       REAL YMXCP
  1943.       INTEGER FGRPCP,IOPTCP,IOP2CP,ICNNCP
  1944.       COMMON /PLTCP/ XLABCP,YLABCP,LABCP,FGRPCP,XSTCP,YSTCP
  1945.      1 ,XFRCCP,YFRCCP,LABECP,X1CP,XMXCP,Y1CP,YMXCP,IOPTCP,IOP2CP
  1946.      2 ,ICNNCP,CNLCP,LBSZCP
  1947.  
  1948. C
  1949. C THE POLAR PLOT VARIABLES
  1950. C
  1951.       DIMENSION LINXPP(10),LINYPP(10),SMSZPP(10),NTSMPP(10),ISMNPP(10)
  1952.       DIMENSION LNSLPP(10)
  1953.       INTEGER*4 FGRPPP(10),BGRPPP,LABEPP
  1954.       CHARACTER*1 LABPP(80)
  1955.       INTEGER*2 MODEPP(8)
  1956.       REAL XSTPP,YSTPP,XFRCPP,YFRCPP
  1957.       REAL RMAX
  1958.       INTEGER NLINPP
  1959.       CHARACTER*4 TAGPP
  1960.       COMMON /PLTPP/ RMAX,LABPP,FGRPPP,XSTPP,YSTPP,LABEPP
  1961.      1 ,XFRCPP,YFRCPP,MODEPP,LINXPP,LINYPP,IDEFPP,SMSZPP,NTSMPP
  1962.      2 ,ISMNPP,LNSLPP,MODE1A,MODE1B,MODE2A,NPTSPP,BGRPPP,TAGPP,NLINPP
  1963.  
  1964.       INTEGER PLTCNT,PLTMAX
  1965.       CHARACTER*1 ISAV(10,720)
  1966. C
  1967. C THE PLTSAV COMMON
  1968. C
  1969.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  1970.       CHARACTER*1 D3PL(328),XYPL(692),BPPL(440),CPPL(376),POPL(432)
  1971.       EQUIVALENCE (D3PL,XLAB3D),(XYPL,XLABXY),(BPPL,FGRPBP)
  1972.       EQUIVALENCE (XLABCP,CPPL),(RMAX,POPL)
  1973. C
  1974.       IF(INCTRL .EQ. 0) THEN
  1975.        ISTRT = 1
  1976.        IEND = PLTMAX
  1977.       ELSE
  1978.        ISTRT = INCTRL
  1979.        IEND =INCTRL
  1980.       ENDIF
  1981.       DO 1000 I=ISTRT,IEND
  1982.       GOTO (100,200,300,400,500)IPLTYP(I)
  1983.       CYCLE
  1984. 100   DO 110 J = 1,328
  1985. 110   D3PL(J)=ISAV(I,J)
  1986.       CALL D3PLOT(XXX,M,N,1,IERR,IZ)
  1987.       CYCLE
  1988. 200   DO 210 J=1,692
  1989. 210   XYPL(J)=ISAV(I,J)
  1990.       CALL XYPLT(XXX,M,N,1,IERR)
  1991.       CYCLE
  1992. 300   DO 310 J=1,440
  1993. 310   BPPL(J)=ISAV(I,J)
  1994.       CALL BARPLT(XXX,M,N,1,IERR)
  1995.       CYCLE
  1996. 400   DO 410 J=1,376
  1997. 410   CPPL(J)=ISAV(I,J)
  1998.       CALL CONTUR(XXX,M,N,1,IERR,IZ)
  1999.       CYCLE
  2000. 500   DO 510 J=1,432
  2001. 510   POPL(J)=ISAV(I,J)
  2002.       CALL POLPLT(XXX,YYY,M,N,1,IERR,IZ)
  2003. 1000  CONTINUE
  2004.       RETURN
  2005.       END
  2006. C
  2007. C PLOT BUFFER CONTROL ROUTINE
  2008. C
  2009.       SUBROUTINE PLCTRL(XXX,YYY,M,N,IZ)
  2010.       INTEGER M,N
  2011.       DIMENSION XXX(M,N),YYY(M,N)
  2012. C
  2013.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2014.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2015.       INTEGER*4 DSPLY
  2016.       LOGICAL PLTST,SETBG,BNHERE
  2017. C
  2018. C THE GLOBAL PLOT COMMON
  2019. C
  2020.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2021. C
  2022. C PLOT SAVE VARIABLES
  2023. C
  2024.       INTEGER PLTCNT,PLTMAX
  2025.       CHARACTER*1 ISAV(10,720)
  2026.       CHARACTER*4 ICURS(2)
  2027. C
  2028. C THE PLTSAV COMMON
  2029. C
  2030.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  2031.  
  2032.       DATA (ICURS(I),I=1,2)/'CNTR','OL>>'/
  2033. 5     WRITE (WTE,10)COLOR1,ICURS,COLOR2
  2034.       DSPLY = 0
  2035.       CALL CHKEND
  2036.       IF(WIO .NE. 0)WRITE(WIO,10)COLOR1,ICURS,COLOR2
  2037. 10    FORMAT(1X,"PLEASE CHOOSE A PLOT BUFFER CONTROL OPTION:"/,
  2038.      1" [1] CLEAR THE BUFFER"/,
  2039.      2" [2] DELETE A PLOT"/,
  2040.      3" [3] SHOW THE PLOT BUFFER"/,
  2041.      4" [4] DISPLAY ONE OF THE SAVED PLOTS"/,
  2042.      4" [5] DISPLAY ALL SAVED PLOTS"/,
  2043.      5" [6] SAVE THE PLOT BUFFER"/,
  2044.      6" [7] RETURN TO THE MAIN MENU"/,4A4,$)
  2045.       CALL VALGET(0,IANS,'I')
  2046.       GOTO(100,200,200,600,300,400,500)IANS
  2047.       CALL MENUER(5)
  2048. 100   CONTINUE
  2049.       PLTMAX = 0
  2050.       PLTCNT = 0
  2051.       DO 120 I = 1,10
  2052. 120   IPLTYP(I)=0
  2053.       RETURN
  2054. 200   CONTINUE
  2055.       WRITE(WTE,210)
  2056.       IF(WIO .NE. 0) WRITE(WIO,210)
  2057. 210   FORMAT(1X,"THE FOLLOWING PLOTS ARE STORED IN THE BUFFER:"//,
  2058.      1 " BUFFER LOCATION   PLOT TYPE"/)
  2059.       DO 290 I=1,10
  2060.       GOTO(220,230,240,250,260)IPLTYP(I)
  2061.       CYCLE
  2062. 220   WRITE(WTE,225)I
  2063.       IF(WIO .NE. 0)WRITE(WIO,225)I
  2064. 225   FORMAT(10X,I2,7X,"3-D PLOT")
  2065.       CYCLE
  2066. 230   WRITE(WTE,235)I
  2067.       IF(WIO .NE. 0)WRITE(WIO,235)I
  2068. 235   FORMAT(10X,I2,7X,"X-Y PLOT")
  2069.       CYCLE
  2070. 240   WRITE(WTE,245)I
  2071.       IF(WIO .NE. 0) WRITE(WIO,245)I
  2072. 245   FORMAT(10X,I2,7X,"HISTOGRAM")
  2073.       CYCLE
  2074. 250   WRITE(WTE,255)I
  2075.       IF(WIO .NE. 0) WRITE(WIO,255)I
  2076. 255   FORMAT(10X,I2,7X,"CONTOUR PLOT")
  2077.       CYCLE
  2078. 260   WRITE(WTE,265)I
  2079.       IF(WIO .NE. 0) WRITE(WIO,255)I
  2080. 265   FORMAT(10X,I2,7X,"POLAR PLOT")
  2081. 290   CONTINUE
  2082.       IF (IANS .EQ. 2) THEN 
  2083.       WRITE(WTE,295)COLOR1,ICURS,COLOR2
  2084.       IF(WIO .NE. 0)WRITE(WIO,295)COLOR1,ICURS,COLOR2
  2085. 295   FORMAT("DELETE WHICH GRAPH?  ENTER THE BUFFER LOCATION."/,4A4,$)
  2086.       CALL VALGET(0,IANS,'I')
  2087.       IF(IANS .GE. 1 .AND. IANS .LE. 10) THEN
  2088.       IPLTYP(IANS)=0
  2089.       ENDIF
  2090.       ELSE
  2091.       WRITE(WTE,296)
  2092.       IF(WIO .NE. 0)WRITE(WIO,296)
  2093. 296   FORMAT(/)
  2094.       ENDIF      
  2095.       GOTO 5
  2096. 300   CONTINUE
  2097.       CALL PLREST(XXX,YYY,M,N,DSPLY,IERR,IZ)
  2098.       RETURN
  2099. 400   CALL SAVFIL
  2100.       RETURN
  2101. 600   WRITE(WTE,610)COLOR1,ICURS,COLOR2
  2102.       IF(WIO .NE. 0)WRITE(WIO,610)COLOR1,ICURS,COLOR2
  2103. 610   FORMAT(1X,"PLEASE ENTER THE PLOT BUFFER NUMBER TO BE DISPLAYED"/,
  2104.      1 4A4)
  2105.       CALL VALGET(0,DSPLY,'I')
  2106.       CALL PLREST(XXX,YYY,M,N,DSPLY,IERR,IZ)
  2107.       GOTO 5
  2108. 500   RETURN      
  2109.       END
  2110. C
  2111. C ROUTINE TO SAVE PLOT DEFINITIONS
  2112. C
  2113.       SUBROUTINE SAVFIL
  2114.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2115.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2116. C
  2117. C THE GLOBAL PLOT COMMON
  2118. C
  2119.       LOGICAL PPLTST,SETBG,BNHERE
  2120.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2121. C
  2122. C PLOT SAVE VARIABLES
  2123. C
  2124.       INTEGER PLTCNT,PLTMAX
  2125.       CHARACTER*1 ISAV(10,720)
  2126.       CHARACTER*4 ICURS(2),NAME(32)
  2127. C
  2128. C THE PLTSAV COMMON
  2129. C
  2130.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  2131.       DATA (ICURS(I),I=1,2)/'PLTS','AV>>'/
  2132. C
  2133.       IPL = 45
  2134.       WRITE(WTE,10)COLOR1,ICURS,COLOR2
  2135.       IF(WIO .NE. 0)WRITE(WIO,10)COLOR1,ICURS,COLOR2
  2136. 10    FORMAT(1X,"PLEASE ENTER THE SAVE FILE NAME."/,4A4,$)
  2137.       READ(RTE,15)NAME
  2138. 15    FORMAT(32A1)
  2139. 20    FORMAT(1X,32A1)
  2140.       CALL FILES(IPL,NAME)
  2141.       IF(FE .EQ. 0) THEN
  2142.       WRITE(IPL,25)PLTCNT,PLTMAX
  2143. 25    FORMAT(2I2)
  2144.       DO 50 J=1,10
  2145.       IF (IPLTYP(J) .GT. 0 .AND. IPLTYP(J) .LT. 10) THEN
  2146.         WRITE(IPL,30)IPLTYP(J)
  2147. 30      FORMAT(I1)
  2148.         WRITE(IPL,35)(ISAV(J,KK),KK=1,360)
  2149.         WRITE(IPL,35)(ISAV(J,KK),KK=361,720)
  2150. 35      FORMAT(360Z2)
  2151.       ENDIF
  2152. 50    CONTINUE
  2153.       CALL FILES(-1*IPL,NAME)
  2154.       ENDIF
  2155.       RETURN 
  2156.       END      
  2157. C
  2158. C ROUTINE TO LOAD PLOT DEFINITIONS
  2159. C
  2160.       SUBROUTINE LODFIL(XXX,YYY,M,N,NAME,INCTRL,IOCTRL,IZ)
  2161.       INTEGER M,N
  2162.       DIMENSION XXX(M,N),YYY(M,N)
  2163.       CHARACTER*4 NAME(32)
  2164.       INTEGER INCTRL,IOCTRL
  2165.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2166.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2167. C
  2168. C THE GLOBAL PLOT COMMON
  2169. C
  2170.       LOGICAL PLTST,SETBG,BNHERE
  2171.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2172. C
  2173. C PLOT SAVE VARIABLES
  2174. C
  2175.       INTEGER PLTCNT,PLTMAX
  2176.       CHARACTER*1 ISAV(10,720)
  2177.       CHARACTER*4 ICURS(2)
  2178.       LOGICAL GOTONE
  2179. C
  2180. C THE PLTSAV COMMON
  2181. C
  2182.       COMMON /SAV/ PLTCNT,IPLTYP(10),PLTMAX,ISAV
  2183.       DATA (ICURS(I),I=1,2)/'PLTL','OD>>'/
  2184. C
  2185.       IPL = 45
  2186.       GOTONE = .FALSE.
  2187. 5     CONTINUE
  2188.       IF(INCTRL .EQ. 0) THEN
  2189.        WRITE(WTE,10)COLOR1,ICURS,COLOR2
  2190.        IF(WIO .NE. 0)WRITE(WIO,10)COLOR1,ICURS,COLOR2
  2191.        CALL CHKEND
  2192. 10     FORMAT(1X,"PLEASE ENTER THE FILE NAME TO BE LOADED."/,4A4,$)
  2193.        READ(RTE,15)NAME
  2194. 15     FORMAT(32A1)
  2195.        IF(WIO .NE. 0)WRITE(WIO,20)NAME
  2196. 20     FORMAT(1X,32A1)
  2197.       ENDIF
  2198.       DO 22 I=1,10
  2199. 22    IPLTYP(I)=0
  2200.       CALL FILES(IPL,NAME)
  2201.       IF(FE .EQ. 0) THEN
  2202.       READ(IPL,25,END=55)PLTCNT,PLTMAX
  2203. 25    FORMAT(2I2)
  2204. C
  2205. C CHECK THE HEADER FOR VALIDITY
  2206. C
  2207.       IF(PLTCNT .GT. 10 .OR. PLTCNT .LT. 1 .OR. PLTMAX .GT. 10 .OR.
  2208.      1  PLTMAX .LT. 1) THEN
  2209.         WRITE(WTE,23)COLOR3,COLOR2
  2210.         IF(WIO .NE. 0) WRITE(WIO,23)COLOR3,COLOR2
  2211. 23      FORMAT(A4,"ERROR IN PLOT DEFINITION FILE"/,"NOT A VALID PLOT
  2212.      1 DEFINITION",A4)
  2213.         CALL FILES(-1*IPL,NAME)
  2214.         GOTO 5
  2215.       ENDIF
  2216. C
  2217. C READ IN THE DEFINITION
  2218. C
  2219.       DO 50 J=1,PLTMAX
  2220.         READ(IPL,30,END=55)IPLTYP(J)
  2221. 30      FORMAT(I1)
  2222.         READ(IPL,35,END=55)(ISAV(J,KK),KK=1,360)
  2223.         READ(IPL,35,END=55)(ISAV(J,KK),KK=361,720)
  2224. 35      FORMAT(360Z2)
  2225.         GOTONE=.TRUE.
  2226. 50    CONTINUE
  2227. 55    CONTINUE
  2228.       CALL FILES(-1*IPL,NAME)
  2229.       IF(GOTONE)CALL PLREST(XXX,YYY,M,N,0,IERR,IZ)
  2230.       ENDIF
  2231.       RETURN
  2232.       END
  2233. C
  2234. C ROUTINE TO END THE CURRENT PLOT
  2235. C
  2236.       SUBROUTINE CHKEND
  2237.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  2238.       LOGICAL PLTST,SETBG,BNHERE
  2239. C
  2240. C THE GLOBAL PLOT COMMON
  2241. C
  2242.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2243. C
  2244.       IF(PLTST) CALL GD13HI(13,X,Y)
  2245.       IF(X .NE. 0)PLTST = .FALSE.
  2246.       RETURN
  2247.       END
  2248. C
  2249. C THE CONTOUR PLOTTING ROUTINE
  2250. C
  2251.       SUBROUTINE CONTUR(XXX,M,N,INCTRL,IOCTRL,IZ)
  2252.       INTEGER M,N
  2253.       DIMENSION XXX(M,N)
  2254.       INTEGER INCTRL,IOCTRL
  2255.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2256.       INTEGER*4 COLOR1,COLOR2,COLOR3,CHOICE
  2257.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2258.  
  2259. C
  2260. C PLOT SPECIFIC VARIABLES
  2261. C
  2262.  
  2263.       CHARACTER*1 IZ(5000)
  2264.       LOGICAL PLTST,SETBG,BNHERE
  2265.       CHARACTER*4 ICURS(2)
  2266.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2267. C
  2268. C THE CONTOUR PLOT VARIABLES
  2269. C
  2270.       CHARACTER*1 XLABCP(80),YLABCP(80),LABCP(80)
  2271.       DIMENSION CNLCP(20)
  2272.       REAL LABECP,LBSZCP,XSTCP,YSTCP,XFRCCP,YFRCCP,X1CP,XMXCP,Y1CP
  2273.       REAL YMXCP
  2274.       INTEGER FGRPCP,IOPTCP,IOP2CP,ICNNCP
  2275.       COMMON /PLTCP/ XLABCP,YLABCP,LABCP,FGRPCP,XSTCP,YSTCP
  2276.      1 ,XFRCCP,YFRCCP,LABECP,X1CP,XMXCP,Y1CP,YMXCP,IOPTCP,IOP2CP
  2277.      2 ,ICNNCP,CNLCP,LBSZCP
  2278. C
  2279.       DATA (ICURS(I),I=1,2)/'Cont','or>>'/
  2280. C
  2281. C FIGURE OUT WHO CALLED US AND IF SO INDICATED JUMP DIRECTLY TO THE PLOT
  2282. C
  2283.       IF(INCTRL .NE. 0) GOTO 900
  2284. C
  2285. C SET UP THE DEFAULTS
  2286. C
  2287.       DO 25 I=1,80
  2288.       XLABCP(I)=Z'20'
  2289.       YLABCP(I)=Z'20'
  2290. 25    LABCP(I)=Z'20'
  2291.       LABECP=0
  2292.       XSTCP=0
  2293.       YSTCP=0
  2294.       XFRCCP=100
  2295.       YFRCCP=100
  2296.       FGRPCP=1
  2297.       IOCTRL=0
  2298.       X1CP=0
  2299.       XMXCP=M
  2300.       Y1CP=0
  2301.       YMXCP=N
  2302.       IOPTCP=0
  2303.       IOP2CP=0
  2304.       ICNNCP=20
  2305.       XMAX = GSXLCM()
  2306.       YMAX = GSYLCM()
  2307.       MN=M*N
  2308.       CALL MINMAX(XXX,MN,ZMIN,ZMAX)
  2309.       DO 55 I = 1,20
  2310. 55    CNLCP(I)=ZMIN + (ZMAX-ZMIN)*(FLOAT(I)-1)/20
  2311. C
  2312. C DETERMINE THE CHOICES
  2313. C
  2314.        CALL CHKEND
  2315. 100   WRITE(WTE,101)COLOR1,ICURS,COLOR2
  2316.       CALL CHKEND
  2317.       IF(WIO .NE. 0) WRITE(WIO,101)COLOR1,ICURS,COLOR2
  2318. 101   FORMAT(1X,//"PLEASE CHOOSE AN OPTION"/,
  2319.      1 " [1]  CHOOSE PLOT LABELS"/,
  2320.      2 " [2]  CHOOSE PLOT VALUES"/,
  2321.      3 " [3]  CHOOSE NUMBER OF CONTOURS"/,
  2322.      4 " [4]  CHOOSE CONTOUR LEVELS"/,
  2323.      5 " [5]  SET THE BACKGROUND COLOR"/,
  2324.      5 " [6]  CHOOSE PLOT COLOR"/,
  2325.      6 " [7]  CHOOSE PLOT SIZE"/,
  2326.      7 " [8]  DO THE PLOT"/,
  2327.      8 " [9]  END THE CURRENT PLOT"/,
  2328.      8 " [10] EXIT CONTOUR PLOTS"/,
  2329.      94A4,$)
  2330.       CALL VALGET(0,CHOICE,'I')
  2331.       GOTO(200,300,400,500,600,700,800,900,899,990),CHOICE
  2332.       CALL MENUER(10)
  2333.       GOTO 100
  2334. C
  2335. C  SELECT THE LABELS
  2336. C
  2337. 200   CONTINUE
  2338.       CALL CHKEND
  2339.       WRITE(WTE,201)COLOR1,ICURS,COLOR2
  2340. 201   FORMAT(1X,//"ENTER THE X AXIS LABEL"/,4A4,$)
  2341.       IF(WIO .NE. 0)WRITE(WIO,201)COLOR1,ICURS,COLOR2
  2342.       CALL GETLAB(XLABCP)
  2343.       WRITE(WTE,202)COLOR1,ICURS,COLOR2
  2344.       IF(WIO .NE. 0)WRITE(WIO,202)COLOR1,ICURS,COLOR2
  2345. 202   FORMAT(1X,//"ENTER THE Y AXIS LABEL"/,4A4,$)
  2346.       CALL GETLAB(YLABCP)
  2347.       WRITE(WTE,203)COLOR1,ICURS,COLOR2
  2348.       IF(WIO .NE. 0)WRITE(WIO,203)COLOR1,ICURS,COLOR2
  2349. 203   FORMAT(1X,//"ENTER THE PLOT LABEL"/,4A4,$)
  2350.       CALL GETLAB(LABCP)
  2351.       WRITE(WTE,204)COLOR1,ICURS,COLOR2
  2352.       IF(WIO .NE. 0) WRITE(WIO,204)COLOR1,ICURS,COLOR2
  2353. 204   FORMAT(1X,//"ENTER THE SIZE OF THE LABELS (CM)"/,A4
  2354.      1 ,4A4,$)
  2355.       CALL VALGET(LABSIZ,0,'F')
  2356.       IF(LABSIZ .NE. 0) LABECP = LABSIZ
  2357.       GOTO 100
  2358. C
  2359. C SELECT THE DATA
  2360. C
  2361. 300   CONTINUE
  2362.       CALL CHKEND
  2363.       WRITE(WTE,301)COLOR1,ICURS,COLOR2
  2364. 301   FORMAT(1X,"ENTER THE MINIMUM VALUE OF X"/,4A4,$)
  2365.       IF(WIO .NE. 0)WRITE(WIO,301)COLOR1,ICURS,COLOR2
  2366.       CALL VALGET(X1CP,0,'F')
  2367.       WRITE(WTE,302)COLOR1,ICURS,COLOR2
  2368. 302   FORMAT(1X,"ENTER THE MAXIMUM VALUE OF X"/,4A4,$)
  2369.       IF(WIO .NE. 0)WRITE(WIO,302)COLOR1,ICURS,COLOR2
  2370.       CALL VALGET(XMXCP,0,'F')
  2371.       WRITE(WTE,303)COLOR1,ICURS,COLOR2
  2372. 303   FORMAT(1X,"ENTER THE MINIMUM VALUE OF Y"/,4A4,$)
  2373.       IF(WIO .NE. 0)WRITE(WIO,303)COLOR1,ICURS,COLOR2
  2374.       CALL VALGET(Y1CP,0,'F')
  2375.       WRITE(WTE,304)COLOR1,ICURS,COLOR2
  2376. 304   FORMAT(1X,"ENTER THE MAXIMUM VALUE OF Y"/,4A4,$)
  2377.       IF(WIO .NE. 0)WRITE(WIO,304)COLOR1,ICURS,COLOR2
  2378.       CALL VALGET(YMXCP,0,'F')
  2379.       GOTO 100
  2380. C
  2381. C DEFINE THE NUMBER OF CONTOURS
  2382. C
  2383. 400   CONTINUE
  2384.       CALL CHKEND
  2385.       WRITE(WTE,425)COLOR1,ICURS,COLOR2
  2386.       IF(WIO .NE. 0)WRITE(WIO,425)COLOR1,ICURS,COLOR2
  2387. 425   FORMAT(1X,//"ENTER THE NUMBER OF CONTOURS TO BE MAPPED"/,4A4,$)
  2388.       CALL VALGET(0,ICNNCP,'I')
  2389.       IF(ICNNCP .GT. 20) ICNNCP = 20
  2390.       DO 455 I = 1,ICNNCP
  2391. 455   CNLCP(I)=ZMIN + (ZMAX-ZMIN)*(FLOAT(I)-1)/20
  2392.       GOTO 100
  2393. C
  2394. C CHOOSE THE CONTOUR LEVELS
  2395. C
  2396. 500   CONTINUE
  2397.       CALL CHKEND
  2398.       GOTO 100
  2399. C
  2400. C SET THE BACKGROUND COLOR
  2401. C
  2402. 600   CONTINUE
  2403.       CALL CHKEND
  2404.       CALL CHBACK(ICURS)
  2405.       GOTO 100
  2406. C
  2407. C SELECT THE PLOT COLOR
  2408. C
  2409. 700   CONTINUE
  2410.       CALL CHKEND
  2411.       CALL SETFG(FGRPCP,ICURS)
  2412.       GOTO 100
  2413. C
  2414. C SELECT THE PLOT SIZE
  2415. C
  2416. 800   CONTINUE
  2417. C
  2418.       CALL CHKEND
  2419.       CALL MAKSIZ(ICURS,XSTCP,XFRCCP,YSTCP,YFRCCP)
  2420.       XSTCP=XSTCP*100.
  2421.       YSTCP=YSTCP*100.
  2422.       XFRCCP=XFRCCP*100.+XSTCP
  2423.       YFRCCP=YFRCCP*100.+YSTCP
  2424.       GOTO 100
  2425. C
  2426. C END THE PLOT
  2427. C
  2428. 899   IF (PLTST) THEN
  2429.        PLTST = .FALSE.
  2430.        CALL PLTFIN
  2431.       ENDIF
  2432.       GOTO 100
  2433. C
  2434. C DO THE PLOT
  2435. C
  2436. 900   CONTINUE
  2437.       CALL CHKEND
  2438. C
  2439. C SAVE THE PLOT SETTINGS, UNLESS WE ARE WORKING FROM A SAVED FILE
  2440. C
  2441.       IF(INCTRL .EQ. 0) CALL SAVPLT(4)
  2442.       IF (.NOT. PLTST)THEN
  2443.        PLTST = .TRUE.
  2444.        CALL BGNPLT
  2445.       ENDIF
  2446.       IF(SETBG) THEN
  2447.        SETBG = .FALSE.
  2448.        CALL SETBAK(BGRP)
  2449.       ENDIF
  2450.       CALL GSCOLR(FGRPCP,IERR)
  2451.       CALL MAPSIZ(XSTCP,XFRCCP,YSTCP,YFRCCP,LABECP)
  2452.       CALL MAPIT(X1CP,XMXCP,Y1CP,YMXCP,XLABCP,YLABCP,LABCP,IOPTCP)
  2453.       CALL CONTOR(XXX,M,IZ,M,N,X1CP,XMXCP,Y1CP,YMXCP,ICNNCP,CNLCP)
  2454.       IF(INCTRL .NE. 0)RETURN
  2455.       GOTO 100
  2456. 990   CONTINUE
  2457.       RETURN
  2458.       END
  2459. C
  2460. C THE POLAR PLOTTING ROUTINE
  2461. C
  2462.       SUBROUTINE POLPLT(XXX,YYY,M,N,INCTRL,IOCTRL,IZ)
  2463.       INTEGER M,N
  2464.       DIMENSION XXX(M,N),YYY(M,N)
  2465.       INTEGER INCTRL,IOCTRL
  2466.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2467.       INTEGER*4 COLOR1,COLOR2,COLOR3,CHOICE
  2468.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2469.  
  2470. C
  2471. C PLOT SPECIFIC VARIABLES
  2472. C
  2473.  
  2474.       CHARACTER*1 IZ(5000)
  2475.       LOGICAL PLTST,SETBG,BNHERE
  2476.       CHARACTER*4 ICURS(2)
  2477.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2478. C
  2479. C THE POLAR PLOT VARIABLES
  2480. C
  2481.       DIMENSION X(10,500),Y(10,500),XPL(500),YPL(500)
  2482.       DIMENSION LINXPP(10),LINYPP(10),SMSZPP(10),NTSMPP(10),ISMNPP(10)
  2483.       DIMENSION LNSLPP(10)
  2484.       INTEGER*4 FGRPPP(10),BGRPPP,LABEPP
  2485.       CHARACTER*1 LABPP(80)
  2486.       CHARACTER*4 TAGPP,ROWTAG,COLTAG
  2487.       INTEGER*2 MODEPP(8)
  2488.       REAL XSTPP,YSTPP,XFRCPP,YFRCPP
  2489.       REAL RMAX
  2490.       INTEGER NPTSPP,NLINPP
  2491.       COMMON /PLTPP/ RMAX,LABPP,FGRPPP,XSTPP,YSTPP,LABEPP
  2492.      1 ,XFRCPP,YFRCPP,MODEPP,LINXPP,LINYPP,IDEFPP,SMSZPP,NTSMPP
  2493.      2 ,ISMNPP,LNSLPP,MODE1A,MODE1B,MODE2A,NPTSPP,BGRPPP,TAGPP,NLINPP
  2494. C
  2495.       DATA (ICURS(I),I=1,2)/'Pola','r >>'/,ROWTAG/' ROW'/,COLTAG/' COL'/
  2496. C
  2497. C FIGURE OUT WHO CALLED US AND IF SO INDICATED JUMP DIRECTLY TO THE PLOT
  2498. C
  2499.       IF(INCTRL .NE. 0) GOTO 900
  2500. C
  2501. C SET UP THE DEFAULTS
  2502. C
  2503.       DO 25 I=1,80
  2504. 25    LABPP(I)=CHAR(0)
  2505.       DO 10 I = 1,10
  2506.       SMSZPP(I) = 0
  2507.       NTSMPP(I) = 0
  2508.       ISMNPP(I) = 0
  2509.       LNSLPP(I) = 1
  2510.       LINXPP(I) = 0
  2511.       LINYPP(I) = 0
  2512. 10    FGRPPP(I) = I+1
  2513.       LABEPP = 0
  2514.       MODE1A = 1
  2515.       MODE1B = 0
  2516.       MODE2A = 1
  2517.       MODEPP(2)=1
  2518.       MODEPP(3)=0
  2519.       MODEPP(4)=1
  2520.       MODEPP(5)=-30
  2521.       MODEPP(7)=2
  2522.       XSTPP=0
  2523.       YSTPP=0
  2524.       XFRCPP=100
  2525.       YFRCPP=100
  2526.       BGRPPP = 1
  2527.       IOCTRL=0
  2528.       NLINPP = 0
  2529.       MN=M*N
  2530. C
  2531. C CHOOSE THE PLOT MODE 
  2532. C
  2533.       CALL CHKEND
  2534. 7     WRITE(WTE,3)COLOR1,ICURS,COLOR2
  2535.       IF(WIO .NE. 0)WRITE(WIO,3)COLOR1,ICURS,COLOR2
  2536. 3     FORMAT(1X,"PLEASE CHOOSE THE POLAR PLOT MODE:"/,
  2537.      1" [1] R-THETA PLOT (TYPE REAL)"/,
  2538.      2" [2] COMPLEX (X+IY) PLOT"/,4A4,$)
  2539.       CALL VALGET(0,IDEFPP,'I')
  2540.       GOTO(4,4),IDEFPP
  2541.       CALL MENUER(2)
  2542.       GOTO 7
  2543. 4     CONTINUE
  2544.       MODE1A = IDEFPP
  2545.       IDEFPP = IDEFPP + 2
  2546. C
  2547. C DETERMINE WHETHER TO PLOT ALONG ROWS OR COLUMNS
  2548. C
  2549.       CALL PLTPRP(X,Y,M,N,XXX,YYY,ICURS,TAGPP,NLINPP
  2550.      1,LINXPP,LINYPP,NPTSPP,IDEFPP)
  2551. C
  2552. C DETERMINE THE CHOICES
  2553. C
  2554. 100   WRITE(WTE,101)COLOR1,ICURS,COLOR2
  2555.       CALL CHKEND
  2556.       IF(WIO .NE. 0) WRITE(WIO,101)COLOR1,ICURS,COLOR2
  2557. 101   FORMAT(1X,//"PLEASE CHOOSE AN OPTION"/,
  2558.      1 " [1]  DEFINE THE PLOT LABEL"/,
  2559.      2 " [2]  CHOOSE PLOT AXIS TYPE"/,
  2560.      3 " [3]  CHOOSE LINE OPTIONS"/,
  2561.      4 " [4]  CHOOSE PLOT AXIS AND TICK MARK OPTIONS"/,
  2562.      5 " [5]  CHOOSE THE BACKGROUND COLOR"/,
  2563.      5 " [6]  CHOOSE PLOT COLOR"/,
  2564.      6 " [7]  CHOOSE PLOT SIZE"/,
  2565.      7 " [8]  DO THE PLOT"/,
  2566.      8 " [9]  END THE CURRENT PLOT"/,
  2567.      8 " [10] EXIT POLAR PLOTS"/,
  2568.      94A4,$)
  2569.       CALL VALGET(0,CHOICE,'I')
  2570.       GOTO(200,300,400,500,600,700,800,900,899,990),CHOICE
  2571.       CALL MENUER(10)
  2572.       GOTO 100
  2573. C
  2574. C  SELECT THE LABELS
  2575. C
  2576. 200   CONTINUE
  2577.       CALL CHKEND
  2578.       WRITE(WTE,203)COLOR1,ICURS,COLOR2
  2579.       IF(WIO .NE. 0)WRITE(WIO,203)COLOR1,ICURS,COLOR2
  2580. 203   FORMAT(1X,//"ENTER THE PLOT LABEL"/,4A4,$)
  2581.       CALL GETLAB(LABPP)
  2582.       GOTO 100
  2583. C
  2584. C SELECT THE DATA
  2585. C
  2586. 300   CONTINUE
  2587.       CALL CHKEND
  2588.       WRITE(WTE,301)COLOR1,ICURS,COLOR2
  2589.       IF(WIO .NE. 0)WRITE(WIO,301)COLOR1,ICURS,COLOR2
  2590. 301   FORMAT(1X,//"CHOOSE THE PLOT AXIS TYPE"/
  2591.      1," [1] LINEAR RADIUS PLOT"/
  2592.      2," [2] LOGARITHMIC RADIUS"/
  2593.      3," [3] RETURN TO MAIN MENU"/,4A4,$)
  2594.       CALL VALGET(0,ICHOICE,'I')
  2595.       GOTO (330,340,100),ICHOICE
  2596.       CALL MENUER(3)
  2597.       GOTO 300
  2598. 330   MODE2A = 1
  2599.       GOTO 300
  2600. 340   MODE2A = 2
  2601.       GOTO 300
  2602. C
  2603. C LINE OPTIONS
  2604. C
  2605. 400   CONTINUE
  2606.       WRITE(WTE,410)COLOR1,ICURS,COLOR2
  2607.       IF(WIO .NE. 0)WRITE(WIO,410)COLOR1,ICURS,COLOR2
  2608. 410   FORMAT(1X,"PLEASE CHOOSE A DATA LINE OPTION"/,
  2609.      1" [1] CHOOSE LINE COLOR"/,
  2610.      2" [2] CHOOSE LINE STYLE"/,
  2611.      3" [3] RETURN TO POLAR PLOT MENU"/,4A4,$)
  2612.       CALL VALGET(0,ICHOICE,'I')
  2613.       GOTO (420,443,100),ICHOICE
  2614.       CALL MENUER(3)
  2615.       GOTO 400
  2616. 420   CONTINUE
  2617.       DO 425 I = 1,NLINPP
  2618.       WRITE(WTE,421)I
  2619. 421   FORMAT(1X,"FOR LINE NUMBER ",I2)
  2620.       IF(WIO .NE. 0) WRITE(WIO,421)I
  2621.       CALL SETFG(FGRPPP(I),ICURS)
  2622. 425   CONTINUE
  2623.       GOTO 400
  2624. 443   CONTINUE
  2625.       CALL CHKEND
  2626.       CALL LNOPTS(NLINPP,SMSZPP,NTSMPP,ISMNPP,LNSLPP,ICURS)
  2627.       GOTO 400
  2628. C
  2629. C AXIS AND TICK MARK OPTIONS
  2630. C
  2631. 500   CONTINUE
  2632.       CALL CHKEND
  2633.       WRITE(WTE,505)COLOR1,ICURS,COLOR2 
  2634.       IF(WIO .NE. 0)WRITE(WIO,505)COLOR1,ICURS,COLOR2
  2635. 505   FORMAT(1X,"SELECT AXIS OR TICK MARK OPTIONS"/,
  2636.      1 " [1] NO AXIS, TICK MARKS, OR RANGE RINGS"/,
  2637.      2 " [2] DRAW AXIS ONLY"/,
  2638.      3 " [3] DRAW TICK MARKS"/,
  2639.      4 " [4] DRAW RANGE RINGS"/,
  2640.      5 " [5] RETURN TO MAIN MENU"/,4A4,$)
  2641.  
  2642.       CALL VALGET(0,ICHOICE,'I')
  2643.       GOTO(510,520,530,540,100),ICHOICE
  2644.       CALL MENUER(5)
  2645.       GOTO 500
  2646. 510   CONTINUE
  2647.       MODE1B = 2
  2648.       GOTO 500
  2649. 520   MODE1B = 0
  2650.       GOTO 500
  2651. 530   WRITE(WTE,535)COLOR1,ICURS,COLOR2
  2652.       IF(WIO .NE. 0)WRITE(WIO,535)COLOR1,ICURS,COLOR2
  2653. 535   FORMAT(1X,"ENTER THE NUMBER OF DEGREES BETWEEN EACH TICK MARK"/,
  2654.      1 4A4,$)
  2655.       CALL VALGET(0,ICHOICE,'I')
  2656.       MODEPP(5) = ICHOICE
  2657. 534   CONTINUE
  2658.       WRITE(WTE,536)COLOR1,ICURS,COLOR2
  2659.       IF(WIO .NE. 0)WRITE(WIO,536)COLOR1,ICURS,COLOR2
  2660. 536   FORMAT(1X,"PLEASE CHOOSE AN OPTION"/,
  2661.      1 "[1] INWARD POINTING TICK MARKS"/,
  2662.      2 "[2] OUTWARD POINTING TICK MARKS"/,4A4,$)
  2663.       CALL VALGET(0,ICHOICE,'I')
  2664.       GOTO (537,538),ICHOICE
  2665.       CALL MENUER(2)
  2666.       GOTO 534
  2667. 537   IF(MODEPP(5) .GT. 0)MODEPP(5) = -MODEPP(5)
  2668.       GOTO 500
  2669. 538   IF(MODEPP(5) .LT. 0)MODEPP(5) = -MODEPP(5)
  2670.       GOTO 500
  2671.  
  2672. 540   CONTINUE
  2673.       WRITE(WTE,542)COLOR1,ICURS,COLOR2
  2674.       IF(WIO .NE. 0)WRITE(WIO,542)COLOR1,ICURS,COLOR2
  2675. 542   FORMAT(1X,"PLEASE ENTER THE NUMBER OF RANGE RINGS TO PLOT"/,4A4,$)
  2676.       CALL VALGET(0,ICHOICE,'I')
  2677.       MODEPP(3) = ICHOICE
  2678. 543   CONTINUE
  2679.       WRITE(WTE,544)COLOR1,ICURS,COLOR2
  2680.       IF(WIO .NE. 0)WRITE(WIO,544)COLOR1,ICURS,COLOR2
  2681. 544   FORMAT(1X,"PLEASE CHOOSE A RANGE RING LINE OPTION"/,
  2682.      1" [1] SOLID LINE"/,
  2683.      2" [2] LONG DASHED LINE"/,
  2684.      3" [3] SHORT DASHED LINE"/,
  2685.      4" [4] DOT-DASH LINE"/,4A4,$)
  2686.       CALL VALGET(0,ICHOICE,'I')
  2687.       GOTO (546,546,546,546),ICHOICE
  2688.       CALL MENUER(4)
  2689.       GOTO 543
  2690. 546   MODEPP(4) = ICHOICE
  2691.       GOTO 500
  2692. C
  2693. C SET THE BACKGROUND COLOR
  2694. C
  2695. 600   CONTINUE
  2696.       CALL CHKEND
  2697.       CALL CHBACK(ICURS)
  2698.       GOTO 100
  2699. C
  2700. C SELECT THE PLOT COLOR
  2701. C
  2702. 700   CONTINUE
  2703.       CALL CHKEND
  2704.       CALL SETFG(BGRPPP,ICURS)
  2705.       GOTO 100
  2706. C
  2707. C SELECT THE PLOT SIZE
  2708. C
  2709. 800   CONTINUE
  2710. C
  2711.       CALL CHKEND
  2712.       CALL MAKSIZ(ICURS,XSTPP,XFRCPP,YSTPP,YFRCPP)
  2713.       XSTPP=XSTPP*100.
  2714.       YSTPP=YSTPP*100.
  2715.       XFRCPP=XFRCPP*100.+XSTPP
  2716.       YFRCPP=YFRCPP*100.+YSTPP
  2717.       GOTO 100
  2718. C
  2719. C END THE PLOT
  2720. C
  2721. 899   IF (PLTST) THEN
  2722.        PLTST = .FALSE.
  2723.        CALL PLTFIN
  2724.       ENDIF
  2725.       GOTO 100
  2726. C
  2727. C DO THE PLOT
  2728. C
  2729. 900   CONTINUE
  2730.       CALL CHKEND
  2731. C
  2732. C DETERMINE WHETHER THIS IS THE FIRST PLOT.
  2733. C
  2734.        IF(.NOT. PLTST) THEN 
  2735.          PLTST = .TRUE.
  2736.          CALL BGNPLT
  2737.        ENDIF
  2738.        IF(SETBG) THEN
  2739.          SETBG = .FALSE.
  2740.          CALL SETBAK(BGRP)
  2741.        ENDIF
  2742. C
  2743. C  IF THIS IS A BATCH JOB, DO THE FOLLOWING
  2744. C
  2745.       IF(INCTRL .NE. 0) THEN
  2746.        DO 840 J=1,NLINPP
  2747.         IF(TAGPP .EQ. ROWTAG) THEN
  2748.          DO 810 I = 1,N
  2749.           X(J,I)=XXX(LINXPP(J),I)
  2750. 810      CONTINUE
  2751.         ELSE
  2752.          DO 820 I=1,M
  2753.           X(J,I)=XXX(I,LINXPP(J))
  2754. 820      CONTINUE
  2755.         ENDIF
  2756.         IF(TAGPP .EQ. ROWTAG) THEN
  2757.          DO 830 I = 1,N
  2758.           IF(MODE1A .EQ. 1) THEN
  2759.            Y(J,I)=XXX(LINYPP(J),I)
  2760.           ELSE
  2761.            Y(J,I)=YYY(LINYPP(J),I)
  2762.           ENDIF
  2763. 830      CONTINUE
  2764.         ELSE
  2765.          DO 832 I=1,M
  2766.           IF(MODE1A .EQ. 1) THEN
  2767.            Y(J,I)=XXX(I,LINYPP(J))
  2768.           ELSE
  2769.            Y(J,I)=YYY(I,LINYPP(J))
  2770.           ENDIF
  2771. 832      CONTINUE
  2772.         ENDIF
  2773. 840    CONTINUE
  2774.       ENDIF
  2775. C
  2776. C FIND THE MAXIMUM RADIUS
  2777. C
  2778.       IF(INCTRL .EQ. 0) THEN
  2779.        RMAX = -1
  2780.        DO 905 I = 1,NLINPP
  2781.        DO 905 J = 1,NPTSPP
  2782. 905    RMAX = AMAX1(RMAX,X(I,J))
  2783.        IF(MODE1A .EQ. 2) THEN
  2784.          DO 906 I = 1,NLINPP
  2785.          DO 906 J = 1,NPTSPP
  2786. 906      RMAX = AMAX1(RMAX,Y(I,J))
  2787.        ENDIF
  2788.       ENDIF
  2789.  
  2790.       DO 920 J = 1,NPTSPP
  2791.       XPL(J) = X(1,J)
  2792.       YPL(J) = Y(1,J)
  2793. 920   CONTINUE
  2794.       IF(INCTRL .EQ. 0) THEN
  2795.        MODEPP(8) = LNSLPP(1)
  2796.        MODEPP(7) = FGRPPP(1)
  2797.        MODEPP(6) = BGRPPP
  2798.        MODEPP(1) = MODE1A + MODE1B
  2799.        MODEPP(2) = MODE2A
  2800.        CALL SAVPLT(5)
  2801.       ENDIF
  2802.  
  2803.       CALL MAPSIZ(XSTPP,XFRCPP,YSTPP,YFRCPP,LABEPP)
  2804.       CALL POLAR(RMAX,XPL,YPL,IZ,MODEPP,NPTSPP,ISMNPP(1),SMSZPP(1),
  2805.      1      NTSMPP(1),LABPP)
  2806.       IF(NLINPP .GT. 1) THEN
  2807.       WRITE(9,4554)
  2808. 4554  FORMAT("TAKING MULTI LINE BRANCH")
  2809.        MODEPP(1) = MODE1A+2
  2810.        MODEPP(3) = 0
  2811.        MODEPP(4) = 0
  2812.        MODEPP(5) = 0
  2813.        MODEPP(6) = 0
  2814.        DO 950 I = 2,NLINPP
  2815.        DO 940 J = 1,NPTSPP
  2816.        XPL(J) = X(I,J)
  2817.        YPL(J) = Y(I,J)
  2818. 940    CONTINUE
  2819.        MODEPP(7) = FGRPPP(I)
  2820.        MODEPP(8) = LNSLPP(I)
  2821.        CALL POLAR(RMAX,XPL,YPL,IZ,MODEPP,NPTSPP,ISMNPP(I),SMSZPP(I),
  2822.      1         NTSMPP(I),LABPP)
  2823. 950    CONTINUE
  2824.       ENDIF
  2825.       IF(INCTRL .NE. 0)RETURN
  2826.       GOTO 100
  2827. 990   CONTINUE
  2828.       RETURN
  2829.       END
  2830. C
  2831. C THIS ROUTINE DETERMINES THE ORDERING AND NUMBER OF LINES ON THE PLOTS
  2832. C
  2833. C THE VARIABLE IDEF IS A BRANCHING FLAG.  IDEF = 1 OR 2 INDICATES THE
  2834. C ROUTINE WAS CALLED FROM XYPLT.  IDEF = 1 INDICATES IMPLICIT X MODE,
  2835. C IDEF = 2 INDICATES EXPLICIT X MODE.  IDEF = 3 OR 4 INDICATES THE 
  2836. C ROUTINE WAS CALLED FROM POLPLT.  IDEF = 3 INDICATES THAT THE PLOT IS
  2837. C TYPE REAL (R-THETA).  IDEF = 4 INDICATES THE PLOT IS TYPE COMPLEX
  2838. C (X+IY).
  2839.  
  2840.       SUBROUTINE PLTPRP(X,Y,M,N,XXX,YYY,ICURS,TAG,NLINES
  2841.      1,LINX,LINY,NPTS,IDEF)
  2842.       DIMENSION X(10,500),Y(10,500)
  2843.       INTEGER M,N,NLINES,LINX(10),LINY(10),NPTS,IDEF
  2844.       DIMENSION XXX(M,N),YYY(M,N)
  2845.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  2846.       CHARACTER*1 ANS
  2847.       CHARACTER*4 ROWTAG,COLTAG,TAG,ICURS(2)
  2848.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  2849.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  2850. C
  2851. C PLOT SPECIFIC VARIABLES
  2852. C
  2853.       LOGICAL PLTST,SETBG,BNHERE
  2854.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  2855.       DATA ROWTAG /' ROW'/,COLTAG/' COL'/
  2856.  
  2857. 6     WRITE(WTE,10)M,N,COLOR1,ICURS,COLOR2
  2858.       CALL CHKEND
  2859. 10    FORMAT(1X,"PLOTTING FROM A",I4," ROW BY",I4," COLUMN ARRAY.",/,
  2860.      1"SHOULD WE PLOT ALONG ROWS OR COLUMNS?"/,4A4,$)
  2861.       IF(WIO .NE. 0)WRITE(WIO,10)M,N,COLOR1,ICURS,COLOR2
  2862.       READ(RTE,15)ANS
  2863. 15    FORMAT(A1)
  2864.       IF(WIO .NE. 0) WRITE(WIO,16)ANS
  2865. 16    FORMAT(1X,A1)
  2866.       IF(ANS .NE. 'R' .AND. ANS .NE. 'r' .AND. ANS .NE. 'C' .AND.
  2867.      1 ANS .NE. 'c') THEN
  2868.        WRITE(WTE,20)COLOR3,COLOR2
  2869. 20     FORMAT(1X,A4,"ERROR. PLEASE ANSWER WITH ROWS OR COLUMNS",A4)
  2870.        IF(WIO .NE. 0) WRITE(WIO,20)COLOR3,COLOR2
  2871.        GOTO 6
  2872.       ENDIF
  2873.       IF(ANS .EQ. 'R' .OR. ANS .EQ. 'r') THEN
  2874.        TAG = ROWTAG
  2875.        NPTS = N
  2876.       ELSE
  2877.        TAG = COLTAG
  2878.        NPTS = M
  2879.       ENDIF
  2880. C
  2881. C FIND OUT HOW MANY PLOTS TO PREPARE
  2882. C
  2883. 24    WRITE(WTE,25)COLOR1,ICURS,COLOR2
  2884.       IF(WIO .NE. 0) WRITE(WIO,25)COLOR1,ICURS,COLOR2
  2885. 25    FORMAT(1X,"HOW MANY LINES WILL BE ENTERED ON THIS PLOT?"/,
  2886.      14A4,$)
  2887.       CALL VALGET(0,NLINES,'I')
  2888.       IF(NLINES .GT. 10) THEN
  2889.        WRITE(WTE,27)COLOR3,COLOR2
  2890.        IF(WIO .NE. 0) WRITE(WIO,27)COLOR3,COLOR2
  2891. 27     FORMAT(1X,A4,"ERROR. MAXIMUM 10 LINES PER PLOT.",A4)
  2892.        GOTO 24
  2893.       ENDIF
  2894.  
  2895. C
  2896. C ASK ABOUT EACH SET OF PLOTS
  2897. C
  2898.       DO 100 INDEX = 1, NLINES
  2899.       IF(IDEF .EQ. 2 .OR. IDEF .EQ. 3 .OR. IDEF .EQ. 4) THEN
  2900. 26      CONTINUE
  2901.         IF(IDEF .EQ. 2) THEN
  2902.          WRITE(WTE,30)INDEX,TAG,COLOR1,ICURS,COLOR2
  2903. 30       FORMAT(1X,"FOR LINE NUMBER ",I2,/"ENTER THE",A4," NUMBER
  2904.      1   OF THE X COMPONENT"/,4A4,$)
  2905.          IF(WIO .NE. 0) WRITE(WIO,30)INDEX,TAG,COLOR1,ICURS,COLOR2
  2906.         ELSE IF(IDEF .EQ. 3) THEN
  2907.          WRITE(WTE,31)INDEX,TAG,COLOR1,ICURS,COLOR2
  2908. 31       FORMAT(1X,"FOR LINE NUMBER ",I2,/"ENTER THE",A4," NUMBER
  2909.      1   OF THE RADIAL COMPONENT"/,4A4,$)
  2910.          IF(WIO .NE. 0) WRITE(WIO,30)INDEX,TAG,COLOR1,ICURS,COLOR2
  2911.         ELSE IF(IDEF .EQ. 4) THEN
  2912.          WRITE(WTE,32)INDEX,TAG,COLOR1,ICURS,COLOR2
  2913. 32       FORMAT(1X,"FOR LINE NUMBER ",I2,/"ENTER THE ",A4," NUMBER
  2914.      1   OF THE COMPLEX VARIABLE"/,4A4,$)
  2915.         ENDIF
  2916.  
  2917.         CALL VALGET(0,INDEXX,'I')
  2918. 36      FORMAT(1X,I2)
  2919. 35      FORMAT(I2)
  2920.         IF(TAG .EQ. COLTAG .AND.(INDEXX .GT. N .OR. INDEXX .LT. 1))
  2921.      1             THEN
  2922.         CALL MENUER(N)
  2923.          GOTO 26
  2924.         ELSE IF(TAG .EQ. ROWTAG .AND.(INDEXX .GT. M .OR.
  2925.      1           INDEXX .LT. 1)) THEN
  2926.          CALL MENUER(M)
  2927.          GOTO 26
  2928.         ENDIF
  2929.         LINX(INDEX)=INDEXX
  2930.         IF(TAG .EQ. ROWTAG) THEN
  2931.          DO 50 I = 1,N
  2932. 50       X(INDEX,I)=XXX(INDEXX,I)
  2933.         ELSE
  2934.          DO 52 I=1,M
  2935. 52       X(INDEX,I)=XXX(I,INDEXX)
  2936.         ENDIF
  2937.       ELSE
  2938.         LINX(INDEX)=0
  2939.         IF(TAG .EQ. ROWTAG) THEN
  2940.          DO 53 I = 1,N
  2941. 53       X(INDEX,I)=FLOAT(I)
  2942.         ELSE
  2943.          DO 54 I=1,M
  2944. 54       X(INDEX,I)=FLOAT(I)
  2945.         ENDIF
  2946.       ENDIF
  2947.       IF(IDEF .EQ. 1 .OR. IDEF .EQ. 2 .OR. IDEF .EQ. 3)THEN
  2948. 56      CONTINUE
  2949.         IF(IDEF .EQ. 1 .OR. IDEF .EQ. 2) THEN
  2950.          WRITE(WTE,60)INDEX,TAG,COLOR1,ICURS,COLOR2
  2951. 60       FORMAT(1X,"FOR LINE NUMBER ",I2,/"ENTER THE",A4," NUMBER
  2952.      1   OF THE Y COMPONENT"/,4A4,$)
  2953.          IF(WIO .NE. 0) WRITE(WIO,60)INDEX,TAG,COLOR1,ICURS,COLOR2
  2954.         ELSE
  2955.          WRITE(WTE,61)INDEX,TAG,COLOR1,ICURS,COLOR2
  2956. 61       FORMAT(1X,"FOR LINE NUMBER ",I2,/"ENTER THE",A4," NUMBER OF THE
  2957.      1   ANGULAR COMPONENT"/,4A4,$)
  2958.          IF(WIO .NE. 0) WRITE(WIO,61)INDEX,TAG,COLOR1,ICURS,COLOR2
  2959.         ENDIF
  2960.         CALL VALGET(0,INDEXY,'I')
  2961.         IF(TAG .EQ. COLTAG .AND.(INDEXY .GT. N .OR. INDEXY .LT. 1)) THEN
  2962.          CALL MENUER(N)
  2963.          GOTO 56
  2964.         ELSE IF(TAG .EQ. ROWTAG .AND. (INDEXY .GT. M .OR.
  2965.      1            INDEXY .LT. 1)) THEN
  2966.          CALL MENUER(M)
  2967.          GOTO 56
  2968.         ENDIF
  2969.       ENDIF
  2970.       LINY(INDEX)=INDEXY
  2971.       IF(IDEF .NE. 4) THEN
  2972.         IF(TAG .EQ. ROWTAG) THEN
  2973.          DO 80 I = 1,N
  2974. 80       Y(INDEX,I)=XXX(INDEXY,I)
  2975.         ELSE
  2976.          DO 82 I=1,M
  2977. 82       Y(INDEX,I)=XXX(I,INDEXY)
  2978.         ENDIF
  2979.       ELSE
  2980.         IF(TAG .EQ. ROWTAG) THEN
  2981.           DO 90 I = 1,N
  2982. 90        Y(INDEX,I) = YYY(INDEXY,I)
  2983.         ELSE
  2984.           DO 92 I = 1,M
  2985. 92        Y(INDEX,I) = YYY(I,INDEXY)
  2986.         ENDIF
  2987.       ENDIF
  2988. 100   CONTINUE
  2989.       RETURN
  2990.       END
  2991. C
  2992. C SET THE LINE SYMBOL OPTIONS
  2993. C
  2994.       SUBROUTINE LNOPTS(NLINES,SYMSIZ,INTSYM,ISYMNO,LINSYL,ICURS)
  2995.       DIMENSION SYMSIZ(10),INTSYM(10),ISYMNO(10),LINSYL(10)
  2996.       INTEGER NLINES
  2997.       INTEGER*4 COLOR1,COLOR2,COLOR3,BGRP
  2998.       CHARACTER*1 ANS
  2999.       CHARACTER*4 ICURS(2)
  3000.       INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE,FE
  3001.       COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE,FE
  3002. C
  3003. C PLOT SPECIFIC VARIABLES
  3004. C
  3005.       LOGICAL PLTST,SETBG,BNHERE
  3006.       COMMON /MATPLT/ COLOR1,COLOR2,COLOR3,BGRP,PLTST,SETBG,BNHERE
  3007.  
  3008. 620   CONTINUE
  3009.       WRITE(WTE,625)COLOR1,ICURS,COLOR2
  3010.       IF(WIO .NE. 0)WRITE(WIO,625)COLOR1,ICURS,COLOR2
  3011. 625   FORMAT(1X,"PLEASE SELECT A LINE OPTION"/,
  3012.      1" [1] CHOOSE LINE SYMBOL TYPE"/,
  3013.      2" [2] CHOOSE LINE PATTERN TYPE"/,
  3014.      3" [3] RETURN TO PREVIOUS MENU"/,4A4,$)
  3015.       CALL VALGET(0,IANS,'I')
  3016.       GOTO (460,660,900),IANS
  3017.       CALL MENUER(3)
  3018.       GOTO 620
  3019. 460   CONTINUE
  3020.       LSTART = 1
  3021.       LEND = 1
  3022.       IF(NLINES .GT. 1) THEN
  3023.        WRITE(WTE,462)COLOR1,ICURS,COLOR2
  3024.        IF(WIO .NE. 0)WRITE(WIO,462)COLOR1,ICURS,COLOR2
  3025.        CALL CHKEND
  3026. 462    FORMAT(1X,"CHOOSE SYMBOLS FOR ALL LINES?"/,4A4,$)
  3027.        READ(RTE,463)ANS
  3028. 463    FORMAT(A1)
  3029.        IF(WIO .NE. 0) WRITE(WIO,464)ANS
  3030. 464    FORMAT(1X,A1)
  3031.        IF(ANS .NE. 'Y' .AND. ANS .NE. 'y' .AND. ANS .NE. 'N' .AND.
  3032.      1 ANS .NE. 'n') THEN
  3033.         WRITE(WTE,465)COLOR3,COLOR2
  3034. 465     FORMAT(1X,A4,"ERROR. PLEASE ANSWER YES OR NO",A4)
  3035.         IF(WIO .NE. 0) WRITE(WIO,465)COLOR3,COLOR2
  3036.         GOTO 460
  3037.        ENDIF
  3038.        IF (ANS .EQ. 'Y' .OR. ANS .EQ. 'y') THEN
  3039.         LSTART=1
  3040.         LEND=NLINES
  3041.        ELSE
  3042. 466     WRITE(WTE,467)COLOR1,ICURS,COLOR2
  3043.         CALL CHKEND
  3044.         IF(WIO .NE. 0) WRITE(WIO,467)COLOR1,ICURS,COLOR2
  3045. 467     FORMAT(1X,"PLEASE CHOOSE THE LINE NUMBER"/,4A4,$)
  3046.         CALL VALGET(0,LINENO,'I')
  3047.         IF(LINENO .GT. NLINES) THEN
  3048.          CALL MENUER(NLINES)
  3049.          GOTO 466
  3050.         ENDIF
  3051.         LSTART = LINENO
  3052.         LEND = LINENO
  3053.        ENDIF
  3054.       ENDIF
  3055.       DO 476 I = LSTART,LEND
  3056. 468   CONTINUE
  3057.       WRITE(WTE,469)I,COLOR1,ICURS,COLOR2
  3058.       CALL CHKEND
  3059.       IF(WIO.NE.0) WRITE(WIO,469)I,COLOR1,ICURS,COLOR2
  3060. 469   FORMAT(1X,"FOR LINE NUMBER ",I2," PLEASE CHOOSE AN OPTION"/,
  3061.      1" [1] NO SYMBOL"/,
  3062.      2" [2] TRIANGLE"/,
  3063.      3" [3] BOX"/,
  3064.      4" [4] DIAMOND"/,
  3065.      5" [5] HOURGLASS"/,
  3066.      6" [6] RETURN TO LINE OPTIONS MENU"/,4A4,$)
  3067.       CALL VALGET(0,IANS,'I')
  3068.       GOTO (475,470,470,470,470,900),IANS
  3069.        CALL MENUER(6)
  3070.        GOTO 468
  3071. 470   ISYMNO(I)=IANS-1
  3072. 471   WRITE(WTE,472)COLOR1,ICURS,COLOR2
  3073.       CALL CHKEND
  3074.       IF(WIO .NE. 0) WRITE(WIO,472)COLOR1,ICURS,COLOR2
  3075. 472   FORMAT(1X,"ENTER THE SYMBOL SIZE IN CM
  3076.      1 (BLANK LINE = DEFAULT)"/,4A4,$)
  3077.       CALL VALGET(SYMSIZ(I),0,'F')
  3078.       WRITE(WTE,474)COLOR1,ICURS,COLOR2
  3079.       IF(WIO .NE. 0) WRITE(WIO,474)COLOR1,ICURS,COLOR2
  3080. 474   FORMAT(1X,"ENTER THE SYMBOL INTERVALS"/,4A4,$)
  3081.       CALL VALGET(0,INTSYM(I),'I')
  3082.       CYCLE
  3083. 475   ISYMNO(I) = IANS-1
  3084. 476   CONTINUE
  3085.       GOTO 620
  3086. 660   CONTINUE
  3087.       LSTART = 1
  3088.       LEND = 1
  3089.       IF(NLINES .GT. 1) THEN
  3090.        WRITE(WTE,662)COLOR1,ICURS,COLOR2
  3091.        CALL CHKEND
  3092.        IF(WIO .NE. 0)WRITE(WIO,662)COLOR1,ICURS,COLOR2
  3093. 662    FORMAT(1X,"CHOOSE LINE STYLES FOR ALL LINES?"/,4A4,$)
  3094.        READ(RTE,463)ANS
  3095.        IF(WIO .NE. 0) WRITE(WIO,464)ANS
  3096.        IF(ANS .NE. 'Y' .AND. ANS .NE. 'y' .AND. ANS .NE. 'N' .AND.
  3097.      1 ANS .NE. 'n') THEN
  3098.         WRITE(WTE,465)COLOR3,COLOR2
  3099.         IF(WIO .NE. 0) WRITE(WIO,465)COLOR3,COLOR2
  3100.         GOTO 660
  3101.        ENDIF
  3102.        IF(ANS .EQ. 'Y' .OR. ANS .EQ. 'y') THEN
  3103.         LSTART=1
  3104.         LEND=NLINES
  3105.        ELSE
  3106. 666     WRITE(WTE,467)COLOR1,ICURS,COLOR2
  3107.         CALL CHKEND
  3108.         IF(WIO .NE. 0) WRITE(WIO,467)COLOR1,ICURS,COLOR2
  3109.         CALL VALGET(0,LINENO,'I')
  3110.         IF(LINENO .GT. NLINES) THEN
  3111.          CALL MENUER(NLINES)
  3112.          GOTO 666
  3113.         ENDIF
  3114.         LSTART = LINENO
  3115.         LEND = LINENO
  3116.        ENDIF
  3117.       ENDIF
  3118.       DO 675 I = LSTART,LEND
  3119. 667   WRITE(WTE,668)I,COLOR1,ICURS,COLOR2
  3120.       CALL CHKEND
  3121.       IF(WIO .NE. 0) WRITE(WIO,668)I,COLOR1,ICURS,COLOR2
  3122. 668   FORMAT(1X,"FOR LINE NUMBER ",I2," PLEASE CHOOSE A LINE STYLE"/,
  3123.      1" [1] SOLID LINE"/,
  3124.      2" [2] LONG DASH"/,
  3125.      3" [3] SHORT DASH"/,
  3126.      4" [4] DOT DASH"/,
  3127.      5" [5] RETURN TO LINE OPTIONS MENU"/,4A4,$)
  3128.       CALL VALGET(0,IANS,'I')
  3129.       GOTO (670,670,670,670,620),IANS
  3130.       CALL MENUER(5)
  3131.       GOTO 667
  3132. 670   LINSYL(I)=IANS
  3133. 675   CONTINUE
  3134.       GOTO 620
  3135. 900   CONTINUE
  3136.       RETURN
  3137.       END
  3138.