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