Editing
Control flow
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
<span id="control-flow"></span> = Control Flow = '''Project:''' pgcobol β Prime Numbers Application<br /> '''Version:''' 1.0 (reverse-engineered)<br /> '''Date:''' 2026-03-17 ----- <span id="conventions"></span> == 1. Conventions == * '''PERFORM''' β synchronous paragraph call; returns to the next statement after the PERFORM. * '''CALL''' β dynamic subprogram call; passes a data block by reference; returns via EXIT PROGRAM. * '''EVALUATE TRUE''' β multi-way branch on 88-level conditions; equivalent to a CASE statement. * '''PERFORM β¦ UNTIL''' β loop; condition tested before each iteration (DO-WHILE in reverse β test first). ----- <span id="primesmain-paragraph-map"></span> == 2. primesmain β Paragraph Map == <pre>PROCEDURE DIVISION β βββ ACCEPT / MOVE setup βββ PERFORM r90-start-session βββββββββββββββββββββββββββββββΊ r90-start-session β β CALL primesui "start" β β IF ok: CALL primesui "log-message" Γ2 β β ELSE: DISPLAY + STOP RUN β βββ return β βββ EVALUATE TRUE β WHEN report-primes βββββββββββββββββββββββββββββββββββββββΊ CALL primesui "log-message" β β PERFORM r92-generate-primes βββΊ r92-generate-primes β β β CALL primesgen β β βββ return β WHEN generate-primes βββββββββββββββββββββββββββββββββββββΊ CALL primesui "log-message" β β *** PERFORM commented out *** β WHEN OTHER ββββββββββββββββββββββββββββββββββββββββββββββΊ CALL primesui "log-message" β PERFORM r99-stop-session β STOP RUN β βββ CALL primesui "log-message" βββ PERFORM r99-stop-session ββββββββββββββββββββββββββββββββΊ r99-stop-session β β CALL primesui "stop" β βββ return βββ STOP RUN</pre> '''CALLs issued by primesmain:''' {| !width="33%"| Call !width="33%"| Using !width="33%"| Condition |- | <code>CALL "primesui"</code> | primes-ui | <code>ui-methods = "start"</code> |- | <code>CALL "primesui"</code> | primes-ui | <code>ui-methods = "log-message"</code> (multiple) |- | <code>CALL "primesgen"</code> | primes-session | method = βreportβ or βgenerateβ |- | <code>CALL "primesui"</code> | primes-ui | <code>ui-methods = "stop"</code> |} ----- <span id="primesgen-paragraph-map"></span> == 3. primesgen β Paragraph Map == <pre>PROCEDURE DIVISION USING primes-session β βββ EVALUATE TRUE on methods WHEN report-primes β PERFORM r90-start-primes-report βββββββββββββββββββΊ r90-start-primes-report β β β CALL primes "connect" β β β CALL primes "cursor" β β β PERFORM r94-fetch βββΊ r94-fetch β β β β CALL primes "next-prime" β β β βββ return β β βββ return β β β IF session-method-ok β PERFORM r86-report-primes UNTIL session-method-eof β β ββββββββββββββββββββββββββββββββββββββββββββββββΊ r86-report-primes (loop body) β β β CALL primesui "write" β β β PERFORM r94-fetch βββββββββββββββββββββββββββΊ r94-fetch β β β β CALL primes "next-prime" β β β βββ return β β βββ (loop back) β WHEN generate-primes β PERFORM r91-start-primes-generation βββββββββββββββΊ r91-start-primes-generation β β β CALL primes "connect" β β βββ return β β β IF session-method-ok β PERFORM r80-test-number UNTIL test-number = 999999999 β β ββββββββββββββββββββββββββββββββββββββββββββββββΊ r80-test-number (loop body) β β β DIVIDE test-number BY test-divider β test-rest β β β EVALUATE TRUE β β β WHEN test-rest = 0 β β β PERFORM r82-next-test-number βββββββββββΊ r82-next-test-number β β β β ADD 2 TO test-number β β β β COMPUTE sqrt β β β β MOVE 1 TO old-ident β β β β PERFORM r89-get-next-divider βββΊ r89-get-next-divider β β β β β CALL primes "get" β β β β βββ return β β β βββ return β β β WHEN test-divider > test-number-sqr β β β PERFORM r85-write-prime ββββββββββββββΊ r85-write-prime β β β β β CALL primes "write" β β β β β CALL primesui "write" β β β β βββ return β β β PERFORM r82-next-test-number (as above) β β β WHEN OTHER β β β PERFORM r89-get-next-divider (as above) β β βββ (loop back) β WHEN OTHER LOG "Bad method" β βββ PERFORM r99-close-primes βββββββββββββββββββββββββββββΊ r99-close-primes β β CALL primes "disconnect" β βββ return EXIT PROGRAM</pre> '''Loop summary β primesgen:''' {| !width="25%"| Loop !width="25%"| Type !width="25%"| Condition !width="25%"| Paragraph |- | Report read | PERFORM UNTIL | <code>session-method-eof</code> (result = 9) | r86-report-primes |- | Sieve | PERFORM UNTIL | <code>test-number = 999999999</code> | r80-test-number |- | Inner (test-number) | EVALUATE inside PERFORM | drives calls to r82 / r85 / r89 | r80-test-number |} ----- <span id="primes-dal-paragraph-map"></span> == 4. primes (DAL) β Paragraph Map == <pre>PROCEDURE DIVISION USING primes-dal β βββ EVALUATE TRUE on dal-methods WHEN next-prime β PERFORM r80-get-next-prime βββββββΊ r80-get-next-prime β β PERFORM s02-fetch βββΊ s02-fetch β β β EXEC SQL FETCH β β βββ return β βββ return WHEN next-divider β PERFORM r81-get-next-divider βββββΊ r81-get-next-divider β β ADD 1 TO old-ident β new-ident β β EXEC SQL SELECT prime WHERE ident=new-ident β β MOVE new-ident TO old-ident β βββ return WHEN write-prime β PERFORM r83-write-prime βββββββββββΊ r83-write-prime β β EXEC SQL INSERT β βββ return WHEN db-connect β PERFORM s00-connect βββββββββββββββΊ s00-connect β β EXEC SQL CONNECT β βββ return WHEN db-cursor β PERFORM s01-cursor ββββββββββββββββΊ s01-cursor β β EXEC SQL START TRANSACTION β β EXEC SQL OPEN primescursor β βββ return WHEN db-disconnect β PERFORM s99-disconnect ββββββββββββΊ s99-disconnect β β EXEC SQL CONNECT RESET β βββ return WHEN OTHER β dal-result = 1 β βββ EXIT PROGRAM</pre> '''No loops''' in primes.cbl. Each invocation handles exactly one SQL operation and returns. ----- <span id="primesui-paragraph-map"></span> == 5. primesui β Paragraph Map == <pre>PROCEDURE DIVISION USING primes-ui β βββ EVALUATE TRUE on ui-methods WHEN start-ui β PERFORM r90-start-primesui βββββββββΊ r90-start-primesui β β OPEN OUTPUT fprinter β β IF ok: result=0, idx=1 β β PERFORM r98-message-ui βββΊ r98-message-ui β β β DISPLAY on scherm β β βββ return β βββ return WHEN write-ui β PERFORM r92-write-primesui ββββββββββΊ r92-write-primesui β β load cell(primes-idx) β β idx + 1 β β IF new-page β PERFORM r93-new-page βββΊ r93-new-page β β β WRITE heading β β β WRITE col header β β β new-page = 0 β β βββ return β β IF idx = 7 β WRITE line, idx = 1 β β IF linage = 53 β PERFORM r94-eop βββΊ r94-eop β β β WRITE blank β β β WRITE footing β β β page-number + 1 β β β new-page = 1 β β βββ return β βββ return WHEN message-ui β PERFORM r98-message-ui (as above) WHEN stop-ui β PERFORM r99-stop-primesui βββββββββββΊ r99-stop-primesui β β u-sequence = 0, u-number = 0 β β PERFORM r92-write-primesui UNTIL new-page β flush loop β β PERFORM r98-message-ui β β CLOSE fprinter β βββ return WHEN OTHER β ui-method-result = 1 β βββ EXIT PROGRAM</pre> '''Loop summary β primesui:''' {| !width="25%"| Loop !width="25%"| Type !width="25%"| Condition !width="25%"| Location |- | Flush partial line | PERFORM UNTIL | <code>new-page</code> (print-new-page = 1) | r99-stop-primesui |} ----- <span id="cross-program-control-flow-summary"></span> == 6. Cross-Program Control Flow Summary == <pre>OS βββΊ primesmain PROCEDURE DIVISION β βββΊ CALL primesui (start, logΓn, stop) β βββ EXIT PROGRAM back to primesmain β βββΊ CALL primesgen (once, with primes-session) β βββΊ CALL primes (connect) β βββ EXIT PROGRAM back to primesgen βββΊ CALL primes (cursor / next-prime / next-divider / write / disconnect) β βββ EXIT PROGRAM back to primesgen [repeated in loop] βββΊ CALL primesui (log-message / write) β βββ EXIT PROGRAM back to primesgen [repeated in loop] βββ EXIT PROGRAM back to primesmain</pre> All inter-program communication is by reference (shared data blocks). There are no GOTO statements in the current source. All branching is via PERFORM, EVALUATE, and IF/ELSE. No COPY-based GOTO or ALTER is used. <hr/> Terug naar: [[Primes_programs_specifications]] | [[Cobol and PostgreSQL]]
Summary:
Please note that all contributions to Webhuis wiki are considered to be released under the GNU Free Documentation License 1.3 or later (see
Project:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Voorpagina
Cobol and PostgreSQL
PostgreSQL
CFEngine
Proxmox
Webhuis Kennisbank
Basale infra
Webhuis bouwstenen
Webhuis configuratie
Webhuis Infra
Webhuis Support
Webhuis Raspberry
Opzet Applicaties
Business Applicaties
Community portal
Current events
Recent changes
Random page
Help
sitesupport
Tools
What links here
Related changes
Special pages
Page information