Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File15.13.2.3 Inquiery-Protokoll TOS Im Prinzip läuft das ganze Inquiery-Protokoll in 2 Stufen ab. Zuerst werden die Daten der verfügbaren Datenbanken ermittelt, und anschließend (zeitlich voneinander völlig unabhängig) werden die einzelnen Felder einer ausgewählten Datenbank erfragt. Also Part 1 (am Beispiel von TA und TW): TA | TW --------------------------------+------------------------------------ ACC_GETDSI <---------------------------------------- ACC_DSINFO ----------------------------------------> ACC_ACK <---------------------------------------- { ACC_FILEINFO ----------------------------------------> ACC_ACK <---------------------------------------- } /* <n> mal, wobei <n> bei ACC_DSINFO übertragen wurde */ Erklärung der einzelnen Protokollelemente: ACC_GETDSI Hiermit wird das Inquiery-Protokoll initiiert. Diese Message enthält einen Pointer auf eine Variable des Typs Xacc_Dsi_Request, in dem codiert wird, welche Felder welchen Typs gewünscht sind. msg[0] = ACC_GETDSI (0x510) msg[1] = application id msg[4] und msg[5] = Pointer auf die gewünschten Feld-Typen (siehe XACC.H) ACC_DSINFO Auf ein ACC_GETDSI antwortet die angefragte Applikation mit dieser Message. Hierbei wird ein Pointer auf eine Variable des Typs Xacc_Dsinfo, wenn die Anfrage beantwortet werden kann, oder ein NULL-Pointer, wenn die Anfrage nicht beantwortet werden kann, der anfragenden Applikation übergeben. msg[0] = ACC_DSINFO (0x511) msg[4] und msg[5] = Pointer auf Xacc_Dsinfo Struktur (siehe XACC.H) oder NULL Die anfragende Applikation beantwortet alle Replys seinerseits mit einer ACC_ACK= Message: ACC_ACK: msg[0] = ACC_ACK msg[3] = 1 wenn alles OK ist = 0 wenn ein Fehler aufgetreten ist (Abbruch des Protokolls) ACC_FILEINFO Wenn die ACC_DSINFO Message von der anfragenden Applikation bestätigt wurde, so wird für jede verfügbare Datei eine ACC_FILEINFO-Message mit einem Pointer auf eine Variable des Typs Xacc_File_Info, oder ein NULL-Pointer bei einem Fehler, an die anfragende Applikation gesendet. Jede dieser Messages muß, wie oben erwähnt, mit einer ACC_ACK von der anfragenden Applikation bestätigt werden. msg[0] = ACC_FILEINFO (0x512) msg[4] und msg[5] = Pointer auf Xacc_File_Info Struktur (siehe XACC.H) oder NULL Wenn dieser erste Teil des Inquiery-Protokolls erfolgreich beendet wurde, dann kann die anfragende Applikation dem Anwender die Liste der verfügbaren Datenbanken und deren Information 'auf die Nase knallen' und ihn eine Auswahl treffen lassen. Tut der Anwender dies, so läuft der 2. Part des Inquiery-Protokolls los (wieder am Beispiel von TA und TW): TA | TW --------------------------------+------------------------------------ ACC_GETFIELDS <---------------------------------------- { ACC_FIELDINFO ----------------------------------------> ACC_ACK <---------------------------------------- } /* <n> mal, wobei <n> bei ACC_FILEINFO übertragen wurde */ Erklärung der einzelnen Protokollelemente: ACC_GETFIELDS Hiermit wird von der anfragenden Applikation eine Datenbank ausgewählt (die entsprechende Datenbank-ID hat sie ja bei der ACC_FILEINFO Message in der Struktur Xacc_File_Info empfangen) und gibt der angefragten Applikation bekannt, daß nun die einzelnen Feldinformationen übertragen werden sollen. msg[0] = ACC_GETFIELDS (0x513) msg[1] = application id msg[3] = ID der gewünschte Datenbank ACC_FIELDINFO Wenn die ACC_GETFIELDS Message von der anfragenden Applikation bestätigt wurde, so wird für jedes Feld eine ACC_FIELDINFO Message mit einem Pointer auf eine Variable des Typs Xacc_Field_Info, oder ein NULL-Pointer bei einem Fehler, an die anfragende Applikation gesendet. Jede dieser Messages muß, wie oben erwähnt, mit einer ACC_ACK von der anfragenden Applikation bestätigt werden. msg[0] = ACC_FIELDINFO (0x514) msg[4] und msg[5] = Pointer auf Xacc_Field_Info Struktur (siehe XACC.H) oder NULL In That's / no| Address wurden im Moment die Feldtypen FT_CHAR, FT_DATE und FT_TIME implementiert.