Marc's Place

E$RELIO - I/O op relative- of sequentieel bestand




Aanroep
 
xcall e$relio (actie, kanaal, record[, recordnummer])
 
Common velden vóór aanroep
e$_curw
Venster-identificatie van het actieve uitvoervenster.
Parameters te vullen bij aanroep
actie (d3)
Drie posities die elk de routine aansturen met betrekking tot de te ondernemen operatie op het ISAM bestand:
  • Positie 1 (meest rechtse) geeft de I/O operatie aan en kent de volgende waarden:
    1. READS
    2. READ
    3. WRITE
    4. WRITES
  • Positie 2 (de middelste) geeft aan of er een unlock plaats moet vinden:
    1. Unlock kanaal na elke I/U-operatie.
  • Positie 3 (de meest linkse) is om aan te geven hoeveel keer, bij een gelocked record, moet worden geprobeerd het record te lezen vóórdat de fout 40 aan het aanroepende programma wordt teruggegeven. De waarde wordt intern met 10 vermenigvuldigd, dus het minimale aantal keren is 10. NUL (0) geldt als 'oneindig blijven proberen'. Bij een lock waarbij vaak of oneindig geprobeerd moet worden het record te lezen, wordt onderin het scherm, in een apart, kaderloos venster, een lock-melding knipperend weergegeven, inclusief de bestandsspecificatie van het bestand waarop de lock betrekking heeft, zodat een gebruiker weet waarom het programma geen sjoege geeft. Een voorbeeld:

kanaal (d*)
Het kanaal waarop een relative- of sequentieel bestand geopend moet zijn.
record (a*)
De buffer met gegevens die naar het bestand geschreven moet worden.
De maximale buffergrootte voor record is 8192 bytes.
recordnummer (d*)
Het recordnummer dat gelezen moet worden of waar record geschreven moet worden.
Moet meegegeven worden als de eerste positie van vlag een 2 of 3 is.
Parameters gevuld bij terugkeer
record (a*)
De buffer met gegevens die uit het bestand gelezen moest worden.
Common velden gevuld bij terugkeer
e$_err
Foutcode van de eventueel opgetreden fout:
000 = Alles is goed gegaan.
010 = Kanaal <= nul
028 = Recordnummer is nul
031 = Record is groter dan 8192 bytes.
151 = Positie 1 van actie <= 0 of >= 5
??? = DBL-foutcode
e$_lin
Het regelnummer waar de DBL-fout optrad.
Voorbeelden
 

Sequentieel het bestand door, startende op recordnummer 10. Bij een lock ondeindig blijven proberen:

xcall e$relio (2, chlnd, land, 10)
while .not.e$_err begin
...
...
xcall e$relio (1, chlnd, land)
end

Hier een UPDATE na een record gelezen te hebben met een lock :

xcall e$relio (2, chlnd, land, landnummer)
if .not.e$_err begin
...
...
xcall e$relio (3, chlnd, land, landnummer) ; update
end

Nu wordt een record aan het eind van een bestand toegevoegd:

xcall endfl (chout)
xcall e$relio (4, chout, outrec)
© 1997- Marc Vos (and others)   -   Privacy Statement   -    Contact Me

On this website, Google Analytics is used to track visitor statistics. These are anonymised data about the number of visitors, which pages they visit on this site, from which regions they visit, which web browsers they use, etc.. You will also see non-personalised ads via Google AdSense. Cookies from Paddle or Paypal are placed when you click on a 'Buy now!' or 'Donate!' button, and possible cookies from Disqus when you use that system to comment on one or more blogposts.
Privacy Statement