VD2001 und Arexx Information Die VD2001 Software unterstützt AREXX. Die von William S. Hawes auf den Amiga angepaßte Script-Sprache ermöglicht einerseits die Ansteuerung der Software von außen, andererseits die automatische Abarbeitung von Befehlsfolgen. Wenn häufig innerhalb einer Software die gleichen Funktionen hintereinder immer wieder aufgerufen werden müssen, dann kann dieser Vorgang mit AREXX automatisiert werden. Voraussetzung für die sinnvolle Verwendung von AREXX ist natürlich eine gute Implementation dieser Sprache in der jeweiligen Software. Bei der VD2001 Software wurde besonderen Wert auf diesen Punkt gelegt. AREXX ist nicht Teil der Lieferung unseres Digitizers. Sie können jedoch AREXX bei uns bestellen. Sollten Sie stolzer Besitzer eines Amiga 3000 mit dem Betriebssystem AmigaDos 2.0 sein, dann verfügen Sie bereits über AREXX, denn es ist jetzt Bestandteil des Betriebssystems. Auf der von uns gelieferten Programmdiskette finden Sie das Verzeichnis (Ordner, Directory) REXX. In diesem 'REXX- Verzeichnis' befinden sich verschiedene Scriptfiles. Wichtig sind die Files mit dem Namen 'VD_Macrox.mod' (wobei anstelle des 'x' eine Zahl von 0 bis 9 steht). Wenn Sie in der Software die Funktionstaste F1 drücken dann wird der File VD_Macro1.mod, bei F2 der File VD_Macro2.mod usw. aufgerufen. Was in diesen Files steht bleibt Ihnen überlassen. Interessant ist die Frage, wann Sie mit AREXX in der Software arbeiten können, und wann nicht. Bei einem Multitasking System wie den Amiga, muß ich immer davon ausgehen, daß alles gleichzeitig passiert. Nehmen wir einmal folgenden Fall an. Sie benutzen ein Raytracing-Programm zum Erstellen einer Animations-Sequenz. Sie wollen, daß immer ein Bild berechnet wird, dann zur VD2001-Karte geschickt, eine Chroma-Key-Maske erstellt wird und ein Trigger-Signal an einen Einzelbild-Rekorder gesandt wird. Das wäre eine wundervolle Anwendung für AREXX (Wenn es ein Raytracing-Programm gibt, daß AREXX unterstützt und die benötigten Befehle bereitstellt !?). Die VD2001 Software würde also immer warten, bis ein Bild von AREXX angemeldet wird und dann entsprechend verfahren. Die teilweise recht langen Pausen zwischen den Bildern könnte der Anwender benutzen, um irgendwelche andere Arbeiten mit der VD2001 Software zu machen. Aber was passiert, wenn Sie gerade im Zoom-Fenster des Digitizer eine Maske korrigieren und ausgerechnet jetzt der Befehl käme, das nächste Bild zu laden. Ihr Zomm-Fenster mit dem alten Bild würde übermalt werden. Wenn Sie nun aber das Maskenzeichnen beenden, würde an der ehemaligen Zoom-Fensterstelle das alte (!) Bild restauriert werden, und Sie hätten nun weder das eine noch das andere Bild auf der Karte ! Es ist fast unmöglich, daß die Software von sich aus alles berücksichtigt. Es würde einen gigantischen Programmieraufwand mit sich bringen, in den tiefen Unterroutinen des Programmes auf AREXX zu hören, bis zum Grundmenue 'zurückklettern' den AREXX- Befehl ausführen und dann wieder dorthin wo der Benutzer war. Und selbst das würde nicht viel nutzen, da das, was der Benutzer gerade gemacht hat, dann doch vielleicht verloren wäre. Der Ausweg aus diesem Dilemma ist der, daß die Software davon ausgeht, daß Befehle, die vom Benutzer direkt an sie gestellt werden, Vorrang zu den AREXX-Befehlen hat. Das ist in der Software verwirklicht, indem sie einfach nicht auf AREXX 'höhrt' wenn der Benutzer innerhalb einer Unterroutine ist und AREXX einfach warten läßt. Das ist immer dann der Fall, wenn ein Requester aufgegangen ist, oder ein Sonderbildschirm wie der Masken- oder Brush-Bildschirm zu sehen ist. Einfach ausgedrückt: AREXX_Befehle werden nur dann ausgeführt, wenn sich das Programm im Grundmenue befindet und das nach der Regel 'Wer zuerst kommt, malt zuerst' ! Der Aufbau von AREXX-Scriptfiles Die erste Zeile eines AREXX-Scriptfiles muß immer mit der Zeichenkette /* anfangen. Das ist für AREXX die Erkennung, daß es sich bei diesem File um einen Scriptfile handelt. Diese Zeichenkette ist identisch mit dem Kommentarzeichen der Programmiersprache C. Ein Beispiel folgt: /* dies ist ein AREXX Scriptfile */ Der Text den Sie dort schreiben ist egal. Jedoch ist es sinnvoll, daß der Text etwas über die Aufgabe des Scriptfiles aussagt: /* AREXX-Script zur Erstellung eines Blauverlaufes */ Das dient Ihrer eigenen Übersicht. Das */ am Ende der Zeile ist nur Verzierung; nur in der Sprache C ist es Vorschrift. Dann folgen die AREXX und VD2001 Befehle. Ein vollständiger Scriptfile sähe folgendermaßen aus: 01 /* Arexx VD2001-Script zum bitweisen Füllen des Bildschirmes*/ 02 03 color = 1 04 do i = 0 to 31 05 say 'Now fill Bit No' i 06 VD_DigiFill color 07 color = color * 2 08 say 'end of bit ' i 09 end Zuerst kommt wieder die Anfangserkennung /* . Die Zeilenummern dürfen nicht geschrieben werden, sie dienen hier nur der Erklärung. Zeile 2 ist einfach eine Leerzeile. In Zeile 3 wird die Variable 'color' definiert und auf den Wert 1 gesetzt. Dann wird eine Schleife von 0 bis 31 gestartet. Sie läuft als 32 mal durch. In Zeile 5 wird der Text 'Now fill bit no. x' auf dem zugehörigen Fenster (Shell, CLI ect.) ausgegeben. In Zeile 6 steht nun der Befehl für den Digitizer. Da AREXX den Befehl 'VD_DigiFill' nicht kennt, schickt AREXX die ganze Zeile voller Verzweiflung an die VD2001 Software und hofft, daß wenigstens die weiß, wie es nun weitergehen soll. AREXX warte dann auf die Antwort der VD2001 Software um sich mit einer Fehlermeldung an den Benutzer aus der Affäre zu ziehen und ihm die Verantwortung für diesen Mist zu geben. Der Scriptfile funktioniert jedoch nur so lange, wie Sie ihn direkt über die VD2001 Software per Funktionstaste aufrufen. Wenn Sie ihn jedoch direkt vom SHELL aufrufen, meldet er sofort den Fehler in Zeile 6. Wird der Scriptfile von der VD2001 Software gerufen, dann 'meldet' sich die Software bei AREXX an. AREXX 'weiß' dann, wohin Sie unbekannte Befehle schicken soll. Wird AREXX direkt aufgerufen, kann AREXX nicht wissen wohin die Befehle gehen sollen. Deshalb muß man dann die VD2001 Software im Scriptfile 'anmelden'. Dies geschieht mit dem Befehl ADDRESS. Der Syntax für die VD2001 Software lautet dann: address 'VD2001msgport_1' Der volle Scriptfile von oben würde dann wie folgt aussehen: 01 /* Arexx VD2001-Script zum bitweisen Füllen des Bildschirmes*/ 02 address 'VD2001msgport_1' 03 color = 1 04 do i = 0 to 31 05 say 'Now fill Bit No' i 06 VD_DigiFill color 07 color = color * 2 08 say 'end of bit ' i 09 end Eine Besonderheit hat es mit dem '_1' am Ende des Namens auf sich. Die VD2001 Software öffnet einen Messageport mit dem Name 'VD2001msgport'. Vielleicht kommt der Benutzer jedoch einmal mit dem Wunsch zwei VD2001 Karten auf einmal zu benutzen. Dann wäre auch die Software zweimal im Speicher. Damit aber trotzdem mit AREXX gearbeitet werden kann, prüft die Software , ob es bereits einen Port mit dem Namen 'VD2001msgport_1' gibt. Wenn ja, dann nennt die Software Ihren eigenen 'VD2001msgport_2'. Dann kann per Anmeldung von außen AREXX sowohl die eine als auch die andere Software ansprechen. (Einschub: Hier sei auf eine echte Schwäche der VD2001 Software hingewiesen. Wird die Software einfach zweimal aufgerufen, bei Verwendung von einer Karte, und auf den Digitizer zugegriffen, dann entsteht echter Mist !!! Zu einem späteren Zeitpunkt wird das insoweit abgesichert, daß entweder ein Device-Treiber für die VD2001 Karte geschrieben wird, oder die Software Doppelbenutzung verweigert. Bitte laden Sie zum jetzigen Zeitpunkt die Software nicht zweimal in den Rechner !) Das Arexx Verzeichnis Die VD2001 Software schaut zum Aufruf der Scriptfiles immer im logischen REXX: Verzeichnis und im aktuellen (cd) Verzeichnis nach. Speichern Sie also immer Ihre Scriptfiles in das REXX: Verzeichnis. Sinnvollerweise legen sie auf Ihrem WORKBENCH-Device (z.B. DF0:, DH0:, FAST: usw) das Verzeichnis rexx an. In der startup-sequence Ihres Workbench-Devices fügen Sie dann die Zeile: assign REXX: [DEVICENAME]:rexx also zum Beispiel: assign REXX: DH0:rexx ein. Sonst kommt die Meldung 'ARexx Error'. Wenn Sie AREXX ordnungsgemäß nach Anleitung des AREXX-Handbuches installiert haben, dann ist das alles bereits geschehen. Ansonsten erwartet die Software natürlich, daß AREXX überhaupt vorhanden und aktiviert wurde. Falls nicht, wird beim Start der Software eine Fehlermeldung ausgegeben, dann aber ganz normal weitergemacht. Lediglich stehen dann die AREXX-Macros nicht mehr zur Verfügung. Die Befehle der VD2001 Software Alle Befehle, die in AREXX-Scriptfiles für die VD2001 Software benutzt werden, beginnen mit 'VD_'. Der Befehl zum Löschen der Karte heißt dann zum Beispiel 'VD_DigiClear'. Somit sind die VD2001 Befehle ganz klar von den Übrigen AREXX Befehlen zu unterscheiden. Hinter den VD2001 Befehlen können ein oder mehere Parameter stehen. Die Parameter müssen durch ein (!) Leerzeichen getrennt werden. Stimmt die Anordnung, Reihenfolge oder Anzahl von Parametern nicht, dann wird die Funktion abgebrochen. Filenamen müssen in Anführungszeichen <"> stehen, wenn Sie Leerzeichen enthalten. Es darf pro Zeile nur ein Befehl stehen. Ansonsten gelten die Definitionen und Regeln, die Sie aus dem AREXX-Handbuch erfahren können. Schauen Sie sich im Zweifelsfalle die mitgelieferten Demonstrationsfiles an ! Die Auflistung der Befehle VD_DigiClear Format: VD_DigiClear Parameter: keine Zweck: Löschen des Grafikspeichers der Karte Bedeutung: Dieser Befehl löscht den Speicher der VD2001 Karte. Der gesamte Bildschirm wird mit der Farbe Schwarz gefüllt was einem Beschreiben mit der Zahl 0 gleichkommt. Unabhängig von der eingestellten Auflösung (512 oder 344 horizontale Punkte) wird die ganze Karte gelöscht. Sollte sich die Karte im Overscannbetrieb befinden werden 624 Zeilen gelöscht, ansonsten 512. siehe auch: VD_MaskClear VD_DigiFill Format: VD_DigiClear color Parameter: color, eine Zahl die rot, grün und blau beinhaltet Zweck: Füllen des Grafikspeiches mit einer bestimmten Farbe. Bedeutung: Ähnlich wie beim Löschen der Grafikkarte wird hier die Karte mit einem bestimmten Wert gefüllt. Nur können Sie selbst diesen Wert bestimmen. Im Gegensatz zu anderen Befehlen, die Farbwerte beinhalten, wird hier die Farbe als 32-bit folge angegeben. Dabei gilt die Folge RRRRRRRRGGGGGGGGBBBBBBBB. Diese Funktion hat nur experimentellen Charakter. So können gezielt einzelne Planes gesetzt werden. Verständlicher ist der Befehl VD_RectFill. Diesen sollten Sie benutzen, um Flächen oder Vollbilder mit definierten Farbtönen zu füllen. siehe auch: VD_RectFill VD_ClearMask VD_ClearMask Format: VD_ClearMask Parameter: keine Zweck: Löschen des Maskenbit des Grafikspeichers der Karte Bedeutung: Dieser Befehl löscht das Maskenbit im Speicher der VD2001 Karte. Im gesamte Bildschirm wird in jedem Punkt das unterste Bit der Farbe Rot gelöscht. Unabhängig von der eingestellten Auflösung (512 oder 344 horizontale Punkte) wird in der ganzen Karte gelöscht. Sollte sich die Karte im Overscannbetrieb befinden werden 624 Zeilen gelöscht, ansonsten 512. siehe auch: VD_DigiClear VD_CreateMask Format: VD_CreateMask rot1 grün1 blau1 rot2 grün2 blau2 Parameter: unterster und oberster Farbbereich (0-255) Zweck: Erstellen einer Maske nach bestimmten Farbbereich. Bedeutung: Mit Hilfe dieses Befehles kann automatisch eine Maske innerhalb bestimmter Farbbereiche gelöscht werden. Es wird der jeweilige unterer und untere Schwellwert der drei Farbbereiche als Referenz genommen. siehe auch: VD_MaskClear VD_SetContrast Format: VD_SetContrast CONTRAST Parameter: der Contrast von 0 - 63 Zweck: Setzen der Kontrast-Schwelle beim Digitalisieren. Bedeutung: Hier können Sie den Kontrast des Digitizers einstellen. Werte von unter 0 werden als 0 und Werte von über 63 als 63 interpretiert. siehe auch: VD_SetLowLevel VD_SetLowLevel Format: VD_SetLowLevel LEVEL Parameter: der untere Schwellwert von 0 - 63 Zweck: Setzen der Weiß-Schwelle beim Digitalisieren. Bedeutung: Hier können Sie die Weiß-Schwelle des Digitizers einstellen. Werte von unter 0 werden als 0 und Werte von über 63 als 63 interpretiert. siehe auch: VD_SetContrast VD_SetRedLevel Format: VD_SetRedLevel LEVEL Parameter: der Rot-Schwellwert von 0 - 63 Zweck: Setzen der Rot-Schwelle des Ausgangssignals. Bedeutung: Hier können Sie die Rot-Schwelle des Digitizers einstellen. Werte von unter 0 werden als 0 und Werte von über 63 als 63 interpretiert. Bitte beachten Sie, daß hierbei nur die Ausgangspegel verändert werden. Es hatt keinen Einfluß auf die Daten im Speicher ! siehe auch: VD_SetGreenLevel VD_SerBlueLevel VD_SetGreenLevel Format: VD_SetGreenLevel LEVEL Parameter: der Grün-Schwellwert von 0 - 63 Zweck: Setzen der Grün-Schwelle des Ausgangssignals. Bedeutung: Hier können Sie die Grün-Schwelle des Digitizers einstellen. Werte von unter 0 werden als 0 und Werte von über 63 als 63 interpretiert. Bitte beachten Sie, daß hierbei nur die Ausgangspegel verändert werden. Es hatt keinen Einfluß auf die Daten im Speicher ! siehe auch: VD_SetRedLevel VD_SetBlueLevel VD_SetBlueLevel Format: VD_SetBlueLevel LEVEL Parameter: der Blau-Schwellwert von 0 - 63 Zweck: Setzen der Blau-Schwelle des Ausgangssignals. Bedeutung: Hier können Sie die Blau-Schwelle des Digitizers einstellen. Werte von unter 0 werden als 0 und Werte von über 63 als 63 interpretiert. Bitte beachten Sie, daß hierbei nur die Ausgangspegel verändert werden. Es hatt keinen Einfluß auf die Daten im Speicher ! siehe auch: VD_SetGreenLevel VD_SetRedLevel VD_Delay Format: VD_Delay TIME Parameter: eine Zeitspanne von 1 - 64000 Ticks (ein Tick ist unefähr 1/10 Sekunden) Zweck: Wartepause ohne Behinderung andere Programme. Bedeutung: Mit diesem Befehl können Wartepausen gemacht werden, ohne das andere Programme gestört werden. Die Routine wartet die angegebene Zeit und kehrt dann zu REXX zurück. Liste der reservierten Befehlsworte Die nachfolgende Liste nennt alle bereits reservierten Befehlsworte. Sie sind noch nicht zur Benutzung freigegeben. Nicht alle können später sinnvoll per AREXX angesprochen werden. Sie zeigt jedoch eine ungefähre Leistungsübersicht. VD_About VD_ASettings VD_BrushExStack VD_BrushToStack VD_ClearAmiga VD_ClearBlue VD_ClearBrush VD_ClearDigi VD_ClearFullStack VD_ClearGreen VD_ClearMask VD_ClearRed VD_ClearStack VD_CreateMask VD_CutBrush VD_Delay VD_DigiFill VD_DigiRun VD_DigiStop VD_DrawHorizLine VD_DrawMask VD_DrawVertLine VD_DSettings VD_ExeARexx VD_ExtLock VD_Help VD_Hires VD_IntLock VD_InvertMask VD_LaceOff VD_LaceOn VD_LoadBeams VD_LoadCaligari VD_LoadDBWRender VD_LoadIff VD_LoadILBM24 VD_LoadSculpt VD_LoadVD16 VD_LoadVD24 VD_Lores VD_Macro0 VD_Macro1 VD_Macro2 VD_Macro3 VD_Macro4 VD_Macro5 VD_Macro6 VD_Macro7 VD_Macro8 VD_Macro9 VD_Mask VD_PasteBrush VD_PSettings VD_Quit VD_Reset VD_SaveBeams VD_SaveCaligari VD_SaveDBWRender VD_SaveIff VD_SaveILBM24 VD_SaveSculpt VD_SaveVD16 VD_SaveVD24 VD_SaveVD24RAW VD_SelectBrushFunc VD_SelectLoadFunc VD_SelectMaskFunc VD_SelectSaveFunc VD_SetBlueLevel VD_SetContrast VD_SetGreenLevel VD_SetInput VD_SetKeyboard VD_SetLowLevel VD_SetMaskColor VD_SetRam VD_SetRamInput VD_SetRamMask VD_SetRedLevel VD_SetTiming VD_Shell VD_StackToBrush VD_Toggle