Home
Blitzbasic2 PDF
Contents
1. NOT RHS logisch negiert RHS arithmetisch negiert BITSET LHS mit RHS Bits gesetzt BITCLR LHS mit RHS Bits gel scht BITCHG LHS mit RHS Bits gewechselt BITTST wahr wenn LHS Bits von RHS gesetzt sind 5 LHS hoch RHS SL LHS logisch um RHS Stellen nach links verschoben ASL LHS arithmetisch um RHS Stellen nach links verschoben LSR LHS logisch um RHS Stellen nach rechts verschoben ASR LHS arithmetisch um RHS Stellen nach rechts verschoben amp logische UND Verkn pfung zwischen LHS und RHS logische ODER Verkn pfung zwischen LHS und RHS 100 LHS multipliziert mit RHS LHS dividiert durch RHS LHS addiert zu RHS RHS subtrahiert von LHS wahr wenn LHS gleich RHS lt gt wahr wenn LHS ungleich RHS lt wahr wenn LHS kleiner RHS gt wahr wenn LHS gr er RHS lt wahr wenn LHS kleiner oder gleich RHS gt wahr wenn LHS gr er oder gleich RHS AND logische UND Verkn pfung zwischen LHS und RHS OR logische ODER Verkn pfung zwischen LHS und RHS Boolsche Operatoren Die Boolsche Algebra arbeitet mit nur zwei Werten wahr und falsch In Blitz2 wird der Wert falsch durch O alle ein Boolsches Ergebnis also wahr oder falsch Die Anweisung NPrint 2 2 gibt den Wert 7 aus da das Ergebnis der Operation 2 2 wahr ist Die Operatoren AND OR und NOT k nnen ebenfalls als Boolsche Operatoren verwendet werden Nprint 2 2 AND 5 6 liefert das Ergebnis 0 da nicht beide Bedingungen erf llt sind
2. Der Blitzmodus Durch den Befehl Blitz geht das Programm in den Blitzmodus ber Im Blitzmodus ist das Betriebssystem ausgeschaltet d h es wird umgangen und das Programm hat die Kontrolle ber den gesamten Rechner Dies hat zur Folge da kein Multi Tasking mehr l uft und keine Dateizugriffe mehr erfolgen k nnen Der Vorteil des Blitzmodus liegt darin da die Programme wesentlich schneller ablaufen und dadurch der Bildschirm gleichm ig gescrollt und ein sogenanntes Dual Playfield genutzt werden kann Der Blitzmodus ist nur ein tempor rer Zustand Kehrt das Programm in den Amigamodus zur ck oder beendet es sich erwacht das Betriebssystem wieder und bernimmt die Kontrolle ber den Rechner Vorsicht ist geboten bei Verwendung des Blitzmodus im Zusammenhang mit der Version 1 3 oder fr heren Versionen des Betriebssystems Bei diesen Versionen kann das Wegschreiben flush der Dateipuffer bis zu zwei Sekunden dauern Sie sollten daher absolut sicher sein da keine Plattenzugriffe mehr stattfinden wenn Sie in den Blitzmodus bergehen Zur Zeit ist uns keine Softwaremethode bekannt mit der dies erreicht werden k nnte Das einzige was wir empfehlen k nnen ist grunds tzlich den Befehl VWAIT 100 abzusetzen bevor in den Blitzmodus bergegangen wird Zaubereien mit Slices Bei der Entwicklung des Amiga wurde sehr viel Wert auf die Graphikf higkeiten gelegt Im Blitzmodus wird die gesamte Graphikausgabe durch Slices
3. Wenn Sie auf den CD Knopf klicken bevor Sie OK ausw hlen k nnen Sie sicher sein da das Programm nachdem es compiliert wurde auch alle ben tigten Dateien findet Mit dem CD Befehl wird in das Verzeichnis gewechselt in dem sich auch das Programm befindet 10 Kapitel 2 Grundlegendes ber Blitz2 e Mein erstes Programm Der Print Befehl e Formatiertes Drucken e Einfache Variablen e Einfache Schleifen e Verschachtelte Schleifen e Die Benutzung von String Variablen Der Programmablauf e Sprungbefehle Benutzereingaben e Felder Das folgende Kapitel wendet sich an diejenigen Benutzer die noch keine Programmiererfahrung in BASIC haben Es liefert eine schrittweise Einf hrung in die grundlegenden Elemente von Blitz2 Sobald Blitz2 betriebsbereit ist s vorhergehendes Kapitel bet tigen Sie den OKEE DOKEE Knopf und Sie k nnen Ihr erstes Programm schreiben Wenn Sie Schwierigkeiten mit dem Blitz2 Editor haben sollten sehen Sie im Anhang 1 nach Dort ist der Editor Ted ausf hrlich erkl rt Mein erstes Programm Geben Sie die folgenden zwei Befehle ein PRINT Dies ist mein erstes Blitz2 Programm MouseWait Dann w hlen Sie COMPILE amp RUN im oberen rechten Men Wenn Sie das Programm korrekt eingegeben haben erhalten Sie ein CLI Fenster mit Ihrer Mitteilung Bet tigen Sie den Mausknopf und Sie sind wieder im Editor Das ist schon alles Der Print Befehl Positionieren Sie den Cur
4. BitMap 1 32 32 3 For i l To 15 Circle 16 16 1 1 Next GetaShape 0 0 0 32 32 Free BitMap 1 Return Weiches Scrollen In diesem letzten Beispiel wird das weiches Scrollen erl utert wie es im letzten Kapitel beschrieben wurde Mit dem Befehl Scro11 wird die linke Seite der Bitmap nach rechts und die obere H lfte nach unten kopiert Dadurch wird die Bitmap vierfach so gro und enth lt das selbe Bild in jedem Quadranten Dies erm glicht es die Bitmap durch den Bildschirm scrollen zu lassen und wenn der rechte Rand erreicht ist wieder zum linken Rand zur ck zu springen ohne da ein Bruch sichtbar wird da das Bild links und rechts gleich ist Das gleiche gilt f r das auf und abscrollen Um die Maus Bewegungen des Benutzers zu ermitteln mu zun chst der Befehl Mouse On abgesetzt werden Anschlie end wird ermittelt um welchen Betrag sich die Maus bewegt hat und dieser Wert wird zu der Geschwindigkeit hinzuaddiert mit der das Display verschoben wird Mit dem Befehl QLimit xa MouseXSpeed 20 20 wird sichergestellt da die Variable xa x_add immer im g ltigen Bereich von 20 bis 20 bleibt Der bergang von einem zum anderen Rand wird durch die Anweisung x QWrap xa MouseSpeed 20 20 erreicht BLITZ ouse On n 25 BitMap 0 640 512 3 For i 0 To 150 Circlef Rnd 320 32 16 Rnd 256 32 16 Rnd 16 Rnd 8 Next Scroll 0 0 320 256 320 0 Scroll 0 0 640 256 0 256 Slice 0 44 320 256 S5fff8 3 8 8 64
5. DisplayRGB CopList Register line r g b copoffset ecs 1 aga 4 DisplayUser CopList Line String CopOffset DisplayScroll CopList amp xpos q n amp xpos q n CopOffset R Die folgenden Funktionen erwarten den Offset als positiven Wert welcher ausdr ckt dass so viele Instruktionen f r jede Instanz dieses Befehls zugeordnet werden Beachte dass die obigen Funktionen nicht mit den jetzt folgenden vermischt werden d rfen CustomColors CopList CCOffset YPos Palette startcol numcols CustomString CopList CCOffset YPos Copper Im Verzeichnis Blitz Examples befinden sich Beispiele die diese Funktionen verwenden Beispiel 1 Das erste Beispiel erzeugt zwei gro e Bitmaps wobei in eine Linien und in die andere Rechtecke gezeichnet werden Aus der erzeugten 32 Farben Palette benutzt die erste Bitmap die ersten 16 und die zweite Bitmap die restlichen 16 Farben Die Flags f r InitCopList summieren sich aus folgender Liste ightbitplanes 08 smoothscrolling 10 dualplayfields 20 lores 000 fetchmode3 3000 agacolors 10000 Beachte dass InitCopList vor dem Wechsel in den BlitzMode ausgef hrt werden kann Alle Display Funktionen sind unabhangig vom aktiven Modus mit Ausnahme von CreateDisplay welche im BlitzModus ausgef hrt werden muss Auch interessant ist die Verwend
6. Felder Felder in Blitz2 entsprechen den normalen BASIC Konventionen Alle Felder m ssen dimensioniert werden bevor sie verwendet werden k nnen Sie k nnen aus beliebigen Datentypen bestehen einfache oder 24 NewType und sie k nnen beliebig viele Dimensionen besitzen Alle Felder besitzen einen Index von 0 bis n wobei n die Gr e des Feldes ist Wie in anderen BASIC Versionen auch kann ein Feld eigentlich ein Element mehr als n aufnehmen es wird n mlich von O bis n einschlie lich gez hlt Das Feld a 50 besitzt also 51 Elemente von 0 bis 50 Bei der Vereinbarung eines Feldes wird wie bei allen anderen Variablen auch der Default Datentyp angenommen wenn nicht ausdr cklich ein typ Zusatz angegeben ist Dim a w 50 Ein Feld vom Typ Word Durch die M glichkeit Felder aus NewType Datentypen zu vereinbaren verringert sich die Anzahl von Feldern die ein BASIC Programm ben tigt Betrachten wir folgendes Beispiel Dim Alienflags 100 Alienx 100 Alieny 100 Unter Verwendung von NewType Datentypen k nnte dasselbe auch erreicht werden durch NewType Alien flags w X W y w End NewType Dim Aliens Alien 100 Es wird jetzt nur ein Feld ben tigt um auf alle ben tigten Alien Daten zugreifen zu k nnen Sollen alle x und y Werte von Alien auf einmal mit Zufallszahlen belegt werden so kann dies folgenderma en geschehen For k 1 To 100 Alien k x Rnd 320 Rnd 200 Next Sollen jet
7. Wend Doppelte Pufferung Im folgenden Beispiel wird erl utert wie ein doppelt gepuffertes Display verwendet wird mit dem Graphiken 59 flimmerfrei bewegt werden k nnen Der Trick besteht darin die eine Bitmap zu bearbeiten w hrend die andere Bitmap dargestellt wird soda keine St rungen zu sehen sind Mit dem vwait Befehl wird der Zeitpunkt abgepasst an dem der vertikale Strahl oben am Bildschirm ist Das ist der Moment an dem die Bitmaps ausgetauscht werden m ssen ohne da St rungen auftreten Mit der Anweisung db 1 db wird der Wert von db mit jeder Bildschirmf llung zwischen 0 und 1 gewechselt Die Bitmap db wird angezeigt mit Show db db wird gewechselt db 1 db und anschlie end wird mit UseBitmap db diese zur aktuellen Bitmap gemacht Darin besteht die Methode der doppelten Pufferung die eine Bitmap anzeigt w hrend die andere bearbeitet wird Da zwei Bitmaps verwendet werden werden auch zwei Queues Warteschlangen ben tigt um oBlit verwenden zu k nnen Der Befehl oBlit f hrt ein normales Blit durch und speichert die Position des Objekts in einer Queue Bei einem erneuten Aufruf von oBlit wird dann zun chst das Objekt von der vorherigen Position die in der Queue gespeichert wurde gel scht und dann an der neuen Position dargestellt Mit dem Befehl UnQueue k nnen alle in der Queue gespeicherten Teile einer Screen gel scht werden So k nnen in unserem Beispiel die B lle in der neuen Position gezeichnet wer
8. e Verwaltung von Betriebssytem Listen e Primzahlgenerator In diesem Kapitel werden die in den vorhergehenden Kapiteln beschriebenen Konzepte anhand zahlreicher Beispiele erl utert Unerfahrene Programmierer sollten auf jeden Fall zun chst die Beispiele in Kapitel 2 ausprobieren bevor Sie sich an diese heranwagen Zahlen raten Im folgenden kleinen Programm denkt sich der Rechner eine Zahl aus und der Benutzer mu versuchen Sie in zehn versuchen zu raten NPrint Ich habe mir eine Zahl zwischen 0 und 100 ausgedacht NPrint Ich gebe dir zehn Versuche sie zu raten a Rnd 100 n 1 Repeat Print n Versuch b Edit 10 If b a Then NPrint Gl ck gehabt Goto finish If b lt a Then NPrint Zu klein If b gt a Then NPrint Zu gross n 1 Until n 11 NPrint 10 Versuche das war s finish NPrint Mausknopf dr cken um das Programm zu beenden MouseWait Es wird zun chst recht schwierig sein die Zahl zu raten weil der Zufallszahlengenerator standardm ig keine ganze Zahl erzeugt sondern auch Nachkommastellen ndern Sie daher die Zeile a Rnd 100 entweder in a w Rnd 100 oder a Int Rnd 100 33 Der Zusatz w steht f r Word und hat zur Folge da die Variable a jetzt ganzzahlig im Bereich 32768 bis 32767 ist Bei der zweiten angegebenen M glichkeit ist a zwar immer noch vom Typ Quick durch den Aufruf von Int wird der Nachkommateil der Zahl jedoch abgeschnitten Immer wenn in Blitz2
9. Das Prinzip dieses Algorithmus beruht darauf da die Fakult t einer Zahl gerade die Zahl selbst ist multipliziert mit der Fakult t der um 1 erniedrigten Zahl Globale Variablen Manchmal ist es notwendig da eine Prozedur auch auf die globalen Daten des Hauptprogramms zugreift Dies wird mit der Anweisung Shared erreicht mit der es m glich ist bestimmte Variablen innerhalb einer Prozedur als globale Variablen zu behandeln Statement beisp Shared k NPrint k End Statement For k 1 To 5 beisp Next ouseWait Durch die Anweisung Shared wird erreicht da Blitz2 in der Prozedur beisp keine eigene lokale Variable k anlegt sondern stattdessen auf die globale Variable k des Hauptprogramms zugreift Ohne die Shared Anweisung wird k zu einer lokalen Variable und wird somit bei jedem Aufruf von beisp neu initialisiert der Wert ist dann jedesmal 0 31 Zusammenfassung Blitz2 unterst tzt zwei Arten von Prozeduren Befehle und Funktionen Beide k nnen sowohl eigene lokale Variablen besitzen als auch mit Hilfe der Shared Anweisung auf globale Daten zugreifen Es k nnen bis zu sechs Parameter an eine Prozedur bergeben werden Eine Funktion kann einen der sechs einfachen Datentypen als Wert zur ckliefern 32 Kapitel 5 Beispiele e Zahlen raten e Ein eigenst ndiges Workbench Programm e Ein graphisches Beispiel Men s amp File Requester e String Gadgets e Prop Gadgets e Telefonbuch Datenbank
10. Der Operator OR liefert wahr sobald eine der beiden Bedingungen erf llt ist der Operator NOT liefert wahr wenn der Operand falsch ist und umgekehrt Bin re Operatoren Einige der Blitz2 Operatoren arbeiten mit bin rer Arithmetik Diese Operationen sind besonders schnell da sie direkt den Prozessor Instruktionen entsprechen Im Bin rsystem werden alle Zahlen durch eine Folge von Einsen und Nullen repr sentiert die Bits genannt werde Ein Byte besteht aus acht solchen Bits ein Wort Word aus 16 und ein Doppelwort oder Langwort Longword aus 32 Bits Eine eingehende Erl uterung der Funktionsweise der bin ren Operatoren findet sich in jeder Beschreibung des 6800 Microprozessors 101
11. Event Select ItemHit Case 0 Eintrag 0 Laden p Reneses Datei laden path nameS NPrint Jetzt wird p geladen Case 1 Eintrag 1 Sichern p rilen queses t Datei sichern path nameS Case 2 Se End End Select End Select Forever NPrint Jetzt wird pS gesichert Eintrag 2 Quit Mit dem Befehl MaxLen wird ein Speicherbereich f r eine Stringvariable angefordert Dies ist notwendig damit die beiden Stringvariablen f r den File Requester gen gend Platz f r die Eingabe haben Die Men s die mit MenuTitle und Menultem erzeugt wurden werden mit dem Befehl SetMenu mit dem Window verbunden Die Struktur Select Case EndSelect eignet sich am besten um auf Ereignisse die von au en in diesem Fall vom Benutzer kommen zu reagieren Wenn der Benutzer ein Men ausw hlt ein Window schlie t oder auf einen Knopf klickt findet ein Ereignis statt und Programm gesendet Ein Programm sollte mit dem Befehl wait schl ft das Programm solange bis der Benutzer etwas eingibt 36 eine entsprechende Nachricht wird an das Event auf ein Ereignis warten Dadurch In einer Multi Tasking Umgebung k nnen dann in der Zwischenzeit andere Programme weiterarbeiten Ein Programm das auf ein Ereignis wartet belastet das System nicht Wurde ein Event empfangen liefert WaitEvent eine Kennung f r die Art des Events zur ck Ein Men Ereignis liefert z B den Wert 2
12. H ufige Probleme bei der Namensgebung Der folgende Abschnitt beschreibt einige der Probleme die bei schlechter Namensgebung auftreten k nnen 96 Wenn irrt mlich auf eine noch nicht vereinbarte Variable zugegriffen wird weil der falsche Name verwendet wurde meldet der Compiler keinen Fehler sondern legt eine neue Variable an und initialisiert sie mit dem Wert 0 Diese Gefahr kann durch eine einheitliche Namenskonvention verringert werden Es verlangsamt die Programmentwicklung wenn immer wieder zum Anfang des Programmcode zur ckgegangen werden mu weil vergessen wurde wie die Variablen hie en Eine handgeschriebene Liste neben der Tastatur erleichtert das Nachschlagen Die Verwendung von langen Namen erh ht zwar die Lesbarkeit birgt aber auch die Gefahr von vermehrten Tippfehlern Die Vergabe von vulg ren oder obsz nen Namen kann zwar ganz lustig sein sollte aber vermieden werden wenn andere Leute den Code lesen Anmerkungen und Kommentare Im Gegensatz zu anderen BASIC Versionen wird bei Blitz2 nicht die Anweisung REM verwendet um einen Kommentar zu kennzeichnen sondern das Semikolon Alles was hinter einem Semikolon bis zum Ende der Zeile folgt wird als Kommentar betrachtet und vom Compiler ignoriert Auf diese Weise k nnen Programme dokumentiert werden Wenn alle Routinen entsprechend kommentiert sind k nnen diese in zuk nftigen Projekten weiterverwendet werden Nichts ist so l stig wie eine fr her einmal ent
13. bernommen Diese sind wesentlich flexibler als die vom Betriebssystem verwendeten Screens und erm glichen bestimmte Besonderheiten wie weiches smooth Scrolling doppelt gepufferte Displays u v m Durch die M glichkeit mehr als eine Slice gleichzeitig auf dem Bildschirm zu haben kann dieser in mehrere Abschnitte mit unterschiedlicher Aufl sung zerlegt werden Es folgt eine Beschreibung der wichtigsten Vorteile der Darstellung mit Slices Weiches Scrollen Das weiches Scrollen wird dadurch erreicht da nur ein Teil einer gro en Bitmap auf dem Bildschirm angezeigt wird Der Amiga gestattet es das Anzeigefenster innerhalb einer gro en Bitmap hin und herzubewegen wie die folgende Graphik zeigt 54 gt gt gt Diagram lt lt lt Das Display Fenster repr sentiert den Bildschirmausschnitt der jeweils zu sehen ist Indem der Ausschnitt z B nach rechts ber den Bildschirm bewegt wird rollt das Bild gleichm ig nach links Der Ausschnitt kann mit den Befehlen show ShowF Show B innerhalb der Bitmap bewegt werden Wie aus der obigen Darstellung ersichtlich ist die Strecke ber die gescrollt werden kann durch die Gr e der Bitmap begrenzt Wenn nun die linke H lfte der Bitmap nochmals auf die rechte Seite kopiert wird kann gleichm ig nach rechts bis zum Ende gescrollt werden bis das gleiche Bild wie ganz links erscheint Ist das Ende erreicht kann der Ausschnitt auf die linke Seite zur ckgesetzt werden Da der Aussc
14. erzeugt wurde Library Not Available in Direct Mode Bibliothek im Direktmodus nicht verf gbar Wenn ein Blitz2 Befehl ausgef hrt werden soll der aus einer Bibliothek stammt die nicht mit dem Programm geladen wurde tritt dieser Fehler auf Wenn ein Programm beispielsweise keine Strings verwendet dann ist die Bibliothek die die String Befehle enth lt nicht Teil des Objektcodes Infolgedessen k nnen auch mit dem X Kommando keine String Befehle ausgef hrt werden Not enough Room in Direct Mode Buffer Kein Platz mehr im Puffer f r Direktmodus Dieser Fehler sollte eigentlich nie auftreten Tritt er dennoch auf so mu die Gr e des Objekt Puffers im Men Compiler Options erh ht werden AT END OF BUFFER Ende des Puffers erreicht Diese Meldung erschient wenn versucht wird mit dem F Kommando ber das Ende des Befehlspuffers hinaus zu gehen s Befehlspuffer 48 Kapitel 7 Blitz2 Objekte e bersicht e Gemeinsamkeiten der Objekte e Maximalwerte Benutzung eines Objekts e Ein Ausgabe Objekte e Objektstrukturen f r Fortgeschrittene e berblick ber die prim ren Blitz2 Objekte e Screens e Windows e Gadgets amp Men listen e Paletten e Bitmaps e Shapes e Sprites e Slices e Dateien e Zusammenfassung berblick ber die Blitz2 Objekte In diesem Kapitel werden die Grundz ge von Blitz2 Objekten behandelt Objekte in Blitz2 sind Strukturen die dazu
15. schlie en und sich nicht darauf zu verlassen da Blitz2 dies beim Programmmende automatisch erledigt Nat rlich ist eine Datei auch ein Ein Ausgabe Objekt Die Befehle FileInput und FileOutput dienen dazu die Ein Ausgabe in eine Datei umzuleiten F r die Befehle Get Put ReadMem und WriteMem ist dies jedoch nicht erforderlich da sie mit einen Parameter vom Typ File versorgt werden Zusammenfassung Objekte in Blitz2 sind Datenstrukturen die von den verschiedenen Bibliotheken verwendet werden und die eine Vielzahl von Einheiten behandeln Blitz2 sorgt f r die Speicherverwaltung der Objekte und gibt sie automatisch am Ende des Programms frei Viele der komplizierten Blitz2 Befehle k nnen durch die Objekte auf einfachere Weise aufgerufen werden Die Anzahl Parameter die bergeben werden mu kann durch das Konzept des aktuellen Objekts minimiert werden Im Laufe der Zeit wird sich die Anzahl der verf gbaren Objekte in Blitz2 sicherlich noch erh hen Ebenso wird die Funktionalit t der Objekte st ndig erweitert 53 Kapitel 8 berblick ber den Blitzmodus Der Blitzmodus e Zaubereien mit Slices e Der Blitter Der Copper Der QAmigamodus e Zusammenfassung Obwohl das Betriebssystem des Amiga allein schon sehr m chtig ist nutzt es doch die Graphik Fahigkeiten die der Rechner besitzt nicht aus Der Blitzmodus ist f r Programmierer wichtig die reibungslose Animationen und Spiele o schreiben wollen
16. Datei auf der Platte ab INSERT FROM DISK l dt eine Datei von der Platte und f gt sie an der aktuellen Cursor Position in den Text ein FORGET entfernt die Markierung eines Textblocks INSERTLINE beginnt eine neue Zeile an der aktuellen Cursor Position DELETE LINE l scht die Zeile auf der sich der Cursor gerade befindet DELETE RIGHT l scht alles rechts vom Cursor bis zum Zeilenende JOIN f gt die n chste Zeile an das Ende der aktuellen Zeile an BLOCK TAB verschiebt den gesamten markierten Textblock um eine Tabulator Position nach rechts BLOCK UNTAB verschiebt den gesamten markierten Textblock um eine Tabulator Position nach links Das SOURCE Men TOP positioniert den Cursor an den Anfang der Datei BOTTOM positioniert den Cursor an das Ende der Datei GOTO LINE positioniert den Cursor an die angegebene Zeile Das SEARCH Men Der Blitz2 Editor kann eine Datei nach einer bestimmten Zeichenfolge wie z B HALLO absuchen FIND sucht die Datei nach einer Zeichenfolge ab Es erscheint der unten n her beschriebene Find Requester NEXT sucht nach dem nachsten Auftreten der zuvor mit FIND angegebenen Zeichenfolge PREVIOUS sucht r ckw rts nach dem vorherigen Auftreten der zuvor mit FIND angegebenen Zeichenfolge 90 REPLACE sucht eine Zeichenfolge und ersetzt sie durch eine andere Es erscheint der selbe Requester wie bei FIND s u e Bei der Auswahl von FIND erscheint der folgende Requester gt gt
17. Der Blitz2 Editor TED Texteingabe e Textbl cke markieren Die Editor Men s Der Blitz2 File Requester Tastaturk rzel Das Compiler Men e Die Compiler Optionen Einleitung Um Programmcode eingeben und compilieren zu k nnen braucht man einen sogenannten Editor Der Blitz2 Editor Ted dient sowohl als Schnittstelle zum Compiler als auch als eigener Editor f r ASCII Texte ASCII ist der Standard f r normalen Text Im folgenden wird Ted in seiner Funktion als eigener ASCII Editor beschrieben Um Ted zu starten klicken Sie entweder auf das Ted Symbol oder geben Sie ted in der Kommandozeile ein Wenn der Editor gestartet ist sollte folgendes Bild auf dem Schirm erscheinen gt gt gt screen shot editor screen lt lt lt Die senkrechten und waagerechten Balken werden Scrollbars Rollbalken genannt Wenn der Text l nger oder breiter als das Fenster ist kann der Rest des Textes in das Fenster gescrollt werden Dies geschieht indem man die Scrollbars mit dem linken Mausknopf verschiebt Unten im Bildschirm befindet sich eine Statuszeile die Informationen ber die Cursor Position bezogen auf den Dateianfang und die Gr e des verf gbaren Speicher des Amiga liefert Mit dem linken Mausknopf kann das Editor Fenster wie jedes andere Amiga Fenster auch vergr ert werden und mit dem Vordergrund Hintergrund Knopf rechts oben kann das Fenster nach vorne geholt oder in den Hintergrund geschoben we
18. Eine weitere ungew hnliche Eigenschaft des Blitz2 File Requesters ist die M glichkeit seine Gr e zu ver ndern indem die rechte untere Ecke des Fensters mit der Maus gezogen wird den linken Mausknopf gedr ckt halten und die Maus bewegen Hierdurch vergr ert sich auch die Datei Liste was hilfreich sein kann wenn sich viele Dateien in einem Verzeichnis befinden Das COMPILER Men Der Blitz2 Editor dient nicht nur zur Texteingabe sondern auch als Entwicklungsumgebung beim Programmieren Hierzu k nnen s mtliche Befehle die zum Compilieren und Austesten eines Programms notwendig sind direkt vom Editor aufgerufen werden ohne diesen verlassen zu m ssen COMPILE amp RUN compiliert bersetzt das im Editor befindliche Programm direkt in den Speicher und startet es wenn es fehlerfrei bersetzt werden konnte RUN startet ein bereits in den Speicher bersetztes Programm CREATE FILE compiliert das Programm und speichert es als ausf hrbare Datei auf der Platte ab OPTIONS wird im n chsten Abschnitt ausf hrlich beschrieben CREATE RESIDENT wandelt das im Editor befindliche Programm in eine residente Datei um Eine residente Datei enth lt alle Makros Konstanten und NewType Definitionen eines Programms in pre compilierter Form soda diese nicht mehr im eigentlichen Programmcode erscheinen m ssen Dadurch erh ht sich die Geschwindigkeit mit der compiliert wird VIEW TYPE dient dazu die Typ Definition einer Variablen anzus
19. Objekts ia es ra rennen 50 Ein Ausgabe Objekte ocio tea A T 50 Objekstrukturen f r Fortgeschrittene ooononiccccnnnnnncoccccnnnncocccnnnnnnonancnn conan nc cnn conan nn nan cn anna cnn AEREE EEEE 51 berblick ber die prim ren Blitz2 Objekte ooococooiononoonononnonononnononcnnononnonnnononnnnonoononnnononnonnonnnnnnnnn 51 Zusammenfassung eier ae nl ee Denen ale 53 Kapitel 8 22 2 e HR als 54 berblick ber den Blitz na dei 54 BerBlitzmodusaa are een Nee A ei lee 54 Zauberelen MIES CSS cinner a A A dd 54 DEr G pper i2 2 A A ehe ee 55 Der Blin A Asa 55 QAmiga M dUs r 2 ea A eee danas 56 Zusammenfassung seele 57 Kapitel O cid AAA A sinne 58 Beispiele f r den Blitzmodus 4444444444444444000nnnnnnnnnnnnnnnnnenennnnnnnnnnnnnnnnnnnnnnnnnnneenennnnnnnnnnnnnnnnnnnen 58 Das Blitten von Teilfig ren 00 a ena Rn ebssieseehen 58 Dual Playfield Slice assests HH Ren ee a Aleta eg sage 59 Doppelte Putte nung icc na testen ee Mais nt ssireteteetate 59 WeichesSer llen 4 2434 n cae A ini 61 Kapitel 10 2 2 a a ht lo at ec indes nee 63 Weiterf hrende Themen 22m adds 63 Residente Datele u 122 Erin T A E Soba NN 63 Betriebssystem Auffufe nn ae nee ee 64 Das Auffinden von Variablen und Labels im Speicher 444444444440400snnnnnnnnnnnnnen nennen 65 O ateicesul be dude cieiaaphecabtoctahivtussauccae caueei E E E diet vo
20. Sie das Symbol des TED von der Blitz2 Programmdiskette in den selben Ordner in dem auch das Blitz2 Symbol ist 3 PLEASE INSERT VOLUME BlitzLibs IN ANY DRIVE Der Grund f r diese Nachricht ist der da sich die Datei DefLibs nicht im selben Ordner wie Blitz2 und TED befindet Wenn DefLibs nicht vorhanden ist versucht Blitz2 alle internen Befehle vom Laufwerk BlitzLibs zu lesen dies sei nur f r fortgeschrittene Benutzer erw hnt Die Beispielprogramme Wenn Sie es bis hierher ohne die oben genannten Probleme geschafft haben k nnen Sie einmal einige Beispiele ausprobieren W hlen Sie LOAD aus dem Men legen Sie die Beispiel Diskette ein und laden Sie eines der Beispiele Alle Dateien mit dem Zusatz bb2 sind Quelldateien die in den Blitz2 Editor Compiler geladen werden k nnen Sobald Sie eine bb2 Datei geladen haben lesen Sie den Quellcode durch und versuchen Sie herauszufinden was das Programm wohl macht Dann w hlen Sie Compile and Run aus dem Men aus Das einzige was jetzt noch schiefgehen kann ist da das aktuelle Verzeichnis nicht stimmt Das aktuelle Verzeichnis Wenn Blitz2 Programme auf Dateien der Platte zugreifen m ssen z B um Graphiken zu laden wird standardm ig immer im aktuellen Verzeichnis danach gesucht Darunter versteht man das Verzeichnis von dem aus Sie das betreffende Programm gestartet haben Damit Blitz2 die ben tigten Dateien findet ist es notwendig vor dem Programmstart in
21. Then gibt an dass der ihm nachfolgende Teil des Codes nur ausgef hrt wird wenn der Ausdruck Wahr also True ergibt Wird das Then weg gelassen wird der gesamte nachfolgende Code auch mehrere Zeilen bis zum Auftreten eines EndIf ausgef hrt x 1 123 If x gt 100 Then Print X ist mindestens 100 gro If x gt 100 Print X ist mindestens 100 gro EndIf 79 Endlf Dieser Befehl wird verwendet um einen 1 Block zu beenden Ein I Block der mit EndIf beendet wird kommt ohne ein Then aus und darf sich ber mehrere Zeilen erstrecken 1 Bl cke d rfen weitere If Bl cke beinhalten x 1 123 If x gt 100 Print X ist mindestens 100 gro EndIf Else Statement Dieser Befehl kann verwendet werden um alternativen Code auszuf hren falls der Ausdruck eines If Blocks Falsch also False ergibt x l 123 If x gt 100 Print X ist gr er als 100 Else Print X ist kleiner als 100 EndIf While Ausdruck Solange es wahr ist Dieser Befehl wird verwendet um einen Teil des Programm Codes solange auszuf hren wie der Ausdruck True ergibt Der nachfolgende Programmteil wird mit einem Wend abgeschlossen Wend l sst die Programmausf hrung zum einleitenden while zur ck springen Ist der Ausdruck True wird Wend bersprungen und die While Schleife ist beendet x l 0 While x lt 100 x X 1 Wend wenn x 100 ist macht das Programm hier weiter W
22. auch die M glichkeit weitere Effekte in vertikaler Richtung mit Hilfe des CustomCop Befehls zu programmieren Im Blitz2 Referenzhandbuch befinden sich Beispiele f r diese Befehle Der Blitter Der Amiga unterst tzt die Darstellung von Graphiken in Form von Bitmaps durch eine spezielle Einrichtung die Blitter genannt wird Blitz2 enth lt eine Reihe von Befehlen mit denen Shapes auf Bitmaps ge blittet werden k nnen und au erdem ein besonderes Scroll Kommando mit denen Teile einer Bitmap unter Zuhilfenahme des Blitters bewegt werden k nnen 55 Es folgt eine kurze bersicht ber die verschiedenen Blitter Befehle in Blitz2 Blit kopiert Shapes auf Bitmaps OBlit dasselbe wie Blit Blitz2 merkt sich aber an welche Stelle die Shape kopiert wurde und l scht sie wieder wenn sie an eine andere Stelle bewegt werden soll BBlit hnlich wie 0B1 it statt die Shape zu l schen stellt Blitz2 jedoch den urspr nglichen Zustand der Bitmap vor dem BBlit wieder her sBlit dasselbe wie Blit aber mit einer Schablonen Funktion die verhindert da bestimmte Bereiche der Bitmap berschrieben werden Block eine schnelle Version von Blit die jedoch nur mit rechteckigen Shapes arbeitet die ein Vielfaches von 16 Pixeln gro sind Scroll kopiert Teile einer Bitmap von einer Stelle zur anderen QAmiga Modus Mit Hilfe des QAmiga oder Amiga Befehls kann vom Blitzmodus zur ck in den Amigamodus gesprung
23. bestimmte Blitz2 Routinen durch die entsprechenden schnelleren Maschinenbefehle ersetzen Es gibt drei Methoden Assembler in Blitz2 zu integrieren 1 zeilenweise auf Variablen mit den Befehlen GetReg und PutReg zugreifen 2 ganze Befehle und Funktionen schreiben 3 eigene Blitz2 Libraries erzeugen GetReg amp PutReg Mit den Befehlen GetReg und PutReg kann auf die BASIC Variablen zugegriffen werden Im folgenden Beispiel wird die Benutzung dieser beiden Befehle erl utert a w 5 Word Variablen benutzen b w 10 GetReg d0 a Wert von a gt d0 GetReg dl b Wert von b gt dl MULU d0 dl PutReg dl c w Wert von dl gt c NPrint c MouseWait Im n chsten Beispiel wird die erste Bitplane der Bitmap 0 invertiert Dabei kann ein beliebiger Ausdruck zusammen mit dem GetReg Befehl verwendet werden Da GetReg nur mit Datenregistern arbeiten kann mu die Bitmap Struktur zun chst in d0 angelegt und dann nach a0 verschoben werden Screen 0 3 ScreensBitMap 0 0 while Joyb 0 0 VWait 15 Gosub inverse Wend End 70 inverse Speicheradress der Bitmap Struktur gt d0 GetReg d0 Addr BitMap 0 MOVE 1 d0 a0 MOVEM a0 d0 dl1 MULU d0 dl LSR 1 2 d1 SUBO 1 d1 MOVE 1 8 a0 a0 loop NOT 1 a0 DBRA dl loop Return Prozeduren in Assembler Noch effizienter ist es ganze Funktionen und Befehle als Assembler Routinen zu schreiben Die Parameter werden automatisch in den Registern d0 d5 abgelegt und bei Fu
24. bezeichnet einen Hexadezimal Wert speed3 q 500 7 Quick Variablen haben eine Genauigkeit von 3 Dezimalpunkten light _speed f 3e8 e ist der Exponent d h 3x10 8 19 Der Default Datentyp Wird bei der Vereinbarung einer Variablen kein Zusatz angegeben so wird automatisch der Default Datentyp Vorbesetzung zugewiesen Ist nichts weiter angegeben so ist dies Quick Um die Vorbesetzung zu ndern benutzt man den Befehl DEFTYPE Alle Variablen die anschlie end ohne ausdr ckliche Angabe des Datentyps vereinbart werden sind vom neuen Default Typ Folgt dem Befehl DEFTYPE unmittelbar eine Liste von Variablennamen dient er dazu den Datentyp f r diese Variablen zu bestimmen die Vorbesetzung jedoch unver ndert zu lassen Der Befehl bekommt dadurch also eine andere Bedeutung Das nachfolgende Beispiel erl utert den Gebrauch der beiden Varianten von DEFTYPE a 20 ja ist vom Typ Quick DEFTYPE f Der neue Default Typ ist jetzt Float b 20 b ist vom Typ Float DEFTYPE w c d Cc amp d sind vom Typ Word Default ist immer noch Float Anmerkung die erste Form von DEFTYPE kann mit ndere Default Typ bersetzt werden die zweite Form bedeutet Definiere Typ Als Default Typ kann auch ein NewType festgelegt werden n heres dazu im n chsten Abschnitt Es gibt noch weitere Blitz2 Strukturen wie Data Peek Poke sowie Funktion
25. dem Befehl Free zerst rt werden Wurde ein Objekt bei Beendigung des Programms nicht gel scht so erledigt Blitz2 das automatisch Der Befehl Free BitMap gibt den f r eine BitMap reservierten Speicherplatz frei Dieser Befehl ist n tzlich wenn ein Objekt tempor r ben tigt wird und der Speicherplatz sp ter im Programm noch gebraucht wird Ansonsten kann man es Blitz2 berlassen am Programmende aufzur umen Maximalwerte Die Anzahl der Objekte eines Typs die vom Programm verwaltet werden k nnen ist begrenzt Das Maximum l t sich f r jeden Objekt Typ im Men Compiler Options angeben Wird versucht mehr als die maximale Anzahl eines Objekt Typs zu erzeugen tritt der Laufzeitfehler Value Out Of Maximum Range Maximalwert berschritten auf Benutzung eines Objekts Viele Befehle setzen voraus das zuvor bestimmte Objekte erzeugt wurden So mu z B vor der Ausf hrung des Befehls B1it kopiert eine Shape auf eine Bitmap sowohl ein Shape Objekt als auch ein Bitmap Objekt existieren Beim Aufruf des Blit Befehls wird angegeben welches Shape Objekt geblittet werden soll und Blitz2 kopiert die Shape auf die aktuelle Bitmap Use BitMap 0 Bitmap 0 zur aktuellen Bitmap machen Blit 3 10 10 kopiere Shape 3 auf die aktuelle Bitmap Durch den Use Befehl wird die Bitmap 0 zur aktuellen Bitmap gemacht Auch bei anderen Objekten wie Screens Windows und Paletten mu zun chst der Use B
26. der korrekten Anzahl der Parameter verwendet werden als auch daf r bewu t eine variable Anzahl von Parametern an das Makro zu bergeben Das folgende Makro pr ft ob genau zwei Parameter bergeben wurden und erzeugt gegebenenfalls eine 68 Compiler Meldung Macro Vadd CNIF 0 2 Te 1r2 CELSE CERR Falsche Anzahl Parameter in Vadd Ha ig Z oO End Macro Vadd a Wenn Sie dieses Programm bersetzen lassen gibt der Compiler die entsprechende Meldung aus sobald die Stelle vadd a erreicht ist Die Anweisung CERR ist eine spezielle Compiler Direktive die zur Erzeugung von Anwender spezifischen Fehlermeldungen dient Rekursive Makros Makros k nnen auch rekursiv programmiert werden d h sie k nnen sich selbst aufrufen Im folgenden Beispiel druckt das Makro den ersten Parameter und ruft sich dann anschlie end selbst ohne den ersten Parameter auf Dadurch wird praktisch die Liste der Parameter nacheinander abgearbeitet bis das Null Zeichen d h kein Parameter erreicht ist Macro dolist bis zu 16 Variablen auflisten NPrint 1 CSIF SZ Sew dolist 2 3 47 5 6 7 8 97 ar by Cy ds er fr 3 CEND End Macro dolist a b c d e f g h 1 ouseWait Funktionen durch Makros ersetzen Makros eignen sich besonders daf r Funktionen zu ersetzen die keine lokalen Variablen ben tigen daf r aber mehr als einen Wert zur ckliefern sollen Im folgenden Makro project werden die
27. die Schritte einer For Next Schleifen nicht einzeln angezeigt sondern die Schleife wird bis zu ihrem Ende ausgef hrt Au erdem werden Prozedur Aufrufe wie ein normaler Befehl behandelt es wird also nicht in Prozeduren hineingesprungen Dies ist hilfreich wenn z B die Arbeitsschleife des Hauptprogramms verfolgt werden soll ohne da die Ausf hrung der einzelnen Unterprogramme angezeigt wird Wiederaufnahme des normalen Ablaufs Um das Programm normal weiterlaufen zu lassen dient das Kommando R Run Wenn der Debugger mit dem STOP Befehl aktiviert wurde zeigt der Pfeil auf die Zeile mit dem STOP Dieser Befehl mu zun chst mit dem Kommando I Ignore bersrpungen werden Das gleiche gilt f r alle Befehle die einen Laufzeitfehler verursacht und dadurch den Debugger aktiviert haben Um den Debugger zu verlassen und wieder in den Editor zur ckzukehren wird entweder das Kommando Q Quit oder die ESC Taste benutzt Der Befehlspuffer Der Debugger merkt sich alle Befehle die der Rechner ausgef hrt hat bevor das Programm angehalten wurde in einem speziellen Puffer Mit den Kommandos B und F kann sich der Benutzer in diesem Puffer bewegen Mit dem Kommando B Backup k nnen r ckw rts die zuvor vom Rechner ausgef hrten Befehle angesehen werden und zwar von der Stelle aus an der das Programman angehalten wurde Die aktuelle Position in 47 diesem Puffer wird mit einem Hohlpfeil angezeigt Das Komman
28. die Sequenz SetErr errohandler EndSetErr am Anfang und ClrErr am Ende des Abschnitts eingef gt Im folgenden Beispiel blinkt der Bildschirm auf wenn der Aufruf von LoadShapes scheitert SetErr DisplayBeep_ 0 End EnsSetErr LoadShapes 0 dateiname ClrErr Der Blitz2 Debugger Tritt ein Laufzeitfehler in einem Programm auf das vom Editor aus gestartet wurde so wird der Debugger aktiviert vorausgesetzt er wurde im Compiler Options Men eingeschaltet Ist in dem Programm selbst schon ein Error Handler aktiv so wird der Debugger nicht aktiviert 45 Der Debugger kann auch durch die Ctr Alt C Tastenkombination aktiviert werden Au erdem dient der STOP Befehl dazu das Programm zu unterbrechen und den Debugger aufzurufen Der Debugger ist ein unentbehrliches Werkzeug bei der Fehlersuche Seine F higkeit von einer Stelle aus r ckw rts durch den Programmcode zu gehen der vorher ausgef hrt wurde bietet eine ausgezeichnete M glichkeit Fehler zu lokalisieren Alle Befehle des Debuggers werden aufgerufen indem die Ctrl und die linke Alt Taste gleichzeitig mit der Taste f r das Kommando gedr ckt werden Es gibt zwei verschiedene Arten von Kommandos solche die immer w hrend des Programmlaufs verf gbar sind und solche die nur dann verf gbar sind wenn das Programm gestoppt wurde Wenn ein Laufzeitfehler auftritt wird automatisch das Keylock eingeschaltet Keylock bedeu
29. eine Variable ohne typ Suffix angegeben wird wird automatisch der Quick Typ angenommen Der Wertebereich liegt zwischen 32768 und 32767 bei einer Genauigkeit von 1 65536 Siehe auch den Abschnitt ber Datentypen Wenn alle Variablen des Programms standardm ig vom Typ Word sein sollen m ssen Sie folgende Zeile am Anfang des Programms einf gen DEFTYPE w alle Variablen ohne Suffix sind Word Ist eine Variable einmal vereinbart worden ist ihr Typ damit festgelegt und eine Angabe des typ Zusatzes ist bei weiteren Zugriffen nicht mehr n tig Im Gegensatz zu anderen BASIC Versionen f gt das Print Kommando nicht automatisch einen Zeilenvorschub an das Ende des ausgegebenen Textes an Wenn dieses gew nscht wird ist der NPrint Befehl zu verwenden Die Funktion Edit ersetzt das ltere Kommando Input Ebenso wird das Semikolon statt des Befehls REM f r Kommentare verwendet und es besitzt nicht mehr die alte Bedeutung in Zusammenhang mit dem Print Befehl Ein eigenst ndiges standalone WorkBench Programm Aus dem Rate Programm kann ein eigenst ndiges Programm mit zugeh rigem Symbol Icon gemacht werden da von der Workbench aus gestartet werden kann Die folgenden Zeilen sind am Anfang des Programmcodes einzuf gen Die Texte hinter dem Semikolon sind wie bereits erw hnt Kommentare Zahlen Rate Programm wBStartup noetig um Prog von der Workbench aus zu starten FindScreen 0 vorderste Intuitio
30. erzeugen w rde Es kann vorkommen da eine ganzzahlige Variable Integer vorzeichenlos sein soll also nur positive Werte annehmen kann Byte Variablen sollen z B h ufig einen Wertebereich von 0 bis 255 haben statt 128 bis 127 Um dies zu erm glichen mu die berpr fung von berlauf Fehlern in der Compiler Option Error Checking ausgeschaltet werden Der Datentyp String Ein String ist eine Variable die dazu dient eine Zeichenkette zu speichern also Text Eine String Variable wird mit dem Zusatz s oder dem traditionellen Zeichen gekennzeichnet Anders als bei numerischen Variablen mu dieser Zusatz grunds tzlich immer angegeben werden Dies h ngt damit zusammen da der Name einer String Variablen gleichzeitig auch f r eine numerische Variable verwendet werden kann Das folgende Beispiel ist also zul ssig aS Hallo a w 20 NPrint a a Systemkonstanten Unter Systemkonstanten werden spezielle Variablen verstanden die von Blitz2 dazu verwendet werden bestimmte unver nderliche Werte zu speichern Die folgenden Variablen Namen sind also reserviert f r die angefuhrten Werte Pi 3 1415 On 1 off 0 True 1 False 0 Zusammenfassung der einfachen Datentypen Blitz2 kennt 6 einfache Datentypen die Typen Byte Word und Long sind vorzeichenbehaftete 8 16 und 32 Bit Gr en 21 Der Datentyp Quick ist eine Festkomma Gr e die nicht so genau ist wie Flie komma Gr en aber schneller Der Daten
31. glicht Am Ende dieses Kapitels befindet sich eine genauere Beschreibung des File Requesters SAVE speichert die im Editor befindliche Datei auf der Platte ab Es erscheint ein File Requester f r die Auswahl des Dateinamens DEFAULTS bestimmt das Aussehen des Blitz2 Editors Hier wird die Farbauswahl und die Schriftgr e eingestellt und bestimmt ob der Editor beim Speichern von Dateien ein Symbol Icon anlegen soll Au erdem kann eingestellt werden wie nahe der Cursor an den Rand des Bildschirms gelangen darf bevor der Text gescrollt wird Alle Einstellungen werden in der Datei 89 1 BlitzEditor opts gespeichert ABOUT zeigt die Versionsnummer und Copyright Vermerke PRINT druckt die Datei auf dem Standard Druckerkanal PRT CLI startet eine Kommandozeile Command Line Interface in der Sie Amiga Befehle eingeben k nnen Mit dem Befehl ENDCLI kehren Sie zur ck in den Editor CLOSEWEB schlie t die Workbench wenn diese ge ffnet ist Die ist n tzlich wenn der Speicherplatz sehr knapp wird da hierdurch etwa 40KB frei werden QUIT beendet Ted und Sie kehren zur Workbench oder zur Kommandozeile zur ck Das EDIT Men COPY kopiert einen zuvor mit der Maus oder der F1 F2 Kombination markierten Textblock an die aktuelle Cursor Position Hierf r kann auch die Taste F4 verwendet werden KILL l scht den markierten Textblock auch durch SHIFT F3 zu erreichen BLOCK TO DISK speichert den markierten Textblock als ASCII
32. in geschweiften Klammern eingeschlossen Die Klammern m ssen auch dann angegeben werden wenn keine Parameter bergeben werden sollen Dieses Programm berechnet die Fakult ten der Zahlen von 1 bis 5 in einer Schleife Dabei wird im Hauptprogramm die Variable k als Schleifenindex verwendet Gleichzeitig wird in der Prozedur ebenfalls eine Variable mit dem Namen k verwendet Dies ist deshalb zul ssig weil die Variable k der Prozedur fact dort lokal vereinbart wurde und v llig unabh ngig von der Variablen k im Hauptprogramm ist Die Gr e k des Hauptprogramms wird globale Variable genannt Es k nnen bis zu sechs Variablen als Parameter an eine Prozedur bergeben werden Wenn mehr als sechs Parameter ben tigt werden k nnen diese als spezielle shared globale Variable vereinbart werden siehe Globale Variablen Variablen die an eine Prozedur als Parameter bergeben werden d rfen nur einfache Datentypen sein NewType Variablen k nnen nicht bergeben werden Wohl aber k nnen Zeiger Variablen bergeben werden Funktionen Blitz2 erlaubt es auch Prozeduren zu schreiben die einen Wert an das Hauptprogramm zur ckliefern Solche Prozeduren werden Funktionen genannt Das folgende Beispiel zeigt dieselbe Prozedur f r Fakult ten diesmal aber als Funktion realisiert Function fact n a 1 For k 2 To n a a k Next Function Return a End Function For k 1 To 5 NPrint fact k Next ouseWait Durch die Anwei
33. mehreren Routinen verwendet werden und welche Routinen noch berarbeitet werden m ssen Eine solche Liste dient auch dazu Probleme im voraus zu erkennen Einer der gr ten Fehler beim Programmieren ist es mit einer Routine zu beginnen die zum eigenen Funktionieren die Existenz mehrerer anderer Routinen voraussetzt Es sollten immer zun chst solche Routinen entwickelt werden die unabh ngig getestet werden k nnen So vermeidet man Situationen wie diese man hat gerade 5 neue ungetestete Routinen eingebunden und nun mu man versuchen einen Fehler zu finden der in jeder dieser Routinen aufgetreten sein kann Modularit t ist auch bei der Entwicklung eines Programmes der effektivste Weg Lesbarkeit des Programms Die Lesbarkeit des Programmcodes ist der n chste Punkt auf der Priorit tenliste bei der Programmentwicklung Die beiden wesentlichen Aspekte sind das Einr cken von geschachtelten Anweisungen und die Minimierung der Zeilenl nge Das folgende Beispiel zeigt das Einr cken von verschachteltem Code 98 If ReadFile 0 phonebook data Filelnput 0 While NOT Eof 0 If AddItem people For i 0 To num 1 info i Edit 128 Next EndIf Wend EndIf Hierdurch wird es m glich auf dem ersten Blick zu erkennen welche Anweisungen innerhalb von welcher Struktur ausgef hrt werden Ebenso kann leicht ermittelt werden ob f r jedes If auch ein Endlf oder f r jedes While auch ein Wend vorh
34. mitf hrt Beide werden durch die Dim List Anweisung auf 0 gesetzt Elemente zu einer Liste hinzuf gen Zu Beginn ist jede Liste leer Listenelemente k nnen durch die Funktionen AddItem und AddLast hinzugef gt werden Da Listen irgendwann einmal voll sind liefern diese beiden Funktionen den Wert Wahr oder Falsch zur ck je nachdem ob das Element eingef gt werden konnte oder nicht Im folgenden Beispiel wird ein Alien zu der zuvor dimensionierten Liste hinzugef gt If AddItem Aliens Aliens x Rnd 320 Rnd 200 EndIf In beiden Aufrufen von Aliens wurde kein Index in den Klammern angegeben Obwohl Blitz2 keine Fehlermeldung ausgeben w rde wenn ein solcher Index vorhanden w re sollten Listen NIEMALS mit einem Index aufgerufen werden Die leeren Klammern verweisen auf das aktuelle Listenelement in diesem Fall das gerade hinzugef gte Da AddItems den Wert Falsch zur ckliefert wenn die Liste voll ist kann eine While Wend Schleife verwendet werden um die gesamte Liste aufzuf llen while AddItem Aliens Aliens x Rnd 320 Aliens y Rnd 200 Wend Die Schleife wird solange durchlaufen bis die Liste gef llt ist Wenn man eine feste Zahl z B 20 von Eintr gen in die Liste einf gen m chte k nnte man auch eine For Next Schleife verwenden m te aber trotzdem nach jedem Einf gen den Zustand der Liste pr fen For i 1 To 20 If AddItems Aliens Aliens x Rnd 320 Aliens y R
35. wird Blitz2 angewiesen statt einer Variablen dieses Typs lediglich einen Zeiger Pointer auf eine solche Variable anzulegen Anschlie end kann die Variable Struktur behandelt werden wie eine interne Blitz2 Variable Mit dem Befehl Peek wird ein String aus einer Betriebssystem Struktur direkt in eine String Variable eingelesen bis eine Null CHRS 0 gelesen wurde Das Auffinden von Variablen und Labels im Speicher Mit dem kommerziellen Und Zeichen 4 engl ampersand wird die Adresse einer Variablen im Speicher referenziert r Ein Beispiel fuer amp um die Adress iner Var zu finden Var 1 5 Poke l amp Var 10 NPrint Var MouseWait Diese Methode entspricht der Funktion VarPtr in anderen BASIC Versionen Wird die Adresse einer String Variablen ermittelt so zeigt der Pointer auf das erste Zeichen des Strings Die L nge des Strings ist in einem Doppelwort an Adresse 4 abgespeichert Das Fragezeichen dient zum Auffinden der Adresse einer Sprungmarke Label des Programms im Speicher Zum Beispiel so r Ein Beispiel das die Adress ines Programms findet OVE 10 There Sogar Assembler Code hier NPrint Peek w There ouseWait End There Dc w 0 und hier auch Die oben beschriebenen Methoden sind im Grunde nur f r Programmierer mit Assembler Erfahrung von Interesse die ihre Ziele auf unkonventionelle Weise verfolgen Konstanten Unter einer Konstanten ve
36. 0 640 61 while Joyb 0 0 VWait Show db x y xa QLimit xatMouseXSpeed 20 20 ya QLimit yatMouseYSpeed 20 20 x QWrap x xa 0 320 y QWrap y ya 0 256 Wend 62 Kapitel 10 Weiterf hrende Themen e Residente Dateien Betriebssystem Aufrufe e Auffinden von Variablen und Labels im Speicher e Konstanten Bedingte Compilierung e Makros e Inline Assembler Residente Dateien Programme die mit einer gro en Anzahl von NewTypes Makros oder Konstanten arbeiten k nnen einfacher geschrieben werden in dem sogenannte residente Dateien verwendet werden Eine residente Datei enth lt alle NewTypes Makros und Konstanten in vor compilierter d h bin rer Form Dadurch k nnen alle diese Definitionen aus dem eigentlichen Programmcode weggelassen werden wodurch der Code kleiner wird und sich schneller compilieren l t Um eine solche residente Datei zu erzeugen m ssen alle NewType Definitionen Makros und Konstanten in einem Programm zusammengefasst werden Dieses Programm wird dann in residente Form bersetzt Es folgt ein Beispiel f r ein solches Programm NEWTYPE test a l b w End NEWTYPE acro mac NPrint Hallo End Macro const 10 Jetzt mu das Programm lediglich mit COMPILE amp RUN compiliert werden und anschlie end mit CREATE RESIDENT Compiler Men in eine residente Datei gewandelt werden Es erscheint dann ein File Requester der Sie a
37. 1 58 Return Dual Playfield Slice Das folgende Programm demonstriert die Verwendung von Dual Playfield Displays Wie zuvor beschrieben wurde dienen Dual Playfields dazu zwei Bitmaps gleichzeitig darzustellen Hierzu dienen die beiden Befehle ShowF und ShowB Das Makro rndpt f gt einfach nur den Code Rnd 640 Rnd 512 in den Quellcode ein So wird z B das Kommando Line rndpt rndpt Rnd 7 vom Compiler zu folgender Zeile erweitert Line Rnd 640 Rnd 512 Rnd 640 Rnd 512 Rnd 7 Wiederum mu die erweiterte Form des S1ice Befehls verwendet werden und die Flags auf fffa gesetzt werden um eine niedrigaufl sende lores scrollbare Dual Playfield Anzeige zu erhalten Man kann sich das Dual Playfield als zwei getrennte Displays vorstellen mit dem ShowF Befehl wird der Vordergrund in Bitmap 1 positioniert mit ShowB wird der Hintergrund in Bitmap 0 positioniert Dabei mu die x Position des jeweils anderen Displays an die Befehle ShowF und ShowB bergeben werden soda Blitz2 intern die Positionen korrekt berechnen kann BLITZ acro rndpt Rnd 640 Rnd 512 End Macro BitMap 0 640 512 3 For i 0 To 255 Line rndpt rndpt Rnd 7 Next BitMap 1 640 512 3 For i 0 To 255 Circlef rndpt Rnd 15 Rnd 7 Next Slice 0 44 320 256 Sfffa 6 8 16 640 640 while Joyb 0 0 VWait x1 160 Sin r 160 y1 128 C0s r 128 x2 160 Sin r 160 y2 128 Cos r 128 ShowF 1 x1 y1 x2 ShowB 0 x2 y2 x1 r 05
38. 56 100 hex zur ck ein Close Winwow Ereignis liefert 512 200 hex Auf Seite 25 5 lt lt lt gt gt gt des Referenzhandbuchs befindet sich eine vollst ndige Liste der Events String Gadgets String Gadgets sind Eingabefelder in die der Benutzer Texteingaben mit der Tastatur vornehmen kann Im folgenden Beispiel werden 3 Eingabefelder f r dezimale hexadezimale und bin re Ein und Ausgabe erzeugt Wenn der Benutzer eine Zahl in eines der Gadgets eintr gt erh lt das Programm eine Gadgetup Nachricht Die Funktion GadgetHit liefert dann die Nummer des Gadgets in dem die Eingabe erfolgte Anschlie end konvertiert das Programm die Zahl in die anderen beiden Zahlensysteme und gibt das Ergebnis in allen Gadgets aus Mit dem Befehl ActivateString wird erreicht da der Benutzer nicht erst mit der Maus auf eines der Gadgets klicken mu bevor etwas eingegeben werden kann r Dezimal Hex Bin r Konverter FindScreen 0 StringGadget 0 64 12 0 0 18 144 StringGadget 0 64 26 0 1 18 144 StringGadget 0 64 40 0 2 18 144 Window 0 100 50 220 56 1008 BASIS KONVERTER 1 2 0 Locate 2 04 Print DEZIMAL Locate 2 18 Print HEXS Locate 2 32 Print BINARS DEFTYPE 1 value Repeat ev 1l WaitEvent If ev 40 Gadget up Event Select GadgetHit Case 0 value Val StringTexts 0 0 Case 1 r UCase StringText 0 1 value 0 i Len r b 1 while i gt 0 a A
39. Ansatz zur Steuerung der Amiga Grafikhardware Die Anzeige des Amiga wird durch den Koprozessor Copper gesteuert dieser f hrt in jedem Frame eine Liste von Anweisungen aus Also 50 Mal pro Sekunde auf PAL Amigas Der Kathodenstrahl der Zeile f r Zeile ber den Bildschirm geht und jedes einzelne Pixel zeichnet wird durch eine Reihe von Hardware Registern gesteuert Der Copper hat hierbei die Aufgabe alles synchron zu halten Eine Copperlist beinhaltet Informationen ber die Farben Bitplanes Sprites die aktuelle Aufl sung und vielem mehr Diese Informationen ben tigt der Kathodenstrahl Video Strahl um die Anzeige zu rendern Initialisierung Im Gegensatz zu Slices welche angezeigt werden solbald sie initialisiert werden ben tigt die Display Library sogenannte Copperlisten zur Initialisierung Diese Copperlisten werden mit InitCopList erstellt Die Funktion CreateDisplay erzeugt ebenfalls eine Copperliste Ein wichtiger Unterschied zu Slices ist dass diese jedesmal Speicher allozieren wenn eine nderung der Anzeige erforderlich ist w hrend die Display Library mehrere Copperlisten initialisieren kann bevor das Display erzeugt wird Es gibt zwei Formen von InitCopList Die kurze Variante erfordert lediglich die Copperlisten Nummer und die entsprechenden Flags Die H he des Displays ist dann auf 256 Pixel voreingestellt Die Breite des Displays kann 320 640 oder 1280 sein je nachdem welche Aufl sung und Farbtiefe man mit den Flags d
40. Blitz wei wo der Handler zuende ist Cirint Type Dieser Befehl wird verwendet um alle Interrupt Handler fur den Typ Type zu entfernen Wurden zuvor mittels Setint Interrupt Handler f r einen bestimmten Interrupt definiert so k nnen diese mit C1rInt wieder gel st werden Dies ist n tzlich wenn man nur f r einen bestimmten Zeitraum auf Interrupts reagieren m chte und danach die Rechenzeit f r andere Unterroutinen ben tigt oder wenn die Interrupts dann schlicht nicht mehr 86 von Belang sind SetErr Fehler zu mir Mit SetErr hat man die M glichkeit eigene Handler f r Laufzeitfehler in Blitz zu schreiben Zwar behandelt Blitz die Laufzeitfehler immer noch selbst aber danach kommen die eigenen Handler zum Einsatz Ein SetErr muss immer mit einem End SetErr abgeschlossen werden End SetErr Dieser Befehl muss immer als Abschluss eines SetErr Blocks stehen ansonsten w rde auch nachfolgender wahrscheinlich nicht dazugeh riger Code als Fehler Handler angesehen In der Regel gibt es f r jeden Block Typ auch ein End Funktionsname ClsErr Mit ClsErr wird ein Error Handler entfernt der zuvor mittels SetErr definiert wurde ErrFail Diese Funktion wird verwendet um in Error Handlern einen normalen Fehler auszul sen der bewirkt dass der Code nach dem Error Handler weiter ausgef hrt wird lt hier gibt es ein Ubersetzungsproblem ich bin dankbar f r jede Erkl rung 87 Anhang 1
41. Copyright Copyright 1993 by Acid Software eine Abteilung von Armstrong Communications Limited New Zealand Kein Teil des Handbuchs darf ohne schriftliche Genehmigung von Acid Software in irgendeiner Form Fotokopie Mikrofilm oder ein anderes Verfahren reproduziert bersetzt oder unter Verwendung elektronischer Medien verarbeitet vervielf ltigt oder verbreitet werden Der Vertrieb dieses Produkts ist nur f r den urspr nglichen K ufer vorgesehen Rechtm ige Benutzer dieses Programms werden hiermit erm chtigt das Programm und seine Bibliotheken von dem gelieferten Medium in den Speicher des Computers zu laden um das Programm auszuf hren Vervielf ltigung Kopieren Verkauf oder anderweitiger Vertrieb des Produkts ist unrechtm ig Anmerkung Acid Software erhebt keine urheberrechtlichen Anspr che auf Software die mit Blitz2 von rechtm igen Nutzern entwickelt wurde Haftungsaussschlu Acid Software bernimmt keine Verantwortung f r die Fehlerfreiheit von Blitz2 oder hiermit entwickelter Software Acid Software wird sich bem hen alle Probleme die registrierte Benutzer mit dem Produkt haben zu beheben und die Benutzer zu unterst tzten Entwickelt von Mark Sibly unter Verwendung von HiSoft s DevPac2 Druck UniPrint Auckland New Zealand Diese Handbuch wurde mit Soft Logik Page Stream2 amp Page Liner erstellt Zus tzliche bersetzungen Vervollst ndigung und Bearbeitung f r das PDF Format mit verlinktem Inhal
42. Dieser Effekt tritt auf wenn beide Bitplanes unterschiedlich schnell gescrollt werden Beachte dass es auf AGA Maschinen m glich ist zwei 16 farbige Bitmaps zu verwenden wenn dualplayfields aktiviert ist und die Anzahl der Bitplanes auf 8 gesetzt wird Sprites Die Anzahl der verf gbaren Sprites h ngt von der Art der Anzeige und den Fetchmode Einstellungen ab Die meisten AGA Modis erfordern dass das Display hoizontal verkleinert wird um 8 Sprites gleichzeitig darstellen zu k nnen Aktuell kann dies nur durch die Verwendung der Funktion DisplayAdjust erreicht werden Beispiele hierzu sind auf der Blitz Examples Diskette zu finden Die AGA Hardware erm glicht dem Programmierer die Nutzung von LowRes HighRes und SuperHighRes Sprites Die h heren Aufl sungen erm glichen es einem Grafiker Dithering der gezielte Einsatz von Pixel Rauschen um harte Farb berg nge zu vermeiden einzusetzen Dies ist besonders dann notwendig wenn drei farbige Sprites verwendet werden sollen Gro e dithered HighRes Sprites k nnen oft besser aussehen als 16 farbige LowRes Sprites Beachte dass es unrealistisch ist 4 Bitplanes und mehr als 3 Sprites zu verwenden Das Ergebnis der Justierung die hierf r notwendig w re w re ein wirklich schmales Display FetchMode AGA Hardware gestattet es dem DMA Bitplane Daten in 16 32 oder 64 Pixel Gruppen zu verwalten Je gr er die Gruppen sind umso mehr Bandbreite bleibt dem Prozessor Besonders
43. E N bhesthcaeavesaetedn eee 79 Stop Programm anhalte i ses aaraa a E E AAE E E AEA E EA E EE EET 79 If Ausdruck Then Wenn Ausdruck Wahr dann 424444444444444snnnnnnnnnnnnnnennnnnnnnnnnen 79 E eann a E E a E E ca ie r A E T 80 Else Statement lit adi 80 While Ausdruck Solange es wahr iSt ooooonoocccnccnnocccccccononancnncnonnnnnonnnnnnnnnnnn conan nana nc nano nn nn ncn anna nancnnnnno 80 Wend O a OO 80 Select Ausdruck Wer ist der Richtige oooooninocccnnnnnniccccnnononcnannncnnnonncnnnnnnnn ocn nn cnn nn cnn cnn nar nca nn nnnnnnnnn 81 Case Ausdruck see ion das 81 D eV OR TO 81 End Select sc ee N CS an re en ee eer NARRA 82 For Var Ausdruck1 To Ausdruck2 Step Ausdruck3 ooooooccccccccccnnncnnononononcncnononcnnnnncnnannnnnnnnnnnncnncnnns 82 Ne eee ten ied Be eda 82 Repeater ner Ma ac ee ii 82 Until Ausdruck Bis es wahr WilO loooooooooccccccccnccccccccccnnnnnnnononnnncnnnnnnnnnnnnnnnnnnnnnn nn n nn AREEN EEEE nr rrr nina 83 Forever Endlosschleife 22 2 A nen 83 Pop Gosub For Select lf While Repeat 224444444n4 nn nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennen nenn 83 MouseWait Lauscht der Maus 444444444440400snnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnrrennne nn 83 VWalt Frames imsi a a als een a allen Ra 83 Statement Namef Parameter 1 Parameter 2 4 4444000400snnnnnnnnnsnnnnnnne
44. Maus Dieser Befehl stoppt die Ausf hrung des Programms solange bis der Benutzer die linke Maustaste dr ckt Ist die linke Maustaste in dem Moment in dem das Programm ein MouseWait erreicht bereits gedr ckt wird das MouseWait ignoriert und das Programm fortgesetzt MouseWait sollte nur zum testen des Programms eingesetzt werden da es das Multitasking eines Amiga recht stark verlangsamt VWait Frames VWait h lt das Programm solange an bis der Kathodenstrahl Video Strahl wieder die erste Zeile des Bildschirms erreicht Der optionale Parameter Frames erlaubt es eine Anzahl von Durchl ufen anzugeben 83 die der Strahl unternehmen soll bevor das Programm fortgesetzt wird Beispiel Ein PAL Amiga baut den Bildschirm 50 Mal pro Sekunde neu auf Ein Vwait 50 w rde das Programm also exakt eine Sekunde lang warten lassen VWait ist sehr n tzlich um Animationen mit dem Bildschirm zu synchronisieren So kann man sicher stellen dass keine nderungen am Inhalt eines Displays vorgenommen werden solange das Bild noch aufgebaut wird Statement Name Parameter 1 Parameter 2 Gosub und Goto wurden bereits besprochen Statement ist die n chste Stufe dieser Unterroutinen W hrend man mit Gosub und Goto schlicht an eine andere Stelle des Programms springt kann man einem Statement noch Parameter bergeben mit denen dieses Statement arbeiten soll Sicher k nnte man auch globale Variablen einsetzen und eine Unterroutine damit arbeiten las
45. Parameter x y und z auf eine zweidimensionale x y Ebene projiziert Das Ergebnis kann dann wiederum als Parameter f r Zeichenbefehle verwendet werden Macro project xm 1 9 2 6 ym 1 3 2 6 3 7 End Macro xm 320 ym 256 Screen 0 28 ScreensBitMap 0 0 For z 15 To 15 For y 15 To 15 For x 15 To 15 Circlef project x y Z 3 X amp y amp z Next Next Next MouseWait Das CMake Zeichen Das Zeichen hat eine besondere Bedeutung es dient dazu das Ergebnis eines Ausdrucks als Literal d h nicht als Wert sondern als Zeichen wiederum in den Code einzuf gen Dies kann sehr n tzlich sein wenn z B Variablennamen oder Labels erzeugt werden sollen die sich zum einen Teil aus einem Parameter 69 und zum anderen Teil aus einem konstanten Ausdruck zusammensetzen var2 20 var3 30 acro lvar NPrint var 1 End Macro lvar 2 1 MouseWait In diesem Beispiel w rde ohne das CMake Zeichen der Wert 21 ausgegeben werden da der Ausdruck var 1 mit dem Parameter 2 1 zu var2 1 ersetzt werden w rde Durch das CMake Zeichen wird nun aber der als Parameter bergebene Ausdruck zun chst ausgewertet und erst dann erfolgt die Ersetzung es ergibt sich var3 Inline Assembler Es besteht die M glichkeit Maschinenbefehle des 68000 innerhalb von Blitz2 Programmen mit Hilfe des Inline Assemblers aufzurufen Dadurch k nnen erfahrene Programmierer ihre Programme beschleunigen indem sie
46. Struktur verwendet und die Listenverwaltung ist obendrein auch noch schneller Listenelemente l schen Oftmals ist es notwendig ein Element aus der Liste zu entfernen nachdem es bearbeitet wurde Hierzu dient die Funktion Kil1Item In diesem Beispiel wird wiederum die Alien Liste verwendet ResetList Aliens while NextItem Aliens If Aliens flags 1 wenn flag 1 KillItem Aliens Element l schen EndIf Wend Nach dem Aufruf von KillItem zeigt der Listenzeiger auf das vorhergehende Element und macht es damit zum aktuelle Element Dadurch wird in der Schleife kein Element bersprungen nachdem eines gel scht wurde Listenstrukturen Es ist zwar m glich auf Listenelemente wie auf herk mmliche Feldelemente durch Angabe des Index zuzugreifen dies sollte aber niemals gemacht werden Die logische Reihenfolge der Elemente in der Liste ist nicht notwendigerweise die selbe wie die Reihenfolge in der die Elemente im Speicher abgelegt sind Intern besitzt jedes Listenelement einen Zeiger auf den Vorg nger und den Nachfolger Wenn Blitz2 auf das n chste Element zugreifen will richtet es sich nur nach dem Zeiger auf den Nachfolger an welcher Speicherstelle dieser sich befindet ist v llig unerheblich Beim Hinzuf gen eines Elementes wird dieses an einer beliebigen Stelle im Speicher untergebracht Seine Speicheradresse wird im Nachfolger Zeiger des vorhergehenden Elementes hinterlegt und dessen alter Wert wird in de
47. To Schleife Repeat Dieser Befehl wiederholt wie die While Schleife einen Code Block bis ein bestimmter Ausdruck True wahr ergibt Repeat leitet eine Repeat Until Schleife ein Im Gegensatz zu einer While Wend Schleife wird der Code zwischen Repeat und Until auf jedenfall mindestens einmal ausgef hrt Das liegt daran dass erst das abschliessende Until pr ft ob die Bedingung zum Abbruch der Schleife wahr True oder falsch False ist 82 x 0 Repeat x xX 1 Print Hello World Until x 10 bis until x 10 ist springe zur ck zu Repeat Until Ausdruck Bis es wahr wird Until wird verwendet um eine Repeat Until Schleife abzuschliessen Die Schleife wird solange ausgef hrt bis der Ausdruck bspw x 10 True wahr ergibt Sobald der Ausdruck wahr ist wird das Programm nach Until fortgesetzt Forever Endlosschleife Dieser Befehl kann als Ersatz f r Until in einer Repeat Until Schleife eingesetzt werden Es zwingt die Schleife dazu f r immer forever ausgef hrt zu werden Forever entspricht einem Until 0 Pop Gosub For Select If While Repeat Manchmal kann es notwendig sein eine Schleife vorzeitig zu beenden obwohl der bedingende Ausdruck noch nicht True ist So beendet Pop For beispielsweise eine For To Schleife sofort und springt in den nachfolgenden Code x 0 For i 0 To 10 X x tI If x 5 Then Pop For Next hier macht das Programm dann weiter MouseWait Lauscht der
48. Weise manipuliert werden sie k nnen z B gedreht und skaliert werden Sprites Sprites k nnen initialisiert werden indem sie von der Platte geladen werden oder indem ein Objekt vom Typ Shape in ein Objekt vom Typ Sprite umgewandelt wird Die Shape kann anschlie end freigegeben werden Der Befehl FreeSprite n gibt ein Sprite wieder frei Zur Zeit k nnen Sprites lediglich im Blitzmodus verwendet werden Im Amigamodus kann aber dennoch ein Zeiger auf ein Sprite Objekt definiert werden Slices Eine Slice dient zur Konfiguration des Displays im Blitzmodus Sie wird mit dem Befehl Slice erzeugt Im Gegensatz zu anderen Objekten kann keine einzelne Slice freigegeben werden Der Befehl FreeSlices gibt alle zu dem Zeitpunkt existierenden Slices frei Die Befehle Show ShowF ShowB und ShowSprite arbeiten alle mit der jeweils aktuellen Slice Die Farbregister einer Slice werden von den Befehlen RGB und UsePalette beeinflu t Dateien Dateien werden nicht wie andere Objekte erzeugt und freigegeben sondern ge ffnet und geschlossen Zum ffnen dienen die Funktionen OpenFile ReadFile und WriteFile Da bei Dateizugriffen Fehler auftreten k nnen werden hier Funktionen verwendet soda erkannt werden kann ob die Operation erfolgreich war Um eine Datei zu schlie en wird der Befehl CloseFile n verwendet es gibt aber auch den Befehl FreeFile n Es ist empfehlenswert alle Dateien die ge ffnet wurden auch wieder von Hand zu
49. Zahlen einzulesen wird die Funktion Edit verwendet Der Befehl a Edit 80 erwartet die Eingabe einer maximal 80stelligen Zahl und speichert diese in der Variablen a Felder Programme m ssen h ufig Gruppen von Zahlen oder Strings verarbeiten Variablen die solche Gruppen darstellen werden Felder Arrays genannt Wenn z B eine Gruppe von zehn Zahlen verarbeitet werden sollen die alle in einer gewissen Beziehung zueinander stehen so kann statt zehn einzelner Variablen auch ein Feld definiert werden 17 Hierzu dient die Anweisung Dim Dim a 10 Die Variable a kann nun 10 Zahlen aufnehmen eigentlich 11 siehe Kapitel 3 Um auf die einzelnen Werte zuzugreifen wird der Index des Feldelements in der Klammer hinter dem Variablennamen angegeben a 1 5 a 2 6 a 9 22 NPrint a 9 a 1 a 1 a 2 Nprint a 1 Das wichtige dabei ist da der Index der das Feldelement angibt wiederum eine Variable sein kann Wenn i 2 ist dann bezieht sich der Ausdruck a i auf die selbe Variable wie a 2 Im folgenden werden 5 Strings in einer For Next Schleife vom Benutzer eingelesen Da die Strings in einem Feld gespeichert werden k nnen sie wiederum in einer Schleife ausgedruckt werden Dim aS 20 NPrint Geben Sie 5 Namen ein For i l To 5 a i Edit 80 Next NPrint Di ingegebenen Namen sind For i 1 To 5 NPrint a i Next ouseWait 18 Kapitel 3 Datentypen Felder und Listen e Numerische Datent
50. able namens einWert kennen und das Statement darf ebenfalls eine Variable namens einWert definieren ohne dass die Hauptprogramm Variable einWert mit der eigenen Definition kollidiert Shared erlaubt es nun aber dem Statement eine globale Variable in der eigenen Definition bekannt zu machen und damit zu arbeiten Dies wird bspw dann genutzt wenn man mehr als nur 6 Parameter f r ein Statement ben tigt x l 100 Statement IncrementX value l Shared x 1 x x value End Statement IncrementX 100 x ist nun 200 85 Setint Type Interrupts zu mir Setint wird dazu benutzt um auf Ereignisse Interrupts zu reagieren die au erhalb des eigenen Programms passieren Es kommt oft vor dass ein Programm l uft und pl tzlich passiert in den Weiten des Computers etwas auf das man gern eine Antwort geben w rde Also definiert man einen Setint Block welcher mit End Setint abgeschlossen wird und innerhalb dieses Blocks wird dann der Code ausgef hrt der auf das entsprechende Ereignis reagieren soll Der Parameter Type von Setint kann einen der folgenden Werte annehmen serieller bertragungspuffer ist leer Disk Block gelesen oder geschrieben Software Unterbrechung Software Interrupt CIA Ports Interrupt Koprozessor Copper Interupt Vertical Blank Interrupt der Bildschirm wurde neu gezeichnet der Blitter ist mit seiner Arbeit fertig Audio Kanal 0 Pointer L nge geholt Audio Kanal 1 Pointer L nge geh
51. aeeaeaeaaeeeeeeeeeeeeeeeeeeeeeeaed 19 Numerische Datentypen a een nenn 19 Der Default Datentyp 0 Herrn ei 20 Die Data Anweisung aaa ren 20 Wert berlauf 8 vorzeichenlose Zahlen uussssnnnsnnssnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnensnnnnrn 21 Der Datentyp Stringa r rennen 21 oystemkonstanten cc ciie 22 ls rn ren een en 21 Die NewType Anweisung lid 22 Felder innerhalb von NewTypeS comico ne nenne getan ande 23 Die UsePath Anweisung z 2 tenth ieee rs dada 24 FOS rete a ee a a sr e a EHRE 24 Kapitel Aoi ihn soci regen AD aeai aa 29 A O OS 29 IMG itu EOrSEREERUUEENSERERUPRCHEREEERERHETPERERPEATISELERELAUSTEERLERTEETTIRERSERESTGERSEELTONELTERETLHETSEREREFTTSTTLEERFLISETAFEREPELENTERSFR UNE 29 Befehle 2 MH BE Hinten tkmeiiunichrttehleesihe dr ni E fabs c bobbed ented ea ee 29 A NN 30 REKUFSION ti dida sedans tot stsl vata bane le acd aelantel becteacad insets biela 31 Globale Variable m a 04 Haie ea en Hi onen eg 31 ZUSAMMENPASSUMG ainsana EEA copecads deg aedeuatedelogucts sacgecksady ed cocenvubs a RER are ETETE 32 O O 33 BelsplelO corta a detectada 33 Zahlen Taten iento ren till Erre cade 33 Ein eigenst ndiges standalone WorkBench PrograMM ooccccccnnnncccccononoconcnnronnrrn cnn rn 34 Ein graphisches Beispiel Hs klick in es a a e a a aa a E ae iaa 35 Menus nd File Requester resin een Rande 36 String Gadgets uti dl tn Leal rds 37 Prop Algeciras 38 Datenbank Anwendung i
52. anden ist indem einfach in der entsprechenden Spalte nach dem Gegenst ck gesucht wird 99 Anhang 5 Blitz2 Operatoren Ein Ausdruck besteht aus Variablen Konstanten Operatoren und Funktionen Operatoren sind z B das Plus oder Minuszeichen Operatoren erzeugen ein Ergebnis unter Verwendung entweder nur des Operanden auf der rechten Seite a NOT 5 oder der Operanden auf der rechten und linken Seite des Operators a 5 2 Ein Ausdruck kann aus mehreren Operatoren bestehen a 5 6 3 Nat rlich h ngt das Ergebnis von der Reihenfolge ab in der die Operationen ausgef hrt werden wird die Multiplikation zuerst ausgef hrt ergibt sich 33 wird die Addition zuerst ausgef hrt also 5 6 3 ergibt sich 45 In Blitz2 ist genau festgelegt welche Operatoren vorrangig vor anderen ausgef hrt werden Da z B die Multiplikation immer vor der Addition ausgef hrt wird sind die folgenden beiden Zeilen gleichwertig a 5 6 3 a 3 5 6 Um die Pr zedenz der Operatoren zu umgehen werden diejenigen Ausdr cke die zuerst ausgewertet werden sollen eingeklammert a 5 6 3 Die folgende Liste enth lt alle Blitz2 Operatoren gruppiert nach ihrer Priorit t RHS rechte Seite LHS linke Seite Operatoren in der selben Gruppe haben die gleiche Priorit t die Priorit t der Gruppen nimmt nach unten hin ab Werden zwei Operatoren der selben Priorit t in einem Ausdruck verwendet werden sie in der Reihenfolge ihres Auftretens ausgewertet
53. ariablen dieses Typs vereinbart werden indem der Zusatz NeuerTypname angef gt wird z B a Person Auf einzelne Elemente innerhalb eines NewType kann durch das Zeichen Backslash zugegriffen werden z B a groesse a groesse l Bei der Definition eines NewType erhalten Variablen f r die kein Suffix angegeben ist den Datentyp des vohergehenden Elementes Es k nnen auch mehrere Elemente in einer Zeile aufgef hrt werden wenn sie durch Doppelpunkte getrennt sind Es folgt ein weiteres Beispiel eines NewType NewType nme X W Y Z y z sind auch von Typ Word s o wert w speed q names End NewType Der Zugriff auf Strings innerhalb eines NewType ben tigt keinen oder s Zusatz wie bei normalen Zeichenketten Ist ein solcher Suffix angegeben f hrt dies zur Compilermeldung Garbage at End of Line 22 Schrott am Ende der Zeile Bezogen auf das erste Beispiel hei t das a name Jimi Hendrix richtig a name Bob Dylan falsch Zuvor definierte NewTypes k nnen in darauffolgenden NewT ype Definitionen weiterverwendet werden Es folgt ein Beispiel f r eine NewType Definition die einen anderen NewType enth lt NewType vektor x q y q Zq End NewType NewType object position vektor geschwindigkeit vektor beschleunigung vektor End NewType DefType object meinschiff s n chster Absatz meinschiff position x 100 0 0 Beachten Sie da jetzt zwei Backslashes n tig sind um a
54. as C gedr ckt werden Das Programm wird dann angehalten und der Debugger erscheint auf dem Bildschirm Um den Debugger zu verlassen und zum Editor zur ckzukehren dr cken Sie die Esc Taste links oben auf der Tastatur Der Debugger wird in Kapitel 6 behandelt 14 Die Benutzung von String Variablen Variablen die keine Zahlenwerte sondern Buchstaben Text enthalten werden Zeichenketten oder String Variablen genannt Um String Variablen zu kennzeichnen m ssen sie ein Zeichen hinter dem Namen erhalten Das folgende Beispiel zeigt eine einfache Anwendung von Strings a Simon Nprint a MouseWait Wie bei den numerischen Variablen wird auch bei Strings das Zeichen dazu verwendet der Variablen einen Wert zuzuweisen Das Zeichen dient dazu String Variablen zu addieren also aneinander zu f gen a Simon b Armstrong c a b Die Variable c enth lt anschlie end die Zeichenkette Simon Armstrong Funktionen die mit Strings arbeiten sind in Kapitel 6 des Blitz Referenzhandbuchs aufgef hrt 15 Der Programmablauf Vielfach mu ein Programm bei der Ausf hrung entscheiden ob der eine oder der andere Befehl auszuf hren ist dies nennt man den Programmablauf Die If Then Anweisung dient dazu den nachfolgenden Befehl nur dann ausf hren zu lassen wenn eine bestimmte Bedingung erf llt ist Im folgenden Beispiel wird nur dann das Wort Hallo ausgegeben wenn die Variable a den Wert 5 hat I
55. auf wird automatisch der Blitz2 Debugger aufgerufen In Kapitel 5 befindet sich eine ausf hrliche Beschreibung der Laufzeitfehler Make Smallest Code Der Blitz2 Compiler kann Programme dahingehend optimieren da sie eine minimale Gr e besitzen zweiphasiges Compilieren Wenn das Programm als ausf hrbare Datei auf der Platte gespeichert werden soll kann die Optimierung mit dieser Option eingestellt werden Allerdings dauert dann das Compilieren selbst l nger Debug Info Diese Option erzeugt eine Symboltabelle wenn das ausf hrbare Programm auf Platte gespeichert wird Diese kann von Debuggern wie dem MetaScope von Metadigm verwendet werden Buffer Sizes Wenn Blitz2 als einphasiger Compiler benutzt wird k nnen hier verschiedene Puffergr en eingestellt werden Bei zweiphasigem Compilieren mit der Make Smallest Option werden die Puffergr en automatisch optimiert Eine Ausnahme bilden die String Puffer Wenn sehr gro e Strings verwendet werden um z B eine gesamte Datei in einen String einzulesen mu der Workspace Puffer auf die L nge des gr ten verwendeten String eingestellt werden Object Maximums Hiermit wird die maximale Anzahl der von Blitz2 verwalteten Objekte Screens Shapes etc eingestellt Siehe auch Kapitel 6 Resident Diese Option f gt die vor compilierten residenten Dateien in die Blitz2 Umgebung ein Es mu der Name der Datei eingegeben werden 93 Anhang 2 Tastaturk rzel Manchmal kann
56. auff llig wird dies auf AGA Amigas ohne Fastram Die verwendeten Bitmaps m ssen immer ein Vielfaches der eingesetzten Fetchmode sein Der Versuch h here Fetchmodes als 3 64 Pixel einzusetzen wird in erheblichen Schwierigkeiten enden mit DisplayAdjust noch ein brauchbares Display hinzubekommen Ein Display mit Fetchmode 3 und mehr als einem Sprite d rfte auf eine Breite von 256 Pixel schrumpfen Mehrere Displays Wenn mehr als eine Copperliste verwendet werden soll ist darauf zu achten dass zwischen den einzelnen Copperlisten eine L cke von mindestens 3 Zeilen bestehen muss Das hei t dass die Y Position der unteren Copperliste der H he der vorherigen plus der Y Position der vorherigen plus 3 betragen muss nextCopListY lastCopListY lastCopListHeight 3 74 Erweiterte Copper Kontrolle Die erweiterte Version von InitCopList erlaubt die Zuweisung von benutzerdefinierten Copper Befehlen In der Display Library befinden sich einige Funktionen die diesen Parameter ben tigen Es gibt zwei Arten von Copper Befehlen Die erste erlaubt es dem Copper jede einzelne Zeile des Displays zu beeinflu en w hrend die zweite es dem Copper gestattet auf einer ganz bestimmten Zeile zu arbeiten Die folgenden Funktionen ben tigen einen negativen Offset dies zeigt die Anzahl der Instruktionen an die jeder Zeile zugewiesen werden muss DisplayDblScan CopList Mode copoffset 7 DisplayRainbow CopList Register Palette copoffset 7
57. chalters und CEND stellt den Zustand vor der letzten CNIF oder CSIF Anweisung wieder her CNIF CEND Bl cke k nnen auch verschachtelt werden Da die Compiler Direktiven bereits beim bersetzen ausgewertet werden k nnen in den Anweisungen CNIF und CSIF nur Konstanten getestet werden also 5 oder test Der Wert von Variablen ist hingegen zur Compilezeit nicht bekannt sondern erst bei der Ausf hrung des Programms daher k nnen Variablen nicht in 66 Verbindung mit diesen Anweisungen verwendet werden Im folgenden Beispiel wird der Gebrauch der bedingten Compilierung erl utert demover 1l dies ist eine Demoversion NPrint Goo Goo Software c 1993 CNIF demover 1 NPrint DEMONSTRATIONS VERSION CELSE NPrint REGISTRIERTE VERSION CEND und spaeter im Programn r SaveRoutine CNIF demover 0 nur wenn keine Demoversion Save Routine ausfuehren CEND Return Der Vorteil dieses Vorgehens gegen ber einer einfachen If demover 0 EndIf Konstruktion besteht darin da hierbei der Code f r die Abspeicher Routine berhaupt nicht im Programm enthalten ist und daher auch nicht von Hackern entschl sselt werden kann Die entscheidenden Vorteile des bedingten Compilierens kommen jedoch erst bei der Makro Programmierung zum tragen Makros Makros werden vorwiegend bei der Assembler Programmierung oder in ma
58. creen oder Slice aber NICHT die der aktuellen Palette Es gibt keinen Befehl zur Erzeugung einer Palette Paletten werden dadurch erzeugt da sie aus einer IFF Datei geladen werden oder durch den Befehl Pal RGB Bitmaps Unter einer Bitmap versteht man ein Feld von Bildelementen Pixels aus denen sich das Display zusammensetzt Bitmaps k nnen entweder mit dem Befehl BitMap erzeugt von der Platte geladen oder von der Screen mit ScreensBitMap kopiert werden Bitmap Objekte k nnen mit FreeBitMap freigegeben werden bis auf solche die mit dem Befehl ScreensBitMap erzeugt wurden Diese k nnen nicht freigegeben werden Analog zu Windows k nnen auch Bitmaps zur Ein und Ausgabe verwendet werden Hierzu dienen die Befehle BitMapInput und BitMapOutput die vorwiegend im Blitzmodus angewendet werden Vor dem Aufruf von BitMapInput mu die Tastatur mit B1itzKeys On entsperrt werden Um den Cursor f r die Ausgabe mit BitMapOutput zu positionieren dient der Befehl Locate Shapes Shapes sind Objekte die Graphikelemente enthalten Sie k nnen entweder von der Platte geladen oder mit dem Befehl GetAShape aus einer Bitmap ausgeschnitten werden 52 Shapes werden mit dem allgemeinen Free Shape n Befehl freigegeben Shapes die in Verbindung mit Gadgets oder Men s verwendet wurden d rfen erst freigegeben werden nachdem die entsprechenden Men und Gadgetlisten auch freigegeben wurden Shapes k nnen auf vielf ltige
59. d dazu benutzt um zu einem Unterprogramm Subroutine zu springen Ein Unterprogramm ist ein Programmabschnitt der mit einem Return Befehl abgeschlossen wird Nachdem die Anweisungen des Unterprogramms ausgef hrt wurden wird durch den Return Befehl wieder zu der Zeile mit dem GoSub Kommando zur ckgesprungen und dort fortgefahren start GoSub message GoSub message GoSub message ouseWait End message NPrint Hallo Return Beachten Sie da den Sprungmarken ein Punkt vorangestellten ist Dadurch werden sie vom Editor als solche erkannt und erscheinen in einer Liste auf der rechten Bildschirmseite Wenn Sie mit der Maus in diese Liste klicken springt der Cursor automatisch zu der Marke im Programm Beim Erstellen gro er Programme ist dies sehr n tzlich Benutzereingaben Vielfach mu ein Programm auf Eingaben vom Benutzer warten entweder durch die Tastatur oder durch die Maus Der MouseWait Befehl zum Beispiel h lt das Programm an bis der Benutzer den linken Mausknopf bet tigt Die Befehle Edit und Edit erwarten Eingaben von der Tastatur hnlich wie der Input Befehl in anderen Programmiersprachen auch Das folgende Beispiel fragt den Benutzer nach seinem Namen und speichert die Eingabe in einer String Variablen Print Ihr Name bitte aS S Edit 80 NPrint Hallo aS MouseWait Die Zahl 80 in dem Befehl Edit 80 bezieht sich auf die Anzahl Zeichen die der Benutzer eingeben kann Um
60. da die Zeile NPrint 12 12mal ausgef hrt und jedesmal eine neue Kombination von x und y berechnet wird While Wend und Repeat Until Au er For Next gibt es noch zwei weitere einfache Methoden in Blitz2 um Schleifen zu realisieren While Wend und Repeat Until Schleifen werden wie folgt geschrieben While a lt 20 Nprint a a atl Wend Repeat Nprint a a atl Until a gt 20 Wie viele BASIC Befehle sind auch diese einigerma en selbsterklarend das Innere der While Wend Schleife wird wiederholt SOLANGE die Bedingung erf llt ist die Repeat Until Schleife wird durchlaufen BIS die Bedingung erf llt ist Die Bedingung die angegeben wird kann ein beliebiger Ausdruck sein wie While a 10 lt 50 While f 0 while b lt gt x 2 USW Der Unterschied zwischen diesen beiden Schleifen ist da bei einem Anfangswert von a gr er als 20 die Repeat Until Schleife einmal durchlaufen wird die while Wend Schleife jedoch gar nicht die While Schleife wird daher auch abweisende Schleife genannt Endlosschleifen Wenn ein Programm in einen Zustand ger t in dem eine Schleife nicht mehr verlassen wird spricht man von einer Endlosschleife In einer solchen Situation mu der Programmierer in der Lage sein das Programm von au en zu beenden Ein Programm kann mit der CtrI Alt C Kombination unterbrochen werden Hierzu m ssen die Ctrl Taste und die linke Alt Taste gleichzeitig gedr ckt und gehalten werden und zus tzlich d
61. das Verzeichnis zu wechseln in dem sich die Dateien befinden Hierzu dient der mit CD Change Directory beschriftete Knopf des File Requesters Wenn Sie also den Pfadnamen im File Requester ge ndert haben um ein Beispielprogramm zu laden m ssen Sie zun chst auf den CD Knopf klicken bevor Sie OK anw hlen Tritt eine Fehlermeldung wie Couldn t Load Shape o auf liegt das daran da nicht in das aktuelle Verzeichnis gewechselt wurde Dr cken Sie ESC um den Debugger zu verlassen und zum Editor zur ckzukehren Wenn das Programm den Rechner zum Absturz bringt dann ist die Ursache daf r der selbe Fehler allerdings war die Fehler berpr fung im Men Compiler Options ausgeschaltet Zusammenfassung Um das Kapitel kurz zusammenzufassen Danke da Sie Blitz2 erworben haben Legen Sie zuallererst eine Sicherungskopie der Disketten an Wenn Sie ein Festplattensystem besitzen legen Sie ein Verzeichnis f r Blitz2 an und kopieren Sie alle Dateien und Unterverzeichnisse von den Disketten in dieses Verzeichnis F gen Sie dann folgende Zeile in die Startup Sequenz ein ASSIGN BLITZ2 FestplattenName BlitzVerzeichnisName Wenn sich alle drei Dateien Blitz2 TED und DefLibs in dem selben Verzeichnis befinden klicken Sie auf das Blitz2 Symbol W hlen Sie Load aus dem Men und wechseln Sie zu dem Verzeichnis Demo auf Diskette 2 W hlen Sie irgendeine Quelldatei das sind alle diejenigen mit dem Zusatz bb2
62. den ohne da sie Schlieren von ihrer alten Position hinterlassen Mit der Anweisung move 1 dff 180 wird die Hintergrundfarbe auf wei gesetzt soda deutlich wird wieviel des Frames Bildschirmf llung seit dem letzten VWait verstrichen ist bedingt durch die Ausf hrung des Codes Wenn die Anzahl der B lle erh ht wird so verlangsamt sich die Ausf hrung der Schleife in der gezeichnet und positioniert wird soweit da sie l nger als ein Frame 1 50 Sekunde dauert und der Bildschirm beginnt zu blinken In Kapitel 10 wird die Thematik der Frame Raten noch n her erl utert Was noch zu erw hnen w re ist das Abprallen der B lle wenn sie an den Rand der Bitmap kommen Die Richtung wird umgekehrt und zus tzlich wird die Richtung auch noch zu der Position der B lle addiert soda es nie dazu kommt da au erhalb der Bitmap ge blittet wird BLITZ n 25 NEWTYPE ball X wiy xa ya End NEWTYPE Dim List b ball n 1 While AddItem b b x Rnd 320 32 Rnd 256 32 Rnd 4 2 Rnd 4 2 Wend Gosub getshape BitMap 0 320 256 3 BitMap 1 320 256 3 Queue 0 n Queue 1 n Slice 0 44 3 While Joyb 0 0 VWait show db db 1 db Use BitMap db UnQueue db ResetList b USEPATH b 60 While NextItem b xt xa yt ya If NOT RectsHit x y 1 1 0 0 320 32 256 32 xa s xa ya ya xt xa yt ya EndIf QBlit db 0 x y Wend MOVE 1 dff180 Wend End getshape
63. dienen komplexe Systemeinheiten wie Graphiken Dateien oder Screens zu manipulieren Dabei sorgt Blitz2 f r die gesamte Speicherverwaltung der Objekte einschlie lich der Freigabe des Speichers wenn das Programm beendet wird Obwohl die meisten Objekte spezielle Befehle ben tigen wird der Programmierer nie mit einer ungew hnlichen Syntax konfrontiert Alle Objekte k nnen in der von Blitz2 gewohnten modularen Weise programmiert werden Die folgende Liste gibt einen berblick ber die wichtigsten Objekte die Blitz2 kennt Files f r sequentiellen und direkten Zugriff auf DOS Dateien Modules Musikobjekte die kompatibel zum Soundtracker sind Blitzfonts 8x8 Pixel gro e Schriften f r schnelle Textausgabe mit Bitmaps IntuiFonts skalierbare Schriften f r Window Ausgabe Shapes Standard Blitz2 Graphikelemente Palettes Farbpaletten BitMaps Standard Blitz2 Display Elemente Sounds digitalisierte Soundbeispiele Sprites Hardware Element f r den Blitzmodus Screens Standard Intuition Bildschirm Windows Standard Intuition Fenster Gadgets Standard Intuition Gadget Menus Standard Intuition Men s 49 Gemeinsamkeiten der Objekte F r alle Blitz2 Objekte existiert ein spezieller Satz von Befehlen mit denen sie definiert manipuliert und nat rlich auch zerst rt werden k nnen Den meisten Objekten ist ein eigenes Kapitel im Referenzhandbuch gewidmet in dem alle Befehle ausf hrlich erkl rt sind Alle Blitz2 Objekte k nnen mit
64. do F Forward l t den Benutzer in dem Befehlspuffer vorw rts gehen Wenn versucht wird ber die Stelle an der das Programm angehalten wurde hinauszugehen erscheint die Meldung At End of Buffer Ende des Puffers erreicht Diese M glichkeit die vor dem Auftreten eines Fehlers ausgef hrten Befehle nachtr glich verfolgen zu k nnen ist von unsch tzbarem Wert Wenn ein Programm innerhalb eines Unterprogramms oder einer Prozedur gestoppt wurde kann somit ermittelt werden von welcher Stelle im Hauptprogramm aus die Routine gerufen wurde Der Direktmodus Der Programmierer hat zwei M glichkeiten den internen Zustand des Programms zu kontrollieren und zu beeinflussen wenn der Debugger aktiv ist Um herauszufinden welchen Wert eine Variable gerade besitzt wird das Kommando E Evaluate verwendet Nach der Eingabe von E wird der Benutzer aufgefordert den Variablennamen einzugeben Anschlie end wird der Wert der Variablen angezeigt Mit dem Kommando X Execute k nnen Blitz2 Befehle ausgef hrt werden Nach der Eingabe von X erscheint ein Prompt und es kann ein beliebiger Befehl eingegeben werden wie z B CLS oder n 20 Fehlermeldungen des Debuggers Bei der Ausf hrung der Kommandos E und X im Direktmodus k nnen folgende Fehler auftreten Can t create in Direct Mode Kann im Direktmodus nicht erzeugt werden Diese Meldung erschient wenn versucht wird auf eine Variable zuzugreifen die nicht existiert
65. e NPrint a mynode mynode ln Succ Wend MouseWait Primzahlgenerator Im letzten Beispiel wird eine Liste aller Primzahlen von 2 bis zu einer H chstzahl die vom Benutzer eingegeben wird berechnet Die Primzahlen werden in Form einer Blitz2 Liste verwaltet Das Programm beginnt mit dem Einlesen der H chstgrenze mit Hilfe der Standard Eingabe und Ausgabekan le und des Befehls Edit der numerischen Variante von Edit Die Arbeitsschleife While Wend wird solange durchlaufen bis der H chstwert erreicht ist Der Algorithmus besteht lediglich darin die n chste ganze Zahl zu nehmen und mit der Liste der zuvor erzeugten Primzahlen zu vergleichen bis eine ganzzahlige Division m glich ist oder bis die Pr fgrenze erreicht wurde dies ist die Wurzel der in Frage kommenden Zahl Wurde kein ganzzahliger Teiler gefunden wird die neue Primzahl ausgedruckt und an das Ende der Liste angef gt Print H chstwert eingeben v Edit 80 If v 0 Then End tab w 0 tot w 0 Dim List primes v p 2 AddItem primes primes p while p lt v p 1 flag 1 d 0 q Sqr p ResetList primes While NextItem primes d primes r r flag p MOD d Wend If flag lt gt 0 Print p Chr 9 tab 1 tot 1 r Grenzwert des Programms numerische Eingabe Abbruch bei 0 z hler r cksetzen Primzahl Liste anlegen 2 ist der erste Eintrag Schleife bis Ende erreicht ist p erh hen flag
66. ef 16 8 6 2 Circlef 48 8 6 3 Circlef 32 32 8 0 GetaSprite 0 0 BitMap 0 640 512 4 For i 0 To 100 Use BitMap 0 Box Rnd 640 Rnd 512 Rnd 640 Rnd 512 Rnd 16 Next InitPalette 0 48 For i l To 31 AGAPalRGB 0 1 Rnd 256 Rnd 256 Rnd 256 Next InitCopList 0 10014 DisplayAdjust 0 2 8 0 16 0 underscan BLITZ 76 CreateDisplay 0 DisplayPalette 0 0 For i 0 To 7 DisplaySprite 0 0 20 1 30 20 1 50 amp 127 i Next While Joyb 0 0 VWait x 160 Sin r 160 y 128 Cos r 128 DisplayBitMap 0 0 x y r 05 77 Befehlsreferenz Programmfluss Einf hrung Ein Computer Programm besteht aus Abfolgen von Befehlen die in ihrer Reihenfolge abgearbeitet werden Einige Befehle unterbrechen diesen Flu und lassen das Programm an eine andere Stelle springen um dort mit der Ausf hrung fortzusetzen Es gibt zahlreiche Befehle um den Programmflu in Blitz zu steuern Standard BASIC Befehle die den Programmflu steuern wie Goto oder Gosub gibt es auch in Blitz Der Unterschied ist dass sie anstelle von Zeilennummern sogenannte Labels als Ziel verwenden Moderne BASIC Features wie Prozeduren auch bekannt als Statements und Funktionen while wend Repeat Until Select Case usw erlauben eine strukturiertere Programmierung Zus tzlich gestattet es Blitz auf Interrupts zu reagieren externe Ereignisse nach denen man zeitweise in andere Teile des Codes springen kann um dort dem Ereignis entsp
67. efehl angewendet werden bevor bestimmte Operationen ausgef hrt werden k nnen Durch die Erzeugung eines Objektes wird dieses automatisch zum aktuellen Objekt seiner Klasse Das Konzept der aktuellen Objekte wird in Blitz2 durchg ngig genutzt Es hat den Vorteil da die Programme schneller laufen und die Modularit t der Programme erh ht wird Ein Ausgabe Objekte Objekte vom Typ BitMap File und Window sind Mittel zur Ein und Ausgabe Die Befehle ObjektInput und ObjektOutput erm glichen es Ein und Ausgabekan le umzuleiten 50 Das Print Kommando schreibt immer in das aktuelle Ausgabeobjekt die Befehle Edit und Inkey lesen immer vom gerade aktuellen Eingabeobjekt WindowOutput 2 Window 2 ist das aktuelle Ausgabeobjekt Print Hallo BitMapInput 1 Bitmap 1 wird zum aktuellen Eingabeobjekt aS Edits 80 Objekstrukturen fur Fortgeschrittene In Anhang 1 des Blitz2 Referenzhandbuchs befindet sich eine Beschreibung der inneren Struktur aller Objekte Mit Hilfe des Befehls Addr findet man die Speicherstelle an der eine Objekt Struktur abgelegt ist Erfahrene Programmierer k nnen mit Hilfe des Addr Befehls sowie mit den Befehlen Peek und Poke auf einzelne Elemente einer Objekstruktur zugreifen Dies ist besonders bei bestimmten Systemobjekten wie Screens und Windows n tzlich die Zeiger auf ihre Gegenst cke auf der Intuition Seite enthalten Im folgenden Beispiel wird der Systemaufruf ScreenToFron
68. efiniert hat Die l ngere Version von InitCopList hat folgendes Format InitCopList CopList ypos height type sprites colors customs Der Parameter ypos wird in der Regel auf 44 gesetzt was der Oberkante eines PAL Bildschirms entspricht Wenn die Copperliste unterhalb einer anderen Copperliste benutzt wird dann muss ypos 2 Zeilen tiefer liegen als die letzte Zeile der vorher gehenden Copperliste Der Parameter sprite sollte immer auf 8 gesetzt werden auch wenn diese Menge nicht erforderlich ist Der Parameter colors wird auf die gew nschte Zahl gesetzt Wenn mehr als 32 Farben verwendet werden sollen muss immer der Flag agacolors gesetzt werden Der Parameter customs bietet Raum f r erweiterte Copperlisten die jedem Display zugewiesen werden k nnen Die Verwendung von custom wird sp ter in diesem Kapitel besprochen 72 Flags Der Parameter Flags berechnet sich durch die Addition der einzelnen Werte Beachte Wenn dem Parameter onebitplane twobitplanes threebitplanes fourbitplanes fivebitplanes sixbitplanes sevenbitplanes eightbitplanes smoothscrolling dualplayfields extrahalfbright ham lores hires superhires loressprites hiressprites fetchmode0 fetchmodel fetchmode2 fetchmode3 agacolors superhiressprites 01 02 503 04 05 06 07 08 10 20 40 80 000 100 200 400 800 c00 0000 1000 2000 3000 10000 flags eine Variable zugewiesen sol
69. ehen Unter Typen k nnen ebenfalls angesehen werden CLI ARGUMENT dient dazu Aufruf Parameter an ein Programm zu bergeben wenn dieses vom Editor aus gestartet wird so als ob das Programm von einer Kommandozeile CLI aus aufgerufen wird CALCULATOR ist ein kleiner Taschenrechner mit dem Sie Formeln auch mit verschachtelten Klammern ausrechnen k nnen Sie k nnen im Dual Dezimal oder Hexadezimal System rechnen Zahlen die zur Basis 2 genommen werden sollen kennzeichnen Sie durch ein vorangestelltes Zeichen Hexadezimal Zahlen durch ein Zeichen RELOAD ALL LIBS l dt alle im Laufwerk BLITZLIBS befindlichen Dateien erneut in den Speicher Dies ist notwendig wenn Sie ihre eigenen Libraries schreiben und diese testen wollen Sie m ssten sonst Blitz2 erneut starten Die Compiler Optionen Wenn Sie denn Men punkt OPTIONS anklicken erscheint folgende Maske die nachfolgend erl utert wird gt gt gt screen shot options menu lt lt lt Create Icons for Executable Files Wenn ein Programm mit CREATE FILE in ausf hrbarer Form auf der Platte gespeichert wird kann gleichzeitig daf r ein Symbol Icon erzeugt werden Nur wenn ein Symbol f r das Programm existiert kann das Programm von der WorkBench aus aufgerufen werden Beachten Sie da hierf r der Befehl WBStartUp am Anfang des Programmcodes stehen mu Runtime Error Debugger 92 Dies schaltet die berpr fung von Laufzeitfehlern ein Tritt ein Laufzeitfehler
70. em Buchstaben 1 9 oder a z markiert Das folgende Beispiel erl utert die bergabe von zwei Parametern an ein Makro acro distance Sqr 1 1 2 2 End Macro NPrint distance 20 30 ouseWait Der Compiler ersetzt nun jedes Auftreten vom 1 durch den ersten und 2 durch den zweiten Parameter NPrint Sqr 20 20 30 30 Wenn mehr als 9 Parameter bergeben werden sollen werden Buchstaben verwendet a stellt den zehnten b den elften Parameter dar usw Beim Aufruf k nnen die Parameter aus beliebigem Text bestehen statt 20 30 h tte im obigen Beispiel auch x y stehen k nnen Achtung Bei der bergabe von mathematischen Ausdr cken als Parameter an Makros mu unbedingt darauf geachtet werden da diese korrekt geklammert sind Es treten sonst ungewollte Seiteneffekte auf die sehr schwer zu ermitteln sind wie hier distance x 10 20 y 10 20 Diese Zeile wird zu folgendem Ausdruck expandiert Sqr x 10 20 x 10 20 y 10 20 y 10 20 Da in dem Makro die beiden Parameter jeweils mit sich selbst multipliziert werden wird der erste Parameter nicht richtig ersetzt Dadurch da die Klammern fehlen wird die Multiplikation falsch ausgef hrt Der zweite Parameter hingegen wird korrekt ausgewertet da der Ausdruck in Klammern angegeben ist Der 0 Parameter Der Parameter mit der Nummer 0 besitzt eine spezielle Bedeutung er gibt die Anzahl der nachfolgenden Parameter an Dies kann sowohl zur berpr fung
71. en die ebenfalls den Default Datentyp verwenden sofern kein Zusatz angegeben ist Die Data Anweisung Die Data Anweisung dient dazu einer Reihe von Variablen eine Liste von Werten zuzuordnen Die Restore Anweisung dient dazu den Datenzeiger auf eine bestimmte Data Anweisung zeigen zu lassen Um zu bestimmen von welchen Datentyp die Werteliste ist wird der entsprechende Zusatz typ angef gt Das folgende Beispiel erl utert den Gebrauch von Data in Blitz2 Read a b c Restore myfloats Read d f Restore mystrings Read eS fS g myquicks Data 20 30 40 myfloats Data 20 345 10 7 90 111 mystrings Data Guten Morgen Simon Anmerkung wenn der Datenzeiger auf einen anderen Datentyp zeigt als die Variable die in der Read Anweisung aufgef hrt ist tritt der Compilerfehler Mismatched Types Nicht gleichwertige Datentypen auf 20 Wert berlauf amp vorzeichenlose Zahlen Wird einer Variablen ein Wert zugewiesen der au erhalb des Wertebereichs des Datentyps liegt also zu gro ist tritt ein berlauf Fehler auf Das folgende Beispiel erzeugt einen solchen berlauf Fehler wenn es ausgef hrt wird a w 32767 a ist ein Word mit dem Wert 32767 a atl Uberlauf der Wert ist zu gro Die berpr fung von berlauf Fehlern kann in der Compiler Konfiguration unter Run Time Errors Options ein oder ausgeschaltet werden Die Voreinstellung ist aus soda das obige Beispiel keine Fehlermeldung
72. en werden Der Amiga Befehl stellt den Amiga Anzeige wieder vollst ndig mit Mousepointer her Der QAmiga Befehl hingegen wechselt in den Amigamodus ohne die Anzeige zu ver ndern Hierdurch wird es m glich in den Amigamodus zu wechseln um bestimmte Operationen wie Dateizugriffe etc durchzuf hren und wieder zur ck in den Blitzmodus zu wechseln ohne den Bildschirm zu ver ndern Wichtiger Hinweis Bevor Sie in den Blitzmodus wechseln m ssen Sie absolut sicher sein da keinerlei Plattenzugriffe mehr stattfinden Zur Zeit existiert keine M glichkeit dies mit Softwaremitteln sicherzustellen Daher werden folgende Regeln f r den Blitzmodus angegeben die die Benutzung weitgehend sicher machen Unbedingt auf das Erl schen der Lampe f r das Floppy Laufwerk warten bevor ein Programm gestartet wird das sofort in den Blitzmodus wechselt Benutzer von A590 Festplatten immer auf das zweite Aufleuchten der Laufwerkslampe warten wenn Sie Workbench 1 3 verwenden Bei Workbench 2 0 werden alle Puffer sofort geleert e Wenn der QAmi ga Befehl benutzt wird um Daten auf die Platte zu schreiben empfiehlt es sich eine Verz gerung einzubauen bevor zur ck in den Blitzmodus gewechselt wird Der Befehl vwait 250 f hrt zu einer Verz gerung von etwa f nf Sekunden das ist in jedem Fall ausreichend Es ist wichtig sich zu vergegenw rtigen da keiner der Befehle die auf das Betriebssystem angewiesen sind im Blitzmodus verf gbar
73. end Wend wird in Verbindung mit while verwendet um einen Programmteil zu definieren der solange ausgef hrt wird bis der Ausdruck f r while False ergibt x l 0 While x lt 100 x x 1 Wend wenn x 100 ist macht das Programm hier weiter 80 Select Ausdruck Wer ist der Richtige Select berechnet einen Ausdruck und merkt sich das Ergbnis Innerhalb eines Select Blocks werden mehrere Case definiert die das Ergebnis pr fen Trifft das Ergbnis auf ein Case zu wird der nachfolgende Code ausgef hrt x l 100 Select x Case 98 Print x ist 98 Case 99 Print x ist 99 Case 100 Print x ist 100 End Select Case Ausdruck Ein Case folgt immer einem Select und pr ft das durch Select Ausdruck erzeugte Ergebnis Ist dieses Ergebnis gleich dem Wert den man hinter Case angibt so wird der nachfolgende Code ausgef hrt x l 100 Select x Case 98 Print x ist 98 Case 99 Print x ist 99 Case 100 Print x ist 100 End Select Default Platziert man ein Default in einem Select Block so wird der Code nach Default ausgef hrt wenn kein Case zuvor mit dem Ergebnis des Select bereinstimmte x l 101 Select x Case 98 Print x ist 98 Case 99 Print x ist 99 Case 100 Print x ist 100 Default Print x ist irgend etwas anderes End Select 81 End Select Dieser Befehl beendet einen Select Block und l sst das Programm mit dem nachfolg
74. enden Code fortf hren For Var Ausdruck1 To Ausdruck2 Step Ausdruck3 Der For Befehl initialisiert eine For Next Schleife Alle For Next Schleifen beginnen mit einem For und werden durch ein Next abgeschlossen Der Code dazwischen wird solange ausgef hrt wie Ausdruck 1 ungleich Ausdruck2 ist Wenn For ausgef hrt wird nimmt Var das Ergebnis von Audruck1 an man nennt dies auch die Index Variable Danach wird Ausdruck2 ausgewertet und mit Var verglichen Sind die Ergebnisse nicht gleich wird der Inhalt der For Schleife bis zum Next ausgef hrt und die Index Variable Var um 1 erh ht Solange bis Var und Ausdruck2 gleich sind Normalerweise erh ht sich Var mit jedem Durchlauf der Schleife um 1 Mit dem Befehl Step kann dies aber auch ge ndert werden Ein Step von 2 bewirkt dass nach jedem Schleifendurchlauf der Wert von Var um 2 erh ht wird Genausogut kann Step auch 1 sein und man durchl uft die Schleife r ckw rts weil Var nun nicht mehr um 1 erh ht sondern um 1 verringert wird Beispielsweise kann man so eine Schleife realisieren die von 10 nach 0 z hlt schreibt 10x Hello World For i 0 To 10 Print Hello World Next schreibt 5x Hello World For i 0 To 10 Step 2 Print Hello World Next schreibt auch 10x Hello World aber heimlich r ckw rts For i 10 To 0 Step 1 Print Hello World Next Next Der Befehl Next beendet eine For
75. endet indem auf das kleine Symbol links oben in der Ecke oder auf den CANCEL Knopf rechts unten geklickt wird Die Liste zeigt ihnen alle in dem aktuellen Verzeichnis verf gbaren Dateien Sie k nnen eine Datei aus dieser Liste mit einem Doppelklick auf den entsprechenden Eintrag ausw hlen Mit dem Schiebebalken Scrollbars rechts k nnen sie durch die Liste rollen Wenn Sie auf einen mit lt DIR gt bezeichneten Eintrag klicken wird in dieses Verzeichnis gewechselt und die Liste neu aufgebaut Der PARENT Knopf dient dazu in das bergeordnete Verzeichnis Elternverzeichnis zu wechseln Mit dem DRIVES Knopf wird eine Liste aller verf gbaren physikalischen und logischen Laufwerke Volumes oben in der Liste eingef gt soda Sie auch diese ausw hlen k nnen Sie k nnen auch direkt einen Pfad und Dateinamen in die entsprechenden Eingabefelder eintragen Hierzu m ssen Sie zun chst mit der Maus in das Feld klicken um es zu aktivieren bevor Sie den Namen eintippen k nnen Wenn Sie Ihre Auswahl getroffen haben klicken auf den OK Knopf 91 Eine Besonderheit des Blitz2 File Requesters ist der CD Knopf Wenn Sie eine Datei laden die sich in einem anderen Verzeichnis als dem aktuellen Verzeichnis des Editors befindet so ndert sich letzteres normalerweise nicht Manchmal kann es aber f r weitere Dateizugriffe n tzlich sein da auch das aktuelle Verzeichnis des Editors dorthin gewechselt wird Hierzu dient der CD Knopf
76. er in Klammern eingeschlossen werden If ReadFile 0 ram test Im Gegensatz dazu d rfen beim Aufruf von internen Blitz2 Befehlen die keine Funktionen sind die Parameter nicht in Klammern erscheinen BitMap 0 320 256 3 Die Angabe eines Typ Zusatzes beim Zugriff auf Elemente eines NewType f hrt zu der Meldung Garbage at end of line Schrott am Ende der Zeile person name Harry zur Fehlerbehebung das Zeichen weglassen Der Daten Typ einer numerischen Variable kann sich nicht ndern Die Angabe eines anderen Typ Zusatzes als des urspr nglichen f hrt zu der Meldung MisMatched Type Nicht gleichwertige Datentypen Eine Ausnahme bilden String Variablen Es gibt nat rlich hunderte von m glichen Fehlern die zu einem Abbruch des Compilierens f hren aber die meisten sind auf einfache Syntax Fehler zur ckzuf hren und lassen sich schnell durch einen Blick in das Referenz Handbuch kl ren Oft ist auch ein Vergleich mit den Beispielprogrammen hilfreich Au erdem gibt es noch die Help Taste die eine schnelle berpr fung der Befehls Syntax erm glicht Die Anweisung CERR 44 Bei dem Gebrauch von Makros und bedingter Compilierung conditional compiling kann es n tzlich sein eigene Compilermeldungen zu erzeugen Hierzu wird die CERR Anweisung benutzt Das folgende Beispiel f hrt dazu da der Compiler anh lt und die Meldung Mu 3 Parameter haben ausgibt CERR Mu 3 Param
77. erzweigen abh ngig vom Ergebnis des Ausdrucks Ist das Ergebnis des Ausdrucks 1 wird das erste Label angesprungen ist es 2 wird das zweite Label verwendet usw Ist das Ergebnis des Ausdrucks kleiner als 1 oder es wurden nicht genug Labels bergeben wird die Programmausf hrung ohne Sprung fortgesetzt On 4 2 Goto labell label2 labell der Ausdruck ergab 1 label2 der Ausdruck ergab 2 End Programm beenden Der Befehl End stoppt den gesammten Programmflu unverz glich Wurde das Programm aus dem Blitz Editor TED heraus gestartet kehrt das Programm dorthin zur ck Wurde das Programm als ausf hrbare Datei gestartet kehrt es zur Workbench oder in das CLI zur ck je nachdem von wo es gestartet wurde Stop Programm anhalten Der Stop Befehl bringt den Debugger dazu das Programm zu unterbrechen Mit stop hat man die M glichkeit sogenannte Breakpoints in sein Programm zu setzen also Stellen an denen die Programmausf hrung angehalten werden soll damit der Programmierer sich den Speicher anzusehen oder die Ausf hrung des Programms schrittweise fortzusetzen Damit Stop funktioniert muss in den Compiler Optionen Runtime Errors eingeschaltet sein Ein Klick auf den Button Run im Debugger setzt die Programmausf hrung fort If Ausdruck Then Wenn Ausdruck Wahr dann Der Befehl If gestattet es Teile des Programms auszuf hren in Abh ngigkeit vom Ergebnis des Ausdrucks Der Befehl
78. es l stig sein nach der Maus greifen zu m ssen um einen bestimmten Befehl auszuf hren Daher existieren f r viele Editor Befehle auch Tastenkombinationen die das gleiche bewirken Die Kombinationen verwenden alle die rechte Amigataste gleich rechts neben der Leerzeichen Taste die gleichzeitig mit der angegebenen Befehlstaste gedr ckt werden mu Shortcut RAmiga A RAmiga B RAmiga D RAmiga F RAmiga G RAmiga RAmiga J RAmiga L RAmiga N RAmiga P RAmiga Q RAmiga R RAmiga S Befehl SELECT BOTTOM DELETE LINE FIND REPLACE GOTO LINE INSERT LINE JOIN LINE LOAD NEXT PREVIOUS QUIT REPLACE SAVE 94 Wirkung markiert alle Zeilen vor und hinter der aktuellen Zeile die genauso weit einger ckt sind wie die aktuelle Zeile dient zum schnelleren Markieren von Programmabschnitten positioniert den Cursor auf die letzte Zeile der Datei l scht die Zeile auf der sich der Cursor gerade befindet ruft das FIND Kommando im SEARCH Men auf bewegt den Cursor zu der angegebenen Zeile f gt an der aktuellen Cursorposition einen Zeilenvorschub ein Der Text rechts und unterhalb des Cursors kommt in eine neue Zeile f gt die n chste Zeile an das Ende der aktuellen Zeile an liest eine Datei von der Platte und l dt sie in den Editor sucht nach dem n chsten Auftreten des gesuchten Textes sucht r ckw rts nach dem vo
79. esire a dia 39 Verwaltung von Betriebssystem Listen uuu 2 42444unnnsnnnnnennnennnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 41 Primzahlgener t r 2 0 an R A EAT AEREI Bee AAEE AAEN 42 KDE catre da eei a fake hie Maes Gat 44 Fehlermeldungen amp der DeDUQGEN ccsccccceceesenceeeeedeesnaeeeesensneceueenesdedeeedavesdecetedestataeteeneeacidenddennegentees 44 Fehlermeldungen des Complilers u 4444444444Hnnennennnnnnnnnnnnnnnnnnnnennnnnnnnnnennnsnnnnnnnnnnnnnnnennnnnnnnnnnen 44 L ufzeitfehlen 2 2 een ee ern une 45 Der Blit22 DEDUJ S Tc civic noi E AER ENN 45 LA A ee a ra De an ee tts u a aet fee 47 Verfolgung des Programmablaufs u 2444444444444BBnnnnnnnnnnennannnnnnnnnnnnnnnnennnnnnnnnnennnnnnnnnnnnnnnnnnnnnn 47 Wiederaufnahme des normalen Ablaufs 444s444444eBHnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 47 Der Befehlsp ffer si seele E a aa aea ETE 47 Der Direktmod us E EEA AA E E A AE 48 Fehlermeldungen des DebUGGEIS cc cescccceeeeneseeeceeetseereceneetensencedeseesueceeeeteeerecenseeseuecaaepeneenanenteneenes 48 Kapitel Eee Le ae OCT Cen no ere eee len unse 49 Blitz2 Objekte a1 o nee genen needs aida cds 49 berblick ber die Blilz2 Objekte na ee nenne 49 Gemeinsamkeiten der Objekte 2424422244040 Raser ernennen here dann nn ne ne 50 Maximalwerle nz En E ne aan ee RE Hu Tee end Bares E E TE 50 Benutzung eines
80. eter haben Im Kapitel 9 ist das bedingte Compilieren und die CERR Anweisung eingehender beschrieben Laufzeitfehler Unter Laufzeitfehlern run time error versteht man solche Fehler die w hrend der Ausf hrung des Programms auftreten W hrend der Entwicklungsphase eines Programms sollte der Runtime Error Debugger immer aktiviert sein Dies geschieht ber das Compiler Options Men Ist der Debugger nicht aktiviert und es tritt ein Laufzeitfehler auf st rzt das System ab Falls aus Geschwindigkeitsgr nden die berpr fung der Laufzeitfehler ausgeschaltet sein mu sollte eine SetErr Anweisung eingef gt werden um einen Systemabsturz zu vermeiden Das System kehrt dann zu der Programmzeile hinter der SetErr Anweisung zur ck Es ist empfehlenswert die folgende Zeile am Anfang des Programms einzuf gen SetErr End End SetErr Eine der h ufigsten Fehlerursachen ist der Zugriff auf Dateien die entweder nicht vorhanden oder vom falschen Typ sind Daher sollten Programme die auf Dateien zugreifen grunds tzlich immer eine der genannten Methoden der Fehlererkennung verwenden Ebenso sollten alle Programme die Betriebssystem Aufrufe verwenden immer die Fehler berpr fung benutzen da Bildschirm und Window Zugriffe manchmal an Speichermangel scheitern Ein Error Handler Fehlerbehebungs Routine kann auch auf einen bestimmten Programmabschnitt beschr nkt werden dazu wird
81. f a 5 Then Print Hallo Unter Verwendung des If EndI f Befehls kann das Beispiel so ver ndert werden da ein ganzer Programmabschnitt nur dann ausgef hrt wird wenn a gleich 5 ist If a 5 Print Hallo a a 1 EndIf Mit dem Else Befehl kann alternativ ein anderer Programmabschnitt ausgef hrt werden wenn die Bedingung nicht erf llt ist If a 5 Print Hallo Else Print Auf Wiedersehen EndIf Der Programmcode wird widerum innerhalb der Strukturbl cke einger ckt um die Lesbarkeit zu erh hen genau wie bei den Schleifen Die Bedingung die in dem 1 Befehl genannt ist kann ein beliebig komplizierter Ausdruck sein wie die folgenden Beispiele zeigen If a 1 or b 2 If a gt b 5 If a 10 50 lt gt b 7 3 Anhang 5 am Ende dieses Handbuchs enth lt eine vollst ndige Beschreibung des Gebrauchs von Operatoren und deren Pr zedenz Sprungbefehle Oftmals ist es n tig innerhalb des Programms zu einem anderen Abschnitt zu springen Hierf r dienen die Befehle Goto und Gosub Die Stelle zu der das Programm springen soll mu eine Sprungmarke Label besitzen soda angegeben werden kann zu welcher Stelle gesprungen werden soll Im folgenden wird die Sprungmarke start verwendet Goto start Nprint Hallo start MouseWait 16 Da durch den Goto Befehl das Programm dazu veranlasst wird zur Marke start zu springen wird der Text Hallo nie ausgegeben Der Befehl GoSub wir
82. geben ist wird das erste Feldelement 0 verwendet Wird ein Feld mit der Lange 0 innerhalb eines NewType vereinbart so bildet dies eine Union mit dem nachfolgenden Element d h beide Elemente belegen den selben Speicherplatz Die UsePath Anweisung Bei der Verwendung von verschachtelten NewTypes k nnen die Pfadnamen f r den Zugriff auf Elemente innerhalb von Elementen sehr lang werden Wenn eine Routine nur auf ein Element zugreift k nnen lange Pfadnamen durch die Verwendung von UsePath vermieden werden Wird auf ein Feld zugegriffen das nicht mit dem Namen der Wurzel Variablen beginnt sondern mit einem Backslash f gt der Compiler den Namen der Wurzel Variablen ein der in der UsePath Anweisung definiert wurde Im folgenden Beispiel UsePath Shapes i pos For i 0 To 9 x 10 Xy 20 z 10 Next wird der Variablenname vom Compiler erweitert soda sich folgendes ergibt For i 0 To 9 shapes i pos x 10 shapes i pos y t20 shapes i pos z 10 Next Durch die UsePath Anweisung wird das Programm erheblich besser lesbar und es wird Schreibarbeit gespart Es sei darauf hingewiesen da UsePath eine Compiler Direktive ist d h die Anweisung wird bereits vom Compiler ausgewertet und nicht erst vom Prozessor zur Laufzeit Dies hat Auswirkungen wenn in dem Programm UsePath Anweisungen bersprungen werden der jeweils g ltige UsePath ist trotzdem derjenige der im Quellcode vor der entsprechenden Anweisung steht
83. get 0 72 59 0 4 40 239 GadgetJam 0 GadgetPens 1 0 TextGadget 0 8 75 0 10 NEUER EINTRAG TextGadget 0 97 75 0 11 lt TextGadget 0 129 75 0 12 lt lt TextGadget 0 161 75 0 13 gt gt TextGadget 0 193 75 0 14 gt TextGadget 0 226 75 0 15 DIAL TextGadget 0 270 75 0 16 LABEL SizeLimits 32 32 1 1 window 0 0 24 331 91 S100E MEIN TELEFONBUCH 1 2 0 WLocate 2 19 WJam 0 WColour 1 0 rint Adresse Locate 19 50 rint Telefon Locate 27 3 P W P W 39 Print Name nun beginnt die Eingabe num 4 74 strings f r jede Person NEWTYPE person info num End NEWTYPE Dim List people person 200 USEPATH people Daten aus bestehendem sequentiellen Fil inlesen If ReadFile 0 phonebook data Filelnput 0 While NOT Eof 0 If AddItem people For i 0 To num 1 info li Edit 128 Next EndIf Wend EndIf ResetList people Wenn Liste leer ein Listenelement einf gen If NOT NextItem people Then AddItem people refresh ref 0 For i 0 To num 1 SetString 0 i 1 info i Redraw 0 i 1 Next ActivateString 0 1 VWait 5 Repeat ev l WaitEvent If ev 200 Fenster schliessen Gosub update If WriteFile 0 phonebook data Daten in File schreiben FileOutput 0 ResetList people wh
84. grammabschnitte Routinen in abgeschlossene Module zu verpacken Routinen die zu Prozeduren verpackt wurden k nnen vom Hauptprogramm aus aufgerufen werden Parameter k nnen bergeben werden und es kann auch ein Wert an das aufrufende Programm zur ckgegeben werden Da eine Prozedur ihre eigenen lokalen Variablen verwaltet kann es keine Verwechslung zwischen den lokalen Variablen der Prozedur und den Variablen des Hauptprogramms geben Ebensowenig kann eine Prozedur die Variablen des Hauptprogramm ver ndern Dadurch werden Prozeduren portabel d h sie k nnen in anderen Programmen wiederverwendet werden Prozeduren die einen Wert zur ckliefern werden Funktionen genannt die anderen hei en Befehle F r Funktionen und Befehle gelten folgende Regeln e die Anzahl der Parameter ist auf 6 begrenzt e Goto und Gosub Befehle d rfen nie zu Sprungmarken Labels au erhalb der eigenen Prozedur springen e alle Variablen die innerhalb der Prozedur verwendet werden werden bei jedem Aufruf neu initialisiert Befehle Eine Prozedur die keinen Wert an das aufrufende Programm zur ckliefert hei t in Blitz2 Befehl engl Statement Hier ist ein Beispiel einer Befehls Prozedur die die Fakult t einer Zahl ausgibt Statement fact n a 1 For k 2 To n a a k Next NPrint a End Statement For k 1 To 5 fact k 29 Next MouseWait Sowohl bei der Definition der Prozedur als auch bei deren Aufruf werden die Parameter
85. gt screen shot find requester lt lt lt In das mit FIND bezeichnete Eingabefeld wird der gesuchte Text eingetragen anschlie end klicken Sie auf NEXT Hiermit wird der Cursor an die Stelle positioniert an der der Text gefunden wurde Konnte der Text nicht gefunden werden blinkt der Bildschirm auf Mit dem PREVIOUS Knopf k nnen Sie von der aktuellen Position aus r ckw rts in der Datei nach dem Text suchen Wenn Sie CASE SENSITIVE anw hlen wird die Gro und Kleinschreibung in der gesuchten Zeichenfolge ber cksichtigt Voreingestellt ist keine Ber cksichtigung der Gro schreibung Um eine Zeichenfolge durch eine andere ersetzen zu lassen tragen sie den neuen Text in das Feld REPLACE ein Wird der gesuchte Text anschlie end mit NEXT oder PREVIOUS gefunden wird er automatisch durch den neuen Text ersetzt Mit REPLACE ALL wird die gesamte Datei nach dem Find Text durchsucht und dieser automatisch jedes mal ersetzt Der Blitz2 File Requester Ein Requester ist eine Maske in der der Benutzer aufgefordert wird etwas einzugeben die deutsche bersetzung hierf r ist Eingabeaufforderung wir lassen es deshalb lieber bei dem Begriff Requester Ein File Requester ist ein Standard Dialog der zur Eingabe oder Auswahl eines Dateinamens dient Blitz2 verwendet einen eigenen File Requester der immer dann aufgerufen wird wenn eine Datei von der Platte geladen oder auf der Platte abgespeichert werden soll Ein File Requester wird be
86. gt und Sie haben die Daten von der Blitz2 Programmdiskette in einen Ordner mit dem Namen Blitz2 kopiert dann sollte die Zeile f r Ihre Startup Sequenz so aussehen ASSIGN Blitz2 Work Blitz2 Wenn Sie die Zeile eingef gt haben starten Sie Ihren AMIGA erneut um die ge nderte Startup Sequenz ausf hren zu lassen Alles Klar Nachdem Sie eine funktionsf hige Sicherungskopie der Diskette angelegt oder Blitz2 auf der Festplatte installiert haben ist es an der Zeit Blitz2 einmal laufen zu lassen Klicken Sie auf das Blitz2 Symbol um den Editor Copiler zu starten Der Editor meldet sich mit einem Copyright Vermerk den Sie nicht ignorieren sollten Klicken Sie auf OkeeDokee und los geht s Falls Blitz2 nicht richtig startet gibt es hierf r drei m gliche Gr nde 1 PLEASE INSERT VOLUME Blitz2 IN ANY DRIVE Wenn diese Nachricht erscheint m ssen Sie Blitz2 beenden und die oben beschriebenen Schritte nochmals berpr fen Benutzer von Floppy Systemen sollten darauf achten da die Sicherungskopie die Sie benutzen den Namen Blitz2 tr gt Benutzer von Festplatten Systemen d rfen das Assign in der Startup Sequenz nicht vergessen 2 ES PASSIERT NICHTS Wenn Sie das Symbol f r Blitz2 in der Workbench anklicken und das Programm l uft nicht sondern kehrt sofort zur Workbench zur ck dann liegt das daran da der Editor TED sich nicht im selben Verzeichnis wie das Blitz2 Programm befindet In diesem Fall ziehen
87. hnitt an der linken und der rechten Seite der gleiche ist merkt der Benutzer diesen bergang nicht und der Vorgang erscheint wie ein endloses Scrollen gt gt gt Diagram lt lt lt Dasselbe Vorgehen kann nat rlich auch auf die vertikale Richtung angewendet werden Dual Playfield In bestimmten Situationen ist es erforderlich einen Vordergrund unabh ngig vom Hintergrund darzustellen Der Amiga erm glicht es eine Bitmap ber eine andere zu legen Diese Darstellung wird Dual Playfield Modus genannt Im Dual Playfield Modus werden zwei Bitmaps mit je 8 Farben aufeinander dargestellt Alle Pixel der Vordergrund Bitmap die die Farbe 0 besitzen sind transparent soda die Hintergrund Bitmap durchscheint Dabei k nnen beide Ebenen unterschiedliche Farbdarstellungen besitzen gt gt gt Diagram lt lt lt Der Copper Eine gleichf rmige Animation auf dem Bildschirm wird dadurch erreicht da die Graphik und die Video Anzeige synchronisiert werden Die Anzeige wird durch einen Video Strahl erzeugt der 50 mal in der Sekunde den Bildschirminhalt erneuert Oft ist es sinnvoll die Graphik mit dem vertikalen Signal zu koordinieren Dies erm glicht der Graphik Koprozessor Copper Blitz2 bietet mehrere M glichkeiten den Copper auszunutzen Eine beliebte Anwendung besteht darin die Hintergrundfarbe so zu ver ndern da ein Regenbogeneffekt eintritt Hierzu dient der Befehl ColSplit F r erfahrene Amiga Programmierer bietet sich
88. hrt werden Dabei wird die Variable i als Z hler verwendet Der Stern ist der Multiplikations Operator a i 12 bedeutet da die variable a anschlie end den 12 fachen Wert der Variablen i besitzt Da i aber von 1 bis 12 hochgez hlt wird erh lt a die Werte 12 24 36 usw For i 1 To 12 a 1i 12 Nprint a N 12 4 2 Next MouseWait Beachten Sie da die beiden Zeilen innerhalb der Schleife einger ckt sind Dies dient dazu das Programm bersichtlicher zu machen soda man leichter erkennen kann welche Abschnitte innerhalb von Schleifen sind und welche nicht Um Zeilen einzur cken wird die Tabulator Taste verwendet Wenn Sie nun die erste Zeile ab ndern soda dort jetzt For i 1 To 100 steht werden Sie sehen da der Rechner auch kein Problem hat dies zu berechnen Sie k nnen auch die Zahl 12 in den ersten 3 Zeilen ab ndern um das Einmaleins f r andere Zahlen zu erstellen Verschachtelte Schleifen Das folgende Programm ist ein Beispiel f r die Verschachtelung von Schleifen Verschachtelte Schleifen sind 13 Schleifen die innerhalb anderer Schleifen sind Dabei werden die Anweisungen der inneren Schleife weiter einger ckt soda sich leichter erkennen l t ob f r jeden For Befehl auch ein entsprechender Next Befehl vorhanden ist For y 1 To 12 For x 1 To 12 NPrEint ya RR NENNEN Next Next MouseWait Die Verschachtelung der For x 1 To 12 Schleife innerhalb der For y 1 To 12 Schleife hat zur Folge
89. igt um Debugger Kommandos einzugeben Es gen gt dann die entsprechende Kommando Taste 46 Anzeige Optionen Die Anzeige des Debuggers erscheint immer als vorderstes Fenster ber allen anderen Screens Im Blitz Modus erschient sie ber allen Slices Die Kommandos H V und M beeinflussen die Anzeige Optionen Das Kommando H Hide schaltet die Anzeige ein oder aus V View schaltet die Anzeige auf durchsichtig soda der Hintergrund ebenfalls gesehen werden kann Das Kommando M Mode ist nur von Bedeutung wenn V aktiviert wurde Es schaltet dann den Hintergrund zwischen hochaufl sender und niedrigaufl sender Graphikdarstellung um Da im Transparent Modus nur zwei Bit Ebenen dargestellt werden k nnen ist die Darstellung nicht immer perfekt reicht aber aus um einen berblick zu erhalten Verfolgung des Programmablaufs Der Debugger erm glicht es die Ausf hrung der einzelnen Befehle eines Programmes zu verfolgen Dabei wird der zur Zeit ausgef hrte Befehl im Debugger Fenster angezeigt Das Kommando S Step dient dazu im Einzelschritt Modus durch das Programm zu gehen Jedesmal wenn S gedr ckt wird f hrt der Debugger den Befehl aus auf den der Pfeil gerade zeigt und h lt wieder an T Trace l t den Debugger die Befehle kontinuierlich ausf hren und anzeigen Mit der Eingabe von C kann das Programm angehalten werden Mit L Level wird die Ebene der Ablaufverfolgung umgeschaltet Ist L aktiv werden
90. ile NextItem people For i 0 To num 1 NPrint info i Next Wend CloseFile 0 EndIf EndIf If ev 64 If GadgetHit num Then ActivateString 0 1 If GadgetHit lt num Then ActivateString 0 GadgetHit 1 Select GadgetHit Case 10 40 Gosub update If AddItem people Then ref 1 Case 11 Gosub update If FirstItem people Then ref 1 Case 12 Gosub update If Previtem people Then ref 1 Case 13 Gosub update If NextItem people Then ref 1 Case 14 Gosub update If LastItem people Then ref 1 End Select EndIf Until ref 1 Goto refresh update For i 0 To num 1 info li StringText 0 i 1 Next Return Verwaltung von Betriebssystem Listen Das folgende Programm erl utert den Zugriff auf Strukturen des Betriebssystems Dieses Programm ben tigt die Datei AmigaLibs res in der Blitz2 Umgebung Hierf r w hlen Sie die Compiler Options aus dem Men klicken in das Feld Residents und geben den Namen AmigaLibs res ein M glicherweise wird ein Pfadname ben tigt Die Datei AmigaLibs befindet sich im Verzeichnis Residents der Blitz2 Programmdiskette Wenn Sie jetzt View Types im Compiler Men ausw hlen erscheint eine Liste aller Strukturen die vom Amiga Betriebssystem verwendet werden In der ersten Programmzeile wird eine Variable exec als Zeiger vom Typ ExecBase definiert Da der Amiga die Adresse der Listen in der Speicheradresse 4 h lt ka
91. in Fehler auf Um eine Shape halb innerhalb und halb au erhalb einer Bitmap erschienen zu lassen mu eine gr ere Bitmap verwendet und die Anzeige innerhalb der Bitmap positioniert werden Die Gr e des u eren Rahmens h ngt von der Gr e der Shapes ab die dargestellt werden sollen Im folgenden Beispiel wird eine Shape mit 32x32 Pixeln verwendet und infolgedessen werden weitere 32 Pixel um die Bitmap herum ben tigt Mit dem befehl Show 0 32 32 wird das Bild in der vergr erten Bitmap zentriert Au erdem wird die erweiterte Form des Slice Befehls verwendet da eine Bitmap dargestellt wird die gr er als die Anzeige ist Die Funktion RectsHit x y 1 1 0 0 320 32 256 32 liefert den Wert wahr zur ck wenn sich die Shape innerhalb der vergr erten Bitmap befindet und ge blittet werden kann F r eine gr ere Shape oder eine Shape mit zentrierter Handle m ssen die Parameter entsprechend ver ndert werden Die Routine makeshape erzeugt eine tempor re Bitmap die dazu benutzt wird ein Muster zu generieren das dann mit GetaShape in ein Shape Objekt gewandelt wird BLITZ Gosub makeshape BitMap 0 320 64 256 64 3 Slice 0 44 320 256 fff8 3 8 8 320 64 320 64 Show 0 32 32 while Joyb 0 0 x w Rnd 1024 512 y w Rnd 1024 512 If RectsHit x y 1 1 0 0 320 32 256 32 Blit 0 x y EndIf Wend makeshape BitMap 1 32 32 3 For i l To 15 Circle 16 16 1 1 Next GetaShape 0 0 0 32 32 Free BitMap
92. ird immer die aktuelle Screen benutzt Um beim Aufruf von Systemroutinen die Adresse der Systemstruktur Screen zu ermitteln dient der Befehl Peek l addr Screen n Windows Windows werden mit dem Befehl window erzeugt Gadgets oder Men s werden immer zum aktuellen Window hinzugef gt Zeichenbefehle wie WPlot WCircle WLine oder WBox beziehen sich ebenfalls immer auf das aktuelle Window Window Objekte k nnen Ein und Ausgabe unter Verwendung der Befehle WindowInput und WindowOutput vornehmen die Cursor Position kann mit dem Befehl WLocate kontrolliert werden Bei der Freigabe von Windows braucht man sich nicht um die Freigabe der mit dem Window verbundenen Gadgets oder Men s zu k mmern Gadget und Men listen Gadgets und Men s m ssen vor ihrem Gebrauch zu Objekten zusammengefasst werden die na wie wohl Gadgetlisten und Men listen genannt werden Diese Listen werden mit dem Window verbunden wenn dieses erzeugt ge ffnet wird Alle Gadgets und Men s m ssen also bereits beim Programmstart in ihren Listen definiert sein Paletten Paletten enthalten die RGB Information Rot Gr n Blau f r alle darstellbaren Farben Sie unterscheiden sich in folgender Weise von gew hnlichen Blitz Objekten Der Befehl UsePalette wendet die Farben die in der angegebenen Palette definiert sind auf die aktuelle Screen oder Slice an Der Befehl RGB sowie die Funktionen Red Green und Blue ndern die Farben der aktuellen S
93. ist Wird z B versucht ein Window im Blitzmodus zu ffnen wird das Compilieren mit der Meldung Only available in Amiga Mode Nur im Amigamodus verf gbar abgebrochen Deshalb ist im Referenzhandbuch jeweils ausdr cklich angegeben in welchem Modus die Befehle verf gbar sind Die Anweisungen Blitz Amiga und QAmiga sind Compiler Direktiven Sie m ssen daher in der korrekten Reihenfolge im Quellcode erscheinen 56 Zusammenfassung Blitz2 bietet Ihrem Programm zwei Umgebungen an Der Amigamodus sollte f r Anwendungsprogramme verwendet werden und ansonsten immer dann wenn Plattenzugriffe erforderlich sind Der Blitzmodus macht von den speziellen Graphikroutinen Gebrauch die in Blitz2 implementiert sind Diese erm glichen eine Geschwindigkeit die im Amigamodus einfach nicht erreicht werden kann Daf r wird aber das Betriebssystem f r die Zeit stillgelegt Abschlie end l t sich sagen da einzig und allein Unterhaltungsprogramme es sich leisten k nnen die Multitasking Umgebung des Amiga auszuschalten Regul re Anwenderprogramme die im Blitzmodus laufen werden nicht gern gesehen 57 Kapitel 9 Beispiele f r den Blitzmodus e Das Blitten von Teilfiguren e Dual Playfield Slice e Doppelte Pufferung e Weiches Scrollen Das Blitten von Teilfiguren Soll eine Shape auf eine Bitmap mit einem B1it Befehl abgebildet werden so mu die Shape vollst ndig auf die Bitmap passen Ist dies nicht der Fall tritt e
94. it Zahlen und Text zu ver ndern Um diese Informationen zu speichern werden Variablen verwendet Der folgende Befehl weist der Variablen a den Wert 5 zu a 5 Jetzt besitzt die Variable a den Wert 5 Man kann den Computer jetzt anweisen 1 zu dem Wert von a zu addieren soda das Ergebnis 6 ist a atl Ein Ausdruck kann auch mehrere Rechenoperationen enthalten Um zu erreichen da eine bestimmte Operation vor der anderen ausgef hrt wird wird diese in Klammern eingeschlossen a a 3 7 12 An dieser Stelle sei auf Anhang 5 verwiesen der eine Liste aller Operatoren und deren Pr zedenz die Reihenfolge in der die Operationen ausgef hrt werden enth lt In dem folgenden Programm wird a zun chst der Wert 0 zugewiesen dann viermal 12 addiert und der Wert ausgedruckt 0 at12 Nprint at12 Nprint at12 Nprint a a 12 Nprint MouseWait DO m m vo m m Wie Sie sehen k nnen zwei Befehle in der selben Zeile stehen wenn sie durch einen Doppelpunkt getrennt werden Im brigen ist der erste Befehl a 0 nicht n tig da allen Variablen in Blitz2 grunds tzlich zun chst der Wert 0 zugewiesen wird Einfache Schleifen Das folgende Programm druckt das 1 mal 12 Anstatt 12 Zeilen einzugeben wird eine For Next Schleife verwendet Durch eine Schleife wird das Programm angewiesen einen Programmabschnitt mehrmals zu wiederholen Durch For i 0 To 12 Next wird erreicht da die Befehle zwischen For und Next 12 mal ausgef
95. itel 3 Typen Felder und Listen Dieses Kapitel beschreibt im Detail wie Blitz2 Variablentypen Strukturen Zeiger Felder und Listen verwaltet Kapitel 4 Prozeduren Dieses Kapitel beschreibt wie Prozeduren in Blitz2 implementiert werden Kapitel 5 Beispiele Dieses Kapitel enth lt eine Vielzahl von Programmbeispielen mit detaillierter Beschreibung ihrer Funktionsweise Kapitel 6 Fehlermeldungen amp der Debugger Dieses Kapitel enth lt Informationen ber bersetzungs und Laufzeitfehler und eine vollst ndige Beschreibung des Blitz2 Debuggers Kapitel 7 Objekte Dieses Kapitel behandelt den Gebrauch von Objekten und liefert eine kurze Beschreibung der Haupt Objekte die von Blitz2 verwendet werden Kapitel 8 Blitzmodus Dieses Kapitel erl utert den Blitzmodus was er ist was er tut und wie man ihn benutzt Kapitel 9 Beispiele f r den Blitzmodus Dieses Kapitel enth lt einige Beispiele zur Erl uterung des Blitzmodus Kapitel 10 Weiterf hrende Themen Enth lt eine Vielzahl von Themen die Blitz2 zu dem m chtigsten BASIC des Amiga Computers machen Anhang 1 Der Blitz2 Editor Eine vollst ndige Beschreibung von Ted dem Blitz2 Editor Anhang 2 Tastatur k rzel Zum Gebrauch mit Ted Anhang 3 Programmier Techniken Eine eingehende Diskussion wertvoller Methoden um bei gro en Projekten die bersicht zu behalten Anhang 4 22222222222222222 Anhang 5 Blitz2 Operatoren Eine Liste der Blitz2 Operatoren Da
96. l in der zuvor die Flags abgelegt worden sind dann muss diese Variable vom Typ Long 32Bit sein nur f r AGA nur f r AGA Setzen wenn Du Bitmaps scrollen willst Erm glicht den Dual Playfield Modus Erzwingt den EHB Modus mit 6 Bitplanes HAM Modus nur f r AGA nur f r AGA nur f r AGA nur f r AGA nur f r AGA nur f r AGA Der Flag agacolors muss stets gesetzt werden wenn mehr als 32 Farben oder 24Bit Farbdefinitionen verwendet werden sollen Smoothscrolling weiches Scrollen Wenn das Flag smoothscrolling gesetzt wurde muss die erweiterte Form der Funktion DisplayBitmap verwendet werden damit die Bitmap an jeder m glichen Position angezeigt werden kann das erm glicht es dem Programmierer die Bitmap zu scrollen die gerade angezeigt wird Beachte Benutze immer die erweiterte Version von DisplayBitmap bei gesetztem smoothscrolling Flag auch wenn die Bitmap an Koordinate 0 0 angezeigt wird e DisplayBitmap akzeptiert f r die X Koordinate Werte vom Typ Quick q und positioniert die Bitmap auf AGA Maschinen in Pixel Gruppen e Die Breite des Displays verringert sich gegen ber den Standardwerten 320 640 1280 wenn smoothscrolling aktiviert ist 73 Dualplayfields Wenn das Flag dualplayfields gesetzt ist werden zwei Bitmaps bereinander auf dem selben Display angezeigt Eine Kombination der Flags dualplayfields und smoothscrolling gestattet Parallax Effekte
97. ltae bauble tate 65 Bedirgte Compilierung tutti ario ladran 66 A O 67 Inline Assembler tl lalo cea dads osado lcd dll reses ralaicad 70 Kapitel I SEES E EE E HERE OUENERTERTENTEETITKRELTECNTUERBEREDOLTTEERDELTTTLERENES EPTEREEUEDETPELLEUDERUTTEREE AE 72 Display Eibrary SAGA kb he id 72 A TEE 72 InitialiSiSrUn dci 8 aiii ltd ii 72 RN 73 Smoothscrolling weiches Seraerts a cnn nc canon ocn EE S 73 Dual playfield nona adidas 74 TO ELE E A TAE EE llieaitelds ag A elite babas 74 FetehMode aa se ea ae a a aa aaa e aaea adn a ald aea aSa Ren ae 74 Mehrere Displays Arren eae een en AE ikea 74 Erweiterte Copper Kontrolle 44444444444400HHnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnennnnnrennnnnnnnnnrenn 75 Beispiel AN 75 A ri sg hat ee LIE ce aaa cand eevee th adres 76 Befehlsreferen2 2 u sn ee enaa ea a aae a awe tae deat ea E et aaa aaas adadni aada 78 PrOJ AMS cotidiana are nee 78 EiNtUhrung aszurrseraeneee E E EEE A AI P EE NE er Renee 78 Goto Springe zu Programm Label uu 244444nnsnnnnnennnnnnnnnnnnnnennnnnennnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnn 78 Gosub Springe zum Label und kehre zur ck ur ss44sssnnnsnnnnnnennnnnnnnnnnnnannnnnnnnnnnnnnnnnnnnnnnnnnn nassen 78 Return kll beiback 4 2 erahnen lid 78 On Ausdruck Goto Gosub Program Label Program Label 244444444444nnRR nenn nnnnnnnenennnnnn 79 End Programm beendeni ckstiensz nee desea A
98. mten Programmcode nach der Zahl 320 abzusuchen Bedingte Compilierung Die bedingte Compilierung gestattet es den Compiler quasi ein und auszuschalten w hrend dieser sich durch den Programmcode arbeitet Dadurch ist zu kontrollieren welche Teile des Programmcodes bersetzt werden und welche nicht Dies kann dazu gebraucht werden um unterschiedliche Versionen eines Programms zu erzeugen ohne zwei Versionen des Quellcodes pflegen zu m ssen Au erdem kann damit z B eine abgemagerte Demo Version eines Programms erzeugt oder das Programm auf unterschiedliche Hardware Konfiguration eingestellt werden Ebenso kann das bedingte bersetzen bei der Fehlersuche hilfreich sein indem f r diesen Zweck unwichtige Teile des Codes ausgeschaltet werden oder zus tzliche berpr fungen eingebaut werden Wir hoffen allerdings da der Blitz2 Debugger dies nicht erforderlich macht Folgende Compiler Direktiven stehen zur Verf gung CNIF Compiler einschalten wenn der numerische Vergleich wahr ist CSIF Compiler einschalten wenn der String Vergleich wahr ist CELSE schaltet den Compiler in den entgegengesetzten Zustand also ein gt aus und aus gt ein CEND Ende eines Blocks der bedingt bersetzt werden soll der vorherige Zustand des Compilers wird wiederhergestellt Der Compiler besitzt einen internen Ein Aus Schalter Dieser wird durch die Anweisungen CNIF und CSIF ein oder ausgeschaltet CELSE wechselt den Zustand des S
99. n Nachfolger Zeiger des neuen Elementes bernommen Nicht so recht verstanden Macht auch nichts greifen Sie einfach nie auf Listenelemente ber den Feldindex zu Der Datentyp Pointer Der Datentyp Pointer Zeiger in Blitz2 ist eine komplizierte Angelegenheit Wenn eine Variable als Zeiger definiert wird wird gleichzeitig festgelegt auf welchen Datentyp sie zeigt Im folgenden Beispiel wird groesster als Zeiger auf den Typ Kunde definiert 27 DefType groesster Kunde Die Variable groesster ist einfach ein Doppelwort das die Speicheradresse einer anderen Variablen vom Typ Kunde enth lt Als Beispiel soll eine lange Liste KundenListe des Typs Kunde dienen die nach dem Kunden mit dem gr ten Umsatz durchsucht werden soll Wenn der Umsatz eines Kunden also eines Listenelements gr er ist als der auf den die Variable groesster im Moment zeigt wird diese so ver ndert da sie auf den aktuellen Kunden also das aktuelle Listenelement zeigt wie in der folgenden Zeile groesster KundenlListe Wenn in einer Schleife die ganze Liste durchlaufen ist kann die Variable groesster ausgedruckt werden so als ob sie selber vom Datentyp Kunde w re obwohl sie eigentlich nur ein Zeiger auf eine andere Variable diese Typs ist Print groesster name 28 Kapitel 4 Prozeduren e Einleitung Befehle Funktionen e Rekursion e Globale Variablen e Zusammenfassung Einleitung Prozeduren dienen dazu Pro
100. n Screen holen Window 0 0 0 320 210 1000 Hello World 1 2 Wenn Sie das Programm jetzt bersetzen und laufen lassen wird die Ein und Ausgabe ber das Window erledigt anstatt mit der Kommandozeile Es sollte noch folgende Anderung der Zeile b Edit 10 vorgenommen werden b Val Edit 10 Dadurch wird die standardm ige Ausgabe des 0 Zeichens bei der Window Version von Edit unterdr ckt Schalten Sie jetzt die Option Create Executable Icon im Editor Men an und w hlen Sie Create Executable oder dr cken Sie das K rzel Amiga E 34 Geben Sie dann einen Namen f r das Programm ein Sie haben soeben ihr erstes eigenst ndiges Workbench Programm erzeugt Dies k nnen Sie jetzt starten indem Sie auf das zugeh rige Icon klicken Ein graphisches Beispiel Das folgende Programm ffnet zun chst eine eigene Screen und zeichnet dann eine Rosette also eine Figur bei der alle Punkte eines Kreises durch Linien verbunden werden Rosetten Beispiel n 20 NEWTYPE pt X Wiy End NEWTYPE Dim p pt n For i 0 To n 1 p i x 320 Sin 2 i Pi n 319 p i y 256 Cos 2 i Pi n 255 Next Screen 0 25 einfarbige interlace screen anfordern ScreensBitMap 0 0 For il 0 To n 2 For i2 i1 1 To n 1 Line p il x p il y p i2 x p i2 y 1 Next Next MouseWait Der mit NewType definierte Datentyp pt besitzt zwei Elemente x und y Dadurch brauchen
101. n k nnen durch spezielle Pufferung sauber restauriert werden und Schablonen k nnen in mehreren Ebenen bereinandergelegt werden Wenn Sie das Blitz2 User Magazin abonnieren erhalten Sie eingehendere Dokumentation zu diesen Themen sowie st ndig erweiterte Bibliotheken Der Befehlssatz von Blitz2 nimmt weiter zu w hrend wir unserem Ruf f r Blitz BASIC gerecht werden Das erste aber was Sie machen sollten ist uns Ihre ausgef llte Registrierungs Karte zur ckzusenden Nur als registrierter Benutzer erhalten Sie die Updates von Blitz2 und k nnen sicher sein immer auf dem neusten Stand der Entwicklung zu sein Simon Armstrong Der Gebrauch dieses Handbuchs Diese Handbuch stellt alle notwendigen Informationen f r die Benutzung von Blitz2 zur Verf gung Es ist als Erg nzung zum Blitz2 Referenz Handbuch gedacht in dem s mtliche Befehle ausf hrlich beschrieben werden Das Benutzer Handbuch enth lt wichtige Informationen ber den Gebrauch des Editor Compilers Erl uterungen der BASIC Programmierung und weitgehende Erkl rungen vieler neuer Konzepte die zur Verbesserung von Blitz2 hinzugef gt worden sind Kapitel 1 Installation Diese Kapitel liefert eine kurzen berblick ber Blitz2 Installations Anweisungen und Hinweise zur Inbetriebnahme Kapitel 2 Grundlegendes ber Blitz2 Dieses Kapitel wendet sich an Benutzer ohne Programmiererfahrung und liefert eine schrittweise Einf hrung in die Programmiersprache BASIC Kap
102. nd 200 EndIf Next Listen k nnen nat rlich f r jeden Datentyp angelegt werden nicht nur f r Aliens d h sie sind nicht nur f r Spiele zu gebrauchen Listenverarbeitung Wie schon erw hnt wird das Listenelement das zuletzt eingef gt wurde zum aktuellen Element Auf dieses aktuelle Element kann zugegriffen werden indem der Listenname mit leeren Klammern angegeben wird 26 Um die Liste von vorne bis hinten zu verarbeiten wird zun chst der interne Listenzeiger mit ResetList zur ckgesetzt und dann wird in einer Schleife mit Hilfe von Next Item schrittweise von einem Eintrag zum n chsten gegangen Der interne Zeiger zeigt dann jeweils auf das aktuelle Element Im folgenden werden alle Aliens in der Liste auf eine eher ineffektive Weise bewegt wohl zur Bildschirmmitte USEPATH Alien ResetList Aliens while NextItem Aliens If x gt 160 Then x 1 Else 1x 1 If y gt 100 Then y 1 Els y l Wend Die While Wend Schleife wird solange durchlaufen bis alle Listenelemente einmal das aktuelle Element waren und bearbeitet wurden unabh ngig davon wieviele Elemente zuvor eingef gt wurden Da Next Item den Wert Falsch zur ckliefert wenn kein Listenelement mehr vorhanden ist wird an dieser Stelle die Schleife abgebrochen Das Beispiel macht klar wieviel bequemer und sauberer es ist Listen zu benutzen statt herk mmlicher Felder Statt der For i 1 To n Schleife wird einfach eine while Wend
103. ne dass Type angegeben wurde wird der Wert als Standard Datentyp zur ck gegeben Greift man selbst nicht ein ist dies Quick q Wie Statements darf eine Funktion bis zu sechs Parameter besitzen Diese d rfen nur den sechs Basis Datentypen entsprechen Eigene Datentypen NewType d rfen nicht ohne Weiteres als Parameter verwandt werden Das Ergebnis einer Funktion wird mit dem Befehl Function Return zur ck gegeben Auch Funktionsaufrufe d rfen erst erfolgen wenn die Funktion definiert ist x l Add 2 3 Fehler Add ist noch nicht bekannt Function l Add first l second 1 result 1l first second Function Return result End Function x l Add 2 3 hier funktionierts x ist nun 5 End Function Eine Function wird mit End Function beendet Jede Funktion muss mit mit einem End Function geschlossen werden Function Return Ausdruck Function Return erlaubt es einer Funktion einen Wert an den Aufrufer zur ckzugeben So kann die Funktion bspw einen oder mehrere Parameter entgegen nehmen aus diesen einen neuen Wert berechnen und diesen Wert zur ck geben so dass der Aufrufer mit ihm weiter arbeiten kann Function l Add first l second 1 result 1 first second Function Return result End Function xl Add 2 3 x li Shared Varl Var Normalerweise kennen Statements die Namen von Variablen nicht die sich nicht innerhalb der Statement Definition befinden So kann das Hauptprogramm eine Vari
104. nicht zwei Felderx w n und y w n angelegt zu werden sondern nur ein Feld des Typs pt das dieselbe Information enth lt Die einzelnen Elemente des NewType werden mit dem Backslash Zeichen 1 erreicht In der ersten For Next Schleife werden zun chst die Punkte des Kreises berechnet Mit dem Befehl ScreenBitMap kann anschlie end direkt auf die Screen mit den Befehlen Plot Line Box und Circle zugegriffen werden Programme die Windows benutzen sollten diese Methode nicht anwenden sondern zum Zeichnen die Befehle WPlot Wline WBox und WCircle verwenden 35 Men s und File Requester Das folgende Beispiel demonstriert den Gebrauch von Men s und File Requestern Es erzeugt eine Screen und ein Window bringt eine Men leiste an und je nachdem was der Benutzer ausw hlt erscheint ein File Requester oder das Programm wird beendet r Ein einfaches Beispiel f r einen File Requester Screen 0 11 Ein Men ausw hlen intuition screen ffnen MenuTitle 0 0 Projekt Men liste anlegen Menultem 0 0 0 0 Laden ETA enultem 0 0 0 1 Sichern ng enultem 0 0 0 2 Quit ng axLen path 192 MUSS angegeben werden MaxLen name 192 bevor der Requester benutzt wird Ein BACKDROP d h unsichtbares Window erzeugen Window 0 0 0 320 200 1900 1 2 WLocate 0 20 Cursor in die linke obere Eck SetMenu 0 Men mit dem Fenster verbinden Repeat Select WaitEvent Case 256 ein Men
105. nksagungen an Mark Sibly den Verfasser des Blitz2 Compilers der Bibliotheken und der Dokumentation Rod Smith f r die Gestaltung den Blitz Mann und die Graphiken auf der DemoDisk2 Simon Armstrong f r die Dokumentation und verschiedene Routinen Paul Andrews f r die Spiele auf DemoDisk2 Roger Lockerbie f r Schreibarbeiten Rich Parrill f r die Repr sentation der Benutzer in den USA Aaron Koolen f r verschiedene Beitr ge Blitz One Benutzer f r R ckmeldungen und Unterst tzung Kapitel 1 Installation e Was Sie alles erhalten haben e Blitz Start Alles klar e Die Beispiele Das aktuelle Verzeichnis e Zusammenfassung Was Sie alles erhalten haben Programmdiskette Diese Diskette enthalt die drei Hauptdateien die fur Blitz2 bendtigt werden Blitz2 der Compiler Ted der Editor DefLibs Die Befehls Bibliothek von Blitz2 F r Benutzer von Floppy Systemen ist das Programm mit einer eingeschr nkten Workbench1 3 Umgebung ausger stet worden soda das Betriebssystem von der Diskette gestartet gebootet werden kann Beispieldiskette Diese Diskette enth lt eine Menge Demo Programme und Beispiele die mit Blitz2 geschrieben wurden Diese Beispiele bieten eine F lle an Informationen f r Blitz2 Programmierer sobald diese mit den wesentlichen Konzepten vertraut sind Benutzerhandbuch Das Benutzerhandbuch bietet eine allgemeine Einf hrung in die Programmierung mit Blitz2 Au erdem werden die vielf l
106. nktionen wird der Wert in dO zur ckgegeben Da das Adress Register a4 die Basis der lokalen Variablen darstellt mu zu Beginn der Prozedur der Befehl UNLK a4 stehen Weiterhin mu die Prozedur hundertprozentig aus Assembler Befehlen bestehen und die Adress Register a4 bis a6 d rfen nicht ver ndert werden Im folgenden Beispiel wird gezeigt wie der Befehl qplot in Assembler realisiert und von einer BASIC Routine aufgerufen wird Oplot setzt ein Pixel auf der ersten Bitplane der angegebenen Bitmap Wie man sieht k nnen mehrere Assembler Befehle auf einer Codezeile stehen Statement qplot bmap 1 x w y w UNLK a4 MOVE 1 d0 a0 MULU a0 d2 MOVE 1 8 a0 a0 ADD 1 d2 a0 MOVE d1 d2 LSR 3 d2 ADD d2 a0 BSET b dl a0 RTS End Statement Screen 0 1 ScreensBitMap 0 0 bp 1l Addr BitMap 0 For y w 0 To 199 For x w 0 To 319 aplot bp x y Next Next MouseWait Es k nnen auch ganze Bibliotheken mit Routinen in Machinensprache angelegt werden Dies ist mit dem Advanced Programmers Pack von Acid Software m glich das ein sehr m chtiges Library System enth lt Es stellt eine effektive Entwicklungsumgebung f r die fortgeschrittene Programmentwicklung zur Verf gung 71 Kapitel 11 Display Library amp AGA Einf hrung Die Display Library ist eine wichtige Erweiterung f r Blitzbasic2 Entwickelt als Ersatz f r Slices bietet sie nicht nur Spieleprogrammierern Zugriff auf das AGA Chipset und einen modularen
107. nn mit dem Befehl Peek 1 4 der 4 Byte lange Wert vom Speicher in unsere Zeigervariable gelesen werden Da die Variable exec als Zeiger auf eine ExecBase Struktur definiert wurde kann jetzt mit dem Backslash auf jedes Element der Struktur mit dessen Namen zugegriffen werden Die Namen der Strukturelemente k nnen mit Hilfe des ViewType Men s angesehen werden wenn Sie den Namen ExecType Gro schreibung beachten eingeben Anschlie end wird eine weitere Pointervariable angelegt diesmal vom Typ List die auf ein Listenelement der Exec Struktur zeigt Alle Exec Listen bestehen aus Knoten nodes Der erste Knoten repr sentiert immer den Listenkopf danach folgen die Daten In der dritten Zeile wird die Variable mynode als Zeiger vom Typ Node definiert und zeigt auf den ersten Knoten der Liste In der Schleife wird die Liste dann solange abgearbeitet bis der Zeiger auf den Nachfolger successor 0 ist Damit ist wieder der Anfang der Liste erreicht Der Befehl Peek liest ASCII Zeichen aus dem Speicher bis eine Null erreicht wird Dies ist sehr n tzlich um Strings die in C Notation abgelegt sind C Strings werden mit einem Null Byte beendet wie In Name einzulesen Als letztes wird dem Pointer mynode die Adresse des eigenen Nachfolgers zugewiesen 41 Exec Listenverwaltung exec ExecBase Peek 1 4 mylist List exec LibList mynode Node mylist lh Head While mynode ln Succ a Peek mynode ln_Nam
108. nnnnnnnnnnnnrrnn 84 End Statement enat i re ea a a elite ve edge ential eee 84 Statement Retur eonna A eee eo ee es 84 Function Type Name Parameter1 Parameter2 ccccecceeeeeeeceeeecneeeeeeeeeeeeeeeeeeeeeseneeeeeeeeesaaees 84 End Functions tra a cee eh eds diel a ae a be 85 Shared Var Var ee ea ac nadine ae Dana noia ainda 85 Setint Type Interrupts zu MIP cece eee cece eeeeeeceeeeaeeeeeeeeeeeeeeeee ess saaaaacseaaaneneeeeeeeeeeeeeeseeeeeeeeaaaaaaes 86 ENG Selina ine He Sahat tie onal Bath ne Wien ssi lath frets id ei ats Lah 86 GNET OE aana ee An EHI Ebert 86 SetErr Fehler zu Mir 222 24H HH A taa es batido 87 A as ee dassigtatitcedednccebte aaa eaa e DI ren Eee e e SELBER 87 CIS A al VENETIEN delat tae 87 Anhang er a ll a ie ae dll 88 Ber Blitz2 Editor TED Br RR a A Ra A AA 88 Einleit ng rn ee nee ne Era 88 A Hear teren er pel esse EEr 88 TextblOck Markierel iia reales A Er A 89 Die Edit r Men s tia ibi ess at 89 Der Blitz2 Fil6sRequesteriainccoioticisida eek bs Hinsehen beba 91 Die Gompiler Optionen 44 2 leas rate bh ads abate dadas ici 92 ANHANG licor balla tetitas bbs bid bale De ida 94 ESC share ee E AEE ENE RAAE A E ana Era EAA ARSE PEETRE TERRE 94 NO ATN 96 ProgrammieriechniKen aeni r A blo ET leidas 96 Namens genun eE aN lib 96 Anmerk ungen und Kommentare u u 2 2 a a en a a aieia 97 Techniken der strukturierten Programmierung u4ss44s44snnnn
109. nsnnnnnnennnnnnnnnennnnnnnnnnnnnnsnnnnnnnnnnnnnnnnnnn 97 Modularisiefunga n se ea ee aa Rena dans aan Ran Bun das dabas 98 A O 98 Lesbarkeitides PrOJAMMS cuco ion Eana 98 A NO 100 Blit22 Operatoren aus lane aeae aa dida 100 Vorwort Herzlich willkommen im Kreise der Blitz2 Benutzer Wir von Acid Software hoffen Ihnen mit diesem System eine Umgebung zur Verf gung zu stellen in der sie alle Ihre Ideen auf dem Amiga realisieren k nnen Die gr te Errungenschaft von Blitz2 sind die NewTypes Das sind Strukturen die wir aus C bernommen und so in BASIC installiert haben als geh rten Sie immer hierher F r Anh nger der strukturierten Programmierung gibt es Prozeduren und Funktionen Der erweiterte Satz von Kontrollstrukturen der in den vergangenen Jahren aus Pascal in BASIC eingebracht wurde wird ebenso unterst tzt Verkettete Listen erfreuen sich immer gr erer Beliebtheit deshalb haben wir sie in Blitz2 aufgenommen Wir haben es sogar geschafft sie schneller als gew hnliche Felder arbeiten zu lassen Bei der Erstellung von Blitz2 haben wir sehr viel M he auf die volle Unterst tzung des Betriebssystems verwandt Men s Windows Gadgets und Screens sind alle als Objekte in Blitz2 verf gbar Nat rlich unterst tzt Blitz2 auch die gesamte Amiga Library soda Betriebssystem Aufrufe einfach nur wie Blitz2 Befehle parametriert werden Fur Geschwindigkeits Fanatiker gibt es neue Verfahren des Blitting Hintergrundgraphike
110. numerische Zeichen Buchstaben und Zahlen und Underscores enthalten e Namen d rfen nicht mit den selben Buchstaben beginnen wie einer der Blitz2 Befehle Im brigen wird bei Variablen und Labelnamen die Gro und Kleinschreibung ber cksichtigt d h die Variablen meinschiff und MeinSchiff haben nichts miteinander zu tun Stil Es gibt viele Methoden der Namensgebung die das Programmieren erleichtern Im folgenden werden einige Richtlinien genannt die dazu dienen den berblick zu behalten wenn das Programm immer weiter anw chst und mehr und mehr Variablen und Labels verwendet werden Das wichtigste ist jedoch den einmal gew hlten Stil beizubehalten Es ist sinnvoll Variablen und Labels in Gruppen zusammenzufassen und diese Gruppenzugeh rigkeit in die Namensgebung einflie en zu lassen Dadurch erh ht sich der Informationsgehalt der Namen Gruppen k nnen folgenderma en gekennzeichnet werden e nur Gro buchstaben NAME gro e Anfangsbuchstaben Name oder nur Kleinbuchstaben name e einzelne Buchstaben I Worte Loop oder Doppelworte MainLoop Underscore am Anfang loop oder in der Mitte main_loop numerische Zus tze wie loop1 Ioop2 usw Die Namensgebung ist eine Frage des pers nlichen Stils aber durch die Beibehaltung eines Stils und die Verwendung von sinnvollen Namen kann die Lesbarkeit eines Programms wesentlich erh ht und die Fehlersuche erleichtert werden
111. olt Audio Kanal 2 Pointer L nge geholt 10 Audio Kanal 3 Pointer L nge geholt 11 serieller Empfangspuffer ist voll 12 Diskettenlaufwerk ist synchronisiert 13 Unterbrechung Interrupt von aussen OMONDARWN O Der n tzlichste all dieser Interrupts ist der VBlank Interrupt Dieses Ereignis wird immer dann ausgel st wenn der Bildschirminhalt neu gezeichnet wurde Auf PAL Systemen also 50 mal pro Sekunde Interrupt Handler also die Set int Bl cke die diese Ereignisse behandeln m ssen so schnell wie m glich ausgef hrt werden da es sein kann dass der n chste Interrupt bereits stattfindet w hrend das eigene Programm sich noch durch den Handler arbeitet Interrupt Handler d rfen niemals auf String Variablen oder Literale zugreifen F r den BlitzModus ist dies die einzige Einschr nkung F r den AmigaModus kommen noch Blitter Operationen Dateizugriffe und Intuition Funktionen dazu Um einen Interrupt Handler zu implementieren muss ein Setint Block aufgesetzt werden der den entsprechenden Code zur Verarbeitung des Interrupts beinhaltet Ein End SetInt beendet den Handler Dem einf hrenden Set Int folgt einer der Codes aus obiger Tabelle Als Beispiel reagiert ein Set Int 5 auf den Interrupt VBlank Interrupt Es k nnen auch mehrere Handler auf denselben Interrupt reagieren End Setint Dieser Befehl beendet einen Interrupt Handler welcher mit Setint initialisiert wurde Auf jedes Setint muss auch ein End Setint folgen damit
112. paghetti Programme vermeiden Nach der Entscheidung dar ber wie das Programm unterteilt werden soll empfiehlt es sich mit den schwierigsten Teilen zu beginnen und diese auszutesten solange das Programm noch klein und berschaubar ist Denn je gr er das Programm ist desto langwieriger wird die Fehlersuche Das gleiche gilt f r die Zeit die man auf den Compiler warten mu wenn man Fehler sucht oder kleine nderungen vorgenommen hat und deswegen das gesamte Programm neu compilieren mu Hier ist es empfehlenswert den in Frage kommenden Abschnitt aus dem Hauptprogramm herauszunehmen und in einem kleineren Testprogramm auszutesten Einige Dinge sollten bei der Entwicklung von Routinen beachtet werden Eine Routine mu mit allen m glichen Situationen fertig werden Der Programmcode sollte effizient sein e Modularisierung d h eine Routine kehrt immer dahin zur ck von wo aus sie aufgerufen wurde e Ausf hrlich dokumentieren e Besonders den Gebrauch von globalen Variablen und Feldern kommentieren e Alle Routinen m ssen wasserdicht sein d h sie d rfen nicht abst rzen wenn sie mit den falschen Parametern gerufen werden e Programmabschnitte einr cken und die Zeilenl nge begrenzen so da der Code lesbar bleibt Nebenbei Neben der Kommentierung der einzelnen Routinen im Programm selbst ist es n tzlich sich eine handgeschriebene Stichwortliste anzulegen auf der z B notiert wird welche Variablen in
113. r das Ende der Zeile links rechst bzw an den Anfang oder das Ende des Bildschirms oben unten In Anhang 2 befindet sich eine Liste der Tastaturk rzel die die Bedienung erleichtern Textbl cke markieren Beim Programmieren ist es oft notwendig ganze Textbl cke zu bearbeiten Hierzu mu der Textblock zun chst markiert werden Dies kann entweder mit der Maus oder mit einer Funktionstaste geschehen Bewegen Sie den Mauszeiger an den Anfang des Textblocks dr cken Sie die linke Maustaste und bewegen Sie die Maus mit gedr ckter Taste an das Ende des Blocks Erst dann lassen Sie den Mausknopf los Alternativ dazu k nnen Sie den Anfang des Textblocks mit der Taste F1 markieren und das Ende mit F2 Eine n tzliche Einrichtung f r das Programmieren ist die Tastenkombination Amiga A mit der die aktuelle Zeile und alle anschlie enden Zeilen die genausoweit einger ckt sind markiert werden Die Editor Men s Mit dem rechten Mausknopf wird die Men leiste des Blitz2 Editors aufgerufen Es folgt eine Beschreibung der einzelnen Funktionen die ber die Men s erreichbar sind von links nach rechts Das PROJECT Men NEW l scht den gerade im Editor befindlichen Text aus dem Speicher Wenn sich der Inhalt seit der letzten Sicherung ge ndert hat erscheint ein Requester der eine Best tigung f r das L schen verlangt LOAD l dt eine Datei von der Platte Es erschient ein File Requester der eine einfache Auswahl der Datei erm
114. rden Texteingabe Die Texteingabe im Editor erfolgt wie bei einer normalen Schreibmaschine man tippt einfach drauflos und mit der Return Taste wird in die n chste Zeile gesprungen Dabei bewegt sich der Cursor Textmarke das kleine K stchen auf dem Bildschirm mit jedem eingegebenen Zeichen weiter Der Cursor bestimmt die Stelle an der der Text den Sie tippen eingef gt wird Mit Hilfe der Pfeiltasten kann der Cursor innerhalb des Textes umherbewegt werden Alle Eingaben werden dort in den Text eingef gt wo sich der Cursor gerade befindet Dabei wird der Text der sich rechts vom Cursor befindet entsprechend nach rechts und unten verschoben 88 Ebenso kann das Zeichen auf dem sich er Cursor steht mit der DEL Taste gel scht werden und der nachfolgende Text f llt den leeren Raum wieder auf Die Taste links von der DEL Taste dient ebenfalls zum L schen hierbei wird aber das Zeichen links vom Cursor gel scht Die Tabulator Taste TAB funktioniert hnlich wie bei einer Schreibmaschine der Cursor und der dahinter befindliche Text werden um eine bestimmte Anzahl Spalten nach rechts geschoben Mit der RETURN Taste wird eine neue Zeile begonnen Soll der Text rechts von der Cursor Position in eine neue Zeile geschoben werden mu SHIFT RETURN gedr ckt werden Dadurch wird ein Zeilenvorschub in die Zeile eingef gt Wird die SHIFT Taste zusammen mit einer der Pfeiltasten gedr ckt bewegt sich der Cursor an den Anfang ode
115. rechenden Code auszuf hren Goto Springe zu Programm Label Der Befehl Goto lasst das Programm zu einem bestimmten Label im Code zu springen und dort mit der Ausf hrung des Programms fortzufahren Beachte das Goto keinen automatischen R cksprung vorsieht Goto berspringt und oder wiederholt Teile des Codes Gosub Springe zum Label und kehre zur ck Der Befehl Gosub arbeitet in zwei Schritten 1 Die Anweisung im Source die auf Gosub folgt wird in einem speziellen Speicher Stack genannt gesichert 2 Das Programm springt zum Label das bei Gosub angegeben wurde Der Teil des Programms der mit Gosub angesteuert wird nennt sich Unterroutine und wird mit der Anweisung Return beendet Return sorgt daf r dass das Programm an die Stelle zur ck springt die zuvor auf den Stack geschrieben wurde also exakt die Stelle die auf das vorherige Gosub folgte Gosub myLabel myLabel bringe die Magie dieser Unterroutine zum Wirken Return Return I ll be back Return wird verwendet um nach einem Sprung per Gosub aus der Unterroutine zur ckzukehren und das Programm an der Stelle weiter arbeiten zu lassen die auf das Gosub folgte Dies gestattet das Erstellen von 78 Unterroutinen die das Programm in logische Elemente aufteilt Unterroutinen k nnten in einem Spiel bspw Initialisierung Men und GameLoop sein On Ausdruck Goto Gosub Program Label Program Label On l sst ein Programm v
116. reen 0 workbench screen verwenden Window oeffnen Window 0 0 10 320 180 408 1 2 rp l RastPort 0 Rastport fuer window ermitteln win l1 Peek 1 Addr Window 0 Window Struktur ermitteln DrawEllipse rp 100 100 50 50 graphics library oveWindow_ win 8 0 intuition library BitMap 1 320 200 2 Arbeitsbitmap erstellen Circlef 1 60 100 100 1 etwas zeichnen Jetzt in das Window transferieren BltBitMapRastPort Addr BitMap 1 0 0 rp 0 0 100 100 c0 WaitEvent Mit dem letzten Befehl B1tBitMapRastPort_ kann eine Graphik die mit den schnelleren Blitz2 Bitmap Befehlen erzeugt wurde in einem Window ausgegeben werden Dadurch k nnen die Blitz2 Befehle noch universeller angewendet werden Zugriff auf Strukturen des Betriebssystems Wenn die residente Datei AMIGALIBS RES vorhanden ist s Anfang des Kapitels ist sogar ein noch weitergehenderer Zugriff auf das Betriebssystem m glich Im folgenden Beispiel wird auf Strukturen des Betriebssystems zugegriffen Variable exec zeigt auf die ExecBase Struktur Variable mylist zeigt auf den Typ List Variable mynode zeigt auf den System Knoten exec ExecBase Peek l 4 mylist List exec LibList mynode Node mylist lh Head While mynode ln Succ a Peek mynode ln Name Knotennamen drucken NPrint a mynode mynode ln Succ gehe zum naechsten Knoten Wend 64 MouseWait Durch die Angabe des Sterns in variablenname typ
117. rherigen Auftreten des gesuchten Textes beendet den Blitz2 Editor ersetzt den gefundenen Text durch den im Find Befehl angegebenen Ersatz Text speichert die im Editor befindliche Datei auf der Platte ab RAmiga T RAmiga W RAmiga Y RAmiga Z RAmiga RAmiga RAmiga TOP FORGET DELETE TO RIGHT CLI DEFAULTS BLOCK TAB BLOCK UNTAB 95 positioniert den Cursor in die erste Zeile der Datei hebt die Markierung eines Textblocks auf l scht alle Zeichen rechts vom Cursor in der aktuellen Zeile er ffnet eine Kommandozeile erlaubt nderungen der Voreinstellungen f r das Aussehen des Blitz2 Editors verschiebt den markierten Textblock um einen Tabulatorsprung nach rechts verschiebt den markierten Textblock um einen Tabulatorsprung nach links Anhang 3 Programmiertechniken Namensgebung Anmerkungen und Kommentare e Techniken der strukturierten Programmierung Modularisierung e Nebenbei e Lesbarkeit des Programms Dieses Kapitel enth lt eine Reihe von Hinweisen und Tipps die dazu dienen richtig lauff hige Blitz2 Programme zu schreiben Namensgebung Die Regeln Bei der Vergabe von Variablennamen und Namen f r Labels Sprungmarken m ssen folgende Regeln beachtet werden Namen k nnen beliebig lang sein e Namen m ssen mit einem Buchstaben A Z a z oder einem Underscore Unterstreichung beginnen Namen d rfen nur alpha
118. rogrammdiskette wird die Kopie wahrscheinlich den Namen Copy of Blitz2 besitzen Wenn das der Fall ist w hlen Sie das Symbol f r die Diskette an indem Sie es anklicken w hlen RENAME im Workbench Men aus und benennen die Diskette in Blitz2 um Den selben Vorgang wiederholen Sie f r die Beispiel Diskette Benutzer von Festplattensystemen Benutzer von Festplattensystemen sollten die Blitz2 Programme und Bespiele in einem Ordner auf der Festplatte installieren Daf r booten Sie von der Festplatte und erzeugen einen neuen Ordner mit dem Namen Blitz2 Legen Sie die Blitz2 Programm Diskette in das Laufwerk ein klicken Sie das Symbol an und ziehen Sie die drei Symbole TED Blitz2 und DEFLIBS in den neuen Ordner auf der Festplatte Alle Unterverzeichnisse wie z B TOOLS m ssen ebefalls in den neuen Ordner auf der Festplatte kopiert werden Dann legen Sie die Beispiel Diskette ein und ziehen die Ordner von dieser Diskette ebenfalls in den Blitz2 Ordner den Sie auf der Festplatte angelegt haben Alles was Sie jetzt noch brauchen ist ein ASSIGN Befehl der dem Blitz2 Programm mitteilt wo die Dateien zu finden sind Um den Befehle einzuf gen laden Sie die Datei s startup sequence in einen Texteditor wie z B Ted suchen die Stelle an der sich andere ASSIGN Befehle befinden und f gen folgende Zeile ein ASSIGN Blitz2 FestplattenName Blitz2VerzeichnisName Wenn Ihre Festplatte die Bezeichnung Work tr
119. rsteht man in BASIC einen Wert der sich w hrend der gesamten Ausf hrung des Programms nicht ndert Die Zahl 5 in der Anweisung a 5 z B ist eine Konstante Das Lattenkreuz engl Hash sign vor einem Variablennamen kennzeichnet diese als eine Konstante d h ihr Wert kann sich im Laufe des Programms nicht mehr ndern Die Anweisung weite 320 legt die 65 Variable weite endg ltig auf den Wert 320 fest Konstanten besitzen bestimmte Eigenschaften sie e sind schneller als Variablen und verbrauchen keinen Speicherplatz e erh hen die Lesbarkeit des Programmcodes k nnen ebenfalls im Assembler verwendet werden k nnen f r die Auswertung von bedingten Compilier Anweisungen verwendet werden e d rfen nur Integerwerte enthalten e vereinfachen die Verwendung eines konstanten Wertes der an verschiedenen Stellen im Programm verwendet wird k nnen im Quellcode zum Zeitpunkt der Compilierung ver ndert werden aber nicht mehr danach w hrend der Laufzeit Der wichtigste Aspekt bei der Verwendung von Konstanten vom Standpunkt des Programmierers aus ist die Tatsache da bestimmte Naturkonstanten die an unterschiedlichen Stellen des Programms ben tigt werden durch aussagef hige Namen ersetzt werden wie z B weite Sollte der Wert von weite jemals ge ndert werden m ssen braucht dann lediglich an einer Stelle die Zuweisung weite 320 in z B weite 640 ge ndert zu werden anstatt den gesa
120. sc Mid rS 1i 1 If a gt 65 Then a 55 Else a 48 valueta b i 1 b 16 Wend Case 2 37 r StringText 0 2 value 0 i Len r b 1 While i gt 0 a Asc Mid r i 1 48 valueta b i 1 b 2 Wend End Select ActivateString 0 GadgetHit SetString 0 0 Str value SetString 0 1 Right Hex value 4 SetString 0 2 Right Bin value 16 Redraw 0 0 Redraw 0 1 Redraw 0 2 EndIf Until ev 200 Prop Gadgets Das folgende Beispielprogramm erzeugt einen einfachen Requester f r eine RGB Palette mit dem die Bildschirmfarben eingestellt werden k nnen Prop Gadgets sind Schieberegler die in diesem Fall f r die Einstellung der Rot Gr n und Blaukomponenete des aktuellen Farbregisters dienen Die 32 Farbregister werden durch 32 Text Gadgets repr sentiert Die Farbe der einzelnen Gadgets wird mit dem Befehl GadgetPen festgelegt Dies geschieht bevor die Gadgets zu der Objektliste hinzugef gt werden Der Befehl Gadget Jam f hrt dazu da die beiden Leerzeichen als farbige Bl cke dargestellt werden r Einfache Farbpalette FindScreen 0 For p 0 To 2 PropGadget 0 p 22 8 14 128 p 16 54 Next For c 0 To 31 GadgetJam 1 GadgetPens 0 c x c AND 7 y Int c 8 TextGadget 0 x 28 72 14 y 14 32 3 c lt 2 Leerzeichen Next Window 0 100 50 300 72 S100A FARB PALETTE 1 2 0 ec 0 Toggle 0 3 cc On Redraw 0 3 cc Repeat SetVProp 0 0 1 Red cc 15 1 16 SetVProp 0 1 1 Green cc 15 1 16 Se
121. schinenorientierten Sprachen verwendet Sie werden zu verschiedenen Zwecken verwendet um Schreibarbeit zu sparen um einfache Routinen durch schnellere Inline Versionen zu ersetzen oder auch um Code zu erzeugen der in Hochsprachen nicht herzustellen ist Ein Makro wird durch die Befehlsfolge Macro name End Macro definiert Der Code der zwischen Macro und EndMacro steht wird im Gegensatz zu normalem Programmcode nicht bersetzt sondern zun chst vom Compiler gespeichert Wird nun ein Makro mit macroname aufgerufen ersetzt der Compiler den Makronamen mit dem Inhalt des entsprechenden Makros im Quellcode Das folgende Beispiel acro mymacro a atl NPrint Viel Glueck End Macro NPrint Dummes Beispiel v1 0 Imymacro Imymacro ouseWait 67 wird vom Compiler erweitert soda sich ergibt NPrint Dummes Beispiel v1 0 a atl NPrint Viel Glueck a atl NPrint Viel Glueck MouseWait Parameter bergabe bei Makros Es k nnen auch Parameter an ein Makro bergeben werden dadurch werden sie noch n tzlicher Parameter werden in geschweiften Klammern und eingeschlossen Bei der Auswertung des Makros werden zun chst die Parameter in den Text des Makros eingef gt und dann das Makro ersetzt In der Definition eines Makros wird die Stelle an der der Parameter eingef gt werden soll mit dem umgekehrten Apostroph auf der Amiga Tastatur oberhalb der TAB Taste gefolgt von einer Zahl oder ein
122. sen Aber Ein Statement kann man in ein neues Programm mitnehmen Ein Statement hat einen Namen kann bis zu 6 Parameter empfangen und muss definiert sein bevor man es aufruft Das bedeutet Der Aufruf eines Statements kann im Quelltext nicht Uber dem Statement stehen sondern immer nur darunter Greetings Hello World Fehler Statement nicht definiert Statement Greetings greetsS Print greets End Statement Greetings Hello World so funktionierts End Statement Ein End Statement schliesst ein Statement ab welches durch Statement optional bis zu 6 Parameter eingef hrt wurde Alle Statements m ssen durch ein End Statement abgeschlossen werden Statement Return Dieser Befehl wird dazu benutzt um die Ausf hrung eines Statements vorzeitig zu beenden Beachte dass ein Statement keinen R ckgabewert besitzt und auch Statement Return keinen Wert zur ck liefern kann Wird die Ausf hrung eines Statements beendet vorzeitig oder nicht wird das Programm an der Stelle fortgesetzt die nach dem Aufruf des Statements folgt Function Type Name Parameter1 Parameter2 Funktionen hneln Statements nur dass sie auch einen Wert zur ckgeben k nnen Desweiteren werden sie mit einem End Function abgeschlossen Der optionale Type gibt an von welchem Datentyp der R ckgabewert ist Es ist zu beachten dass eine Funktion einen Wert zur ck geben kann aber nicht muss 84 Wird ein Wert zur ckgegeben oh
123. setzen Suchgrenze festlegen Schleife ber die List AND d lt q AND flag gefunden ausgeben und in Liste eintragen chr 9 ist der TAB 42 If tab 10 Then NPrint tab 0 AddLast primes primes p EndIf Wend NPrint Chr 10 Habe tot Primzahlen zwischen 2 v gefunden NPrint Beenden mit linkem Mausknopf MouseWait 43 Kapitel 6 Fehlermeldungen amp der Debugger e Fehlermeldungen des Compilers e Laufzeitfehler Der Blitz2 Debugger e Anzeige Optionen e Verfolgung des Programmablaufs e Wiederaufnahme des normalen Ablaufs Der Befehlspuffer Der Direktmodus e Fehlermeldungen des Debuggers Fehlermeldungen des Compilers Blitz2 erzeugt zwei unterschiedliche Kategorien von Fehlermeldungen bersetzungsfehler und Laufzeitfehler Ubersetzungsfehler treten w hrend des Compilierens bersetzen des Quellcodes auf Laufzeitfehler treten w hrend der Ausf hrung Run time des Programms auf Tritt w hrend des Compilierens ein Fehler auf so erscheint eine Nachricht im Editor Wird OK angeklickt so wird zu der Zeile im Programm zur ckgekehrt die den Fehler hervorgerufen hat In Anhang 2 des Blitz2 Referenz Handbuchs befindet sich eine vollst ndige Beschreibung aller Compilermeldungen Im folgenden wird auf einige der h ufigsten Fehlerquellen hingewiesen Beim Aufruf einer internen Blitz2 Funktion also eines Befehls der einen Wert zur ckliefert m ssen die Parameter imm
124. sor auf das Wort Print in Ihrem Program und dr cken Sie die Help Taste Die Syntax f r den Print Befehl erscheint dann oben auf dem Bildschirm Dort steht jetzt Print Expression Expression Die eckigen Klammern sagen aus da der Print Befehl mit beliebig vielen Ausdr cken versorgt werden kann Die Ausdr cke m ssen durch Kommata getrennt werden Ein Ausdruck kann eine beliebige Zahl eine 11 Zeichenkette ein Text in Anf hrungszeichen eine Variable oder eine BASIC Formel sein Das folgende Beispiel enth lt alle diese M glichkeiten Vergessen Sie den MouseWait Befehl nicht wenn Sie dieses Programm testen denn sonst druckt Blitz2 die Meldung und kehrt sofort zum Editor zur ck bevor Sie Zeit hatten sie zu lesen Print 3 Autos a a 7 3 Die folgende Zeile sollte in dem CLI Fenster erscheinen 3Autos03 Wenn Sie Zwischenr ume zwischen die verschiedenen Ausdrucke einf gen wie z B so Print 3 Autos a a 7 3 dann erhalten Sie folgende Zeile 3 Autos 0 3 Formatiertes Drucken Der Format Befehl erm glicht es Zahlen in unterschiedlichen Formaten auszudrucken Dies ist z B sinnvoll wenn Sie Zahlen in Spalten ausgeben wollen Der NPrint Befehl dient dazu den Cursor nach der Ausgabe automatisch in die n chste Zeile zu bewegen Format 00 Nprint 23 5 Nprint 10 Nprint 5 Nprint 0 MouseWait Einfache Variablen Was eine Programmiersprache m chtig macht ist ihre F higke
125. sung Function Return wird das Ergebnis an das Hauptprogramm zur ckgeliefert Diese Version von fact ist wesentlich n tzlicher als die erste da das Ergebnis wiederum in beliebigen Ausdr cken verwendet werden kann Z B a fact k fact j Es k nnen alle 6 einfachen Datentypen als Ruckgabewert verwendet werden Um klarzumachen welchen Datentyp eine Prozedur zur ckgeben soll wird der Typ Zusatz an den Befehl Function angef gt Ist kein Typ angegeben wird der Default Typ angenommen normalerweise g Im folgenden Beispiel wird ein String zur ckgeliefert Function leerz n For k 2 Ton aS a Next Function Return a 30 End Function Print leerz 20 Hier dr ben ouseWait Rekursion Der Speicherbereich der von den lokalen Variablen einer Prozedur belegt wird ist nicht nur allein f r diese Prozedur reserviert sondern auch f r jeden Aufruf der Prozedur Jedesmal wenn die Prozedur aufgerufen wird wird auch ein neuer Speicherbereich angelegt der erst dann wieder freigegeben wird wenn die Prozedur beendet ist Dadurch ist es m glich da eine Prozedur sich selbst aufrufen kann ohne sich dabei die eigenen Daten zu zerst ren Dieses Vorgehen nennt man Rekursion Das Programm zur Berechnung der Fakult t ist ein gutes Beispiel daf r wie die Rekursion sinnvoll eingesetzt werden kann Function fact n If n gt 2 Then n n fact n 1 Function Return n End Function For k 1 To 5 NPrint fact k Next ouseWait
126. t dazu verwendet die Adresse der Intuition Screen aus der Struktur des Blitz2 Screen Objekts zu ermitteln ScreenToFront_ Peek l Addr Screen 0 Im n chsten Beispiel wird der Systemstruktur eines Windows ein Zeiger vom Typ Window zugewiesen Die AmigaLibs Res mu als residente Datei geladen sein wenn dieses Programm ausgef hrt wird FindScreen 0 window 0 10 10 100 100 9 VERGROESSERE MICH 1 2 w Window Peek 1 Addr Window 0 WindowOutput 0 Repeat ev l WaitEvent WLocate 0 0 NPrint w Width NPrint w Height Until ev 200 Beachten Sie den Unterschied zwischen NewType Window und NewType window Window bezeichnet das System Window Intuition wahrend window die Blitz2 Window Struktur bezeichnet s Anhang 1 des Referenzhandbuchs berblick ber die prim ren Blitz2 Objekte Screens Screens k nnen mit den Befehlen Screen und FindScreen erzeugt werden Der Befehl Screen ffnet eine neue Screen w hrend FindScreen eine bereits vorhandene meistens eine WorkBench Screen zu einer Blitz2 Screen macht FreeScreen gibt eine Screen wieder frei sollte aber erst dann aufgerufen werden wenn alle Fenster zuvor geschlossen also freigegeben wurden 51 Screen Objekte erf llen zwei Funktionen sie bestimmen die Aufl sung des Displays und der Palette und sie stellen die Fl che dar auf der die Windows ge ffnet werden Beim ffnen eines Windows oder bei der Benutzung von RGB oder Paletten Befehlen w
127. tVProp 0 2 1 Blue cc 15 1 16 Redraw 0 0 Redraw 0 1 Redraw 0 2 ev 1l WaitEvent If ev 40 AND GadgetHit gt 2 Toggle 0 3 cc On Redraw 0 3 cc cc GadgetHit 3 Toggle 0 3 cc On Redraw 0 3 cc 38 EndIf If ev 20 OR ev 40 AND GadgetHit lt 3 r b VPropPot 0 0 16 g b VPropPot 0 1 16 b b VPropPot 0 2 16 RGB cc 15 r 15 g 15 b EndIf Until ev 200 Datenbank Anwendung Es folgt ein Beispiel f r ein einfaches Datenbank Programm eine Adressverwaltung Es verwaltet eine Liste mit Namen Telefonnummern und Adressen Die Definition der Bedienoberfl che kann entweder so eingetippt werden wie sie weiter unten gedruckt ist oder sie kann mit IntuiTools erstellt werden Wenn eine Datei mit dem Namen phonebook data existiert wird sie eingelesen Es wird eine Liste daraus aufgebaut deren Eintr ge aus jeweils 4 Strings bestehen die im NewType definiert sind Durch die Verwendung einer Liste statt eines einfachen Feldes wird klar da die Eintr ge in einer gewissen Beziehung zueinander stehen Blitz2 verwaltet einen internen Zeiger auf das aktuelle Listenelement der mit einer Reihe von Listenbefehlen gesetzt und abgefragt werden kann Telefonbuch Programm F FindScreen 0 Die folgende Beschreibung wird von ram t gelesen und wurde mit IntuiTools erstellt Borders On BorderPens 1 2 Borders 4 2 StringGadget 0 72 12 0 1 40 239 StringGadget 0 72 27 0 2 40 239 StringGadget 0 72 43 0 3 40 239 StringGad
128. tet da die Ctri Alt Kombination nicht mehr bet tigt zu werden braucht um die Debugger Kommandos aufzurufen n heres s u unter K der nachfolgenden Liste Folgende Kommandos sind grunds tzlich immer verf gbar C Programm anhalten H Hide Debugger Fenster zeigen verstecken V View Graphiken hinter dem Debugger Fenster sichtbar machen oder verdecken M Mode Umschalten zwischen hochaufl sendem hires und niedrigaufl sendem lores Graphikmodus wenn V aktiviert wurde Die folgenden Kommandos sind nur dann verf gbar wenn das Programm angehalten wurde Q Quit Programm beenden auch ber die ESC Taste hat dieselbe Auswirkung wie der Befehl END R Run Programm normal ablaufen lassen T Trace Ablaufverfolgung starten S Single Step Programm im Einzelschritt Modus laufen lassen l Ignore Den aktuellen Befehl berspringen L Umschalten der Ebene in der Ablaufverfolgung f r das S und T Kommando Hiermit kann ber Gosubs Prozeduren und For Next Schleifen hinweggegangen werden B Back Zur ckpositioneren im Befehlspuffer zum zuvor ausgef hrten Befehl F Forward Vorw rtspositionieren im Befehlspuffer zum n chsten ausgef hrten Befehl E Evaluate Den Wert eines Ausdrucks kontrollieren Der Wert wird im Debugger Fenster angezeigt X Execute Einen Befehl ausf hren K Keylock Umschalten des Keylock Modus Ist der Keylock Modus eingeschaltet wird die Ctrl Alt Kombination nicht ben t
129. tigen neuen Programmierkonzepte die wir in diese Sprache eingef hrt haben erl utert Referenzhandbuch Das Referenz Handbuch enth lt eine detaillierte Beschreibung s mtlicher Blitz2 Befehle mit kurzen Beispielen Im Anhang werden die Fehlermeldungen des Compilers erl utert und andere n tzliche Informationen gegeben Registrierungskarte Bitte f llen Sie diese Karte aus und senden sie Sie zur ck an Acid Software Sie erhalten nur dann Support Fehlerkorrekturen und Aktualisierungen wenn Sie als Blitz2 Benutzer registriert sind Wir w rden gern von Ihnen wissen zu welchem Zweck Sie Blitz2 verwenden und freuen uns ber Verbesserungsvorschl ge Verschiedenes Dar berhinaus sollten Sie eine Ausgabe des Blitz2 User Magazines sofern verf gbar und ein oder zwei PD Spiele die in Blitz2 geschrieben sind erhalten haben Im Blitz2 User Magazine befinden sich noch mehr Bespiele und weitere Dokumentation nebst einer Diskette mit zus tzlichen Kommandos und Anwenderprogrammen Abonnieren lohnt sich Blitz Start Zu allererst sollten Sie eine Sicherheitskopie der Disketten anlegen und die Originale sicher aufbewahren Benutzer von Diskettensysteme Der einfachste Weg die Disketten zu kopieren ist von der Blitz2 Programmdiskette zu booten das Symbol f r die Blitz2 Diskette anzuklicken und dann DUPLICATE im Workbench Men auszuw hlen Detaillierte Angaben hierzu befinden sich im AMIGA Handbuch Nach dem duplizieren der Blitz2 P
130. tsverzeichnis von Jens Henschel Inhalt VOR WOM ana ee Rennens hr 5 Der Gebrauch dieses Handbuchs 4 44444HHnnsnnnnnnnnnennnnnennnnnnnnnnennnnnnnnnnnnnnennnnnnnnnnennnnnnnnnn nenn 5 Kapitels a ee N ee I th PNA ehr E i a ee T 7 Installation e Cs oa cleanin ee Sten tata 7 Was Sie alles erhalten haben 44444444444444440nnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnrrnnnnne nn 7 Bl Sa a a ites sha gten anne aches ee sesame In en et ite Ral Mend Mace St uted 8 AlesiKlar ren E ee ane tessa se Sees cate A nano Galt Cade A Sanh san de Caen er 9 Die Beispielprograrmme csini aia a a aeaa aaa aae aaa aaa raae Aia E Ea ENE 9 DECENIO ENE 9 Zus imenf assung tia iia ASA 10 Kapital e a bcn 11 Grundlegendes ber BIIZZ cocotero 11 Mein erstes Prog Mis a ide 11 Der E LEANE a E A A A EAE E T E A E oia 11 Formatiertes Dr cken en a a ee 12 Einfache Variablen 12 me A tica 12 Einfache SCA een nie 13 Verschachtelte Schleifen 22u a a a e aa IR 13 Die Benutzung von String Variablen uu 4444444Hennnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nn nennen 15 Der Programmablauf reelle Bann 16 spr ungbefehle t iener annA nr ed LR id 16 Benutzereingaben u nn nee Hs einen 17 Felder aaa Ad es 17 Kapitel sica AA A A eee AA E 19 Datentypen Felder und Listen ccccccccccceceeeee eect eee eeeeaeeaeeeeeceeeeeeeeeeeeseteasae
131. typ Float ist die von der Amiga Fast Floating Bibliothek unterst tzte Flie komma Gr e String ist die standardm ige BASIC Implementation f r Zeichenketten Mit Hilfe der De fType Anweisung k nnen Variablen eines bestimmten Typs vereinbart werden ohne da jeweils der Zusatz angegeben werden mu Ist eine Variable einmal vereinbart kann der Zusatz f r den Datentyp weggelassen werden au er bei String Variablen Dort mu er grunds tzlich immer angegeben werden Der Datentyp einer Variable ist innerhalb eines Programms unver nderlich und es kann immer nur eine Variable eines Namens vereinbart werden Eine Ausnahme bilden wiederum die Strings bei denen der gleiche Name auch f r eine numerische Variable vergeben werden kann Die NewType Anweisung Zus tzlich zu den 6 einfachen Datentypen die in Blitz2 zur Verf gung stehen haben Programmierer die M glichkeit eigene Datentypen zu entwerfen Der Befehl NewType erm glicht es verschiedene Datentypen die inhaltlich zusammengeh ren zu einem neuen Datentyp zusammenzuf gen hnlich einem Datensatz in einer Datenbank oder einer Struktur in C Das folgende Beispiel zeigt wie Variablen die den Namen das Alter und die Gr e einer Person enthalten einem neuen Variablentyp zugeordnet werden NEWTYPE Person name alter b groesse q End NEWTYPE a Person name Harry 20 1 8 NPrint a height Ist ein NewType einmal definiert k nnen V
132. uf Elemente des NewType meinschiff zuzugreifen Das ganze sieht jetzt aus wie ein Pfadname unter DOS Ein einmal definierter NewType kann im Zusammenhang mit beiden Formen des DefType Befehles verwendet werden genauso wie jeder andere Datentyp Felder innerhalb von NewTypes Au er einfachen Datentypen und anderen NewTypes k nnen auch Felder als Bestandteile f r NewTypes verwendet werden Zu ihrer Kennzeichnung werden die eckigen Klammern und verwendet Im Gegensatz zu normalen Feldern sind Felder innerhalb von NewTypes begrenzt auf eine Dimension und ihre Gr e mu durch eine Konstante definiert werden nicht durch eine Variable Ein Feld kann einen beliebigen Datentyp besitzen auch Felder vom Typ eines NewType sind zul ssig Ein weiterer Unterschied zu herk mmlichen Feldern besteht darin da die Angabe in den eckigen Klammern genau die Gr e des Feldes angibt Bei herk mmlichen Feldern ist dies nicht der Fall siehe n chster Abschnitt Die Anweisung adresse s 4 reserviert Speicherplatz f r 4 Strings mit den Indizes 0 bis 3 Das folgende Beispiel erl utert den Gebrauch von Feldern in NewTypes NewType datensatz name alter w adresse s 4 dasselbe wie adresseS 4 End NewType DefType datensatz p p adresse 0 10 St Kevins Arcade p adresse l Karangahape Road 23 p adresse 2 Auckland p adresse 3 New Zealand For i 0 TO 3 NPrint p adresse i Next MouseWait Wenn kein index ange
133. uffordert einen Namen f r die Datei einzugeben Mehr mu nicht gemacht werden Eine residente Datei kann in ein beliebiges Programm eingebunden werden indem der entsprechende Dateiname in eines der RESIDENT Felder des Compiler Options Men s eingetragen wird Damit sind alle in der residenten Datei enthaltenen NewTypes Makros und Konstanten automatisch f r das Programm verf gbar Die mitgelieferte Datei AMIGALIBS RES enth lt alle Strukturen und Makros die f r den Umgang mit dem Betriebssystem erforderlich sind Wer schon einmal nahe am Betriebssystem programmiert hat wird es zu sch tzen wissen da das bliche Einlesen der Header Dateien entf llt und damit Minuten beim Compilieren gespart werden 63 Betriebssystem Aufrufe Es wurde bei der Entwicklung von Blitz2 viel M he darauf verwendet dem Programmierer m glichst weitgehenden Zugriff auf das m chtige Amiga Betriebssystem zu gew hren Der Aufruf von Betriebssystem Bibliotheken Nicht alle Befehle des Betriebssystem werden von den internen Blitz2 Befehlen abgedeckt Dennoch stehen dem erfahrenen Programmierer alle Routinen der Exec Intuition DOS und Graphics Libraries durch Blitz2 zur Verf gung s Anhang 5 des Blitz2 Referenzhandbuchs Der Zugriff auf die Standard Libraries ist durch das Blitz2 Advanced Programmers Pack von Acid Software gew hrleistet Im folgenden Beispiel werden Routinen der Amiga ROM Graphics und der Intuition Libraries gerufen FindSc
134. ung der erweiterten Form von DisplayBitmap Sie gestattet es die Koordinaten f r beide Bitmaps mit einem einzigen Befehl zuzuweisen zwei 16 Farben Playfields im Dualplayfield Modus BitMap 0 640 512 4 BitMap 1 640 512 4 75 For i 0 To 100 Use BitMap 0 Box Rnd 640 Rnd 512 Rnd 640 Rnd 512 Rnd 16 Use BitMap 1 Line Rnd 640 Rnd 512 Rnd 640 Rnd 512 Rnd 1 Next InitPalette 0 32 For i l To 31 AGAPalRGB 0 1 Rnd 256 Rnd 256 Rnd 256 Next InitCopList 0 13038 BLITZ CreateDisplay 0 DisplayPalette 0 0 while Joyb 0 0 VWait x 160 Sin r 160 y 128 Cos r 128 DisplayBitMap 0 0 x y 1 320 x 256 y r 05 Wend End Beispiel 2 Das zweite Beispiel demonstriert die Benutzung von Sprites Die Funktion DisplayAdjust wird ben tigt damit wir Zugriff auf alle 8 Sprite Kan le erhalten Leider ist es schwierig eine h here Fetchmode zu verwenden ohne auf ein sehr schmales Display zugreifen zu m ssen SpriteMode2 teilt Blitz mit dass wir 64 Pixel gro e Sprites f r alle Sprite Kan le erzeugen wollen Ohne SpriteMode w rde sonst jeder Sprite 4 Kan le beanspruchen Eines der verbesserten Features von AGA Man beachte dass DisplaySprite auch Teil Pixel Positionen als X Parameter gestattet und dann versucht das Sprite an dieser Position darzustellen sanft scrollender 16 Farben Screen mit 8x64 gro en Sprites SpriteMode 2 InitShape 0 64 64 2 ShapesBitMap 0 0 Circlef 32 32 32 1 Circl
135. wickelte Routine zu finden und raten zu m ssen was sie wohl macht Obwohl es vielleicht ein wenig kleinkariert erscheint sollte wirklich die Funktionsweise jeder Routine genau beschrieben werden es lohnt sich Au erdem empfiehlt es sich in einem Abschnitt am Anfang des Programms eine Dokumentation einzuf gen Diese sollte Copyright Vermerke eine Liste der vorgenommenen nderungen mit Datum sowie eine Beschreibung s mtlicher Variablen des Programms enthalten Techniken der strukturierten Programmierung Ein wesentliches Merkmal eines strukturierten Programms ist das Einr cken von zusammenh ngenden Code Abschnitten Hierdurch wird schon optisch eine Struktur des Programms erkennbar Dies betrifft vor allem den Inhalt von Schleifen aber auch andere Kontrollstrukturen Der Blitz2 Editor bietet zwei verschiedene M glichkeiten Programmzeilen einzur cken Um einzelne Zeilen einzur cken kann die TAB Taste verwendet Mit der BLOCK TAB Funktion RAmiga und RAmiga k nnen ganze Bereiche gemeinsam einger ckt werden Die Positionen der Tabulatorspr nge k nnen im Men DEFAULTS eingestellt werden Die Tastenkombination SHIFT PfeilLinks dient dazu den Cursor in die selbe Spalte wie die dar berliegende Zeile zu positionieren 97 Modularisierung Eine sorgf ltige Konzeptplanung ist das wichtigste bei der Software Entwicklung Diese f hrt zu einer Zerlegung des Projekts in kleinere Teile nur so lassen sich albtraumartige S
136. ypen Der Default Datentyp e Die Data Anweisung e Wert berlauf e Der Datentyp String e Sytemkonstanten e Die NewType Anweisung e Felder innerhalb von NewTypes e Die UsePath Anweisung Der Datentyp Pointer e Felder e Listen Numerische Datentypen Blitz2 kennt 6 verschiedene Variablentypen 5 davon sind numerische Datentypen die dazu dienen Zahlenwerte mit unterschiedlichen Wertebereichen und unterschiedlicher Genauigkeit zu speichern der sechste Datentyp speichert Folgen von Buchstaben also Strings Text Die untenstehende Tabelle gibt den Wertebereich die Genauigkeit und den Speicherbedarf f r alle numerischen Datentypen an Typ Zusatz Bereich Genauigkeit Bytes Byte b 128 ganzzahlig 1 Word W 32768 ganzzahlig 2 Long 2147483648 ganzzahlig 4 Quick q 32768 0000 1 65536 2 Float f 9 1018 1 10184 4 Der Datentyp Quick ist eine Festkomma Gr e mit geringerer Genauigkeit als Flie kommatypen daf r aber schneller Float ist eine Flie komma Gr e die von der Amiga Fast Floating Point Bibliothek unterst tzt wird Bei der Vereinbarung einer Variablen wird deren Datentyp durch den entsprechenden Zusatz Suffix bestimmt Damit ist der Datentyp festgelegt und braucht bei allen weiteren Zugriffen nicht mehr angegeben zu werden au er bei String Variablen Es folgen einige Beispiele f r numerische Variablen und deren Zusatz mychar b 127 my_score w 32000 chip 1 Sdff000
137. zt weitere Informationen ber Aliens hinzugef gt werden m ssen diese lediglich in der Definition des NewType eingetragen werden es brauchen keine neuen Felder angelegt zu werden Anmerkung Im Gegensatz zu den meisten anderen BASIC Compilern ERLAUBT Blitz2 die Vereinbarung von Feldern mit variablen Dimensionen also Dim a n Au erdem mu f r Strings in Feldern KEINE maximalen L nge angegeben werden wie in einigen anderen Programmiersprachen Listen In Blitz2 gibt es auch eine weiterentwickelte Form der Felder die Listen Listen sind grunds tzlich Felder haben aber einige spezielle Eigenschaften H ufig wird jeweils nur ein bestimmter Abschnitt eines Feldes belegt und es wird eine gesonderte Variable mitgef hrt die Auskunft dar ber gibt wieviele Elemente des Feldes zur Zeit belegt sind In einem solchen Fall sollte das Feld durch eine Liste ersetzt werden die die Verwaltung erheblich vereinfacht und beschleunigt Dimensionierung einer Liste 25 Die Dimensionierung einer Liste erfolgt genau wie bei einem Feld es wird lediglich das Wort List hinter Dim eingef gt Listen sind z Zt auf eine Dimension begrenzt Hier ist ein Beispiel f r die Definition einer Liste NewType Alien flags w x y End NewType Dim List Aliens Alien 100 Der Unterschied zu einem einfachen Feld besteht nun darin da Blitz2 einen internen Z hler ber die Anzahl der Listenelemente sowie einen Zeiger auf das jeweils aktuelle Element
Download Pdf Manuals
Related Search
Related Contents
取扱説明書 Fujitsu AOU12RLS User's Manual N-03 NOVODEC ENLUCIDO ACABADOS MANUEL D’INSTRUCTIONS Mise en page 1 Copyright © All rights reserved.
Failed to retrieve file