Reading BSAM help
Posted: Thu Feb 18, 2016 2:02 am
Hi, I am writing an assembler program to read in data file using BSAM and writing it out to a file. I am able to read out the data but the last 7 records are repeated, there should be only 45 records but prints out 52. I know there is something I have to do with DECBBLKSIZE but don't know how.
If anyone can help me fix this issue, that would be really great.
MAIN CSECT
PRINT NOGEN
STM 14,12,12(13)
LR 12,15
USING MAIN,12
LA 14,MAINSAVE
ST 13,4(0,14)
ST 14,8(0,13)
LR 13,14
*
OPEN (INDCB,(INPUT))
LTR 15,15
BZ OPEN10K
ABEND 777,DUMP
*
OPEN10K OPEN (OUTDCB,(OUTPUT))
LTR 15,15
BZ OPEN20K
ABEND 888,DUMP
*
OPEN20K DS 0H
*
LOOP READ INDECB,SF,,,,MF=E
CHECK INDECB
CLI EOFFLAG,C'Y'
*
BE ENDLOOP
L 3,=F'0'
L 5,=F'13'
NEXTLOOP LA 4,CARD
AR 4,3
MVC OUTDATA(22),0(4)
AP COUNT(2),=PL1'1'
MVC CNT(4),=X'40202120'
ED CNT(4),COUNT
PUT OUTDCB,PRINTLN
A 3,=F'22'
BCT 5,NEXTLOOP
B LOOP
ENDLOOP DC 0H
CLOSE (INDCB,,OUTDCB)
*
L 13,4(0,13)
LM 14,12,12(13)
BR 14
LTORG
*
MAINSAVE DS 18F'-1'
COUNT DC PL2'0'
PRINTLN DC C'RECORD'
CNT DC 4C' '
DC 1C' '
OUTDATA DC 22C' ' OUTPUT RECORD
HEADER DC 33C'
*
CARD DS CL286
*
READ INDECB,SF,INDCB,CARD,286,MF=L
*
INDCB DCB DDNAME=FT05F001,
DEVD=DA,
DSORG=PS,
MACRF=R,
RECFM=FB,
EODAD=EOF1
*
EOFFLAG DC C'N'
*
EOF1 MVI EOFFLAG,C'Y'
BR 14
*
OUTDCB DCB DDNAME=OUTPUT,
DEVD=DA,
DSORG=PS,
MACRF=PM,
LRECL=33,
BLKSIZE=495,
RECFM=FB
*
END MAIN
/*
//L.SYSLIB DD DSN=KC02293.SYS2.CALLIB,DISP=SHR
//G.OUTPUT DD DSN=&&TEMP,DISP=(NEW,PASS,DELETE),LRECL=33,
// BLKSIZE=495
//G.XSNAPOUT DD SYSOUT=*
//G.XPRNT DD SYSOUT=*
//*
//*
//STEP2 EXEC PGM=IEBPTPCH
//SYSUT1 DD DSN=&&TEMP,DISP=(OLD,DELETE)
//SYSUT2 DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PRINT MAXFLDS=1
RECORD FIELD=(33)
If anyone can help me fix this issue, that would be really great.
MAIN CSECT
PRINT NOGEN
STM 14,12,12(13)
LR 12,15
USING MAIN,12
LA 14,MAINSAVE
ST 13,4(0,14)
ST 14,8(0,13)
LR 13,14
*
OPEN (INDCB,(INPUT))
LTR 15,15
BZ OPEN10K
ABEND 777,DUMP
*
OPEN10K OPEN (OUTDCB,(OUTPUT))
LTR 15,15
BZ OPEN20K
ABEND 888,DUMP
*
OPEN20K DS 0H
*
LOOP READ INDECB,SF,,,,MF=E
CHECK INDECB
CLI EOFFLAG,C'Y'
*
BE ENDLOOP
L 3,=F'0'
L 5,=F'13'
NEXTLOOP LA 4,CARD
AR 4,3
MVC OUTDATA(22),0(4)
AP COUNT(2),=PL1'1'
MVC CNT(4),=X'40202120'
ED CNT(4),COUNT
PUT OUTDCB,PRINTLN
A 3,=F'22'
BCT 5,NEXTLOOP
B LOOP
ENDLOOP DC 0H
CLOSE (INDCB,,OUTDCB)
*
L 13,4(0,13)
LM 14,12,12(13)
BR 14
LTORG
*
MAINSAVE DS 18F'-1'
COUNT DC PL2'0'
PRINTLN DC C'RECORD'
CNT DC 4C' '
DC 1C' '
OUTDATA DC 22C' ' OUTPUT RECORD
HEADER DC 33C'
*
CARD DS CL286
*
READ INDECB,SF,INDCB,CARD,286,MF=L
*
INDCB DCB DDNAME=FT05F001,
DEVD=DA,
DSORG=PS,
MACRF=R,
RECFM=FB,
EODAD=EOF1
*
EOFFLAG DC C'N'
*
EOF1 MVI EOFFLAG,C'Y'
BR 14
*
OUTDCB DCB DDNAME=OUTPUT,
DEVD=DA,
DSORG=PS,
MACRF=PM,
LRECL=33,
BLKSIZE=495,
RECFM=FB
*
END MAIN
/*
//L.SYSLIB DD DSN=KC02293.SYS2.CALLIB,DISP=SHR
//G.OUTPUT DD DSN=&&TEMP,DISP=(NEW,PASS,DELETE),LRECL=33,
// BLKSIZE=495
//G.XSNAPOUT DD SYSOUT=*
//G.XPRNT DD SYSOUT=*
//*
//*
//STEP2 EXEC PGM=IEBPTPCH
//SYSUT1 DD DSN=&&TEMP,DISP=(OLD,DELETE)
//SYSUT2 DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
PRINT MAXFLDS=1
RECORD FIELD=(33)