1 C -+-+-+-+-+
\ e H A E X Y S . F T
\ e -+-+-+-+-+
3 C RETURNS A SPECIFIED WORD FROM SAMPLE BUFFER (CHANNEL 0 TO 7)
4 C RETURNS THE INDEX ID (CHANNEL 8)
6 REAL FUNCTION XYSAM (ID,CN)
7 INTEGER ID, @ INDEX TO THE WORD
8 * CN @ CHANNEL WHERE TO GET THE WORD
18 INTEGER CH @ SAVES THE ACT. CHANNEL NUMBER
19 * ,I,B,T1,T2,N @ TEMP STORAGE
20 * ,T @ T EQUIVALENCED INTO COMMON!
22 C STATEMENT FUNCTIONS ARE:
24 TIMFRQ(IP1,IP2)=500/(IP1+12*IP2) @ 1 IST MINIMUM FUER EINZEL SPIKE
26 XYSAM=FLOAT(ID) @ IF CALLED FOR TIME BASE THEN
27 IF (CN.GT.7) RETURN @ RETURN WITH XYSAM=ID
28 IF (CN.LT.CHNLS) GOTO 10 @ TEST FOR VALID CHANNEL NUMBER
29 IF (CN.LT.CHNLS+STRIGS) GOTO 20
30 WRITE (TTO,1) CN,CHNLS
33 CH=CHANEL @ SAVE THE CURRENT CHANNEL NUMBER
34 CHANEL=CN @ COMPUTES ESAM INDEX
35 XYSAM=ESAM(ID) @ LOAD THE WORD FROM VIRTUAL STORAGE
36 CHANEL=CH @ RESTORE CURRENT CHANNEL NUMBER
39 C HERE WE HANDLE THE TRIGGER EVENTS: WE SUMM UP ALL BITS IN ONE TIME WORD!
46 IF (.NOT.BREAK(8)) XYSAM=T*40
47 IF (.NOT.BREAK(8)) RETURN
50 IF (T.EQ.0) GOTO 23 @ KEINE SPIKES
51 IF (NXTBIT.LT.0) GOTO 25 @ MEHR ALS EIN SPIKE
54 T2=TRITIM(ID,NXTBIT) @ LI --> RE SUCHE LIEFERT BITPOSITION IM AKTUELLEN WORT
56 C RUECKWAERTS SUCHE BIS ZU 300 MILLI SEC BEI 128 HZ MESSRATE
58 B=MAX0(1,ID-41) @ WE SCAN TO THE LEFT 41 STEPS OR TO THE BEGINING
59 DO 21 I=1,B @ WIR SUCHEN RUECKWAERTS 40 STELLEN, JEDOCH NICHT VOR DATENANFANG!
61 T1=TRITIM(ID-I,N) @ BERECHNE MIT DECREMENTIERENDEM ZAEHLER
62 IF(T1.NE.0) GOTO 22 @ WIR HABEN VORHERGEHENDEN SPIKE GEFUNDEN
64 XYSAM=TIMFRQ(500,0) @ MINIMALER WERT BEI SPIKE OHNE VORHERGAENGER
65 IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG
68 22 XYSAM=TIMFRQ(T1+T2,I-1) @ RECHNE INDEX IN FREQUENZ UM
69 IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG
72 23 XYSAM=0.1 @ KEINE SPIKES GEFUNDEN, ALSO NULL
73 24 NXTBIT=1 @ NAECHSTES WORT VON RECHTS AN DURCHSUCHEN
76 C MEHR ALS EIN SPIKE JE WORT GEFUNDEN
77 C DANN SETZTEN WIR NXTBIT NEGATIV UND SUCHEN VON LINKS NACH RECHTS.
78 C DAS PLOTTPROGRAMM RUFT SO LANGE XYSAM AUF BIS NXTBIT POSITIV WIRD!
80 25 T1=TRITIM(ID,NXTBIT) @ TRITIM IST AUF LINKS --> RECHTS SUCHE GESCHALTET
81 IF(T1.EQ.0) GOTO23 @ KEINE SPIKES MEHR GEFUNDEN, KANN WEITERGEHEN
82 XYSAM=TIMFRQ(T1,0) @ WANDELE BITINDEX IN FREQUENZ UM
83 IF(NXTBIT.GE.12) GOTO 24 @ WAR DIE LETZTE BITPOSITION IM WORT, ZUENDE
84 NXTBIT=ISIGN(NXTBIT,-1) @ SETZE DAS DOPPELSPIKE FLAG: NXTBIT < 0
87 1 FORMAT (' XYSAM: KANALNUMMER',
88 * I3,' GROESSER ALS ANZAHL DER KANAELE',I3)