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