REXX:
/*REXX*/
PARSE ARG BUFFER MAX_BUFFER .
NUMERIC DIGITS 18
IF BUFFER = "" THEN BUFFER = 5000
IF MAX_BUFFER = "" THEN MAX_BUFFER = 0
EXECIO "0 DISKR SMF" /* OPEN INPUT */
EXECIO "0 DISKW OUT" /* OPEN OUTPUT */
I_BLK = 0
I_LETTI = 0
I_LETTI_119 = 0
I_ALTRI = 0
I_SCRITTI = 0
"EXECIO "BUFFER" DISKR SMF (STEM SMF.)"
DO WHILE(SMF.0 > 0)
IF MAX_BUFFER > 0 & I_BLK = MAX_BUFFER THEN DO
SAY "ABBANDONO ELABORAZIONE PER MAX BLOCCHI"
LEAVE
END
I_BLK = I_BLK + 1
SAY "LETTO BLOCCO:" RIGHT(I_BLK,8),
"DI" RIGHT(SMF.0,8),
"RECORDS"
O = 0
DROP OUT.
DO I = 1 TO SMF.0
I_LETTI = I_LETTI + 1
SMF = SMF.I
SMF_RTY = C2D(SUBSTR(SMF,2,1))
SELECT
WHEN SMF_RTY = 119 THEN DO
CALL ELABORA_REC119
I_LETTI_119 = I_LETTI_119 + 1
END
OTHERWISE DO
I_ALTRI = I_ALTRI + 1
END
END
END
"EXECIO "O" DISKW OUT (STEM OUT.)"
I_SCRITTI = I_SCRITTI + O
"EXECIO "BUFFER" DISKR SMF (STEM SMF.)"
END
EXECIO "0 DISKW OUT(FINIS)" /* CLOSE */
EXECIO "0 DISKR SMF(FINIS)" /* CLOSE */
SAY "RECORDS SMF LETTI.....:" I_LETTI
SAY ".. DI CUI 119.........:" I_LETTI_119
SAY ".. DI CUI ALTRI.......:" I_ALTRI
SAY "RECORDS SCRITTI.......:" I_SCRITTI
EXIT
/*-----------------------------------------------------------------*/
/* ELABORA RECORDS 119 */
/*-----------------------------------------------------------------*/
ELABORA_REC119:
SMF119BASE = SUBSTR(SMF,1,20)
SMF119HDFLAGS = SUBSTR(SMF,1,1)
BIT = X2B(C2X(SMF119HDFLAGS))
IF SUBSTR(BIT,2,1) = "0" THEN DO
SAY "SUBTYPE IS NOT VALID AT RECORD:" I_LETTI
EXIT 99
END
SMF119HDTYPE = C2D(SUBSTR(SMF,2,1))
SMF119HDTIME = SUBSTR(SMF,3,4)
SMF119HDDATE = SUBSTR(SMF,7,4)
SMF119HDSID = SUBSTR(SMF,11,4)
SMF119HDSSI = SUBSTR(SMF,15,4)
SMF119HDSUBTYPE = C2D(SUBSTR(19,2))
SMF119SDEFSECT = SUBSTR(SMF,21,12)
SMF119SD_TRN = C2D(SUBSTR(SMF119SDEFSECT,1,2)) /* N.OF TRIPLETS */
SMF119SDRSVD = SUBSTR(SMF119SDEFSECT,3,2) /* RESERVED */
SMF119IDOFF = C2D(SUBSTR(SMF119SDEFSECT,5,4)) - 3 /* OFF TO IDENT. */
SMF119IDLEN = C2D(SUBSTR(SMF119SDEFSECT,9,2)) /* LL OF IDENT. */
SMF119IDNUM = C2D(SUBSTR(SMF119SDEFSECT,11,2)) /* N. OF IDENT. */
IF SMF119IDNUM > 1 THEN DO
SAY "MORE THAN 1 IDENTIFICATION SECTION AT RECORD:" I_LETTI
EXIT 99
END
SMF119IDENT = SUBSTR(SMF,SMF119IDOFF,SMF119IDLEN)
/*SAY "NUMERO TRIPLETTE:"SMF119SD_TRN*/
DROP SECTION_TRIPLETS.
TR = 0
OFFS_BASE = 21 + 2 + 2
DO N_SECT = 2 TO SMF119SD_TRN
OFFS = OFFS_BASE + (N_SECT - 1) * 8
TR = TR + 1
SECTION_TRIPLETS.TR = SUBSTR(SMF,OFFS,8)
END
SECTION_TRIPLETS.0 = TR
DO TR = 1 TO SECTION_TRIPLETS.0
OFFS_BASE = C2D(SUBSTR(SECTION_TRIPLETS.TR,1,4)) - 3
LEN = C2D(SUBSTR(SECTION_TRIPLETS.TR,5,2))
NR = C2D(SUBSTR(SECTION_TRIPLETS.TR,7,2))
/*SAY "TR:"TR "OFFS_BASE:"OFFS_BASE "LEN:"LEN "NR:"NR*/
DO XX = 1 TO NR
OFFS = OFFS_BASE + (XX - 1) * LEN
REC = SUBSTR(SMF,OFFS,LEN)
O = O + 1
OUT.O = SMF119BASE !!,
SMF119IDENT !!,
SECTION_TRIPLETS.TR !!,
D2C(XX,2) !!,
D2C(I_LETTI,4) !!,
REC
IF O // BUFFER = 0 THEN DO
"EXECIO "O" DISKW OUT (STEM OUT.)"
I_SCRITTI = I_SCRITTI + O
O = 0
END
END
END
RETURN
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Mail
priva di virus. www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN