UV Software has a complete solution for conversion of mainframe
MVS or VSE JCL, COBOL, & DATA batch systems to Unix, Linux, or Windows/SFU.
Over 50 successful conversions including global corporations & government agencies.
Please see demo conversions & detailed explanations at:
www.uvsoftware.ca
You may send samples of your files for conversion & return by email.
You may download 1 free utility from:
www.uvsoftware.ca/ libuvhd.htm
'uvhd' displays data files with packed/binary fields in 'vertical hexadecimal',
and includes many interactive functions (browse, search, select, update, print, etc).
COBOL Report Generator
Print graphical COBOL reports in Windows with
RPV Reports.
Insert graphics (images, photos, logos, charts, etc.) into your COBOL reports
to improve the print quality of your COBOL reports.
See how RPV Reports can be used to preview or print graphical COBOL reports in Windows.
COBOL Documentation
Are your mainframe COBOL applications properly documented?
DCD III
is a comprehensive COBOL documentation and application
understanding tool that will allow you to reduce COBOL maintenance,
development, and mainframe migration costs.
Learn more about how you can document and understand your mainframe COBOL
applications with DCD III.
COBOL Email List Rental
You can reach a highly targeted, qualified, opt-in audience of
COBOL users by renting the COBUG email list.
Contact us today advertise@cobug.com for our email list rental rates.
Website Advertisement
Advertise on the
COBUG website and reach tens of thousands of COBOL users. Increase
your COBOL sales leads.
Contact COBUG at advertise@cobug.com for advertising rates.
Message: Hello! I'm currently taking a COBOL class and am stuck. We have to write a program that will take a users input and write it to disk. I've decide to use a screen section, but have run into a problem that I can't solve. Once my program runs through a sequence once, if the user does not enter data my checks on the user entry do not work and the previous data will be written to file again.
So my question... How when accepting data from a screen can I reset the captured LINE / COLUMN to blank?
I could easily just rewrite this without using a screen section, but I like it to look pretty. Here is my code any help on this would be appreciated. Thanks!
IDENTIFICATION DIVISION.
PROGRAM-ID. P136PART1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
/assigns C:P136.DAT TO FILEOUPUT
SELECT FILEOUTPUT
ASSIGN TO "C:/P136.DOC"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
/I will WRITE TO REPORT-OUT which will save the FILE TO disk
FD FILEOUTPUT.
01 REPORT-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X VALUE "Y".
/I will do a logic check ON the users input AND ASSIGN the
/correct STRING TO the USER-IN variables
01 ENTERED-STATE PIC X.
01 ENTERED-LOCATION-CT PIC X.
01 ENTERED-LOCATION-NY PIC X.
/this will be the users INPUT AND moved TO USER-OUT
01 USER-IN.
05 STATE-IN PIC X(6).
05 LOCATION-IN PIC X(15).
05 BALLOONS-IN PIC 9.
05 PROPANE-IN PIC 99.
05 PILOTS-IN PIC 9.
05 EMPLOYEES-IN PIC 9.
05 TOTAL-EX-IN PIC 9999.
01 USER-OUT.
05 STATE-OUT PIC X(6) VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 LOCATION-OUT PIC X(15) VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 BALLOONS-OUT PIC X VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 PROPANE-OUT PIC XX VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 PILOTS-OUT PIC X VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 EMPLOYEES-OUT PIC X VALUE SPACES.
05 PIC X(6) VALUE SPACES.
05 TOTAL-EX-OUT PIC $$,$$$ VALUE SPACES.
05 PIC X(5) VALUE SPACES.
/this NEXT SECTION will define the various screens
SCREEN SECTION.
/START screen
01 SCREEN-HOME.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'STATE NO.: '.
05 COLUMN 25 PIC X TO ENTERED-STATE.
05 LINE 2 COLUMN 5 VALUE 'ENTER 1 FOR CT'.
05 LINE 3 COLUMN 5 VALUE 'ENTER 2 FOR NY'.
/AFTER much reading online this will BLANK out PREVIOUS user
/entries
05 ERASE EOL LINE 1 COLUMN 25.
/this SCREEN will be displayed FOR CT
01 SCREEN-CT.
05 LINE 4 COLUMN 1 VALUE 'LOCATION NO.: '.
05 COLUMN 25 PIC X TO ENTERED-LOCATION-CT.
05 LINE 5 COLUMN 5 VALUE 'ENTER 1 FOR CANAAN'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 2 FOR GOSHEN'.
05 LINE 7 COLUMN 5 VALUE 'ENTER 3 FOR LAKEVILLE'.
05 LINE 8 COLUMN 5 VALUE 'ENTER 4 FOR LIME ROCK'.
05 LINE 9 COLUMN 1 VALUE 'NUMBER OF BALLOONS: '.
05 COLUMN 25 PIC 9 TO BALLOONS-IN.
05 LINE 10 COLUMN 1 VALUE 'NO. OF PROPANE TANKS: '.
05 COLUMN 25 PIC 99 TO PROPANE-IN.
05 LINE 11 COLUMN 1 VALUE 'NO. OF PILOTS: '.
05 COLUMN 25 PIC 9 TO PILOTS-IN.
05 LINE 12 COLUMN 1 VALUE 'NO. OF OTHER EMPS: '.
05 COLUMN 25 PIC 9 TO EMPLOYEES-IN.
05 LINE 13 COLUMN 1 VALUE 'TOTAL EXPENSES ALL EMP: '.
05 COLUMN 25 PIC 9999 TO TOTAL-EX-IN.
05 ERASE EOL LINE 4 COLUMN 25.
05 ERASE EOL LINE 9 COLUMN 25.
05 ERASE EOL LINE 10 COLUMN 25.
05 ERASE EOL LINE 11 COLUMN 25.
05 ERASE EOL LINE 12 COLUMN 25.
05 ERASE EOL LINE 13 COLUMN 25.
/this SCREEN will be displayed FOR NY
01 SCREEN-NY.
05 LINE 4 COLUMN 1 VALUE 'LOCATION NO.: '.
05 COLUMN 25 PIC X TO ENTERED-LOCATION-NY.
05 LINE 5 COLUMN 5 VALUE 'ENTER 1 FOR ITHACA'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 2 FOR LAKE GEORGE'.
05 LINE 7 COLUMN 5 VALUE 'ENTER 3 FOR QUOPUE'.
05 LINE 9 COLUMN 1 VALUE 'NUMBER OF BALLOONS: '.
05 COLUMN 25 PIC 9 TO BALLOONS-IN.
05 LINE 10 COLUMN 1 VALUE 'NO. OF PROPANE TANKS: '.
05 COLUMN 25 PIC 99 TO PROPANE-IN.
05 LINE 11 COLUMN 1 VALUE 'NO. OF PILOTS: '.
05 COLUMN 25 PIC 9 TO PILOTS-IN.
05 LINE 12 COLUMN 1 VALUE 'NO. OF OTHER EMPS: '.
05 COLUMN 25 PIC 9 TO EMPLOYEES-IN.
05 LINE 13 COLUMN 1 VALUE 'TOTAL EXPENSES ALL EMP: '.
05 COLUMN 25 PIC 9999 TO TOTAL-EX-IN.
05 ERASE EOL LINE 4 COLUMN 25.
05 ERASE EOL LINE 9 COLUMN 25.
05 ERASE EOL LINE 10 COLUMN 25.
05 ERASE EOL LINE 11 COLUMN 25.
05 ERASE EOL LINE 12 COLUMN 25.
05 ERASE EOL LINE 13 COLUMN 25.
/this SCREEN will be used IF an incorrect state IS entered
01 SCREEN-INCORRECT-STATE.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT STATE CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE '1 FOR CT'.
05 LINE 4 COLUMN 5 VALUE 'OR 2 FOR NY'.
05 LINE 5 COLUMN 5 PIC 9 TO ENTERED-STATE.
05 ERASE EOL LINE 5 COLUMN 5.
/this IS the incorrect location SCREEN FOR CT
01 SCREEN-INCORRECT-LOCATION-CT.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT LOCATION CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE 'ENTER 1 FOR CANAAN'.
05 LINE 4 COLUMN 5 VALUE 'ENTER 2 FOR GOSHEN'.
05 LINE 5 COLUMN 5 VALUE 'ENTER 3 FOR LAKEVILLE'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 4 FOR LIME ROCK'.
05 LINE 7 COLUMN 5 PIC 9 TO ENTERED-LOCATION-CT.
05 ERASE EOL LINE 7 COLUMN 5.
/this IS the incorrect location SCREEN FOR NY
01 SCREEN-INCORRECT-LOCATION-NY.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT LOCATION CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE 'ENTER 1 FOR ITHACA'.
05 LINE 4 COLUMN 5 VALUE 'ENTER 2 FOR LAKE GEORGE'.
05 LINE 5 COLUMN 5 VALUE 'ENTER 3 FOR QUOPUE'.
05 LINE 6 COLUMN 5 PIC 9 TO ENTERED-LOCATION-NY.
05 ERASE EOL LINE 6 COLUMN 5.
/this IS the SCREEN TO determine IF there IS more DATA
01 SCREEN-MORE-RECORDS.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'IS THERE MORE DATA?: '.
05 COLUMN 25 PIC X TO ARE-THERE-MORE-RECORDS.
05 LINE 2 COLUMN 1 VALUE 'ENTER Y OR N'.
05 ERASE EOL LINE 1 COLUMN 25.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN OUTPUT FILEOUTPUT
/This will loop 150-run-module UNTIL the user IS done
PERFORM 150-RUN-MODULE
UNTIL ARE-THERE-MORE-RECORDS = 'n' OR 'N'
CLOSE FILEOUTPUT
STOP RUN.
150-RUN-MODULE.
PERFORM 200-INITIALIZATION-MODULE
/starts TO ACCEPT data
PERFORM 300-ACCEPT-DATA-MODULE
/checks the users INPUT FOR state
PERFORM 400-STATE-CHECK-MODULE
/checks the users INPUT FOR location
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 500-LOCATION-CHECK-MODULE-CT
WHEN 2 PERFORM 510-LOCATION-CHECK-MODULE-NY
WHEN OTHER DISPLAY 'ERROR 1'
END-EVALUATE
PERFORM 600-WRITE-DATA-MODULE
PERFORM 700-MORE-DATA-MODULE.
/resets VALUES used FOR logic tests
200-INITIALIZATION-MODULE.
MOVE SPACES TO ENTERED-STATE
MOVE SPACES TO ENTERED-LOCATION-CT
MOVE SPACES TO ENTERED-LOCATION-NY
MOVE SPACES TO USER-IN.
300-ACCEPT-DATA-MODULE.
DISPLAY SCREEN-HOME
ACCEPT SCREEN-HOME.
400-STATE-CHECK-MODULE.
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 420-STATE-CT-MODULE
WHEN 2 PERFORM 425-STATE-NY-MODULE
WHEN OTHER PERFORM 430-STATE-ERROR-MODULE
END-EVALUATE.
/accepts the rest OF the DATA FOR CT
420-STATE-CT-MODULE.
DISPLAY SCREEN-CT
ACCEPT SCREEN-CT
MOVE "1 (CT)" TO STATE-IN.
/accepts the rest OF the DATA FOR NY
425-STATE-NY-MODULE.
DISPLAY SCREEN-NY
ACCEPT SCREEN-NY
MOVE "2 (NY)" TO STATE-IN.
430-STATE-ERROR-MODULE.
DISPLAY SCREEN-INCORRECT-STATE
ACCEPT SCREEN-INCORRECT-STATE
/checks users INPUT FOR state
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 420-STATE-CT-MODULE
WHEN 2 PERFORM 425-STATE-NY-MODULE
WHEN OTHER PERFORM 430-STATE-ERROR-MODULE
END-EVALUATE.
/check location INPUT IF state = CT
500-LOCATION-CHECK-MODULE-CT.
EVALUATE ENTERED-LOCATION-CT
WHEN 1 MOVE "1 (Canaan)" TO LOCATION-IN
WHEN 2 MOVE "2 (Goshen)" TO LOCATION-IN
WHEN 3 MOVE "3 (Lakeville)" TO LOCATION-IN
WHEN 4 MOVE "4 (Lime Rock" TO LOCATION-IN
WHEN OTHER PERFORM 501-CT-WRONG-LOC
END-EVALUATE.
501-CT-WRONG-LOC.
DISPLAY SCREEN-INCORRECT-LOCATION-CT
ACCEPT SCREEN-INCORRECT-LOCATION-CT
EVALUATE ENTERED-LOCATION-CT
WHEN 1 MOVE "1 (Canaan)" TO LOCATION-IN
WHEN 2 MOVE "2 (Goshen)" TO LOCATION-IN
WHEN 3 MOVE "3 (Lakeville)" TO LOCATION-IN
WHEN 4 MOVE "4 (Lime Rock" TO LOCATION-IN
WHEN OTHER PERFORM 501-CT-WRONG-LOC
END-EVALUATE.
/check location INPUT IF state = NY
510-LOCATION-CHECK-MODULE-NY.
EVALUATE ENTERED-LOCATION-NY
WHEN 1 MOVE "1 (Ithaca)" TO LOCATION-IN
WHEN 2 MOVE "2 (Lake George)" TO LOCATION-IN
WHEN 3 MOVE "3 (Quopue)" TO LOCATION-IN
WHEN OTHER PERFORM 512-NY-WRONG-LOC
END-EVALUATE.
512-NY-WRONG-LOC.
DISPLAY SCREEN-INCORRECT-LOCATION-NY
ACCEPT SCREEN-INCORRECT-LOCATION-NY
EVALUATE ENTERED-LOCATION-NY
WHEN 1 MOVE "1 (Ithaca)" TO LOCATION-IN
WHEN 2 MOVE "2 (Lake George)" TO LOCATION-IN
WHEN 3 MOVE "3 (Quopue)" TO LOCATION-IN
WHEN OTHER PERFORM 512-NY-WRONG-LOC
END-EVALUATE.
/writes DATA TO file
600-WRITE-DATA-MODULE.
MOVE STATE-IN TO STATE-OUT
MOVE LOCATION-IN TO LOCATION-OUT
MOVE BALLOONS-IN TO BALLOONS-OUT
MOVE PROPANE-IN TO PROPANE-OUT
MOVE PILOTS-IN TO PILOTS-OUT
MOVE EMPLOYEES-IN TO EMPLOYEES-OUT
MOVE TOTAL-EX-IN TO TOTAL-EX-OUT
WRITE REPORT-OUT FROM USER-OUT
Message: Hi, there are a few problems with your code: the ERASE entries that you have included in each screen definition are executed when you display that screen and will blank out data that you have just displayed, SEE SCREEN-MORE-RECORDS.
I suggest that these lines be removed.
I will be busy for the next few hours, however when I get back I will take a good look at your code and then send you the relevant corrections and explanations.
jwl
6/11/2010 03:40:15
RE: Screen Section question
Message: Hi,
I have entered a few comments into your code, which you can read and if you require more info please let us know.
I have mentioned the use of the INITIALIZE statement which works better than moving spaces to a group level that contains numeric fields.
The problem with your code is that if the user decides that there is more to be keyed in and then decides not to, there is no way that you allow for them to end.
You should allow for a exit coder on every screen and then you will not duplicate your output. Here is your code with the inserted comments.
IDENTIFICATION DIVISION.
PROGRAM-ID. P136PART1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
/assigns C:P136.DAT TO FILEOUPUT
SELECT FILEOUTPUT
ASSIGN TO "C:/P136.DOC"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
/I will WRITE TO REPORT-OUT which will save the FILE TO disk
FD FILEOUTPUT.
01 REPORT-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X VALUE "Y".
/I will do a logic check ON the users input AND ASSIGN the
/correct STRING TO the USER-IN variables
01 ENTERED-STATE PIC X.
01 ENTERED-LOCATION-CT PIC X.
01 ENTERED-LOCATION-NY PIC X.
/this will be the users INPUT AND moved TO USER-OUT
01 USER-IN.
05 STATE-IN PIC X(6).
05 LOCATION-IN PIC X(15).
05 BALLOONS-IN PIC 9.
05 PROPANE-IN PIC 99.
05 PILOTS-IN PIC 9.
05 EMPLOYEES-IN PIC 9.
05 TOTAL-EX-IN PIC 9999.
01 USER-OUT.
05 STATE-OUT PIC X(6) VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 LOCATION-OUT PIC X(15) VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 BALLOONS-OUT PIC X VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 PROPANE-OUT PIC XX VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 PILOTS-OUT PIC X VALUE SPACES.
05 PIC X(7) VALUE SPACES.
05 EMPLOYEES-OUT PIC X VALUE SPACES.
05 PIC X(6) VALUE SPACES.
05 TOTAL-EX-OUT PIC $$,$$$ VALUE SPACES.
05 PIC X(5) VALUE SPACES.
*
* As you initialize all fields before displaying the screen layouts
* you should use USING rather than TO as this will make sure that the
* previous data is cleared without using the ERASE EOL entries. It
* will also be useful if there are any defaults for fields as if they
* set to the most frequent or default, then the enering of data by
* the USER is made easier.
*
/this NEXT SECTION will define the various screens
SCREEN SECTION.
/START screen
01 SCREEN-HOME.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'STATE NO.: '.
05 COLUMN 25 PIC X TO ENTERED-STATE.
05 LINE 2 COLUMN 5 VALUE 'ENTER 1 FOR CT'.
05 LINE 3 COLUMN 5 VALUE 'ENTER 2 FOR NY'.
/AFTER much reading online this will BLANK out PREVIOUS user
/entries
*
* The screen declaration above starts with BLANK SCREEN therefore
* the line ERASE EOL is not required.
*
/this SCREEN will be displayed FOR CT
01 SCREEN-CT.
05 LINE 4 COLUMN 1 VALUE 'LOCATION NO.: '.
05 COLUMN 25 PIC X TO ENTERED-LOCATION-CT.
05 LINE 5 COLUMN 5 VALUE 'ENTER 1 FOR CANAAN'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 2 FOR GOSHEN'.
05 LINE 7 COLUMN 5 VALUE 'ENTER 3 FOR LAKEVILLE'.
05 LINE 8 COLUMN 5 VALUE 'ENTER 4 FOR LIME ROCK'.
05 LINE 9 COLUMN 1 VALUE 'NUMBER OF BALLOONS: '.
05 COLUMN 25 PIC 9 TO BALLOONS-IN.
05 LINE 10 COLUMN 1 VALUE 'NO. OF PROPANE TANKS: '.
05 COLUMN 25 PIC 99 TO PROPANE-IN.
05 LINE 11 COLUMN 1 VALUE 'NO. OF PILOTS: '.
05 COLUMN 25 PIC 9 TO PILOTS-IN.
05 LINE 12 COLUMN 1 VALUE 'NO. OF OTHER EMPS: '.
05 COLUMN 25 PIC 9 TO EMPLOYEES-IN.
05 LINE 13 COLUMN 1 VALUE 'TOTAL EXPENSES ALL EMP: '.
05 COLUMN 25 PIC 9999 TO TOTAL-EX-IN.
/this SCREEN will be displayed FOR NY
01 SCREEN-NY.
05 LINE 4 COLUMN 1 VALUE 'LOCATION NO.: '.
05 COLUMN 25 PIC X TO ENTERED-LOCATION-NY.
05 LINE 5 COLUMN 5 VALUE 'ENTER 1 FOR ITHACA'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 2 FOR LAKE GEORGE'.
05 LINE 7 COLUMN 5 VALUE 'ENTER 3 FOR QUOPUE'.
05 LINE 9 COLUMN 1 VALUE 'NUMBER OF BALLOONS: '.
05 COLUMN 25 PIC 9 TO BALLOONS-IN.
05 LINE 10 COLUMN 1 VALUE 'NO. OF PROPANE TANKS: '.
05 COLUMN 25 PIC 99 TO PROPANE-IN.
05 LINE 11 COLUMN 1 VALUE 'NO. OF PILOTS: '.
05 COLUMN 25 PIC 9 TO PILOTS-IN.
05 LINE 12 COLUMN 1 VALUE 'NO. OF OTHER EMPS: '.
05 COLUMN 25 PIC 9 TO EMPLOYEES-IN.
05 LINE 13 COLUMN 1 VALUE 'TOTAL EXPENSES ALL EMP: '.
05 COLUMN 25 PIC 9999 TO TOTAL-EX-IN.
/this SCREEN will be used IF an incorrect state IS entered
01 SCREEN-INCORRECT-STATE.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT STATE CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE '1 FOR CT'.
05 LINE 4 COLUMN 5 VALUE 'OR 2 FOR NY'.
05 LINE 5 COLUMN 5 PIC 9 TO ENTERED-STATE.
/this IS the incorrect location SCREEN FOR CT
01 SCREEN-INCORRECT-LOCATION-CT.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT LOCATION CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE 'ENTER 1 FOR CANAAN'.
05 LINE 4 COLUMN 5 VALUE 'ENTER 2 FOR GOSHEN'.
05 LINE 5 COLUMN 5 VALUE 'ENTER 3 FOR LAKEVILLE'.
05 LINE 6 COLUMN 5 VALUE 'ENTER 4 FOR LIME ROCK'.
05 LINE 7 COLUMN 5 PIC 9 TO ENTERED-LOCATION-CT.
/this IS the incorrect location SCREEN FOR NY
01 SCREEN-INCORRECT-LOCATION-NY.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'INCORRECT LOCATION CODE'.
05 LINE 2 COLUMN 1 VALUE 'PLEASE ENTER: '.
05 LINE 3 COLUMN 5 VALUE 'ENTER 1 FOR ITHACA'.
05 LINE 4 COLUMN 5 VALUE 'ENTER 2 FOR LAKE GEORGE'.
05 LINE 5 COLUMN 5 VALUE 'ENTER 3 FOR QUOPUE'.
05 LINE 6 COLUMN 5 PIC 9 TO ENTERED-LOCATION-NY.
05 ERASE EOL LINE 6 COLUMN 5.
/this IS the SCREEN TO determine IF there IS more DATA
01 SCREEN-MORE-RECORDS.
05 BLANK SCREEN.
05 LINE 1 COLUMN 1 VALUE 'IS THERE MORE DATA?: '.
05 COLUMN 25 PIC X TO ARE-THERE-MORE-RECORDS.
05 LINE 2 COLUMN 1 VALUE 'ENTER Y OR N'.
05 ERASE EOL LINE 1 COLUMN 25.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN OUTPUT FILEOUTPUT
/This will loop 150-run-module UNTIL the user IS done
PERFORM 150-RUN-MODULE
UNTIL ARE-THERE-MORE-RECORDS = 'n' OR 'N'
CLOSE FILEOUTPUT
STOP RUN.
150-RUN-MODULE.
PERFORM 200-INITIALIZATION-MODULE
/starts TO ACCEPT data
PERFORM 300-ACCEPT-DATA-MODULE
/checks the users INPUT FOR state
PERFORM 400-STATE-CHECK-MODULE
/checks the users INPUT FOR location
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 500-LOCATION-CHECK-MODULE-CT
WHEN 2 PERFORM 510-LOCATION-CHECK-MODULE-NY
WHEN OTHER DISPLAY 'ERROR 1'
END-EVALUATE
*
* For the above performs see coments at these routines
*
PERFORM 600-WRITE-DATA-MODULE
PERFORM 700-MORE-DATA-MODULE.
/resets VALUES used FOR logic tests
200-INITIALIZATION-MODULE.
MOVE SPACES TO ENTERED-STATE
MOVE SPACES TO ENTERED-LOCATION-CT
MOVE SPACES TO ENTERED-LOCATION-NY
MOVE SPACES TO USER-IN.
*
* USER-IN is a group level that contains numeric fields.
* USE INITIALIZE USER-IN to clear all fields correctly.
*
*
300-ACCEPT-DATA-MODULE.
DISPLAY SCREEN-HOME
ACCEPT SCREEN-HOME.
400-STATE-CHECK-MODULE.
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 420-STATE-CT-MODULE
WHEN 2 PERFORM 425-STATE-NY-MODULE
WHEN OTHER PERFORM 430-STATE-ERROR-MODULE
END-EVALUATE.
/accepts the rest OF the DATA FOR CT
420-STATE-CT-MODULE.
DISPLAY SCREEN-CT
ACCEPT SCREEN-CT
MOVE "1 (CT)" TO STATE-IN.
/accepts the rest OF the DATA FOR NY
425-STATE-NY-MODULE.
DISPLAY SCREEN-NY
ACCEPT SCREEN-NY
MOVE "2 (NY)" TO STATE-IN.
430-STATE-ERROR-MODULE.
DISPLAY SCREEN-INCORRECT-STATE
ACCEPT SCREEN-INCORRECT-STATE
/checks users INPUT FOR state
EVALUATE ENTERED-STATE
WHEN 1 PERFORM 420-STATE-CT-MODULE
WHEN 2 PERFORM 425-STATE-NY-MODULE
WHEN OTHER PERFORM 430-STATE-ERROR-MODULE
END-EVALUATE.
/check location INPUT IF state = CT
500-LOCATION-CHECK-MODULE-CT.
EVALUATE ENTERED-LOCATION-CT
WHEN 1 MOVE "1 (Canaan)" TO LOCATION-IN
WHEN 2 MOVE "2 (Goshen)" TO LOCATION-IN
WHEN 3 MOVE "3 (Lakeville)" TO LOCATION-IN
WHEN 4 MOVE "4 (Lime Rock" TO LOCATION-IN
WHEN OTHER PERFORM 501-CT-WRONG-LOC
END-EVALUATE.
*
* The following code can allow the USER to crash the system if a
* wrong code is continually keyed in. This routine will continue
* to perform itself until a correct code is enetered, which can
* cause an overflow in the stack. Perform the above routine with
* exit check so that all checking is done in one place.
* eg; Define an exit code in the Data Division (eg: DATA-ERROR)
* At the beginning of the above routine insert
* MOVE 'N' TO DATA-ERROR.
*
* In 501...... remove the EVALUATE and Insert
* MOVE 'Y' TO DATA-ERROR.
*
* I have remarked out the EVALUATE and inserted the above
* line of code. Amend this to suit your coding standards.
*
* Now you need to change the PERFORM 500...... to
* PERFORM 500...... UNTIL DATA_ERROR = "N"
*
* DO THE SAME FOR 510
*
501-CT-WRONG-LOC.
DISPLAY SCREEN-INCORRECT-LOCATION-CT
ACCEPT SCREEN-INCORRECT-LOCATION-CT
MOVE "Y" TO DATA-ERROR.
* EVALUATE ENTERED-LOCATION-CT
* WHEN 1 MOVE "1 (Canaan)" TO LOCATION-IN
* WHEN 2 MOVE "2 (Goshen)" TO LOCATION-IN
* WHEN 3 MOVE "3 (Lakeville)" TO LOCATION-IN
* WHEN 4 MOVE "4 (Lime Rock" TO LOCATION-IN
* WHEN OTHER PERFORM 501-CT-WRONG-LOC
* END-EVALUATE.
/check location INPUT IF state = NY
510-LOCATION-CHECK-MODULE-NY.
EVALUATE ENTERED-LOCATION-NY
WHEN 1 MOVE "1 (Ithaca)" TO LOCATION-IN
WHEN 2 MOVE "2 (Lake George)" TO LOCATION-IN
WHEN 3 MOVE "3 (Quopue)" TO LOCATION-IN
WHEN OTHER PERFORM 512-NY-WRONG-LOC
END-EVALUATE.
*
* The following code can allow the USER to crash the system if a
* wrong code is continually keyed in. This routine will continue
* to perform itself until a correct code is enetered, which can
* cause an overflow in the stack.
*
512-NY-WRONG-LOC.
DISPLAY SCREEN-INCORRECT-LOCATION-NY
ACCEPT SCREEN-INCORRECT-LOCATION-NY
EVALUATE ENTERED-LOCATION-NY
WHEN 1 MOVE "1 (Ithaca)" TO LOCATION-IN
WHEN 2 MOVE "2 (Lake George)" TO LOCATION-IN
WHEN 3 MOVE "3 (Quopue)" TO LOCATION-IN
WHEN OTHER PERFORM 512-NY-WRONG-LOC
END-EVALUATE.
/writes DATA TO file
600-WRITE-DATA-MODULE.
MOVE STATE-IN TO STATE-OUT
MOVE LOCATION-IN TO LOCATION-OUT
MOVE BALLOONS-IN TO BALLOONS-OUT
MOVE PROPANE-IN TO PROPANE-OUT
MOVE PILOTS-IN TO PILOTS-OUT
MOVE EMPLOYEES-IN TO EMPLOYEES-OUT
MOVE TOTAL-EX-IN TO TOTAL-EX-OUT
WRITE REPORT-OUT FROM USER-OUT
Looking for a COBOL job? Submit your resume here and have it viewed by employers and recruiters hiring for COBOL positions.
Employers & Recruiters
Do you need to fill a COBOL position? Post your COBOL jobs here and find the most qualified COBOL candidates to fill your COBOL position.
Call for Articles
Articles are being sought for the COBUG newsletters.
Will you help us in our efforts to provide newsletters for the COBOL community at large?
Contribute to the COBUG newsletters! Answer this call for COBOL and related legacy articles.
Local COBOL User Groups
Check out the list of local COBOL user groups from around the world and join a user group near you.
Call for User Group Leaders!
Get Involved! We are looking for user group
leaders to help organize and coordinate a local COBOL user group.
Join COBUG!
Become a part of the COBUG community today.Join Now ...
COBOL Forums
Try our forums for help!
Let the COBUG members help you.
Post your issues!