INHALTSVERZEICHNIS

lowlevel.library/AddKBInt
lowlevel.library/AddTimerInt
lowlevel.library/AddVBlankInt
lowlevel.library/ElapsedTime
lowlevel.library/GetKey
lowlevel.library/GetLanguageSelection
lowlevel.library/QueryKeys
lowlevel.library/ReadJoyPort
lowlevel.library/RemKBInt
lowlevel.library/RemTimerInt
lowlevel.library/RemVBlankInt
lowlevel.library/SetJoyPortAttrsA
lowlevel.library/StartTimerInt
lowlevel.library/StopTimerInt
lowlevel.library/SystemControlA


lowlevel.library/AddKBInt                           lowlevel.library/AddKBInt

   NAME
    AddKBInt -- Fügt eine Routine zum Keyboard-Interrupt hinzu. (V40)

   SYNOPSIS
    intHandle = AddKBInt(intRoutine, intData);
    D0                   A0          A1

    APTR AddKBInt(APTR, APTR);

   FUNKTION
        Diese Routine erweitert die Funktionalität des Keyboard-Interrupts
        um den Zusatz intRoutine. Da dies eine Erweiterung des normalen
        Keyboard-Interrupts ist, wird das gesamte Keyboard-Protokoll
        bearbeitet. Die Fehlermeldungen des Keyboards werden ausgefiltert
        und nicht an intRoutine gesandt.

        Die Routine wird jedesmal aufgerufen, wenn der Anwender eine Taste
        auf dem Keyboard drückt.

        Die Routine wird aus einem Interrupt heraus aufgerufen, deshalb
        gelten normale Einschränkungen. Die Routine muss die Inhalte
        folgender Register erhalten: A2, A3, A4, A7, D2-D7. Andere
        Register sind ohne Vorgabe (scratch) außer D0, welches beim
        Verlassen AUF 0 GESETZT WERDEN MUSS. Beim Eintritt in die Routine
        enthält A1 'intData', A5 enthält 'intRoutine' und D0 enthält den
        Tastencode (rawkey code), der von der Tastatur gelesen wurde.

        Die Routine wird nicht aufgerufen, wenn ein Keyboard-Reset
        empfangen wurde.

        Dies ist eine Low-Level-Funktion, die nicht in das normale Amiga-
        Multitasking-Modell passt. Der installierte Interrupt hat keine
        Kenntnis, welches Fenster/welcher Schirm aktuell Eingaben empfängt.

        Wenn das Programm ohne Neustart des Systems endet, MUSS vor Ende
        RemKBInt() aufgerufen werden.

        Nur eine Interrupt-Routine darf zum System hinzu gefügt werden.
        Es ist IMMER der Rückgabewert zu prüfen, ob ein anderer Prozess
        diese Funktion bereits verwendet.

   EINGABEN
    intRoutine - Die Routine, die bei jeder vertikalen Austastlücke
                     (vblank) aufgerufen werden soll. Diese Routine sollte
                     so kurz wie möglich sein, um den Einfluss auf das
                     allgemeine Betriebsverhalten so gering wie möglich zu
                     halten.
    intData - Daten, die der Routine im Register A1 übergeben werden.
                  Wenn mehr als ein Langwort benötigt wird, sollte dies
                  ein Zeiger auf eine Struktur sein, welche die
                  erforderlichen Daten enthält.

   RÜCKGABE
    intHandle - Eine Kennung (handle), um den Interrupt handhaben zu
                    können, oder NULL, wenn die Routine nicht angehängt
                    werden konnte.

   SIEHE AUCH
    RemKBInt()


lowlevel.library/AddTimerInt                     lowlevel.library/AddTimerInt

   NAME
    AddTimerInt -- Fügt einen Interrupt hinzu, der in regelmäßigen
                       Abständen ausgeführt wird. (V40)

   SYNOPSIS
    intHandle = AddTimerInt(intRoutine, intData);
    D0                      A0          A1

    APTR AddTimerInt(APTR, APTR);

   FUNKTION
        Der Aufruf dieser Routine veranlasst das System einen CIA-Timer
        zu belegen und eine 'intRoutine' einzurichten, die jeden Interrupt
        bedient, der von diesem Timer verursacht wird. Obwohl der Timer
        belegt wurde, läuft er nicht noch ist er aktiviert. Zunächst muss
        StartIntTimer() aufgerufen werden, um die Zeitabstände einzurichten
        und den Timer zu starten.

        Die Routine wird aus einem Interrupt heraus aufgerufen, deshalb
        gelten normale Einschränkungen. Die Routine muss die Inhalte
        folgender Register erhalten: A2, A3, A4, A7, D2-D7. Andere
        Register sind ohne Vorgabe (scratch) außer D0, welches beim
        Verlassen AUF 0 GESETZT WERDEN MUSS. Beim Eintritt in die Routine
        enthält A1 'intData', A5 enthält 'intRoutine'.

        Nur ein einziger CIA-Timer wird durch diese Routine belegt. Deshalb
        darf diese Routine nur einmal aufgerufen werden, wenn nicht
        dazwischen ein Aufruf von RemTimerInt() erfolgt.

        Der von dieser Routine verwendete CIA-Timer muss nicht bei jedem
        Aufruf der Selbe sein. Die Routine greift auf die CIA-Resource zu
        und verwendet einen nicht belegten Timer.

        Wenn das Programm ohne Neustart des Systems endet, MÜSSEN vor Ende
        alle Aufrufe dieser Funktion durch die gleiche Zahl von Aufrufen
        von RemKBInt() ausgeglichen werden.

        Selbst wenn die Funktion nur einmal im Programm verwendet wird,
        macht die Prüfung der Rückgabe das Programm toleranter für das
        Multitasking auf der Amiga-Computer-Platform.

   EINGABEN
    intRoutine - Die Routine, die bei Timer-Interrupt aufgerufen werden
                     soll. Diese Routine sollte so kurz wie möglich sein,
                     um den Einfluss auf das allgemeine Betriebsverhalten so
                     gering wie möglich zu halten.
    intData - Daten, die der Routine im Register A1 übergeben werden.
                  Wenn mehr als ein Langwort benötigt wird, sollte dies
                  ein Zeiger auf eine Struktur sein, welche die
                  erforderlichen Daten enthält.
 
   RÜCKGABE
    intHandle - Eine Kennung (handle), um den Interrupt handhaben zu
                    können, oder NULL, wenn die Routine nicht angehängt
                    werden konnte.
 
   SIEHE AUCH
    RemTimerInt(), StopTimerInt(), StartTimerInt()


lowlevel.library/AddVBlankInt                   lowlevel.library/AddVBlankInt

   NAME
    AddVBlankInt -- Fügt eine Routine hinzu, die bei jedem vertikalen
                        Austastimpuls (vertical blank) ausgeführt wird. (V40)

   SYNOPSIS
    intHandle = AddVBlankInt(intRoutine, intData);
    D0                 a0      a1

    APTR AddVBlankInt(APTR, APTR);

   FUNKTION
        Damit kann dem System eine Routine hinzugefügt werden, welche bei
        jedem vertikalen Austastimpuls aufgerufen wird

        Die Routine wird aus einem Interrupt heraus aufgerufen, deshalb
        gelten normale Einschränkungen. Die Routine muss die Inhalte
        folgender Register erhalten: A2, A3, A4, A7, D2-D7. Andere
        Register sind ohne Vorgabe (scratch) außer D0, welches beim
        Verlassen AUF 0 GESETZT WERDEN MUSS. Beim Eintritt in die Routine
        enthält A1 'intData', A5 enthält 'intRoutine'.

        Wenn das Programm ohne Neustart des Systems endet, MUSS vor Ende
        RemVBlankInt() aufgerufen werden.

        Nur eine Interrupt-Routine darf zum System hinzu gefügt werden.
        Es ist IMMER der Rückgabewert zu prüfen, ob ein anderer Vorgang
        diese Funktion bereits verwendet.

   EINGABEN
    intRoutine - Die Routine, die bei jeder vertikalen Austastung (vblank)
                     aufgerufen werden soll. Diese Routine sollte so kurz
                     wie möglich sein, um den Einfluss auf das allgemeine
                     Betriebsverhalten so gering wie möglich zu halten.
    intData - Daten, die der Routine im Register A1 übergeben werden.
                  Wenn mehr als ein Langwort benötigt wird, sollte dies
                  ein Zeiger auf eine Struktur sein, welche die
                  erforderlichen Daten enthält.

   RÜCKGABE
    intHandle - Eine Kennung (handle), um den Interrupt handhaben zu
                    können, oder NULL, wenn die Routine nicht angehängt
                    werden konnte.

   SIEHE AUCH
    RemVBlankInt()


lowlevel.library/ElapsedTime                     lowlevel.library/ElapsedTime

   NAME
    ElapsedTime -- Gibt die Zeit zurück, die seit dem letzten Aufruf
                       vergangen ist. (V40)

   SYNOPSIS
    fractionalSeconds = ElapsedTime(context);
    D0                              A0

    ULONG ElapsedTime(struct EClockVal *);

   FUNKTION
        Diese Funktion benützt die Funktion timer.device/ReadEClock(),
        um den genauen Wert der vergangenen Zeit zu erhalten. Da mit dem
        ersten Aufruf dieser Routine zunächst die Voraussetzungen geschaffen
        werden müssen, wird dabei ein sinnloser Wert ausgegeben.

        Der Rückgabewert für diese Funktion bietet nur einen Wert von
        sechzehn Bit für die Ganzzahl der Sekunden und sechzehn Bit für
        den gebrochenen Wert.

        Mit einem Wert von 16 Bit für die ganze Zahl der Sekunden kann
        diese Funktion als Timer bis zu ungefähr 16 Stunden verwendet
        werden. Wenn die tatsächlich verflossenene Zeit größer ist, wird
        dieser Maximalwert zurück gegeben.

        Die sechzehn Bit für den gebrochenen Teil der Sekunden ergeben
        eine Auflösung von ungefähr 20 Mikrosekunden. Jedoch wird nicht
        empfohlen, diese Funktion bei Zeitintervallen von weniger als 200
        Mikrosekunden als genau anzusehen.

   EINGABEN
    context - Zeiger auf eine Struktur EClockVal. Beim ersten Aufruf
                  dieser Funktion sollte die Struktur auf 0 Sekunden
                  initialisiert werden. Danach sollte die gleiche Struktur
                  bei folgenden Aufrufen der Funktion wieder verwendet
                  werden, denn so wird die vergangene Zeit berechnet.

   RÜCKGABE
    fractionalSeconds - Die vergangene Zeit als Festpunkt-32-Bit-Zahl
                            mit dem Dezimalpunkt fest in der Mitte. Das
                            bedeutet, das die oberen sechzehn Bit die Zahl
                            der verflossenen Sekunden darstellen. Die
                            unteren sechzehn Bit geben den Bruchteil der
                            vergangenen Sekunden an. Dieser Wert ist auf
                            ungefähr 16 Stunden begrenzt. Obwohl die
                            Zeitangabe auf etwa 20 Mikrosekunden genau
                            angegeben ist, liegt die tatsächliche Genauigkeit
                            nur bei etwa 200 Mikrosekunden.

   WARNUNG
        Der erste Aufruf dieser Funktion gibt einen sinnlosen Wert zurück.
        Erst ab dem zweiten Aufruf erhält man verlässliche Werte.

   SIEHE AUCH
    timer.device/ReadEClock()


lowlevel.library/GetKey                               lowlevel.library/GetKey

   NAME
    GetKey -- Gibt die gerade gedrückte Taste im "rawkey code" und die
                  gedrückten Sondertasten (qualifiers) zurück. (V.40)

   SYNOPSIS
    key = GetKey();
    D0

    ULONG GetKey(VOID);

   FUNKTION
        Diese Funktion gibt die aktuell gedrückte normale Taste und alle
        gedrückten Sondertasten zurück.

        Diese Funktion ist sicher innerhalb eines Interrupts.

        Dies ist eine Low-Level-Funktion, die nicht in das normale Amiga-
        Multitasking-Modell passt. Der installierte Interrupt hat keine
        Kenntnis, welches Fenster/welcher Schirm aktuell Eingaben empfängt.

   RÜCKGABE
    key - Tastaturcode der zuletzt gedrückten normalen Taste im
              Wort niederer Ordnung. Wenn keine Taste gedrückt ist, ist
              der Wert dieses Wortes FF. Das Wort hoher Ordnung enthält
              die Sondertasten, die im Langwort wie folgt zu finden sind:
              
                    Markierung                Taste

                    LLKB_LSHIFT             Links Shift
                    LLKB_RSHIFT             Rechts Shift
                    LLKB_CAPSLOCK           Shift Feststeller
                    LLKB_CONTROL            Control
                    LLKB_LALT               Links Alt
                    LLKB_RALT               Rechts Alt
                    LLKB_LAMIGA             Links Amiga
                    LLKB_RAMIGA             Rechts Amiga

   SIEHE AUCH
    


lowlevel.library/GetLanguageSelection   lowlevel.library/GetLanguageSelection

   NAME
    GetLanguageSelection -- Gibt die aktuelle Sprachauswahl zurück. (V40)

   SYNOPSIS
    language = GetLanguageSelection();
    D0

    ULONG GetLanguageSelection (VOID);

   FUNKTION
        Ermitteln, welche Sprache der Anwender eingestellt hat.

   RÜCKGABE
    language - Vom Anwender eingestellte Sprache oder Null, wenn bisher
                   keine ausgewählt wurde. Siehe 
                   über zur Zeit unterstützte Sprachen.

   SIEHE AUCH
    , locale.doc


lowlevel.library/QueryKeys                         lowlevel.library/QueryKeys

   NAME
    QueryKeys -- Gibt den Zustand einer Gruppe von Tasten zurück. (V40)

   SYNOPSIS
    QueryKeys(queryArray, arraySize);
              A0          D1

    VOID QueryKeys(struct KeyQuery *, UBYTE);

   FUNKTION
        Durchsucht die Tastatur um zu ermitteln, welche der Tasten, 
        deren Codes (rawkey codes) im QueryArray aufgelistet sind, z.Zt.
        gedrückt sind. Der Zustand jeder Taste wird im Array zurück gegeben.

        Diese Funktion kann innerhalb eines Interrupts aufgerufen werden,
        aber die Größe von QueryArray sollte so klein wie möglich gehalten
        werden.

        Dies ist eine Low-Level-Funktion, die nicht in das normale Amiga-
        Multitasking-Modell passt. Die zurück gegebenen Werte haben keine
        Kenntnis, welches Fenster/welcher Schirm aktuell Eingaben empfängt.

   EINGABEN
    queryArray - Ein Array von KeyQuery-Strukturen. Die kq_KeyCode-
                     Felder dieser Struktur sollten mit den Rawkey-Codes
                     gefüllt werden, die zu überprüfen sind. Nach der
                     Rückgabe aus dieser Funktion wird das Feld kq_Pressed
                     dieser Struktur auf TRUE gesetzt, wenn die zugehörige
                     Taste gedrückt ist und auf FALSE, wenn nicht.
    arraySize - Zahl der Tastaturcode-Einträge in queryArray

   SIEHE AUCH
    


lowlevel.library/ReadJoyPort                     lowlevel.library/ReadJoyPort

   NAME
    ReadJoyPort -- Gibt den Zustand des ausgewählten Joy-/Maus-Ports
                       zurück. (V40)

   SYNOPSIS
    portState = ReadJoyPort(portNumber);
    D0                      D0

    ULONG ReadJoyPort(ULONG);

   FUNKTION
        Diese Funktion wird verwendet um festzustellen, welches Gerät an
        den Joyport angeschlossen ist und wie der aktuelle Zustand der
        Einstellungen und Knöpfe ist. Der Anwender kann eine Maus, einen
        Spiel-Controller oder einen Joystick an den Port anschließen und
        die Funktion ermittelt dynamisch, welches Gerät verbunden ist und
        gibt den passend formatierten portState zurück.

        Um die Art des angeschlossenen Controllers zu ermitteln, taktet
        diese Funktion den Spiel-Controller und/oder übersetzt die
        Änderungen der Joyport-Daten. Gültige getaktete Daten vom Spiel-
        Controller werden sofort entschlüsselt. Um jedoch genau bestimmen
        zu können, ob eine Maus oder ein Joystick angeschlossen ist, sind
        mehrere Aufrufe dieser Funktion nötig, wobei gleichzeitig das Gerät
        am Joyport durch den Anwender zu bewegen ist.

        Diese Funktion läuft immer sofort ab.

        Dies ist eine eingleisige Funktion, die nicht in das normale
        Multitasking-Modell des Amiga passt. Nur ein Auftrag (task) kann
        jeweils diese Routine ausführen. Alle anderen werden sofort mit
        JP_TYPE_NOTAVAIL zurückgegeben.

        Die Beschaffenheit dieser Routine soll nicht zu Multitasking-
        unfreundlichen Programmierungs-Praktiken wie Abfrageschleifen
        ermutigen. Wenn der Auftrag auf die Rückgabe eines Übergangs
        wartet, sollte WaitTOF() zwischen den Aufrufen verwendet werden,
        um den Einfluss auf das System möglichst klein zu halten.

        Wenn diese Funktion für einen Port zum ersten Mal aufgerufen wird,
        versucht sie bestimmte System-Resourcen zu übernehmen. Um diese
        Resourcen zu bekommen, MUSS die Funktion aus einer Task oder aus
        einem DOS-Prozess heraus aufgerufen sein. Wenn die Funktion die
        notwendigen Resourcen nicht erhält, endet sie mit der Rückgabe
        JP_TYPE_NOTAVAIL. Sobald die Resourcen übernommen sind (Rückgabewert
        anders als JP_TYPE_NOTAVAIL), kann diese Funktion in Interrupts
        verwendet werden.

   EINGABEN
    portNumber - port to read, in the range 0 to 3.

   RÜCKGABE
    portState - Bitmap, die das Gerät und seinen aktuellen Zustand
                    kennzeichnet. Das Format der Bitmap hängt von dem
                    Typ des angeschlossenen Geräts ab.

                    Die folgenden Konstanten aus 
                    werden verwendet, um das angeschlossenen Gerät und
                    dessen Zustand zu bestimmen.

                    Der Typ des Geräts kann dadurch ermittelt werden,
                    dass die Maske JP_TYPE_MASK auf den Rückgabewert
                    angewendet wird und das Ergebnis mit dem Folgenden
                    verglichen wird:

                    JP_TYPE_NOTAVAIL        Portdaten nicht vorhanden
                    JP_TYPE_GAMECTLR        Spiel-Controller
                    JP_TYPE_MOUSE           Maus
                    JP_TYPE_JOYSTK          Joystick
                    JP_TYPE_UNKNOWN         unbekanntes Gerät

                Wenn Typ = JP_TYPE_GAMECTLR, ist die Bitmap von portState:
                    JPF_BUTTON_BLUE         Blau - Stop (Blue - Stop)
                    JPF_BUTTON_RED          Rot - Auswahl (Red - Select)
                    JPF_BUTTON_YELLOW       Gelb - Wiederholung 
                                                (Yellow - Repeat)
                    JPF_BUTTON_GREEN        Grün - Mischen 
                                                (Green - Shuffle)
                    JPF_BUTTON_FORWARD      Tiefschwarz - Vorwärts
                                                (Charcoal - Forward)
                    JPF_BUTTON_REVERSE      Tiefschwarz - Rückwärts
                                                (Charcoal - Reverse)
                    JPF_BUTTON_PLAY         Grau - Spiel/Pause
                                                (Grey - Play/Pause)
                    JPF_JOY_UP              Auf (Up)
                    JPF_JOY_DOWN            Ab (Down)
                    JPF_JOY_LEFT            Links (Left)
                    JPF_JOY_RIGHT           Rechts (Right)

                Wenn Typ = JP_TYPE_JOYSTK, ist die Bitmap von portState:
                    JPF_BUTTON_BLUE         Rechts (Right)
                    JPF_BUTTON_RED          Feuer (Fire)
                    JPF_JOY_UP              Auf (Up)
                    JPF_JOY_DOWN            Ab (Down)
                    JPF_JOY_LEFT            Links (Left)
                    JPF_JOY_RIGHT           Rechts (Right)

                Wenn Typ = JP_TYPE_MOUSE, ist die Bitmap von portState:
                    JPF_BUTTON_BLUE         Rechte Maustaste (Right mouse)
                    JPF_BUTTON_RED          Linke Maustaste (Left mouse)
                    JPF_BUTTON_PLAY         Mittlere Maustaste
                                                (Middle mouse)
                    JP_MVERT_MASK           Maske für vertikalen Zähler
                    JP_MHORZ_MASK           Maske für horizontalen Zähler

   SIEHE AUCH
    SetJoyPortAttrs()


lowlevel.library/RemKBInt                           lowlevel.library/RemKBInt

  NAME
    RemKBInt -- Entfernen eines vorher eingerichteten
                    Keyboard-Interrupts. (V40)

  SYNOPSIS
    RemKBInt(intHandle);
             A1

    VOID RemKBInt(APTR);

  FUNKTION
        Entfernen einer Keyboard-Interrupt-Routine, die vorher mit
        AddKBInt() eingerichtet worden war.

  EINGABEN
    intHandle - Kennung (handle), die mit AddKBInt() übergeben worden
                    war. Sie kann NULL sein, in diesem Falle tut die
                    Funktion garnichts.

  SIEHE AUCH
    AddKBInt()


lowlevel.library/RemTimerInt                     lowlevel.library/RemTimerInt

   NAME
    RemTimerInt -- Entfernen eines vorher eingerichteten
                       Timer-Interrupts. (V40)

   SYNOPSIS
    RemTimerInt(intHandle);
                A1

    VOID RemTimerInt(APTR);

   FUNKTION
        Entfernen einer Timer-Interrupt-Routine, die vorher mit AddTimerInt
        eingerichtet worden war.

   EINGABEN
    intHandle - Kennung (handle), die mit AddTimerInt() übergeben
                    worden war. Sie kann NULL sein, in diesem Falle tut die
                    Funktion garnichts.

   SIEHE AUCH
    AddTimerInt(), StopTimerInt(), StartTimerInt()


lowlevel.library/RemVBlankInt                   lowlevel.library/RemVBlankInt

   NAME
    RemVBlankInt -- Entfernen einer vorher eingerichteten Routine
                        für die vertikale Austastlücke (vertical blank).
            (V40)

   SYNOPSIS
    RemVBlankInt(intHandle);
             A1

    VOID RemVBlankInt(APTR);

   FUNKTION
        Entfernen einer Routine für die vertikale Austastlücke (vertical
        blank), die vorher mit AddVBlankInt() zugefügt worden war.

   EINGABEN
    intHandle - Kennung (handle), die mit AddVBlankInt() übergeben
                    worden war. Sie kann NULL sein, in diesem Falle tut die
                    Funktion garnichts.

   SIEHE AUCH
    AddVBlankInt()


lowlevel.library/SetJoyPortAttrsA           lowlevel.library/SetJoyPortAttrsA

   NAME
    SetJoyPortAttrsA -- Änderung der Attribute eines Ports.  (V40.27)
    SetJoyPortAttrs -- Anhang für Variablen-Argumente (varargs stub)
                           für SetJoyPortAttrsA().  (V40.27)

   SYNOPSIS
    success = SetJoyPortAttrsA(portNumber, tagList);
    D0                         D0          A1

    BOOL SetJoyPortAttrsA(ULONG, struct TagItem *);

    Success = SetJoyPortAttrs(portNumber, firstTag, ...);

    BOOL SetJoyPortAttrs(Tag, ...);


   FUNKTION
        Diese Funktion ermöglicht die Veränderung einiger Attribute, die
        in ReadJoyPort() sowohl über die Operation wie auch über den
        Typ des Controllers des Geräts, das zur Zeit im Port eingesteckt
        ist.

        ReadJoyPort() verhält sich grundsätzlich so, dass es automatisch
        den Typ des Controllers festzustellen versucht, der in einem der
        vorhandenen Ports eingesteckt ist, wenn es diesen Port auslesen
        soll. Dieses Verhalten ist vorteilhaft und erlaubt eine einfache
        Bestimmung des Controllertyps, der an dem Port angeschlossen ist.
        Leider sind seltene Fälle möglich, bei denen extrem feine Bewegungen
        mit der Maus als Joystick-Bewegungen gedeutet werden. Außerdem
        dauern durch diese Fähigkeit zur automatischen Ermittlung des
        Controllertyps die meisten Ablesungen länger, als wenn keine
        automatische Prüfung vorhanden wäre.

        SetJoyPortAttrs() soll für diese beiden Fälle Vorsorge treffen.
        Es gestattet dem Programmierer ReadJoyPort() zu veranlassen,
        die Prüfung auf den verwendeten Controllertyp abzubrechen --
        und, wahlweise, ReadJoyPort() zu zwingen, einen bestimmten
        Controllertyp zu verwenden.

   EINGABEN
    portNumber - Der fragliche Joyport (0-3).
    tagList - Ein Zeiger auf ein Array von Kennunzeichen (tags), die
                  Parameter für SetJoyPortAttrs() enthalten; wenn NULL,
                  gibt die Funktion TRUE zurück, aber tut nichts weiter.

   TAGS
    SJA_Type (ULONG) - Setzt den aktuellen Controllertyp auf Maus,
                        Joystick oder Game-Controller. Eines der
                        folgenden ist anzugeben: SJA_TYPE_GAMECTLR,
                        SJA_TYPE_MOUSE, SJA_TYPE_JOYSTK oder
                        SJA_TYPE_AUTOSENSE. Wenn SJA_TYPE_AUTOSENSE
                        verwendet wird, versucht ReadJoyPort() den Typ
                        des am Port angeschlossenen Controller automatisch
                        zu ermitteln. Wenn einer der anderen Typen benutzt
                        wird, versucht ReadJoyPort() nicht, den angegebenen
                        Controller als etwas anderes zu lesen. Der
                        vorgegebene Typ der Einstellungen ist SJA_AUTOSENSE.

                        Anmerkung: Wenn der Typ auf etwas anderes als
                        automatische Prüfung gesetzt ist, liegt es in der
                        Verantwortung des Programmierers, ihn vor dem
                        Beenden auf automatische Prüfung zurück zu stellen. 

    SJA_Reinitialize (VOID) - Stellt einen bestimmten Port auf seinen
                        Initialisierungszustand zurück und erzwingt die
                        Freigabe aller übernommenen Resourcen; der Typ wird
                        auf SJA_TYPE_AUTOSENSE zurückgesetzt.

   RÜCKGABE
    success - TRUE, wenn alles nach Plan verlief, oder FALSE bei Fehler.

   SIEHE AUCH
    ReadJoyPort(), 


lowlevel.library/StartTimerInt                 lowlevel.library/StartTimerInt

   NAME
    StartTimerInt -- Startet den Timer, der mit dem Timer-Interrupt
                         verbunden ist. (V40)

   SYNOPSIS
    StartTimerInt(intHandle, timeInterval, continuous);
                  A1         D0            D1

    VOID StartTimerInt(APTR, ULONG, BOOL);

   FUNKTION
    Diese Routine startet einen angehaltenen Timer, der zu einem
        Timer-Interrupt gehört, der mit AddTimerInt() erzeugt wurde.

   EINGABEN
    intHandle - Kennung (handle), die von AddTimerInt() übergeben wurde.
    timeInterval - Zahl der Mikrosekunden zwischen den Interrupts. Der
                       zugelassene Höchstwert beträgt 90 000. Werden höhere
                       Werte übergeben, kann es zu unerwarteten Ergebnissen
                       kommen.
    continuous - FALSE bei einem Einmal-Interrupt. TRUE bei Mehrfach-
                 Interrupts.

   SIEHE AUCH
    AddTimerInt(), RemTimerInt(), StopTimerInt()


lowlevel.library/StopTimerInt                   lowlevel.library/StopTimerInt

   NAME
    StopTimerInt -- Hält den Timer an, der zum Timer-Interrupt gehört.
            (V40)

   SYNOPSIS
    StopTimerInt(intHandle);
                 A1

    VOID StopTimerInt(APTR);

   FUNKTION
        Hält den Timer an, dessen Timer-Interrupt-Kennung (handle) übergeben
        wurde. Damit wird ein Dauer-Timer angehalten, der mit StartTimerInt()
        gestartet wurde.

   EINGABEN
    intHandle - Kennung (handle), die von AddTimerInt() übergeben wurde.

   SIEHE AUCH
    AddTimerInt(), RemTimerInt(), StartTimerInt()


lowlevel.library/SystemControlA               lowlevel.library/SystemControlA

   NAME
    SystemControlA - Methode, um selektiv OS-Eigenschaften
                         abzuschalten. (V40)
    SystemControl - Variablen-Argumente (varargs stub) für
                        SystemControlA().

   SYNOPSIS
    failTag = SystemControlA(tagList);
    D0                       A1

    ULONG SystemControlA(struct TagItem *);

    failTag = SystemControl(firstTag, ...);

    ULONG SystemControl(Tag, ...);

   FUNKTION
        Diese Funktion wird verwendet, um die Möglichkeiten des Systems
        zu verändern. Einige dieser Änderungen umfassen Kontrollen von dem,
        was üblicherweise als System-Resourcen angesehen wird. Um
        Verwechslungen zu vermeiden, darf nur ein Prozess irgend einen
        Teil der System-Resourcen beeinflussen. Dadurch wird verhindert,
        dass möglicherweise zwei Prozesse sich streiten, wobei jeder einen
        Teil des Systems haben will. Wenn ein Kennzeichen (tag) als
        ausschließlich (exclusive) markiert ist, bedeutet das, dass nur
        ein Prozess dieses Kennzeichen (tag) übernehmen (auf TRUE setzen)
        kann. Wenn ein anderer Prozess versucht das gleiche Kennzeichen auf
        TRUE zu setzen, misslingt der Aufruf von SystemControl().

        Es ist wichtig daran zu denken, dass SystemControl() fehlschlagen
        kann.

        Dieses ist eine Low-Level-Funktion und bestimmte Kennzeichen
        passen nicht in das übliche Amiga-Multitasking-Modell.

   EINGABEN
    tagList - Zeiger auf ein Array von Kennzeichen (tags), die die
                  ein/auszuschaltenden Eigenschaften des Systems auflisten.

   TAGS
    SCON_TakeOverSys (BOOL)
        TRUE -    Übernimmt die CPU, um sicher zu stellen, dass ein
                        Programm jede Kleinigeit an CPU-Zeit (mit Ausnahme
                        von kritischen Interrupts) bekommt. In diesem
                        Modus gehört die CPU vollständig dem Programm.
                        Prozessumschaltung ist nicht möglich und das Programm
                        erhält die gesamte CPU-Bandbreite. Damit werden alle
                        Aufrufe an das OS, die irgendwie mit Multitasking
                        zu tun haben, nicht richtig ausgeführt werden.
                        Andere Prozesse laufen nicht, bis dieses Kennzeichen
                        mit FALSE aufgerufen wird. Allerdings wird während
                        eines Wait() auf ein Signal Multitasking automatisch
                        wieder eingeschaltet, bis das Signal empfangen wird.
                        Danach wird Multitasking wieder ausgeschaltet und
                        die CPU gehört wieder auschließlich dem eigenen
                        Programm.

                FALSE - Gibt die CPU frei und gestattet wieder Multitasking.
                        Dieses Kennzeichen ist Prozess-exklusiv. Das
                        Kennzeichen arbeitet verschachtelt. Ein Prozess
                        kann die CPU mehrfach übernehmen, ehe sie sie
                        wieder frei gibt.

    SCON_KillReq (BOOL)
            TRUE - Schaltet Systemrequester ab. Das sind die Gründe, die
                       Systemrequester NICHT abzuschalten:

                            1- Keine Aufrufe im Programm verursachen einen
                               Systemrequester.
                            2- Das Einzige, was einen Requester aufrufen
                               könnte, ist eine fehlende CD im Laufwerk,
                               wenn SCON_CDReboot auf CDReboot_On gesetzt
                               ist, deshalb kann ein Requester nicht
                               erscheinen.
                            3- Die einzige Disk-I/O ist über eine CD, wenn
                               SCON_CDReboot auf CDReboot_On gestellt ist
                               und/oder nonvolatile.library.

                       Wann Requester nicht ausgeschaltet werden sollten:

                       SPIELPROGRAMME:
                       Nach dem Laden werden keine DOS-Aufrufe ausgeführt;
                       oder SCON_CDReboot ist CDReboot_On; und zum Laden und
                       Speichern von Anwenderdaten wird die nonvolatile.library
                       verwendet.

                       Das passt zu den oben genannten Fällen: Nach dem Laden
                       werden DOS-Aufrufe nicht benützt aus Grund 1 oder das
                       Spiel greift auf die CD zu und SCON_CDReboot ist auf
                       CDReboot_On gesetzt passend zu Grund 2. Das Spiel
                       übernimmt Hiscores, Spieleinstellungen usw. über die
                       nonvolatile.library entsprechend Grund 3.

               FALSE - Erlaubt Requester für das Programm.

               Dieses Kennzeichen arbeitet verschachtelt. Prozesse können
               Requester mehrfach ausschalten, bevor sie wieder
               eingeschaltet werden. Dazu gehört jedoch eine passende
               Zahl von Aufrufen.

    SCON_CDReboot (ULONG)
                CDReboot_On - Auswerfen der Cd verursacht einen Reboot des
                        Systems. Dies ist nur zu verwenden, wenn das Programm
                        nicht mit Fehlerzuständen umgehen kann.
                CDReboot_Off - Auswerfen der CD verursacht keinen Reboot
                        des Systems. Dies ist anzuwenden, wenn während des
                        Programmlaufs CDs eingelegt werden müssen.
                CDReboot_Default - Setzt auf die Standardeinstellung des
                        Systems zurück. Das sollte am Ende verwendet werden,
                        wenn dieses Kennzeichen (tag) verwendet wurde, um das
                        Reboot-Verhalten zu verändern. Für CD32 ist dieser
                        Wert gleichwertig mit CDReboot_On. Für Amiga-Computer
                        ist der Wert gleichwertig mit CDReboot_Off.

            Es ist zu berücksichtigen, dass das Standardverhalten beim
            Reboot von der Plattform abhängt. Wenn ein Programm ein
            bestimmtes Verhalten erfordert, muss es diese Funktion
            verwenden, um das Verhalten einzustellen. Ein Audiomixer
            würde z.B. dieses Kennzeichen mit den Daten CDReboot_Off
            verwenden. Das erlaubt den Wechsel von Audio-CDs sowohl auf
            Spiel-Maschinen wie auch auf Amiga-Computern.

            Wenn jedoch überhaupt kein Code zur Fehlererkennung vorhanden
            ist, sollte dieses Kennzeichen mit den Daten CDReboot_On
            verwendet werden.

            Hoffentlich wird kein Programm jemals CDReboot_On benötigen.
            Wenn alle Programme die Fehlerbedingungen prüfen und so einen
            Aufruf benutzerfreundlich erledigen, sollte dieser Befehl nie
            notwendig sein. Mit seinem Standardverhalten wird der CD32 bei
            CD-Auswurf immer einen Reset ausführen und Programme, die auf
            Amiga-Computern laufen, machen keinen Reset. Durch Beibehalten
            des Standardverhaltens vergrößert sich der Markt für ein
            Programm auf beide Plattformtypen.
            
            Dieses Kennzeichen kann nicht verschachtelt werden.

    SCON_StopInput (BOOL) - Wenn TRUE, wird input.device davon
            abgehalten, CPU-Zeit zu verwenden. Ebenso kann das input.device
            weder Eingaben von der Tastatur noch vom Port 0 weiterleiten.
            
            Dieses Kennzeichen ist exklusiv für den Prozess. Es kann nicht
            zurück gesetzt werden. Der Versuch des Rücksetzens führt zu
            unklaren/verzerrten Eingaben.

        SCON_AddCreateKeys (ULONG) - Beginnt mit der Erzeugung von Rawkey-
            Codes für Joystick/Game-Controller an der angegebenen Einheit
            (unit). Der Wert der Einheit wird auf Gültigkeit geprüft und
            muss entweder 0 oder 1 sein. Jede einzelne verwendete Einheit
            ergibt einen gewissen Code, der zur Interrupt-Kette des
            vertikalen Austastimpulses (VBlank interrupt chain) hinzu
            gefügt wird. Dieses Kennzeichen (tag) kann verschachtelt werden.
            Das Kennzeichen SCON_RemCreateKeys wird verwendet, um dieses
            Kennzeichen zurück zu setzen. Prozesse können mehrfach Rawkey-
            Codes erzeugen, ehe abgebrochen wird.

            Bei der Arbeit in einem Intuition-Fenster ist zu beachten, dass
            der blaue Knopf des Game-Controllers gleichwertig mit dem
            Menüknopf der Maus ist. Deshalb fängt Intuition die meisten
            Eingaben des blauen Knopfes ab. Wenn die Weitergabe dieses
            Ereignisses wichtig ist, ist die Nachprüfung in der
            Dokumentation für WFLG_RMBTRAP im Autodoc intuition.library/
            OpenWindow() empfohlen.

        SCON_RemCreateKeys (ULONG) - Beendet die Rawkey-Codes für Joystick/
            Game-Controller von der angegebenen Einheit (unit). Der Wert
            für die Einheit wird auf Gültigkeit geprüft und darf nur 0
            oder 1 sein

   RÜCKGABE
    failTag - Null, wenn alle  Kennzeichen (tags) erfolgreich waren.
                  Ein Rückgabe anders als Null zeigt ein Kennzeichen an,
                  dass misslungen ist. Es ist dann möglich, dass auch
                  andere Kennzeichen misslungen sind.

                  Wenn irgend ein Kennzeichen versagt, ändert sich das
                  System nicht durch andere Kennzeichen.

   SIEHE AUCH
    

Nähste Seite
Vorige Seite