FTN4,L
C 
C     NAME: MERGE 
C     SOURCE: 92067-18334 
C     RELOC:  92067-16334 
C     PGMR:   R.D.
C 
C  ***************************************************************
C  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS     *
C  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
C  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
C  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
C  ***************************************************************
C 
C 
C 
      PROGRAM MERGE (3,90),92067-16334 REV.2013 791206
C 
C 
      LOGICAL NAMR,IN 
      DIMENSION INAMT(2),MERG(5)
      DIMENSION INBF(40),IDCB2(144),LBUF(144) 
      DIMENSION INFO1(12),INFO2(10) 
      DIMENSION NAM2(3),INAME(3)
      DIMENSION INAM3(10),INAM4(10),INAM5(10) 
      DIMENSION IMG10(5),IONE(6),MERR(5)
      COMMON/MERG1/ IQUIT,ILU(3),IDCB(272),INAM2(10),ITEMP,INAM1(10)
      COMMON/MERG2/ ISIZE(2),IRB,IOFF,JSEC,IDCB1(144),RECNT 
C 
      EQUIVALENCE (NAM2,INAM2)
      EQUIVALENCE (ICRF,INAM1(6)),(ISECF,INAM1(5))
      EQUIVALENCE (ISECU,INAM2(5)),(ICR,INAM2(6)) 
C 
      DATA INFO1/2HEN,2HTE,2HR ,2HDE,2HST,2HIN,2HAT,2HIO, 
     &           2HN ,2HNA,2HMR,20137B/ 
      DATA INFO2/2HEN,2HTE,2HR ,2HCO,2HMM,2HAN,2HD ,2HNA,2HMR,20137B/ 
      DATA IONE/6412B,2HME,2HRG,2HE ,2HST,2HOP/ 
      DATA IMG10/6412B,2HME,2HRG,2H 0,2H01/ 
      DATA MERR/6412B,2HFM,2HGR,2H- ,2H  /
      DATA MERG/6412B,2HME,2HRG,2H 0,2H02/
C 
C 
C 
C 
C 
C 
C     GET THE COMMAND STRING (RU,MERGE,NAMR1,NAMR2) 
C 
      CALL EXEC(14,1,INBF,-80)
      CALL ABREG(IA,IB) 
C 
C 
      IS=1
      ILU=LOGLU(ISES)+400B
C 
      IQUIT=0 
      NOTRUN=0
      ITEMP=0 
C 
C     SET RECORD COUNT TO ZERO
C     CLEAR OUT BUFFERS 
C 
      RECNT=0 
      DO 23 I=1,10
23    INAM2(I)=0
      INAM1(I)=0
      CONTINUE
C     PICK UP "RU" AND "MERGE"
      IF(NAMR(INAM1,INBF,IB,IS))10,10 
10    IF(NAMR(INAM1,INBF,IB,IS))20,20 
C 
C     PARSE THE FIRST AND SECOND PARAMETERS 
C     IF THEY EXIST 
C 
20    IF(NAMR(INAM1,INBF,IB,IS))35,30 
30    IF(NAMR(INAM2,INBF,IB,IS))222,999 
C 
C     IF THE FIRST PARM. DOESN'T EXIST CHECK FOR SECOND 
C 
35    IF(NAMR(INAM2,INBF,IB,IS))100,999 
C 
C     IF THE SECOND PARAMETER EXISTS AND THE FIRST DOES NOT THEN
C     GO INTO INTERACIVE MODE 
C 
C 
C     CHECK FOR PASSING OF AN LU I.E. IS PARAMETER > TWO ASCII BLANKS 
999   IF(INAM1.GT.2H  )GO TO 98 
C 
C     IF FIRST PARAMETER WASN'T SPECIFIED THEN DEFAULT TO TERMINAL
C 
      IF(INAM1.NE.0)GO TO 993 
      INAM1=LOGLU(ISES)+400B
      GO TO 955 
C 
C     CHECK FOR VALIDITY OF LU PASSED IN (NAMR1)
C 
993   IF((INAM1.LT.64).AND.(INAM1.GT.0))GO TO 954 
      GO TO 106 
C 
C     PREPARE FOR EXTENDED EXEC CALL
C 
954   INAM1=INAM1+400B
955   CALL EXEC(13+100000B,INAM1,ISTAT) 
      GO TO 106 
958   ICHEK=IAND(ISTAT,37400B)/256
C 
C     CAN'T BE A DISC LU
C 
      IF((ICHEK.LE.27B).OR.(ICHEK.GE.34B))GO TO 995 
      GO TO 106 
C 
C     CHECK WHETHER OR NOT FIRST PARM IS INTERACTIVE DEVIEC 
C 
995   INT=IFTTY(INAM1)
      IF(INT.EQ.-1)GO TO 190
C 
C     IF NOT INTERACTIVE THEN GO OPEN ANSWER FILE 
C 
98    CALL OPIN 
      GO TO 194 
C 
C 
C     METHOD I IS REQUESTED 
C     SET USER'S TERMINAL AS INTERACTIVE DEVICE 
C 
100   ILU=LOGLU(ISES)+400B
C 
C     PROMPT FOR INFORMATION (FILENAMES ETC.) 
C 
C     ENTER DESTINATION NAMR
C 
      CALL REIO(2,ILU,INFO1,12) 
102   CALL REIO(1,ILU,INBF,-80) 
      CALL ABREG(IA,IB) 
      IF(INBF.EQ.2H/E)GO TO 200 
      IS=1
      IF(NAMR(INAM2,INBF,IB,IS))222,103 
C 
C     USER MUST SUPPLY DESTINATION PARAMETER
C 
103   IF(INAM2.EQ.0)GO TO 222 
C 
C     ENTER COMMAND NAMR
C 
      CALL REIO(2,ILU,INFO2,10) 
      CALL REIO(1,ILU,INBF,-80) 
      CALL ABREG(IA,IB) 
      IF(INBF.EQ.2H/E)GO TO 200 
      IS=1
      IF(NAMR(INAM1,INBF,IB,IS))222,888 
6     ILU=LOGLU(ISES)+400B
C 
C     USER MUST SUPPLY COMMAND INPUT PARAMETER
C 
888   IF (INAM1.EQ.0)GO TO 222
C 
C     CHECK TO SEE IF NAMR1 IS A LOGICAL UNIT 
C 
      IF(INAM1.GT.2H  )GO TO 887
C 
C     IF IT'S AN LU THEN CHECK LEGALITY 
C 
      IF((INAM1.LT.64).AND.(INAM1.GT.0))GO TO 885 
C 
C     IF NOT THEN RETURN ERROR OF ILLEGAL LU
C 
      GO TO 106 
C 
C     PREPARE FOR EXTENED EXEC CALL 
C 
885   CALL EXEC(13+100000B,INAM1,ISTAT) 
      GO TO 106 
886   ICHEK=IAND(ISTAT,37400B)/256
      IF((ICHEK.LE.27B).OR.(ICHEK.GE.34B))GO TO 883 
      GO TO 106 
C 
C     CHECK NAMR1 FOR INTERACTIVE DEVICE
C 
883   INT=IFTTY(INAM1)
      IF(INT.NE.-1)GO TO 887
      INAM1=INAM1+400B
      GO TO 190 
C 
C     IF NOT INTERACTIVE THEN GO OPEN ANSWER FILE 
C 
887   CALL OPIN 
      GO TO 194 
C 
C     ON RETURN FROM OPEN GO CLOSE FILES
C 
C 
106   CALL EXEC(2,ILU,MERG,5) 
      CALL PTERR(MERG(2),IERR)
      GO TO 200 
C 
222   CALL EXEC(2,ILU,IMG10,6)
      CALL PTERR(IMG10(2),IERR) 
      GO TO 200 
444   IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
C 
C     PUT ERROR CODE IN SESSION CONTROL BLOCK 
C 
      CALL PTERR(MERR(2),IERR)
      GO TO 200 
190   ILU=INAM1 
C 
C     INPUT WILL BE SUPPLIED INTERACTIVELY CALL OPIN1 
C 
      CALL OPIN1
C 
C     IF SIZE IS -1 THEN DO A CLOSE WITH TRUNCATE 
C     OTHERWISE DONT'T TRUNCATE DESTINATION FILE
C 
194   IF(ISIZE.NE.-1)GO TO 195
      CALL LOCF(IDCB,IERR,I,IRB,I,JSEC) 
      ITRUN=JSEC/2-IRB-1
C 
C     WRITE END OF FILE 
C 
195   CALL WRITF(IDCB,IERR,IXX,-1)
      CALL CLOSE(IDCB,IERR,ITRUN) 
      CALL CLOSE(IDCB1,IERR)
      CALL CLOSE(IDCB2,IERR)
200   ITEMP=0 
C 
C     PRINT MERGE STOP
C 
      CALL EXEC(2,ILU,IONE,6) 
      GO TO 90
90    END 
C 
C 
      BLOCK DATA GLOBL
      COMMON/MERG1/ IQUIT,ILU(3),IDCB(272),INAM2(10),ITEMP,INAM1(10)
      COMMON/MERG2/ ISIZE(2),IRB,IOFF,JSEC,IDCB1(144),RECNT 
      END 
C 
C 
C     THE OPIN SUBROUTINE OPENS THE COMMAND FILE SUPPLIED BY THE USER.
C     IT THEN READS A FILE NAME, OPEN THAT FILE AND CALLS APPND TO READ 
C     FROM THAT FILE AND WRITE INTO THE DESTINATION NAMR. 
C     AFTER NO MORE FILES NAMES ARE READ CONTROL IS RETURN TO THE MAIN. 
C 
C 
      SUBROUTINE OPIN 
      LOGICAL NAMR
      DIMENSION INAMT(2),MERG(5)
      DIMENSION MERR(5) 
      DIMENSION INAM5(10),INBF(40),IDCB2(144) 
      COMMON/MERG1/ IQUIT,ILU(3),IDCB(272),INAM2(10),ITEMP,INAM1(10)
      COMMON/MERG2/ ISIZE(2),IRB,IOFF,JSEC,IDCB1(144),RECNT 
      EQUIVALENCE (ISECE,INAM5(5)),(ICRE,INAM5(6)),(ICRF,INAM1(6))
      EQUIVALENCE (ISECU,INAM2(5)),(ICR,INAM2(6)),(ISECF,INAM1(5))
      DATA MERR/6412B,2HFM,2HGR,2H- ,2H  /
      DATA MERG/6412B,2HME,2HRG,2H 0,2H02/
30    ITMP=0
C 
C     CHECK TO SEE IF NAMR2 IS AN LU
C 
      IF(INAM2.GT.2H  )GO TO 38 
      CALL EXEC(13+100000B,INAM2,ISTAT) 
      GO TO 106 
34    ICHEK=IAND(ISTAT,37400B)/256
C 
C     NAMR2 CAN'T BE A DISC DEVICE
C 
      IF((ICHEK.LE.27B).OR.(ICHEK.GE.34B))GO TO 38
      IQUIT=-1
      GO TO 106 
C 
C     OPEN UP NAMR1 
C 
38    CALL OPENF(IDCB1,IERR,INAM1,IOP,ISECF,ICRF) 
      IF(IERR.GE.0)GO TO 40 
C 
C     RETURN ERROR IF IT EXISTS 
C 
      IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      ITEMP=1 
      IQUIT=-1
      GO TO 70
C 
C     BEFORE READING FILE NAME CHECK BREAK FLAG STATUS
C 
40    IF(IFBRK(IDMY))70,50
C 
C     KEEP COUNT OF FILE NAMES READ 
C 
50    ITMP=ITMP+1 
C 
C     NOW READ IN FILE NAME 
C 
53    CALL READF(IDCB1,IERR,INBF,40,LEN)
      IF(LEN.GE.0)GO TO 55
C 
C     IF NO MORE FILE NAMES THEN CLOSE COMMAND FILE 
C 
      CALL CLOSE(IDCB1,IERR)
      GO TO 70
55    IF(IERR.NE.0)GO TO 62 
      IS=1
      IB=2*LEN
C 
C     PARSE FILE NAME 
C 
      IF(NAMR(INAM5,INBF,IB,IS))70,65 
C 
C     CHECK TO SEE IF PARAMETER IS NULL 
C 
65    IF((INAM5.EQ.0).AND.(INAM5(4).EQ.0))GO TO 53
C 
C     REMEMBER CURRENT POSITION IN DESTINATION FILE 
C 
      CALL LOCF(IDCB,IERR,RECNT,IRB,IOFF,JSEC)
C 
C     WRITE OUT FILENAME TO TERMINAL
C 
      CALL EXEC(2,ILU,INBF,LEN) 
C 
C     OPEN FILE TO BE CONCATENATED
C 
      CALL OPENF(IDCB2,IERR,INAM5,IOP,ISECE,ICRE) 
      IF(IERR.GE.0)GO TO 64 
62    IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),JERR)
C 
C     IF FILE CAN'T BE FOUND THEN REPORT
C     ERROR AND READ ANOTHER NAME.
C 
      IF(IERR.NE.6)GO TO 70 
      ITMP=ITMP-1 
      GO TO 40
64    RECNT=0 
      IF(ITMP.EQ.1)GO TO 66 
      CALL WRITF(IDCB,IERR,ILBUF,0) 
C 
      GO TO 68
66    IF(INAM2.GT.2H  )GO TO 995
C 
C     IF NAMR2 IS A FILE NAME THEN TRY TO CREATE FILE 
C     IF CREATION NOT POSSIBLE (FMGR-002) THEN OPEN FILE
C     OTHERWISE NAMR2 IS AN LU, CALL OPENF TO OPEN LU 
C 
234   CALL OPENF(IDCB,IERR,INAM2,0,0,0) 
      IF(IERR.GE.0)GO TO 68 
      CALL CLOSE(IDCB1,IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      GO TO 68
C 
C     PREPARE TO CREATE DESTINATION FILE
C     TYPE IS DEFAULTED TO TYPE OF FIRST FILE IN COMMAND FILE 
C     SIZE IS DEFAULTED TO -1 
C     IF FILE ALREADY EXISTS THEN OPEN IT 
C 
995   ITYPE=IERR
      IF(INAM2(7).NE.0)ITYPE=INAM2(7) 
      ISIZE=-1
      IF(INAM2(8).NE.0)ISIZE=INAM2(8) 
      IF(INAM2(8).NE.-1)NOTRUN=1
      CALL CREAT(IDCB,IERR,INAM2,ISIZE,ITYPE,ISECU,ICR,256) 
C 
C     IF FILE ALREADY EXISTS THEN OPEN IT 
C 
      IF(IERR.EQ.-2)GO TO 999 
      IF(IERR.GE.0)GO TO 68 
      JERR=IERR 
      CALL CLOSE(IDCB1,IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      IERR=JERR 
      GO TO 62
C 
C     FILE ALREADY EXISTS OPEN IT 
C 
999   CALL OPENF(IDCB,IERR,INAM2,IOP,ISECU,ICR) 
      IF(IERR.GE.0)GO TO 68 
      CALL CLOSE(IDCB1,IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      GO TO 62
C 
C     DESTINATION NAMR IS SET UP CALL APPND TO
C     READ FROM SOURCE FILE AND WRITE INTO DESTINATION FILE 
C 
68    CALL APPND(IDCB2,ITYPE) 
C 
C     IF NO ERROR IN APPND THEN TRY TO READ ANOTHER FILE NAME 
C 
      IF(IQUIT.EQ.-1)GO TO 70 
      GO TO 40
C 
106   CALL EXEC(2,ILU,MERG,5) 
      CALL PTERR(MERG(2),IERR)
C 
70    RETURN
      END 
C 
C     THE OPIN1 SUBROUTINE IS THE INTERACTIVE HANDLER OF
C     LIBRARIAN.  IT PROMPTS THE USER WITH THE
C     "ENTER NAMR" COMMAND. 
C     IT OPENS THE SOURCE FILE AND CREATES OR OPENS THE 
C     DESTINATION NAMR.  WHEN NO MORE FILES ARE SUPPLIED
C     (ENTERING /E) THEN CONTROL IS RETURNED TO THE MAIN. 
C 
C 
      SUBROUTINE OPIN1
      LOGICAL NAMR
      DIMENSION MERR(5),INAMT(2),MERG(5)
      DIMENSION IDCB2(144),INBF(40),INFO4(7)
      COMMON/MERG1/ IQUIT,ILU(3),IDCB(272),INAM2(10),ITEMP,INAM1(10)
      COMMON/MERG2/ ISIZE(2),IRB,IOFF,JSEC,IDCB1(144),RECNT 
      EQUIVALENCE (ICRF,INAM1(6)),(ISECF,INAM1(5))
      EQUIVALENCE (ICR,INAM2(6)),(ISECU,INAM2(5)) 
      DATA INFO4/2HEN,2HTE,2HR ,2HNA,2HMR,2H  ,20137B/
      DATA MERR/6412B,2HFM,2HGR,2H- ,2H  /
      DATA MERG/6412B,2HME,2HRG,2H 0,2H01/
C     OPEN FILE TO BE TRANSFERRED 
      ITMP=0
      GO TO 7 
C 
C     ON THE FIRST TIME INTO THIS SUBROUTINE GO PROMPT FOR
C     SOURCE NAMR 
C 
5     ITMP=ITMP+1 
      IF((INAM1.EQ.0).AND.(INAM1(4).EQ.0))GO TO 690 
      CALL OPENF(IDCB2,IERR,INAM1,IOP,ISECF,ICRF) 
C 
C     OTHERWISE OPEN NAMR1
C 
      IF(IERR.GE.0)GO TO 6
444   IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),JERR)
C 
C     IF FILE CAN'T BE FOUND THEN REPORT
C     ERROR AND GET ANOTHER FILE NAME 
C 
      IF(IERR.NE.6)GO TO 8
      ITMP=ITMP-1 
      GO TO 690 
434   IQUIT=-1
      GO TO 8 
C 
C     KEEP COUNT OF NUMBER OF FILES OPENED
C 
6     ITYPE=IERR
      CALL LOCF(IDCB,IERR,RECNT,IRB,IOFF,JSEC)
      IF(ITMP.NE.1)GO TO 600
C 
C     CHECK TO SEE IF NAMR2 IS AN LU
C 
      IF(INAM2.GT.2H  )GO TO 995
C 
C     CHECK LU AGAINST DISC DRIVER
C 
C     CHECK LU AGAINST DISC DRIVER
      CALL EXEC(13+100000B,INAM2,ISTAT) 
      GO TO 106 
233   ICHEK=IAND(ISTAT,37400B)/256
C 
C     LU CAN`T HAVE DRIVERS 30,31,32,33 
C 
      IF((ICHEK.LE.27B).OR.(ICHEK.GE.34B))GO TO 234 
      GO TO 106 
C 
C     IT IS AN LU OPEN IT 
C 
234   CALL OPENF(IDCB,IERR,INAM2,0,0,0) 
      IF(IERR.GE.0)GO TO 610
      IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      GO TO 8 
C 
C     NAMR2 IS A FILE NAME. TRY TO CREATE IT
C     DEFAULT TYPE TO TYPE OF FIRST SOURCE FILE 
C     DEFAULT SIZE TO -1
C 
995   IF(INAM2(7).NE.0)ITYPE=INAM2(7) 
      ISIZE=-1
      IF(INAM2(8).NE.0)ISIZE=INAM2(8) 
      IF(INAM2(8).NE.-1)NOTRUN=1
      CALL CREAT(IDCB,IERR,INAM2,ISIZE,ITYPE,ISECU,ICR,256) 
C 
C     IF FILE ALREADY EXISTS THEN OPEN IT 
C 
      IF(IERR.EQ.-2)GO TO 99
      IF(IERR.GE.0)GO TO 610
      IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      GO TO 8 
C 
C     FILE ALREADY EXISTS SO OPEN IT
C 
99    CALL OPENF(IDCB,IERR,INAM2,IOP,ISECU,ICR) 
      IF(IERR.GE.O)GO TO 610
      IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      CALL CLOSE(IDCB2,IERR)
      IQUIT=-1
      GO TO 8 
C 
C     WRITE ZERO LENGTH RECORD IN BETWEEN FILES 
C 
600   CALL WRITF(IDCB,IERR,ILBUF,0) 
C 
C     CALL APPND TO CONCATENATE FILES INTO THE DESTINATION NAMR 
C 
610   CALL APPND(IDCB2,ITYPE) 
      IF(IQUIT.EQ.-1)GO TO 8
C 
C     CLEAR OUT BUFFER
C 
690   DO 700 I=1,10 
700   INAM1(I)=2H 
      CONTINUE
7     CALL REIO(2,ILU,INFO4,7)
      CALL REIO(1,ILU,INBF,-80) 
      CALL ABREG(IA,IB) 
      IF(INBF.EQ.2H/E)GO TO 8 
      IS=1
C 
C     IF ANOTHER FILE NAME IS SUPPLIED THEN GO OPEN FILE
C     OTHERWISE QUIT
C 
      IF(NAMR(INAM1,INBF,IB,IS))8,5 
C 
106   CALL EXEC(2,ILU,MERG,5) 
      CALL PTERR(MERG(2),IERR)
C 
8     RETURN
      END 
C 
C     THE APPND SUBROUTINE READS FROM THE SOURCE NAMR 
C     AND WRITES INTO THE DESTINATION NMAR. 
C 
C 
      SUBROUTINE APPND(IDCB2,ITYPE) 
      DIMENSION LBUF(257),IDCB2(144),MERR(5)
      COMMON/MERG1/ IQUIT,ILU(3),IDCB(272),INAM2(10),ITEMP,INAM1(10)
      COMMON/MERG2/ ISIZE(2),IRB,IOFF,JSEC,IDCB1(144),RECNT 
      DATA MERR/6412B,2HFM,2HGR,2H- ,2H  /
C 
C     READ FROM THE SOURCE NAMR 
C 
      IL=257
      IF(ITYPE.EQ.1)IL=128
20    CALL READF(IDCB2,IERR,LBUF,IL,LEN)
      IF(LEN.EQ.-1)GO TO 41 
      IF(IERR.EQ.-12)GO TO 41 
      IF(IERR.EQ.0)GO TO 44 
      IERR=-IERR
      IQUIT=-1
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      GO TO 49
41    CALL CLOSE(IDCB2,IERR)
      GO TO 49
44    IF(LEN.NE.0)GO TO 445 
C 
C     WRITE ZERO LENGTH RECORD
C 
      CALL WRITF(IDCB,IERR,ILBUF,0) 
      GO TO 20
C 
C     NOW WRITE INTO THE DESTINATION NAMR 
C 
445   IF(ITYPE.EQ.1)LEN=128 
      CALL WRITF(IDCB,IERR,LBUF,LEN)
      IF(IERR.EQ.0)GO TO 20 
      IF(IERR.NE.-7)GO TO 446 
      IQUIT=-1
      GO TO 450 
C 
C     IF NO MORE ROOM OCCURS(FMGR-033) THEN 
C     GET POSITION OF DESTINATION NAMR BEFORE 
C     LAST FILE WAS CONCATENATED AND WRITE END OF 
C     FILE AND THEN CLOSE WITH TRUNCATE.  ISSUE A 
C     MESSAGE DESCRIBING WHAT HAPPENED. 
C 
446   IF(IERR.NE.-33)GO TO 450
      IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      CALL APOSN(IDCB,IERR,RECNT,IRB,IOFF)
      CALL WRITF(IDCB,IERR,IXX,-1)
      ITRUN=JSEC/2-IRB-1
      CALL CLOSE(IDCB,IERR,ITRUN) 
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
      CALL EXEC(2,ILU,26HNO MORE ROOM ON CARTRIDGE ,13) 
      CALL EXEC(2,ILU,40HFILE CONCATENATION WAS SUCCESSFUL UP TO ,20) 
      CALL EXEC(2,ILU,36HBUT NOT INCLUDING THE LAST FILE READ,18) 
      IQUIT=-1
      GO TO 49
450   IERR=-IERR
      CALL CNUMD(IERR,MERR(3))
      MERR(3)=2HGR
      MERR(4)=IOR(MERR(4),26460B) 
      MERR(5)=IOR(MERR(5),30060B) 
      CALL EXEC(2,ILU,MERR,5) 
      CALL PTERR(MERR(2),IERR)
C 
C     RETURN TO CALLING PROGRAM 
C 
49    RETURN
      END 
                                                                                                                                                                                                                                        