Messagepipeline Da Capo <-> CyPress =================================== Hier ist ein kleiner šberblick ber die von CyPress und Da Capo verwendete 1st-Base-kompatible Messagepipeline. N„heres kann man auch dem Beispielprogramm 1B_PIPE.C entnehmen, welches als Programm oder Accessory l„uft. Die Adressverwaltung muž 4 verschiedene Messagetypen erkennen und verarbeiten k”nnen. Es muž in jedem Fall eine Antwort abgeschickt werden. 1. Allgemeiner Init $1A00 (Abfrage der Programmversion) ---------------------------------------------------- +--------------------------+--------------------------------+ | Input | Output | +--------------------------+--------------------------------+ | Message_buf [0] = $1A00 | Message_buf [0] = n.a. | | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID | | Message_buf [2] = PRG-ID | Message_buf [3] = instcode | | | Message_buf [4/5] = versionptr | +--------------------------+--------------------------------+ ACC-ID: Die ID von Da Capo. PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muž) instcode: >= Null bedeutet Da Capo fehlerfrei initialisiert. < Null k”nnen diverse Fehlermeldungen sein. versionptr: Pointer auf die Programmversion. n.a.: nicht ausgewertet. WICHTIG: šber den Version ptr wird nachgeprft, welches Programm (bis jetzt 1ST- ADDRESS und 1ST-BASE) installiert wurde. Vor dem Pointer, der ja nur auf eine Versionsnummer zeigt, steht der Name des Programmes. Bei 1ST-BASE sieht das folgenderweise aus: "1ST-BASE V1.00-D" (Zeiger zeigt auf das 'V'). Anmerkung: Gegenw„rtig muž der Eintrag "1ST-BASE V1.00-D" sein, da das Accessory sonst von CyPress nicht als 1st-Base kompatible Adressverwaltung erkannt wird. 2. Abfrage wichtiger Systemadressen $1B00 --------------------------------------- +-------------------------------+-----------------------------+ | Input | Output | +-------------------------------+-----------------------------+ | Message_buf [0] = $1B00 | Message_buf [0] = n.a. | | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID | | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID | | Message_buf [3] = file-Nummer | Message_buf [3] = errcode | | | Message_buf [4/5] = infoptr | +-------------------------------+-----------------------------+ ACC-ID: Die ID von Da Capo. PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muž) file-Nr: Nummer der Tabelle, Klemmbrett = 0, Erste Datei = 1, usw. errcode: -1 = Tabelle existiert nicht. 0 = OK, Tabelle nicht selektiert. 1 = OK, Tabelle selektiert. infoptr Pointer auf 2 Langworte: msk-len Anzahl der Symbole msk-addr Pointer auf die Symboltabelle (Feldbezeichner) z.B. "Name","Vorname",... n.a. nicht ausgewertet. Anmerkung: Die Symboltabelle hat einen speziellen Aufbau: 1 L„ngenbyte (entspricht der L„nge des folgenden Eintrages ohne NULL-Byte, also strlen), das Symbol selbst und als Abschluž ein (berflssiges) NULL-Byte, also z.B. '5','F','i','r','m','a','\0'... Da Capo untersttzt nur eine Tabelle, d.h. die Symbole in CyPress lauten "1:Firma", "1:Nachname" usw. 3. ersten Datensatz holen $1B09 (search first) ------------------------------------------- +-------------------------------+-----------------------------+ | Input | Output | +-------------------------------+-----------------------------+ | Message_buf [0] = $1B09 | Message_buf [0] = n.a. | | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID | | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID | | Message_buf [3] = file-Nummer | Message_buf [3] = retcode | | Message_buf [4] = sel-type | Message_buf [4/5] = recptr | | Message_buf [5] = delm1/subst | | | Message_buf [6] = delm2/subst | | +-------------------------------+-----------------------------+ ACC-ID: Die ID von Da Capo. PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muž) file-Nr: Nummer der Tabelle, Klemmbrett = 0, Erste Datei = 1, usw. sel-type 0 = aktuelle Liste, nur angew„hlte Datens„tze 1 = aktuelle Liste, nur nicht angew„hlte Datens„tze 2 = alle Datens„tze in aktueller Liste 3 = Gesamtliste delm1 (high-byte) normale Feldtrennung. (subst1) (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden. delm2 (high-byte) Mehrfachfeldtrennung. (subst2) (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden. retcode: -1 = kein Datensatz gefunden. Sonst Anzahl der Datenfelder. recptr Pointer auf Datensatz (0 - terminiert) n.a. nicht ausgewertet. delm1 ist ',' und subst1 ist ';' delm2 und subst2 werden nicht verwendet 4. n„chsten Datensatz holen $1B0A (search next) -------------------------------------------- +-------------------------------+-----------------------------+ | Input | | +-------------------------------+-----------------------------+ | Message_buf [0] = $1B0A | Message_buf [0] = n.a. | | Message_buf [1] = ACC-ID | Message_buf [1] = PRG-ID | | Message_buf [2] = PRG-ID | Message_buf [2] = ACC-ID | | Message_buf [3] = file-Nummer | Message_buf [3] = retcode | | Message_buf [4] = sel-type | Message_buf [4/5] = recptr | | Message_buf [5] = delm1/subst | | | Message_buf [6] = delm2/subst | | +-------------------------------+-----------------------------+ ACC-ID: Die ID von Da Capo. PRG-ID: Die ID von CyPress. (An das die Antwort geschickt werden muž) file-Nr: Nummer der Tabelle. Klemmbrett = 0, Erste Datei = 1, usw. sel-type 0 = aktuelle Liste, nur angew„hlte Datens„tze 1 = aktuelle Liste, nur nicht angew„hlte Datens„tze 2 = alle Datens„tze in aktueller Liste 3 = Gesamtliste delm1 (high-byte) normale Feldtrennung. (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden. delm2 (high-byte) Mehrfachfeldtrennung. (low-byte) Ersatzzeichen, falls innerhalb von Feldern vorhanden. retcode: -1 = kein Datensatz gefunden. Sonst Anzahl der Datenfelder. recptr Pointer auf Datensatz (0 - terminiert) n.a. nicht ausgewertet. WICHTIG: Die Befehle Search_first und Search_next mssen fr jede Datei getrennt bearbeitet werden, da CyPress durchaus folgendes machen k”nnte: - Search first auf alle Dateien 1,2,3,... - Search next auf 1 - Search next auf 1 - Search next auf 3 - Search next auf 1 - Search next auf 1 - Search next auf 3 - usw. ½1992/93, Sascha Ldemann und Francisco Mendez