FTN 
      PROGRAM INIT2(5,90),92069-16015 REV.2026 800425 
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-18017
C     RELOC:     92069-16015
C 
C 
C****************************************************************:
C 
C 
C ABSTRACT: 
C 
C INIT GETS THE RUN STRING AND OPENS THE FILES OR LOCKS THE 
C LU'S AS REQUIRES. 
C 
C INIT THEN OUTPUTS IT'S HEADING - "IMAGE/1000 DATA DEFINITION
C UTILITY". 
C 
C INIT INITIALIZES GLOBALS, THEN DETERMINES WHETHER TO LOAD 
C THE "BEGIN DATA BASE" PROCESSOR OR THE "$CONTROL:" PROCESSOR. 
C 
C 
C 
C 
C 
      INTEGER CNTR(3),HEAD(3) 
      INTEGER PURGE(3)
      INTEGER IBUF(10)
      INTEGER SIZE(4) 
      INTEGER HD(32),HDZ
      INTEGER ROTMX 
      INTEGER LOCKED(12)
      LOGICAL IFTTY 
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
      EXTERNAL IFTTY
      DATA CNTR/2HCN,2HTR,2H2 / 
      DATA HEAD/2HHE,2HAD,2H2 / 
      DATA PURGE/2HPU,2HRG,2HE /
      DATA SIZE/0,10,0,0/ 
      DATA HD/2H  ,2H  ,2H  ,2HHE,2HWL,2HET,2HT-,2HPA,2HCK,2HAR,
     12HD ,2HIM,2HAG,2HE/,2H10,2H00,2H D,2HAT,2HA ,2HBA,
     22HSE,2H D,2HEF,2HIN,2HIT,2HIO,2HN ,2HPR,2HOC,2HES,
     32HSO,2HR /
      DATA LOCKED/2H D,2HBD,2HS ,2HWA,2HIT,2HIN,2HG ,2HON,2H L, 
     &    2HIS,2HT ,2HLU/ 
      DATA HDZ/32/
C 
C 
C 
C                INITIALIZATION 
C 
C 
C 
C 
C GET INPUT PARAMETER 
C 
      CRDPR = 1 
      CALL NAMR(IBUF,CARD,ICNT,CRDPR) 
C 
C SET INPUT LU TO ZERO AND ERROR CODE TO ZERO IN CASE 
C INPUT NAMR IS AN LU 
C 
      INPUT = -1
      IERR = 0
C 
C IS INPUT NAMR A FILE? 
C 
      IF (IAND(IBUF(4),000003B) .NE. 3) GOTO 10 
C 
C YES, OPEN THE FILE
C 
      CALL OPEN(IDCB,IERR,IBUF,0,IBUF(5),IBUF(6) )
      GO TO 20
C 
C NO, THEN INPUT IS AN LU 
C 
10    CONTINUE
      INPUT = IBUF(1) 
C 
C DEFAULT LU IF NECESSARY 
C 
      IF(INPUT .EQ. 0) INPUT = 1
      IF(INPUT .GT. 0) GOTO 12
      IERR = -1 
      GOTO 20 
C 
C LOCK THE INPUT DEVIVE WHEN NECESSARY
C 
12    CONTINUE
      IF(IFTTY(INPUT) ) GOTO 15 
      CALL LURQ(40001B,INPUT,1) 
      GOTO 13 
8000  GOTO 15 
13    IERR = -1 
C 
C SET CONTROL WORD TO ECHO COMMANDS FROM A KEYBOARD 
C 
15    CONTINUE
      INPUT = INPUT + 400B
C 
C GET THE LIST PARAMETER
C 
20    CONTINUE
      CALL NAMR(IBUF,CARD,ICNT,CRDPR) 
C 
C IS LIST A FILE? 
C 
      LIST = -1 
      IERR2 = 0 
      IF (IAND(IBUF(4),000003B) .NE. 3) GOTO 30 
C 
C YES, OPEN THE FILE
C 
      CALL OPEN (LDCB,IERR2,IBUF,0,IBUF(5),IBUF(6) )
C 
C IF NOT FOUND THEN CREATE THE LIST FILE
C 
      IF(IERR2 .NE. -6) GOTO 25 
      CALL ECREA(LDCB,IERR2,IBUF,SIZE,4,IBUF(5),IBUF(6) ) 
C 
C IF  ERROR THEN ABORT
C 
25    CONTINUE
      IF (IERR2 .LT. 0) CALL ERXIT(0) 
      GO TO 40
C 
C NO, THEN LIST IS A LU 
C 
30    CONTINUE
      LIST = IBUF(1)
C 
C DEFAULT LIST TO LU 6 IF NECESSARY 
C 
      IF (IBUF(4)  .EQ. 0) LIST = 6 
      IF(LIST .LT. 0) CALL ERXIT(0) 
C 
C LOCK THE LU 
C SKIP TO TOP OF PAGE 
C 
      IF(IFTTY(LIST) ) GOTO 35
      CALL LURQ(140001B,LIST,1) 
      GOTO 31 
8010  GOTO 32 
C 
C LU REQUEST ABORTED - TERMINATE DBDS 
C 
31    CONTINUE
      CALL ERXIT(0) 
C 
C WAIT ON LIST LU 
C 
32    CONTINUE
      CALL ABREG(IA,IB) 
      IF(IA .EQ. 0) GOTO 35 
      CALL EXEC(2,1,LOCKED,12)
C 
C WAIT ON THE LU
C 
34    CONTINUE
      CALL EXEC(12,0,2,0,-10) 
      CALL LURQ(140001B,LIST,1) 
      GOTO 31 
8020  CALL ABREG(IA,IB) 
      IF(IA .NE. 0) GOTO 34 
C 
C OUTPUT TOP OF PAGE
C 
35    CALL EXEC(100003B,1100B+LIST,-1)
      GOTO 31 
C 
C GET THE OPTIONS LIST.  IF THE OPTION IS NOT "PURGE", THEN 
C OUTPUT "ILLEGAL OPTION" AND TERMINATE.
C 
40    CONTINUE
      PRGFLG = 0
      CALL NAMR(IBUF,CARD,ICNT,CRDPR) 
      IF(IBUF(4) .EQ. 0) GOTO 50
      IF(IAND(IBUF(4),3B) .NE. 3) CALL ERXIT(ILOPT) 
      IF(JSCOM(IBUF,1,2,PURGE,1) .NE. 0) CALL ERXIT(ILOPT)
      PRGFLG = 1
C 
C OUTPUT A HEADING
C 
50    CONTINUE
      CALL OUTLN(HD,HDZ)
      CALL OUTLN(BLANK,1) 
      CALL OUTLN(BLANK,1) 
      CALL OUTLN(BLANK,1) 
C 
C CHECK FOR INPUT OPEN ERROR
C 
C SET PRINT OPTION TO PRINT ERRONEOUS LINE
C 
      NDX = NFONX(NOLST)
      INFO(NDX) = NFO(NOLST)
C 
      IF (IERR .LT. 0) CALL ERXIT(OPNER)
C 
C OPEN OK,
C 
C   INITIALIZE ERROR COUNT
C 
      ERROR = 0 
C 
      NDX = NFONX(LST)
      INFO(NDX) = NFO(LST)
C 
      NDX = NFONX(ERR)
      INFO(NDX) = NFO(ERR)
C 
C 
C GET ALL AVAILABLE MEMORY
C 
      CALL LIMEM(0,FWAM,ROTMX)
      IF (ROTMX .EQ. 0) CALL ERXIT(NOMEM) 
C 
C MAKE SURE IT IS ALL ADDRESSIBLE BY BYTES. 
C 
      IF (ROTMX .GT. 15360) ROTMX=15360 
      LWAM = FWAM + ROTMX - 1 
C 
C INITIALIZE MEMORY TO ZERO 
C 
      DO 70 I = 0,ROTMX-1 
      CALL SROOT(I,0) 
70    CONTINUE
C 
C INITIALIZE INPUT BUFFERS
C 
      CRDPR = CRDLM*2 
      CALL GCHAR
      CALL GGLOB
C 
C DECIDE WHAT SEGMENTS TO LOAD
C 
C 
C IS COMMAND $CONTROL ? 
C 
      IF (RESNO .NE. CNTRL) GOTO 80 
       CALL SEGLD(CNTR,IERR)
C 
C IF RETURN FROM SEGLD THEN ERROR 
C 
      CALL OUTLN(CNTR,2)
      CALL ERXIT(NOSEG) 
C 
C NO, SO LOAD HEAD
C 
80    CONTINUE
      CALL SEGLD(HEAD,IERR) 
C 
C IF RETURN FROM SEGLD THEN ERROR - ABORT 
C 
      CALL OUTLN(HEAD,3)
      CALL ERXIT(NOSEG) 
      END 
                                                                                                                              