| 1 | C -+-+-+-+-+ \ e H A E X Y S . F T \ e -+-+-+-+-+\r |
| 2 | C\r |
| 3 | C RETURNS A SPECIFIED WORD FROM SAMPLE BUFFER (CHANNEL 0 TO 7)\r |
| 4 | C RETURNS THE INDEX ID (CHANNEL 8)\r |
| 5 | C\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 |
| 22 | C STATEMENT FUNCTIONS ARE:\r |
| 23 | INTEGER TIMFRQ\r |
| 24 | TIMFRQ(IP1,IP2)=500/(IP1+12*IP2) @ 1 IST MINIMUM FUER EINZEL SPIKE\r |
| 25 | C\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 |
| 32 | 10 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 |
| 38 | C\r |
| 39 | C HERE WE HANDLE THE TRIGGER EVENTS: WE SUMM UP ALL BITS IN ONE TIME WORD!\r |
| 40 | C\r |
| 41 | 20 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 |
| 48 | C\r |
| 49 | C\r |
| 50 | IF (T.EQ.0) GOTO 23 @ KEINE SPIKES\r |
| 51 | IF (NXTBIT.LT.0) GOTO 25 @ MEHR ALS EIN SPIKE\r |
| 52 | C\r |
| 53 | NXTBIT=-1\r |
| 54 | T2=TRITIM(ID,NXTBIT) @ LI --> RE SUCHE LIEFERT BITPOSITION IM AKTUELLEN WORT\r |
| 55 | C\r |
| 56 | C RUECKWAERTS SUCHE BIS ZU 300 MILLI SEC BEI 128 HZ MESSRATE\r |
| 57 | C\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 |
| 63 | 21 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 |
| 67 | C\r |
| 68 | 22 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 |
| 71 | C\r |
| 72 | 23 XYSAM=0.1 @ KEINE SPIKES GEFUNDEN, ALSO NULL\r |
| 73 | 24 NXTBIT=1 @ NAECHSTES WORT VON RECHTS AN DURCHSUCHEN\r |
| 74 | RETURN\r |
| 75 | C\r |
| 76 | C MEHR ALS EIN SPIKE JE WORT GEFUNDEN\r |
| 77 | C DANN SETZTEN WIR NXTBIT NEGATIV UND SUCHEN VON LINKS NACH RECHTS.\r |
| 78 | C DAS PLOTTPROGRAMM RUFT SO LANGE XYSAM AUF BIS NXTBIT POSITIV WIRD!\r |
| 79 | C\r |
| 80 | 25 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 |
| 86 | C\r |
| 87 | 1 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 |