FTN4 PROGRAM BPUT2(5,90),92069-16001 REV.1912 790115 C C C************************************************************* C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * C RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C************************************************************* C C C SOURCE: 92069-18005 C RELOC: 92069-16001 C C C************************************************************ C C*********************************************************************** C BPUT IS THE SEGMENT OF DBBLD WHICH READS THE DATA RECORDS AND C PUTS THEM IN THE DATA BASE C INTEGERS AND REALS ARE CONVERTED FROM ASCII C INTEGER RTYPE,COLED,IBLNK,BUF,BPTR INTEGER ISTAT INTEGER XTYPE,BCLOS,BINF DIMENSION ISTAT(10) DIMENSION BCLOS(3) DIMENSION BINF(3) DIMENSION BUF(2048) INTEGER SEGM(9) C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ AUGUST 10,1978 $$$ INTEGER ERROR,P,PLEN,CARD,LOG,COL INTEGER ELECT,ITEM,LENTH,TYPE INTEGER IDCB,LDCB,LIST,INPUT,PRTLM,CHECK,LST INTEGER IBASE INTEGER SETERR INTEGER TRUE,FALSE,SEMI,COMMA INTEGER L,CHAR INTEGER SETNO INTEGER QTFLAG C COMMON ERROR,P(40),PLEN,CARD(256),LOG,COL COMMON ELECT(129),ITEM(129),LENTH(129),TYPE(129) COMMON IDCB(144),LDCB(144),LIST,INPUT,PRTLM,CHECK,LST COMMON IBASE(10) COMMON SETERR COMMON L,CHAR COMMON SETNO COMMON QTFLAG COMMON/CONST/TRUE,FALSE,SEMI,COMMA C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ OCTOBER 16,1978 $$ DATA SEGM/2HSE,2HGM,2HEN,2HT ,2HNO,2HT ,2HFO,2HUN,2HD / DATA XTYPE/130B/ DATA IBLNK/2H / DATA I1,I2,I4/1,2,4/ DATA I204,I206,I207/204,206,207/ DATA ITYPE/111B/ DATA RTYPE/122B/ DATA BCLOS/2HBC,2HLO,2H2 / DATA BINF/2HBI,2HNF,2H2 / C C C C C C C C C GET NEXT CARD C IVAL=2 CALL SETD(IVAL) IF(IVAL .EQ. -1) GOTO 122 C C IF $SET: OR $END WRITE ERR NO 204 C "CARD PRESENT WHERE RECORD EXPECTED" IF (IVAL.EQ.2) GO TO 110 109 CALL ERROT(I204) GO TO 121 C INITIALIZE DBPUT BUFFER PTR 110 BPTR=1 IEFLG=0 C C C C C C C C C START LOOP TO ENTER EACH ITEM IN DBPUT BUFFER,BUF C C C C C C DO 119 I=2,ITEM(1)+1 DO 119 J = 1,ELECT(I) C CALCULATE LAST COLUMN OF ITEM COLED=COL+LENTH(I)-1 C C IF ITEM STARTS ON A NEW CARD,READ NEXT CARD AND CALCULATE C NEW ENDING COLUMN. IF ITEM>PRTLM COLS,MOVE THE WHOLE CARD C INTO DBPUT BUFFER,BUF,(AND NEXT CARD) C LEN=LENTH(I) IF (COLED.LE.PRTLM) GO TO 113 IF (BPTR .EQ. 1) GOTO 112 IVAL=2 111 CALL SETD(IVAL) IF(IVAL .EQ. -1) GOTO 122 IF (IVAL.NE.2) GO TO 109 IF (LEN.GT.PRTLM) GO TO 112 COLED=LEN GO TO 113 112 CALL SMOVE(CARD,I1,PRTLM,BUF,BPTR) BPTR=BPTR+PRTLM LEN=LEN-PRTLM GO TO 111 C C IF ITEM TYPE IS X MOVE ITEM TO BUF AND UPDATE BPTR (BUF PTR) C 113 IF (TYPE(I).NE.XTYPE) GO TO 114 CALL SMOVE(CARD,COL,COLED,BUF,BPTR) BPTR=BPTR+LEN GO TO 118 C C IF ITEM TYPE IS INTEGER,CONVERT TO INTEGER,MOVE TO BUF, C AND INCREMENT BPTR C 114 IF (TYPE(I).NE.ITYPE) GO TO 116 CALL CATI(CARD,COL,COLED-COL+1,INT,ISTAT) IF (ISTAT.GE.0) GO TO 115 C C IF ILLEGAL WRITE ERROR NO 206 C "NON-NUMERIC INTEGER IN FIELD" C CALL ERROT(I206) IF (QTFLAG.EQ. TRUE) GO TO 122 IEFLG=1 C C C 115 CONTINUE CALL SMOVE(INT,I1,I2,BUF,BPTR) BPTR=BPTR+2 GO TO 118 C C CONVERT TYPE REAL TO A REAL NUMBER,MOVE TO BUF,INCREMENT BPTR C SCREEN FIELDS THAT ARE ALL BLANK BECAUSE CATR DOESN'T HANDLE IT C 116 CONTINUE DO 1161 K = COL,COLED CALL SGET(CARD,K,ICHAR) IF(ICHAR .NE. 40B) GOTO 1162 1161 CONTINUE REAL = 0 GOTO 117 C C CONVERT REAL NUMBER C 1162 CONTINUE REAL=CATR(CARD,COL,COLED,ISTAT) IF (ISTAT.GE.0) GO TO 117 C C IF ILLEGAL REAL, WRITE ERROR NO. 207 C "NON-NUMERIC IN REAL FIELD" C CALL ERROT(I207) IF (QTFLAG.EQ. TRUE) GO TO 122 IEFLG=1 C C MOVE THE VALUE INTO THE BUFFER C 117 CALL SMOVE(REAL,I1,I4,BUF,BPTR) BPTR=BPTR+4 C C SET UP BEGINNING COLUMN OF NEXT ITEM C 118 COL=COLED+1 119 CONTINUE C C C*****IF UPDATE OR CREATE IS SPECIFIED AND THERE ARE NO ERRORS, C*****PUT RECORD IN DATA BASE C C IF (CHECK.EQ. TRUE) GO TO 120 IF (IEFLG.EQ.1) GO TO 120 CALL DBPUT(IBASE,SETNO,1,ISTAT,ITEM,BUF) C C IF ERROR IN PUTTING WRITE DBPUT ERROR NO. C IF (ISTAT.EQ.0) GO TO 120 CALL ERROT(ISTAT) IF (QTFLAG.EQ.0) GO TO 122 C C GET NEXT CARD. IF NOT $SET: OR $END GO TO ENTER NEXT RECORD C 120 IVAL=2 CALL SETD(IVAL) IF (IVAL.EQ.2) GO TO 110 C C IF $SET: GO TO PROCESS NEXT SET C 121 IF (IVAL.EQ.0) GO TO 200 C C IF $END OR AN ERROR WAS ENCOUNTERED C CALL NEXT SEGMENT TO CLOSE DATA SET C 122 CONTINUE CALL SEGLD(BCLOS,IERR) CALL OUTLN(SEGM,9) CALL OUTLN(BCLOS,3) CALL HALT C C C LOAD AND EXECUTE BINF C C C 200 CONTINUE CALL SEGLD(BINF,IERR) CALL OUTLN(SEGM,9) CALL OUTLN(BINF,3) ERROR = ERROR + 1 GOTO 122 END END$