Quikjob Code
*************************************************
* SYSTEM.....: ACCT32
* LANGUAGE...: QUIKJOB
* PROGRAM....: QKJ02187
* DESCRIPTION: THIS PROGRAM READS A FILE
* WITH ALPHANUMERIC DOLLAR AMOUNTS AND CONVERTS
* THE DOLLAR AMOUNTS TO A NUMERIC FORMAT,
* SO THEY CAN BE SUMMED TOGETHER IN A SYNCSORT.
*
*------------------------------------------------
* C H A N G E S
* DATE PGMR DESCRIPTION
*------------------------------------------------
*
*************************************************
*************************************************
* INPUT
*************************************************
EQU AQ-RECORD INF1-710 /*STARTING POS
EQU AQ-AMT1 INF472-488
EQU AQ-AMT2 INF513-529
*************************************************
* OUTPUT
*************************************************
EQU O-RECORD OFA1 /*STARTING POS
*************************************************
* WORKING STORAGE
*************************************************
EQU WORKINGSTORAGE WST
EQU WS-SPACE (01) SPACE /* BUILD NEW NUM
EQU WS-NEW-AMT (17) SPACES /* BUILD NEW NUM
EQU WS-NEW-AMTX (WS-SPACE)
EQU WS-NEW-FILLER (16)
EQU WS-NEW-END (01)
EQU WS-NEG-SW (01) C'N' /* NEGATIVE SW
*************************************************
* PROCEDURE DIVISION
*************************************************
* READ INPUT REORD
*------------------------------------------------
010 GET INF ATEND EOJ
*------------------------------------------------
* CONVERT AMOUNT1 TO NEW FORMAT
*------------------------------------------------
MOVE AQ-AMT1 TO WS-NEW-AMT
PERFORM 500 THRU 509
MOVE WS-NEW-AMT TO AQ-AMT1
*------------------------------------------------
* CONVERT AMOUNT2 TO NEW FORMAT
*------------------------------------------------
MOVE AQ-AMT2 TO WS-NEW-AMT
PERFORM 500 THRU 509
MOVE WS-NEW-AMT TO AQ-AMT2
*------------------------------------------------
* WRITE INPUT RECORD TO OUTPUT
*------------------------------------------------
MOVE AQ-RECORD TO O-RECORD
WRITE OFA
GOTO 010
*************************************************
* PERFORMED ROUTINES
*************************************************
500
*------------------------------------------------
* SET INDEX POINTER "PTA" TO RIGHT MOST
* POSITION OF 'NEW' FIELD
*------------------------------------------------
SET PTA WS-NEW-END
*------------------------------------------------
* SET INDEX POINTER "PTR" TO RIGHT MOST
* DIGIT OF OLD NUMBER.
*------------------------------------------------
WHEN WS-NEW-AMT INCLUDES NONBLANK REVERSE
GOTO 502.
ABEND 1111 /* SHOULD ALWAYS BE SOMETHING
502
*------------------------------------------------
* IF OLD NUM IS NEGATIVE, SET SWITCH CLEAR SIGN.
*------------------------------------------------
IF PTR1 = C'-'
MOVE C'Y' TO WS-NEG-SW
MOVE SPACE TO PTR1.
*------------------------------------------------
* IF ALL OF OLD NUMBER HAS BEEN SHIFTED, GOTO 505.
*------------------------------------------------
IF PTR1 = SPACE
GOTO 505.
*------------------------------------------------
* IF CHARACTER IN OLD NUMBER IS NOT A DECIMAL,
* MOVE NUMBER TO NEW LOCATION.
*------------------------------------------------
IF PTR1 NOT = C'.'
MOVE PTR1 TO PTA1 /* MOVE OLD NUM TO NEW LOC
MOVE SPACE TO PTR1 /* CLEAR OLD NUM LOCATION
SET PTR DOWN 1 /* SET INDEX DOWN 1 BYTE
SET PTA DOWN 1 /* SET INDEX DOWN 1 BYTE
GOTO 502.
*------------------------------------------------
* IF CHARACTER IN OLD NUMBER IS A DECIMAL,
* SET INDEX POINTER DOWN 1 BYTE AND GO TO 502 LOOP.
*------------------------------------------------
MOVE SPACE TO PTR1
SET PTR DOWN 1
GOTO 502.
505
*------------------------------------------------
* AFTER ALL OF OLD NUMBER HAS BEEN SHIFTED,
* FILE NEW NUMBER WITH LEADING ZEROS.
*------------------------------------------------
WHEN WS-NEW-AMT INCLUDES SPACE
MOVE ZERO TO PTR1
GOTO 505.
*------------------------------------------------
* IF NEGATIVE SWITCH IS "Y"ES,
* MULTIPLY NEW NUMBER BY -1
*------------------------------------------------
IF WS-NEG-SW = C'Y'
MOVE C'N' TO WS-NEG-SW
MULT WS-NEW-AMT 0D BY C'-1' 0D
GIVING WS-NEW-AMT 0D.
*------------------------------------------------
* ROUTINE EXIT
*------------------------------------------------
509 EXIT
*------------------------------------------------
END
|
Spectrum Writer Code
****************************************************
* SYSTEM.....: ACCT32
* LANGUAGE...: SPECTRUM WRITER
* PROGRAM....: QKJ02187
* DESCRIPTION: THIS PROGRAM READS A FILE
* WITH ALPHANUMERIC DOLLAR AMOUNTS AND CONVERTS
* THE DOLLAR AMOUNTS TO A NUMERIC FORMAT,
* SO THEY CAN BE SUMMED TOGETHER IN A SYNCSORT.
*
* NOTE: SPECTRUM WRITER'S PICTURE FORMAT
* AUTOMATICALLY DOES THE REFORMATTING FOR US.
* WE JUST SPECIFY THE INPUT AND OUTPUT FORMATS
*
* NOTE: SPECTRUM WRITER COULD ALSO GO AHEAD AND DO
* THE SORT AND SUMMARIZATION IN THIS SAME STEP,
* ELIMINATING THE SYNCSORT STEP IN THE
* QUIKJOB JOB.
*----------------------------------------------------
* C H A N G E S
* DATE PGMR DESCRIPTION
*----------------------------------------------------
*
****************************************************
****************************************************
* OUTPUT IS A MAINFRAME FILE, NOT A REPORT
* (NO TITLES WANTED, NO SPACES BETWEEN COLS, ETC.)
****************************************************
OPTION: MAINFRAME
****************************************************
* SPECTRUM WRITER FILE DEFINITION STMTS FOR: INF
****************************************************
FILE: INF DDNAME(INF) LRECL(1010)
*
FIELD: PART1 LEN(471)
FIELD: AQ-AMT1 LEN(17) TYPE(NUM) DEC(2)
FIELD: PART2 LEN(25)
FIELD: AQ-AMT2 LEN(17) TYPE(NUM) DEC(2)
FIELD: PART3 LEN(80)
****************************************************
* NAME THE INPUT FILE FOR THIS RUN.
* (IT IS THE FILE WE JUST DEFINED.)
****************************************************
INPUT: INF
****************************************************
* SPECIFY THE FIELDS TO WRITE TO THE OUTPUT RECORD
****************************************************
COLUMNS: PART1 /* INPUT REC UP TO AMT1 */
AQ-AMT1(PIC'999999999999999V99')
PART2 /* INPUT REC BETWEEN AMOUNTS */
AQ-AMT2(PIC'999999999999999V99')
PART3 /* INPUT REC AFTER AMT2 */
|