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-File11.14.4 Der Shutdown aus Sicht des Initiators TOS Shutdown und Auflösungswechsel werden in MagiC von dem Programm SHUTDOWN übernommen, das mit den folgenden Parametern aufgerufen wird: SHUTDOWN.PRG dev txt Dabei ist dev = -1, wenn ein Shutdown ohne Auflösungswechsel durchgeführt werden soll, ansonsten die Gerätenummer des VDI- Bildschirmtreibers. txt ist die Texthöhe für das AES; diese sollte i.a. Null sein. Ein Shutdown wird per ret = shel_write(4, TRUE, 0, NULL, NULL) gestartet. Dabei signalisiert ein Rückgabewert von 0, daß ein Shutdown nicht möglich ist, weil z.B. bereits ein Shutdown läuft. Ein Auflösungswechsel wird mit ret = shel_write(5, dev, 0, NULL, NULL) durchgeführt. Dabei ist dev der VDI-Gerätetreiber. Alternativ kann mit shel_write(5, xdv, 1, NULL, NULL) in xdv ein Falcon-Auflösungsmodus angegeben werden. Diese Aufrufe sind alle MultiTOS-konform. Zusätzlich existiert ab MagiC 3 noch folgender Aufruf: ret = shel_write(5, dev, 100+txt, NULL, NULL). Hiermit kann man die Texthöhe für das AES festlegen. Eine Falcon-Auflösung kann man bei diesem Modus nicht übergeben, dev ist also die Gerätenummer des VDI-Bildschirmtreibers. Die Gerätenummer hängt vom verwendeten System und VDI ab. Bei einem nackten ST oder TT (ohne Grafikkarte) gilt die folgende Zuordung: 1 Default-Auflösung 2 ST niedrig (320*200*16) 3 ST mittel (640*200*4) 4 ST hoch (640*400*2) 6 TT mittel (640*480*16) 8 TT hoch (1280*960*2) 9 TT niedrig (320*480*256) Bei Einsatz einer Grafikkarte oder auf einem Macintosh stehen die Gerätenummern wie üblich in der ASSIGN.SYS-Datei im Wurzelverzeichnis des Bootlaufwerks. Nach erfolgreichem shel_write-Aufruf befindet sich das System im Shutdown-Modus, und es können keine Programme mehr gestartet werden. Nach einem erfolgreichen Abschluß des Shutdown oder Auflösungswechsels erhält der Initiator folgende Nachricht: msg[0] = SHUT_COMPLETED msg[3] = 1 - Shutdown erfolgreich bzw. beim Auflösungswechsel msg[0] = RESCH_COMPLETED msg[3] = 1 - Auflösungswechsel erfolgreich Erfolgreich heißt für das System, daß alle Programme, die explizit AP_TERM verstehen, sich beendet haben. Soll der Shutdown trotzdem abgebrochen werden, so kann dies per ret = shel_write(4, FALSE, 0, NULL, NULL) erfolgen. Andernfalls wird der Auflösungswechsel endgültig durchgeführt, wenn sich der Initiator beendet hat. Der Shutdown dagegen wird abgebrochen, wenn der Initiator terminiert. Hat ein Programm per AP_TFAIL den Shutdown verweigert, so erhält der Initiator die folgende Nachricht. msg[0] = SHUT_COMPLETED msg[3] = 0 - Shutdown abgebrochen msg[4] = ap_id der Applikation, die verweigert hat msg[5] = Fehlercode dieser Applikation bzw. beim Auflösungswechsel msg[0] = RESCH_COMPLETED msg[3] = 0 - Auflösungswechsel abgebrochen msg[4] = ap_id der Applikation, die verweigert hat msg[5] = Fehlercode dieser Applikation Das System hat in diesem Fall den Shutdown bzw. Auflösungswechsel schon beendet, d.h. der Initiator kann nichts mehr tun. Hinweis: Weil es vorkommen kann, daß der Shutdown-Prozeß niemals vom System als abgeschlossen oder abgebrochen gemeldet wird (die RESCH_COMPLETED bzw. SHUT_COMPLETED-Nachricht also niemals verschickt wird), sollte der Initiator beim Warten auf die Nachricht einen Timeout vorsehen. Tritt dieser Fall ein, muß der Shutdown explizit abgebrochen werden. Per appl_search kann der Initiator testen, ob noch Programme aktiv sind, die nicht explizit AP_TERM verstehen. Querverweis: Shutdown beim Empfänger shel_write Shutdown in MultiTOS Shutdown in MagiC