Techtips

  • Nomadsplus Techtip juni 2015
  • IDE Techtip juni 2015
  • Techtip 1 en 2 febr 2015
  • Simple client/server
  • Dealer Key
  • ODBC 64/32 bit
  • ODBC Driver
  • JavX on PDA
  • Pseudo Printer
  • Ring Bell under XP
  • Search Rules
  • Convert to ProvideX
  • WindX
  • Webserver
  • ASCII Files
  • LINK Files
  • Windows Printing
  • Activation problems
  • POS function
  • Select verb

U kent vast het verschil tussen ‘folder style’ en ‘property sheets’ om in Nomads te editeren.

Er zijn fans van de eerste manier, er zijn er die de tweede manier verkiezen. Er is nu een derde manier, namelijk Nomads+

Nomads+ is zo’n beetje de combinatie van beide.

Hoe kunt u een keuze maken tussen ‘Nomads+’, ‘Folder style’ en ‘Property sheets’ ?

Als u een panel editeert, kies dan in het menu voor ‘Utilities’ en onderaan de dropdown menu staan de drie opties.

nomadsplus-techtip-juni2015-1

We kiezen dus voor Nomads+

Zoals gezegd, er is een gridtabel met bepaalde eigenschappen, zoals de controlnaam, tekst, positie en grootte, tabstop, tabvolgorde, enz.   Deze eigenschappen kunt u in serie editten in het grid.

Alle andere opties verander je via een klassiek dialog window.

nomadsplus-techtip-juni2015-2

Het geheel komt wel een beetje onoverzichtelijk over op een klein scherm. Het makkelijkst is dan ook het gebruik van een tweede beeldscherm om bijvoorbeeld het scherm met de Nomads+ toolbar op te parkeren, zodat uw hoofdscherm vrij is om een panel te tekenen. Gelukkig wordt bewaard waar het de vorige keer stond.

Je kunt meerdere panels gelijktijdig open hebben. Elk panel en toolbar heeft dan een eigen specifieke achtergrondkleur en id-nummer, zodat u zich niet vergist welke toolbar bij welk panel hoort.

Kortom, het proberen waard om eens van editeer stijl te veranderen. Zo kunt u kiezen wat het beste past bij u.

IDE

De nieuwe IDE al geprobeerd? IDE staat voor ‘Integrated Development Environm ent’, en is erg handig voor een ontwikkelaar. Alle tools die er zijn in PxPLUS, vind u hier namelijk samen.

Hoe start u IDE ?

In console mode, tik in: IDE

of via een snelkoppeling: E:\PvxPLUS12\pxplus.exe *ide/launcher

U krijgt dan dit scherm te zien:

Merk op dat packages of opties die niet toegankelijk zijn, met een klein rood min-teken aangeduid zijn, zoals in het voorbeeld rechts bovenstaand, ‘myTiles Tile Creator’.

U ziet ook ‘Projects’ bovenaan staan. Hier kunt u diverse projecten aanmaken. Logisch is dat u rubrieken groepeert per director y. Bijvoorbeeld ‘boekhouding’, ‘facturatie’, ‘loo nadministratie’,…

Bij EDIAS heeft iedere klant een aparte directory. Per klant is dan ook een project aangemaakt, waaraan zijn directory is verbon den.

Starten we nu Nomads op vanui t project van klant X, dan is automatisch de juiste directory actief.

Een tweede scherm is het ‘taken’ scherm. (vink ‘display tasks’ aan op het hoofdscherm onderaan)

Daarin zijn er twee tabbladen, namelijk ‘History’ en ‘Project’

Bij History krijgt u de lijst van recente taken die u heeft uitgevoerd. Dus ook die van eventueel andere projecten. De lijst wordt automatisch aangevuld zodra u een programma heeft bewerkt in IT, of u heeft een panel geëditeerd in Nomads. Noem maar op.

Bij Project, krijgt u een lijst van alle panels, rapporten, programma’s, etc…, die behoren tot het project dat actief is.

Hoe voeg je nu al die panels, rapporten en programma’s toe aan een project ? Wel, in heel wat tools vind je nu een menu item ‘projects’.

Bijvoorbeeld in Nomads.

Hier kan je dus kiezen of je enkel de geselecteerde of alle panels wilt toevoegen aan een project.

Selecteer ook eens een optie uit de lijst van toepassingen in het hoofdvenster en vink dan ‘Display Help’ aan. Je krijgt dan de juiste contextuele uitleg die hoort bij de geselecteerde module.

Ook in ‘IT’ , de program editor, is er heel wat veranderd. De ‘workspaces’ van vroeger heten nu ‘projects’.

Ook hier ziet u dat alle items van alle projecten beschikbaar zijn. Dus ook Nomads panels en dergelijke.

Samengevat: Het loont de moeite om eens nader te kijken naar deze nieuwe IDE methode. Het bespaart u als ontwikkelaar heel wat tijd.

Techtip 1:             PxPlus versie 2014 (v12) Windows activatie

Vanaf deze versie wordt het ACTIVATE.PVX bestand in een ‘PXPKEYS’ directory geplaatst, 1 directory hoger dan waar PxPlus geinstalleerd werd.

Bijvoorbeeld, indien PxPlus in de standaard “C:\PVX Plus Technologies\PxPlus 2014” directory geinstalleerd is, dan zal de activatie in de “C:\PVX Plus Technologies\PxpKeys” directory geplaatst worden. Hierdoor is de activatie niet langer een onderdeel van een specifieke PxPlus versie, en kunnen verschillende PxPlus versies (al dan niet gelijktijdig) gebruik maken van deze activatie.

 

U kunt steeds verwijzen naar een specifieke activatie door gebruik te maken

van: ActivationKey=pad_naar_directory_met_activate.pvx in de [Config] blok van het INI bestand, bijvoorbeeld:

 

[Config]

ActivationKey=D:\PxPlus\pxpkeys

 

Indien u een bestaande Windows PxPlus versie upgrade naar v2014 en er bestaat reeds een lib\keys directory (van een oudere installatie), dan zal v2014 gebruik blijven maken van deze activatie en dus geen ‘pxpkeys’ directory maken. Ook Unix en Linux v2014 versies zullen gebruik blijven maken van de activatie in de lib directory (ongeacht of er een upgrade of nieuwe installatie uitgevoerd werd).

 

 

Techtip 2:             Logfile

Vanaf PxPlus Windows versie 11 kan er in het INI bestand een LOGFILE= regel opgenomen worden in de [CONFIG] blok. LOGFILE= dient te verwijzen naar een bestaand pad, bijvoorbeeld: LOGFILE=D:\tmp\logv11.txt . Pad ‘D:\tmp’ moet dus aanwezig zijn, tekstbestand ‘logv11.txt’ zal aangemaakt worden indien het niet bestaat. Indien er in PxPlus een interne fout plaats vindt, zal PxPlus 1 of meerdere vermeldingen in het logbestand maken. Ook als PxPlus door het OS uit geheugen gehaald wordt (bijvoorbeeld door een geheugenpositie buiten het PxPlus geheugen te benaderen wat resulteert in de befaamde ‘PxPlus has stopped working’ melding), zal dit vermeld worden in het logbestand. Bij een PxPlus crash kunt u dan toch nog vaststellen, op welk punt in de applicatie het ‘probleem’ opgetreden is. De vermeldingen in het logbestand, hebben allemaal deze structuur: Datum Tijd [Programma:regel] Uitleg ivm het probleem.

Bijvoorbeeld:

Aug 13 16:52 [D:\pxplus\pxp7\misc\zip_format.pgm:160] *OUT OF MEMORY* –

Global Alloc failed

Aug 13 16:52 [D:\pxplus\pxp7\misc\zip_format.pgm:160] *OUT OF MEMORY* Unable

to allocate 1760559116 bytes

Aug 14 13:40 [*plus/web/request:120] [TCP][Winsock]Error status:10035(796:<Unk>)

Aug 19 09:44 [D:\pxplus\pvxplus11\misc\blobtest.pgm:200] Fatal exception

error code c0000005 occured

Aug 19 09:44 [D:\pxplus\pvxplus11\misc\blobtest.pgm:200] – ERR=0 CTL=0

RET=258 LFA=1 LFO=1

Aug 19 09:44 [D:\pxplus\pvxplus11\misc\blobtest.pgm:200] – Last path used:

[MySQL]mysql;

Aug 19 09:44 [D:\pxplus\pvxplus11\misc\blobtest.pgm:200] – Program stack

follows:

Sep 18 09:59 [*winlist:5193] *MEMORY LIMIT HIT* – About to report an error 31

Dec 17 09:17 [webreq:12240] SSL Chkerror socket 488 sts 0 yields 5

Dec 17 09:17 [webreq:12240] [TCP][Winsock]Error status:10035 (488:<Unk>)

Jan 13 09:12 [*ezweb/server:444] * Error:404 Not Found Request:/favicon.ico

Jan 13 09:12 [*plus/winutl/winqry:1615] Skipping ref to control 0 (Disable)

at 1615:D:\PxPLUS\PvxPlus11.5\lib\_plus\winutl\winqry

(255:D:\PxPLUS\PvxPlus11.5\lib\_winlist)

Jan 13 09:14 [*ezweb/server:36] Shutting down *ezweb/server

 

U kunt zelf ook vanuit de applicatie vermeldingen in het logbestand maken door gebruik te maken van SETTRACE RECORD, bijvoorbeeld: SETTRACE RECORD “OOPS” in console mode zal resulteren in deze vermelding: Jan 20 13:37 [<noprog>:0] OOPS

Vanaf PxPlus2014 v.12 is dit ook beschikbaar in Unix en Linux PxPlus versies. Om de LOGFILE te activeren in Unix/Linux, dient u een pvxtrace.log bestand aan te maken in de PxPlus directory. Indien PxPlus v12 vaststelt dat dit (tekst)bestand bestaat, zal het automatisch gebruikt worden om interne meldingen in op te slaan.

PxPLUS simple Client/Server

PxPLUS heeft een alternatief voor *NThost/*NTslave ontwikkeld.  Het voordeel is dat de host slechts 1 tcp socket nodig heeft. Dat is interessant als je Internet gebruikt, en er dus maar 1 poort ge-opend moet worden in uw firewall.  PxPLUS gebruikt 4093 als standaard poort.  Zij hebben deze poort officieel toegewezen gekregen van IANA (Internet Assigned Numbers Authority).

Het starten van de host.

Bewaar volgende script in /usr/local/bin/starthost op je Unix machine:

#!/bin/sh
PVXLIB=/pxplus/lib
PVXFLMAP=\\/
export PVXLIB  PVXFLMAP
umask 0
cd /pxplus
{su username}
/pxplus/pxplus -dr=/pxplus/ \*plus/cs/host -arg 4093 {forced program} >/dev/null </dev/null 2>&1

en verander de permissies met ‘chmod 777’

Voeg onderstaande lijn toe in /etc/inittab van de Unix machine:

pxp1:2345:respawn:/usr/local/bin/starthost </dev/null >/dev/null 2>&1

Noot voor SCO OpenServer 5 gebruikers:
– Voer deze lijn in net onder de ‘r3’ regel.
– Als de kernel opnieuw gebouwd of gelinkd wordt, dan verwijdert SCO deze regel van /etc/inittab !!!
Voer ‘telinit -q’ uit. De PxPLUS host wordt dan gestart.
Op sommige Unix machines is het nodig om de machine te herstarten opdat ie de veranderde /etc/inittab zal herkennen.

Als je een Linux OS hebt, dan zie je dat de inittab file niet meer gebruikt wordt. Om het script toch automatisch te starten als de machine opstart, doe dan het volgende:

1. Er is een /etc/init.d/boot.local script.

Voeg de volgende regel toe aan dit script:

sudo -uuser /usr/local/bin/starthost &

2. Er is een /etc/rc.d/rc.local script.

Voeg dan volgende regel toe aan dit script:

su user -c /usr/local/bin/starthost &

(‘user’ is de naam van een gebruiker waarmee je kan inloggen en waarmee je PxPLUS kan starten)

Als je de host onder Windows automatisch wil laten starten, gebruik dan  *plus/cs/service.  Het programma vraagt dan naar de starting directory, welke poort en welk programma.  Nadien moet u bij de ‘services’ de opstart setting nog veranderen van ‘manual’ naar ‘automatic’.


 

Het starten van de client

Creëer volgende snelkoppeling in Windows om een WindX verbinding te maken:

Doel: C:\pxplus\pxplus.exe *plus/cs/client -id=Txx -arg xxx.xxx.xxx.xxx[;ssss] [progname]
Start in: C:\pxplus
Geminimaliseerd

xxx.xxx.xxx.xxx  is het IP-adres van de host-machine.

ssss is het socketnummer van de taak op de host.  Default=4093

-id=Txx is de FID(0) waarde van de PxPLUS op de host computer.

progname  is de naam van het programma dat gestart zal worden zodra er een verbinding gemaakt wordt. Indien leeg wordt PxPLUS in ‘console mode’ gestart.

Als je vanuit een programma meerdere taken wil starten, gebruik dan niet het ‘START’ bevel, maar een utility die hiervoor gemaakt is, nl: *windx.utl met als label ‘spawn’.
Voorbeeld: CALL “*WINDX.UTL;SPAWN” [,programmanaam]

Dealer Key

Naast het beveiligen van programma’s met een paswoord, bestaat er in PxPLUS ook een mogelijkheid om programma’s te linken aan een activatie.  Enkel indien het PxPLUS activatiebestand een sleutel bevat die overeenstemt met de sleutel die in het programma opgeslagen werd, zal het programma door de executable kunnen uitgevoerd worden.  Voor het genereren van deze sleutel dient er een ‘dealer key’ kit aangekocht te worden.  Het genereren van de sleutel wordt door de software ontwikkelaar in eigen beheer uitgevoerd.

De ‘dealer key’ kit bestaat uit een sleutelgenerator (executable voor 16/32 bit omgevingen en een DLL voor 32/64 bit omgevingen) en een identificatie bestand.  Het identificatie bestand is een (compact) bestand dat door de sleutelgenerator gebruikt wordt om een unieke sleutel te genereren en door de software ontwikkelaar zelf gekozen wordt.  Let wel dat eenmaal een identificatie bestand gebruikt werd, u gebonden bent aan dit bestand.

De sleutelgenerator kan 2 types sleutels genereren: developer sleutels en runtime sleutels.

  • Een developer sleutel wordt gebruikt op de machine van de software ontwikkelaar en staat toe dat programma’s bewaard, ge-edit en ge-list kunnen worden.
  • Een runtime sleutel is enkel in staat om programma’s die van een dealer sleutel voorzien werden, uit te voeren. Tijdens het genereren van een runtime sleutel kunnen er extra opties ingeschakeld worden, waardoor de runtime sleutel programma’s kan listen en/of editeren.

De sleutels worden aan de activatie toegevoegd door middel van de PxPLUS activatie programma’s (pvxwactv.exe onder Windows en pvxactv onder Unix/Linux). Per ‘dealer key’ kit krijgt de software ontwikkelaar een uniek ‘package’ nummer dat in het ‘package keys’ onderdeel van het activatieprogramma samen met de gegenereerde sleutel ingevoerd moet worden. De sleutels zijn gebaseerd op de system ID en dus verschillend voor iedere PxPLUS installatie.

Nadat de PxPLUS licentie voorzien werd van een ‘dealer key’ package, kunnen programma’s bewaard worden met de dealer sleutel door SAVE “programma”,OWN={uniek package nummer} uit te voeren. Indien u alle programma’s wenst te voorzien van de dealer code, kan u ook het package nummer toekennen aan parameter OW, bijvoorbeeld: SET_PARAM ‘OW’={uniek package nummer}. Nu zal de dealer sleutel automatisch toegevoegd worden aan elk programma dat bewaard wordt.

Verder kan de software ontwikkelaar nog beschikken over 25 extra vlaggetjes die per programma toegevoegd kunnen worden door middel van SAVE “programma”,OWN={uniek package nummer},FLG={1{:2{:3{:…{:25}}}}}. Zo kunnen de boekhoudprogramma’s voorzien worden van vlaggetje ,FLG=1. Fakturatieprogramma’s kunnen bewaard worden met vlaggetje ,FLG=2. Stockbeheer programma’s kunnen bewaard worden met ,FLG=3. Enzovoort. Enkel runtime licenties die gegenereerd werden met vlaggetjes die overeenstemmen met de vlaggetjes die aan programma’s toegevoegd werden, zullen in staat zijn deze programma’s uit te voeren. Een runtime die geactiveerd werd met vlaggetjes 1:3 zal niet in staat zijn om in bovenstaand voorbeeld de fakturatieprogramma’s uit te voeren.

Voor prijsinformatie in verband met het PxPLUS ‘dealer key’ kit, gelieve contact op te nemen met de EDIAS verkoop afdeling.

ODBC 64 bit en 32 bit drivers

1) Er zijn twee manieren van verbindingen die de PxPLUS ODBC driver ondersteunt.

a) Een simpele verbinding, waarbij de ODBC driver op het werkstation draait en enkel toegang heeft tot lokale bestanden of tot bestanden die via een gedeelde schijf toegankelijk zijn.

b) Een server verbinding, waarbij de ODBC driver verbonden is met de ODBC fileserver op een andere computer en die dus gegevens krijgt van die fileserver.

2) Er zijn ODBC drivers voor het werkstation in 32 bit en 64 bit vorm.
De 32 bit driver kan geïnstalleerd en gebruikt worden op zowel een 32 bit als een 64 bit Windows systeem.
De 64 bit driver kan alleen geïnstalleerd worden op een 64 bit Windows systeem.

3) De 32 bit driver kan alleen gebruikt worden door een 32 bit toepassing en de 64 bit driver kan alleen gebruikt worden door een 64 bit toepassing. Bijvoorbeeld:  U heeft Office 64 bit.  Dit product kan enkel gegevens krijgen van een 64 bit ODBC driver.
PS: Microsoft beveelt nog steeds Office 32 bit aan op zowel een 32 als 64 bit Windows systeem.
Zie: http://office.microsoft.com/en-us/products/office-2010-frequently-asked-questions-HA101674631.aspx#About_Office_2010_4

4) Het standaard Windows ‘Gegevensbronbeheer’ programma herkent enkel ODBC drivers van hetzelfde type als het Windows OS.  Met andere woorden, Gegevensbronbeheer van een 64 bit OS gebruikt enkel 64 bit ODBC drivers.  Om toch 32 bit ODBC drivers te configureren onder een 64 bit OS, moet u programma ODBCAD32.EXE starten (te vinden in \windows\syswow\ ).
PS: We creëren automatisch een link naar de juiste configurator voor de gebruiker.
5) Wanneer we een verbinding maken tussen een ODBC driver en een ODBC fileserver (‘b’ in item 1 hierboven),  dan is het type van ODBC driver (32 of 64 bit) irrelevant ten opzichte van het type van de ODBC fileserver.  Alle communicatie gebeurt via TCP/IP tussen driver en server.  In kort, een 32 bit ODBC driver kan verbinden met een 64 bit ODBC fileserver en omgekeerd.

ODBC Driver – What it is – What you need – How to activate

The PxPLUS ODBC driver allows access to PxPLUS data files from any Windows product that supports an ODBC interface. The PxPLUS ODBC driver is a Windows only product, which means that the driver can only be installed in a Windows environment. Depending on where the data is located, you will either need a PxPLUS Local ODBC driver or a PxPLUS Client ODBC driver.

If the Windows PC on which you will install the ODBC driver has direct access to the PxPLUS data files through either a local drive or a mapped network drive, you can install the ‘Local’ ODBC driver. Note that this product must be activated on each PC it is installed on. If the PxPLUS data is located on a server that doesn’t allow you to map its drive (say for example a Unix server), you will need to install a PxPLUS ODBC Server on the server and a PxPLUS Client ODBC driver on each PC that needs to access that server. In this scenario, only the PxPLUS ODBC Server needs to be activated – the PxPLUS Client ODBC drivers don’t require activation at all (just like a WindX Plugin doesn’t need to be activated and gets its activation from the server).

Note that if a Local ODBC driver is accessing data on a networked drive, the performance can be less than optimal (due to the amount of data that will be transferred across the network). You can decrease the network traffic by installing a PxPLUS ODBC Server on the machine that hosts the data (provided that machine is running an operating system that is supported by the PxPLUS ODBC Server – please visit our ODBC download page for a list of supported operating systems).

Activation of the PxPLUS ODBC Local driver and/or PxPLUS Windows ODBC Server is quite easy: during installation of these products, the installer will ask for a serial number, user count and activation key. If you are installing at a site that is running a PxPLUS Professional or E-Commerce license, the serial number, user count and TEMPORARY activation key of that product must be entered in the activation dialogue (don’t worry – although you are entering a temporary key, the product will activate permanently). In case the site is using a PxPLUS Base license or no PxPLUS license at all, you need to contact EDIAS Sales and either order an ODBC Local Driver or ODBC Server serial number and activation key.
ODBC v5.xx needs a PxPLUS v10 key or higher.

ODBC v4.xx needs a PVX v9, v8 or v7 key.

The PxPLUS Windows ODBC Server can also be activated from the Windows Control Panel by starting the ‘PxPLUS File Server Settings’ wizard and selecting the ‘Activation’ tab.

A Linux/Unix ODBC Server must be activated by manually changing the ‘pvxiosvr.conf’ file in the directory where the ODBC Server was installed. You should start by copying the ‘pvxiosvr.conf.sample’ file to ‘pvxiosvr.conf’. In the ‘.conf’ file, one must create a new line that uses this syntax: serial=serno-usercount-actkey (for example: serial=12345-5-ABC0123456789DEF). The serial number, user count and activation key are (just like with the Windows ODBC Driver/Server) the serial number, user count and TEMPORARY activation key of the PxPLUS Professional or E-Commerce license that is running at that site. In case the site is using a PxPLUS Base license or no PxPLUS license at all, you need to contact EDIAS Sales and order an ODBC Server serial number and activation key.

Note: On a Windows 64bit OS, the 32bit ODBC administrator is needed, and can be found as C:\windows\syswow64\odbcad32.exe

How to setup JavX on a PDA

You will need a J2ME Personal Profile Java Runtime Environment on your PDA in order to start JavX. If you already have such a JAVA version installed, you can skip the downloading and installing of the IBM WebSphere Java as explained below.

To install IBM WebSphere Java on your PDA, you must download that Java version from this site and store it on your DESKTOP PC.
(Click on ‘Download Trial’).

Then connect your PDA to your desktop PC and start the Microsoft ActiveSync application. Install the IBM Java you just downloaded on both your desktop and PDA.

I assume you know that the PDA must be a wireless client. If not, you can stop right now.

Okay, you’ll need the Direxions 2005 CD. Put that CD in your desktop PC and install both ‘PxPLUS v7 for Windows’ and ‘JavX v2.5 Developers Kit’ on your desktop PC. Make sure you still have an ActiveSync connection between the PDA and the desktop PC. Start PxPLUS V7 and go to the directory (CWDIR) where you installed the ‘JavX v2.5 Developers Kit’. Underneath that directory, there should be a ‘JavXPDAWiz’ directory. Use CWDIR to switch to that directory. Then enter RUN “JAVX.PGN”.

A graphical window should appear in which you must enter the IP address of the nthost or application server. Also enter the socket number that nthost/appser is using and select if your server is running nthost or the application server. Then click NEXT.

In the next window, it will say that JavX will be installed in the \JAVX directory and that the program will create a shortcut in the PROGRAMS group of your PDA. You need to click INSTALL here. If you get a ‘NOT ON CRADLE’ error message, select ‘Device Information’ from the menu, close that window and try INSTALL again.

JavX will now be copied onto the PDA and a JavXAE shortcut will be created in your PDA Programs group. The next window will display some registry settings, you need to click INSTALL here as well. Then click EXIT to leave the installer.

You can now disconnect the PDA (close ActiveSync). Click Start/Programs (on your PDA). There should be a JavXAE icon. Click that and JavX will try to connect through the wireless TCP connection to your nthost/appser server.

Now, in case you are NOT using an English/US Windows OS on the PDA, or in case your are NOT using the IBM WebSphere Java, you need to execute the following step to fix a path problem in the JavXAE link that was created on the PDA:

Connect the PDA to your Desktop and start ActiveSync. Use Explorer to browse the PDA and go to the \windows\start menu\programs directory (or whatever it is called in a On-US Windows Mobile OS) . Copy the JavXAE link into a directory on your Desktop PC and open it there with NOTEPAD (start Notepad and use the File/Open menu item to open it). It will probably look something like this:

109#”\Program Files\J9\PPRO10\bin\j9.exe” “-classpath” “\JavX\JavXAE.jar” “-jcl:ppro10” “localNetworkClientTest” “server=192.168.2.102; port=20000; guifactoryclassname=AWTGUIManagerFactory”

Now change the \Program Files\ path to the correct path where IBM J9 is installed. Save the changes, and drag the link file back into the PDA \windows\start menu\programs directory. Disconnect the PDA and try to start the JavXAE link.

Window’s Printer Mapping to a PxPLUS Device Driver

A new feature has been added in PxPLUS v6.10, where a Windows Printer may be defined on a PC so that it appears in the Windows Printer Selection Dialogue, and if that printer is selected from within a PxPLUS session, then PxPLUS attempts to re-route the printer to a device driver.

This allows Developers to create Windows Printer’s on workstations for items such as the Preview, PDF, or HTML output from PxPLUS.

This feature works based on the name and properties of the printer.

 

  • The printer must have an output port of “NUL:”
  • The second word in the Printer’s Name, will be parsed out and an underscore will be added to the beginning and end of the name. The PxPLUS LIB directory will be scanned for a device driver that matches this name. If the device driver is not found, then the printer will not be mapped anywhere, and will simply output to NUL. EXAMPLE:
    Printer Name:   “PxPLUS Viewer”
    A search of the PxPLUS Lib Directory for “_viewer_” will be made.EXAMPLE:
    Printer Name:   “PxPLUS PDF”
    A search of the PxPLUS Lib Directory for “_pdf_” will be made.Follow the next steps to add such a Printer to a Windows XP Workstation:
  1. Go to Window’s Printer’s and Faxes.
  2. Select “Add a printer”.
  3. Select “Local printer”.
  4. Check the “Use the following port” for an entry of “NUL:”.
    if “NUL:” exists, select it and go to Step 8.
  5. Select “Create a New Port”.
  6. Set the “Type of Port” = “Local Port”.
  7. For “Port Name” enter “NUL:” (without the quotes).
  8. From the manufacturer / printers dialogue, select “Generic” for a manufacturer and “Generic/Text Only” for the printer.
  9. Select “Keep existing driver”
  10. Enter a name for your printer, keep in mind, that the 2nd word in the name is what must match the device driver.
    For this “Printer Name”, enter “PxPLUS Viewer”
  11. For the “Set as default printer”, select “No”.
  12. For “Sharing”, select “No”.
  13. For “Print a test page ?”, select “No”.
  14. Check your settings and Select “Finish”.

You should now have a printer named “PxPLUS Viewer” as one of this workstation’s printers. From within any PxPLUS application, you will see this printer in the *WINPRT* printer selection dialogue. Whenever this printer is selected, PxPLUS will re-route the printer to the specific device driver.

In the case of our example, we have created a printer named “PxPLUS Viewer” which is connected to “NUL:”. If selected from Printer Selection, PxPLUS will automatically close “*WINPRT*” and open the file “*VIEWER*” instead.

NOTE: This will ONLY work in PxPLUS applications!
If the user selects one of these special PxPLUS mapped printers from another application (Word, Notepad, etc.), they will get NO output.

How to hear ‘RING BELL’ in Windows XP.

Follow these steps to hear the audible bell (‘RB’) in Windows XP.

  • Add a new key in the registry.
    \HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default
  • Start ‘Control Panel’ > ‘Sounds and Audio Devices’
    Select the ‘Sounds’ tab and search for the Windows ‘Default Beep’ line in the listbox.
    Select your preferred .wav file. (i.e. ding.wav)
  • Turn on your speakers.
  • Start PxPLUS in console mode and type PRINT ‘RB’ or hit the [BackSpace] key.

Hoe zoekt en vindt PxPLUS uw bestanden en programma’s.

Eerst overlopen we de bevelen, functies en parameters die betrekking hebben op het vinden van bestanden.

‘CD’ parameter.
De ‘CD’ parameter staat standaard ‘UIT’, wat betekent dat de directory waar je in staat pas doorzocht wordt ná de directories uit de PREFIX lijst.
Indien de parameter ‘AAN’ staat, dan kijkt PxPLUS eerst in de actieve directory, en pas dan in de PREFIX lijst.
(zie verder ‘Zoek Regels’)

Om de inhoud van de parameter te controleren : PRINT PRM ( ‘CD’ )
en om de parameter te veranderen : SET PARAM ‘CD’ = 1 (or 0)

PREFIX
U kunt het PREFIX bevel vergelijken met de PATH variabele in MS-DOS of UNIX.
Gebruik het PREFIX bevel om een reeks van zoekpaden op te geven waar PxPLUS moet in zoeken als u een OPEN / LOAD / RUN / CALL / PERFORM uitvoert van een bestand of programma zonder volledige padnaam.
Voorbeeld:
PREFIX “/usr/mydir/data/ /usr/mydir/prog/ /usr/mydir/sub/ D:/other/data/”

Met andere woorden, als u een bestand opent mét volledige padnaam, dan gelden al de zoekregels niet.

De namen in de PREFIX moeten gescheiden zijn door een spatie.
Zoals u ziet, mag de schijfaanduiding toegevoegd worden aan de padnaam, om alzo te zoeken op een andere schijf dan dewelke actief is gemaakt met het SETDRIVE bevel.

U kunt 10 verschillende PREFIXen aanduiden, nl. PREFIX (0) tot PREFIX (9).
Voorbeeld:
PREFIX (0) “/usr/mydir/data/”
PREFIX (1)”/usr/mydir/prog/ /usr/mydir/sub/”
PREFIX (2)”D:/other/data/”

Het voordeel is dat u een bepaalde PREFIX kunt DISABLEn en ENABLEn.
b.v.: DISABLE 2, en u stopt het zoeken in D:/other/data/.

PREFIX (0) ” … ” is hetzelfde als PREFIX ” … ”

Als er padnamen zijn waarin al een spatie voorkomt, dan moet u deze padnaam tussen aanhalingstekens plaatsen.
Voorbeeld:
PREFIX “C:/Tmp/ C:/usr/ “”C:/Program Files/”””

PRINT PFX of PRINT PFX (n) toont u de inhoud van PREFIX.

‘ = ‘ teken voor speciale zoekopdrachten.
Het ‘=’ teken in de PREFIX heeft een speciale betekenis. Elk ‘=’ teken komt overeen met een letter (of cijfer) van de bestandsnaam en wordt erdoor vervangen. Het eerste ‘=’ teken wordt vervangen door de eerste letter van de bestandsnaam, het tweede ‘=’ teken door de tweede letter van de bestandsnaam, enzovoort.
De bedoeling is om grote directories op te delen in kleinere, voor snellere toegang en beter beheer.

Voorbeeld:
Veronderstel dat uw toepassing uit verschillende modules bestaat. Aan de naam van een programma kun je al zien tot welke module deze behoort.
b.v. BH001 BH002 BH003 behoren tot de boehhoudmodule en LN001 LN002 LN… behoren tot de loonadministratiemodule. U kunt dan uw (grote) directory opsplitsen in meerdere kleine directories. De naam van deze subdirectories moet dan overeenkomen met de eerste letters van de naam van de modules. In dit geval BH en LN.
Als PxPLUS nu een programma of bestand zoekt, dan evalueert PxPLUS de eerste overeenkomende letter(s) en gebruikt die om in de juiste directory te gaan kijken.
Voorbeeld:
PREFIX “/myapp/==/”
OPEN (1)”BHHIST”
PxPLUS evalueert de bestandsnaam BHHIST en maakt er ‘/ myapp / BH / BHHIST’ (1) van, en tracht zó het bestand te openen.

Asterisks als PREFIX wild-cards.(2)
U kunt ‘*’ en ‘**’ gebruiken als wild-card teken in PREFIX om (nieuwe) bestandsnaam extenties te ondersteunen zonder uw programma’s te moeten aanpassen.
Deze uitbreiding is gemaakt in versie 4.20 voornamelijk om Windows 2000 gecertificeerd te zijn. Om Windows 2000 gecertificeerd te zijn, moeten uw bestanden en programma’s een extentie hebben. Met de wild-card tekens in PREFIX kunt u uw bestanden een specifieke extentie geven, zonder dat u uw programma’s moet aanpassen.

Een enkele asterisk (*):
Indien uw PREFIX bevel een asterisk bevat, gevolgd door een extentie, dan zal PxPLUS dit asterisk teken vervangen door het bestand dat u tracht te openen.
Met het resultaat tracht PxPLUS dan om het bestand te vinden, en indien niet gevonden, zal PxPLUS alsnog het bestand trachten te openen zonder extentie.
Voorbeeld:

PREFIX (5) “*.dat”
OPEN(1)”klant”
PxPLUS scant de directory naar ‘klant.dat’ en opent het bestand. Indien ‘klant.dat’ niet gevonden werd, dan zoekt PxPLUS verder naar ‘klant’. Indien gevonden, opent PxPLUS het bestand, indien niet gevonden zal PxPLUS een ERROR 12 genereren.

Nota!
KEYED “abcde”,5 zal het bestand ‘abcde.dat’ niet creëeren maar wel ‘abcde’ , en
ERASE “abcde” zal wel het bestand ‘abcde.dat’ wissen !

Dubbele asterisks (**):
Indien uw PREFIX twee asterisks bevat, samen met een extentie, dan zal de substitutie zoals hierboven beschreven, enkel gebeuren als het een bestandsnaam betreft zonder eigen extentie bij het OPEN bevel. Indien de naam reeds een extentie heeft, dan wordt er geen automatische vervanging gedaan.
Voorbeeld:
PREFIX “/mydir/**.dat”
OPEN(1)”journaal”
OPEN(2)”journaal.hist”
Vermits ‘ OPEN (1)”journaal” ‘ een bestand bevat zonder extentie, zal PxPLUS eerst zoeken naar ‘/mydir/journaal.dat’ en vervolgens naar ‘/mydir/journaal’.
Vermits ‘ OPEN (2)”journaal.hist” ‘ wel een bestand met extentie bevat (.hist), zal PxPLUS geen ‘.dat’ toevoegen, en dus gewoon zoeken naar het bestand ‘/mydir/journaal.hist ‘.

PREFIX PROGRAM
Gebruik het PREFIX PROGRAM formaat om een zoekpad te definiëren om specifiek naar programma’s te zoeken. PxPLUS zal eerst in dit pad zoeken, en eventueel vervolgens in de andere PREFIX, indien u een LOAD, RUN, CALL, PERFORM, PROGRAM of SAVE uitvoert.
Voorbeeld:
PREFIX PROGRAM “/pvx/mydir/pgm/”

om de inhoud te zien :
PRINT PFX(PGN)

PREFIX FILE
Dit is niet de tegenhanger van PREFIX PROGRAM !

Gebruik het PREFIX FILE formaat om dynamische omzettingen te doen van bestandsnamen. U kunt bijvoorbeeld een ‘ OPEN(x)”klant” ‘ geprogrammeerd hebben, maar eigenlijk wilt u dat “//andere_machine/customer” geöpend wordt.

Hoe werkt het ? U definiëert een KEYED bestand met externe sleutel en een variabele recordlengte. Indien het bestand niet aan deze voorwaarden voldoet, krijgt u een ERROR 17:Invalid file type or contents. b “PFXBESTAND”
De sleutel is de naam zoals die in het programma staat. bvb “klant”.
Het eerste veld is de naam van het vervangbestand. bvb “//andere_machine/customer”.
Dan voert u het bevel uit : PREFIX FILE “PFXBESTAND”

Bij een OPEN onderzoekt PxPLUS nu eerst dit bestand, en kijkt of de bestandsnaam, die u wilt openen, bestaat als sleutel in dit bestand. Zo ja, dan wordt het veld als bestandsnaam gebruikt en gelden terug alle zoek regels.
Mag ik u even herinneren dat enkel indien een relatieve bestandsnaam is opgegeven, dat dan het hele zoekmechanisme geldt. Bestandsnamen met absolute padnamen worden onmiddellijk geopend, zonder te zoeken.

Voorbeeld:
KEYED “pfxbestand”,25
OPEN(1)”pfxbestand”
WRITE (1,key=”klant”)”[odb]ACCESS;CUST;KEY=CUSTNO”
CLOSE(1)
……
PREFIX FILE “pfxbestand”
OPEN(1)”klant” ! Intern wordt dit
>> OPEN(1)”[odb]ACCESS;CUST;KEY=CUSTNO”

Zoals u ziet, is het erg makkelijk als u wilt veranderen van databank. U moet enkel de keyed file veranderen, uw programma’s blijven ongewijzigd.

Vanaf versie 4.23 is er een tweede veld toegevoegd aan het PREFIX FILE bestand.
Dit is een OPTIONS veld. Deze opties worden toegevoegd aan de OPT= bij het openen van het bestand. Dit heeft men gedaan, omdat de lengte van de naam een limiet heeft van 256 bytes.

Voorbeeld:
Het PREFIX FILE bestand bevat het volgende :
Key=”klant”, Veld1=”[ODB]DSN;customer”, Veld2=”KEY=cust_id”

OPEN(1)”klant”
intern wordt dit :
OPEN(1,OPT=”KEY=cust_id”)”[ODB]DSN;customer”
of …
OPEN(1,OPT=”REC=klantnaam”)”klant”
intern wordt dit :
OPEN(1,OPT=”KEY=cust_id;REC=klantnaam”)”[ODB]DSN;customer”

De inhoud van OPT= wordt in feite achteraan de naam bijgezet, en dit wordt dan:
OPEN(1)”[ODB]DSN;customer;KEY=cust_id;REC=klantnaam”

PRINT PFX(-1) toont U het PREFIX FILE bestand.

ZOEK REGELS
PxPLUS zoekt een bestand of programma in deze volgorde :

OPEN
1) PREFIX FILE, indien gebruikt. (Vervangt de padnaam, en vervolgt de sequentie)
2) Huidige directory ( indien ’CD’ parameter aan )
3) PREFIX 0 to 9
4) PROGRAM PREFIX, indien gebruikt
5) Huidige directory ( indien ’CD’ parameter uit )

LOAD / RUN / CALL / PERFORM / SAVE
1) PREFIX FILE, indien gebruikt (Vervangt de padnaam, en vervolgt de sequentie)
2) Program Cache
3) Current Directory ( indien ’CD’ parameter aan )
4) PREFIX PROGRAM, indien gebruikt
5) PREFIX 0 to 9
6) Current Directory ( indien ’CD’ parameter uit )

De PREFIX zoekregels gelden niet alleen voor het openen van bestanden, maar ook voor het creëeren ervan. PxPLUS maakt het bestand aan in het eerste pad van de eerste PREFIX. Indien ‘CD’ parameter aan staat, dan worden bestanden aangemaakt in de ‘aktieve’ directory.
Let op dat eenmaal een programma in ‘cache’ zit, en stel dat u de PREFIX uitschakelt waaruit het programma gekomen is, dan zal PxPLUS bij het opnieuw oproepen, nog steeds het bewuste programma uit cache halen en geen error 12 genereren.

PERFORMANTIE
Wat u best vermijdt is de schijf aanduiding vooraan in de padnaam.
SETDRIVE “C:” ! meestal is dit de standaard waarde
PREFIX “C:/myapp/data/ C:/myapp/files/ D:/mydir/somedir/ C:/pvx/lib/”

Beter is :
SETDRIVE “C:”
PREFIX “/myapp/data/ /myapp/files/ D:/mydir/somedir/”

Ten eerste heeft u /pvx/lib in uw zoekpad niet nodig. Elk PxPLUS hulpprogramma en elke PxPLUS subdirectory kunt u oproepen of vinden door vooraan het ‘ * ‘ te plaatsen.
b.v. CALL “*web/email” ip CALL “\pvx\lib\_web\email”
Ten tweede, door het weglaten van de schijfaanduiding hoeft PxPLUS niet te controleren óf de schijf wel bestaat, en dus wint u tijd.
Indien mogelijk, zet het pad met een afwijkende schijfaanduiding achteraan in het zoekpad.

Converteren naar PxPLUS

Er bestaan diverse manieren om uw bestaande ‘Business Basic’ software te converteren naar PxPLUS .
Zodra U PxPLUS geïnstalleerd heeft, vindt U 4 specifieke directories onder \pvx\lib\ die met het converteren van een andere BASIC te maken hebben, namelijk voor :

Thoroughbred directory : _conv.tbd
Mai OpenBasic directory : _conv.ob
BBx / PRO5 directory : _conv.bbx
MicroShare Basic directory : _conv.msb

In de ‘HELP’ bestanden vindt u meer uitleg over de oudere conversieprogramma’s. Vermits er nieuwe tools ontwikkeld zijn, die nog niet in de help-bestanden zijn opgenomen, gaan we hier dieper op in.

GUI_CV
Dit programma converteert BBx programma’s en bestanden, zonder dat U nog een BBx (of PRO5) executable nodig heeft. Alles gebeurt in een grafische omgeving.
Volgende mogelijkheden kunt u aan- of uitschakelen :

  • testconversie
  • schrijf in het logbestand :
    • de naam van het programma of bestand.
    • de programmalijn die een $0A$ bevat.
    • de bestandsnaam die niet-ASCII tekens bevat.
    • de bestandsregel die niet-ASCII tekens bevat
    • waarschuwingen
  • of u wilt toevoegen aan het logbestand of niet.
  • records met variabele lengte of niet.
  • bestanden met een maximum aantal records of niet.
  • converteren van stringbestanden of niet.
  • bestanden creeren met $0A$ als separator of $8A$.
  • OEM naar ANSI conversie in programma’s.
  • OEM naar ANSI conversie in bestanden.

CV_NOBBX
Dit is een niet-grafisch conversieprogramma. De interface is dezelfde als het standaard meegeleverde C programma. Echter ook hier is een BBx executable niet nodig.

CONVDATA.BBX
In de *TOOLS directory, is er een nieuwe utility die niet alleen DIRECT, SORT en MKEYED files converteert (zoals convkeyd.bbx), maar ook INDEXED bestanden.
Ook hier is geen BBx executable nodig.

BBx bestanden lezen
Sinds versie 4.20 van ProvideX, bestaat er de mogelijkheid om BBx bestanden rechtstreeks vanuit PxPLUS te lezen (niet schrijven). Uw PxPLUS moet dan geactiveerd worden met Package Key 20010.

LOADBBX
Met dit bevel kan u een BBx programma in geheugen laden zodat u het kunt bewerken in PxPLUS . Tijdens het laden wordt automatisch en snel de conversie gedaan.
Dit is een ‘console mode’ bevel dat zich dus in de *cmd directory bevindt.

Syntax: LOADBBX str1{,RAW} (er moet een spatie ingetikt worden achter LOADBBX)

‘str1’    (pad+)bestandsnaam van een BBx programma.
‘RAW’   doe geen conversie van BBx functies en bevelen.
let op : user_lex instelling blijven van toepassing

BBx, PRO5, and VPRO5 are registered trademarks of Basis International.
ProvideX is a registered trademark of Sage Software Canada Ltd.

Performance problemen met WindX ?

Is je WindX verbinding te traag en je hebt een Unix ‘login’ gebruikt, lees dan verder. Er is namelijk een methode om de snelheid van WindX drastisch te verbeteren door NIET het Unix login principe te gebruiken.

Als je WindX gebruikt via een telnet verbinding (dit is de ‘normale’ manier om een client met een Unix-server te verbinden), dan moeten beide zijden (zowel WindX-client als host) de verstuurde gegevens vertalen. Waarom ? Omdat bepaalde tekens van de ASCII-tabel een speciale betekenis voor telnet hebben en WindX mag deze tekens niet doorsturen. Het ‘vertalen’ van deze tekens in de datastroom kan de snelheid erg benadelen.

Maar …. er is een andere manier om een verbinding te leggen tussen de WindX client en de Unix host. In de utility-set van PxPLUS worden namelijk 2 programma’s meegeleverd: *NTHOST en *NTSLAVE.

Daarmee is het mogelijk om een TCP verbinding te maken tussen 2 machines zonder telnet te gebruiken en daardoor dus heel wat snelheidswinst te boeken.
Onderstaand voorbeeld helpt je dergelijke verbinding te maken. Let op ! De gebruikte IP-adressen e.d. zijn fiktief en dienen aangepast te worden aan je eigen situatie.

Bewaar volgende script in /usr/local/bin/starthost op je Unix machine:

#!/bin/sh
PVXLIB=/pvx/lib
TERM=winterm
PVXSTART=*startup # of je eigen opstart programma
export PVXLIB TERM PVXSTART
umask 0
cd /pvx
/pvx/pvx \*nthost -arg 20000 user 0 >/dev/null </dev/null 2>&1

Verander de permissies met ‘chmod 777’ voor dit scriptbestandje.

‘20000’ is het socketnummer van het hostproces dat zal uitkijken naar WindX programma’s die verbinding zoeken.
‘user’ is de gebruikers loginnaam.
Deze naam (of de naam die jij kiest) MOET te vinden zijn in /etc/passwd. Verifiëer dat u kunt inloggen en PxPLUS starten met deze loginnaam.
Alle WindX gebruikers zullen dan bekend zijn onder deze naam. Met andere woorden, de PxPLUS WHO funktie zal deze naam tonen.

Voeg onderstaande lijn toe in /etc/inittab van de Unix machine:

pvx1:2345:respawn:/usr/local/bin/starthost </dev/null >/dev/null 2>&1

Noot voor SCO OpenServer 5 gebruikers:
– Voer deze lijn in net onder de ‘r3’ regel.
– Als de kernel opnieuw gebouwd of gelinkd wordt, dan verwijdert SCO deze regel van /etc/inittab !!!

Voer ‘telinit -q’ uit. De PxPLUS host wordt dan gestart. Op sommige Unix machines is het nodig om de machine te herstarten opdat ie de veranderde /etc/inittab zal herkennen.

Als je een Linux OS hebt, dan zie je dat de inittab file niet meer gebruikt wordt.
Om het script toch automatisch te starten als de machine opstart, doe dan het volgende:

1. Er is een /etc/init.d/boot.local script.

Voeg de volgende regel toe aan dit script:

sudo -uuser /usr/local/bin/starthost &

2. Er is een /etc/rc.d/rc.local script.

Voeg dan volgende regel toe aan dit script:

su user -c /usr/local/bin/starthost &
Als u de host onder Windows automatisch wil laten starten (as-a-service), dan kunt u onderstaand PxPLUS programma’tje gebruiken.


0010 BEGIN
0020 LET SRV_NAME$=”PVX.nthost.Test”
0030 LET DSP_NAME$=”PxPLUS NTHOST Server”
0040 LET START_TYPE=1 !  1=auto, 2=manual, 3=disabled
0050 LET CMD_LINE$=”*nthost -arg 20000 -K host”
0060 LET TMP$=ARG(0),P=POS(“/\”:TMP$,-1); IF P=0 THEN ESCAPE
0070 LET START_DIR$=TMP$(1,P) ! The starting directory
0080 LET DESCRIP$=”PxPLUS Nthost server on socket 20000″
0090 ! Now install the service
0100 LET SERVICE=NEW(“*obj/ntservice”)
0110 PRINT “Now installing the service…”
0120 LET RESULT=SERVICE’CREATEPROVIDEXSERVICE(SRV_NAME$,DSP_NAME$,DESCRIP$,CMD_LINE$,START_DIR$,START_TYPE,””,””,0)
0130 DELETE OBJECT SERVICE


Creëer volgende snelkoppeling in Windows om een WindX verbinding te maken:

Doel: C:\pvx\pvxwin32.exe *ntslave -id=T99 -arg 192.2.9.10 “” 20000
Start in: C:\pvx
Geminimaliseerd

192.2.9.10 is het IP-adres van de Unixmachine.

20000 is het socketnummer van de taak op de host.

-id=T99 is de FID(0) waarde van de PxPLUS op de Unixmachine.

“” is de naam van het programma dat gestart zal worden zodra er een verbinding gemaakt wordt. Indien leeg (zoals in ons voorbeeld) wordt PxPLUS in ‘console mode’ gestart.

Als je vanuit een programma meerdere PxPLUS taken wil starten, gebruik dan niet het ‘START’ bevel, maar een utility die hiervoor gemaakt is, nl: *windx.utl met als label ‘spawn’.
Voorbeeld: CALL “*WINDX.UTL;SPAWN” [,programmanaam]

Webserver Licentie

Er bestaat blijkbaar wat onduidelijkheid betreffende de licentie van de PxPLUS Webserver.

U heeft 2 mogelijkheden om de Webserver te aktiveren:
– U koopt de WebServer ‘add-on’ package. (package 20002)
of
– U koopt de PxPLUS E-Commerce bundle, waarin diverse pakketen geaktiveerd zijn, waaronder de WebServer.

Het aantal gebruikers waarmee een PxPLUS geaktiveerd is, is hetzelfde aantal als de WebServer Task Handlers.

Wat is een PxPLUS Task Handler ? En hoeveel heeft u er nodig ?
Wel, telkens als de Webserver een aanvraag krijgt van een browser, dan wordt die ‘aanvraag’ doorgestuurd naar de Task Handler, om uitgevoerd te worden.

Als u een ‘single-user’ PxPLUS heeft (of een ‘single-user’ E-Commerce licentie), dan heeft de Webserver één Task Handler. Stel dat de Webserver 10 aanvragen ontvangt, dan zal de Task Handler elke aanvraag één na één behandelen. Pas nadat de eerste aanvraag verwerkt is, zal de Task Handler aan de tweede beginnen, enz …
Met andere woorden, een aanvraag wordt pas uitgevoerd als de Task Handler de vorige opdracht beëindigd heeft.

Als u een Webserver met 2 Task Handlers hebt (een 2-user PxPLUS dus), dan zal de Webserver de eerste aanvraag doorgeven aan de eerste Task Handler en de tweede aanvraag aan de tweede Task Handler.
De Task Handler die het eerste klaar is, krijgt dan de derde aanvraag, enz…
Dus, Task Handlers kunnen parallel naast mekaar aanvragen verwerken. Hoe meer Task Handlers u heeft, hoe vlugger de stroom aanvragen verwerkt zijn.

Zodra de Webserver gestart wordt, zal deze het aantal geaktiveerde en geconfigureerde Task Handlers in achtergrond starten, om zo snel mogelijk aanvragen te verwerken.

PxPLUS en ASCII-tekst bestanden

PxPLUS kan op 9 manieren een bestand vullen.
Er zijn 3 mogelijkheden om een bestand te openen:

  • OPEN (1) FILE$
  • OPEN (1,ISZ=1) FILE$
  • OPEN (1,ISZ=n) FILE$, waar n>1

En je hebt 3 commando’s om te schrijven:

  • PRINT
  • WRITE
  • WRITE RECORD

PxPLUS gaat bepaalde separators toevoegen en dit hangt af van de combinatie die je gebruikt.

OPEN (1) OPEN (1,ISZ=1) OPEN (1,ISZ=n) n>1
PRINT 0D0A 0D0A 0D0A000000…
WRITE 8A0D0A 8A 8A0000000000…
WRITE RECORD 0D0A Nothing 000000… till LEN=n

  • OPEN (1)

PxPLUS doet eerst een test op het eerste record van een ‘serial’ bestand. Als er een teken gevonden wordt buiten de reeks van een ” ” (spatie) en een “~” (tilde), dan beschouwt PxPLUS het bestand als een binair bestand en de regels van ‘OPEN (1,ISZ=1)’ zijn van toepassing.

Je moet het bestand LOCKen wil je er iets in schrijven.
PxPLUS behandelt het bestand op een record georiënteerde manier.
De IND() functie geeft u het huidige record.

  • SCHRIJVEN

PxPLUS voegt altijd $0D0A$ (1) toe aan het eind van een record.
In geval van een WRITE bevel zal een extra field separator ($8A$) (2) toegevoegd worden net vóór de record separator ($0D0A$)

  • LEZEN

Een ‘READ RECORD’ scant de data in het bestand naar een $0D0A$ byte combinatie.
Een ‘READ’ impliceert een ‘READ RECORD’. De gegevens van de ‘READ RECORD’ worden gebruikt om de variabelen te vullen, waar $8A$ fungeert als field separator.
Een ‘READ (1,IND=n)’ leest het n+1ste record.

1 record separator
PxPLUS voor Windows, de record separator is $0D0A$
PxPLUS voor UNIX, de record separator is $0A$
In mijn voorbeelden heb ik steeds $0D0A$ gebruikt.

2 field separator
De standaard field separator is $8A$, maar kan gewijzigd worden met de ‘FS’ parameter.


  • OPEN (1,ISZ=1)

Als je een bestand opent met ‘,ISZ=1’, dan open je het bestand in BINAIRE mode. Zelfs als het een KEYED bestand is.
Om compatibel te zijn met andere Business Basics, is ‘ISZ=-1’ toegestaan.
Deze manier van OPEN, impliceert een LOCK op het bestand.
PxPLUS behandelt het bestand op een byte georiënteerde manier.
De IND() functie geeft u de byte pointer of m.a.w. het aantal bytes dat u gelezen heeft.

  • SCHRIJVEN

PRINT X$ schrijft X$+$0D0A$
WRITE X$ schrijft X$+$8A$
WRITE RECORD X$ schrijft X$ en voegt niets toe aan de variabele, maar als de variabele leeg is wordt er een $00$ byte toegevoegd.

  • LEZEN

Normaal lees je het bestand met READ RECORD(1,SIZ=nnn)X$
Anders wordt , ‘SIZ=1’ genomen.
‘READ(1,IND=n)’ leest de n+1ste byte.


  • OPEN (1,ISZ=n) waar n>1

Opgepast met deze manier van lezen en schrijven.
Test altijd of het resultaat klopt met wat u wenste.

  • SCHRIJVEN

‘PRINT’ schrijft de variabele(n) in het bestand. Elke PRINT wordt beëindigd met $0D0A$.
Achtereenvolgende PRINTs kunnen uitgevoerd worden. Geen field separator tussen twee velden.
Wanneer het n aantal bytes bereikt is wordt er een ERROR #1 gegenereerd.
Wanneer het n aantal bytes niet bereikt wordt, dan wordt the rest van n bytes gevuld met $00$
‘WRITE’ schrijft de variabele(n) in het bestand. Een field separator ($8A$) wordt toegevoegd achter elk veld. De resterende n bytes worden gevuld met $00$.
‘WRITE RECORD’ schrijft de gegevens in het bestand zonder separator. De resterende n bytes worden telkens gevuld met $00$.

  • LEZEN

 

Een ‘READ’ impliceert een READ RECORD met n aantal bytes. De variabelen worden gevuld aan de hand van het gelezen record.
Een ‘READ RECORD’ leest n aantal bytes (n = gespecificeerd bij de OPEN)
Een ‘READ RECORD (1,SIZ=x) leest x bytes.

  • Tip: Gebruik PRINT, WRITE, and WRITE RECORD niet door elkaar om een bestand te vullen, tenzij u weet wat u doet.

Samenvatting

  • Als je een ‘serial’ bestand wil vullen, met de bedoeling het te gebruiken om iets terug te ‘MERGE’n:

WRITE PROCEDURE

READ PROCEDURE

SERIAL F$
OPEN LOCK (1) F$
PRINT (1)"10 REM"
PRINT (1)"20 BEGIN"
PRINT (1)"30 FOR I=1 to 10"
PRINT ...
PRINT (1)"9999 END
CLOSE (1)
OPEN (1)F$
MERGE (1)
  • Als je volledige controle wil hebben over wat je schrijft:

Bv. : U moet een bestand maken opdat iemand anders het kan inlezen.
Ze leggen u enkele regels op: het record moet 128 bytes lang zijn en gescheiden door een ‘TAB’ character ($09$).

WRITE PROCEDURE

READ PROCEDURE

SERIAL F$
OPEN (1,isz=1) F$
DIM X$(128)
X$(1)=SOME_CODE$
X$(25)=OTHER_STUFF$
...
X$=X$+$09$
WRITE RECORD (1)X$
...
OPEN(1,isz=1)F$
GET:
READ(1,siz=129,end=DONE)X$
GOTO GET
DONE:
  • Als u records met variabelen in een ‘serial’ bestand wil schrijven met de bedoeling ze achteraf terug in te lezen:

 

OPEN (1) F$
GET:
READ(1,end=DONE)X$,Y$,Z$
GOTO GET
DONE:

READ PROCEDURE

 

WRITE PROCEDURE
SERIAL F$
OPEN LOCK (1) F$
PUT:
A$= ... , B$= ... , C$= ...
WRITE (1)A$,B$,C$
GOTO PUT

 

 


Voorbeeld programma

0010 BEGIN ; PRINT 'CS','SB'
0020 FOR I=1 TO 2
0030 LET F$="c:\tmp\erase.me"; ERASE F$,ERR=*PROCEED; SERIAL F$
0050 !
0060 IF I=1 THEN OPEN LOCK (1)F$; PRINT "OPEN (1) "
0070 IF I=2 THEN OPEN LOCK (1,ISZ=1)F$; PRINT "OPEN(1,ISZ=1)"
0080 !
0090 PRINT (1)"111"
0100 WRITE (1)"222"
0110 WRITE RECORD (1)"333"
0130 PRINT (1)"444"
0140 WRITE (1)"555"
0150 WRITE RECORD (1)"666"
0160 !
0170 CLOSE (1); OPEN (1,ISZ=1) F$
0180 READ RECORD (1,SIZ=-1000) X$
0190 PRINT 'LF',"Binary file contents: ",'LF','LF','SF',HTA(X$),
0200 !
0330 CLOSE (1)
0331 PRINT 'SB','LF'
0340 NEXT I

Link Files and Device Drivers

Wat is een Link File?

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)

Printen in PxPLUS

PxPLUS voor Windows kent twee systeemprinters :

*WINPRT* en *WINDEV*

Beiden gebruiken de Windows spooler.

Met *WINPRT* wordt de printjob geïnterpreteerd door de WINDOWS print API en via de printer driver in de spoolqueue geplaatst, zodat het uiteindelijke bestand door de printer gedrukt kan worden.

*WINDEV* is een speciale interface voor de WINDOWS print spooler. Deze interface interpreteert geen grafische mnemonics en stuurt alle tekens door naar de printer, dus ook escape-sequenties.
Dit lijkt dus op de ‘klassieke’ manier van printen, alsof u de printer rechtstreeks opent.

Samengevat:
U kiest voor *WINPRT* indien u grafisch wilt printen met ‘fonted scalable tekst’, bitmaps, rechthoeken, lijnen, etc. maar ook gewone tekst kunt u hier printen.

U gebruikt *WINDEV* indien u geen grafische mnemonics gebruikt, maar zelf de printer instelt met per printer specifieke escape-codes en enkel tekst print.

 

Voorbeeld 1
OPEN (1) “*WINPRT*
…. snip ….
PRINT (1) ‘FONT'(FONT$,int(C*.8)),
PRINT (1)’TEXT’ (@x(X+66.5), @y(Y+.5), @x(X+75), @y(Y+2), FC$),
PRINT (1) ‘PEN'(1,4,0),
PRINT (1) ‘RECTANGLE’ (@x(MX), @y(MY+5), @x(MX+20), @y(MY+7)),

Voorbeeld 2
OPEN (1) “*WINDEV*”
PRINT (1) ‘BO’,ESC+”(s12H”,’EO’, ! HP Laser 12 cpi mode. Gebruik altijd ,’EO’ en nooit +’EO’
PRINT (1) TXT$

Bij het openen van *WINPRT* of *WINDEV* kunt u heel wat opties meegeven, gescheiden door een ‘punt-komma’

Een standaard ‘OPEN’ ziet er als volgt uit :

 

OPEN (1) “*WINPRT*”

PxPLUS zorgt er dan voor dat het standaard keuze scherm voor printers opgeroepen wordt, zodat u een WINDOWS printer kunt kiezen en eventueel eigenschappen kunt aanpassen, zoals aantal copieën, bladschikking, printen in een bestand ed.
De gekozen printer en instellingen blijven gelden zolang PxPLUS actief is.

Om te weten welke WINDOWS printers er geconfigureerd zijn, gebruiken we volgende instructie :

 

WINPRT_SETUP LIST X$

In X$ zit dan een lijst van alle lokaal geconfigureerde printers, gescheiden door een komma.
Als u een specifieke printer wilt openen, zonder het keuzevenster op te roepen, dan geeft u bij het openen – gescheiden door een ‘punt-komma’ – de naam van die printer mee, zoals die in de ‘WINPRT_SETUP LIST’ lijst voorkomt :

 

OPEN (1) “*WINPRT*;Epson FX-80 on \\server1\queue1”

Deze instructie opent printer ‘Epson FX-80’ die gekoppeld is aan machine ‘\\server1’ en die daar bekend en gedeeld is onder ‘\queue1’.

PxPLUS kent een paar speciale ‘queue’-namen : “ASIS“, “DEFAULT” en “SETUP“.
“ASIS” opent de printer met de instellingen zoals ie voordien ingesteld was en “DEFAULT” opent de printer met de standaard instellingen. In beide gevallen wordt het printer keuze scherm niet getoond.
“SETUP” laat u wel toe een printer te kiezen, maar u komt dadelijk in het venster met de eigenschappen.
bv.

 

OPEN (1) “*WINPRT*;ASIS”

Om de geselecteerde printer te kennen, tikken we in:

 

WINPRT_SETUP READ X$

Als u een bepaalde printer wilt instellen als zijnde de huidige printer:

 

WINPRT_SETUP WRITE “Epson FX80 on \\server1\queue1”

Dit doet u voordat u *WINPRT* opent.

En als u een printer wilt openen met bepaalde afwijkende eigenschappen, zonder het WINDOWS printer keuze scherm te openen, dan geeft u het volgende in:

 

OPEN (1) “*WINPRT*;Epson FX80 on \\server1\queue1;ORIENTATION=LANDSCAPE;COPIES=3”

of een variant zonder printernaam:

 

OPEN(1) “*WINPRT*;SETUP;ORIENTATION=LANDSCAPE”

Wil u weten hoe de huidige printer is ingesteld, dan tikt u in:

 

WINPRT_SETUP READ PROPERTIES P$

En om ze – eventueel veranderd – terug te zetten:

 

WINPRT_SETUP WRITE PROPERTIES P$

Eén van de printer-eigenschappen is OFFSET. De waarde die OFFSET ons geeft wordt uitgedrukt in 1/1000 van een inch. Omdat PxPLUS de linker- en bovenmarge van een printer niet kent, kan het zijn dat er kleine verschillen ontstaan tussen diverse printers bij het drukken van dezelfde taak.

Het volgende bevel zet de linker marge op 1/2 inch, en de boven marge op 3/4 inch.

 

WINPRT_SETUP WRITE PROPERTIES “OFFSET=500:750”

Hiermee kunnen we de marges aanpassen aan onze wensen en alzo heel precies bepalen waar de linker-boven hoek van het blad is en dus ervoor zorgen dan een gedrukt woord op die plaats komt die we willen. Handig bij voorgedrukte formulieren, waar tekst soms precies in een vakje moet passen. OFFSET aanvaardt ook negatieve waarden.

Volgende code geeft u een lijstje van lettertypes die een bepaalde printer ondersteunt:


CHAN=UNT
OPEN(CHAN)”*WINPRT*”
F$=’FONT'(LIST *,CHAN)
PRINT F$

En als u van een bepaald lettertype wilt weten welke puntgroottes er zijn, tik dan volgende regels in:


S$=’FONT’ (LIST “Arial” ,channel)
PRINT S$

Kies een bepaalde grootte uit deze lijst en maak dit de ‘default’-font en ‘default’-grootte:


PRINT (channel) ‘FONT'(“font_name”,-font_size),’DF’,

Let op de negatieve waarde bij de ‘font size’.
Een negatieve grootte (<0) betekent: Gebruik deze puntgrootte.
Een positieve waarde betekent: Maak de puntgrootte zoveel keer groter (&gt1;) of kleiner (0<X&lt1;) dan de ‘default’-grootte.
bv:

 

PRINT (channel) ‘FONT'(“Arial”,-10),’DF’, =kies Arial 10pt
PRINT (channel) ‘FONT'(“Arial”,0.75),’DF’, =25% kleiner dan de vorige ‘default’-instelling
PRINT (channel) ‘FONT'(“Arial”,1.5),’DF’, =50% groter dan de vorige ‘DF’-instelling

Hiermee bepaalt u dus niet alleen de grootte van het lettertype maar ook hoeveel karakters er op een lijn passen en hoeveel lijnen er op een blad gaan.
Met andere woorden: hoe kleiner het lettertype, hoe meer karakters op een lijn en omgekeerd.
De PxPLUS MXC() en MXL() functies geven u het aantal karakters per lijn en het aantal lijnen per blad.

Een – niet zo nauwkeurige – manier om uw printer zó in te stellen, zodat u een gewenst aantal kolommen krijgt, gaat dan als volgt:

 

PRINT (chan)’FONT'(“Arial”,MXC(chan)/positions_required),’DF’,

Let op: PxPLUS maakt een afronding naar de dichtstbijzijnde, ondersteunde fontgrootte. Daardoor kan het zijn dat u niet het gewenste aantal kolommen of lijnen heeft. Bekijk ons voorbeeld-programma “fontpick” (beschikbaar via onze website bij ‘ProvideX/freeware’), waarin het probleem onderschept wordt.

MXC() en MXL() kunnen per type printer toch verschillen, ondanks hetzelfde lettertype en karaktergrootte. Allerlei factoren spelen een rol, zoals papiergrootte, oriëntatie van het blad, offset, printerdriver …etc.
We raden u aan om uw programma’s zo te ontwerpen, dat ze rekening houden met eventueel kleine verschillen.
Als u een tekst print – met *WINPRT* of *WINDEV* – en u sluit de printer, dan zal de WINDOWS spooler automatisch een bladsprong toevoegen aan het einde van de job. Daar is weinig tegen te doen, ondanks het feit dat u in Windows-NT de mogelijkheid heeft om het datatype van de printer ‘RAW’ in te stellen.

U kunt rechtstreeks naar de poort ‘LPT1’ printen om een bladsprong te vermijden, maar we raden u aan de UNC naam te gebruiken. UNC staat voor Universal Naming Convention.

 

OPEN (1)”\\server_name\printer_name”

Bij het sluiten wordt er dan geen ‘formfeed’ gestuurd. Mocht de PRINT instructie een ERROR=13 genereren, LOCK dan het kanaal nadat de printer geopend is.
Let op dat de UNC’s beheerd worden door het operating system en deze bepaalt dus het gedrag van de UNC. (Formfeed gedrag kan in de toekomst veranderen)

Om uw rapport precies hetzelfde te maken op verschillende printers, zijn er twee mnemonics die u hierbij kunnen helpen, nl. ‘CPI'() and ‘LPI'().
Beide functies aanvaarden een waarde per inch, en hiermee forceren we meer precieze @X() en @Y() locaties, onafhankelijk van het gekozen standaard lettertype.

Voorbeeld:

 

OPEN(1)”*WINPRT*”
PRINT (1)’FONT'(“Courier New”,-10),’DF’,
PRINT (1)’CPI'(10),’LPI'(6),

Dus, de eerste PRINT instructie zet lettertype ‘Courier New’, karaktergrootte ’10 punt’ en maakt dit default. De tweede PRINT forceert 10 karakters per inch en 6 lijnen per inch. Dit verandert niets aan de default font, maar het verandert wel de interne berekening naar echte pixel coördinaten. In dit voorbeeld, een PRINT @X(10), komt dan precies op 1 inch afstand vanaf de linkermarge, een PRINT @X(25), komt dan op 2.5 inch afstand enz…
Hetzelfde geldt voor ‘LPI'().

Gebruikersvragen


V: Kun je – eenmaal begonnen met een printprogramma – een taak afbreken, en ervoor zorgen dat niets naar de printer gaat ?

A: Om een printjob te onderbreken, stuurt u een ‘AB’ mnemonic naar het *WINPRT* kanaal. Alle PRINT’s worden dan vergeten. Het kanaal blijft wel open.

 


V: Hoe weet ik welke printer als ‘huidige’ printer is ingesteld ?

A: Geef volgende instructie :

 

WINPRT_SETUP READ A$

en A$ bevat de naam van de printer die u zoekt.

 

 


V: In Windows, hoe vind ik de ‘default’ printer ?

A: Windows bewaart de ‘Default Printer’ in de WIN.INI file. PxPLUS biedt u een utility om in ‘INI’ files te lezen (en te schrijven).

 

CALL “*INIFILE;READ”, “WIN.INI”, “Windows”, “Device”, “”, default_prt$, 80
PRINT default_prt$

 

 


V: Hoe kan ik lokale printers gebruiken als ik met WindX werk ?

A: Om toegang te hebben naar de printers die uw lokale PC heeft, voegt u de prefix [WDX] toe aan de naam van de printer.

 

Voorbeeld:
OPEN (1)”[WDX]*WINPRT*”
or OPEN (1)”[WDX]*WINDEV*”
or OPEN (1)”[WDX]LPT1″

 

 


V: Hoe weet ik wanneer ik met WindX werk en wanneer niet, zodat mijn programma eenvormig is bij het openen van de printer ?

A: Volgende instructie vult %WDX$ of maakt ‘m leeg, naargelang u met WindX werkt of niet. U kunt deze regel bv. in uw startprogramma plaatsen, vermits een ‘%’-variabele globaal is.

 

IF MID(MSE,22,1) > $00$ AND MID(MSE,22,1) < $FF$ THEN LET %WDX$ = “[WDX]” ELSE LET WDX$ = “”

In uw programma opent u de printer als volgt:

OPEN (CHAN) %WDX$ + “*WINPRT*”

 

 


V: Hoe kan ik een printer openen en sluiten, zonder dat de Windows spooler een bladsprong uitvoert ?

A: Voeg ‘INPUT’ toe aan de ‘OPEN’

 

OPEN INPUT (chn) “*WINPRT*”

Dit laat u toe een printer te openen, maar u kunt geen document starten. Hiermee kunt u bv. testen of een printer beschikbaar is en welke lettertypes hij ondersteunt

 

‘FONT'(LIST *,chn)

De INPUT clausule bepaalt dat de printer in ‘Query’ mode is.

 

 


V: Hoe aligneer ik mijn kolommen ?

A: PxPLUS kent enkele mnemonics die u hierbij helpen :’JR’, ‘JD’ en ‘JL’. Dit staat voor ‘Justify Right, Decimal en Left’.
Vroeger was er alleen maar ‘fixed font’, dus de lengte van ‘www’ zou even lang zijn als ‘iii’. In Windows, met z’n ‘truetype variable fonts’, ziet u dadelijk dat de letter ‘w’ veel langer is dan de letter ‘i’.
Dit geldt ook voor cijfers, alhoewel sommige fonts bijna geen verschil geven. (voorbeeld met Georgia 12pts, waarbij wel zichtbaar verschil)

1234567890
1111111111
3333333333
5555555555
7777777777
9999999999
0000000000

U ziet (hopelijk) dat de rechter kantlijn van de kolom niet mooi onder elkaar staat, ondanks dat er overal 10 cijfers staan. Om dit rechts te aligneren past u ‘JR’ toe.
PxPLUS berekent het eindpunt alsof het een ‘fixed font’ was. b 10 karakters aan 10 cpi is dus 1 inch afstand. Dan wordt de effectieve lengte van het getal berekend.
Bij ‘1111111111’ is dit b 0.7 inch, bij ‘9999999999’ is dit misschien 0.9 inch. Dan trekt men dit getal af van het eindpunt (1 inch) en PxPLUS kent het beginpunt, dus 0.3 inch en 0.1 inch.

De ‘JD’ mnemonic is een variant hierop. In plaats van het einde van het getal te aligneren, wordt er gekeken of er een decimale punt in het getal zit, en zo ja, dan wordt hierop gealigneerd. Deze mnemonics werken enkel goed als de output een vaste lengte heeft. U moet dus een masker gebruiken om de output te formatteren.

 


En, vergeet het volgende niet …..

PxPLUS heeft twee lagen (layers) waarop de PRINT output terecht komt. De ‘TEXT’-laag en de ‘GRAPHIC’-laag.
Een PRINT (x) “ABCD” komt in de text-laag en een
PRINT (x)’TEXT'(x,y,”ABCD”) komt in de graphic-laag terecht.
Met andere woorden: grafische mnemonics, zoals ‘FONT’, ‘PICTURE’, ‘LINE’… komen in de grafische laag terecht en deze ligt bovenop de text-laag.

Er is echter één uitzondering hierop.

De ‘FONT'() gevolgd door een ‘DF’. Deze stelt de ‘default’ font hoogte en breedte in, in de text-laag. Alle gewone PRINT bevelen zullen deze instelling dan gebruiken, tot u een andere ‘FONT’+’DF’ instelling uitvoert.

Bedenk ook dat de X en Y coördinaten gebaseerd zijn op deze instelling van de text-laag.

Invalid activation

Gebruikersvraag :

Hoe komt het dat ProvideX soms niet meer goed geactiveerd is ?

Antwoord :

Dat komt doordat men het ProvideX activatie-bestand naar een andere plaats copieert.
Dit bestand vind u in directory : /pvx/lib/keys.
Sommige mensen willen achteraf de hele PVX directory naar een andere plaats copieren. Dat kan dus niet. Eens uw Providex is geactiveerd, mag u bovenstaande directory niet meer verplaatsen.

Er zijn 2 mogelijke oplossingen:

  1. U wist het activatie-bestand “activate.pvx” in hogervermelde directory. U voert opnieuw het activeringsprogramma uit. U gebruikt de bestaande keys die u al gekregen heeft. Eerst activeert u met de ‘temporary key’. U controleert of ProvideX terug start. Dan activeert u met de ‘permanent key’.
  2. U wist de ‘keys’ directory. U moet dan natuurlijk een nieuwe ‘activation key’ aanvragen bij onze diensten. Ook hier eerst de temporary key activeren en dan de permanent key.

PS. Mocht u ooit de nieuwste PVX release van het Internet downloaden, dan dient u die over de oude versie heen te installeren. De nieuwe release zal dan automatisch geactiveerd zijn.

Pos functie

De POS functie is nog krachtiger dan u denkt.

Bekijk even goed dit voorbeeld.


0010 begin
0020 dim A[1:5],A$[1:5]
0030 let A$[1]="alfa "
0040 let A$[2]="bravo "
0050 let A$[3]="charlie "
0060 let A$[4]="delta "
0070 let A$[5]="echo " 	De spaties zijn er voor de leesbaarheid
0075 print A${all}
0080 let A{all}=pos("a"=A${all}) 
0090 print A{all}
0100 let A{all}=pos("a"=A${all},1,0)
0110 print A{all}

De numerieke array krijgt het resultaat van de ‘POS’ functie van de string-array

Dus,

A[1]=pos(“a”=A$[1])
A[2]=pos(“a”=A$[2])
…..
…..
A[n]=pos(“a”=A$[n])

En kent u deze ?

PRINT POS ( “abc” : “schaar” ) Let op ! Er staat geen ‘is gelijk aan’ teken maar een ‘dubbelpunt’.

Er wordt hier gezocht naar ‘a’ of ‘b’ of ‘c’ in de zoekstring. De functie geeft u als resultaat de positie die het eerste voorkomt en dat is die van ‘c’, dus 2.

PRINT POS ( “abc” ^ “schaar” ) Dit is net het omgekeerde. Er wordt gezocht naar tekens die niet gelijk zijn aan ‘a’, ‘b’ of ‘c’.

SELECT

Het “SELECT” bevel in PxPLUS is op het eerste zicht niet echt spectaculair. Maar bij nader inzien kun je met deze instructie toch heel wat regels uit je programma wissen.
Het eerste programma is de ‘klassieke’ manier, om via een secundaire sleutel op ‘klantnummer’ in het faktuur-bestand (sale) te gaan lezen. Via het faktuurnummer gaan we dan de faktuurlijnen ophalen in het faktuur-detail-bestand (sale_itm).

0010 rem TT1A
0020 begin
0030 open (1)"sale"
0040 open (2)"sale_item"
0050 input (0,err=0050)'CS',@(10,10),'SB',"Customer number ",'SF',CUST$
0060 gosub GET_INVOICE
0070 goto 0050
1000 GET_INVOICE: ! ^1000  --------------------------------------------
1010 let K$=CUST$
1020 extract (1,key=CUST$,kno=2,dom=1030)iol=1140; goto 1150
	We zetten de filepointer vlak voor de faktuur van de klant die we gekozen hebben.
	We lezen via 'kno=2'.
1100 READ_INVOICE: rem ^100
1110 let K$=key(1,end=1180)
1120 if K$(1,5)>CUST$ then goto 1180
	We lezen tot het einde van het bestand of tot er geen
	fakturen meer zijn van onze ingetypte klantnummer.
1130 read (1)iol=1140
1140 iolist INVOICE$,DATE$,EXPDATE$,CUSTOMER$,TOTAL,NET,TAX,DISCOUNT
1150 print INVOICE$," ",DATE$," ",CUSTOMER$,TOTAL:"###B###B##0.00-"
1160 gosub GET_DETAIL
1170 goto READ_INVOICE
1180 return 
2000 GET_DETAIL: rem ^1000 ------------------------------------------
2010 let D$=INVOICE$
2020 extract (2,key=INVOICE$,dom=2030)iol=2140; goto 2150
	Het zetten van de filepointer op de juiste faktuur 		
2100 READ_DETAIL: rem ^100
2110 let D$=key(2,end=2170)
2120 if D$(1,10)>INVOICE$ then goto 2170
	Ook hier weer de nodige controles om de juiste detaillijnen te kunnen lezen
2130 read (2)iol=2140
2140 iolist D_INVOICE$,LINE$,PRODUCT$,D_TOTAL,D_NET,D_TAX,D_DISCOUNT
	Vermits 'TOTAL' ed. al gebruikt is in de eerste IOLIST,
	 moeten we ervoor zorgen dat we nu een andere naam kiezen voor de variabelen.
2150 print @(20),PRODUCT$,D_TOTAL:"###B###B##0.00-"
2160 goto READ_DETAIL
2170 return

© 2015 EDIAS Software International. All rights reserved. ProvideX® is a registered trademark of Sage Software Canada Ltd.