Typical DCL Command Procedure to set up the program :
$!
$! BO-PURGE-BILLS.COM
$!
$! Description: Will purge the bill file of those that do not need
$! to be sent out.
$!
$ SAY := WRITE SYS$OUTPUT
$ ASSIGN Z$PRT:BBB312RPT.PRT BILLIN
$ ASSIGN Z$PRT:BBB312RPT.SAV BILLOUT
$!
$ CL
$ SAY "Please wait while SIS bill purge program runs..."
$ SAY " "
$ RUN EXE:BO-PURGE-BILLS
$!
$! Rename resulting file back to original name and copy into
$! user's account
$!
$ SAY " "
$ SAY "Finished..."
$ SAY " "
$ WAIT 00:00:05
$ REN Z$PRT:BBB312RPT.SAV Z$PRT:BBB312RPT.PRT;
$ USER = F$EDIT(F$GETJPI("","USERNAME"),"UPCASE,COLLAPSE")
$ OLDFILE = "Z$PRT:BBB312RPT.PRT;"
$ NEWFILE = "SYS$LOGIN:*.*;"
$ COPY 'OLDFILE' 'NEWFILE'
$!
$ EXIT
COBOL program :
IDENTIFICATION DIVISION.
PROGRAM-ID. BO-PURGE-BILLS.
AUTHOR. ME.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ALPHA-4000.
OBJECT-COMPUTER. ALPHA-4000.
INPUT-OUTPUT SECTION.
********************************************************************
* *
* This program will purge the bill file of those that do not need *
* to be sent out. *
* *
********************************************************************
FILE-CONTROL.
SELECT BILL-FILE-IN ASSIGN TO BILLIN.
SELECT BILL-FILE-OUT ASSIGN TO BILLOUT.
DATA DIVISION.
FILE SECTION.
FD BILL-FILE-IN
LABEL RECORDS ARE STANDARD
RECORD CONTAINS 110 CHARACTERS.
01 BILL-RECORD-IN PIC X(110).
FD BILL-FILE-OUT
LABEL RECORDS ARE STANDARD
RECORD CONTAINS 110 CHARACTERS.
01 BILL-RECORD-OUT PIC X(110).
WORKING-STORAGE SECTION.
01 WS-FD-BILL-RECORD.
05 WS-FD-BILL-DATA OCCURS 41 TIMES INDEXED BY BILL-INDEX.
07 FILLER PIC X(18).
07 WS-FD-BILL-SUBCD PIC X(05).
07 WS-FD-BILL-TEXT PIC X(20).
07 FILLER PIC X(26).
07 WS-FD-DUE PIC X(1) OCCURS 12 TIMES
INDEXED BY DUE-INDEX.
07 FILLER PIC X(29).
01 WS-FND-SUBCD PIC X.
01 WS-FND-TEXT PIC X.
01 WS-FND-NEG PIC X.
01 WS-FND-AMT PIC X.
01 WS-END-FILE PIC X.
01 WS-REC-CNT PIC 9(4).
PROCEDURE DIVISION.
000-START-PROCESSING.
OPEN INPUT BILL-FILE-IN
OUTPUT BILL-FILE-OUT.
MOVE ZEROS TO WS-REC-CNT.
MOVE "N" TO WS-END-FILE.
PERFORM 100-PROCESS-FILE UNTIL WS-END-FILE IS EQUAL TO "Y".
CLOSE BILL-FILE-IN
BILL-FILE-OUT.
**
** Display number of resulting bills.
**
DISPLAY "*******************************".
DISPLAY "The total number of bills is".
DISPLAY WS-REC-CNT.
DISPLAY "*******************************".
STOP RUN.
**
** Process each bill to determine if it should be kept or not.
**
100-PROCESS-FILE.
SET BILL-INDEX TO 1.
PERFORM 200-LOAD-BILL 41 TIMES.
IF WS-END-FILE IS EQUAL TO "N"
MOVE "N" TO WS-FND-SUBCD
SET BILL-INDEX TO 1
PERFORM 300-FIND-SUBCD 41 TIMES
IF WS-FND-SUBCD IS EQUAL TO "Y"
NEXT SENTENCE
ELSE
MOVE "N" TO WS-FND-TEXT
SET BILL-INDEX TO 1
PERFORM 400-FIND-TEXT 41 TIMES
IF WS-FND-TEXT IS EQUAL TO "Y"
SET BILL-INDEX TO 1
PERFORM 500-WRITE-BILL 41 TIMES
ADD 1 TO WS-REC-CNT
ELSE
MOVE "N" TO WS-FND-AMT
SET BILL-INDEX TO 1
PERFORM 600-FIND-AMT 41 TIMES
IF (WS-FND-AMT IS EQUAL TO "Y") AND
(WS-FND-NEG IS EQUAL TO "N")
SET BILL-INDEX TO 1
PERFORM 500-WRITE-BILL 41 TIMES
ADD 1 TO WS-REC-CNT.
**
** Read in each individual bill from file.
**
200-LOAD-BILL.
IF WS-END-FILE IS EQUAL TO "N"
SET BILL-INDEX UP BY 1
READ BILL-FILE-IN INTO WS-FD-BILL-DATA(BILL-INDEX - 1)
AT END
MOVE "Y" TO WS-END-FILE.
**
** Determine if this bill is getting financial aid and the student has
** been by the business office; these bills are purged.
**
300-FIND-SUBCD.
IF WS-FD-BILL-SUBCD(BILL-INDEX) IS EQUAL TO "99999"
MOVE "Y" TO WS-FND-SUBCD.
SET BILL-INDEX UP BY 1.
**
** Determine if this bill is getting financial aid and the student has
** not been by the business office; these bills are kept.
**
400-FIND-TEXT.
IF WS-FD-BILL-TEXT(BILL-INDEX) IS EQUAL TO " EST. FINANCIAL AID "
MOVE "Y" TO WS-FND-TEXT.
SET BILL-INDEX UP BY 1.
**
** If it is determined that this bill is to be kept, write out to
** temporary bill file.
**
500-WRITE-BILL.
WRITE BILL-RECORD-OUT FROM WS-FD-BILL-DATA(BILL-INDEX).
SET BILL-INDEX UP BY 1.
**
** Check to see if amount due is positive or negative; if positive
** amount, keep bill.
**
600-FIND-AMT.
IF WS-FD-BILL-TEXT(BILL-INDEX) IS EQUAL TO " CURRENT DUE: "
MOVE "N" TO WS-FND-NEG
SET DUE-INDEX TO 1
PERFORM 700-CHK-AMT 12 TIMES
IF WS-FND-NEG IS EQUAL TO "N"
IF (WS-FD-DUE(BILL-INDEX,8) IS EQUAL TO " ") AND
(WS-FD-DUE(BILL-INDEX,9) IS EQUAL TO "0") AND
(WS-FD-DUE(BILL-INDEX,10) IS EQUAL TO ".") AND
(WS-FD-DUE(BILL-INDEX,11) IS EQUAL TO "0") AND
(WS-FD-DUE(BILL-INDEX,12) IS EQUAL TO "0")
NEXT SENTENCE
ELSE
MOVE "Y" TO WS-FND-AMT.
SET BILL-INDEX UP BY 1.
700-CHK-AMT.
IF WS-FD-DUE(BILL-INDEX,DUE-INDEX) IS EQUAL TO "-"
MOVE "Y" TO WS-FND-NEG.
SET DUE-INDEX UP BY 1.
This page hosted by
Get your own Free Homepage