Major Weenie's Engine Room - V1N5 (German): Difference between revisions

From OS2World.Com Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 3: Line 3:
[[Image:weenie-2.gif|right|Major Weenie's Engine Room]]
[[Image:weenie-2.gif|right|Major Weenie's Engine Room]]


Nun, nach dem letzten Monat waren die Subraum Voicemail Leitungen des Majors ziemlich überlastet. Jeder scheint zu denken, daß
Nun, nach dem letzten Monat waren die Subraum Voicemail Leitungen des Majors ziemlich überlastet. Jeder scheint zu denken, daß ich verrückt bin, wenn ich erkläre, wie man Code zum Ersetzen von Desktop Objekten schreibt.
ich verrückt bin, wenn ich erkläre, wie man Code zum Ersetzen von Desktop Objekten schreibt.


 
Ich schätze diese Leute haben recht. Damals, in der ersten Hälfte des 20. Jahrhunderts, schien man davon auszugehen, daß Leute nicht ihre Finger ablecken und danach in Steckdosen stecken würden. Es war nicht nötig, auf Haartrocknern kleine Schilder mit der Aufschrift "Nicht in der Badewanne benutzen" anzubringen. Es wurde ''angenommen'', daß die Leute keine Idioten waren.
Ich schätze diese Leute haben recht. Damals, in der ersten Hälfte des 20. Jahrhunderts, schien man davon auszugehen, daß Leute
nicht ihre Finger ablecken und danach in Steckdosen stecken würden. Es war nicht nötig, auf Haartrocknern kleine Schilder mit der
Aufschrift "Nicht in der Badewanne benutzen" anzubringen. Es wurde ''angenommen'', daß die Leute keine Idioten waren.


Aber dann übernahmen die Gesetze der Marktwirtschaft die Gesellschaft. Es ist ganz einfach: Hat einen Überschuß an  
Aber dann übernahmen die Gesetze der Marktwirtschaft die Gesellschaft. Es ist ganz einfach: Hat einen Überschuß an  
Zahnärzten, steht man anschließend ohne Zähne da, so wie der Major. Hat man zu viele Anwälte, endet das Ganze mit Schildern auf
Zahnärzten, steht man anschließend ohne Zähne da, so wie der Major. Hat man zu viele Anwälte, endet das Ganze mit Schildern auf Haartrocknern. Hat man zu viele Leute mit PCs, hört man andauernd: "Hilfe! Ich habe meine Festplatte formatiert und kann nicht mehr booten!" . . . Vielleicht sollte der Major besser das Thema wechseln.
Haartrocknern. Hat man zu viele Leute mit PCs, hört man andauernd: "Hilfe! Ich habe meine Festplatte formatiert und kann nicht mehr
booten!" . . . Vielleicht sollte der Major besser das Thema wechseln.


Oh. Der Sonnenbrand? Ja, der Major hat den Subraum selbst verbrannt, als er herauszufinden versucht, wie man einen Sonnenbrand
Oh. Der Sonnenbrand? Ja, der Major hat den Subraum selbst verbrannt, als er herauszufinden versucht, wie man einen Sonnenbrand
auf dem Holodeck bekommt. Leutnant Mondstrahl wieder. Irgendetwas über Blacks Strand und Volleyball; genau, daher habe ich dieses
auf dem Holodeck bekommt. Leutnant Mondstrahl wieder. Irgendetwas über Blacks Strand und Volleyball; genau, daher habe ich dieses Karo-Muster.
Karo-Muster.
 


Aber kommen wir zum Thema dieses Monats. Hört dahinten mit dem Gekicher auf; ja, der Major hat dieses Muster überall. Ich glaube,
Aber kommen wir zum Thema dieses Monats. Hört dahinten mit dem Gekicher auf; ja, der Major hat dieses Muster überall. Ich glaube,
ich versprach euch letzten Monat, daß wir diesmal erforschen würden, wie man die Original Systemobjekte mit REXX erstellt.
ich versprach euch letzten Monat, daß wir diesmal erforschen würden, wie man die Original Systemobjekte mit REXX erstellt.


Nun, der Major hat sich die Tips zu Herzen genommen, also anstatt euch mit 15 Launchpads und 1117 Reißwölfe auszustatten, schauen
Nun, der Major hat sich die Tips zu Herzen genommen, also anstatt euch mit 15 Launchpads und 1117 Reißwölfe auszustatten, schauen
wir uns doch einmal an, wie man programmtechnisch einen Ordner erstellt. Das ist ziemlich harmlos, nicht wahr?
wir uns doch einmal an, wie man programmtechnisch einen Ordner erstellt. Das ist ziemlich harmlos, nicht wahr?


Nein, wir machen kein Schild auf den Code!
Nein, wir machen kein Schild auf den Code!


Das erste, das wir in unserem Code anstellen müssen, ist, die REXX Utility Library zu laden. Wenn sie an dem Tag nicht den
Das erste, das wir in unserem Code anstellen müssen, ist, die REXX Utility Library zu laden. Wenn sie an dem Tag nicht den
Unterricht geschwänzt haben, um Springball zu spielen, hat man ihnen gesagt, wie man das Kommando in der On-Line Rexx Anleitung  
Unterricht geschwänzt haben, um Springball zu spielen, hat man ihnen gesagt, wie man das Kommando in der On-Line Rexx Anleitung findet. Man findet es unter '''REXX Utility Functions (RexxUtil).''' Die Utility Funktionen beschäftigen sich mit dem relativ alltäglichen Dingen, von '''SysSleep''', mit dem man eine Pause in ihr Programm einfügen kann, bis zu  
findet. Man findet es unter '''REXX Utility Functions (RexxUtil).''' Die Utility Funktionen beschäftigen sich mit dem
relativ alltäglichen Dingen, von '''SysSleep''', mit dem man eine Pause in ihr Programm einfügen kann, bis zu  
fast esoterischen Dingen wie '''SysDeregisterObjectClass''', bei dem der Major immer darauf Wert legt, daß sie nicht damit
fast esoterischen Dingen wie '''SysDeregisterObjectClass''', bei dem der Major immer darauf Wert legt, daß sie nicht damit
herumpfuschen, solange sie kein Backup haben . . . oder zwei oder drei.
herumpfuschen, solange sie kein Backup haben . . . oder zwei oder drei.


Nun, das erste was sie tun müssen, ist, die Funktionen zu laden. Ein eleganterer Programmierer als der Major würde wahrscheinlich nur die spezifischen Funktionen laden und später wieder entfernen, die er benutzen will.


Nun, das erste was sie tun müssen, ist, die Funktionen zu laden. Ein eleganterer Programmierer als der Major würde wahrscheinlich
Der Geruch? Nein, ich bin in keinen Salat gefallen! Der Major ißt keinen Salat! Zu hart für den Gaumen. Das ist Essig. Genau, man reibt Essig auf einen Sonnenbrand, es stillt die Schmerzen.
nur die spezifischen Funktionen laden und später wieder entfernen, die er benutzen will.
 
 
Der Geruch? Nein, ich bin in keinen Salat gefallen! Der Major ißt keinen Salat! Zu hart für den Gaumen. Das ist Essig. Genau,
man reibt Essig auf einen Sonnenbrand, es stillt die Schmerzen.
 


Wenn wir zum Beispiel '''SysSleep''' irgendwo am Anfang ihres Codes benutzen wollen, tippen sie folgendes ein:
Wenn wir zum Beispiel '''SysSleep''' irgendwo am Anfang ihres Codes benutzen wollen, tippen sie folgendes ein:


 
call RxFuncAdd 'SysCls', 'RexxUtil', 'SysSleep'
<pre>
call RxFuncAdd 'SysCls', 'RexxUtil', 'SysSleep'
 
</pre>
   
   
Nun, das funktioniert gut, bedeutet aber auch allgemein viel Arbeit, weil man dazu gezwungen wird, sich an jede geladene
Nun, das funktioniert gut, bedeutet aber auch allgemein viel Arbeit, weil man dazu gezwungen wird, sich an jede geladene
Line 60: Line 38:
er also einfach alle, indem er folgendes am Anfang des Programms eintippt:
er also einfach alle, indem er folgendes am Anfang des Programms eintippt:


 
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
<pre>
call SysLoadFuncs
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
 
</pre>
 


Dadurch werden alle Funktionen geladen.
Dadurch werden alle Funktionen geladen.
Line 73: Line 46:
simples REXX Programm aufruft, das nichts anderes macht, als jede fehlerhafte Tempdatei zu entfernen und die Utility Funktionen
simples REXX Programm aufruft, das nichts anderes macht, als jede fehlerhafte Tempdatei zu entfernen und die Utility Funktionen
zu laden. Auf diesem Weg, m&uuml;ssen sie sie nicht in jedem Programm aufrufen.
zu laden. Auf diesem Weg, m&uuml;ssen sie sie nicht in jedem Programm aufrufen.


Es gibt bei dieser L&ouml;sung jedoch einen Nachteil. Der Major gibt oft seine Programme weiter und diese undankbaren  
Es gibt bei dieser L&ouml;sung jedoch einen Nachteil. Der Major gibt oft seine Programme weiter und diese undankbaren  
S&auml;cke . . . &auml;h, die Leute, denen er sie gibt, beschweren sich dar&uuml;ber, da&szlig; sie nicht funktionieren. Nun, nat&uuml;rlich funktionieren
S&auml;cke . . . &auml;h, die Leute, denen er sie gibt, beschweren sich dar&uuml;ber, da&szlig; sie nicht funktionieren. Nun, nat&uuml;rlich funktionieren
sie nicht, schlie&szlig;lich sind die Funktionen nicht geladen, also vergessen sie nicht diesen Nachteil, wenn sie es dem Major gleichtun.
sie nicht, schlie&szlig;lich sind die Funktionen nicht geladen, also vergessen sie nicht diesen Nachteil, wenn sie es dem Major gleichtun.


''Nein,'' der Major wird sich anschlie&szlig;end nicht ein&ouml;len und ausruhen. Wenn man im Alter des Majors angekommen ist, verbringt
''Nein,'' der Major wird sich anschlie&szlig;end nicht ein&ouml;len und ausruhen. Wenn man im Alter des Majors angekommen ist, verbringt
man schon gen&uuml;gend Zeit mit "Ausruhen", er vertreibt sich die Zeit lieber auf der Bowling Bahn. Versuchen sie sich bitte zu konzentrieren. . .
man schon gen&uuml;gend Zeit mit "Ausruhen", er vertreibt sich die Zeit lieber auf der Bowling Bahn. Versuchen sie sich bitte zu konzentrieren. . .


So, der Funktionscode ist geladen, jetzt m&uuml;ssen sie das '''SysCreateObject''' Kommando benutzen. Wenn sie in der
So, der Funktionscode ist geladen, jetzt m&uuml;ssen sie das '''SysCreateObject''' Kommando benutzen. Wenn sie in der
On-Line Hilfe bei diesem Kommando nachsehen, werden sie feststellen, da&szlig; ein ''Haufen'' der Elemente des Kommandos &uuml;berhaupt
On-Line Hilfe bei diesem Kommando nachsehen, werden sie feststellen, da&szlig; ein ''Haufen'' der Elemente des Kommandos &uuml;berhaupt nicht beschrieben werden.
nicht beschrieben werden.
 


Wenn sie gerne mehr Informationen &uuml;ber ein Kommando h&auml;tten, kann ich ihnen ein wirklich hilfreiches Referenz Buch empfehlen:
Wenn sie gerne mehr Informationen &uuml;ber ein Kommando h&auml;tten, kann ich ihnen ein wirklich hilfreiches Referenz Buch empfehlen:
[[REXX Reference Summary Handbook]] from C F S Nevada, Inc.  
[[REXX Reference Summary Handbook]] from C F S Nevada, Inc.  
In manchen F&auml;llen ist es sogar n&uuml;tzlicher als die On-Line Hilfe (andererseits gibt es bei einem Buch kein Ausschneiden und Einf&uuml;gen . . . noch nicht).
In manchen F&auml;llen ist es sogar n&uuml;tzlicher als die On-Line Hilfe (andererseits gibt es bei einem Buch kein Ausschneiden und Einf&uuml;gen . . . noch nicht). Der Autor des Handbuchs ist Dick Goran, der die monatliche REXX Kolumne in OS/2 Magazine schreibt. Die Zeitung wird von [[Miller Freeman, Inc.]] herausgegeben, die ihre OS/2 Magazine Webseite anscheinend noch nicht fertig gestellt haben (ich hoffe sie erkennen den Wink mit dem Zaunpfahl &lt;g&gt;).
Der Autor des Handbuchs ist Dick Goran, der die monatliche REXX Kolumne in OS/2 Magazine schreibt. Die Zeitung wird von [[Miller Freeman, Inc.]]  
herausgegeben, die ihre OS/2 Magazine Webseite anscheinend noch nicht fertig gestellt haben (ich hoffe sie erkennen den Wink mit
dem Zaunpfahl &lt;g&gt;).
Das grunds&auml;tzlichste Kommando f&uuml;r '''SysCreateObject''' ist
Das grunds&auml;tzlichste Kommando f&uuml;r '''SysCreateObject''' ist


 
result = SysCreateObject(classname, title, location <,setup> <,option>)  
<pre>
result = SysCreateObject(classname, title, location <,setup> <,option>)  
 
</pre>
.


Einige dieser Parameter erkl&auml;ren sich von selbst. '''classname''' zum Beispiel, ist nat&uuml;rlich der Klassenname des
Einige dieser Parameter erkl&auml;ren sich von selbst. '''classname''' zum Beispiel, ist nat&uuml;rlich der Klassenname des
Line 108: Line 68:
auch verschiedenen Objektklassen auf ihrem System.
auch verschiedenen Objektklassen auf ihrem System.


 
F&uuml;r alle, die von Objektorientierung keine Ahnung haben: Ein Programmobjekt bekommt sein verhalten, indem es Eigenschaften von dem Hauptobjekt im System erbt, der Workplace Shell Klasse und indem es weitere Charaktereigenschaften definiert. Haben sie zum Beispiel IBM Works aus dem BonusPack installiert, erhalten die neuen Obekte in ihrem Schablonen-Ordner ihr Verhalten sozusagen von den DLLs, die sie definierten.
F&uuml;r alle, die von Objektorientierung keine Ahnung haben: Ein Programmobjekt bekommt sein verhalten, indem es Eigenschaften von
dem Hauptobjekt im System erbt, der Workplace Shell Klasse und indem es weitere Charaktereigenschaften definiert. Haben sie zum
Beispiel IBM Works aus dem BonusPack installiert, erhalten die neuen Obekte in ihrem Schablonen-Ordner ihr Verhalten sozusagen von
den DLLs, die sie definierten.
 


Wenn sie sich in der Anleitung den Befehl '''SysQueryClassList''' ansehen, finden sie ein Codefragment, das sie benutzen
Wenn sie sich in der Anleitung den Befehl '''SysQueryClassList''' ansehen, finden sie ein Codefragment, das sie benutzen
k&ouml;nnen, um sich die registrierten Klassen auf ihrem System anzusehen. Genaugenommen, werden sie einen Blick auf die Ordnerklasse
k&ouml;nnen, um sich die registrierten Klassen auf ihrem System anzusehen. Genaugenommen, werden sie einen Blick auf die Ordnerklasse vom Typ '''WPFolder''' werfen m&uuml;ssen.
vom Typ '''WPFolder''' werfen m&uuml;ssen.
 


Jetzt ist die Frage, wo findet man diese Klasse. Genau-- &uuml;berall wo man will, aber in diesem Fall halten wir das Ganze lieber  
Jetzt ist die Frage, wo findet man diese Klasse. Genau-- &uuml;berall wo man will, aber in diesem Fall halten wir das Ganze lieber  
Line 124: Line 77:
ablegen.
ablegen.


 
Woher kommt das jetzt? Leutnant Mondstrahl hat eine gute Frage gestellt: "Woher weiss man, da&szlig; der Desktop 'WP_Desktop' heisst? Nun, eine offensichtliche Antwort ist, da&szlig; es in der Anleitung steht. Aber eine weitere, viel esoterischere Antwort ist: Sie werden sich daran erinnern, da&szlig; wir letzten Monat an unseren '''ini.rc''' und '''inisys.rc''' Files mutig herumgefummelt haben. W&auml;hrend sie alles durchgelesen haben, ist ihnen vielleicht diese Zeile in '''ini.rc''' aufgefallen:
Woher kommt das jetzt? Leutnant Mondstrahl hat eine gute Frage gestellt: "Woher weiss man, da&szlig; der Desktop 'WP_Desktop' heisst?
Nun, eine offensichtliche Antwort ist, da&szlig; es in der Anleitung steht. Aber eine weitere, viel esoterischere Antwort ist: Sie werden
sich daran erinnern, da&szlig; wir letzten Monat an unseren '''ini.rc''' und '''inisys.rc''' Files mutig herumgefummelt
haben. W&auml;hrend sie alles durchgelesen haben, ist ihnen vielleicht diese Zeile in '''ini.rc''' aufgefallen:
 
<br>
 


"PM_InstallObject" "Desktop;WPDesktop;?:\" "OBJECTID=&lt;WP_DESKTOP&gt;"
"PM_InstallObject" "Desktop;WPDesktop;?:\" "OBJECTID=&lt;WP_DESKTOP&gt;"


Kein Grund, sich nach weiteren Hinweisen umzusehen . . .
Kein Grund, sich nach weiteren Hinweisen umzusehen . . .


Nun, sie werden feststellen, da&szlig; es ein Reihe weiterer optionaler Parameter gibt. '''&lt;,setup&gt;''' und  
Nun, sie werden feststellen, da&szlig; es ein Reihe weiterer optionaler Parameter gibt. '''&lt;,setup&gt;''' und  
'''&lt;,option&gt;''' und leider hat die Anleitung nicht viel &uuml;ber '''setup''' zu sagen, weil option einer
'''&lt;,option&gt;''' und leider hat die Anleitung nicht viel &uuml;ber '''setup''' zu sagen, weil option einer
der interessanteren Parameter ist. Damit kontrollieren sie Sachen wie das Anordnen von Icons und Hintergrund Bitmaps.
der interessanteren Parameter ist. Damit kontrollieren sie Sachen wie das Anordnen von Icons und Hintergrund Bitmaps.


Offensichtlich sind Optionen einer der Hauptgr&uuml;nde, warum sie diese &Uuml;bung durchlaufen, ob sie jetzt ihre eigenen Ordner
Offensichtlich sind Optionen einer der Hauptgr&uuml;nde, warum sie diese &Uuml;bung durchlaufen, ob sie jetzt ihre eigenen Ordner
einfach so zum Spa&szlig; erstellen oder es f&uuml;r Geld machen. Wenn sie lange genug im Internet herumsuchen, werden sie Beispiele &uuml;ber
einfach so zum Spa&szlig; erstellen oder es f&uuml;r Geld machen. Wenn sie lange genug im Internet herumsuchen, werden sie Beispiele &uuml;ber
die Nutzung der verschiedenen Optionen finden.
die Nutzung der verschiedenen Optionen finden.


Eine, die der Major gerne benutzt, ist '''BACKGROUND''', durch die man ein Hintergrund-Bitmap in einem Ordner unterbringen
Eine, die der Major gerne benutzt, ist '''BACKGROUND''', durch die man ein Hintergrund-Bitmap in einem Ordner unterbringen
kann.
kann.


So weit auch die '''option''' Einstellungen reichen, gibt es doch nur drei, &uuml;ber die man sich wirklich sorgen
So weit auch die '''option''' Einstellungen reichen, gibt es doch nur drei, &uuml;ber die man sich wirklich sorgen
Line 158: Line 99:
selben Namen findet und ''Update'' wird das existierende Objekt mit jedem Parameter erweitern, den sie angegeben haben. Sie
selben Namen findet und ''Update'' wird das existierende Objekt mit jedem Parameter erweitern, den sie angegeben haben. Sie
m&uuml;ssen nur den ersten Buchstaben f&uuml;r '''option''' benutzen, nicht das ganze Wort.
m&uuml;ssen nur den ersten Buchstaben f&uuml;r '''option''' benutzen, nicht das ganze Wort.


Was der Major am h&auml;ufigsten benutzt, ist, sich ein neues Bitmap, das er irgendwo hergeschafft hat, auf faule Art anzusehen.
Was der Major am h&auml;ufigsten benutzt, ist, sich ein neues Bitmap, das er irgendwo hergeschafft hat, auf faule Art anzusehen.
Der Major hat zum Beispiel gerade ein Bitmap von [[Snake Plissken]] aus dem Internet geholt
Der Major hat zum Beispiel gerade ein Bitmap von [[Snake Plissken]] aus dem Internet geholt
und es auf seinem Desktop abgelegt. Der Code, um einen Ordner zu erstellen und Snake in den Hintergrund zu kleben, ist:
und es auf seinem Desktop abgelegt. Der Code, um einen Ordner zu erstellen und Snake in den Hintergrund zu kleben, ist:


<pre>
<pre>
Line 172: Line 111:
rc=SysCreateObject("WPFolder", FolderName,"", setup,'F')
rc=SysCreateObject("WPFolder", FolderName,"", setup,'F')
Exit rc
Exit rc
</pre>
</pre>
   
   
Line 178: Line 116:
aber wenn sie in ihrer Akademiezeit nicht geschlafen haben, wissen sie das bereits.) Zuallererst bemerken sie, da&szlig; ich
aber wenn sie in ihrer Akademiezeit nicht geschlafen haben, wissen sie das bereits.) Zuallererst bemerken sie, da&szlig; ich
mehrere Parameter als Ersatz benutzt habe, um den Code ein wenig lesbarer zu gestalten.
mehrere Parameter als Ersatz benutzt habe, um den Code ein wenig lesbarer zu gestalten.


Der Parameter ''FolderName'' f&uuml;gt den String "Mein Vorbild, Snake!" in den Aufruf an '''SysCreateObject''' ein,
Der Parameter ''FolderName'' f&uuml;gt den String "Mein Vorbild, Snake!" in den Aufruf an '''SysCreateObject''' ein,
au&szlig;erdem habe ich '''Setup''' hinzugef&uuml;gt, das die Parameter ''Iconview'' und ''Background'' enth&auml;lt.
au&szlig;erdem habe ich '''Setup''' hinzugef&uuml;gt, das die Parameter ''Iconview'' und ''Background'' enth&auml;lt.


Hier also zwei Vorschl&auml;ge, um das Ganze noch etwas flexibler zu gestalten. Als erstes fangen sie den Ordnernamen auf der Kommandozeile
Hier also zwei Vorschl&auml;ge, um das Ganze noch etwas flexibler zu gestalten. Als erstes fangen sie den Ordnernamen auf der Kommandozeile
ab, wenn das Programm ausgef&uuml;hrt wird. Das funktioniert, wenn sie
ab, wenn das Programm ausgef&uuml;hrt wird. Das funktioniert, wenn sie


 
FolderName = "My man Snake!"
<pre>
FolderName = "My man Snake!"
 
</pre>
 
durch
durch
 
Parse arg FolderName
<pre>
ersetzen.
Parse arg FolderName
 
</pre>
ersetzen.


Sie erinnern sich wahrscheinlich an die '''arg''' Funktion aus fr&uuml;heren Diskussionen. Wenn nicht, genau-- schauen sie
Sie erinnern sich wahrscheinlich an die '''arg''' Funktion aus fr&uuml;heren Diskussionen. Wenn nicht, genau-- schauen sie
noch einmal in ihr Buch. '''Parse arg''' stellt sicher, da&szlig; auch das, was sie auf der Kommandozeil eingeben, als  
noch einmal in ihr Buch. '''Parse arg''' stellt sicher, da&szlig; auch das, was sie auf der Kommandozeil eingeben, als  
Ordnername angenommen wird, ansonsten konvertiert '''arg''' automatisch alles, was sie eintippen, in Gro&szlig;buchstaben.
Ordnername angenommen wird, ansonsten konvertiert '''arg''' automatisch alles, was sie eintippen, in Gro&szlig;buchstaben.


Ein zweiter Vorschlag ist, da&szlig; sie anstelle des Ordnernamens auf der Kommandozeile den Namen des Bitmaps abfangen.
Ein zweiter Vorschlag ist, da&szlig; sie anstelle des Ordnernamens auf der Kommandozeile den Namen des Bitmaps abfangen.
Line 210: Line 136:
und den neuen Namen eingeben m&uuml;ssen. Die &Auml;nderung des Hintergrundbitmaps bedeutet, da&szlig; man die Ordnereinstellungen &ouml;ffnen mu&szlig; und wir
und den neuen Namen eingeben m&uuml;ssen. Die &Auml;nderung des Hintergrundbitmaps bedeutet, da&szlig; man die Ordnereinstellungen &ouml;ffnen mu&szlig; und wir
wissen alle, wie &auml;ngstlich einige Leute davor zur&uuml;ckschrecken.
wissen alle, wie &auml;ngstlich einige Leute davor zur&uuml;ckschrecken.


In diesem Fall wollen sie ein '''arg''' Kommando an den Beginn ihres Programm setzen, und
In diesem Fall wollen sie ein '''arg''' Kommando an den Beginn ihres Programm setzen, und


 
Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\DESKTOP\SNAKE.BMP'
<pre>
Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\DESKTOP\SNAKE.BMP'
 
</pre>
 
in
in
 
Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic
<pre>
ver&auml;ndern, wobei '''pic''' die '''arg''' Variable ist.
Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic
 
</pre>
ver&auml;ndern, wobei '''pic''' die '''arg''' Variable ist.


Wenn sie das tun, sieht das Kommando, das sie an ''snake.cmd'' weitergeben in etwa so aus: '''snake c:\desktop\snake.bmp'''.
Wenn sie das tun, sieht das Kommando, das sie an ''snake.cmd'' weitergeben in etwa so aus: '''snake c:\desktop\snake.bmp'''.


Was ihnen gleich auffallen wird, ist, da&szlig; der Ordner, den sie gerade erstellt haben, '''FOLDERNAME''' heisst, weil  
Was ihnen gleich auffallen wird, ist, da&szlig; der Ordner, den sie gerade erstellt haben, '''FOLDERNAME''' heisst, weil  
wir das noch nicht definiert haben. Wenn ihnen diese Herangehensweise gef&auml;llt, f&uuml;gen sie die Zeile
wir das noch nicht definiert haben. Wenn ihnen diese Herangehensweise gef&auml;llt, f&uuml;gen sie die Zeile


FolderName = pic


<pre>
hinzu, damit der Ordner den Namen des Bitmaps bekommt!
FolderName = pic
 
</pre>
hinzu, damit der Ordner den Namen des Bitmaps bekommt!


Offensichtlich sorgt das f&uuml;r ziemlich komische Ordnernamen. Es gibt noch eine weitere Herangehensweise, dazu m&uuml;ssen sie
Offensichtlich sorgt das f&uuml;r ziemlich komische Ordnernamen. Es gibt noch eine weitere Herangehensweise, dazu m&uuml;ssen sie
ein Verzeichnis w&auml;hlen, in dem sie immer ihre Bitmap lagern werden, zum Beispiel OS2\BITMAP. Dann ver&auml;ndern sie
ein Verzeichnis w&auml;hlen, in dem sie immer ihre Bitmap lagern werden, zum Beispiel OS2\BITMAP. Dann ver&auml;ndern sie


 
Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic
<pre>
Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic
 
</pre>
 
in
in
 
Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\OS2\BITMAP\'pic
<pre>
Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\OS2\BITMAP\'pic
 
</pre>
   
   
Wenn sie das Ganze jetzt ''richtig'' h&uuml;bsch machen wollen . . .
Wenn sie das Ganze jetzt ''richtig'' h&uuml;bsch machen wollen . . .


 
Mist, der Sonnenbrand des Majors juckt wie verr&uuml;ckt. Ich mu&szlig; auf dieses Ding etwas Essig machen. Ich habe heute Morgen versucht, den Replikator in meinem Quartier in eine Essig-Dusche umzufunktionieren und ich brauchte eine Stunde, um den Ahorn-Sirup von den W&auml;nden zu bekommen, also mu&szlig; ich das selber machen.
Mist, der Sonnenbrand des Majors juckt wie verr&uuml;ckt. Ich mu&szlig; auf dieses Ding etwas Essig machen. Ich habe heute Morgen versucht,  
den Replikator in meinem Quartier in eine Essig-Dusche umzufunktionieren und ich brauchte eine Stunde, um den Ahorn-Sirup von
den W&auml;nden zu bekommen, also mu&szlig; ich das selber machen.
 


Wenn sie einen Vorschlag f&uuml;r einen zuk&uuml;nftigen Besuch im Maschienenraum haben, schicken sie mir eine Nachricht an [kentr@ibm.net]
Wenn sie einen Vorschlag f&uuml;r einen zuk&uuml;nftigen Besuch im Maschienenraum haben, schicken sie mir eine Nachricht an [kentr@ibm.net]


Also bis zum n&auml;chsten Monat, Ihr
Also bis zum n&auml;chsten Monat, Ihr


Major Weenie
Major Weenie


Major Weenie ist [[Kent Rebman]], ein Amateur Software Crash Test Dummy im IBM Midwestern Open Systems Zentrum. -ed
Major Weenie ist [[Kent Rebman]], ein Amateur Software Crash Test Dummy im IBM Midwestern Open Systems Zentrum. -ed
----
----
[[Image:wollogos.gif|right|Warp Online]]
[[Image:wollogos.gif|right|Warp Online]]


[[Category:WarpOnline]]
[[Category:WarpOnline]]

Revision as of 23:17, 10 November 2017

Engage

Major Weenie's Engine Room
Major Weenie's Engine Room

Nun, nach dem letzten Monat waren die Subraum Voicemail Leitungen des Majors ziemlich überlastet. Jeder scheint zu denken, daß ich verrückt bin, wenn ich erkläre, wie man Code zum Ersetzen von Desktop Objekten schreibt.

Ich schätze diese Leute haben recht. Damals, in der ersten Hälfte des 20. Jahrhunderts, schien man davon auszugehen, daß Leute nicht ihre Finger ablecken und danach in Steckdosen stecken würden. Es war nicht nötig, auf Haartrocknern kleine Schilder mit der Aufschrift "Nicht in der Badewanne benutzen" anzubringen. Es wurde angenommen, daß die Leute keine Idioten waren.

Aber dann übernahmen die Gesetze der Marktwirtschaft die Gesellschaft. Es ist ganz einfach: Hat einen Überschuß an Zahnärzten, steht man anschließend ohne Zähne da, so wie der Major. Hat man zu viele Anwälte, endet das Ganze mit Schildern auf Haartrocknern. Hat man zu viele Leute mit PCs, hört man andauernd: "Hilfe! Ich habe meine Festplatte formatiert und kann nicht mehr booten!" . . . Vielleicht sollte der Major besser das Thema wechseln.

Oh. Der Sonnenbrand? Ja, der Major hat den Subraum selbst verbrannt, als er herauszufinden versucht, wie man einen Sonnenbrand auf dem Holodeck bekommt. Leutnant Mondstrahl wieder. Irgendetwas über Blacks Strand und Volleyball; genau, daher habe ich dieses Karo-Muster.

Aber kommen wir zum Thema dieses Monats. Hört dahinten mit dem Gekicher auf; ja, der Major hat dieses Muster überall. Ich glaube, ich versprach euch letzten Monat, daß wir diesmal erforschen würden, wie man die Original Systemobjekte mit REXX erstellt.

Nun, der Major hat sich die Tips zu Herzen genommen, also anstatt euch mit 15 Launchpads und 1117 Reißwölfe auszustatten, schauen wir uns doch einmal an, wie man programmtechnisch einen Ordner erstellt. Das ist ziemlich harmlos, nicht wahr?

Nein, wir machen kein Schild auf den Code!

Das erste, das wir in unserem Code anstellen müssen, ist, die REXX Utility Library zu laden. Wenn sie an dem Tag nicht den Unterricht geschwänzt haben, um Springball zu spielen, hat man ihnen gesagt, wie man das Kommando in der On-Line Rexx Anleitung findet. Man findet es unter REXX Utility Functions (RexxUtil). Die Utility Funktionen beschäftigen sich mit dem relativ alltäglichen Dingen, von SysSleep, mit dem man eine Pause in ihr Programm einfügen kann, bis zu fast esoterischen Dingen wie SysDeregisterObjectClass, bei dem der Major immer darauf Wert legt, daß sie nicht damit herumpfuschen, solange sie kein Backup haben . . . oder zwei oder drei.

Nun, das erste was sie tun müssen, ist, die Funktionen zu laden. Ein eleganterer Programmierer als der Major würde wahrscheinlich nur die spezifischen Funktionen laden und später wieder entfernen, die er benutzen will.

Der Geruch? Nein, ich bin in keinen Salat gefallen! Der Major ißt keinen Salat! Zu hart für den Gaumen. Das ist Essig. Genau, man reibt Essig auf einen Sonnenbrand, es stillt die Schmerzen.

Wenn wir zum Beispiel SysSleep irgendwo am Anfang ihres Codes benutzen wollen, tippen sie folgendes ein:

call RxFuncAdd 'SysCls', 'RexxUtil', 'SysSleep'

Nun, das funktioniert gut, bedeutet aber auch allgemein viel Arbeit, weil man dazu gezwungen wird, sich an jede geladene Funktion zu erinnern, die man in seinem Programm benutzen will; um also bei der unaufwendigen Lösung des Majors zu bleiben, lädt er also einfach alle, indem er folgendes am Anfang des Programms eintippt:

call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs

Dadurch werden alle Funktionen geladen.

Ok, ich gebe es zu. In Wirklichkeit hat der Major in seinem Systemstart Ordner ein Programmobjekt, das ein simples REXX Programm aufruft, das nichts anderes macht, als jede fehlerhafte Tempdatei zu entfernen und die Utility Funktionen zu laden. Auf diesem Weg, müssen sie sie nicht in jedem Programm aufrufen.

Es gibt bei dieser Lösung jedoch einen Nachteil. Der Major gibt oft seine Programme weiter und diese undankbaren Säcke . . . äh, die Leute, denen er sie gibt, beschweren sich darüber, daß sie nicht funktionieren. Nun, natürlich funktionieren sie nicht, schließlich sind die Funktionen nicht geladen, also vergessen sie nicht diesen Nachteil, wenn sie es dem Major gleichtun.

Nein, der Major wird sich anschließend nicht einölen und ausruhen. Wenn man im Alter des Majors angekommen ist, verbringt man schon genügend Zeit mit "Ausruhen", er vertreibt sich die Zeit lieber auf der Bowling Bahn. Versuchen sie sich bitte zu konzentrieren. . .

So, der Funktionscode ist geladen, jetzt müssen sie das SysCreateObject Kommando benutzen. Wenn sie in der On-Line Hilfe bei diesem Kommando nachsehen, werden sie feststellen, daß ein Haufen der Elemente des Kommandos überhaupt nicht beschrieben werden.

Wenn sie gerne mehr Informationen über ein Kommando hätten, kann ich ihnen ein wirklich hilfreiches Referenz Buch empfehlen: REXX Reference Summary Handbook from C F S Nevada, Inc. In manchen Fällen ist es sogar nützlicher als die On-Line Hilfe (andererseits gibt es bei einem Buch kein Ausschneiden und Einfügen . . . noch nicht). Der Autor des Handbuchs ist Dick Goran, der die monatliche REXX Kolumne in OS/2 Magazine schreibt. Die Zeitung wird von Miller Freeman, Inc. herausgegeben, die ihre OS/2 Magazine Webseite anscheinend noch nicht fertig gestellt haben (ich hoffe sie erkennen den Wink mit dem Zaunpfahl <g>). Das grundsätzlichste Kommando für SysCreateObject ist

result = SysCreateObject(classname, title, location <,setup> <,option>) 

Einige dieser Parameter erklären sich von selbst. classname zum Beispiel, ist natürlich der Klassenname des Objekts. Es gibt verschiedene Objektklassen auf ihrem System. Wenn sie bei sich ein Programm installieren, installieren sie oft auch verschiedenen Objektklassen auf ihrem System.

Für alle, die von Objektorientierung keine Ahnung haben: Ein Programmobjekt bekommt sein verhalten, indem es Eigenschaften von dem Hauptobjekt im System erbt, der Workplace Shell Klasse und indem es weitere Charaktereigenschaften definiert. Haben sie zum Beispiel IBM Works aus dem BonusPack installiert, erhalten die neuen Obekte in ihrem Schablonen-Ordner ihr Verhalten sozusagen von den DLLs, die sie definierten.

Wenn sie sich in der Anleitung den Befehl SysQueryClassList ansehen, finden sie ein Codefragment, das sie benutzen können, um sich die registrierten Klassen auf ihrem System anzusehen. Genaugenommen, werden sie einen Blick auf die Ordnerklasse vom Typ WPFolder werfen müssen.

Jetzt ist die Frage, wo findet man diese Klasse. Genau-- überall wo man will, aber in diesem Fall halten wir das Ganze lieber einfach. Wir sollten auf sicherem Terrain bleiben, wenn der Major anwesend ist. Also, wir wollen es am Ort WP_Desktop ablegen.

Woher kommt das jetzt? Leutnant Mondstrahl hat eine gute Frage gestellt: "Woher weiss man, daß der Desktop 'WP_Desktop' heisst? Nun, eine offensichtliche Antwort ist, daß es in der Anleitung steht. Aber eine weitere, viel esoterischere Antwort ist: Sie werden sich daran erinnern, daß wir letzten Monat an unseren ini.rc und inisys.rc Files mutig herumgefummelt haben. Während sie alles durchgelesen haben, ist ihnen vielleicht diese Zeile in ini.rc aufgefallen:

"PM_InstallObject" "Desktop;WPDesktop;?:\" "OBJECTID=<WP_DESKTOP>"

Kein Grund, sich nach weiteren Hinweisen umzusehen . . .

Nun, sie werden feststellen, daß es ein Reihe weiterer optionaler Parameter gibt. <,setup> und <,option> und leider hat die Anleitung nicht viel über setup zu sagen, weil option einer der interessanteren Parameter ist. Damit kontrollieren sie Sachen wie das Anordnen von Icons und Hintergrund Bitmaps.

Offensichtlich sind Optionen einer der Hauptgründe, warum sie diese Übung durchlaufen, ob sie jetzt ihre eigenen Ordner einfach so zum Spaß erstellen oder es für Geld machen. Wenn sie lange genug im Internet herumsuchen, werden sie Beispiele über die Nutzung der verschiedenen Optionen finden.

Eine, die der Major gerne benutzt, ist BACKGROUND, durch die man ein Hintergrund-Bitmap in einem Ordner unterbringen kann.

So weit auch die option Einstellungen reichen, gibt es doch nur drei, über die man sich wirklich sorgen machen braucht. Replace sorgt dafür, daß das Objekt, das erschaffen wird, ein existierendes Objekt mit dem selben Namen ersetzt. Benutzen sie das mit Vorsicht! Fail läßt das Programm fehlschlagen, wenn es ein Objekt mit dem selben Namen findet und Update wird das existierende Objekt mit jedem Parameter erweitern, den sie angegeben haben. Sie müssen nur den ersten Buchstaben für option benutzen, nicht das ganze Wort.

Was der Major am häufigsten benutzt, ist, sich ein neues Bitmap, das er irgendwo hergeschafft hat, auf faule Art anzusehen. Der Major hat zum Beispiel gerade ein Bitmap von Snake Plissken aus dem Internet geholt und es auf seinem Desktop abgelegt. Der Code, um einen Ordner zu erstellen und Snake in den Hintergrund zu kleben, ist:

FolderName = "Mein Vorbild, Snake!"
Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\DESKTOP\SNAKE.BMP'
ClassName = WPFolder
Location = ''
rc=SysCreateObject("WPFolder", FolderName,"", setup,'F')
Exit rc

Jetzt fallen einige Punkte auf. (Nicht zuletzt die Tatsache, daß das kein komplettes Code Fragment ist, aber wenn sie in ihrer Akademiezeit nicht geschlafen haben, wissen sie das bereits.) Zuallererst bemerken sie, daß ich mehrere Parameter als Ersatz benutzt habe, um den Code ein wenig lesbarer zu gestalten.

Der Parameter FolderName fügt den String "Mein Vorbild, Snake!" in den Aufruf an SysCreateObject ein, außerdem habe ich Setup hinzugefügt, das die Parameter Iconview und Background enthält.

Hier also zwei Vorschläge, um das Ganze noch etwas flexibler zu gestalten. Als erstes fangen sie den Ordnernamen auf der Kommandozeile ab, wenn das Programm ausgeführt wird. Das funktioniert, wenn sie

FolderName = "My man Snake!"

durch

Parse arg FolderName

ersetzen.

Sie erinnern sich wahrscheinlich an die arg Funktion aus früheren Diskussionen. Wenn nicht, genau-- schauen sie noch einmal in ihr Buch. Parse arg stellt sicher, daß auch das, was sie auf der Kommandozeil eingeben, als Ordnername angenommen wird, ansonsten konvertiert arg automatisch alles, was sie eintippen, in Großbuchstaben.

Ein zweiter Vorschlag ist, daß sie anstelle des Ordnernamens auf der Kommandozeile den Namen des Bitmaps abfangen. Erinnern sie sich daran, daß die Änderung des Ordnernamens so simpel ist, daß sie nur mit gedrücktem ALT auf den Ordnernamen klicken und den neuen Namen eingeben müssen. Die Änderung des Hintergrundbitmaps bedeutet, daß man die Ordnereinstellungen öffnen muß und wir wissen alle, wie ängstlich einige Leute davor zurückschrecken.

In diesem Fall wollen sie ein arg Kommando an den Beginn ihres Programm setzen, und

Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\DESKTOP\SNAKE.BMP'

in

Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic

verändern, wobei pic die arg Variable ist.

Wenn sie das tun, sieht das Kommando, das sie an snake.cmd weitergeben in etwa so aus: snake c:\desktop\snake.bmp.

Was ihnen gleich auffallen wird, ist, daß der Ordner, den sie gerade erstellt haben, FOLDERNAME heisst, weil wir das noch nicht definiert haben. Wenn ihnen diese Herangehensweise gefällt, fügen sie die Zeile

FolderName = pic

hinzu, damit der Ordner den Namen des Bitmaps bekommt!

Offensichtlich sorgt das für ziemlich komische Ordnernamen. Es gibt noch eine weitere Herangehensweise, dazu müssen sie ein Verzeichnis wählen, in dem sie immer ihre Bitmap lagern werden, zum Beispiel OS2\BITMAP. Dann verändern sie

Setup = 'ICONVIEW NON-GRID;BACKGROUND='pic

in

Setup = 'ICONVIEW NON-GRID;BACKGROUND=C:\OS2\BITMAP\'pic

Wenn sie das Ganze jetzt richtig hübsch machen wollen . . .

Mist, der Sonnenbrand des Majors juckt wie verrückt. Ich muß auf dieses Ding etwas Essig machen. Ich habe heute Morgen versucht, den Replikator in meinem Quartier in eine Essig-Dusche umzufunktionieren und ich brauchte eine Stunde, um den Ahorn-Sirup von den Wänden zu bekommen, also muß ich das selber machen.

Wenn sie einen Vorschlag für einen zukünftigen Besuch im Maschienenraum haben, schicken sie mir eine Nachricht an [kentr@ibm.net]

Also bis zum nächsten Monat, Ihr

Major Weenie

Major Weenie ist Kent Rebman, ein Amateur Software Crash Test Dummy im IBM Midwestern Open Systems Zentrum. -ed


Warp Online
Warp Online