Editing
Technical specifications
(section)
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!
== 4. Pseudocode == <span id="primesmain"></span> === 4.1 primesmain === <pre>PROGRAM primesmain INPUT: command-line argument β commandline-args CALL primesui("start") IF ui-method-ok THEN LOG "UI initialisation succeeded." LOG commandline-args ELSE DISPLAY emergency message on console STOP CASE commandline-args OF "report": LOG "Primes report generation starts." SET methods = "report" CALL primesgen(primes-session) -- report flow "generate": LOG "Primes generation starts." SET methods = "generate" -- NOTE: CALL primesgen commented out in current source OTHER: LOG "Bad parameter, program initialisation failed." CALL primesui("stop") STOP END CASE LOG "Primes run complete, program stops." CALL primesui("stop") STOP END PROGRAM</pre> <span id="primesgen-report-path"></span> === 4.2 primesgen β report path === <pre>PROCEDURE report-path CALL primes-dal("connect") IF dal-method-ok THEN LOG "Database initialisation succeeded." ELSE LOG "Database initialisation failed." SET session-result = 1 RETURN CALL primes-dal("cursor") -- START TRANSACTION + OPEN primescursor IF dal-method-ok THEN LOG "Cursor initialisation succeeded." ELSE LOG "Cursor initialisation failed." SET session-result = 1 RETURN FETCH first row via primes-dal("next-prime") IF fetch fails THEN LOG "Fetch first row nok." SET dal-result = 1 LOOP UNTIL session-method-eof SET u-sequence = primes-sequence SET u-number = prime-number CALL primesui("write") -- accumulate into print buffer CALL primes-dal("next-prime") -- advance cursor END LOOP END PROCEDURE</pre> <span id="primesgen-generate-path"></span> === 4.3 primesgen β generate path === <pre>PROCEDURE generate-path CALL primes-dal("connect") IF dal-method-ok THEN SET test-divider = 2 SET old-ident = 1 SET test-number = 3 SET test-number-sqr = SQRT(3) LOG "Database initialisation succeeded." ELSE LOG "Database initialisation failed." SET session-result = 1 RETURN LOOP UNTIL test-number = 999,999,999 DIVIDE test-number BY test-divider β test-quot REMAINDER test-rest CASE OF test-rest = 0: -- test-number is composite; move to next candidate ADD 2 TO test-number SET test-number-sqr = SQRT(test-number) SET old-ident = 1 FETCH divider[old-ident+1] via primes-dal("next-divider") test-divider > test-number-sqr: -- no factor found up to sqrt; test-number is prime CALL primes-dal("write") -- INSERT INTO primes CALL primesui("write") -- add to print buffer ADD 2 TO test-number SET test-number-sqr = SQRT(test-number) SET old-ident = 1 FETCH divider[old-ident+1] via primes-dal("next-divider") OTHERWISE: -- try next divider from DB FETCH divider[old-ident+1] via primes-dal("next-divider") END CASE END LOOP END PROCEDURE</pre> <span id="primes-dal"></span> === 4.4 primes (DAL) === <pre>PROGRAM primes LINKAGE: primes-dal CASE dal-methods OF "connect": EXEC SQL CONNECT TO datasrc AS primes USER dbusr USING dbpwd IF SQLCODE = 0 THEN dal-result = 0 ELSE dal-result = 1 "cursor": EXEC SQL AT primes START TRANSACTION IF SQLCODE = 0 THEN EXEC SQL OPEN primescursor IF SQLCODE = 0 THEN dal-result = 0 ELSE dal-result = 1 ELSE dal-result = 1 "next-prime": EXEC SQL FETCH primescursor INTO :primes-row IF SQLCODE = 0 THEN primes-sequence = r-ident prime-number = r-prime dal-result = 0 ELSE dal-result = 1 "next-divider": new-ident = old-ident + 1 EXEC SQL SELECT prime INTO :test-divider FROM primes WHERE ident = :new-ident old-ident = new-ident "write": EXEC SQL INSERT INTO primes (prime) VALUES (:prime) "disconnect": EXEC SQL CONNECT RESET primes IF SQLCODE = 0 THEN dal-result = 0 ELSE dal-result = 1 OTHER: dal-result = 1 END CASE EXIT PROGRAM END PROGRAM</pre> <span id="primesui"></span> === 4.5 primesui === <pre>PROGRAM primesui LINKAGE: primes-ui CASE ui-methods OF "start": OPEN OUTPUT fprinter (primes.prt) IF file-status = "00" THEN ui-method-result = 0 primes-idx = 1 ELSE ui-method-result = 1 "write": t-ident(primes-idx) = u-sequence t-prime(primes-idx) = u-number primes-idx = primes-idx + 1 IF new-page THEN write heading + column header IF primes-idx = 7 THEN WRITE primes-table line to fprinter primes-idx = 1 IF linage-counter = 53 THEN write footing, increment page "log-message": DISPLAY process-message ON CONSOLE "stop": LOOP writing zero rows UNTIL new-page -- flush partial line CLOSE fprinter END CASE EXIT PROGRAM END PROGRAM</pre> ----- <span id="database-interface-specification"></span>
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