[Allegro] Besondere Variable W

Thomas Berger ThB at Gymel.com
Sa Jul 2 17:35:23 CEST 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lieber Herr Allers, liebe Liste,


> Wenn das Arbeitsverzeichnis in einem vom Wurzelverzeichnis 
> verschiedenen Verzeichnis liegt, dann hat die besondere Variable W 
> _keinen_ umgekehrten Schrägstrich am Ende.- Beispiel: Ist das 
> Arbeitsverzeichnis
> c:\allegro, dann hat W die Besetzung 'c:\allegro'.
> 
> Wenn aber das Arbeitsverzeichnis mit dem Wurzelverzeichnis 
> zusammenfällt, dann endet die besondere Variable W _mit_ dem 
> umgekehrten Schrägstrich.- Beispiel: Ist das Arbeitsverzeichnis
> c:\, dann hat W die Besetzung 'c:\'.
> 
> Für mich eigentlich kein Problem mehr, denn diese Nichtparallelität 
> habe ich programmintern ausgeglichen. Aber wer mir dabei in die Karten 
> guckt, der fragt nach dem Warum, und gerne würde ich sagen können, daß 
> hier wieder einmal eine Microsoft-Ungereimtheit kompensiert wird oder 
> werden muß.
> 
> Drum die Frage an die Windows-Experten und Allegro-Entwickler: Liegt 
> die beschriebene nicht-konsistente Besetzung von W wirklich an 
> Microsoft? Zu gern würde ich das bestätigt bekommen.  :-))

Die Besetzung von W liegt an a99 :-)

Das Dilemma ist doch folgendes

C:\   ist das Wurzelverzeichnis auf Laufwerk C
C: ohne Backslash ist das aktuell auf Laufwerk C eingestellte
   Verzeichnis, das kann irgendeins sein
C:\allegro ist das Verzeichnis Allegro auf Laufwerk C
C:\allegro\ ist tendenziell kein legaler Verzeichnisname, scheint
   aber normalerweise immer zu funktionieren, auch wenn man weitere
   Pfade anhaengt, wie etwa c:\allegro\\demo2 (ausser evtl. bei
   allegro-Modulen?)

Diese Asymetrie gibt es tendenziell auch unter U**X:
"/" ist das Wurzelverzeichnis des Dateisystems
"/usr" ist das Verzeichnis usr . Um von einem gegebenen Verzeichnis
in ein Unterverzeichnis zu kommen, muss man "/" dazwischen setzen oder
darf es nicht: "/" . "usr" ist das Verzeichnis /usr, "/". "/". "usr" ist
"//usr", d.h. (Cygwin, Linux?) die Liste der von der Maschine usr
freigegebenen Verzeichnisse oder etwas illegales.

Die korrekte Regel ist in beiden Betriebssystemen: Entferne ein "/"
am Ende, sofern er existiert, setze "/" dahinter und den Namen des
gewuenschten Unterverzeichnisses. Fuer .bat-Dateien mit ihrem
beschraenkten Funktionalitaetsumfang hilft diese Regel leider herzlich
wenig.

Die fuer allegro relevanten DOS-Umgebungsvariablen -D und -P enthielten
die Pfade "korrekt" (d.h. ohne "/" am Ende, ausser bei
Wurzelverzeichnissen von Laufwerken), die a99-cstrings P und D (und M)
enthalten hingegen stets ein "/" am Ende. Das ist eine laestige
Inkonsistenz, denn in der .bat-Sprache hat man keine Chance, in jeder
Situation korrekte Pfade zu erzeugen, in der Flex-Sprache haette man die
Konstrukte (hatte sie aber vielleicht damals nicht, als diese Abweichung
eingefuehrt wurde). Warum der cstring W nicht auf "/" endet, ist eine
zweite Abweichung, es ist halt schon immer so gewesen.

Fazit ist, dass man Programm- und Datenverzeichnis tunlichst nie als
Wurzelverzeichnis eines (gemappten) Laufwerks nehmen sollte, sofern
man darauf angewiesen ist, daran Verzeichnisnamen anzuhaengen, um
Unterverzeichnisse zu spezifizieren. Denn die hier fuer saubere
Verarbeitung strenggenommen erforderliche Extra-Logik ist laestig und
- - im Fall von .bat-Dateien - in der zur Verfuegung stehenden Sprache
nicht realisierbar.

viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFCxrQ7ENVh3bB0lwMRAgfTAKCZOb2M3fFHVU0MY/PBxS7yqEa6TACgu/lx
P+l8o5I3LXQqervacq4tGM4=
=ZCar
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro