Startseite
Amiforce 2.1     Amiforce-News Amiforce-News Amiforce-Forum Amiforce-Forum Amiforce-Chat/IRC-Chat Amiforce-Chat/IRC-Chat Gästebuch Gästebuch Kontakt mit dem Webmaster aufnehmen Kontakt mit dem Webmaster aufnehmen

Amiblitz3
Amiblitz2(alt)
Storm Wizard
Abakus-Design
Helpguide
Toolsguide
Tipps&Tricks
Gamesfun
Links
Download
Musik

Bugfixes am Forum
Subdomains aktiviert
Counterscript entfernt
  Navigation:   Index /  Amiblitz /  Amiblitz Lesematerial /  Ab2 Referenzhandbuch (index) /  Ab2 Referenzhandbuch (Kapitel 11) / 

Referenzhandbuch



Referenzhandbuch

Kapitel 11


Vorwort Inhaltsverzeichnis Kapitel 12



Programmablauf


Der Programmablauf (die Abarbeitung der einzelnen Programmanweisungen) wird durch die Reihenfolge der Anweisungen bestimmt. Normalerweise erfolgt die Abarbeitung des Programms nacheinander von der ersten bis zur letzten Anweisung und zwar von oben nach unten. Diese Reihenfolge kann aber von Ihnen unterbrochen und gesteuert werden. Im folgenden Kapitel lernen Sie die Befehle und Anweisungen kennen, die es Ihnen ermöglichen, bestimmte Punkte im Programm gezielt aufzurufen und so den Programmablauf zu beeinflussen.

  • Goto
  • Gosub
  • On Goto
  • On Gosub
  • Return
  • MouseWait
  • End
  • Stop
  • Else
  • While
  • Wend
  • Select
  • Case
  • Default
  • End Select
  • For
  • Next
  • Repeat
  • Until
  • Forever
  • Pop
  • SetInt
  • End SetInt
  • ClrInt
  • SetErr
  • Cont
  • If
  • EndIf
  • End SetErr
  • ClrErr
  • ErrFail
  • VWait



  • Index

    Befehl: Goto

    Syntax: Goto Programmlabel

    Modus: Amiga/Blitz


    Springt direkt zu einem mit Label näher bestimmten Programmpunkt. (Sollte heute nur noch in Ausnahmefällen benutzt werden.) Erlaubt das Überspringen von Programmabschnitten.



    Index

    Befehl: Gosub

    Syntax: Gosub Programmlabel

    Modus: Amiga/Blitz


    Springt zur Unterroutine, die mit Label näher bestimmt wird. Die Unterroutine muß mit einem Return beendet werden. Nach Beendigung der Unterroutine wird das Programm in der Zeile nach dem Gosub-Befehl fortgesetzt. Die Rücksprungadresse wird auf einem speziellen Stack zwischengespeichert und nach der Ausführung von Return wieder gelöscht. Dies erlaubt den Aufruf des Programmabschnittes von vielen Punkten im Programm. Eine Verschachtelung ist möglich.

    Beispiel:

      Gosub zwei
      NPrint "drei"
      MouseWait
      End
    
      zwei:
      Gosub eins
      NPrint "zwei"
      Return
    
      eins:
      NPrint "eins"
      Return
    


    siehe auch: Return



    Index

    Befehl: Return

    Syntax: Return

    Modus: Amiga/Blitz


    Return wird benötigt, um nach einem Gosub aus der Unterroutine wieder zurückzuspringen. Nach Return wird das Programm mit der Zeile nach dem entsprechenden Gosub-Aufruf fortgesetzt.

    siehe auch: Gosub



    Index

    Befehl: On...Goto/Gosub

    Syntax: On Wert/Berechnung Goto/Gosub Programmlabel [, Programmlabel...]

    Modus: Amiga/Blitz


    Verzweigt in Verbindung von Goto oder Gosub zahlenwertabhängig zu Label einer Labelliste. Ist der Wert 1 springt das Programm zum 1. Label, ist der Wert 2 zum 2. Label und so weiter. On 2 Goto test1, test2 würde zu test2 (2. Label) verzweigen. Ist Wert kleiner 1 oder sind nicht genug Labels angegeben, wird die Zeile nach On ausgeführt.

    Beispiel:

      For k=1 To 3
        On k Gosub eins,zwei,drei
      Next
    
      NPrint "Zurück zum Editor mit Mausklick..."
      MouseWait
      End
    
      eins:
      NPrint "eins"
      Return
    
      zwei:
      NPrint "zwei"
      Return
    
      drei:
      NPrint "drei"
      Return
    


    siehe auch: Gosub, Goto, Return



    Index

    Befehl: MouseWait

    Syntax: MouseWait

    Modus: Amiga/Blitz


    Hält ein Programm an, bis die linke Maustaste gedrückt wird. Sollte nur beim Austesten von Programmen benutzt werden, weil das Multitasking verlangsamt wird.

    Beispiel:

      Nprint "Warte auf Mausklick..."
      MouseWait
    




    Index

    Befehl: End

    Syntax: End

    Modus: Amiga/Blitz


    Beendet ein Programm komplett. Wenn Sie das Programm vom Editor aus gestartet haben, befinden Sie sich nach End wieder im TED; wenn Sie das Programm als ausführbares Programm gestartet haben, kommen Sie zurück zum CLI oder zur Workbench.

    Beispiel:

      Gosub drei
      MouseWait
      End
    
      drei:
      Nprint "Hallo"
      Return
    


    siehe auch: Stop



    Index

    Befehl: Stop

    Syntax: Stop

    Modus: Amiga/Blitz


    Hält ein Programm an und ermöglicht dem Anwender die Programmkontrolle im Direktmodus. Mit Cont wird das Programm fortgesetzt. Nur bei der Fehlersuche von Bedeutung, um z.B. Variablen zu überprüfen.

    Beispiel:

      a=10
      NPrint "Betätigen Sie die linke Maustaste und geben Sie `NPrint a` ein"
      MouseWait
      Stop
    


    siehe auch: Cont, End



    Index

    Befehl: Cont

    Syntax: Cont [N]

    Modus: Amiga/Blitz


    Der Cont-Befehl ist nur im Blitz2-Direktmodus erreichbar. Cont setzt ein mit Stop oder durch einen Fehler angehaltenes Programm fort. Der optionale (also nicht unbedingt anzugebene) Parameter N kann benutzt werden, um eine Anzahl von Stop-Befehlen nach Cont zu ignorieren. Dies ist sinnvoll bei der Fehlersuche in Schleifen. Der Programmablauf wird so nicht bei jedem Schleifendurchlauf angehalten.

    siehe auch: Stop



    Index

    Befehl: If

    Syntax: If Wert/Bedingung/Vergleich [Then...]

    Modus: Amiga/Blitz


    Mit If kann bedingungsabhängig in verschiedenen Programmabschnitten verzweigt werden. Ist die Bedingung erfüllt, dann wird die Anweisung hinter Then oder ein If -Block ausgeführt. Ist Bedingung nicht wahr, wird die nächste Anweisung oder die Anweisung nach EndIf ausgeführt. Als Vergleich stehen Ihnen =, <, >, <>, <=, >= zur Verfügung.

    =gleich
    <kleiner
    >größer
    <>ungleich
    <=kleiner oder gleich
    >=größer oder gleich


    Folgt dem If kein Then, dann wird ein If -Block gebildet. Ein If-Block muß mit EndIf abgeschlossen werden. Alle Anweisungen innerhalb des If-Blocks werden bei Bedingung ist wahr ausgeführt. Else ermöglicht es, bei Bedingung nicht wahr eine alternative Anweisung aufzurufen.

    Beispiel:

      For k = 1 To 10
        If k = 5 Then NPrint "k ist 5!"
        If k < 5
          NPrint "k ist kleiner als 5!"
        Else
          NPrint "k ist nicht kleiner als 5!"
        EndIf
      Next
      MouseWait
      End
    


    siehe auch: Else, EndIf



    Index

    Befehl: EndIf

    Syntax: EndIf

    Modus: Amiga/Blitz


    EndIf beendet einen If-Block. Mehr Informationen hierzu unter If.

    siehe auch: If, Else



    Index

    Befehl: Else

    Syntax: Else [Anweisung...]

    Modus: Amiga/Blitz


    Else wird benutzt, um bei einen unwahren If-Vergleich in einen alternativen Programmabschnitt zu verzweigen.

    Beispiel:
      NPrint "Geben Sie eine Zahl von 1-10 ein"
      a=Edit(3)
    
      If a<5
        NPrint "Deine Zahl ist kleiner 5"
      Else
        NPrint "Deine Zahl ist größer oder gleich 5"
      EndIf
    
      MouseWait
      End
    


    siehe auch: If, EndIf



    Index

    Befehl: While

    Syntax: While Bedingung/Vergleich

    Modus: Amiga/Blitz


    While bildet in Verbindung mit Wend eine Schleife. Die Anweisungen zwischen While und Wend werden solange wiederholt, bis der Vergleich nicht mehr wahr ist. Tritt dieser Fall ein, wird die Anweisung nach Wend ausgeführt.

            While a<10       (Bei 10 oder größer wird die
              (Anweisungen)  Schleife abgebrochen und die Anweisung
            Wend             hinter WEND ausgeführt)
    


    Beispiel:

      While a<10
        NPrint a
        a+1
      Wend
      MouseWait
      End
    


    siehe auch: Wend, Repeat



    Index

    Befehl: Wend

    Syntax: Wend

    Modus: Amiga/Blitz


    Wend wird in Verbindung mit While verwendet. Weitere Informationen unter While.

    siehe auch: While



    Index

    Befehl: Select

    Syntax: Select Wert

    Modus: Amiga/Blitz


    Select ermöglicht eine von Wert abhängige Verzweigung. Select benötigt Case und End Select, bisweilen auch Default.

    Beispiel:

      Print "Gib eine Zahl von 1-3 ein"
      n=Edit(80)
    
      Select n
        Case 1
          NPrint "1"
        Case 2
          NPrint "2"
        Case 3
          NPrint "3"
        Default
          NPrint "Zahl ist nicht 1, 2 oder 3!"
      End Select
    
      MouseWait
      End
    


    siehe auch: Case, End Select, Default



    Index

    Befehl: Case

    Syntax: Case Wert/String

    Modus: Amiga/Blitz


    Case folgt einer Select-Anweisung, um einen Programmcodeabschnitt auszuführen, wenn (und NUR wenn) der Wert der Case-Anweisung dem Select-Auswahlwert entspricht. Entspricht kein Case-Wert dem Select-Wert, werden die Anweisungen nach Default oder nach End Select ausgeführt. Eine Nutzung von Strings ist möglich.

    siehe auch: Select, Default, End Select



    Index

    Befehl: Default

    Syntax: Default

    Modus: Amiga/Blitz


    Default wird ausgeführt, wenn keine Case-Anweisung ausgeführt werden konnte.

    siehe auch: Case, Select, End Select



    Index

    Befehl: End Select

    Syntax: End Select

    Modus: Amiga/Blitz


    Beendet eine Select-Case-End-Schleife, wenn keine Case-Anweisung ausgeführt werden konnte. Das Programm wird mit der Anweisung hinter End Select fortgesetzt.

    siehe auch: Select, Case, Default



    Index

    Befehl: For

    Syntax: For Var=Wert1 To Wert2 [Step Wert3]

    Modus: Amiga/Blitz


    Der For-Befehl eröffnet eine For...Next-Schleife. Die Variable Var nimmt Wert1 an und wird durch Next bis zu Wert2 um 1 erhöht. Wird Step Wert3 mit angegeben, erhöht sich Var je Durchlauf um den angegeben Wert3. Wird ein negativer Wert3 benutzt, vermindert sich Var um den angegebenen Wert3. Hierfür sollte Wert1 größer Wert2 sein. Voreingestellt ist Step 1. Erreicht oder überschreitet Var Wert2, so wird die Schleife beendet.

    Beispiel:

      For a = 1 To 3
        For b = 3 To 1 Step -1
          NPrint "a=",a,"b=",b
        Next
      Next
    


    siehe auch: Next, Step



    Index

    Befehl: Next

    Syntax: Next [Var[,Var...]]

    Modus: Amiga/Blitz


    Next beendet eine For-Next-Schleife. Weitere Informationen unter For. Var ist optional und sollte nur zu Übersichtszwecken angegeben werden.



    Index

    Befehl: Repeat

    Syntax: Repeat

    Modus: Amiga/Blitz


    Mit Repeat beginnt eine Repeat/Until-Schleife. Repeat benötigt im weiteren Programmablauf einen Until-Befehl als Schleifenendkennung. Der Programmabschnitt innerhalb dieser Schleife wird immer mindestens einmal durchlaufen. Die Überprüfung auf wahr oder unwahr einer Bedingung erfolgt erst mit dem Until Befehl.

    Beispiel:

      Repeat
    
        Print "Geben Sie eine Zahl ein (0=beenden)"
        n=Edit(80)
    
        If n/2=Int(n/2)
          NPrint n," ist eine gerade Zahl"
        Else
          NPrint n," ist eine ungerade Zahl"
        EndIf
    
      Until n=0
    

    siehe auch: Until, Forever



    Index

    Befehl: Until

    Syntax: Until Bedingung/Vergleich

    Modus: Amiga/Blitz


    Until wiederholt eine mit Repeat eröffnete Schleife solange, bis Bedingung nicht erfüllt (0) ist. Ist Bedingung erfüllt (nicht 0), dann wird das Programm mit der Anweisung nach Until fortgesetzt.

    Beispiel:

      Repeat
        (Schleifen-Anweisungen)
      Until a=0
    


    siehe auch: Repeat, Forever



    Index

    Befehl: Forever

    Syntax: Forever

    Modus: Amiga/Blitz


    Macht eine Repeat-Schleife zur Endlosschleife. Forever entspricht Until 0.

    siehe auch: Repeat, Until



    Index

    Befehl: Pop

    Syntax: Pop Gosub/For/Select/If/While/Repeat

    Modus: Amiga/Blitz


    Pop ermöglicht den Abbruch einer Schleife vor ihrer ordnungsgemäßen Beendigung. Pop löscht die Schleife vom Stack und erklärt Sie als beendet. Sie sollten niemals eine Schleife vorzeitig verlassen, ohne Pop anzuwenden. (Normalerweise sollten Sie eine Schleife eigentlich nie vorzeitig verlassen.)

    Beispiel:

      Repeat
    
        NPrint "Denk Dir eine Zahl zwischen 1 und 1000..."
        NPrint "Ich werde sie in 10 Versuchen herausfinden!"
    
        k=0:g=1000
    
        For v=1 To 10
          z=Int((g-k)/2)+k
    
          Repeat
            Print "Ist deine Zahl ",z,"? (j)a, (g)rößer, (k)leiner ?"
            a$=LCase$(Edit(1))
          Until A$="j" OR A$="g" OR A$="k"
    
          Select a$
            Case "j"
              NPrint "Ich habe es in ",v," Versuchen geschafft!"
              NPrint "Schlau, nicht wahr ?"
              Pop Select:Pop For
              Goto richtig
            Case "k"
              g=z
            Case "g"
              k=z
          End Select
        Next
        NPrint "Nanu??? Du mußt Mist gemacht haben!"
        richtig:
        Print "Ein neues Spiel ? (j)a, (n)ein ?"
        a$=LCase$(Edit$(1))
    
      Until a$="n"
      End
    




    Index

    Befehl: Set Int

    Syntax: Set Int Typ

    Modus: Amiga/Blitz


    Erklärt einen Teil Ihres Programms als "Interruptcode". Bevor wir uns weiteren Details des SetInt -Befehls widmen, sehen wir uns kurz an, was Interrupts sind.
    Wenn ein Programm abläuft, muß oft geprüft werden, ob bestimmte Ereignisse eingetreten sind. Dies erfolgt per Interrupts. Wenn ein Interrupt ausgelöst wurde, wird das gerade laufende Programm durch den 68000 komplett angehalten. Das Programm erkennt, daß eine Interrupt-übergabe erfolgte. Sobald die Interruptroutine ihre Arbeit beendet hat, wird das angehaltene Programm fortgesetzt.

    Was kann einen Interrupt auslösen ?

    Es gibt 14 unterschiedliche Arten von möglichen Interrupts für den Amiga. Sie sind mit entsprechenden Nummern gekennzeichnet (Typ).


    InterruptGrund des Interrupts
    0Serieller Puffer ist leer
    1Disk Block lesen/schreiben
    2Software Interrupt
    3CIA Ports Interrupt
    4Copper Interrupt
    5Vertical Blank
    6Blitter ist fertig
    7Audio Kanal 0
    8Audio Kanal 1
    9Audio Kanal 2
    10Audio Kanal 3
    11Serieller Puffer voll
    12Floppy Disk Sync
    13Externer Interrupt


    Ein oft benutzter Interrupt ist der Vertical Blank Interrupt. Er wird ausgelöst, wenn das Videobild (Monitorbild) komplett aufgebaut ist. Dies ist jede 50stel Sekunde der Fall. Für Animationsangleichungen ist dieser Interrupt sehr nützlich. Wird ein Programmabschnitt als Vertical Blank Interrupt angelegt, wird dieser Programmabschnitt alle 50stel Sekunde ausgeführt. Der Programmabschnitt muß so schnell wie möglich abgearbeitet werden. Auf keinen Fall darf die Ausführung länger als eine 50stel Sekunde dauern. Strings dürfen nicht verwendet werden. Im Amigamodus können keine Blitter-, Intution- oder File I/O-Kommandos im Interrupt-Handler ausgeführt werden. Möchten Sie einen Programmabschnitt als Interrupt-Handler benutzen, mußdieser Abschnitt dem SetInt-Befehl folgen. Das Ende des Interruptcodes wird mit End SetInt festgelegt. Der Typ-Parameter legt den Interrupt fest, den Sie nutzen möchten. Er entspricht den Nummern der obigen Tabelle.

    Z.B.: SetInt 5 benutzt den Vertical Blank Interrupt.

    Beispiel:

      SetInt 5            ;Es folgt ein Vertical Blank Handler..
        a+1               ;a um eins erhöhen
        Poke.w $dff180,a  ;Dieser kleine Poke ändert die Hintergrundfarbe
      End SetInt          ;Ende des Interrupt-Handlers
      MouseWait           ;wartet auf Mausklick - der Handler arbeitet derweil fleißig weiter
      End
    


    siehe auch: End SetInt, ClrInt



    Index

    Befehl: End SetInt

    Syntax: End SetInt

    Modus: Amiga/Blitz


    End SetInt kennzeichnet das Ende eines Interruptprogrammabschnittes. Weitere Informationen unter SetInt.

    siehe auch: SetInt, ClrInt



    Index

    Befehl: ClrInt

    Syntax: ClrInt Typ

    Modus: Amiga/Blitz


    Alle mit SetInt initalisierten Interrupthandler mit Typ-Nummer werden nicht mehr ausgeführt.

    Beispiel:
      SetInt 5                   ;Beginn Interrupt-Handler
        a+1
        Poke.w $dff180,a
      End SetInt                 ;Ende des Interruptcodes
      NPrint "Drücke RETURN..."  ;Der Handler arbeitet bis
      b=Edit(1)                  ;die Returntaste gedückt wird.
      ClrInt 5                   ;Schaltet den Handler ab.
      NPrint "Drücke Maustaste!"
      MouseWait
    


    siehe auch: SetInt, End SetInt, Return



    Index

    Befehl: SetErr

    Syntax: SetErr

    Modus: Amiga/Blitz


    Der Code nach SetErr wird bei einem Runtime Error im AB2-Programm ausgeführt. Sie können hier eine Fehlerbearbeitung nach eigenen Vorstellungen entwerfen. Das Ende des Handlers wird mit End SetErr festgelegt.

    Beispiel:

      SetErr                         ;Fehlerroutine installieren
        NPrint "PROGRAMMFEHLER!"     ;das ist unser Handler
        NPrint "Maustaste drücken!"
        MouseWait
        ErrFail
      End SetErr                     ;Ende des Handler
      Dim a(10)                      ;ein Array dimensionieren
      For k=1 To 11                  ;einen Fehler auslösen
        a(k)=k:NPrint a(k)
      Next
    


    siehe auch: ErrFail, ClrErr



    Index

    Befehl: End SetErr

    Syntax: End SetErr

    Modus: Amiga/Blitz


    Kennzeichnet das Ende einer Fehlerroutine, die mit SetErr installiert wurde. Weitere Informationen unter SetErr.

    siehe auch: SetErr, ClrErr, ErrFail



    Index

    Befehl: ClrErr

    Syntax: ClrErr

    Modus: Amiga/Blitz


    Macht Ihre mit SetErr aktivierte Fehlerroutine inaktiv.

    siehe auch: SetErr, ErrFail, End SetErr



    Index

    Befehl: ErrFail

    Syntax: ErrFail

    Modus: Amiga/Blitz


    ErrFail überträgt einen Fehler aus einer Fehlerroutine in den Direktmodus von AB2 und zeigt Ihn an.

    siehe auch: SetErr, ClrErr



    Index

    Befehl: VWait

    Syntax: VWait [Anzahl Vertical Blanks]

    Modus: Amiga/Blitz


    VWait wartet auf den nächsten Vertical Blank. Wird Anzahl Vertical Blanks mitangegeben, wartet das Programm diese Anzahl von Vertical Blanks. VWait ermöglicht die Synchronisierung von Animationen an die Bildwiederholfrequenz des Monitors. Beachten sollten Sie, daß die Frequenzen bei NTSC- und PAL-Amiga unterschiedlich sind (NTSC 60stel Sekunde / PAL 50stel Sek.).






    Impressum
    Copyright © 2001-2007 by Cj-Stroker. Alle Rechte vorbehalten (Legal Info)
    AMIGA und zugehörige Logos sind eingetragene Warenzeichen von Amiga, Inc.