home *** CD-ROM | disk | FTP | other *** search
- ========================== metaxpr.library 4.0 ============================
- ===========================================================================
- Eine Bibliothek, die Datentransfer über xpr#?.library-Implementierungen
- erleichtert. © Copyright 1991-92 by Olaf Barthel, alle Rechte vorbehalten.
- Es wird keinerlei Gewährleistungspflicht für die vollständige
- Funktionsfähigkeit der in diesem Dokument beschriebenen Software
- übernommen. Jegliche Nutzung geschieht auf eigene Gefahr.
-
- Anmerkung (M.Prüß):
- GateXpr.Library ist eine veränderte Version (siehe History), entspricht
- aber in allen Punkten bis auf die Filegrößenermittlung dem Original.
-
- =============================== Motivation ================================
- ===========================================================================
- Fast alle Programmierer, die sich mit der Erstellung von Tele-
- kommunikationsoftware beschäftigen, stolpern irgendwann einmal über die
- xpr#?.libraries, die auf allgemeine Art und Weise Protokollle für Up- und
- Download implementieren.
- An dieser Stelle verläßt die meisten Programmierer der Mut. Wer hat
- schon Lust, eine über 100 KBytes große Dokumentation (in Englisch! wer
- spricht schon Englisch!) durchzuarbeiten, um hinterher doch nur einen
- Absturz zu Gesicht zu bekommen.
- Nun gibt es aber dennoch Programmierer, die es geschafft haben, eine
- Implementierung der entsprechenden Transferroutinen zu schreiben. Das
- Resultat sind Programme, die mit einem Satz Parameter von CLI oder Shell
- aufgerufen werden können.
- Hier liegt der Hund begraben, denn soweit die Implementierung stabil
- ist, so ergeben sich beim Aufruf Probleme: Ist der Transfer geglückt?
- Wurde das Programm eventuell gar nicht geladen? Wie sehen die
- Einstellungen des serial.device aus?
- Hinzu kommt meist noch, daß ein Programm, das ein solches
- Transferprogramm aufrufen will, unbedingt von CLI oder Shell aufgerufen
- werden muß.
-
- Vor diesem Hintergrund habe ich mich entschlossen, eine Bibliothek zu
- schreiben, die externe Programmaufrufe für die Durchführung eines
- Up-/Downloads überflüssig macht. Weiterhin hat das aufrufende Programm
- fast völlige Kontrolle über die Ansteuerung der seriellen Schnittstelle und
- die Möglichkeiten des Up-/Downloads.
-
-
- ==================== Bestandteile des MetaXPR-Paketes =====================
- ===========================================================================
- Die folgenden Dateien, bzw. Verzeichnisse samt Inhalt gehören zum
- MetaXPR-Paket:
-
- MetaXPR.dok..................... Die Dokumentation der Library
-
- metaxpr.library................. Die Library selbst (auf allen 680x0
- Prozessoren lauffähig)
- metaxpr.library.020............. Die Library selbst (benötigt mindestens
- einen 68020 Prozessor). Um sie zu
- installieren, bitte umbenennen in
- "metaxpr.library"
- metaxpr_lib.fd.................. Funktionsdefinitionsdatei der Library
-
- MetaXPR.h....................... Header-Datei für `C' Programmierer
-
- Receive,Receive.c............... Beispielprogramm für das Empfangen von
- Dateien, in `C' geschrieben
-
- Send,Send.c..................... Beispielprogramm für das Verschicken
- von Dateien, in `C' geschrieben
-
- SendFiles,SendFiles.c........... Beispielprogramm für das Verschicken
- von mehreren Dateien,in `C' geschrieben
-
- LinkLibs/amigados_metaxpr.lib... Linker-Library im AmigaDOS-Objektformat
- LinkLibs/manx36_metaxpr.lib..... Linker-Library für Aztec `C' 3.6
- LinkLibs/manx50_metaxpr.lib..... Linker-Library für Aztec `C' 5.0
- LinkLibs/sasc_metaxpr.lib....... Linker-Library für Lattice/SAS `C'
-
- Glue,SAS_Glue................... Quellcode zu den Linker-Libraries
-
- ============================= Funktionsweise ==============================
- ===========================================================================
- Die Bibliothek metaxpr.library ist eine gewöhnliche Amiga-Systembibliothek,
- die in das LIBS:-Verzeichnis kopiert werden sollte. Sie benimmt sich wie
- jede andere Bibliothek (intuition.library, graphics.library, etc.). Wer
- sich mit diesen Bibliotheken abgerackert hat, der wird auch diese nutzen
- können.
-
- Nach dem Öffnen der Bibliothek stehen dem Programmierer sieben
- Funktionen zur Verfügung:
-
- TransferSetup......... Initialisiert den seriellen Treiber und öffnet
- die benötigte xpr.library. Diese Routine muß
- aufgerufen werden, bevor eine der folgenden
- Steuerroutinen aufgerufen wird.
-
- TransferSetupShared... Eine in Version 2.0 der Bibliothek eingeführte
- Funktion, die analog zu TransferSetup() arbeitet,
- es aber erlaubt, vom aufrufenden Programm bereits
- für den Datentransfer geöffnete Kanäle zu
- verwenden, anstatt diese von der Bibliothek
- öffnen zu lassen.
-
- InstallTransferNote... Diese Funktion wurde in Version 3.0 der
- Bibliothek eingeführt und erlaubt es, den
- Transferroutinen eine Struktur zu übergeben, in
- der Transferparameter (wie z.B. verbleibende
- Übertragungsdauer in Sekunden und noch zu
- übertragende Bytes) vermerkt werden und, wenn ein
- Struktureintrag auf 0 gesetzt wird, den
- programmtechnischen Abbruch des Transfers
- herbeiführt.
-
- ReceiveFile........... Empfängt eine Datei unter Ausnutzung der durch
- TransferSetup/TransferSetupShared eingestellten
- Parameter.
-
- SendFile.............. Verschickt eine Datei unter Ausnutzung der durch
- TransferSetup/TransferSetupShared eingestellten
- Parameter.
-
- SendMultipleFiles..... Diese Funktion wurde in Version 3.1 der
- Bibliothek eingeführt und dient zum Verschicken
- mehrerer Dateien am Stück. Es werden wie bei der
- Funktion `SendFile' die mit
- TransferSetup/TransferSetupShared eingestellten
- Parameter benutzt.
-
- GetOptions............ Liest die für die aktuell geöffnete xpr.library
- eingestellten Parameter aus.
-
- SetOptions............ Setzt die internen Parameter der aktuell
- geöffneten xpr.library (siehe dazugehöriger
- Dokumentation).
-
- Im folgenden wird auf die einzelnen Routinen und deren Benutzung
- eingegangen:
-
- *
-
- Fehler = TransferSetup(Treiber, Unit, Bibliothek, Baudrate, Datenbits,
- D0 A0 D0 A1 D1 D2
-
- Stopbits, Parität, Handshaking)
- D3 D4 D5
-
- Treiber - Name des zu benutzenden seriellen Treibers
- (serial.device, modem0.device, etc). Wird als eine durch
- ein Nullbyte abgeschlossene Zeichenkette übergeben.
-
- Unit - Die Treibereinheit, die angesprochen werden soll;
- entspricht üblicherweise der Nummer des seriellen Ports,
- sollte man über keine Steckkarte mit mehreren seriellen
- Anschlüssen verfügen, so ist hier eine 0 einzutragen.
-
- Bibliothek - Der Name der xpr.library, die für den Transfer benutzt
- werden soll (xprzmodem.library, xprxmodem.library, etc).
- Der Name wird als durch ein Nullbyte abgeschlossene
- Zeichenkette übergeben.
-
- Baurate - Übertragungsgeschwindigkeit in Bits pro Sekunde.
- Gebräuchliche Baudraten bewegen sich zwischen 300 und
- 31250 Baud.
-
- Datenbits - Die Anzahl Datenbits, die bei der Übertragung verwendet
- werden sollen. Üblicherweise 8, manchmal auch 7.
-
- Stopbits - Die Anzahl Stopbits, die bei der Übertragung verwendet
- werden sollen. Üblicherweise 1, sonst auch 0 oder 2.
-
- Parität - Die bei der Übertragung zu verwendende Parität, gültige
- Werte sind:
-
- 0 - Keine Parität.
- 1 - Gerade Parität.
- 2 - Ungerade Partität.
- 3 - Paritätsbit ist immer gesetzt.
- 4 - Paritätsbit ist immer gelöscht.
-
- Handshaking - Gibt an, ob Hardware-Handshaking eingeschaltet werden
- soll (0 = aus, 1 = ein).
-
- Es muß darauf hingewiesen werden, daß diese Routine den seriellen
- Treiber exklusiv für sich öffnet. Hat das aufrufende Programm den Treiber
- bereits für sich belegt, wird der Aufruf dieser Funktion fehlschlagen!
- Wenn man diesen Effekt vermeiden möchte, sollte man statt dieser Routine
- besser TransferSetupShared() verwenden.
-
- Der von dieser Routine geöffnete serielle Treiber wird erst nach dem
- Schließen der metaxpr.library freigegeben!
-
- Diese Routine liefert einen Wert zurück, der gleich 0 ist, wenn die
- Initialisierungen geglückt sind und ungleich 0, wenn die Initialisierung
- fehlgeschlagen ist. Anhand des zurückgelieferten Wertes läßt sich
- entscheiden, welcher Fehler aufgetreten ist:
-
- 1 - Einer oder mehrere an die Routine übergebenen Aufrufparameter waren
- nicht zulässig.
-
- 2 - Es konnte nicht genügend Speicher angefordert werden.
-
- 3 - Beim Anlegen von MsgPorts ist ein Fehler aufgetreten (alle
- Signalbits sind offenbar schon belegt).
-
- 4 - Beim Öffnen des seriellen Treibers ist ein Fehler aufgetreten.
-
- 5 - Die Parameter des seriellen Treibers ließen sich nicht setzen.
-
- 6 - Der Zeitgeber (timer.device) ließ sich nicht öffnen.
-
- 7 - Die zu verwendende xpr.library ließ sich nicht öffnen.
-
- 8 - Die Initialisierung der xpr.library schlug fehl.
-
- 9 - Wurden die Übertragungsparameter über TransferSetup() gesetzt, so
- können sie nur über die selbe Routine verändert werden. Gleiches
- gilt für die Routine TransferSetupShared().
-
- Diese Routine selbst läßt sich beliebig oft mit neuen Parametern
- aufrufen. Alle hier angeforderten Resourcen werden beim Schließen der
- Bibliothek wieder freigegeben.
-
- *
-
- Fehler = TransferSetupShared(ReadRequest, WriteRequest, Bibliothek)
- D0 A0 A1 A2
-
- ReadRequest - Die vom aufrufenden Programm zum Lesen von Daten der
- seriellen Schnittstelle verwendete Struktur (struct
- IOExtSer).
-
- WriteRequest - Die vom aufrufenden Programm zum Schicken von Daten zur
- seriellen Schnittstelle verwendete Struktur (struct
- IOExtSer).
-
- Bibliothek - Der Name der xpr.library, die für den Transfer benutzt
- werden soll (xprzmodem.library, xprxmodem.library, etc).
- Der Name wird als durch ein Nullbyte abgeschlossene
- Zeichenkette übergeben.
-
- Ein Telekommunikationsprogramm sollte üblicherweise mindestens zwei
- Kanäle offen haben, um auf die seriellen Schnittstelle zugreifen zu können.
- Möchte man diese Kanäle nicht schließen (einige Modems legen z.B. auf wenn
- die vom serial.device aktivierte DTR-Leitung plötzlich abfällt), so bietet
- es sich an, sie dieser Routine zu übergeben. Vorsicht: die Routine
- überprüft, ob ReadRequest und WriteRequest verschieden sind und liefert bei
- Übereinstimmung Fehlercode 1 zurück.
- TransferSetupShared() verhält sich ansonsten genauso wie TransferSetup()
- und liefert dieselben Fehlercodes zurück.
- Baudrate oder Parameter von ReadRequest und WriteRequest werden nicht
- modifiziert. Ich empfehle sowohl vor dem Aufruf dieser Routine ein
- CMD_CLEAR an den seriellen Treiber zu schicken, als auch nach dem Schließen
- der metaxpr.library. Es sollten keine Annahmen über die Einträge
- io_Command, io_Data, io_Actual oder io_Length von ReadRequest und
- WriteRequest gemacht werden, wenn die Routinen SendFile() und ReceiveFile()
- zurückkehren!
-
- *
-
- Erfolg = ReceiveFile(Name, ÖffneFenster, Bildschirm)
- D0 A0 D0 A1
-
-
- Name - Der Name der zu empfangenden Datei. Der Name wird als
- eine durch ein Nullbyte abgeschlossene Zeichenkette
- übergeben. In diese Zeichenkette wird auch der Name der
- zuletzt übertragenen Datei eingetragen, die Zeichenkette
- sollte mindestens 256 Zeichen lang sein.
- Nach Abschluß der Übertragung befindet sich in der
- übergebenen Zeichenkette der komplette Name der
- empfangenen Datei (der sich besonders bei Kermit und
- ZModem vom übergebenen Dateinamen unterscheiden wird).
- Die dieser Routine übergebene Zeichenkette sollte
- mindestens 256 Zeichen lang sein. Wurden mehrere Dateien
- empfangen, so enthält diese Zeichenkette nur den Namen
- der zuletzt übertragenen Datei!
-
- ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
- werden soll, in dem Informationen über den Fortgang der
- Übertragung angezeigt werden.
-
- 0 = kein Fenster soll geöffnet werden.
- 1 = ein Fenster soll geöffnet werden.
- 2 = ein Fenster soll geöffnet, aber nicht aktiviert
- werden.
-
- Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
- `ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
- Fenster - wenn überhaupt - geöffnet werden soll. Hier
- übergibt man die Adresse der Screen-Struktur des
- jeweiligen Bildschirmes, oder den Wert NULL, um das
- Fenster auf dem Workbench-Bildschirm zu öffnen.
-
- Diese Routine liefert einen Wert zurück, der über den Erfolg des
- Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
- fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
- die Übertragung geglückt.
-
- *
-
- Erfolg = SendFile(Name, ÖffneFenster, Bildschirm)
- D0 A0 D0 A1
-
-
- Name - Der Name der zu verschickenden Datei. Der Name wird als
- durch ein Nullbyte abgeschlossene Zeichenkette übergeben.
- In diese Zeichenkette wird auch der Name der zuletzt
- übertragenen Datei eingetragen, die Zeichenkette sollte
- mindestens 256 Zeichen lang sein.
-
- ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
- werden soll, in dem Informationen über den Fortgang der
- Übertragung angezeigt werden.
-
- 0 = kein Fenster soll geöffnet werden.
- 1 = ein Fenster soll geöffnet werden.
- 2 = ein Fenster soll geöffnet, aber nicht aktiviert
- werden.
-
- Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
- `ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
- Fenster - wenn überhaupt - geöffnet werden soll. Hier
- übergibt man die Adresse der Screen-Struktur des
- jeweiligen Bildschirmes, oder den Wert NULL, um das
- Fenster auf dem Workbench-Bildschirm zu öffnen.
-
- Diese Routine liefert einen Wert zurück, der über den Erfolg des
- Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
- fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
- die Übertragung geglückt.
-
- *
-
- Erfolg = SendMultipleFiles(Namen, ÖffneFenster, Bildschirm)
- D0 A0 D0 A1
-
-
- Name - Die Adresse einer Reihe von Adresswerten von mit einem
- Nullbyte abgeschlossenen Zeichenketten. In `C'
- entspräche dies z.B. der Konstruktion
- `char *Namen[123]', in anderen Sprachen kann man sich die
- verlangte Datenstruktur als ein Feld von Langwörtern
- vorstellen, von denen jedes die Adresse einer
- Zeichenkette enthält:
-
- Feld[ 0 ] -> "Dateiname 0"
- Feld[ 1 ] -> "Dateiname 1"
- Feld[ 2 ] -> "Dateiname 2"
-
- :
- :
-
- Feld[n-1] -> "Dateiname n-1"
- Feld[ n ] -> 0
-
- Wie man an dieser Tabelle schon sieht, muß der Adresse
- des letzten Dateinamens eine Null folgen, sodaß die
- Library weiß, welche die letzte zu übertragende Datei
- war.
- Der Inhalt dieses Feldes wird von der
- Übertragungsroutine nicht verändert.
-
- ÖffneFenster - Bestimmt, ob während der Übertragung ein Fenster geöffnet
- werden soll, in dem Informationen über den Fortgang der
- Übertragung angezeigt werden.
-
- 0 = kein Fenster soll geöffnet werden.
- 1 = ein Fenster soll geöffnet werden.
- 2 = ein Fenster soll geöffnet, aber nicht aktiviert
- werden.
-
- Bildschirm - Dieser Parameter operiert zusammen mit dem Parameter für
- `ÖffneFenster'. Er bestimmt, auf welchem Bildschirm das
- Fenster - wenn überhaupt - geöffnet werden soll. Hier
- übergibt man die Adresse der Screen-Struktur des
- jeweiligen Bildschirmes, oder den Wert NULL, um das
- Fenster auf dem Workbench-Bildschirm zu öffnen.
-
- Diese Routine liefert einen Wert zurück, der über den Erfolg des
- Transfers informiert. Ist dieser Wert gleich 0, so ist die Übertragung
- fehlgeschlagen oder abgebrochen worden. Ist der Wert ungleich 0, so ist
- die Übertragung geglückt.
- Man sollte nicht erwarten, daß sich diese Routine auch um
- Pattern-Matching und ähnlichen Luxus kümmert, es wird immer versucht die
- jeweiligen Dateien unter den gegebenen Namen zu öffnen. Wird
- Pattern-Matching benötigt, so müssen die zu übertragenden Dateien ermittelt
- werden, bevor die Übertragung stattfindet.
- Ob diese Funktion ihren Zweck erfüllen kann, hängt stark von der
- verwendeten xpr.library ab; unterstützt diese keinen Batch-Transfer, so
- wird zumindest versucht, die erste zu übertragende Datei zu verschicken.
-
- *
-
- Erfolg = GetOptions(Puffer)
- D0 A0
-
- Puffer - Hier werden die aktuell eingestellten Optionen der
- geöffneten xpr.library abgelegt. Es wird eine
- Zeichenkette erwartet, die mindestens 256 Zeichen lang
- ist.
-
- Diese Routine liefert einen Wert zurück, der über den Erfolg der Aktion
- informiert. Ist dieser gleich 0, so konnten die Optionen nicht ausgelesen
- werden. Ist er ungleich 0, so enthält der übergebene Puffer die mit einem
- Nullbyte abgeschlossenen aktuellen Optionen.
-
- *
-
- Erfolg = SetOptions(Optionen)
- D0 A0
-
- Optionen - Die zu setzenden Optionen für die aktuelle xpr.library.
- Wird als mit einem Nullbyte beendete Zeichenkette
- erwartet.
-
- Diese Routine liefert einen Wert zurück, der über den Erfolg der Aktion
- informiert. Ist dieser gleich 0, so konnten die Optionen nicht gesetzt
- werden. Ist er ungleich 0, so wurden die Optionen korrekt gesetzt.
-
- *
-
- Fehler = InstallTransferNote(Note)
- D0 A0
-
- Note - Die Adresse einer `C'-Struktur, die man sich auch als
- eine Aufreihung von dreizehn Langwörtern vorstellen kann,
- sie sieht wie folgt aus:
-
- struct TransferNote
- {
- LONG tn_Continue; /* Ist dieser Wert gleich 0,
- * so wird der Transfer-
- * vorgang sofort ab-
- * gebrochen.
- */
-
- LONG tn_CarrierDetect;/* Der Inhalt dieser Variable
- * gibt an, ob das Modem ein
- * Trägersignal (Carrier)
- * erkennt. Ist dieses Signal
- * nicht mehr vorhanden, ist
- * die Verbindung unterbrochen
- * worden.
- */
-
- LONG tn_Seconds; /* Anzahl der Sekunden, die
- * der Transfervorgang noch
- * dauern wird. Vorsicht!
- * dieser Wert kann von
- * Anfang an gleich 0 sein
- * und sich während des
- * gesamten Transfers
- * nicht verändern.
- */
-
- LONG tn_Bytes; /* Anzahl der noch zu
- * übertragenden Bytes.
- * Auch dieser Wert kann
- * von Anfang an gleich 0
- * sein und sich während
- * des gesamten Transfers
- * nicht verändern.
- */
-
- APTR tn_UserData; /* Ein Eintrag, der vom
- * Benutzer für seine
- * Zwecke verwendet
- * werden kann.
- */
-
- char *tn_CurrentFile; /* Adresse einer Zeichenkette,
- * die den Namen der gerade
- * übertragenen Datei enthält.
- * Vorsicht: dieser Wert kann
- * auch NULL (0) sein, wenn
- * gerade keine Datei übertragen
- * wird.
- */
-
- LONG tn_FilesToGo; /* Soweit bekannt, enthält diese
- * Variable die Anzahl der noch
- * zu übertragenden Dateien
- * (0 = die letzte Datei wird
- * gerade verschickt).
- */
-
- LONG tn_ProtocolName; /* Name einer Datei, in der die
- * Namen aller empfangenen und
- * verschickten Dateien eingetragen
- * werden. Steht hier eine Null,
- * so wird keine Protokolldatei
- * angelegt.
- */
-
- LONG tn_Extension; /* Anzahl der dieser Strukturform
- * noch folgenden Langwörter (für
- * künftige Erweiterungen reserviert).
- */
-
- LONG tn_WatchCarrier; /* Sofern tn_Extension einen Wert >= 1
- * enthält, wird der Library über den
- * Inhalt dieses Langworts mitgeteilt,
- * ob bei Verlust des Trägersignals
- * der Transfer abgebrochen werden
- * soll. Falls Ja, ist hier eine 1,
- * falls Nein, eine 0 einzutragen.
- */
-
- LONG tn_Aborted; /* Sofern tn_Extension einen Wert >= 2
- * enthält, wird der Library über den
- * Inhalt dieses Langworts mitgeteilt,
- * ob der Transfer durch den Anwender
- * abgebrochen wurde.
- */
-
- LONG tn_Error; /* Sofern tn_Extension einen Wert >= 3
- * enthält, wird der Library über den
- * Inhalt dieses Langworts mitgeteilt,
- * ob der Transfer aufgrund eines
- * Fehlers abgebrochen wurde. Ist der
- * hier eingetragene Wert = 0, so ist
- * kein Fehler aufgetreten, ist er 1,
- * liegt ein AmigaDOS-Fehler vor, bei
- * 2 ist ein Schnittstellenfehler
- * aufgetreten.
- */
-
- LONG tn_ErrorCode; /* Sofern tn_Extension einen Wert >= 4
- * enthält, wird der Library über den
- * Inhalt dieses Langworts mitgeteilt,
- * aufgrund welchen Fehlers der Transfer
- * abgebrochen wurde. Dies ist entweder
- * ein AmigaDOS-Fehlercode, ein Fehlercode
- * der Schnittstelle oder der Wert 1000,
- * der angibt, daß das Carrier-Signal
- * verlorengegangen ist.
- */
- };
-
- Diese Routine liefert einen Wert ungleich 0 zurück, wenn beim Eintragen
- ein Fehler aufgetreten ist (die jeweiligen Fehlerwerte sind unter
- `TransferSetup' aufgeführt), ein Wert gleich 0 wird zurückgeliefert, wenn
- kein Fehler aufgetreten ist.
- Typischerweise wird diese Funktion von einem separat laufenden Process
- benutzt, um den im Transfer befindlichen Process überwachen und notfalls
- abbrechen zu können. Die übergebene `TransferNote'-Struktur muß während
- des gesamten Transfervorganges erhalten bleiben, sonst können
- Systemabstürze die Folge sein. Der Bezug auf die Struktur bleibt bis zum
- Schließen der Library oder bis zum nächsten Aufruf der Funktionen
- TransferSetupShared() und TransferSetup() erhalten.
-
- Zum Format der Protokolldatei: wird eine Datei gelesen oder
- beschrieben, wenn sie verschickt oder empfangen wird, so wird ihr Name
- zusammen mit dem jeweiligen Zugriffsmodus (`R' für Empfangen, `S' für
- Verschicken) in die Datei geschrieben, deren Name unter tn_ProtocolName
- eingetragen ist. Typischerweise sieht der Inhalt dieser Datei am Ende
- einer Übertragung folgendermaßen aus:
-
- R Work:Download/EmpfangeDatei1
- R Work:Download/EmpfangeDatei2
- :
- :
- etc.
-
- An die unter tn_ProtocolName angegebene Datei werden die Namen der
- empfangenen/verschickten Dateien _angehängt_, sie wird _nicht_
- überschrieben.
- Wird eine Datei nicht korrekt verschickt/empfangen, so wird statt der
- Großbuchstaben "R" / "S" ein Kleinbuchstabe "r" / "s" vorangestellt.
- Zum Schluß wird an die Liste der Dateinamen eine Zeile mit statistischen
- Daten angehängt, die folgenden Aufbau hat:
-
- + Files <Anzahl> Bytes <Anzahl> CPS <Anzahl>
-
- Es wird die Anzahl der empfangenen Dateien, die Anzahl der empfang-
- enen Dateien und die durchschnittliche Übertragungsgeschwindigkeit in
- Zeichen pro Sekunde angegeben.
-
- ================================ Anwendung ================================
- ===========================================================================
- Für `C' habe ich eine Header-Datei bereitgestellt, die Prototypen und
- Übergabewerte enthält, Linker-Bibliotheken sind ebenfalls vorhanden. Für
- alle anderen Sprachen muß man sich mit der .fd-Datei behelfen.
-
- Die übliche Reihenfolge der Aufrufe sähe z.B. wie folgt aus:
-
- MetaXprBase = OpenLibrary("metaxpr.library",0);
-
- :
- :
-
- Fehler = TransferSetup("serial.device",0,"xprzmodem.library",
- 2400,8,1,0,0);
-
- :
- :
-
- Erfolg = ReceiveFile("Datei",0,0);
-
- :
- :
-
- Erfolg = SendFile("Datei",1,Screen);
-
- :
- :
-
- CloseLibrary(MetaXprBase);
-
- Wem diese paar Zeilen nicht helfen, der kann mir seine Fragen entweder
- brieflich, oder auf elektronischem Wege über Z-Net oder Usenet stellen.
-
-
- ====================== Anschrift & Bitte des Autors =======================
- ===========================================================================
- Die Benutzung der metaxpr.library ist kostenfrei, ich verlange keine
- Spenden, noch erwarte ich sie. Die einzige Auflage, die ich mache, ist
- die, daß jeder, der neue Supportroutinen für die Bibliothek schreibt, diese
- dem MetaXPR-Paket hinzufügt, oder sie mir zuschickt. Auf diese Weise soll
- Jedermann Zugang zur Nutzung der Bibliothek erhalten.
-
- Meine Anschrift:
-
- Olaf Barthel
- Brabeckstraße 35
- D-3000 Hannover 71
-
- Z-Netz: O.BARTHEL@A-LINK-H
- Internet: olsen@sourcery.mxm.sub.org
- o.barthel@a-link-h.comlink.de
-
-
- ========================= Entwicklungsgeschichte ==========================
- ===========================================================================
- V4.2 Da es inzwischen Versionen bis hoch zu 6.5 gibt und ich eine
- Kollision vermeiden möchte wurde die Library umgetauft. Diese
- Version trägt den Namen GateXpr.Library, ist aber ansonsten
- identisch mit MetaXpr.Library 4.1a
- V4.1a Einige kleinere Optimierungen in der Anpassung.
- V4.1 Anpassungen für Gateway-BBS by Michaela Prüß. Neue Berechnung der
- Filegröße, da das Original und Aztec-C nicht miteinander harmo-
- nierten. Danke an Olaf Barthel für die Quellen!
-
- V4.0 Erweiterung der Überwachungsfunktionen, verschiedene Fehler
- erschlagen.
-
- V3.6- Interne Versionen.
- V3.9
-
- V3.5 Die Protokollierung der empfangenen und verschickten Dateien ist um
- statistische Daten erweitert worden. Ebenfalls ist es jetzt
- möglich, den Transfer bei Verlust des Carrier-Signales abbrechen zu
- lassen.
-
- V3.4 Die Library unterstützt andere Treiber als das Original
- serial.device jetzt besser, es ist jetzt möglich, die
- Transferaktionen in einer Datei mitprotokollieren zu lassen, das
- Transferfenster kann jetzt auch inaktiv geöffnet werden.
-
- V3.3 Einige interne Änderungen sind notwendig geworden; die Library
- meldet jetzt korrekt, wenn ein Transfer abgebrochen wurde und es
- erscheint kein AmigaDOS-Requester mehr, wenn Diskettenprobleme
- auftreten (dieses Feature ist zur Unterstützung der automatischen
- Ausführung von Netcalls gedacht).
-
- V3.1 Die Library wurde wieder einmal um eine neue Funktion erweitert:
- `SendMultipleFiles' ist hinzugekommen. Auch die
- TransferNote-Struktur ist um einige Felder erweitert worden, auch
- die Carrier-Erkennung sollte jetzt funktionieren.
-
- V3.0 Die Library wurde um die Funktion `InstallTransferNote()'
- erweitert.
-
- V2.0 Es gibt die neue Funktion `TransferSetupShared()', die Library
- sollte intern jetzt etwas stabiler arbeiten, ein paar Fehler sind
- beseitigt.
-
- V1.2 Das Fenster verträgt sich auch mit anderen Systemfonts als topaz 8,
- werden andere Tasten als ^C oder Escape gedrückt, hängt der
- Transfervorgang nicht mehr, die Bibliothek läßt sich auch unter
- Kickstart 2.0 öffnen. Der Send und Receive übergebene Dateiname
- enthält nach der Übertragung den Namen der zuletzt übertragenen
- Datei.
-
- V1.1 Erste öffentliche Verbreitung.
-