Difference between revisions of "Primes.cbl"
(Created page with "This is the complete source code of the primes Cobol program, which contains the high level SQL statements. <pre> </pre> <hr/> Terug naar: Cobol and PostgreSQL") |
|||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
This is the complete source code of the primes Cobol program, which contains the high level SQL statements. |
This is the complete source code of the primes Cobol program, which contains the high level SQL statements. |
||
<pre> |
<pre> |
||
| + | identification division. |
||
| + | program-id. primes. |
||
| + | environment division. |
||
| + | configuration section. |
||
| + | source-computer. linux-laptop. |
||
| + | object-computer. linux-laptop. |
||
| + | special-names. |
||
| + | console is scherm. |
||
| + | |||
| + | data division. |
||
| + | working-storage section. |
||
| + | 01 filler pic x(32) value "Start WS primes". |
||
| + | 01 DATASRC PIC X(64) value |
||
| + | "pgsql://localhost:5432/primes&default_schema=primes". |
||
| + | 01 DBUSR PIC X(64) value "primes_user". |
||
| + | 01 DBPWD PIC X(64) value "pr1mes_user". |
||
| + | 01 CUR-STEP PIC X(16). |
||
| + | 01 primes-row. |
||
| + | 03 r-ident pic 9(9) comp-3. |
||
| + | 03 r-prime pic 9(9) comp-3. |
||
| + | 01 prime-count pic 9(9). |
||
| + | 01 prime_seq pic 9(9). |
||
| + | 01 divider pic 9(9). |
||
| + | |||
| + | 01 primes. |
||
| + | 03 primes-result pic 9(2) value zero. |
||
| + | 88 init-primes-ok value 1. |
||
| + | 88 first-divider-ok value 2. |
||
| + | 88 next-divider-ok value 3. |
||
| + | 03 test-number pic 9(9). |
||
| + | 03 test-number-sqr pic 9(9)v9(9). |
||
| + | 03 test-divider pic 9(9). |
||
| + | 03 test-rest pic 9(9)v9(9). |
||
| + | 03 old-test-number pic 9(9). |
||
| + | 03 old-ident pic 9(9). |
||
| + | 03 new-ident pic 9(9). |
||
| + | |||
| + | EXEC SQL |
||
| + | INCLUDE primes-table |
||
| + | END-EXEC. |
||
| + | |||
| + | EXEC SQL |
||
| + | INCLUDE SQLCA |
||
| + | END-EXEC. |
||
| + | |||
| + | EXEC SQL AT primes |
||
| + | DECLARE primescursor CURSOR FOR |
||
| + | SELECT * FROM primes |
||
| + | END-EXEC. |
||
| + | |||
| + | copy primes-ui. |
||
| + | |||
| + | linkage section. |
||
| + | |||
| + | copy primes-dal. |
||
| + | |||
| + | procedure division using primes-dal. |
||
| + | |||
| + | evaluate true |
||
| + | when next-prime |
||
| + | perform r80-get-next-prime |
||
| + | when next-divider |
||
| + | perform r81-get-next-divider |
||
| + | when write-prime |
||
| + | perform r83-write-prime |
||
| + | when db-connect |
||
| + | perform s00-connect |
||
| + | when db-cursor |
||
| + | perform s01-cursor |
||
| + | when db-disconnect |
||
| + | perform s99-disconnect |
||
| + | when other |
||
| + | move 1 to dal-result |
||
| + | end-evaluate. |
||
| + | |||
| + | exit program. |
||
| + | |||
| + | r80-get-next-prime. |
||
| + | |||
| + | perform s02-fetch. |
||
| + | |||
| + | r81-get-next-divider. |
||
| + | |||
| + | add 1 to old-ident giving new-ident. |
||
| + | * display "gen-methods: " gen-methods. |
||
| + | * display "primes.cbl ident: " old-ident " " new-ident. |
||
| + | |||
| + | EXEC SQL at primes |
||
| + | SELECT prime INTO :test-divider FROM primes |
||
| + | WHERE ident = :new-ident |
||
| + | END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | next sentence |
||
| + | * display "select new-divider ok: " test-divider upon scherm |
||
| + | else |
||
| + | display SQLCODE upon scherm |
||
| + | display "select new-divider nok" upon scherm. |
||
| + | |||
| + | * display "primes.cbl test-divider: " test-divider. |
||
| + | |||
| + | move new-ident to old-ident. |
||
| + | |||
| + | r83-write-prime. |
||
| + | |||
| + | EXEC SQL at primes |
||
| + | INSERT INTO primes ( prime ) VALUES ( :prime ) |
||
| + | END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | next sentence |
||
| + | * display SQLCODE upon scherm |
||
| + | * display "primes.cbl insert next prime and new-ident ok: " |
||
| + | * prime-number upon scherm |
||
| + | else |
||
| + | display SQLCODE upon scherm |
||
| + | display "primes.cbl insert next prime nok: " |
||
| + | prime-number upon scherm. |
||
| + | |||
| + | |||
| + | * EXEC SQL at primes |
||
| + | * COMMIT |
||
| + | * END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | next sentence |
||
| + | * display SQLCODE upon scherm |
||
| + | * display "commit ok: " upon scherm |
||
| + | else |
||
| + | display SQLCODE upon scherm |
||
| + | display "commit nok: " upon scherm. |
||
| + | |||
| + | r90-generate-primes. |
||
| + | |||
| + | perform s00-connect. |
||
| + | |||
| + | if dal-method-ok then |
||
| + | |||
| + | move 'log-message' to process-message |
||
| + | |||
| + | EXEC SQL at primes |
||
| + | insert into primes ( prime ) values ( 2 ) |
||
| + | END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | move 0 to dal-result |
||
| + | move 1 to primes-sequence |
||
| + | move 2 to prime-number |
||
| + | move 'Initial insert ok.' |
||
| + | to process-message |
||
| + | else |
||
| + | move |
||
| + | 'Initial insert failed, terminating program.' |
||
| + | to process-message |
||
| + | move 1 to dal-result. |
||
| + | |||
| + | move 'log-message' to program-message. |
||
| + | call "primesui" using primes-ui. |
||
| + | |||
| + | |||
| + | |||
| + | r99-stop-primes. |
||
| + | |||
| + | perform s99-disconnect. |
||
| + | |||
| + | s00-connect. |
||
| + | MOVE 'CONNECT' TO CUR-STEP. |
||
| + | EXEC SQL |
||
| + | connect TO :DATASRC AS primes USER :DBUSR USING :DBPWD |
||
| + | END-EXEC. |
||
| + | move 'log-message' to process-message. |
||
| + | if SQLCODE = 0 then |
||
| + | move 0 to dal-result |
||
| + | move 'Database initialisation ok.' |
||
| + | to program-message |
||
| + | call "primesui" using primes-ui |
||
| + | else |
||
| + | move |
||
| + | 'Database initialisation failed, terminating program.' |
||
| + | to program-message |
||
| + | call "primesui" using primes-ui |
||
| + | move 1 to dal-result. |
||
| + | |||
| + | s01-cursor. |
||
| + | |||
| + | move 'primes' to program-name. |
||
| + | |||
| + | EXEC SQL at primes START TRANSACTION END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | move 'Start transaction ok.' |
||
| + | to program-message |
||
| + | else |
||
| + | move 'Start transaction nok.' |
||
| + | to program-message |
||
| + | move 1 to dal-result. |
||
| + | |||
| + | move 'log-message' to program-message. |
||
| + | call "primesui" using primes-ui. |
||
| + | |||
| + | * display "start transaction nok" upon scherm. |
||
| + | |||
| + | if dal-method-ok then |
||
| + | |||
| + | EXEC SQL OPEN primescursor END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | move 'Start primescursur ok.' |
||
| + | to program-message |
||
| + | else |
||
| + | move 'Start primescursor nok.' |
||
| + | to program-message |
||
| + | move 1 to dal-result. |
||
| + | |||
| + | |||
| + | move 'primes' to program-name. |
||
| + | move 'log-message' to program-message. |
||
| + | call "primesui" using primes-ui. |
||
| + | |||
| + | * if dal-method-ok then |
||
| + | * perform s02-fetch. |
||
| + | |||
| + | * if SQLCODE = 0 then |
||
| + | * move 'Fetch first row ok.' to program-message |
||
| + | * move 0 to dal-result |
||
| + | * move r-ident to primes-sequence |
||
| + | * move r-prime to prime-number |
||
| + | * else |
||
| + | * move 'Fetch first row nok.' to program-message |
||
| + | * move 1 to dal-result. |
||
| + | |||
| + | * move 'primes' to program-name. |
||
| + | * move 'log-message' to program-message. |
||
| + | * call "primesui" using primes-ui. |
||
| + | |||
| + | s02-fetch. |
||
| + | |||
| + | EXEC SQL FETCH primescursor INTO :primes-row END-EXEC. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | move r-ident to primes-sequence |
||
| + | move r-prime to prime-number |
||
| + | move 0 to dal-result |
||
| + | else |
||
| + | move 'Fetch row nok.' to program-message |
||
| + | move 1 to dal-result |
||
| + | move 'primes' to program-name |
||
| + | move 's02-fetch' to program-paragraph |
||
| + | move 'log-message' to ui-methods |
||
| + | call "primesui" using primes-ui. |
||
| + | |||
| + | s99-disconnect. |
||
| + | |||
| + | MOVE 'DISCONNECT' TO CUR-STEP. |
||
| + | EXEC SQL connect RESET primes END-EXEC. |
||
| + | |||
| + | move 'log-message' to process-message. |
||
| + | |||
| + | if SQLCODE = 0 then |
||
| + | move 0 to dal-result |
||
| + | move 'Close database ok.' |
||
| + | to process-message |
||
| + | call "primesui" using primes-ui |
||
| + | else |
||
| + | move 'Database initialisation failed, ending program.' |
||
| + | to process-message |
||
| + | call "primesui" using primes-ui |
||
| + | move 1 to dal-result. |
||
| + | display "s99 disconnect from database" upon scherm. |
||
| + | display SQLCODE upon scherm. |
||
</pre> |
</pre> |
||
<hr/> |
<hr/> |
||
| − | Terug naar: [[ |
+ | Terug naar: [[primes]] |
Latest revision as of 21:57, 9 December 2025
This is the complete source code of the primes Cobol program, which contains the high level SQL statements.
identification division.
program-id. primes.
environment division.
configuration section.
source-computer. linux-laptop.
object-computer. linux-laptop.
special-names.
console is scherm.
data division.
working-storage section.
01 filler pic x(32) value "Start WS primes".
01 DATASRC PIC X(64) value
"pgsql://localhost:5432/primes&default_schema=primes".
01 DBUSR PIC X(64) value "primes_user".
01 DBPWD PIC X(64) value "pr1mes_user".
01 CUR-STEP PIC X(16).
01 primes-row.
03 r-ident pic 9(9) comp-3.
03 r-prime pic 9(9) comp-3.
01 prime-count pic 9(9).
01 prime_seq pic 9(9).
01 divider pic 9(9).
01 primes.
03 primes-result pic 9(2) value zero.
88 init-primes-ok value 1.
88 first-divider-ok value 2.
88 next-divider-ok value 3.
03 test-number pic 9(9).
03 test-number-sqr pic 9(9)v9(9).
03 test-divider pic 9(9).
03 test-rest pic 9(9)v9(9).
03 old-test-number pic 9(9).
03 old-ident pic 9(9).
03 new-ident pic 9(9).
EXEC SQL
INCLUDE primes-table
END-EXEC.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
EXEC SQL AT primes
DECLARE primescursor CURSOR FOR
SELECT * FROM primes
END-EXEC.
copy primes-ui.
linkage section.
copy primes-dal.
procedure division using primes-dal.
evaluate true
when next-prime
perform r80-get-next-prime
when next-divider
perform r81-get-next-divider
when write-prime
perform r83-write-prime
when db-connect
perform s00-connect
when db-cursor
perform s01-cursor
when db-disconnect
perform s99-disconnect
when other
move 1 to dal-result
end-evaluate.
exit program.
r80-get-next-prime.
perform s02-fetch.
r81-get-next-divider.
add 1 to old-ident giving new-ident.
* display "gen-methods: " gen-methods.
* display "primes.cbl ident: " old-ident " " new-ident.
EXEC SQL at primes
SELECT prime INTO :test-divider FROM primes
WHERE ident = :new-ident
END-EXEC.
if SQLCODE = 0 then
next sentence
* display "select new-divider ok: " test-divider upon scherm
else
display SQLCODE upon scherm
display "select new-divider nok" upon scherm.
* display "primes.cbl test-divider: " test-divider.
move new-ident to old-ident.
r83-write-prime.
EXEC SQL at primes
INSERT INTO primes ( prime ) VALUES ( :prime )
END-EXEC.
if SQLCODE = 0 then
next sentence
* display SQLCODE upon scherm
* display "primes.cbl insert next prime and new-ident ok: "
* prime-number upon scherm
else
display SQLCODE upon scherm
display "primes.cbl insert next prime nok: "
prime-number upon scherm.
* EXEC SQL at primes
* COMMIT
* END-EXEC.
if SQLCODE = 0 then
next sentence
* display SQLCODE upon scherm
* display "commit ok: " upon scherm
else
display SQLCODE upon scherm
display "commit nok: " upon scherm.
r90-generate-primes.
perform s00-connect.
if dal-method-ok then
move 'log-message' to process-message
EXEC SQL at primes
insert into primes ( prime ) values ( 2 )
END-EXEC.
if SQLCODE = 0 then
move 0 to dal-result
move 1 to primes-sequence
move 2 to prime-number
move 'Initial insert ok.'
to process-message
else
move
'Initial insert failed, terminating program.'
to process-message
move 1 to dal-result.
move 'log-message' to program-message.
call "primesui" using primes-ui.
r99-stop-primes.
perform s99-disconnect.
s00-connect.
MOVE 'CONNECT' TO CUR-STEP.
EXEC SQL
connect TO :DATASRC AS primes USER :DBUSR USING :DBPWD
END-EXEC.
move 'log-message' to process-message.
if SQLCODE = 0 then
move 0 to dal-result
move 'Database initialisation ok.'
to program-message
call "primesui" using primes-ui
else
move
'Database initialisation failed, terminating program.'
to program-message
call "primesui" using primes-ui
move 1 to dal-result.
s01-cursor.
move 'primes' to program-name.
EXEC SQL at primes START TRANSACTION END-EXEC.
if SQLCODE = 0 then
move 'Start transaction ok.'
to program-message
else
move 'Start transaction nok.'
to program-message
move 1 to dal-result.
move 'log-message' to program-message.
call "primesui" using primes-ui.
* display "start transaction nok" upon scherm.
if dal-method-ok then
EXEC SQL OPEN primescursor END-EXEC.
if SQLCODE = 0 then
move 'Start primescursur ok.'
to program-message
else
move 'Start primescursor nok.'
to program-message
move 1 to dal-result.
move 'primes' to program-name.
move 'log-message' to program-message.
call "primesui" using primes-ui.
* if dal-method-ok then
* perform s02-fetch.
* if SQLCODE = 0 then
* move 'Fetch first row ok.' to program-message
* move 0 to dal-result
* move r-ident to primes-sequence
* move r-prime to prime-number
* else
* move 'Fetch first row nok.' to program-message
* move 1 to dal-result.
* move 'primes' to program-name.
* move 'log-message' to program-message.
* call "primesui" using primes-ui.
s02-fetch.
EXEC SQL FETCH primescursor INTO :primes-row END-EXEC.
if SQLCODE = 0 then
move r-ident to primes-sequence
move r-prime to prime-number
move 0 to dal-result
else
move 'Fetch row nok.' to program-message
move 1 to dal-result
move 'primes' to program-name
move 's02-fetch' to program-paragraph
move 'log-message' to ui-methods
call "primesui" using primes-ui.
s99-disconnect.
MOVE 'DISCONNECT' TO CUR-STEP.
EXEC SQL connect RESET primes END-EXEC.
move 'log-message' to process-message.
if SQLCODE = 0 then
move 0 to dal-result
move 'Close database ok.'
to process-message
call "primesui" using primes-ui
else
move 'Database initialisation failed, ending program.'
to process-message
call "primesui" using primes-ui
move 1 to dal-result.
display "s99 disconnect from database" upon scherm.
display SQLCODE upon scherm.
Terug naar: primes