FTN 
      PROGRAM CNTR2(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-18018
C     RELOC:     92069-16015
C 
C 
C****************************************************************:
C 
C 
C 
C 
C                $CONTROL PROCESSOR 
C 
C ABSTRACT: 
C 
C  THIS MODULE PROCESSES THE "$CONTROL:" COMMAND. 
C  WHEN A "$CONTROL:" COMMAND IS USED, IT MUST BE THE FIRST RECORD
C  IN THE SCHEMA COMMAND FILE.
C 
C  CNTR PARSES EACH PARAMETER AND SETS THE APPROPRIATE TOGGLE 
C  ON/OFF IN THE ARRAY "INFO".  IF AN ERROR IS ENCOUNTERED AFTER
C  THE "$CONTROL:" COMMAND, AN ERROR IS ISSUED AND THAT CONTROL 
C  OPTION IS SKIPPED.  PROCESSING FOR CONTROL OPTIONS CONTINUES 
C  UNTIL A "        " IS ENCOUNTERED. 
C 
C  EACH CONTROL OPTION IS ASSIGNED A "RESNO" BY THE MODULE GGLOB. 
C  THIS RESNO IS USED TO INDEX INTO AN ARRAY CALL "NFO" WHICH 
C  CONTAINS THE TOGGLE VALUE FOR THAT PARTICULAR PAAMETER.  THE 
C  RESNO IS ALSO USED TO INDEX INTO AN ARRAY CALLED "NFONX" WHICH 
C  CONTAINS THE INDEX VALUE INTO "INFO" FOR THAT PARTICULAR 
C  PARAMETER.  "INFO" IS THE TOGGLE ARRAY ACCESSED BY OTHER 
C  SUBROUTINES.  ( FOR MORE DETAILED DESCRIPTIONS OF RESNO'S
C  SEE THE MODULE GGLOB.) 
C 
C  NOTE: TYPE, RESNO AND IGLOB ARE RETURNED BY GGLOB WHO
C    CALLS GGLOB, WHO CALLS GCHAR, WHO CALLS GCARD. 
C 
C        TYPE IS THE TYPE OF VALUE IN IGLOB 
C        RESNO IS THE COMMAND WORD NUMBER 
C        IGLOB IS THE VALUE ITSELF
C 
C          (SEE GGLOB FOR MORE DETAIL)
C 
C 
C  NOTE: CODE, AND CHAR ARE RETURNED FROM GCHAR 
C 
C        CODE IS THE TYPE OF CHARACTER
C        CHAR IS THE LAST CHARACTER EXAMINED
C           (CHAR IS NOT DUPLICATED IN IGLOB, BUT IS THE
C             NEXT CHARACTER TO BE PROCESSED) 
C 
C           (SEE GCHAR FOR MORE DETAIL) 
C 
C 
C 
C  COMMAND FORAMT:
C 
C      $CONTROL: [OPTIONS LIST] 
C 
C      WHERE: 
C 
C      OPTIONS LIST 
C      IS A LIST OF OPTIONS SEPARATED BY COMMAS 
C 
C          ROOT -  REQUESTS THE ROOT FILE TO BE CREATED 
C          NOROOT- REQUESTS THE ROOT FILE NOT TO BE CREATED.
C 
C             WHEN NEITHER OPTIONS IS GIVEN ROOT IS ASSUMED.
C             WHEN NOROOT IS GIVEN NO DATA SETS ARE CREATED.
C 
C          SET - REQUESTS DATA SETS TO BE CREATED 
C          NOSET - REQUEST NO DATA SETS TO BE CREATED.
C 
C             WHEN NEITHER OPTIONS IS GIVEN SET IS ASSUMED
C             WHEN NOROOT IS GIVEN, THE SET OPTION IS IGNORED.
C 
C          LIST -  REQUESTS A LISTING OF THE SCHEMA AS IT IS PROCESSED. 
C          NOLIST -  REQUESTS THE SCHEMA LISTING TO BE SUPPRESSED,
C             ONLY RECORDS IN ERROR ARE LISTED. 
C 
C             WHEN NEITHER OPTIONS IS GIVEN LIST IS ASSUMED.
C 
C 
C          TABLE - REQUESTS A TABLE DESCRIBING THE DATA SETS
C             TO BE PRINTED.
C          NOTABLE -  REQUESTS THE TABLE TO BE SUPPRESSED.
C 
C             WHEN NEITHER OPTIONS IS GIVEN NOTABLE IS ASSUMED. 
C 
C 
C          FIELD - REQUESTS A TABLE DESCRIBING EACH SET'S ITEM'S
C             OFFSETS INTO THE DATA RECORD. WHEN THIS OPTION
C             IS NOT INCLUDED NO TABLE IS PRINTED.
C 
C          ERRORS = N - REQUESTS ERROR PROCESSING TO TERMINATE
C             ON THE NTH ERROR.  N MUST BE BETWEEN 1 AND 999. 
C             WHEN THIS OPTION IS NOT INCLUDED N IS SET TO 100. 
C 
C 
C 
C 
C 
C 
C 
C 
      INTEGER HEAD(3) 
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 HEAD/2HHE,2HAD,2H2 / 
C 
C 
C 
C VERIFY THAT THIS IS A "$CONTROL" COMMAND
C   IF IT IS NOT OUTPUT "$CONTROL EXPECTED" 
C 
      IF (RESNO .NE. CNTRL) CALL ERXIT(XCNTR) 
C 
C GOOD, PROCESS CONTROL OPTIONS 
C 
      CALL GGLOB
C 
C WHILE NOT(SEMICOLN OR BEGIN DATA BASE ) 
C 
10    CONTINUE
      IF (TYPE .EQ. SEMI) GOTO 50 
      IF (RESNO .EQ. BEGIN) GOTO 60 
C 
C VERIFY OPTION IS LEGAL
C 
      IF ((RESNO .LT. LST) .OR. (RESNO .GT. FIELD)) GOTO 7010 
C 
C HANDLE "ERROR = N" OPTION SPECIALLY 
C 
      IF (RESNO .NE. ERR) GOTO 20 
      CALL GGLOB
      IF (TYPE .NE. EQUAL) GOTO 7010
      CALL GGLOB
      IF ((TYPE .NE. INTGR) .OR. (IGLOB .GT. 999)) GOTO 7010
C 
C PUT ERROR COUNT IN INFO 
C 
      NDX = NFONX(ERR)
      INFO(NDX) = IGLOB 
      GO TO 30
C 
C GET INDEX INTO INFO FROM NFONX
C 
20    CONTINUE
      NDX = NFONX(RESNO)
C 
C GET CORRECT FLAG FROM NFO AND PUT IT INTO INFO
C 
      INFO(NDX) = NFO(RESNO)
C 
C VERIFY THE COMMA  OR SEMICOLON
C IF NOT THEN OUTPUT "ILLEGAL SEPARATOR"
C 
30    CONTINUE
      CALL GGLOB
      IF((TYPE .NE. COMMA) .AND. (TYPE .NE. SEMI) ) CALL EMESS(ILSEP) 
C 
C SKIP PAST THE COMMA, OR UPTO A SEMICOLN 
C  AND RETURN TO TOP OF WHILE LOOP
C 
40    CONTINUE
      CALL SCAN(COMMA)
      GOTO 10 
C 
C SCAN PAST THE SEMICOLON 
C 
50    CONTINUE
      CALL SCAN(SEMI) 
C 
C LOAD AND EXECUTE HEAD 
C 
60    CONTINUE
      CALL SEGLD(HEAD,IERR) 
C 
C IF SEGLD RETURNS THEN ERROR 
C 
      CALL OUTLN(HEAD,2)
      CALL ERXIT(NOSEG) 
C 
C 
C 
C ERROR HANDLERS
C 
C 
C 
C OUTPUT "ILLEGAL CONTROL OPTION" 
C 
7010  CALL EMESS(ILCTR) 
      GOTO 40 
      END 
                                          