FATS - Fast Access Tree System
Inhaltsverzeichnis
Programmierschnittstellen
Fabs Plus kompatible Einsprungpunkte

Fabs Plus kompatible Einsprungpunkte


 FABSMB (Basic Compiler)
 FBSVBDOS (Visual Basic)
 FBSPAS (MS Pascal)
 FBPAS1 (MS Pascal)
 FBSFOR (MS Fortran)
 FBSCOB (MS Cobol)
 GFSEG (ALL)
 GFSEG1 (ALL)
 KEYADR (ALL)

 
Zur Kompatibilität mit der Dateiverwaltung FABS Plus wurden sämtliche Programmierschnittstellen dieser Software nachgebildet.

Wenn Sie bereits längere Zeit mit FABS Plus arbeiten, dann müssen Sie die nachfolgenden Seiten nicht unbedingt lesen, da die Funktionalität der aufgeführten Schnittstellen dieselbe wie bei FABS ist.
Binden Sie einfach das Objektmodul FATS.OBJ anstatt des bisherigen FABSP.OBJ an Ihr Programm.

Bei der Verwendung der nachfolgend beschriebenen Schnittstellen müssen Sie beachten, daß FABS Plus nur mit Datensatznummern von 1-65535 arbeitet. Da FATS keine Beschränkung in der Anzahl von Datensätzen kennt, muß der Befehl  Get Record # High (X) zur Vervollständigung der Satznummer herangezogen werden, wenn mit diesen Schnittstellen gearbeitet wird (siehe Seite 4-109).

 
FABSMB (MS Basic Compiler)

Bei diesem Eintrittspunkt, der üblicherweise vom Microsoft Basic Compiler verwendet wird, werden dem FATS-Modul 4 Zeiger auf die Variablen CMND$, ERRORCODE%, RECNO% und KEYADR% übergeben. Alle Zeiger sind NEAR-Zeiger (unsegmentiert) und beziehen sich auf das Datensegment (DS).

Der Kommandostring (CMND$) besitzt einen Kopfsatz, der Angaben über die Länge und die Adresse des Basic-Strings beinhaltet:

2 BytesLänge des Strings
2 BytesOffset des Strings im Datensegment (DS)

Vor der Rückkehr zu Basic entfernt FATS die vier Zeiger (8 Bytes) vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die zurückgegebene Schlüsseladresse (KEYADR) bezieht sich auf das FATS-Segment und kann mit dem Aufruf von GFSEG vervollständigt werden.

Ein typischer Funktionsaufruf aus Basic könnte folgendermaßen aussehen:

CALL FABSMB(CMND$, ERRORCODE %, RECNO%, KEYADR%)


 

 
FBSVBDOS (MS Visual Basic für DOS)

Dieser Einsprungpunkt ist für den Microsoft Visual Basic Compiler vorgesehen. Wie beim vorangehend beschriebenen Einsprungpunkt FABSMB werden FATS die 4 Zeiger auf die Variablen CMND$, ERRORCODE%, RECNO% und KEYADR% übergeben. Alle Zeiger sind NEAR-Zeiger (unsegmentiert) und beziehen sich auf das Datensegment (DS).

In Visual Basic für DOS befinden sich die Strings nicht wie in bisherigen Basic-Versionen in einem Datensegment, sondern sind auf verschiedene Segmente (Heaps) verteilt. Dadurch hat sich der Aufbau des String-Kopfsatzes gegenüber Microsoft-Basic PDS verändert:

Der String-Kopfsatz hat folgenden Aufbau:

2 BytesOffset des Strings (im jew. String-Heap)
2 BytesOffset der Segmentadresse des String-Heaps

Vor der Rückkehr zu Visual-Basic entfernt FATS die vier Zeiger (8 Bytes) vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die zurückgegebene Schlüsseladresse (KEYADR) bezieht sich auf das FATS-Segment und kann mit dem Aufruf von GFSEG vervollständigt werden.

Ein typischer Funktionsaufruf aus Visual-Basic könnte folgendermaßen aussehen:

CALL FBSVBDOS(CMND$, ERRORCODE%, RECNO%, KEYADR%)


 

 
FBSPAS (MS Pascal)

Zwei FAR-Zeiger (segmentiert) der Variablen CMND und ERRORCODE werden diesem Einsprungpunkt übergeben, der normalerweise vom Pascal-Compiler verwendet wird. Über diese Funktion kommen Sie nicht an die Adresse der Schlüsselvariable (KEYADR), bitte verwenden Sie dazu den Einsprungpunkt FBPAS1.

Das erste Byte des Kommandostrings (CMND) definiert die Länge des Pascal-Strings, darauf folgt der Inhalt des Strings:

1 ByteLänge des Strings (0 - 255)
? BytesStringinhalt

Vor der Rückkehr zu Pascal entfernt FATS die zwei Zeiger (4 Bytes) vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die Datensatznummer wird über das AX-Register übergeben.

Ein typischer Funktionsaufruf aus MS-Pascal könnte folgendermaßen aussehen:

RECNO := FBSPAS(CMND^, ERRORCODE);


 

 
FBPAS1 (MS Pascal)

Dieser Einsprungpunkt ist ebenfalls für den Microsoft Pascal Compiler vorgesehen, es werden allerdings drei FAR-Zeiger übergeben, die die Variablen CMND, ERRORCODE und KEYADR repräsentieren.

Das erste Byte des Kommandostrings (CMND) definiert die Länge des Pascal-Strings, darauf folgt der Inhalt des Strings:

1 ByteLänge des Strings (0 - 255)
? BytesStringinhalt

Vor der Rückkehr zu Pascal entfernt FATS die drei Zeiger vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die Datensatznummer wird über das AX-Register zurückgegeben. Die übergebene Schlüsseladresse (KEYADR) bezieht sich auf das FATS-Segment und kann mit dem Aufruf von GFSEG1 vervollständigt werden.

Ein typischer Funktionsaufruf aus MS-Pascal könnte folgendermaßen aussehen:

RECNO := FBSPAS(CMND^, ERRORCODE, KEYADR);


 

 
FBSFOR (MS Fortran)

Bei diesem Eintrittspunkt, der üblicherweise vom Microsoft Fortran Compiler verwendet wird, werden dem FATS-Modul 3 Zeiger auf die Variablen CMND, ERRORCODE und KEYADR übergeben. Alle Zeiger sind FAR-Zeiger, d.h. sie bestehen aus einem Offset- und einem Segmentanteil.

Der über die Variable CMND spezifizierte Kommandostring ist eine mit dem Circonflexe-Zeichen (^) terminierte Zeichenkette, z.B. "S\1\1\ABC^".

Vor der Rückkehr zu Fortran entfernt FATS die drei Zeiger (12 Bytes) vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die zurückgelieferte Schlüsseladresse (KEYADR) bezieht sich auf das FATS-Segment und kann mit dem Aufruf von GFSEG1 vervollständigt werden.

Ein typischer Funktionsaufruf aus MS-Fortran könnte folgendermaßen aussehen:

RECNO = FBSFOR(CMND, ERRORCODE, KEYADR)


 

 
FBSCOB (MS Cobol)

Dieser Einsprungpunkt ist für den Microsoft Cobol Compiler vorgesehen. Vier Zeiger müssen FATS übergeben werden: CMND, ERRORCODE, RECNO und KEYADR. Alle Zeiger sind NEAR-Zeiger (unsegmentiert) und beziehen sich auf das Datensegment (DS) des Cobol-Programmes.

Der über die Variable CMND spezifizierte Kommandostring muß eine mit dem Circonflexe-Zeichen (^) terminierte Zeichenkette sein.

Vor der Rückkehr zum Cobol-Programm entfernt FATS die 4 Zeiger (8 Bytes) vom Stack und schreibt die Rückgabeparameter in die entsprechenden Variablen. Die Datensatznummer steht im AX-Register. Die zurückgelieferte Schlüsseladresse (KEYADR) bezieht sich auf das FATS-Segment und kann mit dem Aufruf von GFSEG vervollständigt werden.

Ein typischer Funktionsaufruf aus MS-Cobol könnte folgendermaßen aussehen:

CALL 'FBSCOB' USING CMND, ERRORCODE, RECNO, KEYADR


 

 
GFSEG (Segmentadresse)

Jede Programmiersprache hat ihre eigene Speicherverwaltung, mit der u.a. auch Strings verwaltet werden. Für ein Toolkit wie FATS, das für eine Vielzahl von Programmiersprachen geeignet ist, gibt es dadurch das Problem des Austauschs von Variablen mit dem jew. Anwenderprogramm. Kleinere Datentypen, wie z.B. Zahlen, können noch relativ problemlos übergeben werden, Strings jedoch müssen über Zeiger adressiert werden.

Die oben vorgestellten Einsprungpunkte liefern über die Variable KEYADR einen Zeiger auf den von FATS gefundenen Schlüsselwert. Dieser Zeiger bezieht sich auf das FATS-Segment. Mit den Einsprungpunkten GFSEG und GFSEG1 können sie die Adresse dieses Segments ermitteln.

Der Einsprungpunkt GFSEG benötigt einen NEAR-Zeiger auf eine WORD- bzw. Integer-Variable im Datensegment (DS) der Anwendung, der vor dem Aufruf der Funktion auf den Stack kopiert wird. FATS schreibt die Segmentadresse des FATS-Segments in diese Variable. Vor dem Rücksprung zum aufrufenden Programm wird der Zeiger (2 Bytes) vom Stack entfernt.

Nachfolgend ein Beispiel für Basic:

XADRKEY = KEYADR%
IF XADRKEY < 0 THEN XADRKEY = XADRKEY + 65536

CALL GFSEG(FATSSEG%)
FATSSEG = FATSSEG%
IF FATSSEG < 0 THEN FATSSEG = FATSSEG + 65536

FATSKEY$ = ""

FOR C = XADRKEY TO XADRKEY + KEYLEN% - 1

DEF SEG = FATSSEG
TMPCHAR = PEEK (C)
DEF SEG
IF TMPCHAR = 0 THEN EXIT FOR
FATSKEY$ = FATSKEY$ + CHR$(TMPCHAR)

NEXT C


 

 
GFSEG1 (Segmentadresse)

Diese Funktion enspricht der vorangehenden Prozedur (GFSEG), das FATS Datensegment wird jedoch über das AX-Register des Prozessors übergeben. Die Funktion eignet sich daher für Sprachen wie Pascal, Cobol und C.

Nachfolgend ein Beispiel für MS-Pascal:

FATSSEG : WORD;
XADRKEY : ads of String(100);
FATSKEY : LString(100);

FUNCTION GFSEG1 : WORD; EXTERN;

FATSSEG := GFSEG1;
XADRKEY.S := FATSSEG;
XADRKEY.R := KEYADR;
MOVESL (XADRKEY, ads FATSKEY [1], KEYLEN);
FATSKEY.LEN := KEYLEN;


 

 
KEYADR (Schlüsseloffset)

Diese Variable beinhaltet die Adresse des zuletzt gefundenen Schlüssels. Es handelt sich dabei um ein DWORD. Im ersten WORD befindet sich der Offset, das zweite WORD beinhaltet die Segmentadresse des FATS-Datensegments. Diese Variable ist nur in der FATS-Basisversion für MS-DOS, PC-DOS etc. vorhanden.


 

© 2008  GCS Software, Udo Gertz