the following COBOL program will do what you want. Well, in my minor test it
did. Compiled with Enterprise COBOL 3.4.

000100 PROCESS MAP,TRUNC(OPT),OPTIMIZE,VBREF,XREF,APOST,LIST
000200 ID DIVISION.
000300 PROGRAM-ID. SMFALTER.
000400 AUTHOR. JOHN MCKOWN.
000500 INSTALLATION. HEALTHMARKETS, INC.
000600 DATE-WRITTEN. FEBRUARY 04, 2009.
000700 DATE-COMPILED.
000800 SECURITY. NONE.
000900*
001000 ENVIRONMENT DIVISION.
001100 CONFIGURATION SECTION.
001200 SOURCE-COMPUTER. IBM-370.
001300 OBJECT-COMPUTER. IBM-370.
001400 INPUT-OUTPUT SECTION.
001500 FILE-CONTROL.
001600     SELECT SMF-INPUT ASSIGN TO UT-S-SMFIN
001700            ORGANIZATION IS SEQUENTIAL
001800            ACCESS MODE IS SEQUENTIAL
001900            FILE STATUS IS SMFIN-FILE-STATUS.
002000     SELECT SMF-OUTPUT ASSIGN TO UT-S-SMFOUT
002100            ORGANIZATION IS SEQUENTIAL
002200            ACCESS MODE IS SEQUENTIAL
002300            FILE STATUS IS SMFOUT-FILE-STATUS.
002400 I-O-CONTROL.
002500*    APPLY WRITE-ONLY ON SMF-OUTPUT.
002600*
002700 DATA DIVISION.
002800 FILE SECTION.
002900 FD  SMF-INPUT
003000     BLOCK CONTAINS 0 RECORDS
003100     LABEL RECORDS ARE STANDARD
003200     RECORDING MODE IS S
003300     RECORD IS VARYING IN SIZE FROM 1 TO 32763 CHARACTERS
003400     DEPENDING ON WS-INPUT-RECORD-SIZE
003500     .
003600 01  SMF-INPUT-RECORD.
003700     05 SMF-INPUT-DATA             PIC X
003800        OCCURS 1 TO 32763 TIMES
003900        DEPENDING ON WS-INPUT-RECORD-SIZE
004000        .
004100*01  LARGEST-INPUT-RECORD.
004200*    05 FILLER                     PIC X(32763).
004300 01  SMF-COMMON-RECORD.
004400     05  FILLER                    PIC X.
004500     05  SMF-RECORD-TYPE           PIC X.
004600     88  SMF-RECORD-TYPE-30        VALUE IS X'1E'.
004700     05  SMF-TIME                  PIC S9(9) BINARY.
004800     05  SMF-DATE                  PIC S9(7) PACKED-DECIMAL.
004900     05  SMF-SYSTEM-ID             PIC X(4).
005000     05  SMF-SUBSYSTEM-ID          PIC X(4).
005100     05  SMF-RECORD-SUBTYPE        PIC S9(4) BINARY.
005200     88  SMF-RECORD-SUBTYPE-2      VALUE IS 2.
005300     88  SMF-RECORD-SUBTYPE-3      VALUE IS 3.
005400*
005500 FD  SMF-OUTPUT
005600     BLOCK CONTAINS 0 RECORDS
005700     LABEL RECORDS ARE STANDARD
005800     RECORDING MODE IS S
005900     RECORD IS VARYING IN SIZE FROM 1 TO 32763 CHARACTERS
006000     DEPENDING ON WS-INPUT-RECORD-SIZE
006100     .
006200 01  SMF-OUTPUT-RECORD.
006300     05  SMF-OUTPUT-BYTES          PIC X
006400         OCCURS 1 TO 32763 TIMES
006500         DEPENDING ON WS-INPUT-RECORD-SIZE
006600         .
006700*
006800 WORKING-STORAGE SECTION.
006900 77  SMFIN-FILE-STATUS             PIC XX.
007000 77  SMFOUT-FILE-STATUS            PIC XX.
007100 77  EOF-ON-SMFIN-VALUE            PIC X VALUE 'N'.
007200 88  EOF-ON-SMFIN                  VALUE IS 'Y'.
007300 77  TOTAL-RECORDS-READ            PIC S9(15) PACKED-DECIMAL
007400                                   VALUE IS ZERO.
007500 77  WS-INPUT-RECORD-SIZE          PIC 9(9) BINARY.
007600 77  TOTAL-RECORDS-WRITTEN         PIC S9(15) PACKED-DECIMAL
007700                                   VALUE IS ZERO.
007800*
007900*LINKAGE SECTION.
008000*
008100 PROCEDURE DIVISION.
008200 START-UP.
008300     OPEN INPUT SMF-INPUT
008400          OUTPUT SMF-OUTPUT.
008500     IF SMFIN-FILE-STATUS IS NOT EQUAL TO ZEROS THEN
008600        DISPLAY 'ERROR. INPUT FILE FAILED TO OPEN. STATUS='
008700                SMFIN-FILE-STATUS UPON SYSOUT
008800        MOVE +8 TO RETURN-CODE
008900        END-IF.
009000     IF SMFOUT-FILE-STATUS IS NOT EQUAL TO ZEROS THEN
009100        DISPLAY 'ERROR. OUTPUT FILE FAILED TO OPEN. STATUS='
009200                SMFOUT-FILE-STATUS UPON SYSOUT
009300        MOVE +8 TO RETURN-CODE
009400        END-IF.
009500     IF RETURN-CODE IS NOT EQUAL TO ZERO THEN
009600        GOBACK
009700        END-IF.
009800     READ SMF-INPUT AT END SET EOF-ON-SMFIN TO TRUE.
009900     PERFORM ALTER-INPUT
010000             UNTIL EOF-ON-SMFIN
010100             OR    SMFIN-FILE-STATUS IS NOT EQUAL TO ZERO
010200             OR    SMFOUT-FILE-STATUS IS NOT EQUAL TO ZERO.
010300     CLOSE SMF-INPUT
010400           SMF-OUTPUT.
010500     DISPLAY 'TOTAL RECORDS READ =' TOTAL-RECORDS-READ
010600             UPON SYSOUT.
010700     DISPLAY 'TOTAL RECORDS WRITTEN =' TOTAL-RECORDS-WRITTEN
010800             UPON SYSOUT.
010900     IF SMFIN-FILE-STATUS IS NOT EQUAL TO ZERO THEN
011000        DISPLAY 'READ ERROR. STATUS=' SMFIN-FILE-STATUS
011100                UPON SYSOUT
011200        MOVE +8 TO RETURN-CODE
011300     END-IF.
011400     IF SMFOUT-FILE-STATUS IS NOT EQUAL TO ZERO THEN
011500        DISPLAY 'WRITE ERROR. STATUS=' SMFOUT-FILE-STATUS
011600                UPON SYSOUT
011700        MOVE +8 TO RETURN-CODE
011800     END-IF.
011900     GOBACK.
012000*
012100 ALTER-INPUT.
012200     ADD +1 TO TOTAL-RECORDS-READ.
012300     EVALUATE SMF-SYSTEM-ID
012400     WHEN 'CSYS' MOVE 'ESYS' TO SMF-SYSTEM-ID
012500     WHEN 'DSYS' MOVE 'FSYS' TO SMF-SYSTEM-ID
012510     WHEN 'LIH1' MOVE 'LIH2' TO SMF-SYSTEM-ID
012600     WHEN OTHER CONTINUE
012700     END-EVALUATE
012800     MOVE SMF-INPUT-RECORD(1:WS-INPUT-RECORD-SIZE) TO
012900          SMF-OUTPUT-RECORD(1:WS-INPUT-RECORD-SIZE)
012910     WRITE SMF-OUTPUT-RECORD.
013000     READ SMF-INPUT AT END SET EOF-ON-SMFIN TO TRUE.
013100*
013200*
013300 END PROGRAM SMFALTER.

--
John

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to