A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haenya.ft
diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/haenya.ft b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/haenya.ft
new file mode 100644 (file)
index 0000000..8c031c6
--- /dev/null
@@ -0,0 +1,489 @@
+C      -+-+-+-+-+ \ e  H A E N Y A . F T  \ e -+-+-+-+-+\r
+C\r
+C      * UP  1-OCT-82\r
+C      * UP  3-NOV-82\r
+C      * UP 26-NOV-82\r
+C      * UP 12-JAN-83\r
+C      * UP 25-APR-83\r
+C      * UP 26-APR-83 CREATES HAENYA FROM HAESPL\r
+C      * UP 28-APR-83\r
+C      * UP  2-MAY-83\r
+C      * UP  3-MAY-83\r
+C      * UP  5-MAY-83\r
+C      * UP 10-MAY-83\r
+C      * UP 20-NOV-83\r
+C      * UP  7-DEC-83 DEBUGGING\r
+C      * UP  8-DEC-83 DEBUGGING\r
+C      * UP 15-DEC-83 REARANGEMENT OF DATA CHANNELS ON OUTPUT PLOT\r
+C      * UP 19-DEC-83 DEBUGGING\r
+C      * UP 25-JAN-84 INSERTS NORMALISATION FACTORS INTO PLOT\r
+C      * UP 26-APR-84 INSERTS SPECIAL CH2 HANDLING ( TURN TABLE)\r
+C      * UP 26-JAN-84 OPTION '+' ASKS FOR CALIBRATION & NORMALISATION VECTOR\r
+C      * UP 28-MAY-84 SACCADE DIRECTION SEPARATION INTO L/R\r
+C      * UP 30-NOV-84 SOME NEW ENHANCEMENTS FOR I/O AND PLOTTER\r
+C      * UP 10-DEC-84 ONLE ONE NORMALISATION FACTOR FOR EACH CHANNEL\r
+C      * UP 27-SEP-85 INSERTS STRIGG CHANNELS\r
+C      * UP 19-NOV-85 REMOVES SOME BUGS\r
+C      * UP  2-DEC-85 CORRECT HANDLING FOR TRIGGER CHANNELS\r
+
+C      PLOT THE DATA POINTS AND THE SUMM OF CH0 AND CH1\r
+C\r
+       SUBROUTINE NYADD\r
+       INCLUDE HAEPTI.FI\r
+       INCLUDE HAEBUF.FI\r
+       INCLUDE HAEGSA.FI\r
+       INCLUDE HAETTY.FI\r
+       INCLUDE HABRK.FI\r
+       INCLUDE HAECSZ.FI\r
+       INCLUDE HAEHAS.FI\r
+       INCLUDE HAECNY.FI\r
+       INCLUDE HAECTR.FI\r
+       INCLUDE HAPPEN.FI\r
+       REAL XYSAM,COND,NYXYSM\r
+       LOGICAL BETW\r
+       INTEGER NCOND,TOASCI,IXTA,FLD\r
+       EXTERNAL XYSAM,NCOND,COND,TOASCI,BETW,NYXYSM,IXTA,FLD\r
+C\r
+\fC\r
+       LOGICAL TIMABZ,TIMORD,          @ ABZISSE / ORDINATE IS TIME SCALE\r
+     *  ABISMI,                                @ IF THE ABZISSA SCALE EXCEEDS 5 MINUTES THEN .TRUE. ELSE .FALSE.\r
+     *  BOTH,L1,ADPLT,TRGPLT                   @ PLOT MIN&MAX OF SOME Y POINTS, WE ARE PLOTTING A/D CHANNELS, WE ARE PLOTTING STRIG CHANNELS\r
+       INTEGER I,K,K1,J,PENPOS,MSG,\r
+     *  CO,                            @ CHANNEL OF ORDINATE\r
+     *  PLBEG,PLEND,                   @ START/END OF TIME SCALE\r
+     *  NUMCN,                         @ NUMBER OF CHANNELS TO SCAN (NO MEANING IF TIMABZ IS SET .FALSE.)\r
+     *  EXPAND                         @ IF THE TIME SCALE .LE. 5 SECONDS THEN WE MARK EACH 1/10 SECOND ELSE EACH SECOND\r
+     *  ,TS1                           @ HOLDS END OF TIME SCALE\r
+     *  ,REARAN(8)                     @ REARANGE VECTOR\r
+     *  ,NORMSG (1)                    @ MESSAGE FOR CALIBRATION FACTORS\r
+       REAL TEMSET,                    @ DIFFERENCE PLOTTER 0,0 AND PICTURE 0,0 (NO MEANING IF TIMABZ IS SET TO .FALSE.)\r
+     *  LEFT,RIGHT,UP,DOWN,            @ PLOT SCALES ABZISSE/ ORDINATE\r
+     *  TE1,TE2,TE3,                   @ TEMPS\r
+     *  X,Y,YFMIN,YFMAX,               @ USED TO COMPRESS PLOT OUTPUT\r
+     *  OLDX                           @ USED TO COMPRESS PLOT OUTPUT\r
+     *  ,OMAX,OMIN                     @ MAXIMUM AND MINIMUM OF ORDINATE DATA\r
+       INTEGER TEXT0(4)                @ DIMENSION OF THE TIME AXIS (MIN OR SEC)\r
+     *  ,TEXT1(2)                      @ MSG FOR FORMAT 3 OUTPUT\r
+       DATA CA,CO,NUMCN,STEP,NUMTRI,ALLCHS /0,8,2,3,0,2/\r
+     *  ,TEXT1 /'A/D','TRG'/\r
+     *  ,TEXT0 /'TIME [MIN]  TIME [SEC]'/\r
+     *  ,REARAN /2,5,4,1,0,3,6,7/      @ PERMUTATION: NUMBER OF PLOT ^ CHANNEL\r
+     *  ,NORMSG /'GRAD'/\r
+C      SIGNAL NAME     CHANNEL NUMBER          COMMENT\r
+C      CH0  A/D        0                       NYSTAGMUS\r
+C      CH1  A/D        1                       HEAD\r
+C      CH2  A/D        2                       TABLE\r
+C      TRG 1 SPIKE     3                       NEURON SPIKES\r
+C      ADD 0           4                       COMPUTED FROM NYSTAGMUS+HEAD\r
+C      ADD 1           5                       COMPUTED NYSTAGMUS+HEAD+TABLE\r
+C\r
+C\r
+C      STATEMENT FUNCTIONS ARE:\r
+C\r
+       BOX(AP1)=AMAX1(AMIN1(AP1,UP-DOWN),-.01)\r
+       XF(IP1)=XYSAM(IP1,CA)-LEFT      @ RETURNS THE VALUE OF THE ABZISSA WITH CORRECT OFFSET\r
+       YF(IP1)=NYXYSM(IP1,CO)-DOWN      @ RETURNS THE VALUES OF THE ORDINATE WITH THE CORRECT OFFSET\r
+       DEFALT(I1,I2)=NCOND(I1.EQ.1H ,I2,IXTA(FLD(0,6,I1))-48) @ RETURNS DEFAULT VALUES\r
+C\r
+\f      IF (SAMCNT.EQ.0) RETURN         @ NO SAMPLE, NOTHING TO DO\r
+C      \r
+C      COMPUTE THE DEFAULT VALUES FOR THE PLOT\r
+C\r
+       IF (OPTION.EQ.11) GOTO 15       @ SP- SKIPS QUESTIONS AND TAKES THE LAST VALUES USED\r
+       NUMCN=CHNLS-COSTRT+2            @ ALL CHANNELS TO PLOT\r
+       NYAFIL=0                        @ NO FILTER FOR TABLE POSITION\r
+       IF (OPTION.EQ.12) GOTO 62\r
+       CALL ASKHIM (2)                  @ SP* DOES NOT ASK SCILLY QUESTIONS\r
+       WRITE (TTO,1) CA,COSTRT,STEP    @ READ CHANNEL ## (COSTRT SET TO 0 ALLWAYS)!\r
+       READ (TTI,2) I,J,K              @   AND STEP INCREMENTS\r
+       IF BREAK(11) RETURN\r
+       CA=DEFALT(I,CA)\r
+       COSTRT=0                        @ CAUSED BY REARANGE VECTOR, I DON'T KNOW HOW TO DO BETTER????\r
+       STEP=NCOND(K,K,STEP)            @ CA,CO, STEP DEFAULTS FOR BLANK INPUT\r
+62     CONTINUE\r
+       TIMABZ=CA.GT.7                  @ ABZISSE IS THE TIME SCALE\r
+       TIMORD=COSTRT.GT.7              @ ORDINATE IS THE TIME SCALE\r
+       IF (.NOT.TIMABZ) GOTO 15        @ ABZISSA IS NO TIME SCALE: ONLY TWO CHANNELS (CO,CO+1) TO PLOT\r
+       NUMCN=MIN0(NUMCN,CHNLS+1-COSTRT) @ COMPUTE CORRECT NUMBER OF CHANNELS\r
+       IF (OPTION.EQ.12) GOTO 61\r
+       WRITE (TTO,3) TEXT1(1),NUMCN    @ READ THE NUMBER OF CHANNELS TO SCAN\r
+       READ (TTI,2) I\r
+       I=DEFALT(I,NUMCN)               @ FOR BLANK INPUT DEFAULT IS NUMCN\r
+       NUMCN=MIN0(CHNLS+STRIGS-COSTRT+1,NCOND(I,I,NUMCN)) @ NO INPUT MEANS CHNLS-CO\r
+       ALLCHS=NUMCN+NUMTRI             @ NUMBER OF A/D AND STRIGG CHANNELS TO PLOT\r
+C\r
+C      ASK FOR NUMBER OF STRIGG CHANNELS TO PLOT\r
+C\r
+       IF (STRIGS.EQ.0) GOTO 11        @ NO STRIGS, NO QUESTIONS\r
+       NUMTRI=STRIGS                   @ INSERT DEFAULT VALUE\r
+       WRITE (TTO,3) TEXT1(2),NUMTRI   @ READ THE NUMBER OF STRIGG CHANNELS TO SCAN\r
+       READ (TTI,2) I\r
+       I=DEFALT(I,NUMTRI)              @ BLANK INPUTS DEFAULTS TO NUMTRI\r
+       NUMTRI=MIN0(STRIGS,MAX0(0,I))   @ INSERT CORRECT VALUE\r
+       ALLCHS=MIN0(NUMCN+NUMTRI,8)     @ ONLY 8 CHANNELS ALLOWED\r
+11     CONTINUE\r
+61     CONTINUE\r
+C\r
+C      ASK FOR SCALE OF THE ORDINATE (MINIMUM AND MAXIMUM)\r
+C\r
+       DO 80 K=COSTRT+1,NUMCN+COSTRT+NUMTRI\r
+       K1=K+1\r
+       ADPLT=K.LT.CHNLS                @ QUESTIONS FOR A/D CHANNEL TO PLOT\r
+       TRGPLT=BETW(CHNLS,K,CHNLS+STRIGS) @ FOR SCHMITT TRIGGER CHNNELS\r
+       I=NCOND(ADPLT,'A/D',TRGPLT,'TRG','ADD') @ COMPUTE CORRECT TEXT\r
+       WRITE (TTO,5) I,K,ORDMAX(K1) @ READ THE MAXIMUM\r
+       READ  (TTI,7) TE1\r
+       ORDMAX(K1)=COND(TE1,TE1,ORDMAX(K1))\r
+       IF (BREAK(11)) RETURN\r
+       WRITE (TTO,6) I,K,ORDMIN(K1) @ READ THE MINIMUM\r
+       READ  (TTI,7) TE1\r
+       ORDMIN(K1)=COND(TE1,TE1,ORDMIN(K1))\r
+       IF (BREAK(11)) RETURN\r
+       IF (TRGPLT) GOTO 80             @ NO NORMALISATION FOR TRIGGER CHANNELS\r
+       WRITE (TTO,8) NORMSG(1),NORM(K1) @ READ THE CALIBRATION FACTOR\r
+       READ (TTI,7) TE1\r
+       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
+80     CONTINUE\r
+\fC\r
+C      AND HERE WE ASK FOR TABLE POSITION HANDLING (REAL,FILTER,POLYNOM)\r
+C      NYAFIL: DETERMINE DESIRED FILTER\r
+C      NO FILTER:      0\r
+C      11 POINT FILTER:1\r
+C      LINE:           2\r
+C      3 POINT FILTER: 3\r
+C\r
+C\r
+       WRITE (TTO,104) NYAFIL,TABDIR   @ WELCHES FILTER FUER TISCHPOSITION?\r
+       READ (TTI,105) NYAFIL,TABDIR\r
+       IF (NYAFIL.LE.0) GOTO 82        @ 0: KEINE BEHANDLUNG\r
+       IF (NYAFIL.EQ.2) GOTO 125       @ 2: GERADE DURCH STUETZPUNKTE\r
+       NYAFIL=MIN0(NYAFIL,3)           @ 1: 11 POL FILTER, 3: 3 POL FILTER\r
+       GOTO 82\r
+C\r
+125    CONTINUE                        @ LESE STUETZPUNKTE FUER GERADE EIN\r
+       CALL MOVE (-16,-10,SMOTAB)\r
+       DO 110 I=1,8\r
+111    WRITE (TTO,101) I\r
+       READ (TTI,102) SMOTAB(1,I)      @ UNTERER STUETZPUNKT\r
+       IF (I.EQ.1) GOTO 112\r
+       IF (SMOTAB(1,I).LT.SMOTAB(2,I-1)) GOTO 120\r
+112    IF (SMOTAB(1,I).LT.0) GOTO 111  @ FEHLERHAFTE EINGABE\r
+113    WRITE (TTO,103)\r
+       READ (TTI,102) SMOTAB(2,I)      @ OBERER STUETZPUNKT\r
+       IF (SMOTAB(2,I).LE.SMOTAB(1,I)) GOTO 113\r
+110    CONTINUE\r
+       GOTO 122\r
+120    DO 121 J=I,8\r
+       SMOTAB(1,J)=-10\r
+121    SMOTAB(2,J)=-10\r
+122    CONTINUE\r
+       DO 130 I=1,8\r
+       SMOTAB(1,I)=SMOTAB(1,I)*SAMRAT+.5 @ CONVERT TO INDICES AND ROUND\r
+       SMOTAB(2,I)=SMOTAB(2,I)*SAMRAT+.5\r
+       IF (SMOTAB(1,I).LT.0) GOTO 140\r
+       SMOTBL(1,I)=(XYSAM(INT(SMOTAB(2,I)),2)-\r
+     *    XYSAM(INT(SMOTAB(1,I)),2))\r
+     *   / (SMOTAB(2,I)-SMOTAB(1,I))   @ STEIGUNG\r
+130    SMOTBL(2,I)=XYSAM(INT(SMOTAB(1,I)),2)-\r
+     *    SMOTBL(1,I)*(SMOTAB(1,I)-.5)\r
+140    CONTINUE\r
+101    FORMAT (' STUETZPUNKT PAAR NR.:',I2,/\r
+     *   ' UNTERER STUETZPUNKT IN SEC (F6.0)? ',$)\r
+102    FORMAT (F6.0)\r
+103    FORMAT (' OBERER STUETZPUNKT               ? ',$)\r
+104    FORMAT (' TISCH: FILTER 0/1/2/3, DREHRICHTUNG L/R/* (I1,A1) ',\r
+     *    I1,A1,' ?',$)\r
+105    FORMAT (I1,A1)\r
+C\r
+C\r
+82     CONTINUE\r
+15     CONTINUE\r
+\fC\r
+C      COMPUTE THE SCALING LIMITS\r
+C\r
+       S0=BEGIN*SAMRAT                 @ HERE WE START THE OUTPUT PLOT\r
+       S1=ENDS*SAMRAT                  @ AND HERE WE END THE PLOT\r
+       TS1=S1                          @ END OF TIME SCALE\r
+C      PLBEG   HOLDS THE FIRST SECOND OF THE TIME SCALE (LEFTMOST )\r
+C      PLEND   HOLDS THE LAST SECOND OF THE TIME SCALE ( RIGHTMOST DOT)\r
+C      TS1     HOLDS FACTOR FOR TIME SCALE (PLEND*SAMRAT)\r
+C      S0      HOLDS THE STARTING INDEX OF DATA TO PLOT ( PLBEG*SAMRAT)\r
+C      S1      HOLDS THE INDEX OF LAST DATA POINT (MIN0(SAMCNT,TS1))\r
+       PLBEG=BEGIN\r
+       PLEND=ENDS\r
+C\r
+       IF (S1.LE.SAMCNT) GOTO 17       @ IF THE INTERVALL TO PLOT EXCEEDS THE\r
+       TE1=SAMCNT-1/SAMRAT             @  DATA POINTS THEN\r
+       TE2=S1/SAMRAT\r
+       WRITE (TTO,4) TE1,TE2           @  WE PRINT THE OVERFLOW MSG AND\r
+       S1=SAMCNT                       @ INSERT THE CORRECT PLEND VALUE\r
+17     CONTINUE                        @ INTERVALL OK, COMPUTE UPPER AND LOWER MARGIN OF PLOT DATA\r
+       RIGHT=COND(TIMABZ,FLOAT(TS1),512.) @ ABZISSE MARGIN EITHER TIME OR 10 BIT CONVERTER\r
+       LEFT =COND(TIMABZ,FLOAT(S0),-512.)\r
+       UP   =COND(TIMORD,FLOAT(TS1),512.) @ ORDINATE MARGIN\r
+       DOWN =COND(TIMORD,FLOAT(S0),-512.)\r
+       IF BREAK(11) RETURN             @ USER GETS RID OF PRGRM\r
+       CALL STPLT                      @ START THE PLOTTER ( CALL PLOTS)\r
+       CALL XYPLOT (XOFSET,YOFSET,-PENUP) @ DRIVE PEN TO PICTURE ZERO\r
+C\r
+C      MAIN PLOT LOOP\r
+C\r
+C      LOOP TO PLOT EACH CHANNEL WITH CORRECT OFFSET, FACTOR AND SCALE\r
+C      TEMSET HOLDS THE ORIGIN FOR EACH CHANNEL\r
+C      TEMSET=0  PLOT ONE CHANNEL/TIME OR X/Y\r
+C      TEMSET=YLEN/NUMCN FOR MORE THAN ONE CHANNEL\r
+C      THE TEMSET ORIGIN OFFSET IS RESET AT THE END OF THE LOOP ( ST. 25)\r
+C\r
+C\r
+       TEMSET=0\r
+       DO 20 K=1,NCOND(TIMABZ,ALLCHS,1) @ SCAN NUMCN CHANNELS WITH INDEX K FROM 1 TO NUMCN\r
+       CO=REARAN(K)                    @ REARANGEMENT OF GRAPHICS\r
+       K1=CO+1                         @ INDEX TO ORDMIN/MAX SINCE CO STARTS WITH 0\r
+CXCX   IF (CO.LT.COSTRT) GOTO 20       @ COMPUTE ONLY DESIRED CHNNELS\r
+C\r
+C      HERE WE COMPUTE THE ACTUAL CHANNEL NUMBER:\r
+C      EITHER A/D  CO TO NUMCN-1  (0 TO CHNLS-1)  OR\r
+C       TRIGG EVENT  FROM CHNLS TO CHNLS+STRIGS-1\r
+C\r
+C      ADPLT IS SET TRUE FOR A/D CHANNELS TO SCAN\r
+C      STEPSIZE IS THE INCREMENT FOR THE SCAN;\r
+C      FOR A/D CHANNELS THE MAXIMUM VALUE OF THE SPECIFIED: STEP OR\r
+C      IF LOWER SAMPLE FREQUENCY THAN MAXRAT THE PACK-VALUE.\r
+C      FOR TRIGG EVENT CHANNELS STEP MUST ALLWAYS BE 1!\r
+C\r
+       TRGPLT=BETW(CHNLS,CO,CHNLS+STRIGS) @ WE ARE PLOTTING SCHMITT TRIGGER CHANNELS\r
+       ADPLT=CO.LT.CHNLS               @ WE ARE PLOTTING A/D CHANNELS\r
+       STEPS=NCOND(ADPLT,MAX0(STEP,PACK(CO+1)),\r
+     *   TRGPLT,1,MAX0(STEP,PACK(1),PACK(2),PACK(3))) @ COMPUTE STEPSIZE FOR SCAN\r
+C\r
+C      HERE WE DECIDE : X OVER Y PLOT \r
+C           OR          X OVER TIME\r
+C\r
+       IF ( .NOT.TIMABZ) GOTO 51\r
+C\r
+C      X OVER TIME\r
+C      \r
+C      IF THERE IS MORE THAN ONE CHANNEL WE HAVE TO PREPARE A LOT OF SMALL\r
+C      Y - AXIS FOR EACH CHANNEL TO SCAN. SO WE SET A TEMPORARY Y OFFSET CALLED TEMSET\r
+       TEMSET=FLOAT(ALLCHS-K)*(YLEN-ALLCHS*.5+.5)/\r
+     *   FLOAT(ALLCHS)+(ALLCHS-K)*.5   @ TEMPORARY Y OFFSET\r
+       CALL XYPLOT (0,TEMSET,-PENUP)   @ SWITCH TO CORRECT PART OF PICTURE\r
+C\r
+C      COMPUTE THE FACTOR TO GET A PRETTY PLOT\r
+C\r
+       UP=ORDMAX(K1)\r
+       DOWN=ORDMIN(K1)                 @ INSERT THE DEFAULT SCALING LIMITS\r
+       IF (UP.LE.DOWN) GOTO 51         @ AUTOMATIC SCALING DESIRED\r
+       OMAX=UP\r
+       OMIN=DOWN\r
+       GOTO 51                         @ SCALING ALREADY DONE\r
+\fC     HERE WE DO AUTOMATIC SCALING\r
+C\r
+21     CONTINUE\r
+       OMAX=-99999.\r
+       OMIN=-OMAX\r
+       DO 50 J=S0,S1,STEPS              @ FETCH MIN & MAX OF THE DATA\r
+       IF (BREAK(11)) GOTO 25          @ IF THE USER GETS RID OF PLOT THEN WE EXIT VIA 25\r
+       TE1=NYXYSM(J,CO)                @ DATA POINT --> TE1\r
+       OMAX=AMAX1(OMAX,TE1)            @ MAXIMUM --> OMAX\r
+50     OMIN=AMIN1(OMIN,TE1)            @ MINIMUM --> OMIN\r
+C\r
+       IF (UP .GT. DOWN-1.) GOTO 52    @ IF OMAX.EQ.OMIN THEN WE MAKE A FIXED SCALE\r
+C      FIXED SCALE IF POSSIBLE:\r
+       IF (OMIN.GE.OMAX-(DOWN-UP)) GOTO 53 @ MAKE A FIXED SCALE AT 53\r
+       DOWN=OMIN                       @ DIFFERENCE BETWEEN MIN AND MAX EXCEEDS THE FIX SCALE LENGTH, SO WE TAKE DEFAULT VALUES\r
+       UP=OMAX                         @ ELSE DOWN=UP-(OMIN-OMAX) (FIXED DIFFERENCE SCALE)\r
+       GOTO 51                         @ WORK DONE\r
+C      FIXED SCALE POSSIBLE, MAKE IT AND CENTER THE PLOT\r
+53     TE1=OMIN-((DOWN-UP)-(OMAX-OMIN))*.5\r
+       UP=TE1+DOWN-UP                  @ UPPER LIMIT\r
+       DOWN=TE1                        @ WE SHIFT THE LINE INTO THE CENTER\r
+       GOTO 51                         @ FIXED DIFFERENCE SCALE DONE\r
+C      AUTOMATIC SCALE BUT WITH INCREMENTAL STEPPED LIMITS\r
+C\r
+52     CONTINUE\r
+       DOWN=COND(OMIN.LT.-500.,OMIN,OMIN.LT.-250.,-500.,\r
+     *   OMIN.LT.0,-250.,OMIN.LT.250.,0, 250.) @ MAKE 250 STEPS INCREMENT\r
+       UP=COND(OMAX.GT.500.,OMAX,OMAX.GT.250.,500.,\r
+     *   OMAX.GT.0,250.,OMAX.GT.-250.,0, -250.)        @ 250 STEPS INCREMENT\r
+C\r
+       UP=COND(DOWN.GE.UP,DOWN+255.,UP) @ SOMETIMES IT WILL HAPPEN: UP=DOWN\r
+51     CONTINUE                        @ HERE WE COMPUTE THE FACTOR FOR ONE LINE\r
+       WRITE(0,4711) RIGHT,LEFT,ALLCHS,UP,DOWN\r
+4711   FORMAT(5I7)\r
+       IF (TIMABZ) CALL FACTOR (XLEN/(RIGHT-LEFT),\r
+     *   (YLEN-ALLCHS*.5+.5)/FLOAT(ALLCHS)/(UP-DOWN))\r
+       IF (.NOT.TIMABZ) CALL FACTOR (AMIN1(XLEN,YLEN)/(RIGHT-LEFT),\r
+     *   AMIN1(XLEN,YLEN)/(UP-DOWN))\r
+       IF BREAK(11) GOTO 25            @ USER GETS RID OF PRGRM\r
+\fC     HERE WE COMPRESS ( TO SAVE PLOTTER TIME) AND PLOT THE DATA POINTS\r
+C\r
+       CALL WHERE (TE1,TE1,TE1,TE2)    @ FETCH THE X FACTOR --> TE1\r
+       YFMIN=9999.\r
+       YFMAX=-YFMIN                    @ PREP TEMPS TO FETCH THE MIN/MAX OF THE ORDINATE POINTS\r
+       BOTH=.FALSE.\r
+C\r
+       OLDX=XF(S0)-0.4/TE1*XLEN\r
+       PENPOS=PENUP\r
+       L1=.FALSE.                      @ L1 HOLDS: YF(I) INSIDE LOWER/UPPER LIMIT OF PLOT\r
+C\r
+C      IF THERE IS A X MOVEMENT LESS THAN .3 MM THEN WE DO NOT PLOT THE\r
+C      POINT. WE FETCH THE MIN/MAX OF Y AND PLOT A LINE FROM MIN TO MAX AT THIS X LOCATION.\r
+C      THIS IS TO COMPRESS USELESS OUTPUT TO THE PLOTTER.\r
+C\r
+       DO 10 I=S0,S1,STEPS              @ HERE WE PLOT THE DATA POINTS ONE BY ONE \r
+       X=XF(I)                         @ TEMP TO SAVE COMPUTING TIME\r
+75     Y=YF(I)                         @ TEMP\r
+       IF BREAK(11) GOTO 25            @ USER GETS RID OF PROGRAM\r
+       IF(.NOT.TRGPLT)\r
+     *    PENPOS=NCOND(BETW(-.1,Y,UP-DOWN).OR.L1,PENPOS,PENUP) @ WE DO NOT PLOT ANY POINTS EXCEEDING THE UPPER/LOWER LIMIT\r
+       IF (ABS(OLDX-X)*TE1.GE.0.35/XLEN) GOTO 71 @ PLOT THIS POINT\r
+       IF(TRGPLT) GOTO 74              @ TRIGGER EVENTS WITHOUT ANY COMPRESSION!\r
+       YFMIN=AMIN1(Y,YFMIN)            @ NO X MOVEMENT, GET THE MIN Y VALUE\r
+       YFMAX=AMAX1(Y,YFMAX)            @ FETCH THE MAX Y VALUE\r
+       BOTH=.TRUE.                     @ TWO Y POINTS TO PLOT!! (MIN & MAX)\r
+       GOTO 10                         @  WITH THE NEXT REAL X MOVEMENT\r
+C\r
+74      CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL\r
+71     IF (BOTH) GOTO 72               @ IF THERE ARE TWO POINTS TO PLOT THEN GO 72 ELSE\r
+       CALL XYPLOT (X,BOX(Y),PENPOS) @  WE PLOT THIS ONE AND PRESS IT INTO U/L LIMITS\r
+       IF(TRGPLT)\r
+     *   CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL\r
+       GO TO 73\r
+72     CALL XYPLOT (X,BOX(YFMIN),PENPOS) @ UPPER AND LOWER Y VALUE TO PLOT\r
+       CALL XYPLOT (X,BOX(YFMAX),PENPOS)\r
+       YFMIN=9999.                     @ SET UP NEW MIN/MAX FETCH CYCLE\r
+       YFMAX=-YFMIN\r
+       BOTH =.FALSE.                   @ CLEAR UPPER/LOWER FLAG\r
+73     CONTINUE\r
+       OLDX=X                          @ SAVE LAST X VALUE\r
+       L1=BETW(-.1,Y,UP-DOWN)          @ L1:= Y INSIDE U/L LIMITS!\r
+       PENPOS=PENDWN\r
+       IF (NXTBIT.GE.0) GOTO 10        @ NO MORE SPIKES IN THIS TRIGG TIME WORD, SKIP TO 10\r
+       X=X+(XF(I+1)-XF(I))/TTRGW       @ COMPUTE NEW X FOR MULTIPLE SPIKE EVENTS\r
+       GOTO 75                         @ REPEAT FOR NEXT SPIKE IN THIS TIME WORD\r
+10     CONTINUE\r
+       IF (.NOT. TIMABZ) GOTO 25       @ WORK DONE FOR X-Y GRAPHICS\r
+C\r
+C      MAKE A SCALE FOR THE ORDINATE ( INPUT VOLTAGE )\r
+C\r
+       CALL WHERE (TE1,TE1,TE1,TE2)\r
+C      HERE WE WRITE THE CALIBRATION AND NORMALISATION FACTOR ONTO THE RIGHT SIDE\r
+       CALL FACTOR (1.,1.)             @ RESET TO THE NORMAL FACTOR FOR SYMBOL\r
+       CALL NUMBER (XLEN+YN,TE2*(UP-DOWN)/2.-1.2*YN\r
+     *   ,YN*.8,NORM(CO+1),90.,2)\r
+C\r
+       CALL FACTOR (1.,TE2)\r
+       CALL XYPLOT (-.5,0,-PENUP)\r
+       PENPOS=PENUP\r
+       DO 55 I=0,10\r
+       TE1=DOWN+I*(UP-DOWN)/10.\r
+       CALL XYPLOT (0,TE1-DOWN,PENPOS)\r
+       PENPOS=PENDWN\r
+       J=MOD(I,5)\r
+       TE3=COND(J.EQ.0,-.5,-.3)\r
+       CALL XYPLOT (TE3,TE1-DOWN,PENDWN)\r
+       CALL XYPLOT (0,TE1-DOWN,PENDWN)\r
+       IF (MOD(I,10).NE.0) GOTO 55\r
+       CALL FACTOR (1.,1.)             @ WRITE LOWER AND UPPER LIMIT ONTO THE\r
+       CALL NUMBER (-XOFSET+2.*YZ,(TE1-DOWN)*TE2-YN*.38,YN*.75,TE1,0,\r
+     *   -1)                           @ AXIS\r
+       CALL FACTOR (1.,TE2)\r
+       CALL XYPLOT (0,TE1-DOWN,PENUP)\r
+55     CONTINUE\r
+       CALL XYPLOT (.5,0,-PENUP)\r
+       CALL FACTOR (1.,1.)\r
+       CALL SYMBOL (-XOFSET+YZ,\r
+     *  AMAX1(0.,((YLEN-ALLCHS*.5)/ALLCHS-4.*YZ))*.5,YZ,\r
+     *   NCOND(ADPLT,'CH ',TRGPLT,'TRG','ADD'),90.,3)\r
+       CALL NUMBER (999.,999.,YZ,\r
+     *   NCOND(ADPLT,CO,TRGPLT,CO-CHNLS+1,CO-STRIGS-CHNLS),90.,-1) @ AD CHANNEL # : 0 .. CHNLS, TRG CHAN#: 1 .. STRIGS\r
+       IF(.NOT.TRGPLT)\r
+     *   CALL SYMBOL (-XOFSET+YZ+1.2*YN,YLEN/NUMCN*.33-YZ,YN*.8\r
+     *  ,'[DEG]',90.,5)                        @ A/D CHANNELS, SO WE PLOT DEGREES\r
+C\r
+C\r
+       CO=CO+1                         @ HERE WE INCREMENT THE CHANNEL NUMBER\r
+25     CALL FACTOR (1.,1.)\r
+       CALL XYPLOT (0.,-TEMSET,-PENUP) @ RESET CORRECT ORIGIN OF DIAGRAM\r
+       IF BREAK(11) GOTO 40\r
+20     CONTINUE\r
+\fC\r
+C      IF ABZISSA IS TIME SCALE THEN DRAW A TIME SCALE\r
+C\r
+       IF (.NOT.TIMABZ) GOTO 40\r
+       CALL FACTOR (XLEN/(PLEND-PLBEG),1.)\r
+       CALL XYPLOT (0.,-.5,-PENUP)\r
+C      HERE WE PLOT THE LITTLE BAR INDICATING A SECOND OR MINUTE\r
+       ABISMI=PLEND-PLBEG.GT.300       @ ABZISSE EXCEEDS 5 MINUTES SO WE DRAW A MINUTE SCALING\r
+       EXPAND=NCOND(PLEND-PLBEG.LE.5,10,1) @ IF THE TIME SCALE IS .LE. 5 SECONDS THEN WE MARK EACH 1/10 SEC\r
+C      @ REMEMBER : IF (ABISMI) EXPAND=.FALSE. FOR CORRECT ACTION \r
+       DO 30 I=PLBEG*EXPAND,PLEND*EXPAND @ 1 SEC INCREMENTS\r
+       TE1=I-PLBEG*EXPAND\r
+       CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r
+       IF (.NOT.ABISMI) TE2=COND(MOD(I,10).EQ.0,-.7, MOD(I,5).EQ.0,-.5,\r
+     *   -.3)\r
+       IF (ABISMI) TE2=COND(MOD(I,600).EQ.0,-.7,\r
+     *    MOD(I,300).EQ.0,-.5, MOD(I,60).EQ.0,-.3)\r
+       CALL XYPLOT (TE1/EXPAND,TE2,PENDWN) @ HERE WE PLOT THE SMALL BAR\r
+       CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r
+C      HERE WE COMPUTE WHERE TO WRITE A NUMBER ONTO THE TIME AXIS\r
+       TE2=PLEND-PLBEG                 @  COMPUTE THE SIZE OF THE TIME AXIS\r
+       IF (.NOT.ABISMI) GOTO 31        @ IF WE PLOT A SECONDS AXIS THEN GOTO 31\r
+       IF (MOD(I,\r
+     *   NCOND(TE2.GT.5400,1800,TE2.GE.1800,600,TE2.GT.900,300,\r
+     *   TE2.GT.300,120,60)).GT.0) GOTO 30 @ COMPUTE THE MINUTE WHERE TO PLOT THE NUMBER\r
+       GOTO 32\r
+31     IF (MOD(I,NCOND(TE2.GT.180,30,TE2.GT.60,20,TE2.GT.30,10,\r
+     *   TE2.GT.10,5,TE2.GT.5,2,10)).GT.0) @ WE ASSUME: TE2.LE.5 THEN EXPAND:=10 ELSE EXPAND:=1 !!!\r
+     *   GOTO 30\r
+C\r
+C      HERE WE PLOT THE NUMBER ONTO THE AXIS\r
+C\r
+32     CONTINUE\r
+       CALL WHERE (TE2,TE2,TE2,TE3)    @ GET THE X FACTOR\r
+       CALL FACTOR (1.,1.)             @ RESET TO THE NORMAL FACTOR FOR SYMBOL\r
+       CALL NUMBER (TE1/EXPAND*TE2-INT(ALOG10(AMAX0(COND(ABISMI,\r
+     *    I/60.,I/EXPAND),1))+.01)\r
+     *   *YN/2.-YN*.3,\r
+     *   -1.3,YN,COND(ABISMI,I/60.,I/EXPAND),0,-1)\r
+       CALL FACTOR (TE2,TE3)\r
+       CALL XYPLOT (TE1/EXPAND,0,PENUP)\r
+       CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r
+       I=NCOND(ABISMI,MIN0(I+59,PLEND-1),I) @ MINUTE SCALE HAS 60 SEC INCREMENT\r
+\r
+30     CONTINUE\r
+       CALL FACTOR (1.,1.)\r
+       CALL XYPLOT (0,.5,-PENUP)\r
+        CALL SYMBOL (XLEN/1.5,-YOFSET,YZ,TEXT0(NCOND(ABISMI,1,3)),0,10)\r
+C\r
+C\r
+40     CALL FACTOR (1.,1.)\r
+       IF (BREAK(11)) GOTO 60          @ USER SWITCHED OFF THE PLOTTER\r
+       CALL LABPLT (0,-YOFSET,PLEND)\r
+       IF (BREAK(11)) GOTO 60\r
+       CALL SYMBOL (YZ,YLEN+YZ,YZ,LABEL,0,MIN0(42,LABCNT*6)) @ PLOT 42 CHARACTERS INTO THE FIRST LINE OF LABEL\r
+       IF (LABCNT.GT.7)\r
+     *  CALL SYMBOL (YZ,YLEN,YZ,LABEL(8),0,LABCNT*6-42) @ AND THE REMAINING INTO THE NEXT LINE\r
+60     CONTINUE\r
+       CALL XYPLOT (38.,25.,PENUP)\r
+       CALL EXPLT\r
+       RETURN\r
+1      FORMAT (' KANAL ABZISSE/ORDINATE (ZEITBASIS=8), SCHRITTWEITE',\r
+     *  ' (2I1,I3) (',\r
+     *  2I1,I3,')? ',$)\r
+2      FORMAT (2A1,I3)\r
+3      FORMAT (' ANZAHL DER DARZUSTELLENDEN ',A3,' KANAELE (I1) (',I1,\r
+     *  ') ? ',$)\r
+4      FORMAT (' NUR FUER',F6.1,' SEK. MESSDATEN JEDOCH',F6.1,\r
+     *  ' SEC. ANGEFORDERT. ')\r
+5      FORMAT (' ORDINATEN MAXIMUM FUER ',A3,' KANAL',\r
+     *  I2,' (',F5.0,')?',$)\r
+6      FORMAT ('  "   "    MINIMUM  "   ',A3,'  " " ',\r
+     *  I2,' (',F5.0,')?',$)\r
+7      FORMAT (F5.0)\r
+8      FORMAT (' FAKTOR FUER ',A5,14X,'(',F5.3,')?',$)\r
+9      FORMAT (' ABZISSEN/ ORDINATEN KANAL ODER SCHRITTWEITE ',\r
+     *  ' FEHLERHAFT: ',3I4)\r
+       END\r
+\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
\ No newline at end of file