home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 1 / Mecomp-CD.iso / amiga / tools / system / shutdown / shutdown.dok < prev    next >
Text File  |  1993-02-21  |  18KB  |  359 lines

  1. ============================== Shutdown 2.2 ===============================
  2. ===========================================================================
  3. Ein  Paket, das das Neustarten und Ausschalten des Rechners sicherer macht.
  4. © Copyright 1992 by Olaf Barthel, alle Rechte vorbehalten.
  5.    Es   wird   keinerlei   Gewährleistungspflicht   für   die  vollständige
  6. Funktionsfähigkeit   der   in   diesem   Dokument   beschriebenen  Software
  7. übernommen.  Jegliche Nutzung geschieht auf eigene Gefahr.
  8.  
  9. ================================ WICHTIG! =================================
  10. ===========================================================================
  11. Aufgrund   notwendiger  Veränderungen  ist  die  neue  Bibliothek  und  die
  12. beiliegende      Unterstützungssoftware      inkompatibel     mit     alten
  13. `Shutdown'-Versionen.    Vor   der   Neuinstallation   bitte   alle   alten
  14. `Shutdown'-Bestandteile aus dem System enfernen!
  15.  
  16. =============================== Motivation ================================
  17. ===========================================================================
  18. Eine  der  wohl nützlichsten Funktionen im `Finder' des Apple Macintosh ist
  19. der  Menüpunkt  `Ausschalten',  mit  dem  das Betriebssystem dazu veranlaßt
  20. wird,  alle  noch  ausstehenden  Datenpuffer  zurückzuschreiben,  Disketten
  21. auszuwerfen  und  auf  den  teureren  Macintosh  II-Modellen sogar wirklich
  22. Rechner und Monitor ausschaltet.  Auf diese Weise sinkt die Chance, daß der
  23. Benutzer   durch  Tolpatschigkeit  den  Disketten-  oder  Festplatteninhalt
  24. zerstört,   weil   der  Rechner  noc  während  Dateien  bearbeitet  wurden,
  25. ausgeschaltet  wurde  (daß  man sich trotzdem auf dem Macintosh ohne großen
  26. Aufwand  und  mit Bravour den Festplatteninhalt zertrümmern kann, steht auf
  27. einem anderen Blatt).
  28.    Das  beiliegende  Programmpaket,  bestehend  aus  einer Bibliothek, zwei
  29. Programmen und einem ARexx-Skript, ermöglicht es dem Anwender, in ähnlicher
  30. Manier  auf  eine  relativ  sichere  Weise den Rechner neu zu starten, bzw.
  31. auszuschalten.
  32.  
  33. ==================== Bestandteile des Shutdown-Paketes ====================
  34. ===========================================================================
  35.              Die folgenden Dateien gehören zum Shutdown-Paket:
  36.  
  37. Shutdown.dok...................    Die Dokumentation
  38.  
  39. shutdown.library............... Die     alle     Funktionen    beinhaltende
  40.                                 Bibliothek.
  41. shutdown_lib.fd................    Funktionsdefinitionen der Bibliothek.
  42. shutdownbase.h.................    Header-Datei für `C' Programmierer
  43.  
  44. ShutdownSetup.................. Das Programm, das die Bibliothek öffnet und
  45.                                 die notwendigen Initialisierungen vornimmt,
  46.                                 um  das Öffnen und Schließen von Dateien zu
  47.                                 überwachen.
  48. Shutdown....................... Ein  Beispielprogramm, das die Funktion der
  49.                                 Bibliothek demonstriert.
  50. Shutdown.c..................... Der  in  `C'  geschriebene  Quellcode   des
  51.                                 Programmes.
  52. Shutdown.rexx.................. Ein     ARexx-Beispielskript,    das    die
  53.                                 Ansteuerung  der  Bibliothek  von ARexx aus
  54.                                 demonstriert.
  55.  
  56. ================= Installation und Arbeitsvoraussetzungen =================
  57. ===========================================================================
  58. Das Shutdown-Paket benötigt zum korrekten Funktionieren Kickstart 2.04 oder
  59. eine Nachfolgeversion.  Läuft das Programmsystem auf einem Rechner, der die
  60. Verwendung  von  sogenannten  `Keyboard-Resethandlern' unterstützt, so wird
  61. versucht, daraus Vorteil zu ziehen.
  62.  
  63.     Um das Paket zu installieren, sind folgende Schritte durchzuführen:
  64.  
  65. 1. Die  Datei `shutdown.library' muß ins Verzeichnis `Libs:' kopiert werden
  66.    (aus der Shell heraus:  `Copy shutdown.library Libs:').
  67.  
  68. 2. Die  Datei `ShutdownSetup'  muß ins Verzeichnis `C:' kopiert werden (aus
  69.    der Shell heraus: `Copy ShutdownSetup C:').
  70.  
  71. 3. An  das  Ende  der Datei `S:User-Startup' muß der Befehl `ShutdownSetup'
  72.    gestellt   werden   (aus  der  Shell  heraus:  "Echo  >>  S:User-Startup
  73.    ShutdownSetup").
  74.  
  75.                 Hiermit ist die Installation abgeschlossen.
  76.  
  77. ============================= Funktionsweise ==============================
  78. ===========================================================================
  79. Wird das Programmsystem mit dem Aufruf `ShutdownSetup' aktiviert, so werden
  80. alle  nachfolgend  durchgeführten  Dateizugriffe  vermerkt und insbesondere
  81. darauf  geachtet,  ob  schreibend  auf Dateien zugegriffen wurde (zu diesem
  82. Zweck  wird  eine  Handvoll  Systemfunktionen umgelenkt, falls also diverse
  83. Virenerkennungsfunktionen  zu  meckern  beginnen,  sollte  man  sich  nicht
  84. wundern).
  85.    Zusätzlich  haben  Anwenderprogramme  die Möglichkeit, sich als Klienten
  86. eintragen  zu  lassen,  um  dem  Anwender  vor dem Ausschalten des Rechners
  87. mitzuteilen, daß sie noch arbeiten und der Rechner noch nicht ausgeschaltet
  88. werden sollte.
  89.  
  90.    Wird  dem  Programmsystem  mitgeteilt,  daß der Anwender den Rechner neu
  91. starten   oder   ausschalten   möchte,   so  werden  zunächst  einmal  alle
  92. Dateizugriffe  blockiert.   Danach  werden  alle als Klienten registrierten
  93. Anwenderprogramme  befragt, ob sie ihre Arbeit beendet haben.  Anschließend
  94. wird  nachgeprüft,  ob  noch  Dateien  geöffnet  sind,  auf  die schreibend
  95. zugegriffen wurde.
  96.  
  97.    Wurden  Klienten  gefunden, die ihre Arbeit noch nicht beendet haben, so
  98. wird  der Anwender auf die Namen der Programme aufmerksam gemacht, die noch
  99. aktiv  sind.  Wurden noch geöffnete Dateien ermittelt, so werden ihre Namen
  100. in einer Liste angezeigt.
  101.  
  102.    Stehen dem Neustart bzw.  Ausschalten des Rechners keinerlei Hindernisse
  103. im  Wege,  so  wird  dem  Anwender  signalisiert,  daß er den Rechner jetzt
  104. ausschalten  könnte.  Wird im Augenblick des Aufrufs noch auf eine Diskette
  105. oder Festplatte zugegriffen, so wird solange gewartet, bis die noch aktiven
  106. Laufwerke zur Ruhe gekommen sind.
  107.  
  108.    Zusätzlich  besteht über zwei Knöpfe die Möglichkeit, den Rechner neu zu
  109. starten und sofort zur Workbench zurückzukehren, als sei nichts passiert.
  110.  
  111.                                 WARNUNG!!!
  112.  
  113.    Das  Programmsystem  ist nicht 100%-ig dazu in der Lage, Schreibzugriffe
  114. auf  Festplatte  und  Diskette zu ermitteln und zu sperren.  Sollte nachdem
  115. der   Ausschalt-Bildschirm   geöffnet   wurde,   noch   Festplatten-   oder
  116. Diskettenaktivität zu beobachten sein, sollte man lieber noch etwas warten,
  117. bis  der  Rechner  vollständig  zur  Ruhe  gekommen ist!  WER DURCH BLINDES
  118. VERTRAUEN IN DIE FÄHIGKEITEN DIESES PROGRAMMPAKETES DATEN ZERSTÖRT, DER IST
  119. SELBER SCHULD -- MAN BENUTZE BITTE SEINEN GESUNDEN MENSCHENVERSTAND, DIESES
  120. PROGRAMMSYSTEM  GIBT NUR RATSCHLÄGE UND ÄUßERT VERMUTUNGEN, GIBT ABER KEINE
  121. 100%-IGE SICHERHEIT!
  122.  
  123. ============================== ShutdownSetup ==============================
  124. ===========================================================================
  125. Dieses  Programm dient zum Initialisieren und Entfernen der Dateiverfolgung
  126. und  Geräteüberwachung,  die  das  Herzstück  des `Shutdown'-Programmpakets
  127. bilden.    Zusätzlich   wird   über  das  Commodities-Toolkit  ein  Routine
  128. installiert,  die  beim  Drücken  einer  bestimmten  Tastenkombination  den
  129. Rechner  neu  startet,  gerade so, als hätte man die Tasten Control + Amiga
  130. links  +  Amiga  rechts  gedrückt.   `ShutdownSetup' kann nur von der Shell
  131. gestartet werden und unterstützt drei Aufrufparameter:
  132.  
  133.    CX_POPKEY........... Die Tastenkombination, die gedrückt werden muß,  um
  134.                         den Rechner neu zu starten. Standardmäßig ist  hier
  135.                         `lamiga ramiga tab' vorgegeben.
  136.  
  137.    CX_PRIORITY......... Die Priorität,  unter  der  die  Tastenabfrage  ins
  138.                         System eingebunden werden soll.
  139.  
  140.    NoCX................ Wird  dieser  Parameter  angegeben,  so  wird   die
  141.                         Tastenkombination  zum   Neustarten   des  Rechners
  142.                         nicht aktiviert.
  143.  
  144. Es  ist  in  jedem Fall vorzuziehen, den Amiga über die von `ShutdownSetup'
  145. zur  Verfügung  gestellte  Tastenkombination  anstatt  über Control + Amiga
  146. links   +   Amiga  rechts  neu  zu  starten,  da  die  von  `ShutdownSetup'
  147. installierte  Routine  mehr Zeit zur Überwachung und zum sicheren Schließen
  148. von  Dateien zur Verfügung hat, als die Neustartroutine des Betriebssystems
  149. hat.
  150.  
  151.    Ein  zweiter Aufruf von `ShutdownSetup' entfernt die Dateiverfolgung und
  152. Geräteüberwachung.   Die  Routine,  die auf den Druck der Tastenkombination
  153. zum  neustarten  des  Rechners wartet, läßt sich sowohl über die Shell (per
  154. `Break  <Prozessnummer>', <Prozessnummer> ist die Zahl, die neben dem Namen
  155. `« Neustart »' ausgegeben wird, wenn der `Status' Befehl benutzt wird), als
  156. auch mit Hilfe des Programmes `Exchange' beenden.
  157.  
  158. ======================= Programmiererdokumentation ========================
  159. ===========================================================================
  160. Herzstück des Programmsystems ist die shutdown.library, die drei Funktionen
  161. enthält, die im folgenden beschrieben werden.
  162.  
  163.                                      *
  164.  
  165. Erfolg = Shutdown(Modus)
  166.   D0                D0
  167.  
  168.    Diese  Funktion  öffnet  den Ausschaltbildschirm, fragt die Klienten ab,
  169. zeigt  das  Ergebnis  an  und führt den Neustart durch.  Wurde vom Anwender
  170. kein  Neustart  durchgeführt,  so  liefert  die  Funktion einen Erfolgswert
  171. zurück:
  172.  
  173.    FALSE - Das Öffnen des Ausschaltbildschirms ist fehlgeschlagen.
  174.    TRUE  - Der   Ausschaltbildschirm   wurde  korrekt  geöffnet,  aber  der
  175.            Anwender  hat  sich  dazu entschlossen, den Rechner nicht neu zu
  176.            starten.
  177.  
  178.    In  Version  2.0  wurde  für die Shutdown()-Funktion ein Aufrufparameter
  179. eingeführt:
  180.  
  181.    Modus - Ein  Wert, der angibt, ob das System sofort neu gestartet werden
  182.            soll,  oder  ob der Anwender noch eine Chance erhalten soll, zur
  183.            Workbench zurückzukehren, oder den Rechner auszuschalten:
  184.  
  185.            - SHUTDOWN_NORMAL
  186.  
  187.              Normales Verhalten, der  Benutzer  wird  auf  noch  arbeitende
  188.              Programme und offene Dateien aufmerksam gemacht und erhält die
  189.              Möglichkeit, anstatt den Rechner neu zu  starten,  wieder  zur
  190.              Workbench zurückzukehren.
  191.  
  192.            - SHUTDOWN_FAST
  193.  
  194.              Der Rechner wird nachdem alle offenen Dateien `geflusht' und
  195.              alle Laufwerke zur Ruhe  gekommen  sind,  ohne  Einfluß  des
  196.              Anwenders neu  gestartet.  Diese  Funktionsaufruf  wird  vom
  197.              Programm   `ShutdownSetup'   genutzt,  dessen   Commodities-
  198.              Interface auf Tastendruck den Rechner neu startet.
  199.  
  200.                                      *
  201.  
  202. Info = AddShutdownInfoTagList(Hook,Name,Tags)
  203.  D0                            A0   A1   A2
  204.  
  205.    Diese Funktion erzeugt und vermerkt eine Struktur, in der eine  Funktion
  206. eingetragen wird, die vor dem Öffnen des Ausschaltbildschirms  und vor  der
  207. Durchführung des Neustarts aufgerufen werden.
  208.  
  209. Info -  Im  Erfolgsfall  die Adresse eines privaten Datenbereiches, der zum
  210.         Entfernen  des `Hooks' später einmal an RemShutdownInfo() übergeben
  211.         werden kann.
  212.  
  213. Hook -  Eine  unter  Kickstart 2.0 gebräuchliche und korrekt initialisierte
  214.         `Hook'-Struktur,   mit   der   eine  Funktion  mit  wohldefinierten
  215.         Parametern  aufgerufen  werden  kann.   shutdown.library fragt über
  216.         diese  Funktion  das  sich  registrieren  lassende Programm, ob ein
  217.         Neustart  durchgeführt werden soll, oder informiert es darüber, daß
  218.         ein  Neustart  kurz bevorsteht.  Zu den jeweiligen Aufrufparametern
  219.         der Funktion später mehr.
  220.  
  221. Name -  Der  Name, unter dem das sich anmeldende Programme in der Liste der
  222.         noch aktiven Programme aufgeführt werden soll.
  223.  
  224. Tags -  Eine   Liste   von   `TagItems'   zur  Kontrolle  von  zusätzlichen
  225.         Funktionen,  etc.   Derzeit  sind noch keine Werte für diesen Zweck
  226.         definiert.
  227.  
  228.    Der  übergebene  Name wird in einen privaten Speicherbereich kopiert und
  229. muß  deshalb nicht notwendigerweise auch nach Aufruf dieser Funktion gültig
  230. bleiben.
  231.  
  232.    Die   über   den  `Hook'  anzuspringende  Funktion  wird  mit  folgenden
  233. Parametern aufgerufen:
  234.  
  235. Ergebnis = Hook(Hook,Action,Info)
  236.    D0            A0    A1   A2
  237.  
  238. Ergebnis - Ein  Rückgabewert,  der  erwartet wird, falls als Modus der Wert
  239.            `SD_CHECK'  übergeben  wurde,  in  allen  anderen Fällen wird er
  240.            ignoriert.   Das so aufgerufene Programm meldet auf diese Weise,
  241.            ob  es  zu einem Systemneustart zustimmt oder diesen verweigert.
  242.            Wird  der  Neustart  nicht  genehmigt,  so  wird  der  Name  des
  243.            Programmes   in  eine  Liste  von  noch  aktiven,  registrierten
  244.            Programmen eingetragen, die später dem Anwender gezeigt wird.
  245.  
  246. Hook     - Die  Adresse  einer  korrekt  initialisierten  Struktur  vom Typ
  247.            "struct   Hook"  (siehe  utility/hooks.h  und  die  dazugehörige
  248.            Dokumentation).
  249.  
  250. Action   - Die  Adresse einer Struktur vom Typ "struct ShutdownAction", die
  251.            im  Wert  "sdm_Mode"  den  Aufrufsmodus  enthält.   Dies  können
  252.            derzeit zwei verschiedene Werte sein:
  253.  
  254.            - SD_CHECK
  255.  
  256.              Das jeweilige Programm  wird  gefragt, ob  ein  Systemneustart
  257.              durchgeführt werden soll. Stimmt es zu, so muß es  einen  Wert
  258.              ungleich Null (TRUE), stimmt es nicht  zu, den Wert  0 (FALSE)
  259.              zurückliefern.
  260.  
  261.            - SD_EXIT
  262.  
  263.              Dem Programm wird mitgeteilt, daß ein Systemneustart unmittel-
  264.              bar bevorsteht. Es sollte den dritten  Aufrufparameter  (Info)
  265.              untersuchen, um festzustellen, wieviel Zeit ihm noch zur  Ver-
  266.              fügung steht und  notwendige  Aufräumarbeiten  erledigen,  wie
  267.              z.B. noch offene Dateien schließen. Sobald der Aufruf  beendet
  268.              ist, ist davon auszugehen, daß der Neustart sofort erfolgt.
  269.  
  270. Info     - Die Adresse einer Struktur vom Typ "struct ShutdownInfo", die im
  271.            Bitfeld  "sdi_Flags"  zusätzliche Informationen über die Art der
  272.            auszuführenden Aktion enthält.  Gegenwärtig können das folgenden
  273.            Bit gesetzt sein:
  274.  
  275.            - SDF_RESET
  276.  
  277.              Dieses Bit ist nur im Zusammenhang mit  der  Aktion  "SD_EXIT"
  278.              gesetzt und gibt an, daß dem Programm  nicht  viel  Zeit  ver-
  279.              bleibt, um notwendige Aufräumarbeiten zu erledigen. Typischer-
  280.              weise erfolgt der Aufruf durch  Auslösen  des  Systemneustarts
  281.              durch Drücken der berühmten Dreitastenkombination.  In  diesem
  282.              Fall können keinerlei Zugriffe mehr auf die Diskettenlaufwerke
  283.              durchgeführt werden  und  von  Dateioperationen  ist  generell
  284.              abzuraten. Dem Programm verbleibt wenig Zeit zum Aufräumen, da
  285.              nach spätestens 20 Sekunden automatisch  ein  Neustart  durch-
  286.              geführt wird.
  287.  
  288.                                      *
  289.  
  290. Erfolg = RemShutdownInfo(Info)
  291.   D0                      A0
  292.  
  293.    Diese      Funktion      entfernt     einen     mit     der     Funktion
  294. `AddShutdownInfoTagList()'  eingebundenen  `Hook' aus der Liste der vor dem
  295. Neustarten des Rechners abzufragenden Programme.
  296.  
  297. Erfolg - Erfolgswert,  der  angibt,  ob  der  `Hook' korrekt entfernt werden
  298.          konnte.
  299.  
  300. ============== Verwendung der shutdown.library von ARexx aus ==============
  301. ===========================================================================
  302. Die  Bibliothek  stellt  eine  einzige Funktion zur Verfügung, die nach dem
  303. Einbinden der Bibliothek folgendermaßen anzusprechen ist:
  304.  
  305.                       Ergebnis = shutdown(Parameter)
  306.  
  307. Diese  Funktion  verhält  sich  exakt  so  wie  auch die schon beschriebene
  308. Shutdown()-Funktion  der  Bibliothek.   Konnte  die  Funktion nicht korrekt
  309. ausgeführt  werden,  so  kehrt sie mit Fehlerwert 10 (= Fehlschlag) zurück.
  310.    Es   ist   außerdem   möglich,   daß   sie  als  Ergebniswert  `aborted'
  311. zurückliefert, wenn der Anwender den Rechner nicht neu starten wollte.  Als
  312. Anwendungsbeispiel  ist  dem  Programmpaket  die  Datei `ShutdownTest.rexx'
  313. beigefügt.
  314.    Als  Parameter  kann der Wert `immediately' übergeben werden.  In diesem
  315. Fall  wird  der Rechner ohne Einflußmöglichkeit des Anwenders neu gestartet
  316. (ähnlich  als  hätte man die Libraryfunktion `Shutdown()' mit dem Parameter
  317. `SHUTDOWN_FAST' aufgerufen).
  318.  
  319. ====================== Anschrift & Bitte des Autors =======================
  320. ===========================================================================
  321. Die  Veröffentlichung  dieses  Paketes ist zunächst einmal nur ein Test, ob
  322. Anwender mit  einer `Ausschaltfunktion' überhaupt etwas anfangen können und
  323. ob Programmierer sie unterstützen wollen.  Außerdem möchte ich erfahren, ob
  324. noch Verbesserungen am Leistungsumfang des Paketes notwendig sind.  Bis zur
  325. internationalen    Veröffentlichung    ist   jedermann   freigestellt   das
  326. Programmpaket zu nutzen, soweit es nicht kommerziellen Zwecken dient.  Wenn
  327. jemand  am Verkauf oder der Vermarktung meiner Produkte Geld verdient, dann
  328. bin ich das, und niemand anders!
  329.  
  330.    Fehlermeldungen und Vorschläge sind an folgende Adressen zu richten:
  331.  
  332.                               Postanschrift:
  333.  
  334.                                Olaf Barthel
  335.                              Brabeckstraße 35
  336.                             D-3000 Hannover 71
  337.  
  338.                         Elektronische Postdienste:
  339.  
  340.                         Z-Netz: O.BARTHEL@A-Link-H
  341.                       Internet: olsen@sourcery.mxm.sub.org
  342.                                 o.barthel@a-link-h.comlink.de
  343.  
  344. ========================= Entwicklungsgeschichte ==========================
  345. ===========================================================================
  346. V2.2    Umstellung der Library  auf  Verwendung von  Hooks,  fontsensitives
  347.         User-Interface-Layout.
  348.  
  349. V2.0    Kleinere interne Veränderungen, `ShutdownSetup' erweitert.
  350.  
  351. V1.8    Auch Lese- und Schreibzugriffe auf Device-Ebene werden jetzt erfaßt
  352.         und verfolgt.
  353.  
  354. V1.7    Internationalisierung des Systems, Dateiverfolgung verbessert.
  355.  
  356. V1.2    Kleinere Veränderungen in der Umlenkung von Systemroutinen.
  357.  
  358. V1.1    Erste Verbreitung im deutschsprachigen Raum.
  359.