A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haespl.ft
1 C -+-+-+-+-+ \ e H A E S P L . F T \ e -+-+-+-+-+
2 C
3 C * UP 1-OCT-82
4 C * UP 3-NOV-82
5 C * UP 26-NOV-82
6 C * UP 12-JAN-83
7 C * UP 25-APR-83
8 C * UP 26-APR-83
9 C * UP 28-APR-83
10 C * UP 5-MAY-83
11 C * UP 10-MAY-83
12 C * UP 11-NOV-83 TIME SCALE OF PLOT MAY EXCEED SAMPLE TIME
13 C * UP 8-DEC-83 DEBUGGING
14 C * UP 30-NOV-84 SOME NEW ENHANCEMENTS FOR I/O AND PLOTTER
15 C * UP 10-DEC-84
16 C * UP 3-JUL-85 OUTPUT SCHMITT TRIGGER CHANNELS
17 C * UP 15-AUG-85
18 C * UP 22-AUG-85 REMOVES SOME BUGS CONCERNING TRIGG OUTPUT
19 C * UP 3-SEP-85 IF SW 8 UP: INSERTS TRIGG FREQUENCY PLOT
20 C * UP 1-NOV-85 DEBUGGS ASZISSA SCALE ROUTINE
21 C * UP 19-NOV-85 REMOVES SOME BUGS
22 C
23 C PLOT THE DATA POINTS
24 C
25 SUBROUTINE SPLOT
26 INCLUDE HAEPTI.FI
27 INCLUDE HAEBUF.FI
28 INCLUDE HAEGSA.FI
29 INCLUDE HAETTY.FI
30 INCLUDE HABRK.FI
31 INCLUDE HAECSZ.FI
32 INCLUDE HAEHAS.FI
33 INCLUDE HAECSP.FI
34 INCLUDE HAECTR.FI
35 INCLUDE HAPPEN.FI
36 REAL XYSAM,COND
37 LOGICAL BETW
38 INTEGER NCOND,TOASCI,IXTA,FLD
39 EXTERNAL XYSAM,NCOND,COND,TOASCI,IXTA,FLD,BETW
40 C
41 \fC
42 REAL ORDMIN(8),ORDMAX(8)
43 EQUIVALENCE (SRDMIN(1),ORDMIN(1)),(SRDMAX(1),ORDMAX(1)) @ EQUIVALENCE INTO THE HAECSP COMMON BLOCK
44 LOGICAL TIMABZ,TIMORD, @ ABZISSE / ORDINATE IS TIME SCALE
45 * ABISMI, @ IF THE ABZISSA SCALE EXCEEDS 5 MINUTES THEN .TRUE. ELSE .FALSE.
46 * BOTH,L1,ADPLT @ PLOT MIN&MAX OF SOME Y POINTS, WE ARE PLOTTING A/D CHANNELS
47 INTEGER I,K,K1,J,PENPOS,MSG, @ MSG HOLDS TEMP MESSAGE FOR FORMAT 5 AND 6
48 * STEP,STEPS, @ INCREMENT IN SAMBUF SCAN
49 * CA,CO, @ CHANNEL OF ABZISSE, ORDINATE
50 * PLBEG,PLEND, @ START/END OF TIME SCALE
51 * NUMCN, @ NUMBER OF CHANNELS TO SCAN (NO MEANING IF TIMABZ IS SET .FALSE.)
52 * NUMTRI,ALLCHS, @ NUMBER OF TRIGGER INPUTS TO PLOTT, TOTAL # OF CHANNELS TO SCAN (A/D +STRIGG)
53 * EXPAND @ IF THE TIME SCALE .LE. 5 SECONDS THEN WE MARK EACH 1/10 SECOND ELSE EACH SECOND
54 * ,TS1 @ HOLDS PLEND*SAMRAT FOR SCALEING THE ABZISSA
55 REAL TEMSET, @ DIFFERENCE PLOTTER 0,0 AND PICTURE 0,0 (NO MEANING IF TIMABZ IS SET TO .FALSE.)
56 * LEFT,RIGHT,UP,DOWN, @ PLOT SCALES ABZISSE/ ORDINATE
57 * TE1,TE2,TE3, @ TEMPS
58 * X,Y,YFMIN,YFMAX, @ USED TO COMPRESS PLOT OUTPUT
59 * OLDX @ USED TO COMPRESS PLOT OUTPUT
60 * ,OMAX,OMIN @ MAXIMUM AND MINIMUM OF ORDINATE DATA
61 INTEGER TEXT0(4) @ DIMENSION OF THE TIME AXIS (MIN OR SEC)
62 * ,TEXT1(2) @ MSG FOR FORMAT 3 OUTPUT
63 DATA CA,CO,NUMCN,STEP,NUMTRI,ALLCHS /0,8,2,3,0,2/,
64 * TEXT0 /'TIME [MIN] TIME [SEC]'/
65 * ,TEXT1 /'A/D','TRG'/
66 C
67 C STATEMENT FUNCTIONS ARE:
68 C
69 BOX(AP1)=AMAX1(AMIN1(AP1,UP-DOWN),-.01)
70 XF(IP1)=XYSAM(IP1,CA)-LEFT @ RETURNS THE VALUE OF THE ABZISSA WITH CORRECT OFFSET
71 YF(IP1)=XYSAM(IP1,CO)-DOWN @ RETURNS THE VALUES OF THE ORDINATE WITH THE CORRECT OFFSET
72 DEFALT(I1,I2)=NCOND(I1.EQ.1H ,I2,IXTA(FLD(0,6,I1))-48) @ RETURNS DEFAULT VALUES
73 \fC
74 IF (SAMCNT.EQ.0) RETURN @ NO SAMPLE, NOTHING TO DO
75 C
76 C COMPUTE THE DEFAULT VALUES FOR THE PLOT
77 C
78 IF (OPTION.EQ.11) GOTO 15 @ SP- SKIPS QUESTIONS AND TAKES THE LAST VALUES USED
79 IF (OPTION.NE.12) CALL ASKHIM (2) @ SP* DOES NOT ASK SCILLY QUESTIONS
80 14 CO=0 @ THE ORDINATE IS CHANNEL 0
81 CA=8 @ THE ABZISSA IS THE TIME SCALE
82 NUMCN=CHNLS-CO @ ALL CHANNELS TO PLOT
83 STEP=1 @ WE PLOT EACH POINT OF THE DATA
84 WRITE (TTO,1) CA,CO,STEP @ READ CHANNEL ##
85 READ (TTI,2) I,J,K @ AND STEP INCREMENTS
86 IF BREAK(11) RETURN
87 CA=DEFALT(I,CA)
88 CO=DEFALT(J,CO)
89 STEP=NCOND(K,K,STEP) @ CA,CO, STEP DEFAULT VALUES FOR BLANK INPUT
90 IF (.NOT.(CA.LT.0 .OR. CO.LT.0 .OR. STEP.LE.0)) GOTO 12
91 13 WRITE (TTO,9)CA,CO,STEP
92 GOTO 14
93 12 IF (CA.GE.CHNLS .AND. CA.LT.8) GOTO 13 @ TEST FOR VALID CHANNEL NUMBER
94 IF (CO.GE.CHNLS .AND. CO.LT.8) GOTO 13
95 C
96 TIMABZ=CA.GT.7 @ ABZISSE IS THE TIME SCALE
97 TIMORD=CO.GT.7 @ ORDINATE IS THE TIME SCALE
98 IF (.NOT.TIMABZ) GOTO 15 @ ABZISSA IS NO TIME SCALE: ONLY TWO CHANNELS (CO,CO+1) TO PLOT
99 NUMCN=MIN0(NUMCN,CHNLS-CO) @ COMPUTE CORRECT NUMBER OF CHANNELS
100 WRITE (TTO,3) TEXT1(1),NUMCN @ READ THE NUMBER OF CHANNELS TO SCAN
101 READ (TTI,2) I
102 CA=DEFALT(I,CA)
103 CO=DEFALT(J,CO)
104 I=DEFALT(I,NUMCN) @ FOR BLANK INPUT DEFAULT IS NUMCN
105 NUMCN=MIN0(CHNLS-CO,NCOND(I,I,NUMCN)) @ NO INPUT MEANS CHNLS-CO
106 NUMTRI=STRIGS
107 ALLCHS=NUMCN+NUMTRI @ NUMBER OF A/D AND STRIGG CHANNELS TO PLOT
108 C
109 C ASK FOR NUMBER OF STRIGG CHANNELS TO PLOT
110 C
111 IF (STRIGS.EQ.0) GOTO 11 @ NO STRIGS, NO QUESTIONS
112 NUMTRI=STRIGS @ INSERT DEFAULT VALUE
113 WRITE (TTO,3) TEXT1(2),NUMTRI @ READ THE NUMBER OF STRIGG CHANNELS TO SCAN
114 READ (TTI,2) I
115 I=DEFALT(I,NUMTRI) @ BLANK INPUTS DEFAULTS TO NUMTRI
116 NUMTRI=MIN0(STRIGS,MAX0(0,I)) @ INSERT CORRECT VALUE
117 ALLCHS=MIN0(NUMCN+NUMTRI,7) @ ONLY 8 CHANNELS ALLOWED
118 11 CONTINUE
119 C
120 C ASK FOR SCALE OF THE ORDINATE (MINIMUM AND MAXIMUM)
121 C
122 K=CO-1
123 DO 80 I=1,ALLCHS
124 K=K+1
125 MSG=NCOND(K.GE.CO+NUMCN,TEXT1(2),TEXT1(1)) @ EITHER A/D OR TRG MESSAGE TO PRINT
126 J=NCOND(K.GE.CO+NUMCN,1+K-CO-NUMCN,K) @ NUMBER OF A/D OR TRIGGER CHANNEL
127 WRITE (TTO,5) MSG,J,ORDMAX(K+1) @ READ THE MAXIMUM
128 READ (TTI,7) TE1
129 ORDMAX(K+1)=COND(TE1,TE1,ORDMAX(K+1))
130 IF (BREAK(11)) RETURN
131 WRITE (TTO,6) MSG,J,ORDMIN(K+1) @ READ THE MINIMUM
132 READ (TTI,7) TE1
133 ORDMIN(K+1)=COND(TE1,TE1,ORDMIN(K+1))
134 IF (BREAK(11)) RETURN
135 80 CONTINUE
136 15 CONTINUE
137 \fC
138 C COMPUTE THE SCALING LIMITS
139 C
140 S0=BEGIN*SAMRAT @ HERE WE START THE OUTPUT PLOT
141 S1=ENDS*SAMRAT @ AND HERE WE END THE PLOT
142 TS1=S1
143 C PLBEG HOLDS THE FIRST SECOND OF THE TIME SCALE (LEFTMOST )
144 C PLEND HOLDS THE LAST SECOND OF THE TIME SCALE ( RIGHTMOST DOT)
145 C TS1 HOLDS FACTOR FOR TIME SCALE (PLEND*SAMRAT)
146 C S0 HOLDS THE STARTING INDEX OF DATA TO PLOT ( PLBEG*SAMRAT)
147 C S1 HOLDS THE INDEX OF LAST DATA POINT (MIN0(SAMCNT,TS1))
148 PLBEG=BEGIN
149 PLEND=ENDS
150 C
151 IF (S1.LE.SAMCNT) GOTO 17 @ IF THE INTERVALL TO PLOT EXCEEDS THE
152 TE1=SAMCNT/SAMRAT @ DATA POINTS THEN
153 TE2=S1/SAMRAT
154 WRITE (TTO,4) TE1,TE2 @ WE PRINT THE OVERFLOW MSG AND
155 S1=SAMCNT-1 @ TAKE CARE FOR TRUNCATION ERRORS
156 17 CONTINUE @ INTERVALL OK, COMPUTE UPPER AND LOWER MARGIN OF PLOT DATA
157 RIGHT=COND(TIMABZ,FLOAT(TS1),512.) @ ABZISSE MARGIN EITHER TIME OR 10 BIT CONVERTER
158 LEFT =COND(TIMABZ,FLOAT(S0),-512.)
159 UP =COND(TIMORD,FLOAT(TS1),512.) @ ORDINATE MARGIN
160 DOWN =COND(TIMORD,FLOAT(S0),-512.)
161 IF BREAK(11) RETURN @ USER GETS RID OF PRGRM
162 CALL STPLT @ START THE PLOTTER ( CALL PLOTS)
163 CALL XYPLOT (XOFSET,YOFSET,-PENUP) @ DRIVE PEN TO PICTURE ZERO
164 C
165 C LOOP TO PLOT EACH CHANNEL WITH CORRECT OFFSET, FACTOR AND SCALE
166 C TEMSET HOLDS THE ORIGIN FOR EACH CHANNEL
167 C TEMSET=0 PLOT ONE CHANNEL/TIME OR X/Y
168 C TEMSET=YLEN/(NUMCN+NUMTRI) FOR MORE THAN ONE CHANNEL
169 C THE TEMSET ORIGIN OFFSET IS RESET AT THE END OF THE LOOP ( ST. 25)
170 C
171 C
172 TEMSET=0 @ CO HOLDS THE FIRST CHANNEL TO PLOT (INCREMENTED AT END OF LOOP)
173 DO 20 K=1,NCOND(TIMABZ,ALLCHS,1) @ SCAN ALLCHS CHANNELS WITH INDEX K FROM 1 TO ALLCHS
174 C
175 C HERE WE COMPUTE THE ACTUAL CHANNEL NUMBER:
176 C EITHER A/D CO TO NUMCN-1 (0 TO CHNLS-1) OR
177 C TRIGG EVENT FROM CHNLS TO CHNLS+STRIGS
178 C
179 C ADPLT IS SET TRUE FOR A/D CHANNELS TO SCAN
180 C STEPSIZE IS THE INCREMENT FOR THE SCAN;
181 C FOR A/D CHANNELS THE MAXIMUM VALUE OF THE SPECIFIED: STEP OR
182 C IF LOWER SAMPLE FREQUENCY THAN MAXRAT THE PACK-VALUE.
183 C FOR TRIGG EVENT CHANNELS STEP MUST ALLWAYS BE 1!
184 C
185 IF (K.GT.NUMCN)CO=CHNLS+K-NUMCN-1 @ CO RUNS FROM CO TO CO+NUMCN FOR AD, FOR TRIGG'S FROM CHNLS TO CHNLS+TRIGS
186 ADPLT=CO.LT.CHNLS @ WE ARE PLOTTING A/D CHANNELS
187 STEPS=NCOND(ADPLT,MAX0(STEP,PACK(CO+1)),1) @ COMPUTE STEPSIZE FOR SCAN
188 C
189 C HERE WE DECIDE : X OVER Y PLOT
190 C OR X OVER TIME
191 C
192 IF (.NOT. TIMABZ) GOTO 51
193 C
194 C X OVER TIME
195 C
196 C IF THERE IS MORE THAN ONE CHANNEL WE HAVE TO PREPARE A LOT OF SMALL
197 C Y - AXIS FOR EACH CHANNEL TO SCAN. SO WE SET A TEMPORARY Y OFFSET CALLED TEMSET
198 TEMSET=FLOAT(ALLCHS-K)*(YLEN-ALLCHS*.5+.5)/
199 * FLOAT(ALLCHS)+(ALLCHS-K)*.5 @ TEMPORARY Y OFFSET
200 CALL XYPLOT (0,TEMSET,-PENUP) @ SWITCH TO CORRECT PART OF PICTURE
201 C
202 C COMPUTE THE FACTOR TO GET A PRETTY PLOT
203 C
204 K1=CO+1 @ INDEX TO ORDMIN/MAX SINCE CO STARTS WITH 0
205 UP=ORDMAX(K1)
206 DOWN=ORDMIN(K1) @ INSERT THE DEFAULT SCALING LIMITS
207 IF (ORDMAX(K1).LE.ORDMIN(K1)) GOTO 21 @ AUTOMATIC SCALING DESIRED
208 OMAX=UP
209 OMIN=DOWN
210 GOTO 51 @ SCALING ALREADY DONE
211 \fC
212 C HERE WE DO AUTOMATIC SCALING
213 C
214 21 CONTINUE
215 OMAX=-99999.
216 OMIN=-OMAX
217 DO 50 J=S0,S1,STEPS @ FETCH MIN & MAX OF THE DATA
218 IF (BREAK(11)) GOTO 25 @ IF THE USER GETS RID OF PLOT THEN WE EXIT VIA 25
219 TE1=XYSAM(J,CO) @ DATA POINT --> TE1
220 OMAX=AMAX1(OMAX,TE1) @ MAXIMUM --> OMAX
221 50 OMIN=AMIN1(OMIN,TE1) @ MINIMUM --> OMIN
222 C
223 IF (UP .GT. DOWN-1.) GOTO 52 @ IF UP.LE.DOWN THEN WE MAKE A FIXED SCALE
224 C FIXED SCALE IF POSSIBLE:
225 IF (OMIN.GE.OMAX-(DOWN-UP)) GOTO 53 @ MAKE A FIXED SCALE AT 53
226 DOWN=OMIN @ DIFFERENCE BETWEEN MIN AND MAX EXCEEDS THE FIX SCALE LENGTH, SO WE TAKE DEFAULT VALUES
227 UP=OMAX @ ELSE DOWN=UP-(OMIN-OMAX) (FIXED DIFFERENCE SCALE)
228 GOTO 51 @ WORK DONE
229 C FIXED SCALE POSSIBLE, MAKE IT AND CENTER THE PLOT
230 53 TE1=OMIN-((DOWN-UP)-(OMAX-OMIN))*.5
231 UP=TE1+DOWN-UP @ UPPER LIMIT
232 DOWN=TE1 @ WE SHIFT THE LINE INTO THE CENTER
233 GOTO 51 @ FIXED DIFFERENCE SCALE DONE
234 C AUTOMATIC SCALE BUT WITH INCREMENTAL STEPPED LIMITS
235 52 CONTINUE
236 DOWN=COND(OMIN.LT.-512.,OMIN,OMIN.LT.-255.,-512.,
237 * OMIN.LT.0,-255.,OMIN.LT.256.,0, 255.) @ MAKE 255 STEPS INCREMENT
238 UP=COND(OMAX.GT.512.,OMAX,OMAX.GT.255.,512.,
239 * OMAX.GT.0,255.,OMAX.GT.-255.,0, -255.) @ 255 STEPS INCREMENT
240 C
241 UP=COND(DOWN.GE.UP,DOWN+255.,UP) @ SOMETIMES IT WILL HAPPEN: UP=DOWN
242 51 CONTINUE @ HERE WE COMPUTE THE FACTOR FOR ONE LINE
243 IF (TIMABZ) CALL FACTOR (XLEN/(RIGHT-LEFT),
244 * (YLEN-ALLCHS*.5+.5)/FLOAT(ALLCHS)/(UP-DOWN))
245 IF (.NOT.TIMABZ) CALL FACTOR (AMIN1(XLEN,YLEN)/(RIGHT-LEFT),
246 * AMIN1(XLEN,YLEN)/(UP-DOWN))
247 IF BREAK(11) GOTO 25 @ USER GETS RID OF PRGRM
248 \fC
249 C HERE WE COMPRESS ( TO SAVE PLOTTER TIME) AND PLOT THE DATA POINTS
250 C
251 CALL WHERE (TE1,TE1,TE1,TE2) @ FETCH THE X FACTOR --> TE1
252 YFMIN=9999.
253 YFMAX=-YFMIN @ PREP TEMPS TO FETCH THE MIN/MAX OF THE ORDINATE POINTS
254 BOTH=.FALSE.
255 C
256 OLDX=XF(S0)-0.4/TE1*XLEN
257 PENPOS=PENUP
258 L1=.FALSE. @ L1 HOLDS: YF(I) INSIDE LOWER/UPPER LIMIT OF PLOT
259 C
260 C IF THERE IS A X MOVEMENT LESS THAN .3 MM THEN WE DO NOT PLOT THE
261 C POINT. WE FETCH THE MIN/MAX OF Y AND PLOT A LINE FROM MIN TO MAX AT THIS X LOCATION.
262 C THIS IS TO COMPRESS USELESS OUTPUT TO THE PLOTTER.
263 C
264 C
265 C
266 DO 10 I=S0,S1,STEPS @ HERE WE PLOT THE DATA POINTS ONE BY ONE
267 X=XF(I) @ TEMP TO SAVE COMPUTING TIME
268 75 Y=YF(I) @ IF MORE THAN ONE SPIKE SET IN THE TRIGGER TIME WORD, WE REENTER HERE
269 IF BREAK(11) GOTO 25 @ USER GETS RID OF PROGRAM
270 IF(ADPLT)PENPOS=NCOND(BETW(-.1,Y,UP-DOWN+.5).OR.L1,PENPOS,PENUP) @ WE DO NOT PLOT ANY POINTS EXCEEDING THE UPPER/LOWER LIMIT
271 IF (.NOT.ADPLT) GOTO 74 @ TRIGGER EVENTS WITHOUT ANY COMPRESSION!
272 IF (ABS(OLDX-X)*TE1.GE.0.25/XLEN) GOTO 71 @ PLOT THIS POINT
273 YFMIN=AMIN1(Y,YFMIN) @ NO X MOVEMENT, GET THE MIN Y VALUE
274 YFMAX=AMAX1(Y,YFMAX) @ FETCH THE MAX Y VALUE
275 BOTH=.TRUE. @ TWO Y POINTS TO PLOT!! (MIN & MAX)
276 GOTO 10 @ WITH THE NEXT REAL X MOVEMENT
277 C
278 74 CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL
279 71 IF (BOTH) GOTO 72 @ IF THERE ARE TWO POINTS TO PLOT THEN GO 72 ELSE
280 CALL XYPLOT (X,BOX(Y),PENPOS) @ WE PLOT THIS ONE AND PRESS IT INTO U/L LIMITS
281 IF (.NOT.ADPLT)
282 * CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL
283 GO TO 73
284 72 CALL XYPLOT (X,BOX(YFMIN),PENPOS) @ UPPER AND LOWER Y VALUE TO PLOT
285 CALL XYPLOT (X,BOX(YFMAX),PENPOS)
286 YFMIN=9999. @ SET UP NEW MIN/MAX FETCH CYCLE
287 YFMAX=-YFMIN
288 BOTH =.FALSE. @ CLEAR UPPER/LOWER FLAG
289 73 CONTINUE
290 OLDX=X @ SAVE LAST X VALUE
291 L1=BETW(-.1,Y,UP-DOWN) @ L1:= Y INSIDE U/L LIMITS!
292 PENPOS=PENDWN
293 IF (NXTBIT.GE.0) GOTO 10 @ NO MORE SPIKES IN THIS TRIGG TIME WORD, SKIP TO 10
294 X=X+(XF(I+1)-XF(I))/TTRGW @ COMPUTE NEW X FOR MULTIPLE SPIKE EVENTS
295 GOTO 75 @ REPEAT FOR NEXT SPIKE IN THIS TIME WORD
296 10 CONTINUE
297 IF (.NOT. TIMABZ) GOTO 25 @ WORK DONE FOR X-Y GRAPHICS
298 C
299 C MAKE A SCALE FOR THE ORDINATE ( INPUT VOLTAGE )
300 C
301 CALL WHERE (TE1,TE1,TE1,TE2)
302 CALL FACTOR (1.,TE2)
303 CALL XYPLOT (-.5,0,-PENUP)
304 PENPOS=PENUP
305 DO 55 I=0,10
306 TE1=DOWN+I*(UP-DOWN)/10.
307 CALL XYPLOT (0,TE1-DOWN,PENPOS)
308 PENPOS=PENDWN
309 J=MOD(I,5)
310 TE3=COND(J.EQ.0,-.5,-.3)
311 CALL XYPLOT (TE3,TE1-DOWN,PENDWN)
312 CALL XYPLOT (0,TE1-DOWN,PENDWN)
313 IF (MOD(I,10).NE.0) GOTO 55
314 CALL FACTOR (1.,1.) @ WRITE LOWER AND UPPER LIMIT ONTO THE
315 CALL NUMBER (-XOFSET+2.*YZ,(TE1-DOWN)*TE2-YN*.38,YN*.75,TE1,0,
316 * -1) @ AXIS
317 CALL FACTOR (1.,TE2)
318 CALL XYPLOT (0,TE1-DOWN,PENUP)
319 55 CONTINUE
320 CALL XYPLOT (.5,0,-PENUP)
321 CALL FACTOR (1.,1.)
322 CALL SYMBOL (-XOFSET+YZ,
323 * AMAX1(0.,((YLEN-ALLCHS*.5)/ALLCHS-4.*YZ))*.5,YZ,
324 * NCOND(ADPLT,'CH ','TRG'),90.,3)
325 CALL NUMBER (999.,999.,YZ,
326 * NCOND(ADPLT,CO,CO-CHNLS+1),90.,-1) @ AD CHANNEL # : 0 .. CHNLS, TRG CHAN#: 1 .. STRIGS
327 C
328 C
329 CO=CO+1 @ HERE WE INCREMENT THE CHANNEL NUMBER
330 25 CALL FACTOR (1.,1.)
331 CALL XYPLOT (0.,-TEMSET,-PENUP) @ RESET CORRECT ORIGIN OF DIAGRAM
332 IF BREAK(11) GOTO 40
333 20 CONTINUE
334 \fC
335 C IF ABZISSA IS TIME SCALE THEN DRAW A TIME SCALE
336 C
337 IF (.NOT.TIMABZ) GOTO 40
338 CALL FACTOR (XLEN/(PLEND-PLBEG),1.)
339 CALL XYPLOT (0.,-.5,-PENUP)
340 C HERE WE PLOT THE LITTLE BAR INDICATING A SECOND OR MINUTE
341 ABISMI=PLEND-PLBEG.GT.300 @ ABZISSE EXCEEDS 5 MINUTES SO WE DRAW A MINUTE SCALING
342 EXPAND=NCOND(PLEND-PLBEG.LE.5,10,1) @ IF THE TIME SCALE IS .LE. 5 SECONDS THEN WE MARK EACH 1/10 SEC
343 C @ REMEMBER : IF (ABISMI) EXPAND=.FALSE. FOR CORRECT ACTION
344 DO 30 I=PLBEG*EXPAND,PLEND*EXPAND @ 1 SEC INCREMENTS
345 TE1=I-PLBEG*EXPAND
346 CALL XYPLOT (TE1/EXPAND,0,PENDWN)
347 IF (.NOT.ABISMI) TE2=COND(MOD(I,10).EQ.0,-.7, MOD(I,5).EQ.0,-.5,
348 * -.3)
349 IF (ABISMI) TE2=COND(MOD(I,600).EQ.0,-.7,
350 * MOD(I,300).EQ.0,-.5, MOD(I,60).EQ.0,-.3)
351 CALL XYPLOT (TE1/EXPAND,TE2,PENDWN) @ HERE WE PLOT THE SMALL BAR
352 CALL XYPLOT (TE1/EXPAND,0,PENDWN)
353 C HERE WE COMPUTE WHERE TO WRITE A NUMBER ONTO THE TIME AXIS
354 TE2=PLEND-PLBEG @ COMPUTE THE SIZE OF THE TIME AXIS
355 IF (.NOT.ABISMI) GOTO 31 @ IF WE PLOT A SECONDS AXIS THEN GOTO 31
356 IF (MOD(I,
357 * NCOND(TE2.GT.5400,1800,TE2.GE.1800,600,TE2.GT.900,300,
358 * TE2.GT.290,120,60)).GT.0) GOTO 29 @ COMPUTE THE MINUTE WHERE TO PLOT THE NUMBER
359 GOTO 32 @ SKIP TO PLOT THE NUMBER
360 31 IF (MOD(I,NCOND(TE2.GT.180,30,TE2.GT.60,20,TE2.GT.30,10,
361 * TE2.GT.10,5,TE2.GT.5,2,10)).GT.0) @ WE ASSUME: TE2.LE.5 THEN EXPAND:=10 ELSE EXPAND:=1 !!!
362 * GOTO 30
363 C
364 C HERE WE PLOT THE NUMBER ONTO THE AXIS
365 C
366 32 CONTINUE
367 CALL WHERE (TE2,TE2,TE2,TE3) @ GET THE X FACTOR
368 CALL FACTOR (1.,1.) @ RESET TO THE NORMAL FACTOR FOR SYMBOL
369 CALL NUMBER (TE1/EXPAND*TE2-INT(ALOG10(AMAX0(COND(ABISMI,
370 * I/60.,I/EXPAND),1))+.01)
371 * *YN/2.-YN*.3,
372 * -1.3,YN,COND(ABISMI,I/60.,I/EXPAND),0,-1)
373 CALL FACTOR (TE2,TE3)
374 CALL XYPLOT (TE1/EXPAND,0,PENUP)
375 CALL XYPLOT (TE1/EXPAND,0,PENDWN)
376 29 I=NCOND(ABISMI,MIN0(I+59,
377 * NCOND(I.EQ.PLEND*EXPAND,I,PLEND*EXPAND-1)),I) @ MINUTE SCALE HAS 60 SEC INCREMENT
378 C SECOND NCOND ABOVE PREVENTS ENDLESS LOOP
379 C
380 30 CONTINUE
381 CALL FACTOR (1.,1.)
382 CALL XYPLOT (0,.5,-PENUP)
383 CALL SYMBOL (XLEN/1.5,-YOFSET,YZ,TEXT0(NCOND(ABISMI,1,3)),0,10)
384 C
385 C
386 40 CALL FACTOR (1.,1.)
387 IF (BREAK(11)) GOTO 60 @ USER SWITCHED OFF THE PLOTTER
388 CALL LABPLT (0,-YOFSET,PLEND)
389 IF (BREAK(11)) GOTO 60
390 CALL SYMBOL (YZ,YLEN+YZ,YZ,LABEL,0,MIN0(42,LABCNT*6)) @ PLOT 42 CHARACTERS INTO THE FIRST LINE OF LABEL
391 IF (LABCNT.GT.7)
392 * CALL SYMBOL (YZ,YLEN,YZ,LABEL(8),0,LABCNT*6-42) @ AND THE REMAINING INTO THE NEXT LINE
393 60 CONTINUE
394 CALL XYPLOT (38.,25.,PENUP)
395 CALL EXPLT
396 RETURN
397 1 FORMAT (' KANAL ABZISSE/ORDINATE (ZEITBASIS=8), SCHRITTWEITE',
398 * ' (2I1,I3) (',
399 * 2I1,I3,')? ',$)
400 2 FORMAT (2A1,I3)
401 3 FORMAT (' ANZAHL DER DARZUSTELLENDEN ',A3,' KANAELE (I1) (',I1,
402 * ') ? ',$)
403 4 FORMAT (' NUR FUER',F6.1,' SEK. MESSDATEN JEDOCH',F6.1,
404 * ' SEC. ANGEFORDERT. ')
405 5 FORMAT (' ORDINATEN MAXIMUM FUER ',A3,' KANAL',I2,' (',F5.0,')?',$)
406 6 FORMAT (' " " MINIMUM FUER ',A3,' KANAL',I2,' (',F5.0,')?',$)
407 7 FORMAT (F5.0)
408 9 FORMAT (' ABZISSEN/ ORDINATEN KANAL ODER SCHRITTWEITE ',
409 * ' FEHLERHAFT: ',3I4)
410 END
411 \1a