I am creating a COBOL application using the screen section (Library where you can lend books).
How I can create a scrollable list using Screen Section? Can it be implemented so that you can scroll through that list using certain keys?
In my application I have screens where lists are displayed but there I am displaying a limited number of items and then a key has to be pressed to see further items.
But now I have a more complex situation.
This is the code I would like to "convert" into the screen section mode:
IDENTIFICATION DIVISION.
PROGRAM-ID. RETBOOK.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY "SLCUST.cbl".
COPY "SLBOOK.cbl".
COPY "SLLOAN.cbl".
DATA DIVISION.
FILE SECTION.
COPY "FDCUST.cbl".
COPY "FDBOOK.cbl".
COPY "FDLOAN.cbl".
WORKING-STORAGE SECTION.
COPY "WSALPHA".
77 A-PAUSE PIC X.
77 LOAN-FILE-AT-END PIC X.
77 THE-CUSTOMER-ID PIC 9(5).
77 THE-CUSTOMER-LAST-NAME PIC X(20).
77 THE-CUSTOMER-FIRST-NAME PIC X(20).
77 THE-BOOK-TO-RETURN-ID PIC 9(5).
77 LOAN-FOUND PIC X.
PROCEDURE DIVISION.
PROGRAM-BEGIN.
PERFORM DO-RETURN.
PROGRAM-EXIT.
EXIT PROGRAM.
PROGRAM-DONE.
STOP RUN.
OPEN-FILES.
OPEN I-O CUSTOMER-FILE.
OPEN I-O BOOK-FILE.
OPEN I-O LOAN-FILE.
CLOSE-FILES.
CLOSE CUSTOMER-FILE.
CLOSE BOOK-FILE.
CLOSE LOAN-FILE.
DO-RETURN.
PERFORM OPEN-FILES.
PERFORM FIND-CUSTOMER.
PERFORM DISPLAY-LOANED-BOOK-IDS.
IF LOAN-FOUND = "Y"
PERFORM RETURN-BOOK
ELSE
DISPLAY "No loans available".
PERFORM CLOSE-FILES.
FIND-CUSTOMER.
PERFORM ENTER-CUSTOMER-ID.
PERFORM GET-CUSTOMER-BY-ID.
ENTER-CUSTOMER-ID.
DISPLAY "Enter id of customer to find.".
ACCEPT THE-CUSTOMER-ID.
GET-CUSTOMER-BY-ID.
CALL "CUSTBYID" USING THE-CUSTOMER-ID.
DISPLAY "Press any key to continue.".
ACCEPT A-PAUSE.
DISPLAY-LOANED-BOOK-IDS.
PERFORM FIND-LENT-BOOKS-OF-CUSTOMER.
FIND-LENT-BOOKS-OF-CUSTOMER.
PERFORM READ-CUSTOMER-DATA.
PERFORM DISPLAY-CUSTOMER-DATA.
PERFORM INIT-DATA.
MOVE CUSTOMER-ID TO LOAN-CUSTOMER.
PERFORM READ-LOAN-DATA.
INIT-DATA.
MOVE SPACES TO LOAN-RECORD.
READ-CUSTOMER-DATA.
MOVE THE-CUSTOMER-ID TO CUSTOMER-ID.
READ CUSTOMER-FILE RECORD
INVALID KEY
DISPLAY "CUSTOMER NOT FOUND".
READ-LOAN-DATA.
MOVE "Y" TO LOAN-FOUND
START LOAN-FILE
KEY = LOAN-CUSTOMER
INVALID KEY
DISPLAY "No lent books."
MOVE "N" TO LOAN-FOUND
MOVE "Y" TO LOAN-FILE-AT-END
END-START.
PERFORM READ-NEXT-LOAN-DATA
UNTIL LOAN-FILE-AT-END = "Y".
READ-NEXT-LOAN-DATA.
IF LOAN-CUSTOMER = CUSTOMER-ID
READ LOAN-FILE NEXT RECORD
AT END
MOVE "Y" TO LOAN-FILE-AT-END
PERFORM DISPLAY-LOAN-DATA
ELSE
MOVE "Y" TO LOAN-FILE-AT-END.
DISPLAY-CUSTOMER-DATA.
DISPLAY "Lent books of".
DISPLAY CUSTOMER-FIRST-NAME.
DISPLAY CUSTOMER-LAST-NAME.
DISPLAY-LOAN-DATA.
DISPLAY "Loan id : " LOAN-ID.
DISPLAY "Loan Book : " LOAN-BOOK.
RETURN-BOOK.
CALL "LOANDEL".
Code of "LOANDEL"
IDENTIFICATION DIVISION.
PROGRAM-ID. LOANDEL.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY "SLBOOK.cbl".
COPY "SLLOAN.cbl".
DATA DIVISION.
FILE SECTION.
COPY "FDBOOK.cbl".
COPY "FDLOAN.cbl".
WORKING-STORAGE SECTION.
77 THE-BOOK-ID PIC 9(5).
77 LOAN-FOUND PIC X.
77 BOOK-FOUND PIC X.
77 LOAN-KEY PIC 9(5).
PROCEDURE DIVISION.
PROGRAM-BEGIN.
OPEN I-O LOAN-FILE.
OPEN I-O BOOK-FILE.
PERFORM MAIN-PROCESS.
CLOSE LOAN-FILE.
CLOSE BOOK-FILE.
PROGRAM-EXIT.
EXIT PROGRAM.
PROGRAM-DONE.
STOP RUN.
MAIN-PROCESS.
PERFORM ENTER-BOOK-ID-TO-RETURN.
PERFORM DISPLAY-BOOK.
PERFORM FIND-LOAN.
IF LOAN-FOUND = "Y"
PERFORM DISPLAY-LOAN
PERFORM DELETE-LOAN
PERFORM MAKE-BOOK-AVAILABLE
ELSE
DISPLAY "Loan not found".
ENTER-BOOK-ID-TO-RETURN.
DISPLAY "Enter book id to return".
ACCEPT THE-BOOK-ID.
MOVE THE-BOOK-ID TO LOAN-BOOK.
MOVE THE-BOOK-ID TO BOOK-ID.
DISPLAY-BOOK.
CALL "BOOKBYID" USING THE-BOOK-ID.
FIND-LOAN.
MOVE "Y" TO LOAN-FOUND.
START LOAN-FILE
KEY = LOAN-BOOK
INVALID KEY
MOVE "N" TO LOAN-FOUND
DISPLAY "This book is not lent by the customer".
READ LOAN-FILE NEXT RECORD.
DELETE-LOAN.
DELETE LOAN-FILE RECORD
INVALID KEY
DISPLAY "Error deleting loan".
DISPLAY-LOAN.
DISPLAY "Loan to delete:".
DISPLAY "Loan id : " LOAN-ID.
DISPLAY "Loan customer : " LOAN-CUSTOMER.
DISPLAY "Loan book : " LOAN-BOOK.
DISPLAY "Loan date : " LOAN-DATE.
DISPLAY "Loan return date : " LOAN-RETURN-DATE.
MAKE-BOOK-AVAILABLE.
PERFORM FIND-BOOK.
MOVE "N" TO BOOK-LENT.
MOVE "N" TO BOOK-OVERDUE.
PERFORM SAVE-CHANGES.
FIND-BOOK.
MOVE "Y" TO BOOK-FOUND.
READ BOOK-FILE RECORD
INVALID KEY
MOVE "N" TO BOOK-FOUND.
SAVE-CHANGES.
REWRITE BOOK-RECORD
INVALID KEY
DISPLAY "Error rewriting book record".
Code of "BOOKBYID"
IDENTIFICATION DIVISION.
PROGRAM-ID. BOOKBYID.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COPY "SLBOOK.cbl".
DATA DIVISION.
FILE SECTION.
COPY "FDBOOK.cbl".
WORKING-STORAGE SECTION.
77 BOOK-FOUND PIC X.
LINKAGE SECTION.
77 THE-BOOK-ID PIC 9(5).
PROCEDURE DIVISION
USING THE-BOOK-ID.
PROGRAM-BEGIN.
PERFORM OPEN-FILE.
PERFORM GET-BOOK-BY-ID.
PERFORM CLOSE-FILE.
PROGRAM-EXIT.
EXIT PROGRAM.
PROGRAM-DONE.
STOP RUN.
OPEN-FILE.
OPEN I-O BOOK-FILE.
CLOSE-FILE.
CLOSE BOOK-FILE.
GET-BOOK-BY-ID.
MOVE THE-BOOK-ID TO BOOK-ID.
PERFORM READ-BOOK.
IF BOOK-FOUND = "Y"
PERFORM DISPLAY-BOOK
ELSE
DISPLAY "Book not found".
READ-BOOK.
MOVE "Y" TO BOOK-FOUND.
READ BOOK-FILE RECORD
INVALID KEY
MOVE "N" TO BOOK-FOUND.
DISPLAY-BOOK.
DISPLAY "Title : " BOOK-TITLE.
DISPLAY "Author : " BOOK-AUTHOR.
I am using SCREEN SECTION in my other programs and DISPLAY/ACCEPT and DISPLAY BLANK SCREEN (wrapped in a paragraph) to clear the screen. Navigation using arrows, TAB and ENTER is not sufficient in this situation because I also would like to navigate through the scrollable list using other keys for example F3/F4.How can I achieve this here ?