Techtips

Praktische Tipps und Skripte

Hier teilen wir praktische Tipps, Anleitungen und Lösungen zu häufigen Fragen zu unserer Software. Brauchen Sie eine schnelle Antwort? Vielleicht finden Sie sie bereits hier.

Themen der Technik-Tipps

Technik-Tipp der Saison

Debugging-Fenster aus der Anwendung starten Um die Debugging-Fenster aus einer Anwendung heraus anzuzeigen, wird oft folgender Code verwendet:
PREINPUT -1300; ESCAPE ! Öffnet das TRACE-Fenster 
PREINPUT -1301; ESCAPE ! Öffnet das COMMAND-Fenster  
PREINPUT -1302; ESCAPE ! Öffnet das WATCH-Fenster  
PREINPUT -1303; ESCAPE ! Öffnet das BREAK-Fenster 

 

Dieser Code funktioniert nur in einer Windows ProvideX/Plus-Sitzung – in einer WindX-Umgebung führen diese Befehle nicht zum Öffnen des entsprechenden Debug-Fensters. Daher wird empfohlen, diesen Code wie folgt zu ändern:

 


PRINT 'OPTION'("DebugWindow","Trace"),
PRINT 'OPTION'("DebugWindow","Command"), 
PRINT 'OPTION'("DebugWindow","Watch"), 
PRINT 'OPTION'("DebugWindow","Break"),

Bei der Verwendung von WindX ist es empfehlenswert, die Trace-, Watch- und Break-Fenster so zu starten, dass sie die Anwendung auf der Serverseite überwachen. Dies kann erreicht werden, indem das Wort „Host“ vor den Namen des Debug-Fensters gesetzt wird, zum Beispiel: PRINT 'OPTION'("DebugWindow","Host Watch"),.

Um ein Debug-Fenster mit der Serveranwendung zu verbinden, nachdem es bereits gestartet wurde, senden Sie: PRINT 'OPTION'("DebugWindow","Host Trace Enable"),.

Zu überwachende Variablen und Break-Anweisungen können ebenfalls mithilfe des ‘OPTION’-Mnemonics in die Debug-Fenster geladen werden. Zum Beispiel: PRINT 'OPTION'("DebugWindow","Host Watch Add A$"), fügt die Variable A$ dem Watch-Fenster hinzu, und PRINT 'OPTION'("DebugWindow","Break Add Test=LEN(A$)>0"), lädt einen Break, der die Anwendung stoppt, sobald die Länge von A$ größer als 0 ist.

Eine vollständige Übersicht aller Möglichkeiten im Zusammenhang mit Debugging-Fenstern finden Sie in der ProvideX Language Reference PDF (v9.10) unter 5. Mnemonics / OPTION.

Hinweis: Um die ProvideX/PxPlus-Debugging-Fenster nutzen zu können, muss in der verwendeten INI-Datei (mit PRINT ARG(-1) sehen Sie, welche Datei verwendet wird) eine [Config]-Gruppe mit Debug=1 (ohne Anführungszeichen) enthalten sein.

Extreme Makeover Techtip

Möchten Sie Ihrer Anwendung schnell und einfach ein neues Aussehen verleihen? Mit „Themes“ und „Visual Classes“ ist das möglich. Themes sind die früheren Templates. Sie bestimmen das Erscheinungsbild von Objekten in einer gesamten Bibliothek und werden daher in den Bibliotheks-Standardeinstellungen festgelegt.

Visual Classes beziehen sich auf ein einzelnes Objekt. Sie müssen sie daher für jedes Objekt individuell einstellen. In diesem Beispiel arbeiten wir nur mit Buttons, aber auch andere Objekte sind möglich.

Wir nehmen diese Buttons als Beispiel:

Schriftart: Arial, 20 Punkt
Vordergrund: Standard
Hintergrund: Standard

 

Wir erstellen nun ein „Theme“. Dazu starten wir Nomads und wählen im Menü: Options > Themes.

Wählen Sie den Namen „T1“ und den Steuerelementtyp: Button.

Sie sehen nun mehrere zusätzliche Optionen, die normalerweise bei einem Standard-Button nicht verfügbar sind. Zum Beispiel „Hover Border Color“. Das Ziel ist, dass der Button einen roten Rand erhält, wenn Sie mit der Maus darüber fahren. In diesem Beispiel werden außerdem einige andere Farben angezeigt. Dieses Theme „T1“ verknüpfen wir über Library Defaults mit unserer Bibliothek.

Wählen Sie dann die Registerkarte Font/Clr und anschließend T1.
Wenn wir nun das Panel mit Buttons starten und mit der Maus darüber fahren,
sehen wir vor allem, dass die Buttons einen roten Rand erhalten.
Außerdem bemerken Sie eine andere Schriftgröße, andere Farben und schärfere Ecken.
Alle Buttons in allen Panels haben nun dieses Aussehen.

Manchmal möchten Sie jedoch, dass bestimmte Buttons anders aussehen.
Dafür gibt es Visual Classes.
Gehen Sie zurück zum Hauptbildschirm und wählen Sie Menü > Options > Visual Classes.
Als Namen wählen Sie „BLUE“, Theme: „T1“, Steuerelementtyp: Button.
Die gleichen Eigenschaften wie bei einem Theme erscheinen erneut.

Wir möchten nun einen flachen, transparenten Button,
der im Hintergrund dunkelblau ist und roten Text hat, wenn er den Fokus hat,
sowie dunkelroten Text, wenn Sie mit der Maus darüber fahren.

Sie müssen hier wahrscheinlich verschiedene Einstellungen durch Ausprobieren testen.

Speichern Sie diese Einstellungen und stellen Sie dann in unserem Panel für jeden Button diese Visual Class „BLUE“ ein.
Wählen Sie die Eigenschaften Ihres Buttons, gehen Sie auf die Registerkarte Font/Clr
und wählen Sie unter Visual Class „BLUE“ aus.
Wir machen dies für die Buttons „auxiliary“ und „parameter“,
aber noch nicht für „exit“, um den Unterschied deutlich zu sehen.

Starten Sie das Panel neu.

Wenn Sie mit der Maus über „parameter“ fahren, sieht das Ergebnis so aus:

NomadsPlus Techtip

Sie kennen sicher den Unterschied zwischen Ordnerstil und Eigenschaftsseiten beim Bearbeiten in Nomads.
Es gibt Fans der ersten Methode und solche, die die zweite bevorzugen.
Jetzt gibt es eine dritte Möglichkeit: Nomads+.

Nomads+ ist im Grunde eine Kombination aus beiden.

Wie können Sie zwischen ‘Nomads+’, ‘Ordnerstil’ und ‘Eigenschaftsseiten’ wählen?
Wenn Sie ein Panel bearbeiten, wählen Sie im Menü Utilities und ganz unten im Dropdown-Menü finden Sie die drei Optionen.

Wir entscheiden uns also für Nomads+.

Wie bereits erwähnt, gibt es eine Gittertabelle mit bestimmten Eigenschaften wie Steuerungsname, Text, Position und Größe, Tabstopp, Tabreihenfolge usw.
Diese Eigenschaften können Sie der Reihe nach direkt im Gitter bearbeiten.

Alle anderen Optionen ändern Sie über ein klassisches Dialogfenster.

Auf einem kleinen Bildschirm kann es etwas unübersichtlich wirken. Am einfachsten ist es daher, einen zweiten Monitor zu verwenden, um beispielsweise die Nomads+-Symbolleiste dort zu platzieren, sodass Ihr Hauptbildschirm frei bleibt, um ein Panel zu entwerfen. Glücklicherweise wird die letzte Position gespeichert.

Sie können mehrere Panels gleichzeitig geöffnet haben. Jedes Panel und jede Symbolleiste hat dabei eine eigene Hintergrundfarbe und eine ID-Nummer, sodass Sie nicht verwechseln, welche Symbolleiste zu welchem Panel gehört.

Kurz gesagt: Es lohnt sich, einmal den Bearbeitungsstil zu wechseln, um herauszufinden, was am besten zu Ihnen passt.

IDE Techtip

Haben Sie die neue IDE schon ausprobiert?
IDE steht für Integrated Development Environment und ist für Entwickler äußerst praktisch. Alle in PxPLUS verfügbaren Tools finden Sie hier an einem Ort übersichtlich zusammengefasst.

Wie startet man die IDE?
Im Konsolenmodus geben Sie ein:

IDE

oder über eine Verknüpfung:

E:\PvxPLUS12\pxplus.exe *ide/launcher

Daraufhin erscheint dieser Bildschirm:

Beachten Sie, dass Pakete oder Optionen, die nicht zugänglich sind, mit einem kleinen roten Minuszeichen markiert werden, wie im obigen Beispiel rechts – „myTiles Tile Creator“.

Oben sehen Sie auch „Projects“. Hier können Sie verschiedene Projekte erstellen. Sinnvoll ist es, Kategorien nach Verzeichnissen zu gruppieren, z. B.: Buchhaltung, Fakturierung, Lohnabrechnung usw.

Bei EDIAS hat jeder Kunde ein eigenes Verzeichnis. Für jeden Kunden wird ein Projekt erstellt, das mit diesem Verzeichnis verknüpft ist.

Starten wir nun Nomads aus dem Projekt von Kunde X, ist automatisch das richtige Verzeichnis aktiv.

Der „Tasks“-Bildschirm
(Aktivieren Sie „display tasks“ unten im Hauptbildschirm.)
Dieser Bildschirm hat zwei Registerkarten: History und Project.

History zeigt eine Liste der zuletzt ausgeführten Aufgaben – auch aus anderen Projekten. Die Liste wird automatisch aktualisiert, sobald Sie ein Programm in IT bearbeiten, ein Panel in Nomads editieren usw.

Project zeigt alle Panels, Berichte, Programme usw., die zum aktiven Projekt gehören.

Panels, Berichte und Programme zu einem Projekt hinzufügen
In vielen Tools finden Sie nun ein Menüelement „Projects“.

Zum Beispiel in Nomads können Sie auswählen, ob nur die markierten oder alle Panels zu einem Projekt hinzugefügt werden sollen.

Wählen Sie außerdem im Hauptfenster eine Option aus der Liste der Anwendungen und aktivieren Sie „Display Help“. Sie erhalten dann die passende kontextbezogene Hilfe für das ausgewählte Modul.

Änderungen in IT (Program Editor)
In IT heißen die früheren „Workspaces“ jetzt „Projects“.
Auch hier stehen alle Elemente aus allen Projekten zur Verfügung – einschließlich Nomads-Panels und mehr.

Fazit:
Es lohnt sich, diese neue IDE-Methode auszuprobieren. Sie spart Entwicklern eine Menge Zeit.

PxPlus Version 2014 (v12) Windows aktivierung

Ab dieser Version wird die Datei ACTIVATE.PVX im Verzeichnis "PXPKEYS" abgelegt, das sich eine Ebene oberhalb des PxPlus-Installationsverzeichnisses befindet. Beispiel: Wenn PxPlus im Standardverzeichnis installiert ist:

C:\PVX Plus Technologies\PxPlus 2014
wird die Aktivierungsdatei im Verzeichnis:

C:\PVX Plus Technologies\PxpKeys
gespeichert.

Dies bedeutet, dass die Aktivierung nicht mehr an eine bestimmte PxPlus-Version gebunden ist und verschiedene PxPlus-Versionen (gleichzeitig oder unabhängig voneinander) dieselbe Aktivierung nutzen können.

Sie können jederzeit auf eine bestimmte Aktivierung verweisen, indem Sie im [Config]-Block der INI-Datei Folgendes eintragen:
ActivationKey=Pfad_zum_Verzeichnis_mit_activate.pvx
Beispiel:
[Config] ActivationKey=D:\PxPlus\pxpkeys

Wenn Sie eine bestehende Windows-PxPlus-Installation auf Version 2014 aktualisieren und bereits ein lib\keys-Verzeichnis aus einer älteren Installation vorhanden ist, verwendet Version 2014 weiterhin diese Aktivierung und erstellt kein pxpkeys-Verzeichnis. Auch die Unix- und Linux-Versionen von v2014 verwenden weiterhin die Aktivierung im lib-Verzeichnis (unabhängig davon, ob es sich um ein Upgrade oder eine Neuinstallation handelt).

Logfile

Ab der PxPlus-Windows-Version 11 kann in der [CONFIG]-Sektion der INI-Datei eine LOGFILE=-Zeile eingetragen werden. LOGFILE= muss auf einen vorhandenen Pfad verweisen, zum Beispiel:
LOGFILE=D:\tmp\logv11.txt

Der Pfad D:\tmp muss bereits existieren; die Textdatei logv11.txt wird erstellt, falls sie noch nicht vorhanden ist. Tritt in PxPlus ein interner Fehler auf, werden ein oder mehrere Einträge in die Protokolldatei geschrieben. Wird PxPlus zudem vom Betriebssystem beendet (z. B. durch Zugriff auf eine Speicheradresse außerhalb des PxPlus-Speicherbereichs, was die bekannte Meldung „PxPlus has stopped working“ verursacht), wird auch dies im Logfile vermerkt. So können Sie im Falle eines PxPlus-Absturzes nachvollziehen, an welcher Stelle in der Anwendung das Problem aufgetreten ist.

Jeder Logfile-Eintrag hat folgendes Format: Datum Uhrzeit [Programm:Zeile] Beschreibung des Problems

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:)
Aug 19 09:44 [D:\pxplus\pvxplus11\misc\blobtest.pgm:200] Fatal exception error code 
  c0000005 occurred
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:)
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

Sie können auch direkt aus Ihrer Anwendung heraus Einträge in die Protokolldatei schreiben, indem Sie SETTRACE RECORD verwenden. Beispiel: SETTRACE RECORD "OOPS" im Konsolenmodus erzeugt folgenden Eintrag: Jan 20 13:37 [:0] OOPS Ab PxPlus 2014 v.12 ist diese Funktionalität auch in den Unix- und Linux-Versionen von PxPlus verfügbar.

Um die Protokolldatei unter Unix/Linux zu aktivieren, erstellen Sie eine Datei mit dem Namen pvxtrace.log im PxPlus-Verzeichnis. Wenn PxPlus v.12 feststellt, dass diese Textdatei vorhanden ist, wird sie automatisch verwendet, um interne Meldungen zu speichern.

PxPLUS simple Client/Server

PxPLUS hat eine Alternative zu *NThost/NTslave entwickelt.
Der Vorteil besteht darin, dass der Host nur einen TCP-Socket benötigt.
Dies ist besonders nützlich bei der Nutzung des Internets, da in Ihrer Firewall nur ein Port geöffnet werden muss.
PxPLUS verwendet 4093 als Standardport. Dieser Port wurde ihnen offiziell von der IANA (Internet Assigned Numbers Authority) zugewiesen.

Starten des Hosts

Speichern Sie das folgende Skript auf Ihrem Unix-System unter /usr/local/bin/starthost:

#!/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 &1
und ändern Sie die Berechtigungen mit chmod 777

Fügen Sie die folgende Zeile in /etc/inittab auf der Unix-Maschine ein:

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

Hinweis für SCO OpenServer 5-Benutzer:
– Fügen Sie diese Zeile direkt unter der r3-Zeile ein.
– Wenn der Kernel neu erstellt oder gelinkt wird, entfernt SCO diese Zeile aus /etc/inittab!

Führen Sie telinit -q aus. Der PxPLUS-Host wird dann gestartet.
Auf manchen Unix-Systemen ist es erforderlich, den Rechner neu zu starten, damit die geänderte /etc/inittab erkannt wird.

Wenn Sie ein Linux-Betriebssystem verwenden, werden Sie feststellen, dass die Datei inittab nicht mehr verwendet wird.
Um das Skript dennoch automatisch beim Systemstart auszuführen, gehen Sie wie folgt vor:

Es gibt ein Skript /etc/init.d/boot.local.

Fügen Sie die folgende Zeile zu diesem Skript hinzu:

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

Es gibt ein Skript /etc/rc.d/rc.local.

Fügen Sie die folgende Zeile zu diesem Skript hinzu:

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

(user ist der Name eines Benutzers, der sich anmelden und PxPLUS starten kann)

Wenn Sie den Host unter Windows automatisch starten möchten, verwenden Sie *plus/cs/service.
Das Programm fragt dann nach dem Startverzeichnis, dem zu verwendenden Port und dem Programm, das ausgeführt werden soll.
Danach müssen Sie in den Diensten die Starteinstellung von manuell auf automatisch ändern.
Starten des Clients

Erstellen Sie die folgende Verknüpfung in Windows, um eine WindX-Verbindung herzustellen:

Ziel:

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

Starten in:

C:\pxplus

Ausführen: Minimiert

xxx.xxx.xxx.xxx ist die IP-Adresse des Host-Computers.

ssss ist die Socket-Nummer des Tasks auf dem Host. Standardwert = 4093.

-id=Txx ist der FID(0)-Wert von PxPLUS auf dem Hostrechner.

progname ist der Name des Programms, das gestartet wird, sobald die Verbindung hergestellt ist.
Bleibt dieses Feld leer, startet PxPLUS im „Konsolenmodus“.

Wenn Sie aus einem Programm heraus mehrere Tasks starten möchten, verwenden Sie nicht den Befehl START, sondern das dafür vorgesehene Hilfsprogramm:

*windx.utl

mit dem Label spawn.
Beispiel:

CALL "*WINDX.UTL;SPAWN" [,Programmname]

ODBC 64 / 32 bit drivers

1. Der PxPLUS ODBC-Treiber unterstützt zwei Verbindungsarten:

a) Eine einfache Verbindung, bei der der ODBC-Treiber auf dem Arbeitsplatzrechner läuft und nur Zugriff auf lokale Dateien oder über ein freigegebenes Laufwerk zugängliche Dateien hat.

b) Eine Serververbindung, bei der der ODBC-Treiber mit dem ODBC-Dateiserver auf einem anderen Rechner verbunden ist und die Daten von diesem Server erhält.

2. Es gibt ODBC-Treiber für den Arbeitsplatz sowohl in 32-Bit- als auch in 64-Bit-Version.
Der 32-Bit-Treiber kann sowohl auf 32-Bit- als auch auf 64-Bit-Windows-Systemen installiert und verwendet werden.
Der 64-Bit-Treiber kann nur auf einem 64-Bit-Windows-System installiert werden.

3. Der 32-Bit-Treiber kann nur von einer 32-Bit-Anwendung genutzt werden, und der 64-Bit-Treiber nur von einer 64-Bit-Anwendung.
Beispiel: Wenn Sie Office 64-Bit verwenden, kann dieses Produkt nur Daten von einem 64-Bit-ODBC-Treiber beziehen.
PS: Microsoft empfiehlt weiterhin, die 32-Bit-Version von Office sowohl auf 32-Bit- als auch auf 64-Bit-Windows-Systemen zu verwenden.
Siehe:
Microsoft Office 2010 FAQ

4. Das Standard-Windows-Programm „ODBC-Datenquellen-Administrator“ erkennt nur ODBC-Treiber vom gleichen Typ wie das Windows-Betriebssystem.
Mit anderen Worten: Der Datenquellen-Administrator unter einem 64-Bit-OS nutzt nur 64-Bit-ODBC-Treiber.
Um 32-Bit-ODBC-Treiber unter einem 64-Bit-OS zu konfigurieren, müssen Sie das Programm ODBCAD32.EXE starten (zu finden unter \Windows\SysWOW64\).
PS: Wir erstellen automatisch einen Link zum richtigen Konfigurator für den Benutzer.

5. Bei einer Verbindung zwischen einem ODBC-Treiber und einem ODBC-Dateiserver („b“ in Punkt 1 oben) ist der Typ des ODBC-Treibers (32-Bit oder 64-Bit) im Verhältnis zum Dateiserver-Typ irrelevant.
Die gesamte Kommunikation zwischen Treiber und Server erfolgt über TCP/IP.
Kurz gesagt: Ein 32-Bit-ODBC-Treiber kann sich mit einem 64-Bit-ODBC-Dateiserver verbinden und umgekehrt.

Window’s Printer Mapping to a PxPLUS Device Driver

In PxPLUS v6.10 wurde eine neue Funktion hinzugefügt, mit der ein Windows-Drucker auf einem PC definiert werden kann, sodass er im Windows-Druckerauswahldialog erscheint. Wenn dieser Drucker innerhalb einer PxPLUS-Sitzung ausgewählt wird, versucht PxPLUS, den Drucker zu einem Gerätetreiber umzuleiten.

Dies ermöglicht es Entwicklern, auf Arbeitsstationen Windows-Drucker für Elemente wie Vorschau, PDF oder HTML-Ausgabe aus PxPLUS zu erstellen.

Diese Funktion arbeitet basierend auf dem Namen und den Eigenschaften des Druckers.

 

  • Der Drucker muss einen Ausgabepfad von „NUL:“ haben.
  • Das zweite Wort im Namen des Druckers wird herausgefiltert, und ein Unterstrich wird am Anfang und Ende des Namens hinzugefügt. Das PxPLUS-LIB-Verzeichnis wird nach einem Gerätetreiber durchsucht, der diesem Namen entspricht. Falls der Gerätetreiber nicht gefunden wird, wird der Drucker nirgendwohin umgeleitet und gibt einfach nach NUL aus. BEISPIEL:
    Druckername: „PxPLUS Viewer“
    Es wird im PxPLUS-LIB-Verzeichnis nach „_viewer_“ gesucht. BEISPIEL:
    Druckername: „PxPLUS PDF“
    Es wird im PxPLUS-LIB-Verzeichnis nach „_pdf_“ gesucht. Befolgen Sie die nächsten Schritte, um einen solchen Drucker zu einem Windows-XP-Arbeitsplatz hinzuzufügen:
  1. Gehen Sie zu „Drucker und Faxgeräte“ in Windows.
  2. Wählen Sie „Drucker hinzufügen“.
  3. Wählen Sie „Lokaler Drucker“.
  4. Aktivieren Sie „Folgenden Anschluss verwenden“ und wählen Sie „NUL:“.
    Falls „NUL:“ existiert, wählen Sie es und fahren Sie mit Schritt 8 fort.
  5. Wählen Sie „Neuen Anschluss erstellen“.
  6. Stellen Sie „Anschlusstyp“ auf „Lokaler Anschluss“.
  7. Geben Sie für „Anschlussname“ „NUL:“ (ohne Anführungszeichen) ein.
  8. Wählen Sie im Hersteller-/Drucker-Dialog „Generic“ als Hersteller und „Generic/Text Only“ als Drucker.
  9. Wählen Sie „Vorhandenen Treiber beibehalten“.
  10. Geben Sie einen Namen für Ihren Drucker ein. Beachten Sie, dass das zweite Wort im Namen mit dem Gerätetreiber übereinstimmen muss.
    Für diesen „Druckernamen“ geben Sie „PxPLUS Viewer“ ein.
  11. Für „Als Standarddrucker festlegen“ wählen Sie „Nein“.
  12. Für „Freigabe“ wählen Sie „Nein“.
  13. Für „Testseite drucken?“ wählen Sie „Nein“.
  14. Überprüfen Sie Ihre Einstellungen und klicken Sie auf „Fertig stellen“.

Sie sollten nun einen Drucker mit dem Namen „PxPLUS Viewer“ als einen der Drucker dieser Arbeitsstation haben. Innerhalb jeder PxPLUS-Anwendung sehen Sie diesen Drucker im *WINPRT*-Druckerauswahldialog. Wann immer dieser Drucker ausgewählt wird, leitet PxPLUS den Drucker zum entsprechenden Gerätetreiber um.

In unserem Beispiel haben wir einen Drucker mit dem Namen „PxPLUS Viewer“ erstellt, der mit „NUL:“ verbunden ist. Wenn dieser in der Druckerauswahl ausgewählt wird, schließt PxPLUS automatisch „*WINPRT*“ und öffnet stattdessen die Datei „*VIEWER*“.

HINWEIS: Dies funktioniert NUR in PxPLUS-Anwendungen!
Wenn der Benutzer einen dieser speziellen, in PxPLUS zugeordneten Drucker aus einer anderen Anwendung (Word, Notepad usw.) auswählt, erfolgt KEINE Ausgabe.

Wie PxPLUS Ihre Dateien und Programme sucht und findet

Zuerst gehen wir die Befehle, Funktionen und Parameter durch, die sich auf das Auffinden von Dateien beziehen.

'CD'-Parameter.
Der 'CD'-Parameter ist standardmäßig 'AUS', was bedeutet, dass das aktuelle Verzeichnis erst nach den Verzeichnissen in der PREFIX-Liste durchsucht wird.
Wenn der Parameter 'EIN' ist, durchsucht PxPLUS zuerst das aktuelle Verzeichnis und erst dann die PREFIX-Liste.
(siehe auch 'Suchregeln')

Um den Inhalt des Parameters zu prüfen: PRINT PRM ( 'CD' )
und um den Parameter zu ändern: SET PARAM 'CD' = 1 (oder 0)

PREFIX
Sie können den PREFIX-Befehl mit der PATH-Variablen in MS-DOS oder UNIX vergleichen.
Verwenden Sie den PREFIX-Befehl, um eine Reihe von Suchpfaden anzugeben, in denen PxPLUS suchen soll, wenn Sie ein OPEN / LOAD / RUN / CALL / PERFORM für eine Datei oder ein Programm ohne vollständigen Pfadnamen ausführen.
Beispiel:
PREFIX “/usr/mydir/data/ /usr/mydir/prog/ /usr/mydir/sub/ D:/other/data/”

Mit anderen Worten: Wenn Sie eine Datei mit vollständigem Pfadnamen öffnen, gelten die Suchregeln nicht.

Die Namen im PREFIX müssen durch ein Leerzeichen getrennt werden.
Wie Sie sehen, kann der Laufwerksbuchstabe dem Pfadnamen hinzugefügt werden, um auf einem anderen Laufwerk zu suchen als dem, das mit dem Befehl SETDRIVE aktiviert wurde.

Sie können 10 verschiedene PREFIXe angeben, nämlich PREFIX (0) bis PREFIX (9).
Beispiel:
PREFIX (0) “/usr/mydir/data/”
PREFIX (1)”/usr/mydir/prog/ /usr/mydir/sub/”
PREFIX (2)”D:/other/data/”

Der Vorteil besteht darin, dass Sie ein bestimmtes PREFIX DEAKTIVIEREN und AKTIVIEREN können.
z.B.: DISABLE 2, und die Suche in D:/other/data/ wird gestoppt.

PREFIX (0) ” … ” ist dasselbe wie PREFIX ” … ”

Wenn es Pfadnamen gibt, die bereits ein Leerzeichen enthalten, müssen Sie diesen Pfadnamen in Anführungszeichen setzen.
Beispiel:
PREFIX “C:/Tmp/ C:/usr/ “”C:/Program Files/”””

PRINT PFX oder PRINT PFX (n) zeigt den Inhalt von PREFIX an.

' = '-Zeichen für spezielle Suchvorgänge.
Das '='-Zeichen im PREFIX hat eine besondere Bedeutung. Jedes '='-Zeichen entspricht einem Buchstaben (oder einer Ziffer) des Dateinamens und wird durch diesen ersetzt. Das erste '='-Zeichen wird durch den ersten Buchstaben des Dateinamens ersetzt, das zweite '=' durch den zweiten Buchstaben usw.
Die Idee ist, große Verzeichnisse in kleinere zu unterteilen, um einen schnelleren Zugriff und eine bessere Verwaltung zu ermöglichen.

Beispiel:
Angenommen, Ihre Anwendung besteht aus mehreren Modulen. Am Programmnamen können Sie bereits erkennen, zu welchem Modul es gehört.
z.B. BH001 BH002 BH003 gehören zum Buchhaltungsmodul und LN001 LN002 LN… gehören zum Lohnabrechnungsmodul. Sie können dann Ihr (großes) Verzeichnis in mehrere kleinere Verzeichnisse aufteilen. Der Name dieser Unterverzeichnisse muss mit den ersten Buchstaben der Modulnamen übereinstimmen. In diesem Fall BH und LN.
Wenn PxPLUS nun nach einem Programm oder einer Datei sucht, wertet es die ersten übereinstimmenden Buchstaben aus und verwendet diese, um im richtigen Verzeichnis zu suchen.
Beispiel:
PREFIX “/myapp/==/”
OPEN (1)”BHHIST”
PxPLUS wertet den Dateinamen BHHIST aus und macht daraus ‘/ myapp / BH / BHHIST’ (1) und versucht so, die Datei zu öffnen.

Sternchen als PREFIX-Wildcards.(2)
Sie können '*' und '**' als Platzhalterzeichen in PREFIX verwenden, um (neue) Dateinamenerweiterungen zu unterstützen, ohne Ihre Programme ändern zu müssen.
Diese Erweiterung wurde in Version 4.20 eingeführt, hauptsächlich um Windows 2000-zertifiziert zu sein. Um Windows 2000-zertifiziert zu sein, müssen Ihre Dateien und Programme eine Erweiterung haben. Mit den Platzhalterzeichen in PREFIX können Sie Ihren Dateien eine bestimmte Erweiterung geben, ohne Ihre Programme ändern zu müssen.

Ein einzelnes Sternchen (*):
Wenn Ihr PREFIX-Befehl ein Sternchen gefolgt von einer Erweiterung enthält, ersetzt PxPLUS dieses Sternchen durch den Dateinamen, den Sie zu öffnen versuchen.
Mit diesem Ergebnis versucht PxPLUS dann, die Datei zu finden, und wenn sie nicht gefunden wird, versucht PxPLUS trotzdem, die Datei ohne Erweiterung zu öffnen.
Beispiel:

PREFIX (5) “*.dat”
OPEN(1)”kunde”
PxPLUS durchsucht das Verzeichnis nach ‘kunde.dat’ und öffnet die Datei. Wenn ‘kunde.dat’ nicht gefunden wird, sucht PxPLUS weiter nach ‘kunde’. Wenn gefunden, öffnet PxPLUS die Datei; wenn nicht, erzeugt PxPLUS einen FEHLER 12.

Hinweis!
KEYED “abcde”,5 erstellt nicht die Datei ‘abcde.dat’, sondern ‘abcde’, und
ERASE “abcde” löscht die Datei ‘abcde.dat’!

Doppelte Sternchen (**):
Wenn Ihr PREFIX zwei Sternchen zusammen mit einer Erweiterung enthält, erfolgt der oben beschriebene Ersatz nur, wenn der Dateiname im OPEN-Befehl noch keine eigene Erweiterung hat. Wenn der Name bereits eine Erweiterung hat, erfolgt kein automatischer Ersatz.
Beispiel:
PREFIX “/mydir/**.dat”
OPEN(1)”journal”
OPEN(2)”journal.hist”
Da ‘OPEN (1)”journal”’ eine Datei ohne Erweiterung ist, sucht PxPLUS zunächst nach ‘/mydir/journal.dat’ und dann nach ‘/mydir/journal’.
Da ‘OPEN (2)”journal.hist”’ bereits eine Erweiterung (.hist) hat, fügt PxPLUS kein ‘.dat’ hinzu und sucht einfach nach der Datei ‘/mydir/journal.hist’.

PREFIX PROGRAM
Verwenden Sie das Format PREFIX PROGRAM, um einen Suchpfad speziell für Programme zu definieren. PxPLUS sucht zuerst in diesem Pfad und eventuell anschließend in den anderen PREFIXen, wenn Sie einen LOAD-, RUN-, CALL-, PERFORM-, PROGRAM- oder SAVE-Befehl ausführen.
Beispiel:
PREFIX PROGRAM “/pvx/mydir/pgm/”

um den Inhalt anzuzeigen:
PRINT PFX(PGN)

PREFIX FILE
Dies ist nicht das Gegenstück zu PREFIX PROGRAM!

Verwenden Sie das Format PREFIX FILE, um dynamische Umwandlungen von Dateinamen vorzunehmen. Sie können z.B. ein ‘OPEN(x)”kunde”’ programmiert haben, tatsächlich aber “//andere_maschine/kunde” öffnen wollen.

Wie funktioniert das? Sie definieren eine KEYED-Datei mit externem Schlüssel und variabler Satzlänge. Wenn die Datei diese Voraussetzungen nicht erfüllt, erhalten Sie einen FEHLER 17:Invalid file type or contents.
Der Schlüssel ist der Name, wie er im Programm steht, z.B. “kunde”.
Das erste Feld ist der Name der Ersatzdatei, z.B. “//andere_maschine/kunde”.
Dann führen Sie den Befehl aus: PREFIX FILE “PFXDATEI”

Beim Öffnen prüft PxPLUS zunächst diese Datei, ob der Dateiname, den Sie öffnen wollen, als Schlüssel in dieser Datei existiert. Falls ja, wird das Feld als Dateiname verwendet, und alle Suchregeln gelten erneut.
Denken Sie daran, dass der Suchmechanismus nur gilt, wenn ein relativer Dateiname angegeben wird. Dateinamen mit absolutem Pfad werden sofort geöffnet, ohne zu suchen.

Beispiel:
KEYED “pfxdatei”,25
OPEN(1)”pfxdatei”
WRITE (1,key=”kunde”)”[odb]ACCESS;CUST;KEY=CUSTNO”
CLOSE(1)
……
PREFIX FILE “pfxdatei”
OPEN(1)”kunde” ! Intern wird dies zu
>> OPEN(1)”[odb]ACCESS;CUST;KEY=CUSTNO”

Wie Sie sehen, ist es sehr einfach, wenn Sie die Datenbank wechseln wollen. Sie müssen nur die KEYED-Datei ändern; Ihre Programme bleiben unverändert.

Seit Version 4.23 wurde der PREFIX FILE-Datei ein zweites Feld hinzugefügt.
Dies ist ein OPTIONS-Feld. Diese Optionen werden beim Öffnen der Datei zum OPT= hinzugefügt. Dies wurde gemacht, weil die Länge des Namens auf 256 Byte begrenzt ist.

Beispiel:
Die PREFIX FILE-Datei enthält Folgendes:
Key=”kunde”, Feld1=”[ODB]DSN;kunde”, Feld2=”KEY=cust_id”

OPEN(1)”kunde”
intern wird dies zu:
OPEN(1,OPT=”KEY=cust_id”)”[ODB]DSN;kunde”
oder …
OPEN(1,OPT=”REC=kundenname”)”kunde”
intern wird dies zu:
OPEN(1,OPT=”KEY=cust_id;REC=kundenname”)”[ODB]DSN;kunde”

Der Inhalt von OPT= wird tatsächlich an den Namen angehängt, was ergibt:
OPEN(1)”[ODB]DSN;kunde;KEY=cust_id;REC=kundenname”

PRINT PFX(-1) zeigt Ihnen die PREFIX FILE-Datei.

SUCHREGELN
PxPLUS sucht eine Datei oder ein Programm in dieser Reihenfolge:

OPEN
1) PREFIX FILE, falls verwendet. (Ersetzt den Pfadnamen und setzt die Sequenz fort)
2) Aktuelles Verzeichnis (wenn 'CD'-Parameter EIN ist)
3) PREFIX 0 bis 9
4) PROGRAM PREFIX, falls verwendet
5) Aktuelles Verzeichnis (wenn 'CD'-Parameter AUS ist)

LOAD / RUN / CALL / PERFORM / SAVE
1) PREFIX FILE, falls verwendet (Ersetzt den Pfadnamen und setzt die Sequenz fort)
2) Program Cache
3) Aktuelles Verzeichnis (wenn 'CD'-Parameter EIN ist)
4) PREFIX PROGRAM, falls verwendet
5) PREFIX 0 bis 9
6) Aktuelles Verzeichnis (wenn 'CD'-Parameter AUS ist)

Die PREFIX-Suchregeln gelten nicht nur für das Öffnen von Dateien, sondern auch für deren Erstellung. PxPLUS erstellt die Datei im ersten Pfad des ersten PREFIX. Wenn der 'CD'-Parameter EIN ist, werden Dateien im 'aktiven' Verzeichnis erstellt.
Beachten Sie, dass, sobald ein Programm im 'Cache' ist, und Sie das PREFIX deaktivieren, aus dem das Programm stammt, PxPLUS das Programm bei erneutem Aufruf weiterhin aus dem Cache holt und keinen Fehler 12 erzeugt.

LEISTUNG
Was Sie vermeiden sollten, ist der Laufwerksbuchstabe am Anfang des Pfadnamens.
SETDRIVE “C:” ! normalerweise ist dies der Standardwert
PREFIX “C:/myapp/data/ C:/myapp/files/ D:/mydir/somedir/ C:/pvx/lib/”

Besser ist:
SETDRIVE “C:”
PREFIX “/myapp/data/ /myapp/files/ D:/mydir/somedir/”

Erstens benötigen Sie /pvx/lib nicht in Ihrem Suchpfad. Jedes PxPLUS-Hilfsprogramm und jedes PxPLUS-Unterverzeichnis kann aufgerufen oder gefunden werden, indem Sie ein '*' voranstellen.
z.B. CALL “*web/email” anstelle von CALL “\pvx\lib\_web\email”
Zweitens muss PxPLUS durch Weglassen des Laufwerksbuchstabens nicht prüfen, ob das Laufwerk vorhanden ist, was Zeit spart.
Wenn möglich, setzen Sie den Pfad mit einem anderen Laufwerksbuchstaben ans Ende des Suchpfads.

ASCII files

PxPLUS und ASCII-Textdateien
PxPLUS kann eine Datei auf 9 verschiedene Arten füllen.
Es gibt 3 Möglichkeiten, eine Datei zu öffnen:

OPEN (1) FILE$
OPEN (1,ISZ=1) FILE$
OPEN (1,ISZ=n) FILE$, waar n>1
Und Sie haben 3 Befehle zum Schreiben:
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… (tot LEN=n)
  • OPEN (1)

PxPLUS prüft zuerst den ersten Datensatz einer „Serial“-Datei. Wenn ein Zeichen gefunden wird, das nicht im Bereich von ” ” (Leerzeichen) bis “~” (Tilde) liegt, betrachtet PxPLUS die Datei als Binärdatei und die Regeln von ‘OPEN (1,ISZ=1)’ gelten.

Sie müssen die Datei sperren (LOCK), wenn Sie etwas hineinschreiben möchten.
PxPLUS behandelt die Datei datensatzorientiert.
Die IND()-Funktion gibt Ihnen den aktuellen Datensatz zurück.

  • SCHREIBEN

PxPLUS fügt immer $0D0A$ (1) am Ende eines Datensatzes hinzu.
Bei einem WRITE-Befehl wird zusätzlich vor dem Datensatztrenner ($0D0A$) ein Feldtrenner ($8A$) (2) eingefügt.

  • LESEN

Ein ‘READ RECORD’ durchsucht die Daten in der Datei nach einer $0D0A$-Byte-Kombination.
Ein ‘READ’ impliziert ein ‘READ RECORD’. Die Daten aus dem ‘READ RECORD’ werden verwendet, um die Variablen zu füllen, wobei $8A$ als Feldtrenner dient.
Ein ‘READ (1,IND=n)’ liest den n+1-ten Datensatz.

1 Datensatztrenner
PxPLUS für Windows: Datensatztrenner ist $0D0A$
PxPLUS für UNIX: Datensatztrenner ist $0A$
In meinen Beispielen habe ich stets $0D0A$ verwendet.

2 Feldtrenner
Der Standard-Feldtrenner ist $8A$, kann jedoch mit dem ‘FS’-Parameter geändert werden.


  • OPEN (1,ISZ=1)

Wenn Sie eine Datei mit ‘,ISZ=1’ öffnen, wird sie im BINÄRMODUS geöffnet, selbst wenn es sich um eine KEYED-Datei handelt.
Zur Kompatibilität mit anderen Business Basics ist ‘ISZ=-1’ erlaubt.
Diese Art des OPEN impliziert ein LOCK auf die Datei.
PxPLUS behandelt die Datei byteorientiert.
Die IND()-Funktion gibt Ihnen den Bytezeiger zurück, also die Anzahl der gelesenen Bytes.

  • SCHREIBEN

PRINT X$ schreibt X$+$0D0A$
WRITE X$ schreibt X$+$8A$
WRITE RECORD X$ schreibt X$, fügt der Variablen nichts hinzu, fügt jedoch ein $00$ Byte hinzu, wenn die Variable leer ist.

  • LESEN

Normalerweise lesen Sie die Datei mit READ RECORD(1,SIZ=nnn)X$
Andernfalls wird ‘SIZ=1’ angenommen.
‘READ(1,IND=n)’ liest das n+1-te Byte.


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

Vorsicht bei dieser Methode des Lesens und Schreibens.
Prüfen Sie immer, ob das Ergebnis Ihren Erwartungen entspricht.

  • SCHREIBEN

‘PRINT’ schreibt die Variable(n) in die Datei. Jeder PRINT wird mit $0D0A$ abgeschlossen.
Mehrere PRINTs hintereinander sind möglich. Kein Feldtrenner zwischen zwei Feldern.
Wenn die n Bytes erreicht sind, wird ein ERROR #1 erzeugt.
Wenn die n Bytes nicht erreicht werden, wird der Rest der n Bytes mit $00$ gefüllt.
‘WRITE’ schreibt die Variable(n) in die Datei. Nach jedem Feld wird ein Feldtrenner ($8A$) hinzugefügt. Die restlichen n Bytes werden mit $00$ gefüllt.
‘WRITE RECORD’ schreibt die Daten ohne Trenner. Die restlichen n Bytes werden immer mit $00$ gefüllt.

  • LESEN

Ein ‘READ’ impliziert ein READ RECORD mit n Bytes. Die Variablen werden anhand des gelesenen Datensatzes gefüllt.
Ein ‘READ RECORD’ liest n Bytes (n = beim OPEN angegeben)
Ein ‘READ RECORD (1,SIZ=x)’ liest x Bytes.

  • Tipp: Verwenden Sie PRINT, WRITE und WRITE RECORD nicht gemischt, um eine Datei zu füllen, es sei denn, Sie wissen genau, was Sie tun.

Zusammenfassung

  • Wenn Sie eine „Serial“-Datei füllen wollen, um sie später wieder in einen MERGE-Vorgang einzulesen:

WRITE 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"

READ PROCEDURE


CLOSE (1)
OPEN (1)F$
MERGE (1)

Wenn Sie die volle Kontrolle darüber haben möchten, was Sie schreiben:
Zum Beispiel: Sie müssen eine Datei erstellen, damit jemand anderes sie einlesen kann.
Es werden Ihnen einige Regeln vorgegeben: Der Datensatz muss 128 Bytes lang sein und durch ein „TAB“-Zeichen ($09$) getrennt werden.

WRITE 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$

READ PROCEDURE


OPEN(1,isz=1)F$
GET:
READ(1,siz=129,end=DONE)X$
GOTO GET
DONE:
Wenn Sie Datensätze mit Variablen in eine „serial“-Datei schreiben möchten, mit der Absicht, sie später wieder einzulesen:

READ PROCEDURE


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

WRITE PROCEDURE


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

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

Was ist eine Link-Datei?

Eine Link-Datei ist eine PxPLUS-Datei, mit der ein ‘ALIAS’-Name für einen bestimmten ‘Port’ oder eine bestimmte ‘Datei’ erstellt und ein Gerätetreiber damit verknüpft wird.

Eine PxPLUS-Link-Datei ist eine kleine, einfache Datei mit drei Bestandteilen.
– Der ‘Header’, der den Typ der Link-Datei angibt.
– Der Name des ‘anderen’ Ports oder der ‘anderen’ Datei.
– Der Name eines Gerätetreibers (CALL-Programms), der ausgeführt wird, nachdem die ‘andere’ Datei geöffnet wurde. (siehe Gerätetreiber unten)

Das ist im Grunde alles… Link-Dateien sind kleine Dateien in einem Verzeichnis wie viele andere auch und unterliegen denselben Regeln wie andere Dateien. Unter UNIX muss man daher auf Groß- und Kleinschreibung achten.

Es gibt drei verschiedene Typen von Link-Dateien, die im ‘Header’ der Link-Datei erkennbar sind: [Pvxlnk], [Pvxdev] und [Pvxapr]. Intern behandelt PxPLUS sie unterschiedlich.

Sprechen wir kurz über den ‘Header’ einer Datei.

Alle PxPLUS-Dateien haben einen ‘Header’. In ‘KEYED’-Dateien steht [PVXKEY], und ‘INDEXED’-Dateien haben [PVXIND].

Wenn PxPLUS eine Datei öffnet—egal welche—liest es sofort die ersten 512 Bytes (oder weniger). Es prüft, ob der ‘Header’ mit ‘[Pvx’ beginnt, und erkennt somit sofort, ob es sich um eine eigene Datei handelt. Jede andere Datei wird als ASCII-Datei betrachtet.

Handelt es sich um eine ‘keyed’-Datei, verarbeitet PxPLUS sie entsprechend. Der Interpreter kennt den internen Aufbau und kann die richtigen Datensätze lesen.

Bei einer Link-Datei weiß PxPLUS, dass sie anders zu behandeln ist als eine ‘keyed’-Datei.

Da PxPLUS die ersten 512 Bytes bereits gelesen hat, befindet sich die gesamte Link-Datei im Speicher. PxPLUS analysiert dann den Rest.
Ab Position 9, Länge 60: der Name der ‘anderen Datei’.
Ab Position 69, Länge 12: der Name des ‘CALL’- oder Gerätetreibers.

Intern schließt PxPLUS die Link-Datei. Auf demselben Kanal öffnet PxPLUS die ‘andere Datei’ und sorgt dafür, dass der Name der Link-Datei angezeigt wird, wenn Sie PRINT FID(Kanal) ausführen. Vor den Namen des Gerätetreibers wird ‘*dev’ gesetzt, was bedeutet, dass sich Gerätetreiber immer in ‘…../lib/_dev/’ befinden. Schließlich wird der ‘CALL’ ausgeführt.

So funktioniert eine Link-Datei

Sie müssen sicherstellen, dass:
1) Die ‘andere Datei’ in PxPLUS geöffnet werden kann — richtige Berechtigungen, richtiger Pfad, richtiger Name (Groß-/Kleinschreibung beachten).
2) Der Gerätetreiber mit dem Befehl CALL “*dev/<programm>” lad- und ausführbar ist.

Es gibt natürlich ein Hilfsprogramm zum Erstellen von Link-Dateien, nämlich ‘*UCL’.

Wie bereits erwähnt, gibt es drei Arten von Link-Dateien. Ihre jeweiligen ‘Header’ sind: [Pvxlnk], [Pvxdev] und [Pvxapr].
Diese ‘Header’ bestimmen, wie PxPLUS sie intern verarbeitet.

[Pvxlnk] wird verwendet, um eine Verknüpfung zu einer anderen Datei herzustellen, ohne einen Gerätetreiber zu verwenden. Zum Beispiel könnten Sie die Datei ‘KUNDEN’ auf ein anderes Laufwerk wie ‘F:\DATA\KUNDEN’ verschieben und eine Link-Datei mit dem Namen KUNDEN erstellen. So müssen Sie Ihre Programme nicht ändern.

[Pvxdev] ist wahrscheinlich der am häufigsten verwendete Typ. Er öffnet eine andere Datei oder einen Port und ruft den Gerätetreiber auf. Dieser Typ wird für Drucker und ähnliche Geräte benötigt.

[Pvxapr] ist eine Link-Datei für ‘Slave’-Drucker—Drucker, die mit dem Druckerport eines Terminals verbunden sind. PxPLUS öffnet den ‘anderen Port’, führt das ‘CALL’-Programm aus und sendet das ‘PS’-Mnemonic an den Drucker. Beim Schließen des Kanals sendet PxPLUS das ‘PE’-Mnemonic.

Einige Beispiele :

Der Name der Link-Datei ist vollkommen frei wählbar. Der Name der „anderen Datei oder des anderen Ports“ muss ein Name sein, den Sie in PxPLUS öffnen können. Also physische Ports (LPT1), oder Spool-Queues (>lp -dxxx -s ..), oder UNC-Namen (\\SERVER\PRINTER), oder TCP/IP-Ports ([TCP]1000;), ODBC-Verbindungen usw. …

Der Gerätetreiber ist ein CALL-Programm, das sich im Verzeichnis „*dev“ befinden muss. Sie können auch selbst einen solchen Treiber erstellen.

Was ist ein Gerätetreiber?

Ein PxPLUS-Gerätetreiber ist ein „CALL“-Programm, um eine Datei oder einen Port nach dem Öffnen zu initialisieren und vorzubereiten.

Beispiele:

OPEN(1)"LP"

Dies entspricht folgendem:

OPEN(1)"/dev/lp0"
CALL "*dev/OKI"
SETFID (1)"LP"

'OKI' ist einfach nur ein PxPLUS-Programm. Man kann alles Mögliche hineinschreiben: andere Dateien öffnen, den Benutzer nach Eingaben fragen, andere CALLs ausführen – alles, was in einem normalen CALL möglich ist, geht auch hier.

Sehen Sie sich z. B. den Gerätetreiber HPLASER an: LOAD "*dev/hplaser".

Am Anfang steht eine Zeile, die mit DEFTTY (LFO) cols,rows oder DEFPRT (LFO) cols,rows beginnt.

DEFTTY und DEFPRT teilen PxPLUS mit, ob es sich um einen Bildschirm oder einen Drucker handelt. Ohne diese Angabe nimmt PxPLUS an, es handele sich um eine Datei. So weiß PxPLUS, ob FIN() im TERMINAL-Format (bei DEFTTY) oder im PRINTER-Format (bei DEFPRT) zurückgegeben werden soll.

COLS und ROWS werden ebenfalls für FIN() und Funktionen wie MXC() und MXL() verwendet.

LFO und LFA sind zwei Systemvariablen, ähnlich wie DAY oder SSN.
LFO = Last File Open, LFA = Last File Accessed.

Ein einfaches Programm wie "*dev/hplaser" zeigt, dass Sie eigene Mnemonics erstellen können. Diese existieren, solange der Kanal geöffnet ist, und sind somit kanalgebunden.

Mit der Funktion MNM() können Sie den Wert eines Mnemonics lesen und für einen anderen Kanal wiederverwenden.
Beispiel: Sie definieren die Mnemonics ‘PS’ und ‘PE’ für Ihren Bildschirm.
Im Gerätetreiber für Ihren ‘Slave’-Drucker können Sie diese Mnemonics von Kanal 0 (Ihrem Bildschirm) abrufen und auf den Druckerkanal anwenden.

Es gibt auch Mnemonics mit spezieller Bedeutung.

‘*C’ wird automatisch gesendet, wenn der Kanal geschlossen wird.
Meistens enthält er ‘Reset’-Codes zur Initialisierung des Druckers.

‘*R’ kann einen OS-Befehl enthalten, der beim Schließen des Kanals ausgeführt wird. Beispiel: ‘rm /tmp/lock_file’

Dann gibt es noch ‘*I’ und ‘*O’. Wenn Sie UNIX ‘mapchan’ kennen, wissen Sie, was *I und *O tun.
‘*I’ ist eine Eingabe-Konvertierungstabelle, ‘*O’ eine Ausgabe-Konvertierungstabelle.
Damit lassen sich bestimmte Zeichen bei Ein- und/oder Ausgabe in andere umwandeln.
Beispiel: MNEMONIC ‘*O’=$00 01 02 03.. .. ..1C 1D 1E 1F 2E 21 22 .. .. .. .. .. FE FF$
Diese Tabelle zeigt ein Leerzeichen als Punkt an. (Hexwert eines Leerzeichens ist $20$, ersetzt durch $2E$, einen Punkt)

Ein Beispiel für einen komplexeren Gerätetreiber:
! Mein Treiber
PCHAN=LFO, PNAME$=FID(LFO)
CLOSE(PCHAN)

[Code, der prüft, ob eine Lock-Datei existiert]
[Falls Lock-Datei vorhanden, EXIT 14, sodass OPEN einen ERROR=14 erhält]
[Code zum Erstellen der Lock-Datei]
[Code zum Erstellen einer temporären Datei: ‘MYOUTPUT’]
OPEN(PCHAN)"MYOUTPUT"

[CALL des Programms mit den Mnemonic-Definitionen]

SETFID (PCHAN) PNAME$ (ja, SETFID funktioniert auch mit Dateien!)
EXIT

Eine interessante PxPLUS-Funktion ist OPT().

Wenn Sie OPEN(KANAL,OPT="hallo")NAME$ ausführen, liefert OPT(KANAL) ‘hallo’ zurück. Alles, was Sie bei OPEN in OPT= setzen, kann im Gerätetreiber wieder abgerufen werden.

Beispiel:

Sie haben eine Link-Datei ‘LP’, der ‘andere Port’ ist ‘/dev/lp0’ und der Gerätetreiber heißt ‘myprog’

OPEN(1,ERR=stmt,OPT="Prüfen, ob das richtige Papier geladen ist!") "LP"

<PxPLUS Intern>
[Liest die Link-Datei ‘LP’]
[Schließt die Datei ‘LP’]
[Öffnet ‘/dev/lp0’]
[Verwendet SETFID, um ‘/dev/lp0’ in ‘LP’ umzubenennen]
[CALL "*dev/myprog"]

<In ‘*dev/myprog’>
options$=OPT(LFO)
[options$ enthält jetzt "Prüfen, ob das richtige Papier geladen ist!"]
IF NOT(NUL(OPTIONS$)) MSGBOX OPTION$,"Meldung"
[CALL-Programm beendet]

<PxPLUS Intern>
[Gibt einen EXIT-Rückgabewert an OPEN zurück]

Eine eher unbekannte Funktion ist SETDEV TSK().

Wer schon mit BBx gearbeitet hat, kennt TSK() zur Erzeugung einer Druckerliste. PxPLUS kann dies emulieren.
Mit diesem Befehl können Sie die TSK()-Daten laden, sodass TSK() die erwarteten Inhalte wie bei BBx zurückgibt. Nachteil: Eine TSK() lässt sich nicht löschen.

SETDEV TSK() $0100$+"LP"+$00$+">lp -dq1 %COPIES% -s 2>/dev/null"+$00$
SETDEV TSK() $0100$+"P1"+$00$+"/dev/lp1"+$00$

Mit X1$=TSK(0) und X2$=TSK(1) erhalten Sie den Inhalt zurück.

Wie Sie sehen, ist mit einem Gerätetreiber nahezu alles möglich.

Sehen Sie sich ‘*dev/spool’ an. Hier wird als ‘andere Datei’ ein Verzeichnis erwartet. Das Verzeichnis wird geschlossen, eine temporäre Datei darin erstellt und der Name wieder zurückgesetzt. Alle ‘print’-Ausgaben landen in dieser temporären Datei, und beim Schließen des Kanals wird der OS-Befehl ‘>lp -d…’ über das Mnemonic ‘*R’ gestartet. Mehrere Befehle können in ‘*R’ gespeichert werden, getrennt durch ein ‘;’ wie bei jedem OS-Befehl.

Ein spezieller Gerätetreiber ist ‘*dev/windows’. Dieser wird von ‘PxPLUS für Windows’ verwendet.
Dieses Programm sollten Sie nicht verändern! Allgemein sollten Sie Treiber in ‘*dev’ nicht ändern, da sie bei einer Neuinstallation von PxPLUS überschrieben werden. Sie können jedoch Kopien unter einem anderen Namen erstellen und diese anpassen. Für spezielle Anpassungen nutzen Sie das Verzeichnis ‘lib/_udev’. (Falls es nicht existiert, können Sie es anlegen)
PxPLUS prüft immer zuerst in diesem Verzeichnis, ob ein gleichnamiger Terminaltreiber existiert. In diesem Fall ‘WINDOWS’. Falls vorhanden, wird er ausgeführt.
Beispiel: Sie möchten blaue Schrift auf weißem Hintergrund.

Erstellen Sie ein Programm ‘*udev/windows’
0010 ! Windows
0020 print ‘blue’,’_white’,’df’,’cs’,
0030 exit
>save"*udev/windows"
>start

Es ist letztlich nur eine Frage der Terminologie. Das Konzept der Link-Dateien und Gerätetreiber ist recht einfach, weil… alles möglich ist. Man kann alles umsetzen, was man sich vorstellen kann… da es sich ‘nur’ um ein CALL-Programm handelt. Link-Dateien sind einfach eine Möglichkeit, einer Datei oder einem Port einen ALIAS-Namen zu geben oder <beliebig ergänzen>.


(Originaltext von Gord Davey, überarbeitet und ergänzt von Tino Vanholst)

Tab Content

This is a basic text element.

Tab Content

This is a basic text element.

Fehlen Ihnen Informationen oder haben Sie eine technische Frage?

Benötigen Sie Hilfe oder sind Sie irgendwo stecken geblieben? Unser Supportteam steht bereit, um Ihre Fragen zu beantworten und Lösungen anzubieten. Ob technische Herausforderungen oder Beratung – wir helfen Ihnen gerne weiter. Kontaktieren Sie uns und erhalten Sie schnell den benötigten Support!
© 2025 Edias Software International. All rights reserved.