HAM's.DOC von H. Frommer Hold-and-Modify ???... HAM's ist ein HAM-Malprogramm in A-BASIC. Dieser Modus ermoeglicht es, 4096 Farben in einem Bild darzustellen. Dabei gibt es jedoch Besonderheiten, die man beachten muss. Der AMIGA baut sein Bild bekanntlich aus 16 Rot-,16 Gruen- und 16 Blaustufen auf (woraus sich 16*16*16=4096 Farben ergeben). Im normalen Grafikmodus (320*256 Punkte) kann der AMIGA 32 Farben darstellen, die frei aus 4096 Farben definiert werden koennen. Im HAM-Modus koennen nun zwar 4096 Farben dargestellt werden, es kann aber nicht jeder Punkt in beliebiger Farbe eingefaerbt werden.Der HAM-Modus hat eine Aufloesung von 320*256 (320*512 interlaced) Ein "normaler Screen" in der Aufloesung hat 5 Bitplanes. Ein Punkt auf dem Bildschirm entspricht einem gesetzten Bit in diesen Bitplanes. Je mehr Bitplanes es nun gibt, desto mehr Bits stehen pro Punkt zur Verfuegung und je mehr Bits vorhanden sind, desto mehr verschiedene farben koennen intern dargestellt werden, also auch auf dem Bildschirm erscheinen. Bei 2 Bitpl. gibt es z.B nur das Spektrum von 0-3 (%00-%11), bei 3 von 0-7 (%000-%111) , bei 4 von 0-15(%0000-%1111) u.s.w. Der HAM Modus (mit 6 Bitplanes) macht hier eine Ausnahme. Hierbei kommt den Bits 4 und 5 eine besondere bedeutung zu. Stehen sie auf %00, so wird das Farbregister (von 16) gelesen, das von den ersten 4 Bitplanes angegeben wird (z.B. wird bei %001000 die Farbe #8 gesetzt). Stehen sie aber auf %10, wird die linke Nachbarfarbe uebernommen, und der Rotwert auf den abgeaendert, den die ersten 4 Planes angeben. Stehen sie auf %11 wird Gruen, bei %01 Blau veraendert. Diese Vorgehensweise erklaert auch den Namen Hold-And-Modify (Halten und Veraendern). Ist z.B. der Punkt (100,100) mit der RGB-Farbe $F45 eingefarbt und Punkt (101,100) bekommt Farbe %100010, erhaelt (101,100) Gruen- und Blauwert vom Nachbarpunkt, der Rotwert wird auf %0010=$3 abgeaendert und schliesslich hat (101,100) die RGB-Farbe $345. Endlich... Doch nun zurueck zu HAM's. Wegen dieses Prinzips ist HAM's teilweise etwas schwierig zu bedienen. Es wird auch streng zwischen Grundfarben und uebrigen Farben unterschieden, was schon daraus ersichtlich ist, dass es fuer beide seperate Waehlmoeglichkeiten gibt. Aller Anfang... Erst einmal muss darauf geachtet werden, dass sich AmigaBASIC auf der Diskette befindet (warum wohl ...?!?). Ausserdem muessen sich graphics.bmap, intuition.bmap, exec.bmap und dos.bmap im aktuellen Verzeichnis sein (notfalls mit CHDIR setzen). nach diesen Vorbereitungen kann HAM's gestartet werden, worauf es einen zunaechst vor die Qual der Wahl stellt, welche Aufloesung denn die beste sei. 320*256 hat zwar weniger Bildpunkte, laesst sich dafuer aber laenger als 2.3 Sekunden aushalten. Ausserdem laesst sich die hohe Aufloesung mit der Maus nur schwierig nutzen, weil sich zwar der "Hot Spot" in 400 Y-Pixeln bewegt, der sichtbare Zeiger aber nur ein 320*256 Pixel-Raster benutzt (egal welcher Modus der darunter liegende Screen hat). Hat man sich nun zu einer Entscheidung durchgerungen, muss einige Sekunden gewartet werden, bis die Farben gesetzt sind (wie gesagt, alles in BASIC...). Schliesslich erscheint auf der rechten Seite eine Auswahl, in der alle Programmfunktionen ersichtlich sind. Deren sind es zwar (noch ??) nicht viele, aber wer weiss... Farben... Um die eben genannten Grundfarben anwaehlen zu koennen (voreingestellt ist 15), waehlen Sie das zweite Feld von oben an, in dem diese bereits zu sehen sind. Nun erscheinen alle zur Verfuegung stehenden Grundfarben. Mit Mausklick auf die Gewuenschte Farbe verlassen Sie dieses Menu wieder. Komplizierter ist das zweite Farbemenu, welches Sie im "+-"-Feld erreichen. Es erscheine Die Buchstaben R,G,B und E. Ausserdem wird in der Titelleiste eine Zahl gefolgt von einem Farbigen Quadrat (das zu Beginn schwarz ist). Hier koennen Sie nun keine Absolute Farbe waehlen (wie zuvor), sondern nur, welchen Farbanteil einen Nachbarpunktes Sie wie veraendern wollen. Dazu klichen Sie "R" foer Rot, "G" fuer Gruen und "B" fuer Blau an. Mit der rechten AMIGA Taste laesst sich nun der Wert erhoehen, mit der Linken erniedrigen. Ist der gewuenschte Wert erreicht, kommt man durch "E" wieder in den Zeichenmodus. Wir malen... Die darunter liegenden Funktionen erklaeren sich mit ihrem Piktogramm selbst. Sie sind fuer simple Dinge wie Punkte, Linien, Rechtecke und Kreise bestimmt. Hierbei muss zuerst das Ausgangspixel angeklickt werden. Danach die Maus loslassen (wichtig !!!) und zum Zielpunkt fahren. Dort wird dann ein zweites Mal angeklickt. Speichern... Ueber "S" - Sie ahnen es schon Speichern (!!!) - kann das Bild, nach Abfrage des Namens gespeichert werden. Die datei hat folgendes Format: 4 BYTE "NORM"/"LACE" NORM=320*256 LACE=320*512 16*3 WORD Farbdaten Rot, Gruen, Blau (0-15) 6 Bitplanes Laenge je nach Aufloesung (320*hoehe%/8) dass IFF-Format wurde nicht verwandt, weil das komprimieren/ dekomprimieren in einer derart superschnellen Sprache wie BASIC einfach zu schnell gegangen waere...(siehe Programm LoadILBM-SaveACBM auf der ExtrasD) Das Laden funktioniert ebenso, nur dass dafuer L fuer Laden (Wer haett's gedacht ?) angewaehlt werden muss. Text... Nach dem waehlen der untersten Funktion muss der "TEXT >> " eingegeben werden. Dieser kann nun mit der Maus in die richtige Position gebracht werden. Dabei sollte man darauf achten, dass im Preferences 80-Zeichen eingestellt sind, weil sonst die Funktion zur Positionsueberwachung nicht richtig funktioniert. Ausserden sollte ich hier noch anbringen, dass sich an dieser Stelle ein kleinen Fehler eingeschlichen hat. Wird das erste Mal geschrieben, so erscheint kein Text, wird beim ersten Mal gar versucht in's Menu zu schreiben, gibt es seltsame Effekte... Farben im Wandel... Dann gibt es da noch das RGB-Auswahlfeld. Es dient zum veraendern der Grundfarben. Es wird hierbei immer die aktuelle zeichenfarbe veraendert. Ist das keine Grundfarbe, erscheint das RGB-Feld in Geisterschrift und ist nicht auszuwaehlen. Im Menu selbst sieht man nun an der Titelleiste dir Buchstaben R,G und B gefolgt fon einer HEX-Zahl, die den Farbwert darstellen (Rot, Groen und Blauanteil. Das Veraendern gaht recht einfach, Der zu veraendernde Farbanteil (R,G oder B) wird angeklickt, die Staerke dann mit den AMIGA-Tasten veraendert. Verlassen koennen Sie das Menu durch Anklicken in Der Menuleiste rechts der HEX-Zahl. Hilfe... Selbstverstaendlich habe ich auch das wichtigste nicht vergessen und eine Paniktaste eingebaut. Mit koennen Sie jederzeit nach einer Sicherheitsabfrage das programm verlassen. Diese Funktion ist allerdings waehrend Laden und Speichern tot. Know How... Bekanntlich wird der HAM-Modus vom AmigaBASIC nicht unterstuetzt, d.h dass man mit der SCREEN-Anweisung keinen HAM-Screen oeffnen kann. Deshalb muss auf die intuition.library zurueckgegriffen, in der sich "OpenScreen" und "OpenWindow" befinden. Hier ist dann auch schon das zweite Problem, denn fuer AmigaBASIC existiert dieser Screen ueberhaupt nicht, geschweige denn er wied von diesem unterstuetzt. Deshalb koennen Anweisungen wie "LINE","CIRCLE","AREA",etc. nicht verwandt werden. HAM's ist also ganz auf die graphics.library angewiesen. Die Befehle hier sind zwar reichlich, aber es fehlen doch noch einige. Die "GET"- Anweisung z.B kann durch keine graphics-Anweisung ersetzt werden. Schliesslich wird beim anklicken des Mal-Fensters das BASIC-Fenster desaktiviert. Das erschwert das Abfragen der Tastatur, der "INKEY$" bleibt wirkungslos. Aber auch hier gibt es eine zweite interessante Moeglichkeit. An der Speicherstelle &HBFEC01 (dez. 12577793) kann man immer den zuletzt erfolgten Tastendruck lesen. Fuer jede Taste gibt es 2 Werte. der ungerade besagt, dass sie eben gedrueckt wurde, der gerade, dass sie eben losgelassen wurde. Der Wert bleibt bis zur neachsten Tastaturbenutzung erhalten. Schliesslich kann wegen des desaktiven BASIC-Fensters die "MOUSE"- Funktion nicht zur Mausabfrage herangezogen werden. Fuer die linke Maus- taste gibt es nun die Speicherstelle &HBFE001. Bei Betaetigung der linken Maustaste wird hier Bit 6 geloescht (Bit 7 bei Joystickknopf-Betaetigung). Die Position laesst sich aus der Screen-Struktur auslesen, un zwar als WORD beim Offset 16 fuer die Y- und 18 fur die X-Koordinate. Trotz dieser Probleme ist "OpenScreen" eine nuetzliche Routine, die ich im Unterprogramm "ScreenOpen" dokumentiert habe (ganu wie "Open- Window" im WindowOpen-Unterprogramm). Vorteile ??... An Vorteilen gegenueber professionellen Programmen ist zunaechst wenig zu sehen (seltsam, seltsam...). Allerdings hat es die Moeglichkeit eine der Grundfarben zu setzen, was doch gerade fuer Kontraste sehr wichtig ist (Diese Moeglichkeit gibt es in einigen professionellen nicht). Schliesslich ist da dann noch der Preis, ein nicht unerheblicher Faktor (50,100,150,...). Dennoch stellt sich die Frage, warum gerade in BASIC. Erstmal behersche ich es besser als Assembler, zweitens beherrschen auch die meisten anderen Amigos BASIC besser als andere Sprachen (und nat. Oma, Opa, Onkel, Tante und der Hamster "Karli"). Dadurch koennen Mehr die Routinen in eigenen Programmen nutzen. Abschliessend... Schliesslich moechte ich noch anbringen, dass es sich hierbei um ein Programm handelt, dass noch wesentlich zu erweitern waere. So zum Beispiel eine Fuell-Funktion (ich habe in der GRAPHICS keine gesehen und ein "Hauseigener" Fuellalgorythmus koente wegen der hohen Geschwindigkeit des BASICs vom 68000er einfach nicht verarbeitet werden...). Das selbe gilt fuer eine Lupe, die allerdings etwas leichter zu Programmieren waere. Ein Fontwechsel waere auch nicht schlecht (dabei muesste man allerdings nuch eine weitere Library bemuehen - dazu noch eine Disk-Library). Trotzdem : Viel Spass mit HAM's Ihr Henning Frommer