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