Datenstruktur zur Abfrage und Anzeige zustzlicher Mglichkeiten der 
seriellen (und evtl. sonstiger) Kommunikationsroutinen
====================================================================

Cookie
------
Name: RSVF  (RS232 Version Fast)
Wert: Zeiger auf Datenstruktur
      Zeiger mu <>0 sein und auf gerade Adresse weisen

Datenstruktur
-------------
Beliebig viele Objekte sind als Liste hintereinander abgelegt. An das Ende 
einer Liste kann ber eine Verkettung eine weitere Liste angehngt sein. 
Am Ende der letzten Liste befindet sich eine Ende-Kennung.

Objekt
------
Jedes Objekt ist 8 Byte lang und beginnt auf einer geraden Adresse. 
Byte 0..3 sind ein Zeiger auf den Namen der Schnittstelle (Filename) im 
ASCII-Code. Der Name mu auf einer geraden Adresse beginnen und ist 
nullterminiert.
Byte 4..7 enthalten Angaben ber die Eigenschaften des Objektes (der 
Schnittstelle). Noch nicht definierte Bits/Bytes mssen vom anlegenden 
Programm auf 0 gesetzt werden.
Sollten irgendwann zustzliche Informationen ntig werden, so wird deren 
Vorhandensein auf noch zu definierende Weise in Byte 4..7 angezeigt. Die 
Informationen selbst liegen dann vor dem Namen der Schnittstelle.

Besondere Objekte
-----------------
Bei besonderen Objekten ist Byte4.Bit7 =0.
Ende-Objekt:
 Byte 0..3  0, ein NIL-Zeiger, kennzeichnet das Ende der Datenstuktur  
Verkettungsobjekt:
 Byte 0..3  Zeiger auf die nchste Liste mit Objekten.

Eigenschaftsdefinitionen im Wert
--------------------------------
Byte 4:
 Bit7  =1: dieser Name ist eine Schnittstelle
 Bit6  =1: Schnittstelle ist dem GEMDOS fr File-I/O bekannt
 Bit5  =1: Schnittstelle ist dem BIOS bekannt (Bco*-Routinen)
 fr den Rest fllt uns noch was ein (Fhigkeiten der Schnittstelle)
Byte 5:
 noch frei 
Byte 6:
 BIOS-Nummer der Schnittstelle (Bco*-Routinen)
Byte 7:
 noch frei


Mindestforderung an Treiber bei gesetztem GEMDOS-Bit
----------------------------------------------------
Fopen, Fclose, Fread, Fwrite, Fcntl werden behandelt. Falls eine Funktion 
(oder auch Unterfunktion von Fcntl) nicht vorhanden ist, mu dafr der 
Fehlercode -32 (EINVFN) geliefert werden.

Fopen darf immer nur mit dem vollen Pfad "U:\DEV\devicename" erfolgen. 
Konstruktionen mit Dsetdrv und Dsetpath sind UNZULSSIG.

Fcntl hat die Funktionsnummer $0104 und die Parameter:
handle, special, subfunction
handle:      16Bit filehandle
special:     32Bit parameter for subfunction
subfunction: 16Bit number of subfunction


HSMODEM1 untersttzt:
--------------------
Fopen fr Lesen&Schreiben auf "U:\DEV\MODEM1" und natrlich Fclose.
Fwrite und Fread sind nichtblockierend, d.h. es werden immer nur soviel Byte 
bertragen, wie der serielle Puffer aufnehmen/liefern kann. So sollten auch 
andere Treiber arbeiten.

Fcntl bietet bis jetzt Folgendes: (Vorschlge fr neue Funktionen nehme ich 
gern entgegen (bitte die subfunction-Nummer mit angeben) und werde sie 
falls mglich&sinnvoll auch realisieren)
/* alles in C-Notation */
/* Rckgabewert der Funktionen ist 0 fr fehlerfreie Durchfhrung oder */
/* ein negativer Fehlercode (32Bit-Wert), falls nicht extra beschrieben */

/* zur Ermittlung, vieviel Byte nichtblockierend bertragen werden knnen */
/* Ich halte es fr sinnlos, aber Michael will es haben. Harun. */
#define FIONREAD  (('F'<< 8) | 1)
#define FIONWRITE (('F'<< 8) | 2)
long Fcntl( handle, &count, FIONREAD);
long Fcntl( handle, &count, FIONWRITE);
/* auf &count wird als 32Bit-Wert die Anzahl der Byte hinterlassen */

/* zum Setzen und Rcksetzen von Break */
#define TIOCCBRK (('T'<< 8) | 20);
#define TIOCSBRK (('T'<< 8) | 21);
Fcntl( handle, dummy, TIOCSBRK); /* Break aktivieren */
Fcntl( handle, dummy, TIOCCBRK); /* Break lschen */

Besonders Funktionen zum Einstellen der Schnittstelle, zur berwachung von 
DCD und RING, sowie zum Lschen der Sende- und Empfangspuffer fehlen noch. 
Ich warte auf Vorschlge, aber mit Angabe der subfunction-Nummer und Syntax. 
Ein nichtzerstrendes Lesen aus dem Empfangspuffer und eine Steuerung des 
Handshakes (vorausschauende Inaktivierung) fallen mir auch noch ein.



Harun Scheutzow, 16.05.1993
letzte nderung: 01.06.1993

