SWSUBST (1G) 22 May 1995 SWSUBST (1G) NAME swsubst - CDS Manipulator SYNOPSIS swsubst { option | kommando } [ argumente ] Erlaubte optionen sind: /h, /?, /#, /!, /a, /f, /k, /t, /_, /d, /x=??, /n und /o=#. Erlaubte kommandos sind: /m, /c, /j, /u, /q, /s, /r, /l und /w. Einer der folgenden Namen ändert die Standardeinstellungen von swsubst: join, subst, mkdir, chdir, query, swap, which, -join, -mkdir, -chdir, -query, -swap, drvlist, mcblist und -which. DESCRIPTION swsubst manipuliert die CDS (Current Directory Structure), nahezu jede Information innerhalb der CDS ist verfügbar. Durch Umbennen oder Kopieren des Programms swsubst.exe nach einem der oben genannten Dateinamen wird automatisch ein Kommando als erste Option eingefügt, z.B. ist "query /a c:+net" gleich "swsubst /q /a c:+net". Lediglich join und subst haben eine zusätzliche Bedeutung, indem swsubst die Restriktionen für Konformität mit den gleichnamigen DOS Standardprogrammen auferlegt werden. Unnötige Optionen oder Optionen ohne Bedeutung für das jeweilige Kommando werden ignoriert. Ein Pfad kann logisch und physisch spezifiert werden. Physische Laufwerksbuchstaben bezeichnen das Laufwerk, welches DOS während des Bootvorgangs dem Buchstaben zuordnete. Logische Laufwerksbuchstaben bezeichnen die Laufwerke so, wie sie normalerweise auf der Kommandozeile verfügbar sind, z.B. nach dem Kommando "SUBST C: E:\FREEDOS" verweist der logische Laufwerksbuchstabe C: auf das physische Laufwerk E:, d.h. wenn der DOS Prompt "C:\>" sagt, ist tatsächlich der originale Pfad "E:\FREEDOS" gemeint. Das originale Laufwerk C: ist nicht länger verfügbar. Um diese Grenze zu durchbrechen, kennzeichnet ein führender Bindestrich einen physischen Pfad. Nach "SUBST D: C:\SOURCE" ziegt das logisch Laufwerk D: nach dem physischen Pfad "E:\FREEDOS\SOURCE", während nach "SWSUBST D: -C:\SOURCE" das Laufwerk D: nach "C:\SOURCE" zeigt. Achtung: Ist ein physischer Pfad nicht vollständig angegeben, wird er bzgl. des aktuellen logischen Pfads vervollständigt. Die Laufwerksspezifikation ist ebenfalls erweitert: An Stellen, die lediglich eine Laufwerksspezifikation erwarten, kann ebenso ein einzelner Buchstabe, wie ein relativer oder vollständiger Pfad stehen. Desweiteren ist es möglich ein Laufwerk zu spezifizieren, -1- SWSUBST (1G) 22 May 1995 SWSUBST (1G) indem nach dem Namen des Treibers oder der Volumenkennzeichnung gesucht wird. Treibernamen sind mittels ":*:" verfügbar, wobei "*" für den maximal 8-stelligen Namen steht. Da ein und derselbe Treiber mehrere Laufwerke verwalten kann, darf mittels ":#:*:" dem Namen eine Zahl vorangestellt werden. Die Nummerierung beginnt bei Null. Achtung: Nicht alle Treiber haben einen Namen! Die Suche über Volumenkennzeichen wird mittels "::*:" bzw. ":-:*:" aktiviert, wobei "*" für das gesuchte Kennzeichen steht. Der optionale Bindestrich weist swsubst an, während der Suche bestehende SUBST- und JOIN-Beziehungen zu lösen. Die Suche beginnt mit Laufwerk A:. Nicht reagierende Laufwerke werden ignoriert. Die Namen werden ohne Beachtung der Groß- und Kleinschreibung verglichen. Desweiteren muß der tatsächliche Name lediglich mit der angegebenden Zeichenkette beginnen. Bspw.: ":1:stac:\dos" entspricht dem Pfad "\DOS" auf auf dem zweiten Laufwerk, dessen Treibername mit "STAC" beginnt. "-:-:hd_c:\\foo\bar" entspricht dem physischen Pfad "\FOO\BAR" auf dem Laufwerk, dessen Kennzeichen mit "HD_C" beginnt. Merke: Der Bindestrich innerhalb der Doppelpunkte ":-:" steht für: "ermittele den physischen Laufwerksbuchstaben", während der Bindestrich vor dem ersten Doppelpunkt für "interpretiere die folgende Laufwerksbezeichnung als physisch" steht. OPTIONS spezielle Namen join: Beschränkt swsubst auf die Möglichkeiten des Standardprogramms JOIN. Siehe die Hilfeseite für JOIN. subst: Beschränkt swsubst auf die Möglichkeiten des Standardprogramms SUBST. Siehe die Hilfeseite für SUBST. mkdir und -mkdir fügt das /m Kommando ein. chdir und -chdir fügt das /c Kommando ein. query and -query fügt das /q Kommando ein. swap und -swap fügt das /s Kommando ein. which und -which fügt das /w Kommando ein. drvlist fügt das /r Kommando ein. mcblist fügt das /l Kommando ein. -join fügt das /j Kommando ein. Jeder andere Name verwendet das /u Kommando. /? und /h Zeigt einen kleinen Hilfebildschirm an. /# Nach der CDS Tabelle wird die Statistik der geJOINten Laufwerke ausgegeben. Es werden zwei Zahlen ausgegeben, die eine wird aus der CDS Tabelle berechnet, die andere wird aus einem internen DOS Datenbereich gelesen. Sollten sich beide voneinander unterscheiden, kann es sein, daß das System nicht korrekt arbeitet. Wird diese Option ein zweites Mal angegeben, wird der Effekt der vorherigen und von /! aufgehoben. -2- SWSUBST (1G) 22 May 1995 SWSUBST (1G) /! Diese Option wirkt wie /#. Zusätzlich wird der interne Datenbereich abgeglichen, falls sich beide Zahlen voneinander unterscheiden. Wird diese Option ein zweites Mal angegeben, wird die zweite ignoriert. /a Nachdem das Kommando fehlerfrei abgearbeitet wurde, wird die CDS Tabelle ausgegeben. Falls das Kommando selbst die Ausgabe der CDS aktiviert, wird der Stand dieser Option ignoriert. Falls diese Option aktiv ist, werden auch nicht benutzte Einträge ausgegeben. Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf. /f Innerhalb der Treiber existiert ein ungenutzter Bereich, worin der Treibername gespeichert werden kann. Normalerweise nutzt swsubst den Anfang dieses Bereichs, bis ein nicht druckbares Zeichen gefunden wird. Ist diese Option angegeben, wird der gesamte Bereich benutzt und nicht druckbare Zeichen hexadezimal angegeben. Hierfür werden diese Zeichen durch \x?? dargestellt, wobei ?? für zwei hexadezimale Ziffern steht. Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf. /_ Normalerweiser wird lediglich eine Untermenge der 16 verfügbaren Flags ausgegeben. Mit dieser Option wird innerhalb der CDS Tabelle eine kleine Übersicht verfügbar gemacht, welche alle Flags anzeigt. Die Flags mit Namen: Netzwerk, Physisch, geJOINt, geSUBSTet und Hidden werden mit ihrem Anfangsbuchstaben gekennzeichnet, wenn sie gesetzt sind; alle anderen mit einem Plus. Ist das jeweilige Flag nicht gesetzt, wird es mit einem Bindestrich gekennzeichnet. Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf. /k Die Angabe dieser Option weist swsubst an, Pfade falls nötig anzulegen, z.B. "swsubst /k f: c:\\foo\bar" legt den Pfad "\FOO\BAR" auf dem Laufwerk C: an. Hierbei ist es unerheblich, ob "C:\FOO" oder "C:\FOO\BAR" bereits existiert. Achtung: Dies ist standardmäßig NICHT eingestellt! Eine zweite Angabe der Option hebt den Effekt der vorherigen sowie von /t wieder auf. /t Diese Option weist swsubst an, nachzusehen, ob die benötigten Pfade existieren. Falls nicht, wird das Kommando abgebrochen. Eine zweite Angabe der Option hebt den Effekt der vorherigen sowie von /k wieder auf. /d Das ist keine wirkliche Option, sondern entspricht bei den Kommandos /j und /u dem /d als zweites Argument. Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf. /o=# Diese Option dient ebenfalls nur den Kommandos /u und /j -3- SWSUBST (1G) 22 May 1995 SWSUBST (1G) und überschreibt den standardmäßig aus dem Pfad gewonnenen Backslashoffset. Achtung! Mit Vorsicht zu verwenden! Eine zweite Angabe der Option überschreibt eine vorherige. Die Zahl # muß sich im Bereich von 0..66 bewegen und darf in C-Notation angegeben werden, d.h.: beginnt die Zahl entweder mit "0x" oder "0X", wird der Rest als hexadezimal angesehen, mit "0" als oktal, ansonsten als dezimal. Ist # Null, wird der Effekt aufgehoben und der Backslashoffset aus dem Pfad hergeleitet. Diese Option wird bei Netzwerkpfaden benötigt, welche nicht mit DOS-Pfaden konform sind. /x=?? Diese Option schließt die angegebenen Laufwerke während der Suche nach einem Volumekennzeichen über die erweiterte "::*:" Laufwerksspezifikation aus. Jede Option /x=?? überschreibt eine vorherige, /x= nimmt alle Laufwerke in den Suchprozeß auf. /m Dieses Kommando akzeptiert eine beliebige Zahl von Argumenten, welche alle als Pfadspezifikationen angesehen werden. Sie werden einschließlich des vollständigen Pfades angelegt. /c Diese Kommando akzeptiert genau ein Argument, welches mit Kommando /m angelegt wird. Anschließend wird in dieses Verzeichnis gewechselt, dabei gegebenenfalls auch das aktuelle Laufwerk gewechselt. /j Dieses Kommando entspricht JOIN ohne Restriktionen. Es gibt zwei Formate: 1) lw ( /d | - ) welches jede SUBST- bzw. JOIN-Beziehung des logischen Laufwerks lw löst. 2) lw1 [-]lw2:pfad welches ebenfalls eine SUBST- bzw. JOIN-Beziehung des logischen Laufwerks lw1 löst und anschließend das Laufwerk lw1 in den Pfad pfad auf Laufwerk lw2 einfügt. Logische Pfade werden über den DOS Ruf truename in physische transformiert. Physische Pfade werden in Großbuchstaben umgewandelt und vervollständigt. Um dies zu verhindern, muß ein zweiter Bindestrich vorangestellt werden. Merke: Pfade, welche mit zwei Backslashes "\\\\" beginnen, gelten als Netzwerkpfade. Ihnen wird automatisch ein Bindestrich vorangestellt. Wenn DOS einen Pfad anzeigt, können am Beginn einige Zeichen ausgelassen werden. Dieses Verhalten wird über den Backslashoffset geregelt. Da z.B. für Netzwerkpfade dieser Offset nicht aus der Pfadangabe ersichtlich ist, kann er mittels der Option /o manuell gesetzt werden. /u Entspricht dem /j Kommando, außer daß das Laufwerk nicht geJOINt, sondern substituiert wird. /q Dieses Kommando testet die Laufwerksflags. Die Syntax ist analog dem Kommando setze Laufwerksflags, lediglich der Modus '=' und die Flags "ON" und "OFF" werden nicht unterstützt. Das Ergebnis wird über den ERRORLEVEL von swsubst dem rufenden Programm mitgeteilt. -4- SWSUBST (1G) 22 May 1995 SWSUBST (1G) Ein ERRORLEVEL von Null besagt, daß die Flags entsprechend des Kommandos gesetzt sind. Ein Wert größer als Null kennzeichnen einen Fehler. /r Dieses Kommando erlaubt die Gerätetreiberliste auszugeben und zu durchsuchen. Es erlaubt maximal ein Argument. Falls das Argument fehlt oder entweder '+' oder '-' ist, wird die Kette wie folgt ausgegeben: NUL CON <> ANSI MSCD001 <> SGCDU EMMXXXX0 <> EMM386 CON AUX PRN CLOCK$ COM1 LPT1 LPT2 Die Namen links vom "<< >>" sind die Treibernamen, das Zeichen innerhalb der "<< >>" ist der MCB-Typ (welcher ab DOS Version 4 verfügbar ist) und der Name rechts vom "<< >>" sind die Dateinamen des jeweiligen Treibers. Letztere sind ein Zugeständnis der Routine, welche den Treiber lud, deshalb können sie fehlen. Das Suchen wird aktiviert, wenn das zusätzliche Argument weder '+' noch '-' ist. Falls das erste Zeichen ein '+' ist, werden auch die Namen rechts vom "<< >>" zur Suche mit herangezogen. In den Namensvergleich fließt ein führendes '+' bzw. '-' nicht mit ein. Falls ein passender Eintrag gefunden wurde, wird der ERRORLEVEL auf Null gesetzt, ansonsten auf einen Wert größer als Null. /l Dieses Kommando erlaubt die Liste der MCBs (Speicherkontrollblöcke) auszugeben und zu durchsuchen. Es erlaubt maximal ein Argument. Falls das Argument fehlt oder entweder '+' oder '-' ist, wird die Kette wie folgt ausgegeben: 0x0264 M 0x01e4 nam=SD sys:data 0x0265 D 0x0048 nam=HIMEM drv=XMSXXXX0 sys:device_driver 0x02ae D 0x00c3 nam=EMM386 drv=EMMXXXX0 sys:device_driver 0x0372 F 0x0082 nam=ilegiert sys:FILES 0x03f5 X 0x0005 sys:FCBS 0x03fb B 0x0020 sys:BUFFERS 0x041c L 0x002c sys:LASTDRIVE 0x041d A 0x0000 own#0x5c3a 0x0449 M 0x0004 nam=SC sys:code 0x044e M 0x0003 own=COMMAND 0x0452 M 0x00bc nam=COMMAND 0x050f M 0x0040 nam=arameter env=COMMAND 0x0550 M 0x001d env=SWSUBST 0x056e M 0x020f nam=sgcdu 0x077e M 0x03de nam=MSCDEX 0x0b5d M 0x1aa3 nam=SWSUBST -5- SWSUBST (1G) 22 May 1995 SWSUBST (1G) 0x2601 Z 0x79fd sys:free sys:end_of_chain 0x9fff M 0x1159 nam=SC sys:code 0xb159 M 0x0107 nam=SD sys:data 0xb15a D 0x0106 nam=ANSI drv=CON sys:device_driver 0xb261 M 0x0003 sys:free 0xb265 M 0x0598 sys:free 0xb7fe M 0x2002 nam=SC sys:code 0xb7ff M 0x2000 nam=SM sys:memory 0xd801 M 0x07d5 nam=SMARTDRV 0xdfd7 Z 0x1028 sys:free sys:end_of_chain Die Elemente haben folgende Bedeutung, von links nach rechts: + Die Adresse des MCB, hexadezimal und immer mit den führenden "0x". + Der Typ des MCB. Er kann ein Leerzeichen sein. + Die Größe des verwalteten Speichers in Paragraphen, ebenfalls hexadezimal und mit den führenden "0x". Diese Zahl wird nur ausgegeben, wenn das Argument "+" angegeben wurde. + Der Versuch, die Verwendung des MCB zu erraten. Er kann eine beliebige Kombination folgender Informationen sein: ++ nam=???. Der Name des in den Speicherbereich geladenen Programms. ++ env=???. Der Name des Programms, zu welchem dieser MCB als Umgebungsbereich gehört. ++ drv=???. Der Name des Treiber, welcher den MCB belegt. ++ own=???. Der Name des Programms, zu welchem der MCB gehört. ++ sys:???. Kennzeichnet einen vom System verwalteten Speicherbereich. Die "???" stehen für den Datentyp, welcher darin abgelegt ist. Eine besondere Bedeutung hat "sys:end_of_chain" bzw. "sys:Kettenende", welches das Ende einer MCB Kette markiert. Die oben genannten Namen müssen nicht in den MCB abgelegt sein. Deshalb kann an Stellen, an denen ein Name stehen muß, das Ausweichformat "*#0x????" verwendet werden, wobei "*" für den Informationstyp (die ersten drei Buchstaben) und "????" für die stets vierstellige Adresse des MCB des Eigentümers stehen. Die Ausgabe ist für die Weiterverarbeitung durch ein anderes Programm gedacht, deshalb wird pro Zeile die Informationen eines MCB und die Elemente ohne zusätzliche Lerrzeichen ausgegeben. Da swsubst versucht, innerhalb eines MCB wiederum eine MCB-Kette zu identifizieren, können nutzlose Einträge entstehen (s. 0x041d). Im obigen Beispiel sind zwei MCB mit "sys:end_of_chain" markiert. Dieses Verhalten basiert auf der Art und Weise, wie moderne DOS Versionen den Speicher verwalten, indem jeweils eine Kette im konventionellen und eine im hohen Speicherbereich liegen. Das Suchen wird aktiviert, wenn das zusätzliche Argument weder '+' noch '-' ist. Für den Vergleich wird die Groß- und Kleinschreibung ignoriert, und, außer wenn das erste Zeichen des Arguments ein '+' ist, muß der aus dem MCB gelesene Name (in obiger Liste die Namen hinter dem "nam=" Element) lediglich mit dem Argument beginnen. In den -6- SWSUBST (1G) 22 May 1995 SWSUBST (1G) Namensvergleich fließt ein führendes '+' bzw. '-' nicht mit ein. Falls ein passender Eintrag gefunden wurde, wird der ERRORLEVEL auf Null gesetzt, ansonsten auf einen Wert größer als Null. /s Dieses Kommando benötigt genau zwei Argumente, welche als Laufwerksspezifikationen interpretiert werden. Beide werden einfach gegeneinander ausgetauscht. /n Dieses Kommando ist eng mit /s verwandt. Anstatt jedoch die Einträge in der CDS-Tabelle auszutauschen, werden die Unitnummern des Gerätetreibers ausgetauscht. Deshalb müssen beide Laufwerke vom selben Gerätetreiber verwaltet werden. Das ist aus unbekanntem Grund der einzige Weg, die Diskettenlaufwerke miteinander zu vertauschen. Wird das Kommando ohne weitere Argumente aufgerufen, werden beide Diskettenlaufwerke vertauscht; ansonsten die angegebenen. Achtung: Sie sollten dieses Kommando nur auf Diskettenlaufwerke anwenden. Dieser Austausch wird weder durch die Kommandos: -, -- und /d noch durch direkte Manipulation der Laufwerksflags, z.B. mit "X:=OFF" oder "X:=ON", zurückgesetzt. Sie müssen stattdessen erneut getauscht, oder der Rechner neu gestartet werden. /w Dieses Kommando benötigt genau ein Argument, welches eine Laufwerksspezifikation darstellt. Der Buchstabe dieses Laufwerks wird als ERRORLEVEL zurückgegeben. Dabei kennzeichnet ein ERRORLEVEL zwischen 65 (ASCII 'A') und 90 (ASCII 'Z') den Laufwerksbuchstaben, eine Null, daß das Laufwerk nicht existiert, und jeder andere Wert einen Fehler. ohne Kommando In diesem Fall entscheiden die folgenden Argumente, welches Kommando zur Ausführung gebracht wird: ohne ein weiteres Argument Wird die CDS Tabelle ausgegeben: H 0000:0000 NET .... PHYS ..... HIDDEN \\H.\A."\BC4 ==>.MSCD001 .<== _NP------H-------_ Nummer geJOINter Laufwerke per CDS 0 per Flag: 0 => scheint OK Zeile 1 von links nach rechts: + Logischer Laufwerksbuchstabe + Adresse des DPB + NETWORKED (Netzwerk) Flag gesetzt + JOINED Flag nicht gesetzt + PHYSICAL (lokal) Flag gesetzt + SUBST Flag nicht gesetzt + HIDDEN (versteckt) Flag gesetzt + Der physische Pfad. Das Anführungszeichen markiert den Backslashoffset. Alle Zeichen links davon sind nicht sichtbar. Falls das Laufwerk aussieht, als sei die Unitnummer verändert, z.B. mithilfe des /n Kommandos, wird " => X:" angehangen, wobei 'X' für das wahrscheinlichste -7- SWSUBST (1G) 22 May 1995 SWSUBST (1G) Laufwerk steht, worauf zugegriffen wird. Zeile 2: + Treibername. Die "==>..<==" sind NICHT Bestandteil des Namens. + Übersicht aller Flags. Erzeugt durch die /_ Option. Die umgebenden Unterstriche haben keine Bedeutung. Zeile 3: Die Statistik geJOINter Laufwerke: Beide Zahlen sind gleich, so daß kein Fehler vorliegen sollte. Falls die /a Option nicht aktiv ist, werden nur benutzte Einträge und der letzte verfügbare ausgegeben. entweder - oder -- - löst alle SUBST- und JOIN-Verbindungen. Das wird über das Kommando "/u lw: /d" für jedes in Frage kommende Laufwerk erreicht. -- führt dieses Kommando für alle Nicht-Netzlaufwerke aus. setze Laufwerksflags Dieses Kommando benötigt genau ein Argument in folgendem Format: lw:{(-+=)flag}, wobei der Modus - bedeutet: zurücksetzen bzw. nicht gesetzt; +: setzen bzw. gesetzt; und =: das Flag setzen und alle anderen zurücksetzen. Folgende Flags sind verfügbar: OFF schaltet das Laufwerk aus, d.h. es ist nicht mehr ansprechbar; ON macht es wieder verfügbar (Das ist NICHT die Umkehrung von OFF, sondern der Versuch die ursprüngliche Bedeutung dieses Eintrags zu erraten. Das ist gleichbedeutend mit dem Kommando "/u lw: /d".); PHYSICAL, JOIN, NETWORK, SUBST und HIDDEN referenzieren das gleichnamige Flag; eine Zahl zwischen 0 und 15 referenzieren das n-te Flag. Alle Flags außer ON können bis auf ein Zeichen abgekürzt werden. ansonsten wird das Kommando /u angenommen. SEE ALSO subst, join. KNOWN BUGS o Ein relativer physischer Pfad wird mit logischen Pfadkomponenten vervollständigt. o Manchmal schlagen Nicht-Standardmanipulationen fehl. Das kann bedeuten, daß das System abstürzt oder lediglich eine harmlose Fehlermeldung, wie 'Kann *.* nicht finden', erscheint. o Ein Laufwerk ON (ein-) zuschalten scheint die Umkehrung für OFF zu sein. Das klappt für lokale Festplatten, manchmal für Laufwerke mit Softwaretreiber, jedoch selten für Netzwerke oder CD-ROMs. o Wirkt nur auf MS-DOS kompatiblen Betriebssystemen, jedoch wird nicht überprüft, ob tatsächlich eines vorliegt. o swsubst prüft einige Fehlerquellen ab, jedoch können auch in -8- SWSUBST (1G) 22 May 1995 SWSUBST (1G) einigen Fällen korrekte Einstellungen in anderen Fällen das System abstürzen lassen. o Viele Kommandos, z.B. /s, /u und /j, machen es Microsoft Windows 3+ unmöglich auf den betroffenen Laufwerken den 32-Bit-Zugriff anzuwenden bzw. dort eine permanente Auslagerungsdatei anzulegen. EXAMPLES swsubst /w ::HD_e: Sucht nach einem Laufwerk, dessen Kennzeichn mit "HD_E" beginnt und gerade über logische Laufwerksbuchstaben ansprechbar ist. Das Ergebnis kann wie folgt getestet werden: swsubst /w ::hd_e: if errorlevel 91 goto Fehler if errorlevel 90 echo Laufwerk Z: if errorlevel 89 echo Laufwerk Y: if errorlevel 65 echo Laufwerk A: if errorlevel 1 goto Fehler if not errorlevel 1 echo Kein Laufwerk HD_E gefunden! Unter 4DOS auch mit: iff %? .LE. 90 .AND. %? .GE. 65 then echo Laufwerk %char[%?] elseiff errorlevel 1 then echo Fehler else echo Es gibt kein Laufwerk mit Kennzeichnug HD_E endiff swsubst /s e ::HD_e: Tauscht das logische Laufwerk E: mit dem Laufwerk aus, welches das Kennzeichen "HD_E" besitzt. Damit kann sichergestellt werden, daß das Laufwerk mit dem Kennzeichen "HD_E" stets über E: verfügbar ist. Beachten Sie auch den Paragraph Known Bugs. CONTRIBUTERS Steffen Kaiser Mittelstraße 112/B115 53757 Sankt Augustin - Menden Deutschland - Germany e-mail: Steffen.Kaiser@FH-Rhein-Sieg.DE -9-