Link Files and Device Drivers
Een Link File is een PxPLUS bestand om een
'ALIAS'-naam te creëren voor een bepaalde 'poort' of 'bestand' en om een Device
Driver er aan te koppelen.
Een PxPLUS Link File is een klein, eenvoudig
bestandje met drie onderdelen.
- De 'header', waarin het soort Link File staat.
- De naam van de 'andere' poort of het 'andere' bestand.
- De naam van een Device Driver (call-programma) dat zal uitgevoerd worden nadat
het 'andere' bestand geopend is. (zie Device Driver hieronder)
Dat is eigenlijk alles ... Link Files zijn kleine
bestandjes in een directory zoals er zovele zijn en hebben dezelfde regels als
andere bestanden. Dus onder UNIX moet u bv. letten op hoofd- en kleine letters.
Bij Link Files zijn er drie verschillende types,
en dat zie je aan de 'header' van de Link File. nl: [Pvxlnk], [Pvxdev], en [Pvxapr].
Intern zal PxPLUS op een andere manier met ze omgaan.
Laten we het even hebben over de 'header' van een
bestand.
Alle PxPLUS bestanden hebben een 'header'. In
'KEYED' bestanden zie je [PVXKEY] en 'INDEXED' bestanden hebben [PVXIND].
Als PxPLUS een bestand opent, eender welk
bestand trouwens, dan lezen ze dadelijk de eerste 512 bytes (of minder). Ze
kijken of de 'header' begint met '[Pvx' en zien dus dadelijk of het een van hun
bestanden is of niet. Dus elk ander bestand beschouwen ze als een ASCII-bestand.
Indien het een 'keyed' bestand is, zal PxPLUS
het op de juiste manier behandelen. De interpreter weet immers hoe de interne
structuur in elkaar zit en kan de juiste records lezen.
In geval het een Link File is, weet PxPLUS dat
ze er anders mee moeten om springen dan een 'keyed' bestand.
Vermits PxPLUS al 512 bytes gelezen heeft,
hebben ze de totale Link File in geheugen. PxPLUS analyseert dan de rest.
Van positie 9 en 60 lang bevindt zich de naam van de 'andere file'
Van positie 69 en 12 lang bevindt zich de naam van de 'CALL' of Device Driver.
Intern zal PxPLUS de Link File sluiten. Op
hetzelfde kanaal opent PxPLUS 'het andere bestand' en zorgt ervoor dat de naam
van de Link File wordt getoond als u een PRINT FID(kanaal) uitvoert. Vóór de
naam van de Device Driver wordt er '*dev' geplakt, dus weet u dat Device Drivers
zich altijd in '...../lib/_dev/' bevinden.
En tenslotte wordt de 'CALL' uitgevoerd.
Zo werkt een Link File.
U moet er dus op letten dat :
1) Het 'andere bestand' moet je in PxPLUS kunnen openen. Dus.. de juiste
rechten, het juiste pad, de juiste naam (kleine- of hoofdletters).
2) De Device Driver moet te laden en uitvoerbaar zijn met het bevel: CALL"*dev/<programma>"
Er bestaat natuurlijk een hulpprogramma om Link
Files te creëren, namelijk '*UCL'.
Ik zei al dat er drie soorten Link Files zijn. De
respectievelijke 'headers' zien er als volgt uit : [Pvxlnk], [Pvxdev] en
[Pvxapr]
Deze 'headers' zorgen er voor dat PxPLUS ze op een andere manier zal
behandelen.
[Pvxlnk] wordt gebruikt om een link te maken naar
een ander bestand, zonder een Device Driver. U kunt dus b het bestand 'KLANTEN'
verplaatsen naar een andere schijf bv. 'F:\DATA\KLANTEN' en een Link File maken
die KLANTEN noemt. Zodoende moet u niets aan uw programma's veranderen als u dit
doet.
[Pvxdev] wordt waarschijnlijk het meest gebruikt.
Hiermee open je een ander bestand of een poort en de Device Driver wordt
opgeroepen. Dit type heb je dus nodig voor printers en dergelijke.
[Pvxapr] is een Link File voor 'slave' printers.
Dus printers die gekoppeld zijn aan de printerpoort van een terminal. PxPLUS
opent de 'andere poort', voert het 'call' programma uit en stuurt het 'PS'
mnemonic naar de printer. Als het kanaal gesloten wordt stuurt PxPLUS het 'PE'
mnemonic.
Enkele voorbeelden :
(zie ook Techtip 'Windows printing')
Name of link file |
LP |
Name of file/device |
*windev*;\\texas\HP on Ne01: |
Selected driver |
HPLASER |
Name of link file |
LP |
Name of file/device |
\\server_name\shared_printer_name\ |
Selected driver |
OKI24 |
Name of link file |
/MYAPP/P1 |
Name of file/device |
>lp -d queuename -c -s 2>/dev/null |
Selected driver |
EPSON |
Name of link file |
SPOOL |
Name of file/device |
/tmp |
Selected driver |
spooler |
Name of link file |
WINDOWS |
Name of file/device |
[wdx]*winprt* |
Selected driver |
myprog |
De naam van de Link File is volledig uw keuze.
De naam van 'het andere bestand of poort' is een naam zijn die je in PxPLUS
moet kunnen openen. Dus fysieke poorten (LPT1), of spoolqueue's ( >lp -dxxx -s
..), of UNC namen (\\SERVER\PRINTER), of TCP/IP poorten ( [TCP]1000;) ODBC
verbinding, enzovoort ....
De Device Driver is een CALL-programma dat zich
moet bevinden in de '*dev' directory. Je bent vrij om er zelf eentje te maken.
Wat is een Device Driver ?
|
Een PxPLUS Device Driver is een 'CALL'-programma
om een bestand of poort, eens geopend, te initialiseren en te prepareren.
bv.
Name of 'link' file: LP
Name of file/dev.: /dev/lp0
Selected driver: OKI
OPEN(1)"LP"
Dit zou hetzelfde zijn als :
OPEN(1)"/dev/lp0"
CALL "*dev/OKI"
SETFID (1)"LP"
'OKI' is enkel maar een PxPLUS programma. Van
alles en nog wat kun je erin doen. Je kunt andere bestanden openen. Je kunt de
gebruiker bepaalde dingen laten invoeren. Je kunt andere 'CALL's laten uitvoeren.
Alles wat je in een gewone CALL kunt doen, kun je hier ook.
Bekijk eens een Device Driver, zoals HPLASER. Dus,
LOAD "*dev/hplaser".
In het begin staat er een regel die begint met
DEFTTY (LFO) cols,rows of DEFPRT (LFO) cols,rows.
DEFTTY and DEFPRT vertellen PxPLUS dat het om
een scherm of een printer gaat. Zonder dit denkt PxPLUS dat het
een bestand is. Dus zo weet PxPLUS dat ze de FIN() in TERMINAL formaat moeten
teruggeven indien DEFTTY gebruikt en dus FIN() in PRINTER formaat, indien DEFPRT.
COLS en ROWS dienen ook voor de FIN() en voor
functies zoals MXC() en MXL().
LFO en LFA zijn twee systeemvariabelen, zoals DAY
of SSN.
LFO staat voor Last File Open en LFA staat voor Last
File Accessed.
Een simpel programma, zoals '*dev/hplaser', toont
u dat je zelf mnemonics kunt maken. Ze bestaan zo lang het kanaal geopend blijft
en zijn dus specifiek voor dat kanaal.
Met de functie MNM() kunt u de waarde van een
mnemonic lezen en dus hergebruiken voor een ander kanaal.
Bv.: Je definieert de 'PS' en 'PE' mnemonic voor je scherm.
In de Device Driver voor je 'slave' printer kun je dan de 'PE' en 'PS' mnemonics
halen van kanaal 0 (jouw scherm) en ze toepassen op je printer kanaal.
Verder zijn er enkele mnemonics met een speciale
betekenis.
'*C' is een mnemonic die automatisch gestuurd
wordt als het kanaal gesloten wordt.
Meestal zet men daar de 'reset' codes om de printer te initialiseren.
In '*R' kan je een OS bevel stoppen dat zal
uitgevoerd worden als het kanaal gesloten wordt. Bv.: ' rm /tmp/lock_file '
En dan heb je nog '*I' en '*O'. Als je 'mapchan'
van UNIX kent, begrijp je wat *I en *O kunnen doen.
'*I' is een input-conversie tabel en '*O' is een output-conversie tabel.
Hiermee kun je dus bepaalde tekens veranderen in andere tekens bij in- en/of
uitvoer.
bv. MNEMONIC '*O'=$00 01 02 03.. .. ..1C 1D 1E 1F 2E
21 22 .. .. .. .. .. FE FF$
Deze tabel zal een 'spatie' als een 'punt' tonen. (De hex-waarde van een
'spatie' is $20$ en is vervangen door $2E$,
een 'punt' )
Een voorbeeld van een meer complexe Device Driver
zou kunnen zijn :
! My driver
PCHAN=LFO, PNAME$=FID(LFO)
CLOSE(PCHAN)
[ code die kijkt of er een lock-file bestaat ]
[ als de lock-file bestaat, doe een EXIT 14, zodanig dat de OPEN een ERROR=14
krijgt ]
[ code om een lock-file te creëren ]
[ code om een tijdelijk bestand te creëren : 'MYOUTPUT' ]
OPEN(PCHAN)"MYOUTPUT"
[ call het programma met de mnemonic definities ]
SETFID (PCHAN) PNAME$ ( ja, SETFID werkt ook op
bestanden !)
EXIT
Een interessante functie die PxPLUS heeft is de OPT().
Als je een OPEN(KANAAL,OPT="hallo")NAAM$ doet,
dan krijg je met de OPT(kanaal) de inhoud terug, dus 'hallo'. Je kunt er eender
wat instoppen bij de OPEN en terug uit halen in de Device Driver.
Voorbeeld:
Je hebt een Link File die noemt 'LP', 'de andere
poort' is '/dev/lp0' en de Device Driver is 'myprog'
OPEN(1,ERR=stmt,OPT="Controleer of het juiste
papier geladen is !") "LP"
<PxPLUS Intern>
[PxPLUS leest de 'LP' link file]
[Sluit het bestand 'LP']
[Opent '/dev/lp0']
[Gebruikt SETFID om de naam te veranderen van '/dev/lp0' naar 'LP']
[Call "*dev/myprog"]
<In '*dev/myprog'>
options$=OPT(LFO)
[options$ is nu 'Controleer of het juiste papier geladen is !']
IF NOT(NUL(OPTIONS$)) MSGBOX OPTION$,"Boodschap"
[call program EXITS]
<PxPLUS intern>
[Geeft eventuele EXIT numval door aan de OPEN]
Een funktie die weinig personen kennen is de SETDEV TSK().
Wie reeds met BBx gewerkt heeft, baseert zich nog
al eens op de TSK() om een lijst met printers te generen. Met PxPLUS kunnen we
dit emuleren.
Met dit bevel kun je de TSK() laden, zodat de TSK() funktie die inhoud
teruggeeft die je verwacht alsof het BBx zou zijn. Klein nadeel is dat je een
TSK() niet kunt wissen.
SETDEV TSK() $0100$+"LP"+$00$+">lp -dq1 %COPIES%
-s 2>/dev/null" +$00$
SETDEV TSK() $0100$+"P1"+$00$+"/dev/lp1"+$00$
De inhoud krijg je terug met het bevel X1$=TSK(0)
en X2$=TSK(1)
Je ziet het, praktisch alles kan in een Device
Driver.
Bekijk even '*dev/spool'. Als 'het andere bestand' wordt er een directory naam
verwacht. De directory wordt gesloten, er wordt een tijdelijk bestand gemaakt in
deze directory en de naam wordt teruggezet zoals ie was. Alle 'print's komen in
dit tijdelijk bestand terecht en zodra het kanaal gesloten wordt, wordt het
OS-bevel '>lp -d...' gestart via de mnemonic '*R'. Je kunt meerdere bevelen in
'*R' stoppen. Je moet ze dan scheiden door een ';' zoals elk OS-bevel.
Een speciale Device Driver is '*dev/windows'. Deze wordt gebruikt door 'PxPLUS
voor Windows'.
Verander dit programma liefst niet ! Eigenlijk verander je best nooit een driver
in '*dev', want indien je een nieuwe versie van PxPLUS installeert, dan worden
uw veranderingen overschreven. Je kunt wel copies maken onder een andere naam en
die veranderen naar wens. Als je iets specifieks wil doen, doe het dan in de
'lib/_udev' directory. (Indien hij niet bestaat, mag je die directory creëren)
PxPLUS kijkt altijd in deze directory of ze eenzelfde terminaldriver vinden.
In dit geval dus 'WINDOWS'. Als er daar een is, dan zal hij uitgevoerd worden.
bv.: Je wil blauwe letters op een witte achtergrond.
Maak dan een programma '*udev/windows'
0010 ! Windows
0020 print 'blue','_white','df','cs',
0030 exit
>save"*udev/windows"
>start
Eigenlijk is het alleen maar 'terminologie'. Het
hele idee van Link Files en Device Drivers is vrij simpel, omdat ... alles
mogelijk is. Je kunt alles doen wat je maar kunt inbeelden... omdat het 'maar'
een CALL-programma is. Link Files zijn slechts een manier om een ALIAS naam te
geven aan een bestand of poort of .< vul zelf in >
(Originele tekst van Gord Davey,
herwerkt en aangevuld door Tino Vanholst) |