SUBROUTINE TFRRU (NREC, KEYWRD) C***************************************************************************** C C Description : Routine to read a display-only/update field record and/or C its FCR (for update field records only). C This routine is reserved for TFR-subroutines only C C Arguments : NREC = INTEGER record number C KEYWRD = STRING containing a keyword: C 'VAR' - read display-only/update field record C 'FCR' - read field copy record C 'ALL' - read update field record and FCR C C Author : F.A.Minkema C AKZO PHARMA, Oss Holland C dept. SDA C C Version : V1.0 Date : 1-nov-1982 C C Module name : TFRRU.FTN C C Package : TRAMP C C Compilation/Linking : FOR/F4P/TR:NONE TFRRU C C Updates : name version C C description : C C***************************************************************************** C BYTE HOMSTR,CLRSTR,ERLSTR,NATSTR,HERPOS,ERRATT,HLPATT,FCR,SBUF,FREC COMMON/TFRCOM/NUNIT,MAXBUF,NRNXFR,LLFLD,NLFCR,IHEFLG,ISCR, 1 NRFFFR,NRLFFR,NRFDFR,NRLDFR,NRFUFR,NRLUFR, 2 HOMSTR(4),CLRSTR(4),ERLSTR(4),NATSTR(6),HERPOS(8), 3 ERRATT(8),HLPATT(8),FCR(80),SBUF(120),FREC(40) C C field copy record BYTE FCRB1(40),FCRB2(40) EQUIVALENCE (FCRB1 ,FCR(1)) ! first part of record EQUIVALENCE (FCRB2 ,FCR(41)) ! second part of record C C display-only field record BYTE DONFLD(8),DONESC(22) EQUIVALENCE (DONFLD,FREC(1)) ! field name EQUIVALENCE (LENDON,FREC(9)) ! field length EQUIVALENCE (DONESC,FREC(11)) ! attibutes escape string C C update field record BYTE UPDFLD(8),UPDESC(22) EQUIVALENCE (UPDFLD,FREC(1)) ! field name EQUIVALENCE (LENUPD,FREC(9)) ! field length EQUIVALENCE (UPDESC,FREC(11)) ! attibutes escape string EQUIVALENCE (NRFCR ,FREC(33)) ! rec.nr. of field copy rec. EQUIVALENCE (NPFCR ,FREC(35)) ! pos. of field in field copy rec. EQUIVALENCE (NRDEF ,FREC(37)) ! rec.nr. of default-value record EQUIVALENCE (NRHLP ,FREC(39)) ! rec.nr. of help record C BYTE KEYWRD(1),PROG(8) DATA PROG/'T','F','R','R','U',3*0/ C C C check keyword C IKEY=0 CALL SCVTLU(KEYWRD) IF (ISCOMP(KEYWRD,'VAR').EQ.0) IKEY=1 IF (ISCOMP(KEYWRD,'FCR').EQ.0) IKEY=2 IF (ISCOMP(KEYWRD,'ALL').EQ.0) IKEY=3 IF (IKEY.EQ.0) GOTO 9000 C C read display-only/update field record C IF ((IKEY.AND.1).EQ.1) READ (NUNIT'NREC,ERR=9010) FREC C C read field copy record C IF ((IKEY.AND.2).EQ.2 .AND. NRFCR.NE.NLFCR) 10,99,99 C THEN 10 IF (NLFCR.NE.0) 20,30,30 C THEN 20 WRITE (NUNIT'NLFCR,ERR=9020) FCRB1 ! write last field copy record(s) IF (LLFLD.GE.MAXBUF) WRITE (NUNIT'NLFCR+1,ERR=9030) FCRB2 C ENDIF 30 READ (NUNIT'NRFCR,ERR=9040) FCRB1 ! read new field copy record(s) IF (LENUPD.GE.MAXBUF) READ (NUNIT'NRFCR+1,ERR=9050) FCRB2 NLFCR=NRFCR LLFLD=LENUPD C ENDIF C C go back to calling routine C 99 RETURN C C errors C 9000 CALL FATAL(PROG,'Invalid keyword argument') 9010 CALL FATAL(PROG,'READ-error display-only/update record') 9020 CALL FATAL(PROG,'WRITE-error first field copy record') 9030 CALL FATAL(PROG,'WRITE-error second field copy record') 9040 CALL FATAL(PROG,'READ-error first field copy record') 9050 CALL FATAL(PROG,'READ-error second field copy record') END