home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_01
/
DACAPO.LZH
/
DACAPO
/
1B_PIPE
/
1B_PIPE.TXT
< prev
Wrap
Text File
|
1994-01-16
|
7KB
|
152 lines
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 nachgeprüft, 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 (überflüssiges) NULL-Byte, also z.B.
'5','F','i','r','m','a','\0'... Da Capo unterstützt 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 müssen für 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 Lüdemann und Francisco Mendez