CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE FIND(FNDTYP,RECORD,LENGTH) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INCLUDE 'SY:ENTRY.CMN' BYTE RECORD(LENGTH), RCHAR, FCHAR C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CALL DSASTR C IF (DIREC.EQ.FORWD) THEN IF (POSREC.GE.LSTREC-1) THEN CALL SCRWRT(NOCLE,NOCUP) CALL MESSGE(13,YES,NOSCR,CUPNM) RETURN ELSE FINISH = LSTREC-1 END IF ELSE IF (DIREC.EQ.BACKWD) THEN IF (POSREC.EQ.1) THEN CALL SCRWRT(NOCLE,NOCUP) CALL MESSGE(12,YES,NOSCR,CUPNM) RETURN ELSE FINISH = 1 END IF END IF START = POSREC+DIREC FNDFLG = NO C IF (FNDTYP.EQ.FIRST) THEN CCC READ THE SCREEN TYPED IN FOR THE SEARCH CCC STORE THE UPPERCASE CHARACTER AND COLUMN POSITION: NUMFND = 0 DO 10 CT = 1,RECLEN IF (BUFFER(CT).EQ.BLANK) GOTO 10 NUMFND = NUMFND+1 FCHAR = BUFFER(CT) IF (FCHAR.GE."141) FCHAR = FCHAR-"040 FNDCHR(NUMFND) = FCHAR FNDCOL(NUMFND) = CT IF (NUMFND.EQ.24) GOTO 20 10 CONTINUE END IF C IF (NUMFND.EQ.0) THEN DO 12 CT = 1,RECLEN BUFFER(CT) = SAVBUF(CT) 12 CONTINUE CALL SCRWRT(NOCLE,NOCUP) CALL MESSGE(19,YES,NOSCR,CUPTOP) RETURN END IF C CCC SEARCH FOR THE RECORD 20 CALL UVT100(CUP,24,40) CALL UVT100(EL,0) CALL UVT100(SCA,0) CALL UVT100(SCA,1) CALL UVT100(SCA,5) CALL UVT100(CUP,24,71) WRITE(4,25) 25 FORMAT('SEARCHING') CALL UVT100(SCA,0) CALL UVT100(CUP,24,1) CALL ENASTR SAVTYP = RECTYP DO 40 N = START, FINISH, DIREC CCC READ ALL RECORDS UNTIL FOUND, END OF FILE, OR CNTRLC IF (FLAG.EQ.6) GOTO 45 FNDLOC = N READ(1, REC=N, END=45) RECORD, RECTYP IF (RECTYP.EQ.DELETD) GOTO 40 DO 30 CT = 1,NUMFND FCHAR = FNDCHR(CT) RCHAR = RECORD(FNDCOL(CT)) IF (RCHAR.NE.FCHAR .AND. RCHAR.NE.FCHAR+"040) GOTO 40 30 CONTINUE GOTO 60 40 CONTINUE C CCC RECORD NOT LOCATED: 45 CALL DSASTR RECTYP = SAVTYP DO 50 CT = 1,RECLEN BUFFER(CT) = SAVBUF(CT) 50 CONTINUE IF (FNDTYP.EQ.FIRST) THEN CALL SCRWRT(NOCLE,NOCUP) CALL MESSGE(6,YES,NOSCR,CUPTOP) ELSE CALL MESSGE(6,YES,NOSCR,CUPTOP) END IF RETURN C CCC RECORD LOCATED, WRITE OUT NEW SCREEN: 60 CALL DSASTR DO 70 CT = 1,RECLEN BUFFER(CT) = RECORD(CT) SAVBUF(CT) = BUFFER(CT) 70 CONTINUE POSREC = FNDLOC CALL UVT100(CUP,24,40) CALL UVT100(EL,0) CALL UVT100(CUP,24,6) WRITE(4,15) POSREC CALL SCRWRT(NOCLE,CUPTOP) RETURN C 15 FORMAT(I4) C END