//HBE35 JOB ...
//**
//** Assemble the HBE35 exit
//**
//ASM      EXEC PGM=IEV90,REGION=2500K,
//         PARM='NOXREF,NOESD,NORLD,OBJECT,NODECK'
//SYSPRINT DD SYSOUT=*,DCB=(BLKSIZE=3146)
//SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB
//SYSLIN DD UNIT=SYSDA,SPACE=(CYL,(2,1)),
//       DISP=(,PASS),DCB=(BLKSIZE=3120)
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,1))
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(2,1))
//SYSUT3 DD  UNIT=SYSDA,SPACE=(CYL,(2,1))
//SYSIN DD *
         TITLE 'DFSORT E35 for writing HiperBatch data with QSAM'
HBE35    CSECT
* This DFSORT E35 exit uses QSAM to write Hiperbatch output.
* The output ddname must be HBOUT.  The RECFM, LRECL and BLKSIZE
* must be available for the HBOUT data set (e.g. on the DD statement
* or in the DSCB).
* SYSIN must contain appropriate SORT and MOD statements.
R1       EQU   1
R2       EQU   2
R3       EQU   3
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
         USING HBE35,R12          Show base register
         STM   R14,R12,12(R13)    Save registers
         LA    R12,0(,R15)        Set base register
         ST    R13,SAVE35+4       Save backward pointer
         LA    R14,SAVE35         Set forward pointer
         ST    R14,8(,R13)          in savearea
         LR    R13,R14            Set our savearea
         LR    R2,R1              Save pointer to parameter list
         CLI   FLAGS,FIRST        If not first entry,
         BNE   CKEOF                skip Open
         OPEN  (OUT,(OUTPUT))     Open the output data set
         MVI   FLAGS,0            Turn off first entry flag
CKEOF    DS    0H
         ICM   R3,15,0(R2)        Get pointer to input record
         BNZ   PUTRCD             If not EOF, go put record
EOD      DS    0H
         CLOSE OUT                End of data - Close data set
         FREEPOOL OUT             Free buffers
         LA    R15,8              Set RC=8 (End of data)
         B     GOBACK             Return to DFSORT
PUTRCD   DS    0H
         PUT   OUT,(R3)           Put record
         LA    R15,4              Set RC=4 (Delete record)
GOBACK   DS    0H
         L     R13,4(,R13)
         L     R14,12(,R13)
         LM    R2,R12,28(R13)     Restore registers
         BR    R14                Return to DFSORT
*
SAVE35   DS    18F                Savearea
FLAGS    DC    X'FF'              Flags = Init. for first entry
FIRST    EQU   X'FF'              First entry
         DS    3C
OUT      DCB   DDNAME=HBOUT,MACRF=PM,DSORG=PS
         END
//**
//** Linkedit the HBE35 exit
//**
//LKED     EXEC PGM=IEWL,REGION=512K,COND=(8,LT,ASM),
//        PARM='MAP,LIST,NCAL,LET,SIZE=(490K,40K),AMODE=24,RMODE=24'
//SYSLIN DD DSN=*.ASM.SYSLIN,DISP=(OLD,DELETE)
//       DD DDNAME=SYSIN
//SYSUT1 DD UNIT=SYSDA,SPACE=(3156,(24,20))
//SYSPRINT DD SYSOUT=*,DCB=(BLKSIZE=2420,LRECL=121,RECFM=FBSA)
//SYSLMOD DD DSN=linklib(HBE35),DISP=OLD
//**
//** Sort Example - Fixed-Length Hiperbatch Output
//**
//HB35SORT EXEC PGM=ICEMAN,REGION=8M
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//EXITLIB DD DSN=linklib,DISP=SHR
//SORTIN  DD  DSN=finput1,DISP=SHR
//HBOUT DD DSN=foutput1,UNIT=SYSDA,SPACE=(CYL,(25,25),RLSE),
//  DISP=(NEW,CATLG,DELETE),
//  LRECL=300,RECFM=FB,DSORG=PS
//SYSIN DD *
 SORT FIELDS=(21,4,BI,A)
 MODS E35=(HBE35,16184,EXITLIB)
/*
//**
//** Copy Example - Variable-Length Hiperbatch Output
//**
//HB35COPY EXEC PGM=ICEMAN,REGION=8M
//SYSUDUMP DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSOUT DD SYSOUT=*
//EXITLIB DD DSN=linklib,DISP=SHR
//SORTIN DD DSN=vinput,DISP=SHR
//HBOUT DD DSN=voutput1,UNIT=SYSDA,SPACE=(CYL,(25,25),RLSE),
//  DISP=(NEW,CATLG,DELETE),
//  LRECL=2000,RECFM=VB,DSORG=PS
//SYSIN DD *
 OPTION COPY
 MODS E35=(HBE35,16184,EXITLIB)
/*
//**
//** Merge Example - Fixed-Length Hiperbatch Output
//**
//HB35MERG EXEC PGM=ICEMAN,REGION=8M
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//EXITLIB DD DSN=linklib,DISP=SHR
//SORTIN01 DD DSN=finput1,DISP=SHR
//SORTIN02 DD DSN=finput2,DISP=SHR
//SORTIN03 DD DSN=finput3,DISP=SHR
//HBOUT DD DSN=foutput2,UNIT=SYSDA,SPACE=(CYL,(25,25),RLSE),
//  DISP=(NEW,CATLG,DELETE),
//  LRECL=300,RECFM=FB,DSORG=PS
//SYSIN DD *
 MERGE FIELDS=(21,4,BI,A)
 MODS E35=(HBE35,16184,EXITLIB)
/*
