C -+-+-+-+-+  H A E S A M . F T  -+-+-+-+-+ C C FETCH THE INDEX'ED DATA-WORD FROM "CHANEL" OUT OF THE SAMPLE ON "UNIT" C THE FIRST ELEMENT OF THE SAMPLE BUFFER IS REFERENCED WITH INDEX=0 C C * UP 7-OCT-82 C * UP 18-OCT-83 TWO INPUT BUFFERS C REAL FUNCTION ESAM(INDEX) INTEGER INDEX C INCLUDE HAEBUF.FI INCLUDE HAESCR.FI INCLUDE HAEHAS.FI INCLUDE HAETTY.FI C REAL WGET EXTERNAL WGET C INTEGER RECNUM,WORD,R,J * , BUFCNT @ HOLDS NUMBER OF INPUT BUFFERS FOR UNIT 7 DATA BUFCNT /2/ C IF (.NOT.HSHDON) CALL MKHASH R=MOD(INDEX+1,PCKMAX) IF (R.EQ.0) R=PCKMAX WORD=INT(INDEX/PCKMAX)*HSHSIG+HASH(CHANEL+1,R) RECNUM=(WORD-1)/255+OFFSET @ GET THE RECORD NUMBER DO 15 J=1,BUFCNT IF (RECNUM.EQ.INPREC(J)) GOTO 10 @ JUMP IF RECORD ALREADY IN BUFFER 15 CONTINUE IF (RECNUM.GT.LASREC) GOTO 20 @ END OF FILE REACHED C C J=BUFCNT-RECACT+1 @ COMPUTE NEXT INPUT BUFFER GOTO (111,112),J 111 IF (WFLAG(J).AND.INPREC(J).GE.1) WRITE (UNIT'INPREC(J)) BUFFER READ (UNIT'RECNUM) BUFFER GOTO 16 112 IF (WFLAG(J).AND.INPREC(J).GE.1) WRITE (UNIT'INPREC(J)) BUFER2 READ (UNIT'RECNUM) BUFER2 16 CONTINUE WFLAG(J)=.FALSE. INPREC(J)=RECNUM 10 CONTINUE WORD=MOD(WORD,255) IF (WORD.EQ.0) WORD=255 RECACT=J @ BUFFER SWICTH GOTO (121,122),J 121 ESAM=WGET(BUFFER,WORD) @ EXTRACT THE WORD WANTED AND CONVERT TO REAL RETURN 122 ESAM=WGET(BUFER2,WORD) RETURN 20 CONTINUE @ END OF FILE ERROR MESSAGE WRITE (TTO,1) UNIT,INDEX,RECNUM,LASREC ESAM=4711 @ MOTHERFUCKER --- GO HOME RETURN 1 FORMAT (' EINHEIT',I2,' INDEX',I7,' SATZ',I7, * ' SATZENDE',I7,' UEBERLESEN.') END