Академический Документы
Профессиональный Документы
Культура Документы
*---------------------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.
*
***********************************************************
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'.
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
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(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
*****************************************************************
********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.
*------------------------
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
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))
*
TO TRUE
END-WRITE