10  COM A[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
20  COM M$[60],N$[72]
30  COM W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,Z9,Z8,Z7
40  COM L9,L8,L7,X$[20]
45  COM E[3,3],K0,I5,I6,K3,I1,I3,N0,I8
50  REM:27APR74
51  REM  21MAY74 MODIFIED BY RKK TO TAKE OVER 100 POINTS
52  REM:END OF >MPLS
150  REM  TSPLOT(A(3,300),K0,I5,I6,K3,I1,I3,N0,E(3,2),I8)
160  REM  PLOTS UP TO 3 TIME SERIES FROM ARRAY A(3,300)
170  REM  K0=1 FOR ARITHMETIC SCALE,  =2 FOR LOG SCALE
180  REM  I5 IS INDEX OF FIRST POINT PLOTTED
185  REM  I6 IS INDEX OF LAST POINT PLOTTED
190  REM  K3 IS THE NUMBER OF PERIODS PER YEAR
200  REM  I1 IS THE FIRST PERIOD OF THE FIRST YEAR PLOTTED--0 FOR ANNUAL
210  REM  I3 IS THE FIRST YEAR TO BE PLOTTED--2 DIGITS
220  REM  N0 IS THE NUMBER OF SERIES TO BE PLOTTED
230  REM  E(3,2) CONTAINS THE FIRST AND LAST INDEX OF EACH SERIES
240  REM
250  REM  I8=1 FOR MEANS PLOTTED; =0 FOR NOT PLOTTED
260  REM
265  REM  TSPLOT WILL CHAIN BACK TO PROGRAM-NAME CONTAINED IN R$
266  REM       THE CONTENT OF R9 WILL DETERMINE THE ENTRY ADDRESS ON RETURN
270  DIM C[9],D[3],F$[66]
280  DIM G[3],H[4],I$[3],J$[3]
290  DIM L[3]
320  FOR K9=1 TO 66
330  F$[K9,K9]=" "
340  NEXT K9
350  J$=".'!"
360  I$="*+#"
410  K$=":"
420  L$="-"
430  O$="X"
440  P$=" "
450  I0=I1
460  I2=I3
470  MAT G=ZER
480  REM L - INDICATES # OF DELETED OBSERVATIONS PER COL VECTOR
490  MAT L=ZER
491  Q9=0
500  REM      CHANGE TO LOGS IF INDICATED--THIS ALTERS X AVRAY
510  IF K0<2 THEN 584
520  FOR J0=I5 TO I6
530  FOR I4=1 TO N0
540  IF  NOT ((E[I4,1] <= J0) AND (J0 <= E[I4,2])) THEN 580
550  A[I4,J0]=LOG(A[I4,J0])
560  NEXT I4
570  NEXT J0
580  REM      FIND MIN AND MAX VALUES TO BE PLOTTED
584  I4=0
585  IF A[E[1,1]+I4,W5+2]=1 THEN 590
586  I4=I4+1
588  GOTO 585
590  K1=E[1,1]+I4
600  IF  NOT (K1<I5) THEN 620
610  K1=I5
620  A0=A[K1,E[1,3]]
630  A1=A0
640  FOR I4=I5 TO I6
645  IF A[I4,W5+2]=1 THEN 650
646  Q9=Q9+1
650  FOR J0=1 TO N0
651  IF A[I4,W5+2]=1 THEN 660
652  IF E[J0,1]>I4 OR E[J0,2]<I4 THEN 660
653  L[J0]=L[J0]+1
654  GOTO 700
660  IF  NOT ((A[I4,E[J0,3]]<A1) AND (E[J0,1] <= I4) AND (I4 <= E[J0,2])) THEN 680
670  A1=A[I4,E[J0,3]]
680  IF  NOT ((A[I4,E[J0,3]]>A0) AND (E[J0,1] <= I4) AND (I4 <= E[J0,2])) THEN 700
690  A0=A[I4,E[J0,3]]
700  NEXT J0
710  NEXT I4
715  P9=0
720  REM      SET UP SCALING
730  A2=A1
740  A3=A0
750  IF (K0<2) THEN 780
760  A2=EXP(A2)
770  A3=EXP(A3)
780  D0=0
790  Z0=A2
800  D1=(A3-Z0)/8
810  REM  CALL ROUND(DELT,DELT)
830  GOSUB 2350
840  P9=P9+1
845  REM  THIS PATCH REMOVES THE BUG IN SCALING ROUTINE  J.K.
850  IF P9>20 THEN 940
860  IF (D1=D0) THEN 940
870  I4=ABS(A2)/D1
880  Z0=INT(D1*I4)
890  IF (Z0 <= A2) THEN 920
900  Z0=Z0-D1
910  GOTO 890
920  D0=D1
930  GOTO 800
940  C[1]=Z0
950  Y0=D1/8
960  FOR I4=2 TO 9
970  C[I4]=C[I4-1]+D1
980  NEXT I4
990  IF (K0<2) THEN 1020
1000  Y0=(LOG(C[9])-LOG(C[1]))/64
1010  Z0=LOG(Z0)
1020  S0=ABS(C[1])
1030  S1=ABS(C[9])
1040  I7=0
1050  IF S0 >= S1 THEN 1070
1060  S0=S1
1070  IF S0 <= 999 THEN 1090
1080  I7=I7-1
1090  IF S0 >= 99 THEN 1110
1100  I7=I7+1
1110  S2=ABS(I7)
1120  IF (I7=0) THEN 1220
1130  IF  NOT (I7<0) THEN 1150
1140  S0=S0/10
1150  IF  NOT (I7>0) THEN 1170
1160  S0=S0*10
1170  IF ((S0<99) OR (S0>999)) THEN 1070
1180  FOR I4=1 TO 9
1190  C[I4]=C[I4]*(10^I7)
1200  NEXT I4
1210  REM      CALCULATE MEANS AND SET UP PLOTTING ARRAY
1220  REM
1230  MAT D=ZER[N0]
1240  FOR I4=I5 TO I6
1245  IF A[I4,W5+2]=0 THEN 1300
1250  FOR J0=1 TO N0
1260  IF ((E[J0,1]>I4) OR (E[J0,2]<I4)) THEN 1290
1270  G[J0]=G[J0]+A[I4,E[J0,3]]
1290  NEXT J0
1300  NEXT I4
1310  PRINT 
1320  REM 6000 FORMAT(////)
1330  FOR I4=1 TO N0
1335  IF I8=1 THEN 1370
1340  PRINT  USING 1360;I4,I$[I4,I4]
1360  IMAGE 10X,"SERIES ",1d,5X,"SYMBOL = ",1A
1365  GOTO 1400
1370  PRINT  USING 1410;I4,I$[I4,I4],J$[I4,I4]
1400  PRINT 
1410  IMAGE 10X,"SERIES ",1D,5X,"SYMBOL = ",1A,5X,"MEAN = ",1A
1415  REM  DETERMINE THE ACTUAL NO OF POINTS -- COMPUTE MEAN
1416  REM  IDA INTERFACE MUST PATCH HERE TO ADJUST FOR DELETED POINTS
1420  A4=(E[I4,2] MIN I6)-(E[I4,1] MAX I5)+1
1425  REM  COMPUTE MEAN -- NORMALIZE 
1430  G[I4]=G[I4]/(A4-L[I4])
1440  D[I4]=INT((G[I4]-Z0)/Y0+1)
1450  NEXT I4
1460  REM      WRITE PLOT HEADINGS
1470  IF (K0<2) THEN 1530
1480  PRINT 
1490  PRINT  USING 1510
1500  REM 6010 FORMAT('                          Y-SCALE(LOG)')
1510  IMAGE "19x,"y-scale(log)""
1520  GOTO 1560
1530  PRINT  USING 1550
1550  IMAGE 29X,"Y-SCALE"
1560  IF I7=0 THEN 1600
1570  PRINT  USING 1580;I7
1580  IMAGE 22X,"SCALED BY 10**",3D
1600  MAT  PRINT  USING 1620;C
1620  IMAGE 9(6D.D)
1630  PRINT  USING 1650
1650  IMAGE 6X,"*",8("=======*")
1660  REM      MAIN PLOTTING LOOP
1670  K2=K3-I0+2
1680  FOR I4=I5 TO I6
1690  F$[1,1]=K$
1700  FOR J0=2 TO 64
1710  F$[J0,J0]=P$
1720  NEXT J0
1730  F$[65]=K$
1740  IF (I0=0) THEN 1810
1750  K2=K2-1
1760  IF (K2>0) THEN 1810
1770  K2=K3
1780  FOR J0=2 TO 64
1790  F$[J0,J0]=L$
1800  NEXT J0
1810  FOR J0=17 TO 49 STEP 16
1820  F$[J0,J0]=K$
1830  NEXT J0
1840  FOR J0=1 TO N0
1850  H[J0]=0
1860  NEXT J0
1870  IF (I8=0) THEN 1970
1880  REM       PLOT MEANS
1890  J0=N0
1900  IF (J0 <= 0) THEN 1970
1910  IF ((E[J0,1]>I4) OR (I4>E[J0,2])) THEN 1940
1920  M0=D[J0]
1930  F$[M0,M0]=J$[J0,J0]
1940  J0=J0-1
1950  GOTO 1900
1960  REM       PLOT SERIES
1970  J0=N0
1980  IF (J0 <= 0) THEN 2050
1990  IF ((E[J0,1]>I4) OR (I4>E[J0,2])) THEN 2030
2000  H[J0]=INT((A[I4,E[J0,3]]-Z0)/Y0+1)
2010  K1=INT(H[J0])
2015  IF A[I4,W5+2]=1 THEN 2020
2016  F$[2,8]="DELETED"
2017  GOTO 2030
2020  F$[K1,K1]=I$[J0,J0]
2030  J0=J0-1
2040  GOTO 1980
2050  IF (N0=1) THEN 2120
2060  H[N0+1]=H[1]
2070  FOR J0=1 TO N0
2080  K1=H[J0]
2090  IF  NOT ((H[J0]=H[J0+1]) AND (H[J0]>0)) THEN 2110
2100  F$[K1,K1]=O$
2110  NEXT J0
2120  IF I0 <= 0 THEN 2180
2130  PRINT  USING 2140;I2,I0,F$
2140  IMAGE  2d,"-",2d,1x,66a
2170  REM 6060 FORMAT(2X,I2,1H-,I2,66A1)
2180  IF I0#0 THEN 2250
2190  PRINT  USING 2200;I2,F$
2200  IMAGE  2X,3D,1X,66A
2230  REM 6070 FORMAT(5X,I2,66A1)
2240  GOTO 2280
2250  I0=I0+1
2260  IF (I0 <= K3) THEN 2290
2270  I0=1
2280  I2=I2+1
2290  NEXT I4
2300  REM      WRITE PLOT TRAILERS
2310  PRINT  USING 1650
2320  MAT  PRINT  USING 1620;C
2330  GOTO 9998
2340  REM  SUBROUTINE ROUND(X,RX)
2350  Y1=ABS(D1)
2355  X0=D1
2360  I9=0
2380  IF (Y1 >= 1) THEN 2420
2390  Y1=Y1*10
2400  I9=I9+1
2410  GOTO 2380
2420  IF (Y1<10) THEN 2460
2430  Y1=Y1/10
2440  I9=I9-1
2450  GOTO 2420
2460  IF (Y1=1) THEN 2720
2470  IF (Y1>1.25) THEN 2500
2480  Y1=1.25
2490  GOTO 2720
2500  IF (Y1>1.5) THEN 2530
2510  Y1=1.5
2520  GOTO 2720
2530  IF (Y1>2) THEN 2560
2540  Y1=2
2550  GOTO 2720
2560  IF (Y1>2.5) THEN 2590
2570  Y1=2.5
2580  GOTO 2720
2590  IF (Y1>3) THEN 2620
2600  Y1=3
2610  GOTO 2720
2620  IF (Y1>4) THEN 2650
2630  Y1=4
2640  GOTO 2720
2650  IF (Y1>5) THEN 2680
2660  Y1=5
2670  GOTO 2720
2680  IF (Y1>7.5) THEN 2710
2690  Y1=7.5
2700  GOTO 2720
2710  Y1=10
2720  Y1=Y1*(10^(-I9))
2730  D1=Y1
2740  IF X0 >= 0 THEN 2760
2750  D1=-Y1
2760  REM
2770  RETURN 
9998  CHAIN "$IDA",150
9999  END 
