Академический Документы
Профессиональный Документы
Культура Документы
//* RESTART=SAS.SAS609,
// NOTIFY=&SYSUID
/*JOBPARM ROOM=PROG
//* use symbolic names
//SORT1 EXEC PGM=SORT
//SYMNAMES DD *
TC,'LA'
//SYSOUT
DD SYSOUT=*
//SORTMSG
DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=TCLM.CQ000154.ECF.LATRAN.X060123
//SORTOUT DD DSN=TEMP.M4J6060.W1.DATA(+1),
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SYSIN
DD *
SORT FIELDS=COPY
OUTFIL INCLUDE=(1,2,CH,EQ,TC),OUTREC=(1,80)
//
//* SUMMARIZING
//SORT3
EXEC PGM=SORT
//SYSOUT
DD SYSOUT=*
//SORTMSG
DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=TEMP.M4J6060.V2.DATA
//SORTOUT DD DSN=TEMP.M4J6060.V5.DATA(+1),
// UNIT=TEMP,DISP=(,CATLG,DELETE),
// SPACE=(TRK,(10,10),RLSE)
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SYSIN
DD *
INREC FIELDS=(55,4,X,X'00001C',X,C'0000',65,2)
SORT FIELDS=(1,4,CH,A)
SUM FIELDS=(6,3,PD,10,6,ZD)
//*
//* SUMMARIZING PRESORTED USING SECTIONS, TRAILER
//SORT4 EXEC PGM=ICEMAN
//SYSOUT
DD SYSOUT=*
//SORTIN DD *
101
20
101
30
102
40
102
50
103
60
103
70
/*
//SORTOUT DD SYSOUT=*
//SYSIN
DD
*
OPTION COPY
OUTFIL REMOVECC,NODETAIL,
SECTIONS=(3,3,
TRAILER3=(1,11,TOT=(12,5,FS,LENGTH=5)))
//* TRAILER3=(1,11,TOT=(12,5,FS,TO=FS,LENGTH=5)))
/*
//* SUMMARIZING PRESORTED USING MERGE
//SORT5 EXEC PGM=ICEMAN
//SYSOUT
DD SYSOUT=*
//SORTIN01 DD *
101
101
102
102
103
103
20
30
40
50
60
70
/*
//SORTOUT DD SYSOUT=*
//SYSIN
DD
*
OPTION ZDPRINT
MERGE FIELDS=(3,3,CH,A)
SUM FIELDS=(12,5,ZD)
/*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(10,20))
//SYSIN
DD *
INCLUDE COND=(67,1,CH,EQ,C'G')
SORT FIELDS=COPY,STOPAFT=1000
OUTFIL FILES=1,OUTREC=(01:17,8,09:25,3,12:34,9,21:67,1),CONVERT
//
//
//
//
//**** more complicated example
001700 INCLUDE COND=((103,1,CH,EQ,C'B',
001800
OR,103,1,CH,EQ,C'D',
001900
OR,103,1,CH,EQ,C'M'),
002000
AND,
002100
(75,1,CH,EQ,C'A',
002200
OR,75,1,CH,EQ,C'B',
002300
OR,75,1,CH,EQ,C'H',
002400
OR,75,1,CH,EQ,C'K',
002500
OR,75,1,CH,EQ,C'L'))
002600 INREC FIELDS=(1,4,32,2,60,4,64,4,PD0,M11,
002700
75,1,103,1,X'000000000000001C')
002800 SORT FIELDS=(5,2,BI,A,7,4,BI,A,
002900
15,1,ZD,A,
.* COL 5 OF ISN
003000
13,2,ZD,A,
.* COL 3-4 OF ISN
003100
17,1,CH,A,18,1,CH,A)
003200 SUM FIELDS=(19,8,PD)
003300 OUTFILE FNAMES=SORTOUT,
003400
OUTREC=(5,2,7,4,15,1,13,2,17,1,18,1,19,8),CONVERT
notes:
1. the input is VB and output is FB (19 bytes, see outrec, 19=2+4+1+2+1+1+8)
2. the col in INCLUDE already accounts for the 4-byte vrlen (ie. 103 is really 9
9, etc)
3. in INREC, (1,4... is for the vrlen (if input is VB, INREC is also VB)
4. in INREC, 64,4,PD0,M11, means at actual col 60 of input, take 4 bytes but dro
p first and last nibbles, then
format remaining as M11 (one of preset formats, this one means all zoned digits)
5. in INREC, the last 8 char field is a pd8. counter of 1, which will be large e
nough for SUM FIELDS...
this could also have been written as 7Z,X'01'C, where 7Z is 7 binary zeroes (BTW
also valid is 7X, 7 blanks)
6. in SORT, the positions point to the completed INREC record - the fields point
ing to the ZD are parts of the 6 ZD
created from the PD0 in INREC
7. SUM the constructed counter (value=1, pd8.)
8. in OUTREC, fields point to the INREC, if inrec was used.
9. in OUTREC, use the the construct OUTFILE FNAMES=...,OUTREC...,CONVERT to conv
ert to FB
10. in OUTREC, FNAMES may be replaced with FILES (FILES=1, will point to output
SORTFL1, etc)
//* this segment is used for selecting from nibbles (half bytes) by using BIT no
tation
002701 INCLUDE COND=((103,1,CH,EQ,C'B',
002702
OR,103,1,CH,EQ,C'D',
002703
OR,103,1,CH,EQ,C'M'),
002704
AND,
002709
65,2,BI,EQ,B'....100001100001', .* LPDN, RGN
002710
AND,
SECTIONS=(34,2,SKIP=L,
.* GROUP BY ZONAD
TRAILER3=(10:'-------------',52:'--',76:'---', .* GROUP TOTALS
/,03:TOTAL=(9,7,PD,M2),52:34,2,
64:TOTAL=(50,2,PD,M0),' RECORDS')),
OUTREC=(01:1,8,11:9,7,PD,M2,LENGTH=13,
26:16,6,34:22,7,43:29,4,49:33,1,52:34,2,56:36,2,60:38,11,
73:49,1,76:50,2,PD,M0,120:X),
TRAILER1=(/,03:TOTAL=(9,7,PD,M2),
.* FINAL TOTALS
30:COUNT,' CLAIMS',
.* FINAL COUNT
64:TOTAL=(50,2,PD,M0),' RECORDS')
//* how to read a field like -123.45
//* use inrec to chop into dollars (including sign) and cents
//* then during outfile,outrec, read in as FS but output as PD or ZD
//SORTIN DD DISP=SHR,DSN=TCLM.CLJJN.GET6A.WISP
//SORTOUT DD DSN=TEMP.M4J6060.V1.DATA(+1),
// UNIT=TEMP,SPACE=(TRK,(1,1),RLSE),
// RECFM=FB,LRECL=80,BLKSIZE=0,
// DISP=(,CATLG,DELETE)
//*-+----1----+----2----+----3----+----4----+----5----+----6----+----7-//*09225 6A SUBATFEE 2003-01-23 -0000070.00
<= VB INPUT
//SYSIN DD *
* GET CLMNO,DATE,AMTDOLR,AMTCENT (DROP DECIMAL POINT)
INREC FIELDS=(1,4,5,8,26,10,
37,8,46,2)
.* (DLRS & CENTS, LEADING SIGN, NO DOT)
OUTFILE FNAMES=SORTOUT,
OUTREC=(01:5,8,09:13,10,
19:23,10,FS,PD,
.* READ IN AS FLOATING SIGN, OUT AS PD
80:C' '),CONVERT
SORT FIELDS=(5,8,CH,A,23,6,PD,A)
//* edit may be followed by SIGNS=(lp,ln,tp,tn) to control leading/trailing
//* positive/negative signs of output field
//* this is the pseudo code for computing day of week (sun=0) from any date
int getDayOfWeek(int m, int d, int y, int csys)
{
// csys = 1 for Gregorian Calendar (if year>=1582)
if (m < 3)
{
m = m + 12;
y = y - 1;
}
return (
d
+ (2 * m)
+ int(6 * (m + 1) / 10)
+ y
+ int(y / 4)
- int(y / 100)
+ int(y / 400)
+ csys
) % 7;
}
*** eztrieve for calling LE callable service ceeloct (get local time)
//STEPLIB DD DSN=SCIFXA.APLIB,DISP=SHR
//
DD DSN=EZTP.LOADLIB,DISP=SHR
//
DD DSN=SORT.SORTLIB,DISP=SHR
//
DD DSN=SYS1.SCEERUN,DISP=SHR
PARM ENVIRONMENT COBOL
DEFINE LILLIAN W 4 B
DEFINE TIMESEC W 8 A
DEFINE GREGSTR W 17 A
DEFINE FEEDBCK W 12 A
JOB INPUT NULL
CALL CEELOCT USING (LILLIAN TIMESEC GREGSTR FEEDBCK)
DISPLAY 'L=' LILLIAN ' S=' TIMESEC ' G=' GREGSTR
STOP
*** this etrieve uses macro to access ceedays (date-to-lillian) and ceedate (lil
lian-to-date)
//DATEFILE DD *
2005-11-23
1982-04-24
2054-06-19
1900-01-01
1900-03-01
1948-08-19
//SYSIN
DD *
MSTART EZEDAYS
MACRO 1 WZDPARM
DEFINE WZD-PARM
W 140 A
DEFINE WZD-FLD
WZD-PARM
22 A
DEFINE WZD-FLD-LEN WZD-FLD
2 B
DEFINE WZD-FLD-VAL WZD-FLD +2 20 A
DEFINE WZD-PIC
WZD-PARM +22
22 A
DEFINE WZD-PIC-LEN WZD-PIC
2 B
DEFINE WZD-PIC-VAL WZD-PIC +2 20 A
DEFINE WZD-LILLIAN WZD-PARM +44
4 B
DEFINE WZD-FEEDBK WZD-PARM +48
12 A
DEFINE WZD-FDBK-RC WZD-FEEDBK
2 B
DEFINE WZD-FDBK-MSG WZD-FEEDBK +2 2 B
DEFINE WZD-FDBK-ETC WZD-FEEDBK +4 8 A
DEFINE WZD-DTE-OUT WZD-PARM +60
80 A
WZD-PARM = &WZDPARM
WZD-LILLIAN = 0
WZD-FEEDBK
= X'00000000'
CALL CEEDAYS USING (WZD-FLD WZD-PIC
MEND
MSTART EZEDATE
MACRO 1 WZDPARM
DEFINE WZD-PARM
W 140 A
DEFINE WZD-FLD
WZD-PARM
DEFINE WZD-FLD-LEN WZD-FLD
DEFINE WZD-FLD-VAL WZD-FLD +2
DEFINE WZD-PIC
WZD-PARM +22
WZD-LILLIAN WZD-FEEDBK)
22
2
20
22
A
B
A
A
B
A
B
A
B
B
A
A
WZD-PARM = &WZDPARM
WZD-DTE-OUT = ' '
WZD-FEEDBK
= X'00000000'
CALL CEEDATE USING (WZD-LILLIAN WZD-PIC WZD-DTE-OUT WZD-FEEDBK)
MEND
PARM ENVIRONMENT COBOL
FILE DATEFILE F(80)
DTE-REC
1 80
DTE-FLD
1 10
DTE-YEAR
1 4
DTE-MONTH
6 2
DTE-DAY
9 2
A
A
N
N
N
DEFINE WZD-PARM
W 140 A
DEFINE WZD-FLD
WZD-PARM
22
DEFINE WZD-FLD-LEN WZD-FLD
2
DEFINE WZD-FLD-VAL WZD-FLD +2 20
DEFINE WZD-PIC
WZD-PARM +22
22
DEFINE WZD-PIC-LEN WZD-PIC
2
DEFINE WZD-PIC-VAL WZD-PIC +2 20
DEFINE WZD-LILLIAN WZD-PARM +44
4
DEFINE WZD-FEEDBK WZD-PARM +48
12
DEFINE WZD-FDBK-RC WZD-FEEDBK
2
DEFINE WZD-FDBK-MSG WZD-FEEDBK +2 2
DEFINE WZD-FDBK-ETC WZD-FEEDBK +4 8
DEFINE WZD-DTE-OUT WZD-PARM +60
80
A
B
A
A
B
A
B
A
B
B
A
A
*** this etrieve is same as above but direct call to ceedays and ceedate
PARM ENVIRONMENT COBOL
FILE DATEFILE F(80)
DTE-REC
1 80 A
DTE-FLD
1 10 A
DTE-YEAR
1 4 N
DTE-MONTH
DTE-DAY
6 2 N
9 2 N
DEFINE WZD-FLD
DEFINE WZD-FLD-LEN
DEFINE WZD-FLD-VAL
DEFINE WZD-PIC
DEFINE WZD-PIC-LEN
DEFINE WZD-PIC-VAL
DEFINE WZD-LILLIAN
DEFINE WZD-DTE-OUT
DEFINE WZD-FEEDBACK
W 17 A
WZD-FLD
2
WZD-FLD +2 15
W 17 A
WZD-PIC
2
WZD-PIC +2 15
W 4 B 0
W 80 A
W 12 A
B
A
B
A
WS-DATE-PIC
WS-OUT-DATE
WS-FEEDBACK-LIST
DISPLAY 'CEEDATE: D=' WS-OUT-DATE ' F=' WS-FEEDBACK-RC
GOBACK
.
/* Date picture samples: MM
01-12
*/
/*
ZM
1-12
*/
/*
YY
98
*/
/*
YYYY
1998
*/
/*
MMM
JAN-DEC
*/
/*
Mmm
Jan-Dec
*/
/*
MMMMMMMMMM JANUARY-DECEMBER with trailing blanks
*/
/*
Mmmmmmmmmz January-December without trailing
blanks*/
/*
DD
01-31
*/
/*
ZD
1-31
*/
/*
HH, ZH
00-23, 0-23?
*/
/*
MI
minute
*/
/*
SS
second
*/
/*
9 99 999
microseconds 10 100 1000
*/
/*
AP, ap
AM-PM, am-pm
*/
/*
A.P., a.p. A.M.-P.M., a.m.-p.m.
*/
/*
W
S-M-T-W-T-F-S
*/
/*
Www
Sun-Sat
*/
/*
WWWWWWWWWW SUNDAY-SATURDAY without trailing spaces
*/
/*
Wwwwwwwwwz Sunday-Saturday with trailing spaces
*/
/* Examples:
MM/DD/YYYY
06/09/1999
*/
/*
MM-DD-YYYY
06-09-1999
*/
/*
YYYY-MM-DD
1998-06-09
*/
/*
ZM/ZD/YYYY
6/9/1998
*/
/*
ZDMMMMMMMMMZYYYY 9JUNE1998
JOB CREATES TEMP TABLE TO BE USED LATER IN QUERY
//SORT EXEC PGM=SORT
//SORTMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=TCLM.TD000206.KREVCHK.KBATCHR.LHTRAN.D050314
//SYSIN DD *
INCLUDE COND=(1,2,CH,EQ,C'LH')
SORT FIELDS=COPY
OUTFIL FILES=1,
INCLUDE=(1,2,CH,EQ,C'LH',
AND,71,2,CH,EQ,C'JV',
AND,96,8,CH,NE,C'
'),
OUTREC=(C' INSERT INTO SESSION.SEL(CLMNO) VALUES(''',
96,8,
C''');',80:X)
OUTFIL FILES=2,
INCLUDE=(1,2,CH,EQ,C'LH',
AND,96,8,CH,EQ,C'
'),
OUTREC=(C' INSERT INTO SESSION.SEL(CLMNO) VALUES(''',
71,8,
C''');',80:X)
//SORTOF1 DD DSN=TEMP.M4J6060.V1.DATA(+1),
// UNIT=SYSDA,SPACE=(TRK,(1,10),RLSE),
// RECFM=FB,LRECL=80,BLKSIZE=0,
// DISP=(,CATLG,DELETE)
//*
//SORTOF2 DD DSN=TEMP.M4J6060.V2.DATA(+1),
// UNIT=SYSDA,SPACE=(TRK,(1,10),RLSE),
// RECFM=FB,LRECL=80,BLKSIZE=0,
// DISP=(,CATLG,DELETE)
//*
//SPUFI PROC SYS=V
//PSTEP010 EXEC PGM=IKJEFT01,REGION=1M
//****************************************************
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//STEPLIB DD DSN=DB2&SYS..DSNLOAD,DISP=SHR
//
DD DSN=DLVY.DB2&SYS..LOAD,DISP=SHR
//SYSTSIN DD DISP=SHR,DSN=&SYS.UNI.CNTLLIB(DLVYRSQL)
//SYSIN
DD DUMMY
// PEND
//RUN EXEC SPUFI,SYS=V
//SYSTSIN DD *
DSN SYSTEM(DB2V)
RUN PROGRAM(DLVYRSQL) PLAN(DLVYRSQL) +
PARM('/ COMMITOP(NOERROR) +
ERROROPT(QUIT) +
PAGESIZE(55) +
ROWLIMIT(5000) +
RETRIES(0) +
RETRWAIT(5) ')
//SYSIN DD *
--DROP TABLE SESSION.SEL;
DECLARE GLOBAL TEMPORARY TABLE
SESSION.SEL
( CLMNO
CHAR(8) NOT NULL
);
// DD DISP=SHR,DSN=TEMP.M4J6060.V1.DATA
// DD DISP=SHR,DSN=TEMP.M4J6060.V2.DATA
// DD *
SELECT '$',CLMNO
, CHECK_NUMBER_CKN
AS DBCKNO
,
,
,
,
,
,
,
,
CHECK_REVERSAL_CDE AS CKREVCD
CHECK_DTE
AS CHKDTE
DEPT_ALPHA_IDN
AS ZONAD
CHECK_AMT
AS CHKAMT
TRANSACTION_DTE
AS TRNDTE
ACTIVITY_DTE
AS ACTDTE
POSTING_DTE
AS PSTDTE
BATCH_STATUS_CDE
AS BATSTAT
FROM SESSION.SEL AS S LEFT JOIN KDEV.CLM_CHECK_REVERSAL AS R
ON (S.CLMNO = R.CLAIM_NUMBER_IDN)
;
//
SUPERCE
//* THIS PROC CHANGES FORMAT DEPENDING ON SS - SIDE-BY-SIDE VALUE
//SUPERCH PROC PCLM=TCLM.PS010108,
//
SS=1
/* SS=1, SIDE BY SIDE */
// IF &SS=1 THEN
//SUPERC EXEC PGM=ISRSUPC,
//
PARM=(LINECMP,
// LONGL,
/* FULL COMPARE, SHOW DIFF */
//*DELTAL,
/* CHANGED LINES ONLY
*/
//*CHNGL,
/* CHANGES +/- 10 LINES
*/
//
'COVSUM NARROW',
/* SIDE BY SIDE COMPARE
*/
//
'')
//NEWDD DD DISP=SHR,DSN=&PCLM..&MID.Q.&TYPE.&SFX
//OLDDD DD DISP=SHR,DSN=&PCLM..&MID.P.&TYPE.&SFX
//OUTDD DD SYSOUT=*
//SYSIN DD DUMMY
// ELSE
//SUPERC EXEC PGM=ISRSUPC,
//
PARM=(LINECMP,
// LONGL,
/* FULL COMPARE, SHOW DIFF */
//*DELTAL,
/* CHANGED LINES ONLY
*/
//*CHNGL,
/* CHANGES +/- 10 LINES
*/
//
'COVSUM ',
/* UP AAND DOWN COMPARE
*/
//
'')
//NEWDD DD DISP=SHR,DSN=&PCLM..&MID.Q.&TYPE.&SFX
//OLDDD DD DISP=SHR,DSN=&PCLM..&MID.P.&TYPE.&SFX
//OUTDD DD SYSOUT=*
//SYSIN DD DUMMY
// ENDIF
// PEND
//SC21
EXEC SUPERCH,SS=1,MID=MCLOPEN,SFX=.CLMACT,TYPE=ECFSTAT
EZTRIEVE SAMPLE
PARM LINK(K0021RPE R)
*=====================================================================*
*
DESCRIPTION
*
*=====================================================================*
*
*
* - IT READS THE CLAIMS ESTIMATE EXTRACT FILE, AND DEPENDING ON THE *
* PARM (INPUT CONTROL CARD) IT PRINTS THE K0021 OR K0022 REPORT.
*
*
*
* INPUT:
*
* - PCLM.KESTXTR.EXTRACT: CLAIMS ESTIMATE EXTRACT FILE
*
*
*
* OUTPUT:
*
* - K0021: MONTHLY SUMM REVISED EST LIST OVER $100,000 BY PY,YA
*
* - K0022: MONTHLY SUMM REV USTAT EST LIST OVER $100,000 BY PY,YA
*
*
*
*=====================================================================*
*
MAINTENANCE LOG
*
FILE INFILE FB(150 0)
++INCLUDE ESTIMRCE
*===================================================
*
INPUT CONTROL CARD TO DEFINE HEADER
*===================================================
FILE INCNTL FB(80 0)
CNTLREC
1 80 A
CNTL-RPTID
1
5 A
*=========================================
*
INTERNAL TABLE
*=========================================
FILE TBSTRAT TABLE INSTREAM
ARG
1 1 A
DESC
4 12 A
A NO CHANGE
B 0 TO 09999
C 1 TO 19999
D 2 TO 29999
E 3 TO 39999
F 4 TO 49999
G 5 TO 59999
H 6 TO 69999
I 7 TO 79999
J 8 TO 89999
K 9 TO 99999
L OVER 100000
M 0 TO 09999N 1 TO 19999O 2 TO 29999P 3 TO 39999Q 4 TO 49999R 5 TO 59999S 6 TO 69999T 7 TO 79999U 8 TO 89999V 9 TO 99999W OVER 100000ENDTABLE
*=======================================
*
TEMPORARY SUMFILE
*=======================================
FILE K0021SUM FB(200 0) VIRTUAL
SUMREC
1 200 A
SUM-ZONAD
1
2 A
SUM-CATEG
3
7 A
SUM-PYAY
10
5 A
SUM-STRAT-CHG
15 12 A
SUM-CLMNO
27
8 A
SUM-ESTTP
35
1 A
SUM-COUNT
36 10 P 0
SUM-PREV-COMP-EST-AMT 46 10 P 0
SUM-PREV-MED-EST-AMT
SUM-COMP-EST-AMT
SUM-MED-EST-AMT
SUM-NET-COMP-EST-AMT
SUM-NET-MED-EST-AMT
*
56
66
76
86
96
106
10
10
10
10
10
95
P
P
P
P
P
A
0
0
0
0
0
*
*========================================
*
REPORT FILES
*=========================================
FILE K0021TEM PRINTER FB(133 0)
FILE K0021RPT PRINTER FB(133 0)
*=========================================
*
WORK AREAS
*=========================================
WS-PY
W
4 A
WS-PY-CCYY
WS-PY
4 A
WS-PY-CC
WS-PY
2 A
WS-PY-YY
WS-PY
+2 2 A
WS-YA
WS-YA-CCYY
WS-YA-CC
WS-YA-YY
WS-PY-YA-RPT
WS-PY-YY-RPT
*
WS-YA-YY-RPT
W
WS-YA
WS-YA
WS-YA
4
4
2
2
+2
W
WS-PY-YA-RPT
5
2
1
2
+2
WS-PY-YA-RPT +3
WS-EST-CHNG-STRAT-DESC
WS-ESTIM-EST-TYP
WS-ESTIM-CLAIM-NUMBER-IDN
W 12 A
W 01 A
W 08 A
WS-ESTIM-PREV-COMP-EST-AMT
WS-ESTIM-PREV-MED-EST-AMT
WS-ESTIM-COMP-EST-AMT
WS-ESTIM-MED-EST-AMT
WS-ESTIM-NET-COMP-EST-AMT
WS-ESTIM-NET-MED-EST-AMT
WS-CASE-COUNT
WS-HDR
WS-RPTID
W
W
W
W
W
W
W
W
W
05
05
05
05
05
05
06
49
5
A
A
A
A
P
P
P
P
P
P
N
A
A
0
0
0
0
0
0
0
A
A
A
A
MASK
MASK
MASK
MASK
MASK
MASK
MASK
'ZZZZZZ,ZZZ-'
'ZZZZZZ,ZZZ-'
'ZZZZZZ,ZZZ-'
'ZZZZZZ,ZZZ-'
'ZZZZZZ,ZZZ-'
'ZZZZZZ,ZZZ-'
'ZZZZZZ'
*====================================================
*
PROCESS SECTION
*====================================================
*====================================================
* 1ST: WRITE TEMP SUMFILE TO FACILITATE FORMATTING K0
*====================================================
JOB INPUT INFILE +
START (INIT-PROC)
SEARCH TBSTRAT WITH EZ-ESTIM-EST-CHNG-STRAT-IND +
GIVING WS-EST-CHNG-STRAT-DESC
WS-PY-CCYY = EZ-ESTIM-POLICY-YEAR
WS-PY-YY-RPT = WS-PY-YY
WS-YA-CCYY = EZ-ESTIM-INJYY
WS-YA-YY-RPT = WS-YA-YY
WS-ESTIM-PREV-COMP-EST-AMT
WS-ESTIM-PREV-MED-EST-AMT
WS-ESTIM-COMP-EST-AMT
WS-ESTIM-MED-EST-AMT
WS-ESTIM-NET-COMP-EST-AMT
WS-ESTIM-NET-MED-EST-AMT
=
=
=
=
=
=
EZ-ESTIM-PREV-COMP-EST-AMT
EZ-ESTIM-PREV-MED-EST-AMT
EZ-ESTIM-COMP-EST-AMT
EZ-ESTIM-MED-EST-AMT
EZ-ESTIM-NET-COMP-EST-AMT
EZ-ESTIM-NET-MED-EST-AMT
IF EZ-ESTIM-EST-CHNG-STRAT-IND = 'L' +
OR EZ-ESTIM-EST-CHNG-STRAT-IND = 'W'
WS-ESTIM-EST-TYP = EZ-ESTIM-EST-TYP
WS-ESTIM-CLAIM-NUMBER-IDN = EZ-ESTIM-CLAIM-NUMBER-IDN
ELSE
WS-ESTIM-EST-TYP = ' '
WS-ESTIM-CLAIM-NUMBER-IDN = '
'
END-IF
PRINT RPT-T
*
INIT-PROC. PROC
GET INCNTL
WS-RPTID = CNTL-RPTID
IF WS-RPTID = 'K0021'
WS-HDR = 'MONTHLY SUMM REVISED ESTIMATES LIST OVER $100,000'
ELSE
WS-HDR = 'MONTHLY SUMM REV EST LIST OVER $100,000-UNIT STAT'
END-IF
END-PROC
*=================================================================
*
REPORT SECTION
*=================================================================
REPORT RPT-T PRINTER K0021TEM SUMFILE K0021SUM +
SUMMARY NODATE NOPAGE NOADJUST +
TITLESKIP 1 TALLYSIZE 4 LINESIZE 132
CONTROL FINAL NOPRINT EZ-ESTIM-ZONAD EZ-ESTIM-GROUP-CATEG NEWPAGE +
WS-PY-YA-RPT WS-EST-CHNG-STRAT-DESC +
WS-ESTIM-CLAIM-NUMBER-IDN WS-ESTIM-EST-TYP
TITLE COL
COL
COL
COL
COL
COL
COL
COL
COL
HEADING
HEADING
HEADING
HEADING
HEADING
HEADING
001
007
010
028
079
089
104
121
126
WS-RPTID +
EZ-ESTIM-ZONAD +
'ZONE OF ADJ' EZ-ESTIM-ZONAD +
WS-HDR +
'BY PY,YA' +
EZ-ESTIM-GROUP-CATEG +
SYSDATE +
'PAGE' +
PAGE-COUNT
WS-ESTIM-EST-TYP
WS-ESTIM-CLAIM-NUMBER-IDN
WS-PY-YA-RPT
WS-EST-CHNG-STRAT-DESC
TALLY
WS-ESTIM-PREV-COMP-EST-AMT
('EST' 'TYP')
('CLAIM NO')
('PY YA')
('STRAT DESCR')
('CASE' 'COUNT')
('OLD COMP')
HEADING
HEADING
HEADING
HEADING
HEADING
WS-ESTIM-PREV-MED-EST-AMT
WS-ESTIM-COMP-EST-AMT
WS-ESTIM-MED-EST-AMT
WS-ESTIM-NET-COMP-EST-AMT
WS-ESTIM-NET-MED-EST-AMT
LINE 01 COL
COL
COL
COL
COL
COL
COL
COL
COL
COL
COL
001
008
018
025
039
045
060
075
090
105
118
('OLD
('NEW
('NEW
('NET
('NET
MED')
COMP')
MED')
COMP')
MED')
WS-ESTIM-EST-TYP +
WS-ESTIM-CLAIM-NUMBER-IDN +
WS-PY-YA-RPT +
WS-EST-CHNG-STRAT-DESC +
TALLY +
WS-ESTIM-PREV-COMP-EST-AMT +
WS-ESTIM-PREV-MED-EST-AMT +
WS-ESTIM-COMP-EST-AMT
+
WS-ESTIM-MED-EST-AMT
+
WS-ESTIM-NET-COMP-EST-AMT +
WS-ESTIM-NET-MED-EST-AMT
*=========================================================
* 2ND: READ TEMP SUMFILE TO GENERATE K0021 REPORT
*=========================================================
JOB INPUT K0021SUM
WS-PY-YA-RPT
WS-EST-CHNG-STRAT-DESC
WS-ESTIM-EST-TYP
WS-ESTIM-CLAIM-NUMBER-IDN
WS-CASE-COUNT
WS-ESTIM-PREV-COMP-EST-AMT
WS-ESTIM-PREV-MED-EST-AMT
WS-ESTIM-COMP-EST-AMT
WS-ESTIM-MED-EST-AMT
WS-ESTIM-NET-COMP-EST-AMT
WS-ESTIM-NET-MED-EST-AMT
=
=
=
=
=
=
=
=
=
=
=
SUM-PYAY
SUM-STRAT-CHG
SUM-ESTTP
SUM-CLMNO
SUM-COUNT
SUM-PREV-COMP-EST-AMT
SUM-PREV-MED-EST-AMT
SUM-COMP-EST-AMT
SUM-MED-EST-AMT
SUM-NET-COMP-EST-AMT
SUM-NET-MED-EST-AMT
PRINT RPT-1
*===========================================================
*
REPORT SECTION
*===========================================================
REPORT RPT-1 PRINTER K0021RPT NODATE NOPAGE NOADJUST +
TITLESKIP 1 TALLYSIZE 4 LINESIZE 132 DTLCTL EVERY
CONTROL FINAL NOPRINT SUM-ZONAD SUM-CATEG NEWPAGE +
WS-PY-YA-RPT
TITLE COL
COL
COL
COL
COL
COL
COL
COL
COL
HEADING
HEADING
HEADING
HEADING
001
007
010
028
079
089
104
121
126
WS-RPTID +
SUM-ZONAD +
'ZONE OF ADJ' SUM-ZONAD +
WS-HDR +
'BY PY,YA' +
SUM-CATEG +
SYSDATE +
'PAGE' +
PAGE-COUNT
WS-ESTIM-EST-TYP
WS-ESTIM-CLAIM-NUMBER-IDN
WS-PY-YA-RPT
WS-EST-CHNG-STRAT-DESC
('EST' 'TYP')
('CLAIM NO')
('PY YA')
('STRAT DESCR')
HEADING
HEADING
HEADING
HEADING
HEADING
HEADING
HEADING
WS-CASE-COUNT
WS-ESTIM-PREV-COMP-EST-AMT
WS-ESTIM-PREV-MED-EST-AMT
WS-ESTIM-COMP-EST-AMT
WS-ESTIM-MED-EST-AMT
WS-ESTIM-NET-COMP-EST-AMT
WS-ESTIM-NET-MED-EST-AMT
LINE 01 COL
COL
COL
COL
COL
COL
COL
COL
COL
COL
COL
001
006
016
023
036
045
060
075
090
105
118
('
('
('
('
('
('
('
WS-ESTIM-EST-TYP +
WS-ESTIM-CLAIM-NUMBER-IDN +
WS-PY-YA-RPT +
WS-EST-CHNG-STRAT-DESC +
WS-CASE-COUNT +
WS-ESTIM-PREV-COMP-EST-AMT +
WS-ESTIM-PREV-MED-EST-AMT +
WS-ESTIM-COMP-EST-AMT +
WS-ESTIM-MED-EST-AMT +
WS-ESTIM-NET-COMP-EST-AMT +
WS-ESTIM-NET-MED-EST-AMT
*
(SEE ALSO FILES EZRPT2.TXT)
PDSUNLD/PDSLOAD
//DEL EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE M4J6060.TCLM.CQ000154.UNLOAD
//SAS EXEC SAS609
//PDS DD DISP=SHR,DSN=TCLM.CQ000154.PROMOTE.JOBSUB
//SEQ DD DSN=M4J6060.TCLM.TD000154.UNLOAD,
// UNIT=DISK,SPACE=(CYL,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=6160),
// DISP=(,CATLG,DELETE)
//*SELECT SC:;
//SYSIN DD *
PROC SOURCE INDD=PDS OUTDD=SEQ;
//*ELECT KESDMDN:-KESDMDZ:;
//
//DEL EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE TCLM.CQ000154.PROMOTE.JOBSUB
//PDSLOAD2 EXEC PGM=IEBUPDTE,PARM=NEW
//SYSUT2 DD DSN=TCLM.CQ000154.PROMOTE.JOBSUB,
// UNIT=DISK,SPACE=(TRK,(30,10,20),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// DISP=(,CATLG,DELETE)
//SYSIN DD DISP=SHR,DSN=TEMP.M4J6060.V9.DATA
//SYSPRINT DD SYSOUT=*
//
SAS THINGS
//SAS EXEC SAS609
//INP DD *
WORD=VALUE
AB_DATE=20061011
AB_FILENAME=ABC.CDF.EFGH.FILE
AB_DIR=/ABC/DEF
//SYSIN DD *
DATA INP;
LENGTH KEY $16 VALUE $16;
INFILE INP DLM='=' DSD;
INPUT KEY $ VALUE $;
PROC PRINT;
//
DATA CLINE;INFILE CLINE;
INPUT @85 ACCT PD8.;
FORMAT ACCT ACCTPIC.;
PROC SORT;BY ACCT;
DATA _NULL_;FILE PRINT N=PS;SET CLINE;
RETAIN C L 1;
IF(L>50)THEN DO;C=C+33;L=1;END;
IF(C>132)THEN DO;PUT _PAGE_;C=1;L=1;END;
PUT #L @C ACCT ACCTPIC.;
L=L+1;
//
S370FZDW.D - SIGNED ZONED DECIMAL
S370FZDUW.D - UNSIGNED ZONED DECIMAL
S370FZDSW.D - LEADING SIGN
S370FZDTW.D - TRAILING SIGN
//* SORT ZELLER
//SORT1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYMNAMES DD *
ZLYY,1,4,ZD
ZLMM,6,2,ZD
ZLDD,9,2,ZD
//SORTIN DD *
2005-10-26
1982-04-24
2054-06-19
2007-02-28
2007-03-01
//SORTOUT DD SYSOUT=*
//* MSTART DOWMAC
//** GIVEN YEAR, MONTH, DAY - RETURN DAY OF WEEK
//** (SAMPLE USAGE: DOWMAC 2001 12 31 DOW, WHERE 1=SUNDAY)
//** (NO VALID-DATE CHECKING; WORKS STARTING 3/1/1900)
//** (USES ZELLER'S CONGRUENCE)
//* MACRO 4 INP-YEAR INP-MONTH INP-DAY OUP-DOW
//*
//* IF &INP-MONTH < 3
//*
WMS-MONTH = &INP-MONTH + 12
//*
WMS-YEAR = &INP-YEAR - 1
//* ELSE
//*
WMS-MONTH = &INP-MONTH
//*
WMS-YEAR = &INP-YEAR
//* END-IF
//* WMS-T1
= 6 * (WMS-MONTH + 1 ) / 10
//* WMS-T4
= WMS-YEAR / 4
//* WMS-T100 = WMS-YEAR / 100
//* WMS-T400 = WMS-YEAR / 400
//* WMS-SUM
= &INP-DAY + 2 * WMS-MONTH + WMS-YEAR
//*
+ WMS-T1 + WMS-T4 - WMS-T100 + WMS-T400 + WMS-CSYS
//* WMS-WORK = WMS-SUM / 7
//* &OUP-DOW = WMS-SUM - 7 * WMS-WORK + 1
//*
//SYSIN DD *
INREC IFTHEN=(WHEN=(ZLMM,LT,3),
OVERLAY=(1:ZLYY,SUB,+1,EDIT=(TTTT),
6:ZLMM,ADD,+12,EDIT=(TT)))
OUTFIL REMOVECC,FNAMES=SORTOUT,OUTREC=(C' ',1,10,
X,C'T1=',((ZLMM,ADD,+1),MUL,+6),DIV,+10,
X,C'T4=',ZLYY,DIV,+4,EDIT=(TTTT),
X,C'T100=',ZLYY,DIV,+100,EDIT=(TT),
X,C'T400=',ZLYY,DIV,+400,EDIT=(TT),
X,C'DOW=',
*
(((ZLMM,MUL,+2),ADD,ZLYY,ADD,ZLDD,
ADD,(((ZLMM,ADD,+1),MUL,+6),DIV,+10),
ADD,(ZLYY,DIV,+4),
SUB,(ZLYY,DIV,+100),
ADD,(ZLYY,DIV,+400),
ADD,+1),
SUB,
(((ZLMM,MUL,+2),ADD,ZLYY,ADD,ZLDD,
ADD,(((ZLMM,ADD,+1),MUL,+6),DIV,+10),
ADD,(ZLYY,DIV,+4),
SUB,(ZLYY,DIV,+100),
ADD,(ZLYY,DIV,+400),
ADD,+1),
DIV,+7),MUL,+7),
ADD,+1,
*
80:X)
SORT FIELDS=COPY
//
D =
L =
M =
Y =
PUT
L - INT (
INT ( J /
J + 2 - (
100 * ( N
Y= M= D=;
( 2447 * J ) / 80 );
11 );
12 * L );
- 49 ) + I + L;
//
* SOURCE: HTTP://BCN.BOULDER.CO.US/Y2K/Y2KBCALC.HTM
* LD = JD - 2299160
* SASDATE USES 1/1/1960 = 0
* GREGORIAN TO JULIAN
JD = ( 1461 * ( Y + 4800 + ( M - 14 ) / 12 ) ) / 4 +
( 367 * ( M - 2 - 12 * ( ( M - 14 ) / 12 ) ) ) / 12 ( 3 * ( ( Y + 4900 + ( M - 14 ) / 12 ) / 100 ) ) / 4 +
D - 32075
* JULIAN TO GREGORIAN
L = JD + 68569
N = ( 4 * L ) / 146097
L = L - ( 146097 * N +
I = ( 4000 * ( L + 1 )
L = L - ( 1461 * I ) /
J = ( 80 * L ) / 2447
D = L - ( 2447 * J ) /
L = J / 11
M = J + 2 - ( 12 * L )
Y = 100 * ( N - 49 ) +
3 ) / 4
) / 1461001
4 + 31
80
I + L
//*
//STP020 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
2454279
2454280
2453064
2453065
2453066
//SORTOUT DD SYSOUT=*
//SYSIN DD *
INREC OVERLAY=(1,7,ZD,
* CREATE WORK VARIABLES AS NEEDED START @9 AND EVERY 9, PIC 9(8) EACH
* L = JD + 68569;
009:1,7,ZD,ADD,+68569,EDIT=(TTTTTTTT),
* N = INT ( ( 4 * L ) / 146097 );
018:+4,MUL,9,8,ZD,DIV,+146097,EDIT=(TTTTTTTT),
* L = L - INT ( ( 146097 * N + 3 ) / 4 );
009:9,8,ZD,SUB,((18,8,ZD,MUL,+146097,ADD,+3),DIV,+4),EDIT=(TTTTTTTT),
* I = INT ( ( 4000 * ( L + 1 ) ) / 1461001 );
027:+4000,MUL,(9,8,ZD,ADD,+1),DIV,+1461001,EDIT=(TTTTTTTT),
* L = L - INT ( ( 1461 * I ) / 4 ) + 31
009:9,8,ZD,SUB,((27,8,ZD,MUL,+1461),DIV,+4),ADD,+31,EDIT=(TTTTTTTT),
* J = INT ( ( 80 * L ) / 2447 );
036:9,8,ZD,MUL,+80,DIV,+2447,EDIT=(TTTTTTTT),
* D = L - INT ( ( 2447 * J ) / 80 );
045:9,8,ZD,SUB,((+2447,MUL,36,8,ZD),DIV,+80),EDIT=(TTTTTTTT),
* L = INT ( J / 11 );
009:36,8,ZD,DIV,+11,EDIT=(TTTTTTTT),
* M = J + 2 - ( 12 * L );
054:36,8,ZD,ADD,+2,SUB,(9,8,ZD,MUL,+12),EDIT=(TTTTTTTT),
* Y = 100 * ( N - 49 ) + I + L;
063:((18,8,ZD,SUB,+49),MUL,+100),ADD,27,8,ZD,ADD,9,8,ZD,
EDIT=(TTTTTTTT))
SORT FIELDS=COPY
OUTFIL FNAMES=SORTOUT,OUTREC=(1,7,X,
63,8,ZD,EDIT=(TTTT),C'-',
54,8,ZD,EDIT=(TT),C'-',
45,8,ZD,EDIT=(TT))
//
EZPIVOT
*
* TRANSLATE KEY TO INDEX
*
* SIZE OF DESC MUST MATCH DEST OF SEARCH (WATCH OUT FOR OVERFLOW)
FILE TRXTBL TABLE INSTREAM
ARG 1 6 A
DESC 8 2 N
200601 01
200602 02
200603 03
200604 04
200605 05
200606 06
200607 07
200608 08
200609 09
200610 10
200611 11
200612 12
ENDTABLE
* THE VALUE BELOW MUST MATCH OCCURS COUNT OF ELEMENT ABOVE
DEFINE WS-ARG
W
6
A
FILE INPFILE
INP-ARG
INP-KEY1
INP-IDX
INP-KEY2
INP-SUMVARX
INP-SUMVAR
1 6
1
5
8 30
38 11
INP-SUMVARX
A
4 A
2 N
A
A
11 N
A
A
A
A
+1
W
12
A
ZRO-SUMVARX
ZRO-SUMVARX +1
OCCURS 12
1 A
11 N
RESET-VAR. PROC
IDXCTR = 1
DO UNTIL IDXCTR GT ARRAY-CNT
OUP-SUMVARX (IDXCTR) = ZRO-SUMVARX
IDXCTR = IDXCTR + 1
END-DO
END-PROC
//
// JCLLIB ORDER=(PRUPB.AD.JCLLIB)
// INCLUDE MEMBER=CLPUTPRM
//GO EXEC PGM=PUTPARM,
// PARM='CURRMM,C''&CURRMM'''
//STEPLIB DD DISP=SHR,DSN=&LOD
//PARM DD DSN=&&CARDS,RECFM=FB,LRECL=80,BLKSIZE=0,DISP=(,PASS)
//*
//*============================================================
//* DELETE EVERYTHING BELOW
//
// SEE ASMHCL ALSO PRUPB.R0101.APT.JCL(P846658A)
//
//* THIS IS AD.JCLLIB(CLPUTPRM)
//
//* THIS WILL CREATE &LOD(X) - CONVERTS PARM TO DATA IN DD PARM
//*
//* // JCLLIB ORDER=(... PRUPB.AD.JCLLIB ...)
//* // SET CURRMM=200701
//* // INCLUDE MEMBER=CLPUTPRM
//* //GO EXEC PGM=PUTPARM,
//* // PARM=' LISTC ENT(''PRUPB.RE.PB.HHINFO.D&CURRMM'')'
//* //STEPLIB DD DISP=SHR,DSN=&LOD
//* //PARM DD DSN=&&CARDS,RECFM=FB,LRECL=80,BLKSIZE=0,DISP=(,PASS)
//* //LC EXEC PGM=IDCAMS
//* //SYSPRINT DD=SYSOUT=*
//* //SYSIN DD DISP=(OLD,DELETE,DELETE),DSN=&&CARDS
//*
// EXEC ASMHCL
//C.SYSLIB DD
//
DD DISP=SHR,DSN=SYS1.MACLIB
//C.SYSIN DD DISP=SHR,DSN=PRUPB.AD.CTLLIB(CLPUTPRM)
//L.SYSLMOD DD DSN=&LOD(PUTPARM)
//
//* THIS IS AD.CLLLIB(CLPUTPRM)
//
* From: Perry Winter (PWINTER@UNCMVS.OIT.UNC.EDU)
* Subject: Re: Symbolic parameter substitution
* Newsgroups: bit.listserv.ibm-main
* Date: 1993-10-07 07:56:04 PST
*
* // EXEC ASMHCL,MEM=PUTPARM
* //C.SYSIN DD *
*
PUTPARM CSECT
SJK
SAVE (14,12)
STANDARD LINKAGE CONVENTION BASE12
LR
12,15
|
USING PUTPARM,12
|
LA
3,SAVAREA
|
ST
3,8(13)
|
ST
13,4(3)
|
LR
13,3
V
START
DS
0H
*
* THIS PGM WRITES 80 CHARACTER RECORDS BASED ON USER SUPPLIED PARM.
* ALL SYMBOLICS USED IN PARM ARE EXPANDED BEFORE EXECUTION OF PGM.
* THE SEMICOLON IS USED AS A RECORD SEPARATOR IN THE PARM THEREFORE
* SEVERAL 80 CHARACTER RECORDS CAN BE GENERATED FROM ONE 100 CHAR
* PARM FIELD. THE OUTPUT RECORDS ARE WRITTEN ON DDNAME PARM WHERE
* THE LRECL IS ALWAYS 80 CHARACTERS. THE USER CAN SELECT ANY BLOCKING
* FACTOR ON THE PARM DD CARD. THE OUTPUT FILE CAN BE CONCATENATED
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
BEFORE OR AFTER ANY 80 CHAR LRECL DATA FILE IN THE JOB STREAM.
$$$$$$$$$$$$$$$$$$$$
WHEN NO PARM IS SUPPLIED PUTPARM WRITES AN EOF MARKER ON PARM DD
$$$$$$$$$$$$$$$$$$$$
EXAMPLE #1
//PARMGEN EXEC PGM=PUTPARM,PARM='THIS IS A SIMPLE PARM'
//STEPLIB DD DSN=STARTEST.DEV.LOAD,DISP=SHR
//PARM DD DSN=&&TEMP,UNIT=DISK,DISP=(,PASS),
// DCB=(BLKSIZE=800,RECFM=FB)
THE FOLLOWING 80 CHARACTER RECORD IS GENERATED BY PUTPARM
THE RECORD GENERATED IS DISPLAYED BETWEEN THE GRIDS:0000+000010000+000020000+000030000+000040000+000050000+000060000+000
THIS IS A SIMPLE PARM
0000+000010000+000020000+000030000+000040000+000050000+000060000+000
EXAMPLE #2
THE FOLLOWING JCL ILLUSTRATES USE OF PUTPARM USING THE SEMICOLON
IN THE PARM TO CAUSE SEVERAL RECORDS TO BE WRITTEN BUY ONE PARM
//MYPROC PROC A=1709,B=1338
//PARMGEN EXEC PGM=PUTPARM,PARM='ABC $22.95;DEF;;01234;;&A,&B'
//STEPLIB DD DSN=STARTEST.DEV.LOAD,DISP=SHR
//PARM DD DSN=&&TEMP,UNIT=DISK,DISP=(,PASS),
// DCB=(BLKSIZE=800,RECFM=FB)
THE FOLLOWING 80 CHARACTER RECORDS ARE GENERATED BY PUTPARM
ALL SIX RECORDS GENERATED ARE DISPLAYED BETWEEN THE GRIDS:0000+000010000+000020000+000030000+000040000+000050000+000060000+000
ABC $22.95
DEF
01234
1709,1338
0000+000010000+000020000+000030000+000040000+000050000+000060000+000
SEMICOLONS IN THE PARM FORCE RECORDS TO BE WRITTEN AT THAT POINT.
ALL RECORDS WRITTEN ARE ALWAYS PADDED WITH BLANKS WHEN LESS THAN
80 NON-BLANK CHARACTERS APPEAR BETWEEN THE SEMICOLONS.
SEMICOLONS WITHOUT INTERVENING DATA FORCE WRITING OF BLANK RECORDS.
NOTE THAT RECORDS THREE AND FIVE ARE BLANK BECAUSE THE DOUBLE
SEMICOLON IN THE PARM FORCED THE BLANK RECORD TO BE WRITTEN.
SYMBOLIC PARAMETERS &A AND &B ARE RESOLVED BY THE VALUES IN THE
PROC STATEMENT AND APPEAR IN THE LAST OF THE SIX RECORDS WRITTEN
BY PUTPARM. ALL OF THE SIX RECORDS CHOSEN BY THIS PARTICULAR
PARM HAVE THE AUTOMATIC BLANK PADDING AT THE END OF EACH RECORD.
PRINT
L
LH
LTR
BZ
WTO
BCTR
EX
MVC
WTOPARM WTO
ON,NOGEN
R2,0(R1)
POINT R2 TO PARM
R3,0(R2)
GET PARM LEN IN R3
R3,R3
IS THE PARM LEN ZERO
NOPARM
THEN OPEN/CLOSE AND RETURN
'PUTPARM USER PARM FOLLOWS',ROUTCDE=(11)
R3,0
MINUS ONE FROM PARM LEN FOR EXEC
R3,MVC
EXECUTE THE MOVE TO SAVE PARM
WTOPARM+8(100),SAVPARM SHOW USER HIS PARM
'
X
',ROUTCDE=(11)
NEXTCHAR
NEWREC
EOJ
RETURN
OUTPARM
NOPARM
PARM
MVC
SAVPARM
SAVAREA
LA
R3,1(R3)
RESTORE ORIGINAL PARM LEN
LA
R4,SAVPARM
POINT TO SAVED PARM
LA
R5,OUTPARM
POINT TO OUTPUT PARM REC
OPEN (PARM,OUTPUT)
CLI 0(R4),X'5E'
SEMICOLON IS THIS END OF REC
BE
NEWREC
WRITE THIS RECORD
MVC 0(1,R5),0(R4)
NON END-OF-REC CHAR TO OUTPARMRM
LA
R4,1(R4)
STEP TO NEXT PARM CHAR
LA
R5,1(R5)
STEP TO NEXT OUTPARM CHAR
BCT R3,NEXTCHAR
MINUS ONE LEN TEST NEXT CHAR
B
EOJ
PARM LEN IS ZERO WRITE LAST REC
PUT PARM,OUTPARM
FOUND SEMI WRITE RECORD
MVC OUTPARM(80),=CL80' '
CLR IT FOR NEXT RECORD
LA
R4,1(R4)
STEP TO NEXT PARM CHAR
LA
R5,OUTPARM
POINT TO BEGNNNG OF NEW OUTPARM
BCT R3,NEXTCHAR
TEST NEXT CHAR IF ANY
B
RETURN
GO BACK - NO MORE CHARS
PUT PARM,OUTPARM
WRITE LAST 80 CHAR PARM REC
CLOSE PARM
CLOSE THE PARM FILE
L
R13,SAVAREA+4
RETURN (14,12),RC=0
DC
CL80' '
OPEN (PARM,OUTPUT)
WTO 'NO PARM SUPPLIED - EOF WRITTEN ON PARM DD',ROUTCDE=11
B
RETURN
DCB DDNAME=PARM,DSORG=PS,MACRF=(PM),LRECL=80
MVC SAVPARM(1),2(R2)
EXECUTED MOVE
DC
CL100' '
SAVED USER PARM
DS
18F
REG SAVE AREA
YREGS
SJK
END PUTPARM
CSV TO MAIL
// INCLUDE MEMBER=CLPUTPRM
//GO EXEC PGM=PUTPARM,
// PARM='CURRDT,C''&CURRDT'';OPRNUM,C''&OPRNUM'';SK,C'','''
//STEPLIB DD DISP=SHR,DSN=&LOD
//PARM DD DSN=&&CARDS,RECFM=FB,LRECL=80,BLKSIZE=0,DISP=(,PASS)
//*
//*
//DEL030 EXEC PGM=IKJEFT01,
// PARM=' DEL ''PRUPB.AD.P&OPRNUM..CSV'''
<== CSV
//SYSTSIN DD DUMMY
//SYSTSPRT DD SYSOUT=*
//*
//STP030 EXEC PGM=SORT
//SYMNAMES DD DISP=SHR,DSN=&&CARDS
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=&INFILE,
//
DISP=SHR
//SORTOUT DD DSN=PRUPB.AD.P&OPRNUM..CSV,
// UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
// DISP=(,CATLG,DELETE)
//SYSIN DD *
OUTFIL REMOVECC,FNAMES=SORTOUT,
HEADER1=('AU',SK,'STORE',SK,'TRANDATE',SK,'TR',SK,'TRANTYP',
SK,'COUNT',
80:X),
OUTREC=(1,5,SK,6,25,SK,35,2,C'-',37,2,C'-',31,4,
SK,39,2,SK,41,4,SK,45,7,
80:X)
SORT FIELDS=COPY
//GENSUB EXEC PGM=SORT
//SYMNAMES DD DISP=SHR,DSN=&&CARDS
//SYSOUT DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=PRUPB.AD.CTLLIB(DUMMY)
//SORTOF1 DD DSN=&&SUBJLINE,
// UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
// DISP=(,PASS,DELETE)
//SORTOF2 DD DSN=&&CSVNAME,
// UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
// DISP=(,PASS,DELETE)
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=1,
OUTREC=(C'SUBJECT: EXTRACT P',OPRNUM,
C' RUNDATE T',CURRDT,
C'.CSV',80:X)
OUTFIL FILES=2,
OUTREC=(C'CONTENT-DISPOSITION: ATTACHMENT; ',
C'FILENAME="T',CURRDT,
C'.CSV"',
80:X,/,C' ')
.* BLANK LINE - NECESSARY
//*
//SMTP
EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=(C,SMTP44)
//SYSIN
DD DSN=SYSPL.CTLLIB(PB#COPYS),DISP=SHR
//SORTIN DD *
HELO SMTP.XXX.COM
MAIL FROM: <USER@XXX.COM>
RCPT TO: <USER@XXX.COM>
DATA
TO: <USER@XXX.COM>
FROM: <USER@XXX.COM>
// DD DISP=(OLD,DELETE),DSN=&&SUBJLINE
// DD *
MIME-VERSION: 1.0
CONTENT-TYPE: MULTIPART/MIXED; BOUNDARY=NEXTBITSTRING_8765R443
--NEXTBITSTRING_8765R443
CONTENT-TYPE: TEXT/PLAIN
PLEASE REMEMBER TO SAVE THIS CSV FILE AS XLS WHEN YOU ARE DONE.
THIS EMAIL WAS AUTOMATICALLY SENT BY
MAINFRAME JOB PRUPB.R0101.JCL(P422849U).
--NEXTBITSTRING_8765R443
CONTENT-TYPE: APPLICATION/EXCEL; CHARSET="US-ASCII"
// DD DISP=(OLD,DELETE),DSN=&&CSVNAME
// DD DISP=SHR,DSN=PRUPB.AD.P&OPRNUM..CSV
// DD *
--NEXTBITSTRING_8765R443-//
*
OUTFIL FNAMES=SORTOUT,
INCLUDE=(45,1,CH,EQ,C'Y'),
OUTREC=(1,5,6,8,
14,8,22,8,
30,5,35,5,
40,5,
*
* -- COMPUTE AVG CSTIME = SECONDS / #-902 / 60
40,5,PD,MUL,+100,DIV,35,5,PD,DIV,+60,TO=PD,LENGTH=5)
//SORTOUT DD DSN=PRUPB.AD.P1664645.SORTCTL.TPOCX,
// UNIT=SYSDA,SPACE=(TRK,(1,1),RLSE),
// RECFM=FB,LRECL=80,BLKSIZE=0,
// DISP=(,CATLG,DELETE)
//*