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

Reply via email to