home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1993-10-23 | 11.6 KB | 209 lines |
- DEFINITION MODULE dir;
-
- (*****************************************************************************)
- (* Funktionen, die Verzeichnisse bearbeiten. *)
- (* *)
- (* Ein Fehler ist immer dann aufgetreten, wenn bei Funktionen mit Typ INTEGER*)
- (* ein negativer Wert zurueckgegeben wird. *)
- (* Die genaue Fehlerursache kann bei Bedarf ueber "err.errno" und die ent- *)
- (* sprechenden Konstanten ermittelt werden. Die Funktionen veraendern "errno"*)
- (* nur dann, wenn ein Fehler aufgetreten ist, bei erfolgreicher Ausfuehrung *)
- (* wird "errno" nicht veraendert. *)
- (* *)
- (* "GEMDOS": *)
- (* Die Eigenschaften der Funktionen unter dem ``blanken'' "GEMDOS" sind z.T. *)
- (* stark eingeschraenkt; unter dem Stichwort "GEMDOS" ist deswegen immer *)
- (* angegeben, in wieweit die Funktion emuliert werden kann. Ist MiNT-Unter- *)
- (* stuetzung angegeben, so ist unter der Betriebssystemerweiterung "MiNT" *)
- (* eine bessere Unterstuetzung der Funktionen zu erwarten; wie weit diese *)
- (* allerdings geht, haengt vom verwendeten Dateisystem ab. *)
- (* *)
- (* Intern sind alle Pfadangaben auf die Laenge von 'PathName' begrenzt. Ist *)
- (* ein Pfad laenger (evtl. nach der Umwandlung vom "*IX"-Stil in den "DOS"- *)
- (* Stil), wird ein Fehler gemeldet, und 'errno' auf 'ENAMETOOLONG' gesetzt. *)
- (* --------------------------------------------------------------------------*)
- (* 12-Feb-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- FROM SYSTEM IMPORT
- (* TYPE *) ADDRESS;
-
- FROM pSTRING IMPORT
- (* TYPE *) StrPtr, StrRange;
-
- FROM types IMPORT
- (* TYPE *) FileName;
-
- FROM file IMPORT
- (* TYPE *) modeT;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- TYPE
- DIR = ADDRESS;
-
- DirentPtr = POINTER TO DirentRec;
-
- DirentRec = RECORD
- dName : FileName; (* Bei POSIX hat 'dName' keine Laengenbegrenzung ! *)
- END;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE chdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Setzt das neue aktuelle Verzeichnis auf <dir>, das bei allen relativen |
- | Pfadangaben benutzt wird. |
- --------------------------------------------------------------------------*)
-
- PROCEDURE getcwd ((* EIN/ -- *) buf : StrPtr;
- (* EIN/ -- *) bufsiz : StrRange ): StrPtr;
-
- (*--------------------------------------------------------------------------
- | In <buf>^ wird ein absoluter Pfad des augenblicklichen Arbeitsverzeich- |
- | nisses abgelegt. <bufsiz> bezeichnet den Platz in <buf> fuer Pfad ein- |
- | schliesslich Nullbyte. Der Pfad ist immer mit einem Nullbyte abgeschlos- |
- | sen. Wenn <buf> nicht gross genug ist, wird ein Fehler gemeldet und NULL |
- | als Funktionswert zurueckgeliefert; sonst ist der Funktionswert gleich |
- | <buf>. |
- | |
- | "GEMDOS": Die Laenge des Pfades ist intern auf die Laenge von 'PathName' |
- | begrenzt. |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE mkdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR;
- (* EIN/ -- *) mode : modeT ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Es wird ein neues Verzeichnis mit Namen <dir> und der Zugriffsberechti- |
- | gung <mode> angelegt; die Dateierstellungsmaske wird beruecksichtigt. |
- | |
- | "GEMDOS": Das <mode>-Argument wird ignoriert. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE rmdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Das leere Verzeichnis <dir> wird geloescht. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE link ((* EIN/ -- *) REF old : ARRAY OF CHAR;
- (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Es wird ein neuer Dateieintrag <new> fuer die Datei mit dem Eintrag <old>|
- | angelegt (Hard Link), sodass die entsprechende Datei ueber beide Namen |
- | angesprochen werden kann. <old> und <new> muessen sich auf demselben |
- | Dateisystem befinden. |
- | |
- | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE unlink ((* EIN/ -- *) REF file : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Der Dateieintrag <file> wird geloescht. Wenn keine weiteren Links auf die|
- | entsprechende Datei bestehen, wird die Datei komplett geloescht. Ist die |
- | Datei zur Zeit geoeffnet, wird die Datei erst nach dem Schliessen ge- |
- | loescht. |
- | |
- | "GEMDOS": Da es hier keine Links gibt, wird einfach die Datei geloescht. |
- | Die Datei darf nicht geoeffnet sein. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE rename ((* EIN/ -- *) REF old : ARRAY OF CHAR;
- (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Benennt die Datei oder das Verzeichnis <old> in <new> um. Wenn <new> |
- | existiert, wird es vorher geloescht. <old> und <new> muessen sich auf dem|
- | gleichen Dateisystem befinden. |
- | |
- | "GEMDOS": Verzeichnisse koennen erst ab TOS 1.04 umbenannt werden. |
- | Als Dateisystem fungiert hier ein logisches Laufwerk. |
- | Die Datei darf nicht geoeffnet sein. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE opendir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): DIR;
-
- PROCEDURE readdir ((* EIN/ -- *) dirp : DIR ): DirentPtr;
-
- PROCEDURE rewinddir ((* EIN/ -- *) dirp : DIR );
-
- PROCEDURE closedir ((* EIN/AUS *) VAR dirp : DIR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | "opendir()": |
- | 'oeffnet' das Verzeichnis <dirname>, d.h. trifft die Vorbereitungen |
- | fuer "readdir()". Der Funktionswert ist als Identifikation des Ver- |
- | zeichnisses fuer die anderen Verzeichnis-Prozeduren noetig. Konnte |
- | das Verzeichnis nicht geoeffnet werden, wird NULL zurueckgeliefert. |
- | "readdir()": |
- | Ein Verweis auf den physikalisch naechsten Eintrag des Verzeichnisses|
- | <dirp> wird zurueckgeliefert, oder NULL, falls kein weiterer Eintrag |
- | existiert. |
- | ACHTUNG: Der Verweis bleibt nur solange gueltig, wie kein weiterer |
- | Aufruf von "readdir()" mit dem gleichen <dirp> erfolgt! |
- | "rewinddir()": |
- | Setzt das Verzeichnis <dirp> wieder auf den Anfang zurueck, sodass |
- | ein "readdir()" die physikalisch erste Datei (".") liefert. |
- | "closedir()": |
- | Nach dem Auslesen des Verzeichnisses muss dieses wieder geschlossen |
- | werden. Falls das Schliessen erfalgreich war, wird <dirp> auf NULL |
- | gesetzt. |
- | |
- | "GEMDOS": Es werden alle Dateien ausser dem Diskettennamen geliefert. |
- | Diese Routinen sind anstelle von "Fsfirst/Fsnext" zu benutzen. |
- | ("MiNT"-Unterstuetzung) |
- --------------------------------------------------------------------------*)
-
-
- (* noch nicht POSIX: *)
- PROCEDURE symlink ((* EIN/ -- *) REF old : ARRAY OF CHAR;
- (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Es wird ein symbolischer Dateieintrag <new> fuer die Datei mit dem Datei-|
- | eintrag <old> angelegt (Symbolic Link), sodass die entsprechende Datei |
- | ueber beide Namen angesprochen werden kann. <old> und <new> muessen sich |
- | nicht auf dem gleichen Dateisystem befinden. |
- | |
- | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
- (* noch nicht POSIX: *)
- PROCEDURE readlink ((* EIN/ -- *) REF lname : ARRAY OF CHAR;
- (* EIN/ -- *) buf : StrPtr;
- (* EIN/ -- *) bufsiz : StrRange ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Wenn <lname> der Name eines ``Symbolischen Links'' ist, wird in <buf>^ |
- | der bei "symlink()" angegebene Name der zugehoerigen Zieldatei abgelegt; |
- | Der Name ist immer mit einem Nullbyte abgeschlossen (das ist ein Unter- |
- | schied zu POSIX). |
- | Als Funktionswert wird die Laenge von <buf>^ oder -1 (fuer Fehler) zu- |
- | rueckgegeben. <bufsiz> ist der Platz in <buf>^ einschliesslich Nullbyte. |
- | Es wird KEIN Fehler gemeldet, wenn <buf> nicht gross genug war, den |
- | gesamten Namen aufzunehmen, es wird dann lediglich gekuerzt! Die Laenge |
- | eines symbolischen Links kann lediglich ueber "lstat(lname, st)" und |
- | 'st.stSize' ermittelt werden. |
- | |
- | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
- END dir.
-