FTN PROGRAM ITEM2(5,90),92069-16015 REV.2026 800124 C C C***************************************************************** C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED C NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR C TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. C****************************************************************** C C C SOURCE: 92069-18021 C RELOC: 92069-16015 C C C****************************************************************: C C C C ITEM: PROCESSOR C C ABSTRACT: C C THIS SEGMENT PROCESSES THE "ITEMS:" COMMAND. THE SYNTAX OF THE C ITEM DEFINITION FIELD IS AS FOLLOWS: C C ITEMS: C C ITEM NAME, [ELEMENT COUNT] ITEM TYPE [(READ LEVEL,WRITE LEVEL)] ; C C THE PROCESSING IS TERMINATED WHEN A "SETS:" IS FOUND INSTEAD OF AN ITEM C NAME. C C C INTEGER SETS(3) C INTEGER ECNT C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ JANUARY 23,1980 C C C CONSTANTS IN INTEGER C C C INTEGER AUTO,BADC,BASE,BEGIN,BLANK,BLKCD, 1 CAP,CNTRL,COLON,COMMA,CRDLM, 2 DATA,DETAIL,DOLLR,DOT, 3 ELSE,END,ENTY,EQUAL,ERR, 4 FIELD, 5 ICODE,INTGR,ITM, 6 LEVL,LPARN,LST, 7 MANU,MXCAP,MAXRC, 8 MXELE,MXENT,MXITM,MXLEV,MXSTR, 9 NAM,RSRV,ASET,AUSET,MSET,MASET,DSET,DESET,NM,NFONX,NFO, C NOLST,NORES,NOTAB, 1 OPSET, 2 PMAX, 3 ROOTR,RPARN, 4 SEMI,SET,SMAX, 5 UPPER C C C C C DATA BASE OFFSETS C C C INTEGER DBNAM,DBSCD,DBCRN,DBDSN,DBRSN,DBICT,DBITP, 1 DBSCT,DBSTP,DBSOP,DBFRP,DBLMD,DBLVL, 2 DBLVE C C C C ITEM TABLE OFFSETS C C C INTEGER ITNME,ITINF,ITTYP,ITSCT, 1 ITSNO,ITECT,ITLNG,ITMSZ,ITMST C C C DATA SET TABLE OFFSETS C C INTEGER DSNME,DSCRN,DSTYP,DSMDL,DSDRL,DSFCT,DSPCT, 1 DSITP,DSCAP,DSCCT,DSPAN,SETSZ C C C C OFFSET TO OVERHEAD RECORD C C C INTEGER OVRRC,OVRTL,OVFRL,OVDCB,OVREC C C C C ERROR MESSAGES C C INTEGER ILCTR,ILCRN,ILSEC,XBEGN,XLEV, 1 DUPIT,ITLIM,ILITP,FLDER,ILXTP, 2 ILWR,ILTRM,NAMX,DUPST,STLIM, 3 ENTYX,NOITM,BDSET,BDKEY,DUPHS, 4 NOPTH,AERR,RCLIM,CAPX,ILCAP, 5 EMPTY,MXERR,EOF,NOSEG,NOMEM, 6 DUPLV,ILNAM,ILNMR,LVDEF,ILSEP, 7 ILRD,ILRNG,SETX,IGNSC,INMX, 8 PTDUP,DBKEY,ENDX,PDEFC,SIMPT, 9 BDCNT,RTERR,GOODS,GOODR,BADS, C BADR,ABORT,OPNER,XCNTR,ILLVN, 1 SRCH2,UEND,XITM,ELERR,ROTER, 2 UNITM,IOAIN,IOAOT,UNRDL,UNWRL,IOERR,ILOPT, 3 ILLSC,MORIT,ILPTH,DEFIT, 4 ILSRT,SIMPS,UNDST C C C VARIABLES C C C INTEGER CARD,CHAR,CODE,CRDPR REAL CPACK INTEGER DSEC,DCRN INTEGER ENTL,ERROR LOGICAL NMFLG INTEGER FWAM INTEGER GGERR INTEGER ICNT,IDCB,INDX INTEGER INFPT,INFO,IGLOB,INPUT,ITMTB INTEGER KPACK INTEGER LDCB,LGLOB,LIST,LWAM INTEGER MEDIA INTEGER NPACK,NSETS INTEGER OVRHD INTEGER PTHTB INTEGER RDEF,RESNO,RFILE,RINDX INTEGER SCNT,SETTB,SINDX,SORTI,SORTS,STYPE INTEGER TYPE,PRGFLG C C C EXTERNAL REFERENCES C C INTEGER ROOTA C C CONSTANTS IN COMMON C C C COMMON/CONST/ AUTO,BADC,BASE,BEGIN,BLANK,BLKCD, 1 CAP,CNTRL,COLON,COMMA,CRDLM, 2 DATA,DETAIL,DOLLR,DOT, 3 ELSE,END,ENTY,EQUAL,ERR, 4 FIELD, 5 ICODE,INTGR,ITM, 6 LEVL,LPARN,LST, 7 MANU,MXCAP(2),MAXRC, 8 MXELE,MXENT,MXITM,MXLEV,MXSTR, 9 NAM,RSRV,ASET,AUSET,MSET,MASET,DSET,DESET,NM,NFONX(10), C NFO(10), C NOLST,NORES,NOTAB, 1 OPSET, 2 PMAX, 3 ROOTR,RPARN, 4 SEMI,SET,SMAX, 5 UPPER C C C C C DATA BASE OFFSETS C C C COMMON/DBCB/ DBNAM,DBSCD,DBCRN,DBDSN,DBRSN,DBICT,DBITP, 1 DBSCT,DBSTP,DBSOP,DBFRP,DBLMD,DBLVL, 2 DBLVE C C C C ITEM TABLE OFFSETS C C C COMMON/ITCB/ ITNME,ITINF,ITTYP,ITSCT, 1 ITSNO,ITECT,ITLNG,ITMSZ,ITMST C C C DATA SET TABLE OFFSETS C C COMMON/DSCB/ DSNME,DSCRN,DSTYP,DSMDL,DSDRL,DSFCT,DSPCT, 1 DSITP,DSCAP,DSCCT,DSPAN,SETSZ C C C C OFFSET TO OVERHEAD RECORD C C C COMMON /OVCB/OVRRC,OVRTL,OVFRL,OVDCB,OVREC C C C C ERROR MESSAGES C C COMMON/ERRM/ ILCTR,ILCRN,ILSEC,XBEGN,XLEV, 1 DUPIT,ITLIM,ILITP,FLDER,ILXTP, 2 ILWR,ILTRM,NAMX,DUPST,STLIM, 3 ENTYX,NOITM,BDSET,BDKEY,DUPHS, 4 NOPTH,AERR,RCLIM,CAPX,ILCAP, 5 EMPTY,MXERR,EOF,NOSEG,NOMEM, 6 DUPLV,ILNAM,ILNMR,LVDEF,ILSEP, 7 ILRD,ILRNG,SETX,IGNSC,INMX, 8 PTDUP,DBKEY,ENDX,PDEFC,SIMPT, 9 BDCNT,RTERR,GOODS,GOODR,BADS, C BADR,ABORT,OPNER,XCNTR,ILLVN, 1 SRCH2,UEND,XITM,ELERR,ROTER, 2 UNITM,IOAIN,IOAOT,UNRDL,UNWRL,IOERR,ILOPT, 3 ILLSC,MORIT,ILPTH,DEFIT, 4 ILSRT,SIMPS,UNDST C C C VARIABLES C C C COMMON// CARD(36),CHAR,CODE,CPACK(50),CRDPR COMMON DSEC,DCRN COMMON ENTL,ERROR COMMON NMFLG COMMON FWAM COMMON GGERR COMMON ICNT,IDCB(144),INDX COMMON INFPT,INFO(6),IGLOB(10),INPUT,ITMTB COMMON KPACK(50) COMMON LDCB(144),LGLOB,LIST,LWAM COMMON MEDIA COMMON NPACK(50),NSETS(50) COMMON OVRHD COMMON PTHTB(32) COMMON RDEF(64),RESNO,RFILE(3),RINDX COMMON SCNT,SETTB,SINDX,SORTI(255),SORTS(50),STYPE COMMON TYPE,PRGFLG C C C EXTERNAL REFERENCES C C EXTERNAL ROOTA C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ JANUARY 23,1980 C CHANGED COMMON TO ADD ILSRT,SIMPS,UNDST AND INCREASE SIZE OF PTHTB DATA SETS/2HSE,2HTS,2H2 / C C VERIFY THIS IS AN ITEM: COMMAND C IF (RESNO .NE. ITM) CALL ERXIT(XITM) C C INITIALIZE ITEM TABLE POINTER C CALL SROOT(DBITP,ITMST) ITMTB = ITMST * 2 ICNT = 0 C C GET THE ITEM NAME, TURNING OFF THE CHECK FOR RESERVED WORDS C 10 CONTINUE NMFLG = .TRUE. CALL GGLOB NMFLG = .FALSE. C C C SINCE KEYWORDS WERE NOT CHECKED, THE "SETS:" COMMAND C MUST BE MANUALLY CHECKED. C C IF (LGLOB .NE. 2) GOTO 15 IF( JSCOM(IGLOB,1,4,SETS,1) .NE. 0) GOTO 15 C C VERIFY THE COLON C CALL SGET(CARD,CRDPR,ICHK) IF(ICHK .NE. 72B) GOTO 15 C C SKIP PAST THE COLON AND SET THE RESNO TO INDICATE A "SETS:" COMMAND C WAS FOUND C CALL GGLOB RESNO = SET GOTO 50 C C ARE THERE TOO MANY ITEMS SPECIFIED ? C 15 CONTINUE IF(ICNT .GE. MXITM) GO TO 7010 C C IS THIS A VALID ITEM NAME? C IF(TYPE .NE. NAM) GOTO 7020 C C SEARCH FOR DUPLICATE ITEM NAME C CALL ISRCH(ICNT,INUM) C FOUND? IF(INUM .NE. 0) GOTO 7030 C NO, CALCULATE INDEX INTO ITEM TABLE INDX = ICNT*ITMSZ + ITMTB INDX2 = INDX C C ZERO THE CURRENT ITEM TABLE ENTRY C DO 20 I= INDX,INDX+ITMSZ,2 CALL SROOT(I,0) 20 CONTINUE C C PUT SET NAME INTO THE SET TABLES C DO 30 I =1,3 CALL SROOT(INDX2,IGLOB(I) ) INDX2 = INDX2 + 2 30 CONTINUE C C VERIFY A COMMA EXISTS C CALL GGLOB IF(TYPE .NE. COMMA) GOTO 7040 C C PROCESS THE ELEMENT COUNT C CALL ELEMT (ECNT,INDX,IERR) IF (IERR .LT. 0) GOTO 40 C C PROCESS TYPE SPECIFICATION C CALL ITMT(ECNT,INDX,IERR) IF (IERR .LT. 0) GO TO 40 C C PROCESS READ/WRITE LEVELS C CALL RDWRL(INDX,IERR) IF (IERR .LT. 0) GO TO 40 C C PUT ITEM ENTRY INTO SORT TABLE C CALL SSORT(ICNT,SORTI,ITMSZ,ITMTB) IF (IERR .LT. 0) GO TO 40 C C INCREMENT COUNTER IN PREPERATION FOR NEXT ITEM C ICNT = ICNT + 1 C C SCAN PAST THE SEMICOLON C 40 CONTINUE IF(TYPE .EQ. SEMI) GOTO 10 IF(RESNO .EQ. END) CALL ERXIT(UEND) CALL GGLOB GOTO 40 C C C PUT ITEM COUNT IN ROOT C 50 CONTINUE IF(ICNT .EQ. 0) CALL ERXIT(DEFIT) CALL SROOT(DBICT,ICNT) C C PUT ADDRESS OF SET TABLE IN ROOT C SETTB = (ICNT * ITMSZ + ITMTB) / 2 CALL SROOT(DBSTP,SETTB) C C LOAD AND EXECUTE SEGEMENT SETS C CALL SEGLD(SETS,IERR) CALL OUTLN(SETS,3) CALL ERXIT(NOSEG) C C C C ERROR PROCESSORS C C C OUTPUT "TOO MANY ITEMS" C 7010 CALL EMESS(ITLIM) C C SCAN TO THE SETS: COMMAND C 7015 CONTINUE IF(RESNO .EQ. SET) GOTO 50 CALL GGLOB GOTO 7015 C C OUTPUT "ILLEGAL NAME" C 7020 CALL EMESS(ILNAM) GOTO 40 C C OUTPUT "DUPLICATE ITEM NAME" C 7030 CALL EMESS(DUPIT) GOTO 40 C C OUTPUT "ILLEGAL SEPARATOR" C 7040 CALL EMESS(ILSEP) GO TO 40 END