Вы находитесь на странице: 1из 12

INPUT-OUTPUT SECTION.

*---------------------FILE-CONTROL.
SELECT DSPSCREEN ASSIGN TO WORKSTATION-SFL009D1-SI
ACCESS IS DYNAMIC
ORGANIZATION IS TRANSACTION
RELATIVE KEY IS WS-SFLRRN
FILE STATUS IS WS-DSP-STATUS.
*****************************************************************
SELECT DBFILE ASSIGN TO DATABASE-DBFILE
ACCESS IS DYNAMIC
ORGANIZATION IS INDEXED
RECORD KEY IS EXTERNALLY-DESCRIBED-KEY
FILE STATUS IS WS-PERSFILE-STATUS.
*****************************************************************
DATA DIVISION.
*---------------FILE SECTION.
FD DSPSCREEN.
01 DSPRECD

PIC X(1920).

FD DBFILE.
*

LABEL RECORDS ARE STANDARD.


01 DBFILE-REC.
COPY DDS-ALL-FORMATS OF DBFILE.

***********************************************************
WORKING-STORAGE SECTION.

*-------------------------01 BOOLEAN-VARIABLES-USED.
*----------------------------05 WS-EOF-X4A300H

PIC 1.

88 NOT-EOF-X4A300H
88 EOF-X4A300H

VALUE B'0'.
VALUE B'1'.

05 WS-FIRST-TIME

PIC 1.

88 NOT-FIRST-TIME

VALUE B'0'.

88 FIRST-TIME

VALUE B'1'.

**********PROGRAM VARIABLES USED*****************************

01 WS-DSP-STATUS

PIC X(02)

01 WS-PERSFILE-STATUS

VALUE SPACES.

PIC X(02)

VALUE SPACES.

01 WS-EOF

PIC X(1)

VALUE "N".

01 WS-BOF

PIC X(1)

VALUE "N".

01 WS-CNT

PIC 9(4)

VALUE 0.

01 WS-SFLRRN

PIC 9(05)

VALUE 0.

01 WS-FIRSTREC

PIC 9(06)

VALUE 0.

01 WS-LASTREC

PIC 9(06)

VALUE 0.

01 WS-SFL-MAX

PIC 9(05)

VALUE 5.

01 WS-FILLER.
COPY DDS-M3SFL

OF SFL009D1.

COPY DDS-M3CTL-I

OF SFL009D1.

COPY DDS-M3CTL-O
COPY DDS-FOOTER-O

OF SFL009D1.
OF SFL009D1.

***************************************************
1 WS-INDC-USAGE.
05 F03-EXIT

PIC 99

05 F12-CANCEL
05 SFLCLR

VALUE 03.

PIC 99
PIC 99

05 SFLDSPCTL

VALUE 12.
VALUE 40.

PIC 99

VALUE 41.

05 SFLDSP

PIC 99

VALUE 42.

05 SFLEND

PIC 99

VALUE 49.

05 ROLLUP-CA01

PIC 99

05 ROLLDOWN-CA02
05 ROLLUP

05 ND

PIC 99

PIC 99

05 ROLLDOWN

VALUE 01.

VALUE 07.

PIC 99
PIC 99

VALUE 02.

VALUE 08.

VALUE 80.

01 WS-INDIC-AREA.
05 WS-INDIC-TABLE

PIC 1 OCCURS 99 TIMES.

88 INDIC-OFF

VALUE B"0".

88 INDIC-ON

VALUE B"1".

*********************************************************
*-------------------PROCEDURE DIVISION.
*-------------------******************************************
* THIS IS THE MAIN ROUTINE OF THE PROGRAM *
******************************************
CALL "SYSPFKEYS".

PERFORM I1000-INITSFL.
PERFORM P2000-INITIAL-POINTER-SETTING.
PERFORM P3000-LOAD-SUBFILE.
PERFORM D4000-DISPLAY.
PERFORM Z9999-CLOSE-FILES.
GOBACK.
*********************************************************
*-------------------------P2000-INITIAL-POINTER-SETTING SECTION.
*-------------------------READ DBFILE NEXT RECORD.
MOVE ACEID OF DBFILE-REC TO WS-FIRSTREC.
MOVE 0 TO WS-SFLRRN.
START DBFILE KEY IS >= EXTERNALLY-DESCRIBED-KEY
INVALID KEY
SET EOF-X4A300H TO TRUE
NOT INVALID KEY
SET NOT-EOF-X4A300H TO TRUE
END-START.
*

PERFORM P3000-LOAD-SUBFILE.

PERFORM D4000-DISPLAY.

****************************************************************
*---------------P3000-USER-INPUT SECTION.
*------------------*CHECK FOR PAGEUP AND PAGEDOWN

*------------------IF INDIC-ON(ROLLUP) OR INDIC-ON(ROLLUP-CA01)


IF WS-BOF = "Y"
MOVE "REACHED THE TOP OF FILE" TO ERRMSG OF FOOTER-O
ELSE
PERFORM ROLLUP-ROUTINE
PERFORM I1000-INITSFL
PERFORM P3000-LOAD-SUBFILE
SET INDIC-OFF(ROLLUP) TO TRUE
SET INDIC-OFF(ROLLUP-CA01) TO TRUE
END-IF
END-IF.

IF INDIC-ON(ROLLDOWN) OR INDIC-ON(ROLLDOWN-CA02)
IF WS-EOF = "Y"
MOVE "REACHED THE BOTTOM OF THE FILE" TO
ERRMSG OF FOOTER-O
ELSE
PERFORM ROLLDOWN-ROUTINE
PERFORM I1000-INITSFL
PERFORM P3000-LOAD-SUBFILE
SET INDIC-OFF(ROLLDOWN) TO TRUE
SET INDIC-OFF(ROLLDOWN-CA02) TO TRUE
END-IF
END-IF.
********CHECKING FOR F3 = EXIT****************************

IF INDIC-ON(F03-EXIT)
PERFORM Z9999-CLOSE-FILES
GOBACK
END-IF.
PERFORM D4000-DISPLAY.
**********************************************************
******ROLL DOWN ROUTINE***********************************
**********************************************************
-------------ROLLDOWN-ROUTINE SECTION.
-------------MOVE SPACES TO ERRMSG OF FOOTER-O.
WRITE DSPRECD
FROM FOOTER-O
FORMAT FOOTER-O
END-WRITE.
MOVE 'N' TO WS-BOF.
MOVE WS-LASTREC TO ACEID OF DBFILE-REC.
START DBFILE KEY IS >= EXTERNALLY-DESCRIBED-KEY
INVALID KEY
SET EOF-X4A300H TO TRUE
NOT INVALID KEY
SET NOT-EOF-X4A300H TO TRUE
END-START.

********************************************************
*********ROLL UP ROUTINE********************************
*-------------ROLLUP-ROUTINE SECTION.
*-------------MOVE SPACES TO ERRMSG OF FOOTER-O.
WRITE DSPRECD
FROM FOOTER-O
FORMAT "FOOTER"
END-WRITE.
MOVE WS-FIRSTREC TO ACEID OF DBFILE-REC
START DBFILE KEY IS EQUAL TO
EXTERNALLY-DESCRIBED-KEY

READ DBFILE PRIOR RECORD


AT END
MOVE 'Y' TO WS-BOF
SET EOF-X4A300H TO TRUE
MOVE 'REACHED THE TOP OF FILE' TO ERRMSG OF FOOTER-O
NOT AT END
SET NOT-EOF-X4A300H TO TRUE
CONTINUE
END-READ.
IF WS-BOF = 'N'
PERFORM PAGE-POSITIONING-ROUTINE
END-IF.

*****************************************************************
********PERFORM PAGE POSITIONING**********************************
*****************************************************************
*---------------PAGE-POSITIONING-ROUTINE SECTION.
*---------------COMPUTE WS-CNT = 5.
PERFORM UNTIL NOT-EOF-X4A300H AND WS-CNT = 1
COMPUTE WS-CNT = WS-CNT - 1
READ DBFILE PRIOR RECORD
AT END
SET EOF-X4A300H TO TRUE
NOT AT END
MOVE ACEID OF DBFILE-REC TO WS-FIRSTREC
END-READ
END-PERFORM.
SET NOT-EOF-X4A300H TO TRUE.
MOVE WS-FIRSTREC TO ACEID OF DBFILE.
START DBFILE KEY >= EXTERNALLY-DESCRIBED-KEY.

******************************************************************
*********INITIALIZE RECORDS, INDICATORS AND CLEAR THE SUBFILE*****
*--------------I1000-INITSFL

SECTION.

*--------------OPEN I-O

DSPSCREEN

DBFILE.
IF WS-BOF = "N"
INITIALIZE M3CTL-O
INITIALIZE M3SFL
INITIALIZE WS-INDIC-AREA
SET INDIC-OFF(SFLDSP) TO TRUE
SET INDIC-OFF(ND) TO TRUE
SET INDIC-ON(SFLCLR) TO TRUE
MOVE 0 TO WS-SFLRRN
MOVE SPACES TO ERRMSG OF FOOTER-O
WRITE DSPRECD
FROM FOOTER-O
FORMAT "FOOTER"
END-WRITE
WRITE SUBFILE DSPRECD
FROM

M3CTL-O

FORMAT

"M3CTL"

INDICATORS WS-INDIC-AREA
END-WRITE
SET INDIC-OFF(SFLCLR) TO TRUE
END-IF.
******************************************************************
**********LOAD THE SUBFILE FROM THE PHYSICAL FILE*****************
*-----------------------P3000-LOAD-SUBFILE SECTION.
*------------------------

MOVE 'SFL009I' TO PGMID OF M3CTL-O.


MOVE 'PLU0100A' TO JOBID OF M3CTL-O.
SET INDIC-OFF(SFLEND) TO TRUE.
SET FIRST-TIME TO TRUE.

IF NOT-EOF-X4A300H
MOVE 1 TO WS-CNT
PERFORM UNTIL EOF-X4A300H OR WS-CNT > 6
READ DBFILE NEXT RECORD
AT END
SET EOF-X4A300H TO TRUE
MOVE "Y" TO WS-EOF
NOT AT END
MOVE "N" TO WS-EOF
IF FIRST-TIME
MOVE ACEID OF DBFILE-REC TO WS-FIRSTREC
SET NOT-FIRST-TIME TO TRUE
END-IF
COMPUTE WS-SFLRRN = WS-SFLRRN + 1
MOVE ACEID OF DBFILE-REC TO D1ACEID OF M3SFL
MOVE ITEM OF DBFILE-REC TO D1ITEM OF M3SFL
MOVE BUYER OF DBFILE-REC TO D1BUY
END-READ

WRITE SUBFILE DSPRECD


FROM

M3SFL

OF M3SFL

FORMAT

"M3SFL"

END-WRITE
MOVE D1ACEID OF M3SFL TO WS-LASTREC
COMPUTE WS-CNT = WS-CNT + 1
END-PERFORM
END-IF.
IF EOF-X4A300H AND INDIC-ON(ROLLDOWN)
START DBFILE KEY IS >= EXTERNALLY-DESCRIBED-KEY
MOVE 'Y' TO WS-EOF
SET INDIC-ON(SFLEND) TO TRUE
END-IF.
***********************************************************
*******DISPLAY THOSE SUBFILES UNTIL A F3 OR F12 IS PRESSED
***********************************************************
*-----------------------D4000-DISPLAY SECTION.
*-----------------------PERFORM UNTIL
(INDIC-ON(F03-EXIT)) OR
(INDIC-ON(F12-CANCEL))
*

MOVE 1 TO M3RRN OF M3CTL-O


SET INDIC-ON(SFLDSP)

TO TRUE

SET INDIC-ON(SFLDSPCTL) TO TRUE


WRITE DSPRECD
FROM FOOTER-O
FORMAT 'FOOTER'

END-WRITE

WRITE SUBFILE DSPRECD FROM M3CTL-O


FORMAT 'M3CTL'
INDICATORS ARE WS-INDIC-AREA
END-WRITE
READ DSPSCREEN INTO M3CTL-O FORMAT 'M3CTL'
END-READ
SET INDIC-OFF(SFLDSPCTL) TO TRUE
PERFORM P3000-USER-INPUT
END-PERFORM.
*****************************************
*-------------------Z9999-CLOSE-FILES SECTION.
*-------------------CLOSE DSPSCREEN
DBFILE.
GOBACK.

Вам также может понравиться