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