Marc's Place

E$TEXT - Inname-, weergave- en formatteringsroutine




Aanroep
 
xcall e$text (positie, waarde[, [vlaggen][, [masker][, tekst]]])
 
Common velden vóór aanroep
e$_atc
Nummer van het kleurenpalet uit synergy.ini. Wordt alleen gebruikt indien > 0.
e$_att
Code voor weergave / inname attributen.
e$_curw
Venster-identificatie van het actieve uitvoervenster.
e$_upc
Invoer omzetten naar hoofdletters, indien het kleine letters betreft.
1 = Ja
0 = Nee, maar let ook op e$dbl_flags, want daar staat of de ingave van kleine letters is toegestaan.
e$_sup
Opsparen beeldschermuitvoer. Indien dit niet het geval is (0), wordt een W_UPDT uitgevoerd.
Parameters te vullen bij aanroep
positie (d5)
Positie (RRKKK) op het scherm waar de inname of weergave plaats moet vinden.
RR = Beeldschermregelnummer
KKK = Beeldschermkolomnummer
Indien deze parameter de waarde NUL heeft, vindt de weergave of inname op de actuele cursorpositie plaats (rr kan nul en/of kkk kan nul zijn). De actuele cursor-positie is de positie na de laatst weergegeven waarde of waar de cursor expliciet is gepositioneerd met bijvoorbeeld e$screen.
waarde (a*, d*)
Een variabele, numeriek of alfanumeriek, die dient voor de inname van een waarde of die een waarde bevat die weergegeven of die, via een masker, in tekst geformatteerd moet worden.
Alleen gehele, zoned, veldtypen hebben zin, dus géén packed, integer of velden met een implied decimal point (D4.2), etc..
vlaggen (d5)
De vlaggen tellen van rechts naar links. Vlag 1 is de meest rechtse, vlag 5 de meest linkse.
Vlag 1 : geeft de actie voor de routine aan.
  • 0 = Weergave.
    Waarde wordt op positie getoond.
  • 1 = Inname
    De gegevens in waarde worden als default waarde gepresenteerd.
  • 2 = Inname met een leeg veld.
    De gegevens in waarde worden NIET overgenomen.
  • 3 = Geen weergave maar formattering
    Formatteer waarde en stop het resultaat in tekst. Wordt intern automatisch op 3 gezet indien tekst wordt meegegeven.
Vlag 2 : geeft de manier van invoeren aan.
  • 0 = Normaal
    Ingave geschied van links naar rechts (waarde = alfanumeriek)
  • 1 = Van rechts naar links
    Ingave geschied van rechts naar links (waarde = alfanumeriek)
  • 2 = Van rechts naar links
    Ingave geschied van rechts naar links (waarde = numeriek).
    Deze modus kan geen negatieve waarden aan, niet bij inname en niet bij weergave (zie voor die mogelijkheid het tweede type masker).
Vlag 3 : bestuurt de afhandeling van de default waarde.
  • 0 = Initiële waarde is als ingegeven waarde.
    Wanneer er, op welke positie dan ook, een <RET> wordt gegeven, wordt alle tekst achter de cursor gewist.
  • 1 = Overschrijf initiële waarde.
    De initiële waarde wordt gelijk bij het ingeven van een teken gewist en overschreven door de invoer. De initiële waarde is over te nemen door op de eerste positie een <RET> te geven, voordat je gaat tikken.
  • 2 = Initiële waarde overnemen.
    Zoals bij 0, echter is nu de initiële waarde over te nemen door op de eerste positie een <RET> te geven, voordat je gaat tikken.
Vlag 4 : bestuurt de weergave van invoer.
  • 0 = Echo ingegeven tekens naar het scherm.
  • 1 = Doe dat niet.
    De cursor blijft op dezelfde positie staan en je ziet verder niets gebeuren. Net zoals bij het ingeven van het wachtwoord onder VMS en Unix.
Vlag 5 : bestuurt het bereiken van het veld-einde.
  • 0 = Belsignaal
    Als het veld vol is, stuurt de routine een bel-signaal naar het scherm.
  • 1 = <RETURN>
    Als het veld vol is, wordt automatisch een <RETURN> gegeven en wordt de ingave beëindigd. Dit geld niet bij 100% numerieke velden (zie masker).
Indien deze parameter niet wordt meegegeven, krijgen alle vlaggen de waarde NUL, wat inhoud dat de routine in weergave-modus staat.
masker (a*)
Een masker dat het volgende doel kan hebben:
  • Besturing van de inname
    De inname van een veld geschied volgens het masker. Alleen de ingetoetste gegevens worden aaneengesloten aan het programma teruggegeven.
  • Besturing van de weergave
    De weergave van een veld geschied volgens het masker.
  • Formattering in een ander veld
    De inhoud van het veld wordt geformatteerd door middel van het masker en in een ander veld geplaatst. Dat is handig voor afdruk-programma's die bedragen moeten formatteren, etc..
Er zijn verschillende maskers mogelijk. Deze zijn natuurlijk afhankelijk van het type veld. Het eerste type masker wordt opgebouwd uit tekens waar geen inname plaats kan vinden en tekens waar wel inname plaats kan vinden. De eerste soort tekens verzin je zelf, de tweede soort tekens schrijft de routine voor:
Alfanumerieke velden
~ = Alleen a t/m z, A t/m Z en de spatie worden geaccepteerd.
_ = Alle tekens wordt geaccepteerd.
X = Alleen 0 t/m 9. Bij 0 wordt de nul getoond.
Z = Alleen 0 t/m 9. Bij 0 wordt de nul NIET getoond indien links ervan ook alleen maar nullen voorkomen.
Voor ingave van rechts naar links moet je vlag 2 op 1 zetten.
Numerieke velden
X = Alleen 0 t/m 9. Bij 0 wordt de nul getoond.
Z = Alleen 0 t/m 9. Bij 0 wordt de nul NIET getoond indien links ervan ook alleen maar nullen voorkomen.
Voor ingave van rechts naar links moet je vlag 2 op 2 zetten.
Het tweede type masker is uitsluitend bedoeld voor numerieke velden. De routine schakelt dan ook helemaal over op numerieke ingave. Het is een masker dat verkort weergeeft hoe het masker er uit moet gaan zien, met nog wat extra's:
Numerieke velden
Het masker is als volgt opgebouwd: VXNY, waarbij:
V staat voor:
@ = Voorloopnullen.
^ = Geen voorloopnullen.
# = Voorloopnullen, geen duizendtalscheidingsteken.
& = Geen voorloopnullen, geen duizendtalscheidingsteken.
X staat voor:
Het aantal posities voor de komma.
N staat voor de decimale komma:
, = geen negatieve waarden toegestaan.
; = wel negatieve waarden toegestaan.
Y staat voor:
Het aantal posities na de komma.
Dus wil je een D8-veld innemen als bedragveld, dan geef je het masker "^6;2" mee. Mag het alleen een positieve waarde krijgen, dan geef je "^6,2" mee als masker.
Indien deze parameter niet wordt meegegeven, wordt naar vlag 2 gekeken of de inname volgens een standaard masker moet plaatsvinden. Is vlag 2 niet nul, dan wordt een masker van louter 'ZZZZZ...' gehanteerd. Is vlag 2 wel nul, dan wordt er geen masker toegepast.
Beperkingen
Uit bovenstaande volgt dat bij het samenstellen van een masker rekening gehouden moet worden met de volgende uitsluitingen:
  • Geen @, ^, # of & als eerste teken.
  • Geen ~, _, X en Z gebruiken.
Genoemde tekens en op hun eventuele positie worden door de routine beschouwd als inname-posities of als maskerttype aanduiding.
Parameters gevuld bij terugkeer
waarde (a*, d*)
De ingetoetste tekenreeks.
Alleen gehele, zoned, veldtypen hebben zin, dus géén packed, integer of velden met een implied decimal point (D4.2), etc..
tekst (a*)
Bevat de door middel van masker geformatteerde waarde.
Common velden gevuld bij terugkeer
e$_atc
Op NUL gezet.
e$_att
Op NUL gezet.
e$_len
Lengte van de ingave zonder achterliggende spaties.
e$_upc
Op NUL gezet.
e$_chr
Dit veld is een group en is opgedeeld in twee velden, te weten:
  • ck
    Staat voor Controlling Key. Is gevuld met 0, 1 of 2 wat staat voor Niets, SHIFT-toets ingedrukt, CTRL-toets ingedrukt.
  • ky
    Bevat de toetscode volgens e$keys.h
fkyara
Dit commonveld bevat 36 D1 velden (F01 t/m F36), elk overeenkomend met een functietoets van F1 t/m F36. De bij de functietoets behorende F-variabele wordt met 1 gevuld. Dan kan je gewoon if F03 return programmeren.
Voorbeelden
Als eerste is het belangrijk te weten dat informatie over welke toetsaanslagen er mogelijk zijn te vinden is in functietoetsen.
 
; Inhoud van een alfanumeriek veld tonen
xcall e$text (rrkkk, veld)
 
; Inhoud van een alfanumeriek veld van
; links naar rechts geformatteerd tonen
xcall e$text (rrkkk, veld, , 'S/N: __-____ / __-_-_')
 
; Inhoud van een alfanumeriek veld van
; links naar rechts geformatteerd in
; BUFF terugkrijgen
xcall e$text (0, veld, , 'S/N: __-____ / __-_-_', buff)
 
; Idem als de vorige, maar nu van rechts
; naar links geformatteerd.
xcall e$text (0, veld, 10, 'S/N: __-____ / __-_-_', buff)
 
; Inhoud van een numeriek veld tonen (zonder interpunctie)
xcall e$text (rrkkk, veld, 20)
 
; Idem als de vorige, maar nu van rechts
; naar links geformatteerd.
xcall e$text (rrkkk, veld, 20, 'S/N: XX-XXXX / XX-X-X')
 
; Idem als de vorige, en nu in BUFF teruggegeven.
; Het resultaat wordt in buff LINKS uitgelijnd.
xcall e$text (0, veld, 20, 'S/N: XX-XXXX / XX-X-X', buff)
 
; Inname van een alfanumeriek
xcall e$text (rrkkk, veld, 1)
 
; Idem als boven maar nu met de inname van rechts naar links
xcall e$text (rrkkk, veld, 21)
 
; Inname van een alfanumeriek veld waarbij de
; standaardwaarde bij de eerste ingave in zijn geheel
; door het eerst getypte teken wordt overschreven.
xcall e$text (rrkkk, veld, 101)
 
; Inname van een alfanumeriek veld als wachtwoord.
xcall e$text (rrkkk, veld, 1001)
 
; Inname van een alfanumeriek veld waarbij automatisch
; een <RETURN> wordt gegenereerd als het veld vol is.
xcall e$text (rrkkk, veld, 10001)
 
; Inname van een alfanumeriek veld waarbij veld intern
; eerst blanco wordt gemaakt, zodat er met een leeg
; veld wordt gestart.
xcall e$text (rrkkk, veld, 2)
 
; Inname van 6 numerieke posities zonder voorloopnullen,
; zonder komma, met duizendscheidingsteken en er zijn
; geen negatieve waarden toegestaan.
xcall e$text (rrkkk, veld, 1, '^6')
 
; Inname van 6 numerieke posities met voorloopnullen,
; zonder komma, met duizendscheidingsteken en er zijn
; wel negatieve waarden toegestaan.
xcall e$text (rrkkk, veld, 1, '@6;')
 
; Inname van 6 numerieke posities met voorloopnullen,
; zonder komma, zonder duizendscheidingsteken en er zijn
; wel negatieve waarden toegestaan.
xcall e$text (rrkkk, veld, 1, '#6;')
 
; Inname van 8 numerieke posities met voorloopnullen,
; met zes posities voor en twee posities na de komma,
; zonder duizendscheidingsteken en er zijn wel negatieve
; waarden toegestaan.
xcall e$text (rrkkk, veld, 1, '#6;2')
 
; Idem als de vorige, en nu in BUFF teruggegeven.
; PAS OP: Deze vorm van formattering wordt in BUFF geheel
; rechts uitgelijnd.
xcall e$text (0, veld, 1, '#6;2', buff)
© 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