Marc's Place

XISM1/-2/-3 - ISAM: In- en uitvoerroutines




Aanroep
 
xcall xism* (kanaal, record[, sleutel_v, sleutel_tm])
 
Common velden vóór aanroep
mhadm
Administratierecord. Het E$LIB administratie record e$adm wordt in deze routine gevuld met dit record. Dat zorgt ervoor dat beide administratierecords gelijke informatie bevatten.
mhmde
Besturingscode voor in- of uitvoer:
  • 01 - READS
    Het volgende record wordt in record teruggegeven.
  • 02 - READ
    Het record met sleutel record(sleutel_v, sleutel_tm) wordt gelezen en in record teruggegeven.
  • 03 - READ met WRITE
    Het record met sleutel record(sleutel_v, sleutel_tm) wordt in een dummy buffer gelezen. Als het record bestaat, dan wordt record teruggeschreven in het bestand.
  • 04 - STORE
    Record wordt aan het bestand toegevoegd.
  • 05 - READ met WRITE of STORE
    Zoals bij 03, maar als het record NIET bestaat, wordt 04 gedaan.
  • 06 - READ met DELETE
    Het record met sleutel record(sleutel_v, sleutel_tm) wordt in een dummy buffer gelezen. Als het record bestaat, dan wordt het verwijderd.
  • 07 - WRITE
    Het record dat met 02 werd gelocked wordt teruggeschreven in het bestand.
  • 08 - DELETE
    Het record dat met 02 werd gelocked wordt verwijderd.
De modi 02, 03, 05 en 06 vinden altijd plaats met sleutel 0 en zijn niet geschikt voor gesegmenteerde sleutels. Gebruik daarvoor idxrd.
mhnrt
Aantal seconden dat gewacht moet worden bij een leesactie op een bestand dat voor update is geopend voordat fout 40 (lock) wordt teruggegeven. De routine blijft steeds 1 seconde wachten op vrijgave van het gewenste record. Tijdens het wachten wordt onderaan het beeldscherm de tekst 'Gegevens bezet....' getoond.
Indien NUL, wordt fout 40 nooit teruggegeven en blijft de routine proberen het record te lezen.
Parameters te vullen bij aanroep
kanaal (d3)
Het kanaalnummer waarop een ISAM-bestand geopend moet zijn.
record (a*)
Bij een READ(S): de buffer waarin de sleutelwaarde zich bevind.
Bij een WRITE of een STORE: het bijgewerkte of nieuwe record.
sleuitel_v (d*)
De startpositie van de sleutelwaarde binnen record.
De start en eind posities zijn alleen van belang voor de volgende waarden van mhmde: 02, 03, 05 en 06. In alle andere gevallen kunnen ze worden weggelaten.
eind (d*)
De eindpositie van de sleutelwaarde binnen record.
De eindpositie hoeft niet persé de werkelijke eindpositie te zijn. Kleiner mag ook, groter niet.
Parameters gevuld bij terugkeer
record (a*)
Het gelezen record volgens de regels van het READ(S) statement. Maximale recordgrootte is 8192 tekens. Echter, bij een fout:
  • 053
    Dan bevat record het record met de eerstvolgende sleutelwaarde die volgt op de meegegeven sleutelwaarde.
  • Anders
    Dan blijft record onveranderd.
Common velden gevuld bij terugkeer
mherc
Foutcode van de eventueel opgetreden fout.
mhlin
Een regelnummer in het programma waar de eventueel opgetreden fout is ontstaan.
Voorbeelden
 

De drie routines zijn alle precies gelijk, alleen de naamgeving verschilt. Dit is vanwege historische compatibiliteit met de Multihouse XIBOLs.


In het volgende voorbeeld wordt getracht een record uit het klantenbestand te lezen met als sleutelwaarde voor sleutel 0: 'EARTH'.


klant = 'EARTH'

mhmde = 2
xcall xism3 (ch_klant, klant, 1, 8)


Indien je een sleutel hebt van 16 posities groot (bijvoorbeeld klantcode (8 tekens) + ordernummer (8 tekens)) en je gebruikt mhmde = 2 om bij een bepaalde klant met lezen te beginnen, dan kan je als start / eind ook 1 / 8 meegeven. Bestaat de gevraagde klantcode, dan krijg je een fout NUL terug. Geef je echter 1 / 16 als start / eind mee, dan krijg je een fout 53 en moet je zelf het gelezen record gaan vergelijken. Een voorbeeld:


orderkop.klant = 'EARTH'

mhmde = 2
xcall xism3 (ch_order, orderkop, 1, 8)


Indien 'EARTH' orders heeft, krijg je eenfout NUL terug.


mhmde = 2
xcall xism3 (ch_order, orderkop, 1, 16)


Nu krijg je een fout 53 terug en moet je zelf "if orderkop.klant.eq.'EARTH' clear mherc" programmeren.

© 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