Primes.cbl: Difference between revisions

From Webhuis wiki
Jump to navigation Jump to search
(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")
 
No edit summary
 
(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: [[Cobol and PostgreSQL]]
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