A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haexys.ft
CommitLineData
81e70d48
PH
1C -+-+-+-+-+ \ e H A E X Y S . F T \ e -+-+-+-+-+\r
2C\r
3C RETURNS A SPECIFIED WORD FROM SAMPLE BUFFER (CHANNEL 0 TO 7)\r
4C RETURNS THE INDEX ID (CHANNEL 8)\r
5C\r
6 REAL FUNCTION XYSAM (ID,CN)\r
7 INTEGER ID, @ INDEX TO THE WORD\r
8 * CN @ CHANNEL WHERE TO GET THE WORD\r
9 * ,TRGWRD,TRITIM\r
10 REAL ESAM\r
11 EXTERNAL ESAM,\r
12 * TRITIM\r
13 * ,TRGWRD\r
14 INCLUDE HAEBUF.FI\r
15 INCLUDE HAECTR.FI\r
16 INCLUDE HABRK.FI\r
17\fC\r
18 INTEGER CH @ SAVES THE ACT. CHANNEL NUMBER\r
19 * ,I,B,T1,T2,N @ TEMP STORAGE\r
20 * ,T @ T EQUIVALENCED INTO COMMON!\r
21 EQUIVALENCE (TTRGW,T)\r
22C STATEMENT FUNCTIONS ARE:\r
23 INTEGER TIMFRQ\r
24 TIMFRQ(IP1,IP2)=500/(IP1+12*IP2) @ 1 IST MINIMUM FUER EINZEL SPIKE\r
25C\r
26 XYSAM=FLOAT(ID) @ IF CALLED FOR TIME BASE THEN \r
27 IF (CN.GT.7) RETURN @ RETURN WITH XYSAM=ID\r
28 IF (CN.LT.CHNLS) GOTO 10 @ TEST FOR VALID CHANNEL NUMBER\r
29 IF (CN.LT.CHNLS+STRIGS) GOTO 20\r
30 WRITE (TTO,1) CN,CHNLS\r
31 STOP\r
3210 CONTINUE\r
33 CH=CHANEL @ SAVE THE CURRENT CHANNEL NUMBER\r
34 CHANEL=CN @ COMPUTES ESAM INDEX\r
35 XYSAM=ESAM(ID) @ LOAD THE WORD FROM VIRTUAL STORAGE\r
36 CHANEL=CH @ RESTORE CURRENT CHANNEL NUMBER\r
37 RETURN\r
38C\r
39C HERE WE HANDLE THE TRIGGER EVENTS: WE SUMM UP ALL BITS IN ONE TIME WORD!\r
40C\r
4120 CONTINUE\r
42 CH=CHANEL\r
43 CHANEL=CN\r
44 T=TRGWRD(ESAM(ID))\r
45 CHANEL=CH\r
46 IF (.NOT.BREAK(8)) XYSAM=T*40\r
47 IF (.NOT.BREAK(8)) RETURN\r
48C\r
49C\r
50 IF (T.EQ.0) GOTO 23 @ KEINE SPIKES\r
51 IF (NXTBIT.LT.0) GOTO 25 @ MEHR ALS EIN SPIKE\r
52C\r
53 NXTBIT=-1\r
54 T2=TRITIM(ID,NXTBIT) @ LI --> RE SUCHE LIEFERT BITPOSITION IM AKTUELLEN WORT\r
55C\r
56C RUECKWAERTS SUCHE BIS ZU 300 MILLI SEC BEI 128 HZ MESSRATE\r
57C\r
58 B=MAX0(1,ID-41) @ WE SCAN TO THE LEFT 41 STEPS OR TO THE BEGINING\r
59 DO 21 I=1,B @ WIR SUCHEN RUECKWAERTS 40 STELLEN, JEDOCH NICHT VOR DATENANFANG!\r
60 N=1 @ RE --> LI SUCHE\r
61 T1=TRITIM(ID-I,N) @ BERECHNE MIT DECREMENTIERENDEM ZAEHLER\r
62 IF(T1.NE.0) GOTO 22 @ WIR HABEN VORHERGEHENDEN SPIKE GEFUNDEN\r
6321 CONTINUE\r
64 XYSAM=TIMFRQ(500,0) @ MINIMALER WERT BEI SPIKE OHNE VORHERGAENGER\r
65 IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG\r
66 RETURN\r
67C\r
6822 XYSAM=TIMFRQ(T1+T2,I-1) @ RECHNE INDEX IN FREQUENZ UM\r
69 IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG\r
70 RETURN\r
71C\r
7223 XYSAM=0.1 @ KEINE SPIKES GEFUNDEN, ALSO NULL\r
7324 NXTBIT=1 @ NAECHSTES WORT VON RECHTS AN DURCHSUCHEN\r
74 RETURN\r
75C\r
76C MEHR ALS EIN SPIKE JE WORT GEFUNDEN\r
77C DANN SETZTEN WIR NXTBIT NEGATIV UND SUCHEN VON LINKS NACH RECHTS.\r
78C DAS PLOTTPROGRAMM RUFT SO LANGE XYSAM AUF BIS NXTBIT POSITIV WIRD!\r
79C\r
8025 T1=TRITIM(ID,NXTBIT) @ TRITIM IST AUF LINKS --> RECHTS SUCHE GESCHALTET\r
81 IF(T1.EQ.0) GOTO23 @ KEINE SPIKES MEHR GEFUNDEN, KANN WEITERGEHEN\r
82 XYSAM=TIMFRQ(T1,0) @ WANDELE BITINDEX IN FREQUENZ UM\r
83 IF(NXTBIT.GE.12) GOTO 24 @ WAR DIE LETZTE BITPOSITION IM WORT, ZUENDE\r
84 NXTBIT=ISIGN(NXTBIT,-1) @ SETZE DAS DOPPELSPIKE FLAG: NXTBIT < 0\r
85 RETURN\r
86C\r
871 FORMAT (' XYSAM: KANALNUMMER',\r
88 * I3,' GROESSER ALS ANZAHL DER KANAELE',I3)\r
89 END\r
90\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\0\0\0\0\0