9789176994429

Page 1





© Åke H Olsson 2017 Förlag BoD – Books on Demand, Stockholm, Sverige Tryck BoD – Books on Demand, Norderstedt, Tyskland ISBN 9789176994429


Innehåll

Innehåll............................................................................................. 5 Grunderna i RPG-free ....................................................................15 Inledning ....................................................................................15 Några grunder ................................................................................18 Något kort om ”källkodsfiler”....................................................19 Källkodstyper .........................................................................19 Vad är en modul???....................................................................20 Strukturen på en modul kodad i RPG ........................................21 Ett litet exempel .....................................................................22 Aktiveringsgrupper??? ............................................................... 24 Strukturen på källkoden till ett program ....................................24 CTL-OPT nyckelord och parametrar .........................................27 Nyckelorden ...........................................................................29 Att beskriva filer ........................................................................37 Nyckelord som hör samman med printer och WORKSTN .......39 Att beskriva sådant som hör samman med databasen................41 Deklarationer ”DCL-xx”............................................................ 43 DCL-C Namnsatta konstanter................................................43 DCL-S Fristående variabel.....................................................44 Datatyper.......................................................................... 45 Numeriska datatyper..................................................... 45 BINDEC .................................................................... 45 FLOAT ...................................................................... 45 INT ............................................................................ 46 PACKED ................................................................... 46

5


UNS .......................................................................... 47 ZONED ..................................................................... 47 Datum – tid datatyper.................................................... 47 DATE ........................................................................ 49 TIME ......................................................................... 50 TIMESTAMP ............................................................. 50 Datatyper för text .......................................................... 50 CHAR........................................................................ 50 GRAPH ..................................................................... 51 UCS2 ........................................................................ 51 VARCHAR................................................................. 51 VARUCS2 ................................................................. 52 Andra typer av variabler................................................ 52 IND............................................................................ 52 OBJECT.................................................................... 53 POINTER .................................................................. 53

DCL-DS Datastruktur ............................................................ 54 Nyckelord till DCL-DS - strukturnivå ................................. 54 BASED ......................................................................... 54 DTAARA ....................................................................... 55 EXPORT....................................................................... 55 EXTNAME .................................................................... 55 IMPORT........................................................................ 56 LIKEDS......................................................................... 56 LIKEREC ...................................................................... 56 OCCURS ...................................................................... 57

6


QUALIFIED................................................................... 57 TEMPLATE................................................................... 58 Delfält i DS ....................................................................... 58 DCL-SUBF.................................................................... 58 POS.............................................................................. 58

DCL-PR Procedure Prototype................................................60 DCL-PR raden.................................................................. 61 EXTPGM ...................................................................... 61 EXTPROC .................................................................... 62 Parametrar i prototype...................................................... 63 CONST ......................................................................... 63 VALUE.......................................................................... 64

Procedurer och funktioner.......................................................... 67 Varför? ...................................................................................67 Skillnaden mellan procedurer och funktioner........................ 67 Lokala variabler .....................................................................69 Grundstrukturen för en procedur............................................69 DCL-PROC............................................................................70 Nyckelord ......................................................................... 70 EXPORT....................................................................... 70 PGMINFO..................................................................... 70 SERIALIZE ................................................................... 70

DCL-PI...................................................................................71 Parameterdefinitioner............................................................. 71 END-PI...................................................................................72 Lokala variabler .....................................................................72

7


Returvärden ............................................................................72 Komplett exempel ..................................................................72 "Procedurdelen" i programmet...................................................73 Få stopp på programmet......................................................... 75 Litet matematik ......................................................................76 "Looping"...............................................................................80 FOR loop.......................................................................... 80 DO loopar......................................................................... 81

Villkorsuttryck .......................................................................83 Operationskoder .....................................................................85 Data area operationer ...................................................... 85 Fil operationer .................................................................. 85 Initialization ...................................................................... 87 Tilldelning av värden ........................................................ 87 Strukturer - strukturerad programmering .......................... 88 Subrutiner......................................................................... 91

XML........................................................................................... 93 Inbyggda funktioner - "Built in Functions" ............................... 94 Redigeringskoderna "Edit Codes" .............................................99 Alla RPG-verb ("operationskoder") i bokstavsordning ...........101 ACQ - "Acquire"..................................................................101 BEGSR - "Begin Subroutine" ..............................................101 CALLP - "Call Procedure" ..................................................102 CHAIN - Läsning med nyckel från fil .................................104 CLEAR - Töm värden.......................................................... 105 CLOSE - Stäng fil ................................................................ 107

8


COMMMIT - Transaktionshantering...................................108 DEALLOC - Frigör minne (heap storage)........................... 109 DELETE - Ta bort rad i tabell .............................................109 DOU - "DO Until" ............................................................... 110 DOW - "DO While" ............................................................. 110 DSPLY - "Display message" ...............................................111 DUMP - "Program Dump"...................................................111 ELSE ....................................................................................111 ELSEIF.................................................................................112 END - Olika slutparenteser för strukturer............................ 113 EVAL - "Evaluate" .............................................................. 114 EVALR - "Evalutate + Right Adjust"..................................114 EVAL-CORR -"Evaluate corresponding" ........................... 115 EXCEPT - "Exception output".............................................116 EXFMT - "Execute format" .................................................117 EXSR - "Execute Subroutine" .............................................118 FEOD - "Force End of Data" ...............................................119 FOR - Början på en "FOR"-loop..........................................119 FORCE - "Force file to be read next Cycle"........................ 120 GOTO...................................................................................120 IF - Generellt villkor ............................................................ 121 IN - Läs in en dataarea ......................................................... 122 ITER - "Iterate" ....................................................................123 LEAVE - Lämna loop .......................................................... 123 LEAVESR - Lämna subrutin. ..............................................123 MONITOR - "Begin Monitor Group" .................................124

9


ON-ERROR .........................................................................125 OPEN - Öppna fil.................................................................126 OTHER - "Otherwise" i SELECT .......................................126 OUT - Skriv tillbaka dataarea ..............................................127 POST....................................................................................128 READ - Läs ett record (rad) i en fil (tabell)......................... 128 READC - "Read Changed Record" .....................................129 READE ("Read Equal")....................................................... 130 READP ("Read Prior") ........................................................ 130 READPE ("Read Prior Equal")............................................131 REL ("Release")...................................................................131 RESET .................................................................................131 RETURN (Avsluta program/procedur)................................ 131 ROLBK ("Roll back").......................................................... 133 SELECT (Början på en "select" grupp) ............................... 134 SETGT ("Set greater") ......................................................... 135 SETLL ("Set lower limit") ...................................................135 SORTA (Sortera en array) ...................................................135 TEST (Kontrollera om datum/tid har giltigt värde) .............136 UNLOCK ("Lås upp") ......................................................... 137 UPDATE (Uppdatera post)..................................................138 WHEN (Del av selectstrukturen) .........................................138 WRITE (Skriv post) ............................................................. 139 XML-INTO (Parse av XML-meddelande till struktur) .......139 XML-SAX (Parse av XML-meddelande)............................ 139 Och då var det slut på "RPG-verb" ..........................................140

10


Built in Functions - "BIF" ........................................................ 141 %ABS - Abslutvärdet........................................................... 142 %ADDR - Adressen till en variabel.....................................142 %ALLOC - "Allocate Storage"............................................144 "Diverse" BIF som agerar på bitnivå. .................................147 %CHAR - Konverterar till character. ..................................147 %CHECK - "Check Characters"..........................................149 %CHECKR - "Check Reverse" ...........................................150 %DATE - Datum .................................................................150 %DAYS - Antal dagar ......................................................... 151 %DEC - Konvertera till numeriskt (decimal) ...................... 151 %DECH - Samma som %DEC, med avrundning ................152 %DECPOS - "Number of decimal positions"...................... 153 %DIFF - Skilladen mellan två tidsuttryck ........................... 153 %EDITC - Redigerat värde..................................................155 %EDITW - Redigerat värde med redigeringsmask .............156 %ELEM - Antal element i struktur ......................................157 %EOF - Testa End of File....................................................158 %EQUAL.............................................................................158 %ERROR - Kontrollera om fel............................................159 %FIELDS.............................................................................159 %FLOAT - Konvertera till flyttal ........................................159 %FOUND - Kontrollera om post eller text finns.................159 %GRAPH - "Convert to Graphic value".............................. 160 %HANDLER - "Handling procedure".................................161 %HOURS.............................................................................163

11


%INT - Konvertera till heltal ...............................................163 %INTH - Konvertera till heltal med avrundning .................163 %KDS - "Key Data Structure"............................................164 %LEN - Längd .....................................................................164 %LOOKUP - Hitta ett element i en array ............................ 165 %MINUTES.........................................................................167 %MONTHS .........................................................................167 %MSECONDS.....................................................................167 %NULLIND.........................................................................167 %OCCUR.............................................................................168 %OPEN - Testa om en fil är öppen eller inte ...................... 169 %PADDR - "Procedure Address"........................................170 %PARMS.............................................................................170 %REALLOC - "Reallocate storage"....................................171 %REM -"Remainder" dvs rest vid division ......................... 171 %REPLACE - Ersätt sträng .................................................172 %SCAN - Sök sträng ........................................................... 172 %SCANRPL - Sök och ersätt ..............................................173 %SECONDS - Sekunder...................................................... 173 %SHTDN - Testa om nerstängning begärd ......................... 173 %SIZE - Storleken i Bytes ...................................................174 %SQRT - Kvadratrot ........................................................... 175 %STATUS - Returnera status ..............................................175 %STR - "Get or store null terminated string) ...................... 175 %SUBARR - "Set get portion of array"............................... 176 %SUBDT - Plocka ut del av datum/tid/timestamp ..............176

12


%SUBST - "Substring" ........................................................ 177 %TIME.................................................................................177 %TIMESTAMP - Konvertera till timestamp....................... 178 %TLOOKUP - "Lookup table element" .............................. 178 %TRIM - Ta bort inledande och avslutande blanka ............178 %TRIML - Ta bort inledande blanka...................................178 %TRIMR - Ta bort avslutande blanka.................................179 %UCS2 - Konvertera till UCS2 format ............................... 179 %UNS - "Convert to unsigned format"................................ 179 %XFOOT - Summera element i en array............................. 179 %XLATE - "Translate"........................................................ 181 %XML .................................................................................182 %YEARS .............................................................................182 Något om Workstn och printer.................................................184 Workstn................................................................................184 Felhantering ................................................................... 187

Printer...................................................................................187 Och databas då? .......................................................................188 Komponenterna i en SQL-sats .............................................191 Hämta data från en rad ("record") i databasen ............... 191 Hämta flera rader som uppfyller ett villkor....................... 193 Skriva nya rader (poster)? .............................................. 195 Massuppdateringar......................................................... 196

När är det rätt med dynamisk SQL?.....................................200 Cursor? .................................................................................201 View?? .................................................................................201

13


Ordning och reda?? .............................................................. 202 API:er ....................................................................................... 203 SYSTEM – utför commando ...............................................203 API:er för datakö (“data queue”) .........................................204 Utvecklingsverktyg ..................................................................204 RDI! ..................................................................................... 204 Syntaxkontroll vid inmatning ........................................... 204 Flera källkoder öppna samtidigt...................................... 204 Större utrymme!.............................................................. 204 Återkoppling vid kompilering........................................... 205 Bättre debug................................................................... 205 Direktkoppling till RPGLE referensmanual...................... 205 Strukturvisning ............................................................... 205 Plug-ins .......................................................................... 205 Lönsamt! ........................................................................ 205

Change management ............................................................ 206 Vad är ett binding-directory..................................................... 207 Att skapa ..............................................................................207 Detaljerna i ...........................................................................207 Använda ...............................................................................208 Till allra sist .............................................................................208

14


Grunderna i RPGfree Inledning

Det är nu väldigt länge sedan en svensk lärobok i programspråket RPG gavs ut. Närmare bestämt 1978! När jag tänker litet mer på den saken så var rätt många av denna boks läsare nog inte ens födda vid den tiden. Samtidigt är det också så att programspråket i sig har förändrats enormt mycket på senare tid - särskilt i och med att RPG i "fullt fritt format" släpptes. Det känns därför som att det är hög tid att en ny bok görs tillgänglig som lär ut ett modernt sätt att programmera RPG så att nya generationer programmerare får tillgång till ett "startkit". Varje lärobok i programmering kan inte bli så mycket annat än just ett startkit. Sedan måste var och en jobba (konstant!) på att vidareutveckla sina färdigheter. Det är kanske det som är charmen med den syssla som är programmering. När jag började skriva den här boken dök det genast upp ett problem - IBM har nämligen utvecklat språket genom att lägga till det fria formatet men behålla ”allt gammalt”. Man kan fortfarande koda på 1970-talsvis.

15


Jag vet att det finns massvis med gamla program där ute som underhålls år efter år och är skrivna på det sättet. DÄREMOT är det i min mening ett bevis på totalt hjärnsläpp att skriva NYA program på det viset. Därför har jag fattat beslutet att i den här boken enbart behandla:

• Fullt fritt format (d.v.s. inga gamla "specar" alls!) • Inga gamla "operationskoder" (RPG-verb) • Databasåtkomst via SQL • Det kan finnas annat som hör till antikens sophög, allt sådant hoppar jag också över.

Och faktum är att IBM faktiskt har hjälpt till här! Med en enda liten rad i början av programkoden (”**FREE”) gör man det nu omöjligt att använda antika metoder. Lysande! Men var lugn! Det finns tillräckligt mycket för att fylla den här boken och mer därtill. Denna version av boken bygger på version 7.3 av programspråket så om man har en ”gammal bok” och en nyare version (som så småningom kommer) av RPG så – grattis. Har man en äldre RPG version (och således en föråldrad version av operativsystemet) är det bara att ge sig ut och uppgradera – snarast!

16



Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.