Jedes Programm benutzt Funktionen, die sich mit Pfaden, Dateien, Laufwerken und der Dateiauswahlbox beschÀftigten. Diese Funktionen und ein paar allgemeine Dinge zum Thema Dateien und Pfade sollen im Rahmen dieses Beitrags erörtert werden.
Was ist ĂŒberhaupt ein Pfad? GenĂŒgt es nicht, wenn eine Datei einfach einen bestimmten Namen hat? Nun, in Ă€lteren Betriebssystemen genĂŒgte tatsĂ€chlich ein einfacher Name. Es gab noch kein hierachisch aufgebautes Dateisystem, weil in den meisten FĂ€llen gar keine Notwendigkeit vorhanden war. Die Zahl der Dateien, die auf einem Medium gemeinsam Platz fanden, war einfach zu gering. Selbst bei einer gut gefĂŒllten Diskette war immer noch der Ăberblick gewahrt. Mit wachsender KapazitĂ€t von Disketten und auch Festplatten war jedoch ein neues Dateisystem unumgĂ€nglich. Die entscheidende Neuerung war, daĂ nicht mehr nur ein Verzeichnis fĂŒr alle Dateien auf einem Medium zustĂ€ndig war, sondern mehrere. Man schuf ein hierarchisches Verzeichnissystem: Das Hauptverzeichnis oder auch Wurzel- Verzeichnis (engl. Rootdirectory) konnte nun neben den ânormalenâ Dateien auch selbst wieder Verzeichnisse, sogenannte Unterverzeichnisse, enthalten. Diese Verzeichnisse enthalten ihrerseits Dateien und möglicherweise weitere Unterverzeichnisse.
Man kann sich das vorstellen wie einen Aktenschrank, der viele, verschieden beschriftete Schubladen hat. In jeder Schublade befinden sich eine Reihe von Sammelordnern, die wiederum einzelne Akten enthalten. Auf diese Weise kann man die Ordnung erhöhen und leichter die Ăbersicht behalten. Allerdings sind zum Auffinden einer bestimmten Akte auch mehr Informationen notwendig. Der Name allein genĂŒgt oft nicht mehr, wenn man nicht endlos herumsuchen will. âNimm aus der Schublade âSoftwareâ die Mappe âOMIKRONâ und bring mir den Beleg â03-1801â so z.B. könnte eine âZugriffsanweisungâ aussehen, um schnell an eine bestimmte Sache zu gelangen. Diese âWegbeschreibungâ, die genau vorgibt, wie man an die gesuchte Sache gelangt, ist die genaue Analogie eines Pfades in unserem Dateisystem. Man kann sich ein hierarchisches Verzeichnissystem auch wie einen Baum vorstellen. Unten befindet sich das Wurzelverzeichnis und darĂŒber als erste Verzweigungen die in ihm enthaltenen Unterverzeichnisse. Enthalten diese weitere Verzeichnisse, so werden sie wieder eine Etage höher angeordnet usw. Ein Pfad beschreibt nun genau den Weg, den man, ausgehend von der Wurzel, gehen muĂ, um ein bestimmtes Ziel zu erreichen. Man notiert den Pfad auf eine ganz bestimmte Weise: Zuerst kommt der Laufwerksbuchstabe (âAâ-âPâ), gefolgt von einem Doppelpunkt. Danach werden nun die Namen der einzelnen Verzeichnisse aufgezĂ€hlt, die von unten nach oben im Verzeichnisbaum durchlaufen werden. Zum SchluĂ wird der eigentliche Dateiname angefĂŒgt. Die einzelnen Verzeichnisnamen und auch der Dateiname werden untereinander mit einem RĂŒckwĂ€rtsschrĂ€gstrich (engl. Backslash) âV abgetrennt. Der vollstĂ€ndige Pfad mĂŒĂte fĂŒr das obige Beispiel lauten: âA:\SOFTWARE\OMIKRON\03-1801". Das Laufwerk wurde willkĂŒrlich zu âAâ gewĂ€hlt. Damit nun ein solches Dateisystem möglichst effizient genutzt werden kann, sollten alle Programme es auch benutzen und berĂŒcksichtigen. Das beste Dateisystem nĂŒtzt nĂ€mlich nichts, wenn das Accessory XY seine Konfigurationsdatei immer auf Laufwerk C im Wurzelverzeichnis erwartet. Andererseits ist es natĂŒrlich auch recht umstĂ€ndlich, immer den gesamten Zugriffspfad angeben zu mĂŒssen, bevor irgendein Programm an bestimmte Daten gelangt. Hier sind deshalb einige hilfreiche Funktionen im Betriebssystem vorgesehen, die den Umgang mit Pfaden sehr erleichtern. ZunĂ€chst ist hier der Standardpfad zu nennen. Das Betriebssystem verwaltet fĂŒr jedes Laufwerk einen Standardpfad, der es erlaubt, die Pfadangabe entsprechend zu verkĂŒrzen. Zusammen mit dem Standardlaufwerk ist sogar wieder der Dateiname alleine ausreichend. Wenn also nichts anderes angegeben ist als nur der Dateiname, so sieht das Betriebssystem automatisch auf dem Standardlaufwerk unter dem Standardpfad nach, ob die gewĂŒnschte Datei dort existiert. Zwischen den beiden Extremen vollstĂ€ndiger Pfadname und alleiniger Dateiname sind beliebige AbkĂŒrzungen möglich. Man kann z.B. die Laufwerksbezeichnung weglassen: â\SOFTWARE\OMIKRON\03-1801â. In diesem Fall wird automatisch das Standardlaufwerk ergĂ€nzt. Genauso ist es denkbar, den Pfad wegzulassen, also etwa âC:03-1801 â. Jetzt wird der Standardpfad von Laufwerk C automatisch eingefĂŒgt. Diese Schreibweise ist sorgfĂ€ltig zu unterscheiden von âC:\03-1801â. Hier wird nĂ€mlich durch den Backslash zum Ausdruck gebracht, daĂ es sich um das Wurzelverzeichnis von Laufwerk C handelt. Der Pfad fehlt hier also nicht etwa, sondern er besteht nur aus dem einen Zeichen âV. Eine weitere Möglichkeit ist die Angabe eines relativen Pfades. Nehmen wir an, der Standardpfad von Laufwerk C sei â\SOFTWARE\â, dann könnte man obigen Pfad auch âC:OMIKRON\03-1801â schreiben. Wie Sie sehen, fehlt wieder der Backslash zu Beginn der Pfadangabe. Dies veranlaĂt das Betriebssystem wiederum, den Standardpfad nach dem Doppelpunkt einzufĂŒgen, um so einen vollstĂ€ndigen Pfad zu erzeugen. Die Bezeichnung ârelativâ rĂŒhrt daher, daĂ die Pfadangabe sich hier auf den Standardpfad bezieht und ohne ihn unvollstĂ€ndig ist. Bei relativen Pfadangaben ist noch eine spezielle weitere Schreibweise vorgesehen, die sonst nicht verwendet wird: Ein Verzeichnis mit Namen meint jeweils das ĂŒbergeordnete Verzeichnis. Die Pfadangabe C:..\TES~DPROBE.DAT geht vom Standardverzeichnis des Laufwerks C aus ein Verzeichnis zurĂŒck (in das sogenannte Vaterverzeichnis) und dort dann in das Verzeichnis âTESTâ. Diese letzte Art der Pfadangabe ist aber selten sinnvoll einsetzbar. Wichtig zu merken sind vor allem vier FĂ€lle:
-
nur der Dateiname: EinfĂŒgen von Standardpfad und Standardlaufwerk
-
Laufwerk und Dateiname: EinfĂŒgen des Standardpfades des Laufwerks
-
relativer Pfad und Dateiname: EinfĂŒgen des Standardpfades zwischen Laufwerk und relativem Pfad
-
vollstĂ€ndiger Pfad und Dateiname: dem ist nichts hinzuzufĂŒgen.
Wie nun diese Pfade vom BASIC aus in den Griff zu bekommen sind, ist in Listing 1 zu erkennen.
'(c)1932 by MAXON-Computer
'
DEF FN Get_Path$' liefert Standardpfadnamen vom Standardlaufwerk
LOCAL Path$, Drive%L, Adr%L
GEMDOS (Drive%L, $19)
Path$= CHR§(0)*66
Adr%L= LPEEK ( VARPTR(Path$)) + LPEEK ( SEGPTR + 28)' Stringadresse
GEMDOS (, $47, L Adr%L,Drive%L+1)
Path$= CHR$ (Drive%L+65) + ":"+ LEFT$(Path$, INSTR(Path$,CHR$(0))-1)+"\"
RETURN Path$
'
DEF FN Get_Path$(Drive$) ' liefert den Standardpfadnamen von Laufwerk
LOCAL Path$,Drive%L,Adr%L
Drive%L= ASC( UPPER$(Drive$)) - ASC("A")'Nummer des Laufwerks
Path$= CHR$(0)*66
Adr%L= LPEEK ( VARPTR (Path$) ) + LPEEK ( SEGPTR + 28)'Stringadresse
GEMDOS (, $47, L Adr%L,Drive%L+1)
Path$= CHR$(Drive%L+65)+" : "+ LEFTS(Path$, INSTR(Path$,CHR$(0))-1)+"\"
RETURN Path$
'
DEF PROC Set_Path(Path$)' setzt den Standardpfad des LW
LOCAL Adr%L, Drive%L, Drive2%L
GEMDOS Drive%L,$19' altes Standard LW merken
Drive2%L= ASC( UPPER$(Path$))- ASC("A")'Nummer des Laufwerks
GEMDOS ,$E, Drive2%L
Path$=Path$+ CHR$(0)' Nullzeichen als Endekennung anhÀngen
Adr%L= LPEEK( VARPTR(Path$))+ LPEEK( SEGPTR+ 28)'Stringadresse
GEMDOS , $3B, L Adr%L
GEMDOS , $E,Drive%L
RETURN
'
DEF PROC Set_Drive(Drive$)' setzt das StandardLW
LOCAL Drive%L
Drive%L= ASC ( UPPER$(Drive$) ) - ASC("A")'Nummer des Laufwerks
GEMDOS (, $E, Drive%L)
RETURN
'
DEF PROC Set_Drive_And_Path(Path$)
CHDIR Path$
RETURN
Listing 1.
Wenn man sich nun aber mit allen Aktionen nicht auf ein bestimmtes Laufwerk oder einen bestimmten Pfad beschrĂ€nken will, so steht mit der sogenannten Dateiauswahlbox eine weitere, Ă€uĂerst nĂŒtzliche Betriebssystemfunktion zur VerfĂŒgung. Sie erlaubt es, den Pfad und das Laufwerk beliebig zu wechseln und den Dateinamen einfach aus einer Liste zu ĂŒbernehmen. Die Verwendung dieser Funktion garantiert also volle UnterstĂŒtzung des hierarchischen Dateisystems. Sie sollte deshalb bei jeder Dateifunktion, die eine Benutzerauswahl erfordert, aufgerufen werden. Wie diese Funktion in OMIKRON.Basic aussieht und was zu beachten ist, zeigt das Listing 2 (diese Funktionen sind ĂŒbrigens alle bereits komplett in der EasyGEM-Library enthalten):
Wie aus dem Listing zu ersehen ist, ruft man die Dateiauswahlbox sinnvollerweise mit dem Standardpfad des Standardlaufwerks auf. Dieser Pfad ist nĂ€mlich immer genau auf den Pfad eingestellt, von dem das Programm gestartet wurde. Wichtig ist noch die sogenannte âJokerauswahlâ. Es ist sinnvoll, die in der Dateiauswahlbox dargestellte Liste von Dateinamen möglichst kurz zu halten und bestimmte âDateitypenâ von vorneherein auszuklammern. Zu diesem Zweck trifft man eine Auswahl mit Hilfe von sogenannten âJokerzeichenâ. Das erste Jokerzeichen steht stellvertretend fĂŒr beliebig viele Zeichen, das zweite â?â steht fĂŒr genau ein Zeichen. Die beiden Teile des Dateinamens - Name und Erweiterung - werden dabei getrennt behandelt. So paĂt die Auswahl â*.BASâ auf alle Dateien mit der Erweiterung âBASâ.
paĂt auf alle Dateien, die aus Dateinamen und Erweiterung bestehen. â.AC?â paĂt auf alle Dateien, deren Erweiterung mit âACâ beginnt, also etwaâACCâ oderâACXâ.âA.BAKâ paĂt auf alle Dateien, deren Namen mit âAâ beginnt und die die Erweiterung âBAKâ haben. Wenn man also der Dateiauswahlbox zusĂ€tzlich noch eine sinnvolle Erweiterung ĂŒbergibt, bleibt die Zahl der wĂ€hlbaren Dateien ĂŒbersichtlich. Eventuell sollte man nach der Benutzerauswahl prĂŒfen, ob der Benutzer den Pfad oder das Laufwerk geĂ€ndert hat und den Standardpfad und das Standardlaufwerk entsprechend setzen. So kann vermieden werden, daĂ bei einer neuerlichen Auswahl der Pfad wieder umgestellt werden muĂ. Er bleibt dann immer auf dem zuletzt benutzen Pfad stehen. Es bleibt zu hoffen, daĂ - ausgestattet mit diesen Funktionen -möglichst immer eine vernĂŒnftige Pfadbehandlung vorgesehen wird. So sind selbst kleinere Programme, was Dateiauswahl angeht, einfach und einheitlich bedienbar.
'(C)1992 by MAXON-Computer
'
DEF FN Get_Name$(Path$,Name$) ' entfernt Jokerzeichen am
'Pfadende und hÀngt den Dateinamen an
LOCAL A$=Path$
A$= LEFTS(A$, LEN(A$)-INSTR(MIRROR$(A$), "\")+1)
A$=A$+Name$
RETURN A$
'
DEF FN Exist%L(A$) ' stellt fest, ob eine Datei existiert
LOCAL Exist%L=0'
OPEN "F",16,A$,63
IF NOT EOF(16) THEN Exist%L=-1
CLOSE 16
RETURN Exist%L
'
DEF PROC Fsel(Ext$,R Name$,R Ok%L)
'Ext$ = Index der gewĂŒnschten Auswahl (z.B. *.* oder *.TXT)
'Name$: IN: Namensvorgabe OUT: entgultiger Name mit Pfad
'Ok: OK oder Abbruch
'
LOCAL Path$=FN Get_Path$+Ext$
MOUSEON
FSEL_INPUT (Path$,Name$,Ok%L)
MOUSEOFF
Name$=FN Get_Name$(Path$,Name$)
'
RETURN
Listing 2.