RSCAN V 1.00 Ein RSC-File Analyseprogramm Einleitung Dieses Programm ist fr all diejenigen gedacht,die RSC-Files analysieren wollen.Es bietet die M”glichkeit die einzelnen Objektb„ume und deren Datenstrukturen(TEDINFO) darzustellen,auszu- drucken und zu bedienen.Aber nicht nur Objektb„ume,auch einzelne Objekte sind ansprechbar.Auserdem gibt es eine Funktion,die einen Objektbaum in 'Assembler' konvertiert. Die Anleitung gliedert sich in drei Abschnitte.Der erste Teil beschreibt die vorhandenen Funktionen.Das zweite Kapitel besteht aus Anmerkungen,und Hinweisen zum Programm.Im Anhang schliesslich finden Sie einige,weniger gel„ufige AES-Funktionen und ein Inhaltsverzeichnis zum 'DEMO.RSC'-File.Ausserdem ist im Anhang noch die Anpassung von konvertierten Objektb„umen beschrieben.Dieser Teil ist fr diejenigen,die es noch nicht wissen. Um mit diesem Programm effektiv arbeiten zu k”nnen,ist eine RAM- Disk und ein Druckerspooler unbedingt zu empfehlen. Drop-down Menufunktionen About RSCAN Desktop Infobox Load Ein RSC-File wird geladen. Dies sollte Ihr erster Funktionsauf- ruf sein.Denn die Analysefunktionen werden erst nach einem erfolgreichem 'Load' aktiviert. Versucht man ein nicht existierendes File zu laden,wird die Fehlermeldung 'File not found' ausgegeben.Nach jedem Laden wird der Tree_Index auf '1' gesetzt. Convert Der aktuelle Objektbaum wird konvertiert.Dabei wird ein 'UNTITLED' Assembler Sourcefile erzeugt,welches die Baumdaten des aktuellen Baumes enth„lt. ACHTUNG! Diese Funktion konvertiert nur die eigentlichen Baumdaten.Es werden keine Datenstrukturen oder Texte ber tragen. Die Anpassung der Adressen, der Objektspezifikation,muss von Hand erfolgen(siehe Demoprogramme). Quit Beendet das Programm und kehrt zurck zum Desktop. Obj_type Diese fnf Einstellungsm”glichkeiten Obj_flag geben nach einem Doppelklick auf Obj_state einem Objekt,die angew„hlten Daten Obj_specification in Form einer Infobox auf dem Coordinates Bildschirm aus.Diese Box enth„lt die Daten im Klartext,sofern dies m”glich ist.Ausserdem wird der Tree_Index und die Objektnummer angezeigt. Tree Diese beiden Einstellungen legen Depth fest,welcher Parameter in der 'Tree&Depth' Funktion eingegeben werden kann. Die Einstellungsm”glichkeiten unter 'Settings' erscheinen nach ihrem Aufruf 'abgehakt'.Bei den 5 objektbezogenen Menupunkten ist jeweils nur ein Menupunkt anw„hlbar.Bei dem baumbezogenen Menupunkten hingegen,sind beide Menupunkte aktivierbar. Obj_draw Ein Objektbaum wird dargestellt. Welcher Objektbaum gezeichnet wird, ist vom Tree_Index abh„ngig. Form_do Der Anwender bergibt die Kontrolle ber einen Objektbaum an AES.Das bedeutet,der Anwender hat die M”glichkeit eine Dialogbox zu bedien en. Menu_bar Der Menubaum eines RSC-Files wird aktiviert.In dieser Funktion sind nur die Desk-Accessorys ansprechbar. Ein Anklicken eines anderen Menupunktes,fhrt zum Verlassen der Funktion. ACHTUNG! Diese Funktion akzeptiert keine Dialogb„ume.Versucht man dennoch einen Dialogbaum ber Menu_bar aufzu rufen, wird die Fehlermeldung 'This tree is not allowed' ausgegeben. Der Tree_Index wir auf '1' gesetzt. Next Der n„chste Objektbaum wird darge- stellt. Previous Der n„chste zurckliegende Objektbaum wird dargestellt.Diese Funktion wird blockiert, wenn der Tree_Index den Wert Null erreicht hat. Print: Die angew„hlten Daten,werden auf dem Bildschirm oder ber einen Drucker ausgegeben.Wird als Ausgabeger„t der Bildschirm gew„hlt,wartet das Programm nach Beendigung der Datenausgabe,auf einen Tastendruck. Redraw menu_bar Die Menuleiste des Programmes wird neu gezeichnet. Der Sinn dieser Funktion wird Ihnen dann klar,wenn Sie einmal einen Menu- baum dargestellt haben. ACHTUNG! Normalerweise ist der Tree#0 ein Menubaum.Eine Ausnahme ist 1ST_WORD. Hier hat der Menubaum den Index 8. Tree&Depth In dieser Funktion kann man den Tree_Index und/oder die Zeichentiefe eingeben.Welche Eingabezeile aktiv ist,h„ngt von der Einstellung unter 'Settings' ab.Versucht man die Dialogbox zu verlassen,ohne in der(den) aktivierten Eingabezeile(n) eine Eingabe gemacht zu haben, wird (werden) die Fehlermeldung(en) 'Missing tree #.' und/oder 'Missing Depth.' ausgegeben. Anmerkungen zur 'Print' Funktion Diese Funktion gibt dem Anwender die Gelegenheit,nicht nur den Objektbaum selbst,sondern auch die dazugeh”rigen Texte bzw. Datenstrukturen zu analysieren.Bei den Auswahlm”glichkeiten wurden nur die wichtigsten Punkte bercksichtigt.So ist es in einigen Ausnahmef„llen,nicht m”glich an bestimmte Daten heranzukommen.Die vorhandenen M”glichkeiten reichen aber im Normalfall vollkommen aus,um die erforderlichen Daten zu ermitteln.Weiterhin sind bis auf 'TREE',alle Auswahlm”glichkeiten objektbezogen.Das heisst,es werden lediglich die Daten eines bestimmten Objektes ausgegeben.Die Auswahl eines Objektes,erfolgt durch einfaches Anklicken des Objektes.Dadurch lassen sich auch Objekte selektieren,die nicht sichtbar sind z.B.'IBOX' Objekte.Diesen Objekttyp findet man u.a. als Quellobjekt eines Menubaumes oder als bergeordnetes Objekt zwischen Auswahlkn”pfen. ACHTUNG! Diese Funktion berprft die Zul„ssigkeit der Auswahl. Anmerkungen zur 'Form_do' Funktion Diese Funktion gestattet es dem Anwender,eine Dialogbox zu bedienen.Im Gegensatz zur 'Menu_bar' Funktion findet hier KEINE Prfung,auf Zul„ssigkeit des Objektbaumes statt.So ist es durchaus m”glich, einen Menubaum ber die 'Form_do' Funktion aufzurufen.Da ein Menubaum aber keine Objekte enth„lt,die ein Verlassen der Funktion zulassen,bleibt hier nur noch der Griff zum RESET-Knopf. šbrigens: Um'Form_do'verlassen zu k”nnen,mssen in mindestens einem Objekt, die Objektflags 'SELECTABLE' und 'EXIT','TOUCHEXIT' oder 'DEFAULT' gesetzt sein.Dies ist bei einem Menubaum nicht gegeben. Objektspezifikation Die Objektspezifikation wird zweifach ausgegeben.Als Zahlenwert und Text der die Funktion der Objektspezifikation beschreibt. Objektb„ume Wird ein nicht existierender Objektbaum aufgerufen,geschieht folgendes: Auf dem Bildschirm werden ein oder zwei weisse,senkrechte Linien gezeichnet. Der Mauszeiger verschwindet. Das Programm ist fr ein paar Sekunden nicht ansprechbar. Wenn dies eingetreten ist,sollten Sie entweder 'Previous' aufrufen oder ber die 'Tree&Depth'-Funktion einen kleineren Tree_Index eingeben. Depth Dieser Parameter gibt an bis zu welcher Ebene ein Objektbaum gezeichnet wird.Dieser Wert bezieht sich auf alle Objektb„ume.Das heisst,wenn Sie Depth auf Null stellen,wird nur das Quellobjekt dargestellt und zwar bei allen Objektb„umen.So lange bis Sie einen anderen Wert eingeben. Tree&Depth Bei dieser Funktion werden auch die nicht aktiven Parameter gelesen.Ein Beispiel: Sie haben den Objektbaum #5 dargestellt und wollen den Depth-Wert „ndern.'Tree' ist nicht aktiv zeigt aber '1' an.Nach der Best„tigung wird der Objektbaum #1 mit dem eingestellten Depth- Wert gezeichnet. Aktivieren Sie deshalb immer beide Parameter,wenn der Tree_Parameter vom Tree_Index abweicht. Next&Previous Diese Funktionen ver„ndern zwar INTERN den Tree_Index,nicht aber den Tree_Parameter der 'Tree&Depth'-Funktion. Anhang Diese AES-Funktion stellt den File-Selektor dar und erlaubt dessen Bedienung. fsel_input: move.w #90,contrl move.w #1,contrl+2 move.w #2,contrl+4 move.w #2,contrl+6 clr.w contrl+8 clr.w intin move.l #pathname,addrin move.l #filename,addrin+4 jsr aes data pathname: dc.b '\*.PRG',0 *nur PRG Files filename: dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0 intout = 0 = Fehler intout = 1 = Alles Ok. intout+2 = 0 = CANCEL intout+2 = 1 = OK Button. Diese Funktion funktioniert nur im USERMODE und als Subroutine. Die folgende AES-Funktion l”scht ein Objekt in einem Objektbaum und aktualisiert die Adressen und Zeiger.Das Objekt wird nicht wirklich gel”scht.Es werden lediglich die Zeiger so gestellt,dass das Objekt nicht mehr vorhanden scheint. obj_delete: move.w #41,contrl move.w #1,contrl+2 move.w #1,contrl+4 move.w #1,contrl+6 clr.w contrl+8 move.l obj_baum,addrin move.w obj_nummer,intin jsr aes intout = 0 = Fehler intout = 1 = Alles Ok obj_baum = Adresse des Objektbaumes. obj_nummer = Objekt_Index des zu l”schenden Objektes. Diese AES-Funktion weisst einem Objekt,eine neue Position in der Objektliste der untergeordneten Objekte zu. obj_order: move.w #45,contrl move.w #2,contrl+2 move.w #1,contrl+4 move.w #1,contrl+6 clr.w contrl+8 move.w obj_nr,intin move.w neue_obj_pos,intin+2 move.l #obj_baum,addrin jsr aes intout = 0 = Fehler intout = 1 = Alles Ok neue_obj_nr: 0 = Objekt ist neues letztes untergeordnete Objekt. -1 = Objekt ist neues erstes untergeordnete Objekt. positiver Wert = Position des Objektes vom Ende ausgehend. Einfgen eines Objektes in einen Objektbaum. objc_add: move.w #40,contrl move.w #2,contrl+2 move.w #1,contrl+4 move.w #1,contrl+6 clr.w contrl+8 move.w obj_parent,intin move.w obj_child,intin+2 move.l #obj_baum,addrin jsr aes intout = 0 = Fehler intout = 1 = Alles Ok In 'C' sieht die Geschichte so aus: Objekt einfgen: int objc_add(ob_atree, ob_aparent,ob_achild) OBJECT *pb_atree; int ob_aparent; int ob_achild; Objekt l”schen: int objc_delete(ob_dltree,ob_dlobject) OBJECT *ob_dltree; int ob_dlobject; Objekt verschieben: int objc_order(ob_ortree,ob_orobject,ob_ornewpos) OBJECT *ob_ortree; int ob_orobject; int ob_ornewpos; File-Selektor darstellen: int fsel_input(fs_iinpath,fs_iinsel,fs_iexbutton) char *fs_iinpath; char *fs_iinsel; int *fs_iexbutton; Inhaltsverzeichnis zu 'DEMO.RSC' Objektbaum# Darstellung 0 6*BUTTON 3 6*RADIO BUTTON 30 4*BUTTON 2 4*RADIO BUTTON 27 3*BUTTON 16 3*RADIO BUTTON 11 2*BUTTON 24 2*RADIO BUTTON 18 3*INPUT 28 2*INPUT 20 1*INPUT 21 4*BUTTON+3*INPUT 25 4*RADIO BUTTON+3*INPUT 4 3*BUTTON+3*INPUT 10 3*RADIO BUTTON+3*INPUT 13 2*BUTTON+3*INPUT 7 2*RADIO BUTTON+3*INPUT 14 4*BUTTON+2*INPUT 9 4*RADIO BUTTON+2*INPUT 15 3*BUTTON+2*INPUT 5 3*RADIO BUTTON+2*INPUT 17 2*BUTTON+2*INPUT 23 2*RADIO BUTTON+2*INPUT 19 4*BUTTON+1*INPUT 12 4*RADIO BUTTON+1*INPUT 22 3*BUTTON+1*INPUT 1 3*RADIO BUTTON+1*INPUT 31 2*BUTTON+1*INPUT 26 2*RADIO BUTTON+1*INPUT 6 SYNTH1 (CANNEL+WAVE) 8 SYNTH2 (VOLUME+OCTAVE) 29 SYNTH3 (KEYBOARD) Ausser SYNTHn besitzen alle Objektb„ume,zus„tzlich noch die OK und CANCEL Buttons. ACHTUNG! Die SYNTH Objektb„ume sind nur zur Darstellung geeignet.Bitte kein 'Form_do' verwenden.Abfrage in Programmen kann ber 'Obj_find' er- folgen. Anpassung von RSC-Files Beim Aufruf der 'Convert'-Funktion wird ein Assembler Sourcefile erzeugt,das die Baumdaten in der folgenden Form enth„lt. dc.w $FFFF,$0001,$0005,$0014,$0000,$0010 dc.w $0002,$1100,$00C8,$0091,$00F0,$0080 dc.w $0002,$FFFF,$FFFF,$001A,$0007,$0000 dc.w $000A,$B892,$0028,$0050,$0040,$0010 dc.w $0003,$FFFF,$FFFF,$001A,$0005,$0000 dc.w $000A,$B895,$0080,$0050,$0040,$0010 dc.w $0004,$FFFF,$FFFF,$001A,$0001,$0000 dc.w $000A,$B89C,$0010,$0020,$0040,$0010 dc.w $0005,$FFFF,$FFFF,$001A,$0001,$0000 dc.w $000A,$B8A3,$0058,$0020,$0040,$0010 dc.w $0000,$FFFF,$FFFF,$001A,$0021,$0000 dc.w $000A,$B8AA,$00A0,$0020,$0040,$0010 Dies sind die Daten des Objektbaumes #27 aus dem 'DEMO.RSC' File. Der erste Schritt zu Anpassung sieht so aus. dc.w $FFFF,$0001,$0005,$0014,$0000,$0010 dc.w $0002,$1100,$00C8,$0091,$00F0,$0080 dc.w $0002,$FFFF,$FFFF,$001A,$0007,$0000 dc.l $000A,$B892 dc.w $0028,$0050,$0040,$0010 dc.w $0003,$FFFF,$FFFF,$001A,$0005,$0000 dc.l $000A,$B895 dc.w $0080,$0050,$0040,$0010 dc.w $0004,$FFFF,$FFFF,$001A,$0001,$0000 dc.l $000A,$B89C dc.w $0010,$0020,$0040,$0010 dc.w $0005,$FFFF,$FFFF,$001A,$0001,$0000 dc.l $000A,$B8A3 dc.w $0058,$0020,$0040,$0010 dc.w $0000,$FFFF,$FFFF,$001A,$0021,$0000 dc.l $000A,$B8AA *Objektspezifikation dc.w $00A0,$0020,$0040,$0010 Die Adressen der Objektspezifikation werden isoliert.Dies gilt nicht fr BOX-Objekte.Dort stellt die Objektspezifikation keine Adresse dar,sondern beschreibt Farbe,Randst„rke und(bei BOXCHAR)das Zeichen,welches in der Box erscheint. In unserem Beispiel handelt es sich aber um BUTTON-Objekte und deren Objektspezifikation stellt einen Zeiger dar,der auf einen Text zeigt.Folglich braucht man jetzt nur noch die Zahlenwerte durch symbolische Adressen ersetzen.Das sieht dann so aus. dc.w $FFFF,$0001,$0005,$0014,$0000,$0010 dc.w $0002,$1100,$00C8,$0091,$00F0,$0080 *BOX dc.w $0002,$FFFF,$FFFF,$001A,$0007,$0000 dc.l ok_butt dc.w $0028,$0050,$0040,$0010 dc.w $0003,$FFFF,$FFFF,$001A,$0005,$0000 dc.l canc_butt dc.w $0080,$0050,$0040,$0010 dc.w $0004,$FFFF,$FFFF,$001A,$0001,$0000 dc.l bu_text1 dc.w $0010,$0020,$0040,$0010 dc.w $0005,$FFFF,$FFFF,$001A,$0001,$0000 dc.l bu_text2 dc.w $0058,$0020,$0040,$0010 dc.w $0000,$FFFF,$FFFF,$001A,$0021,$0000 dc.l bu_text3 dc.w $00A0,$0020,$0040,$0010 ok_butt: dc.b 'OK',0 *Nullbyte nicht vergessen. canc_butt: dc.b 'CANCEL',0 *Objektbreite = Anzahl der bu_text1: dc.b 'Muster1',0 * Zeichen mal 8 bu_text2: dc.b 'Muster2',0 * Denn ein Zeichen ist ja 8 bu_text3: dc.b 'Muster3',0 * Pixel breit. Fertig ist der Assembler-Objektbaum. Mit 'OBJ_DRAW' k”nnen Sie nun Ihren Objektbaum,auf dem Bildschirm darstellen. Wenn Ihr Text gr”sser ist als die Objektbreite oder wenn Sie ein Objekt in der Gr”sse oder seiner Lage ver„ndern wollen,sind die vier letzten Zahlen massgebend. Zeiger 1 2 3 Type Flag State dc.w $0000,$FFFF,$FFFF,$001A,$0021,$0000 dc.l bu_text3 dc.w $00A0,$0020,$0040,$0010 X Y Breite H”he Hierbei ist zu beachten,dass die X und Y-Koordinate relativ zum bergeordneten Objekt,zu sehen sind.In unserem Beispiel: X = $00A0 = Die linke oberen Ecke des Objektes ist um 160 Pixel nach rechts verschoben. Als Nullpunkt gilt hier die linke obere Ecke der BOX. Y = $0020 = Das Objekt ist von der linken,oberen Ecke der BOX aus gesehen,um 32 Pixel nach unten gerutscht. Und nun wnsche ich Ihnen viel Spass beim experimentieren.