home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / m2posx02 / dir.dpp < prev    next >
Encoding:
Modula Definition  |  1993-10-23  |  11.6 KB  |  209 lines

  1. DEFINITION MODULE dir;
  2.  
  3. (*****************************************************************************)
  4. (* Funktionen, die Verzeichnisse bearbeiten.                                 *)
  5. (*                                                                           *)
  6. (* Ein Fehler ist immer dann aufgetreten, wenn bei Funktionen mit Typ INTEGER*)
  7. (* ein negativer Wert zurueckgegeben wird.                                   *)
  8. (* Die genaue Fehlerursache kann bei Bedarf ueber "err.errno" und die ent-   *)
  9. (* sprechenden Konstanten ermittelt werden. Die Funktionen veraendern "errno"*)
  10. (* nur dann, wenn ein Fehler aufgetreten ist, bei erfolgreicher Ausfuehrung  *)
  11. (* wird "errno" nicht veraendert.                                            *)
  12. (*                                                                           *)
  13. (* "GEMDOS":                                                                 *)
  14. (* Die Eigenschaften der Funktionen unter dem ``blanken'' "GEMDOS" sind z.T. *)
  15. (* stark eingeschraenkt; unter dem Stichwort "GEMDOS" ist deswegen immer     *)
  16. (* angegeben, in wieweit die Funktion emuliert werden kann. Ist MiNT-Unter-  *)
  17. (* stuetzung angegeben, so ist unter der Betriebssystemerweiterung "MiNT"    *)
  18. (* eine bessere Unterstuetzung der Funktionen zu erwarten; wie weit diese    *)
  19. (* allerdings geht, haengt vom verwendeten Dateisystem ab.                   *)
  20. (*                                                                           *)
  21. (* Intern sind alle Pfadangaben auf die Laenge von 'PathName' begrenzt. Ist  *)
  22. (* ein Pfad laenger (evtl. nach der Umwandlung vom "*IX"-Stil in den "DOS"-  *)
  23. (* Stil), wird ein Fehler gemeldet, und 'errno' auf 'ENAMETOOLONG' gesetzt.  *)
  24. (* --------------------------------------------------------------------------*)
  25. (* 12-Feb-93, Holger Kleinschmidt                                            *)
  26. (*****************************************************************************)
  27.  
  28. FROM SYSTEM IMPORT
  29. (* TYPE *) ADDRESS;
  30.  
  31. FROM pSTRING IMPORT
  32. (* TYPE *) StrPtr, StrRange;
  33.  
  34. FROM types IMPORT
  35. (* TYPE *) FileName;
  36.  
  37. FROM file IMPORT
  38. (* TYPE *) modeT;
  39.  
  40. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  41.  
  42. TYPE
  43.   DIR = ADDRESS;
  44.  
  45.   DirentPtr = POINTER TO DirentRec;
  46.  
  47.   DirentRec = RECORD
  48.     dName : FileName; (* Bei POSIX hat 'dName' keine Laengenbegrenzung ! *)
  49.   END;
  50.  
  51. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  52.  
  53.  PROCEDURE chdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
  54.  
  55. (*--------------------------------------------------------------------------
  56.  | Setzt das neue aktuelle Verzeichnis auf <dir>, das bei allen relativen   |
  57.  | Pfadangaben benutzt wird.                                                |
  58.   --------------------------------------------------------------------------*)
  59.  
  60.  PROCEDURE getcwd ((* EIN/ -- *) buf    : StrPtr;
  61.                    (* EIN/ -- *) bufsiz : StrRange ): StrPtr;
  62.  
  63. (*--------------------------------------------------------------------------
  64.  | In <buf>^ wird ein absoluter Pfad des augenblicklichen Arbeitsverzeich-  |
  65.  | nisses abgelegt. <bufsiz> bezeichnet den Platz in <buf> fuer Pfad ein-   |
  66.  | schliesslich Nullbyte. Der Pfad ist immer mit einem Nullbyte abgeschlos- |
  67.  | sen. Wenn <buf> nicht gross genug ist, wird ein Fehler gemeldet und NULL |
  68.  | als Funktionswert zurueckgeliefert; sonst ist der Funktionswert gleich   |
  69.  | <buf>.                                                                   |
  70.  |                                                                          |
  71.  | "GEMDOS": Die Laenge des Pfades ist intern auf die Laenge von 'PathName' |
  72.  |           begrenzt.                                                      |
  73.   --------------------------------------------------------------------------*)
  74.  
  75.  
  76.  PROCEDURE mkdir ((* EIN/ -- *) REF dir  : ARRAY OF CHAR;
  77.                   (* EIN/ -- *)     mode : modeT         ): INTEGER;
  78.  
  79. (*--------------------------------------------------------------------------
  80.  | Es wird ein neues Verzeichnis mit Namen <dir> und der Zugriffsberechti-  |
  81.  | gung <mode> angelegt; die Dateierstellungsmaske wird beruecksichtigt.    |
  82.  |                                                                          |
  83.  | "GEMDOS": Das <mode>-Argument wird ignoriert.                            |
  84.  |           ("MiNT"-Unterstuetzung.)                                       |
  85.   --------------------------------------------------------------------------*)
  86.  
  87.  
  88.  PROCEDURE rmdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
  89.  
  90. (*--------------------------------------------------------------------------
  91.  | Das leere Verzeichnis <dir> wird geloescht.                              |
  92.   --------------------------------------------------------------------------*)
  93.  
  94.  
  95.  
  96.  PROCEDURE link ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  97.                  (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  98.  
  99. (*--------------------------------------------------------------------------
  100.  | Es wird ein neuer Dateieintrag <new> fuer die Datei mit dem Eintrag <old>|
  101.  | angelegt (Hard Link), sodass die entsprechende Datei ueber beide Namen   |
  102.  | angesprochen werden kann. <old> und <new> muessen sich auf demselben     |
  103.  | Dateisystem befinden.                                                    |
  104.  |                                                                          |
  105.  | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet.   |
  106.  |           ("MiNT"-Unterstuetzung.)                                       |
  107.   --------------------------------------------------------------------------*)
  108.  
  109.  
  110.  PROCEDURE unlink ((* EIN/ -- *) REF file : ARRAY OF CHAR ): INTEGER;
  111.  
  112. (*--------------------------------------------------------------------------
  113.  | Der Dateieintrag <file> wird geloescht. Wenn keine weiteren Links auf die|
  114.  | entsprechende Datei bestehen, wird die Datei komplett geloescht. Ist die |
  115.  | Datei zur Zeit geoeffnet, wird die Datei erst nach dem Schliessen ge-    |
  116.  | loescht.                                                                 |
  117.  |                                                                          |
  118.  | "GEMDOS": Da es hier keine Links gibt, wird einfach die Datei geloescht. |
  119.  |           Die Datei darf nicht geoeffnet sein.                           |
  120.  |           ("MiNT"-Unterstuetzung.)                                       |
  121.   --------------------------------------------------------------------------*)
  122.  
  123.  
  124.  PROCEDURE rename ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  125.                    (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  126.  
  127. (*--------------------------------------------------------------------------
  128.  | Benennt die Datei oder das Verzeichnis <old> in <new> um. Wenn <new>     |
  129.  | existiert, wird es vorher geloescht. <old> und <new> muessen sich auf dem|
  130.  | gleichen Dateisystem befinden.                                           |
  131.  |                                                                          |
  132.  | "GEMDOS": Verzeichnisse koennen erst ab TOS 1.04 umbenannt werden.       |
  133.  |           Als Dateisystem fungiert hier ein logisches Laufwerk.          |
  134.  |           Die Datei darf nicht geoeffnet sein.                           |
  135.   --------------------------------------------------------------------------*)
  136.  
  137.  
  138.  
  139.  PROCEDURE opendir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): DIR;
  140.  
  141.  PROCEDURE readdir ((* EIN/ -- *) dirp : DIR ): DirentPtr;
  142.  
  143.  PROCEDURE rewinddir ((* EIN/ -- *) dirp : DIR );
  144.  
  145.  PROCEDURE closedir ((* EIN/AUS *) VAR dirp : DIR ): INTEGER;
  146.  
  147. (*--------------------------------------------------------------------------
  148.  | "opendir()":                                                             |
  149.  |     'oeffnet' das Verzeichnis <dirname>, d.h. trifft die Vorbereitungen  |
  150.  |     fuer "readdir()". Der Funktionswert ist als Identifikation des Ver-  |
  151.  |     zeichnisses fuer die anderen Verzeichnis-Prozeduren noetig. Konnte   |
  152.  |     das Verzeichnis nicht geoeffnet werden, wird NULL zurueckgeliefert.  |
  153.  | "readdir()":                                                             |
  154.  |     Ein Verweis auf den physikalisch naechsten Eintrag des Verzeichnisses|
  155.  |     <dirp> wird zurueckgeliefert, oder NULL, falls kein weiterer Eintrag |
  156.  |     existiert.                                                           |
  157.  |     ACHTUNG: Der Verweis bleibt nur solange gueltig, wie kein weiterer   |
  158.  |     Aufruf von "readdir()" mit dem gleichen <dirp> erfolgt!              |
  159.  | "rewinddir()":                                                           |
  160.  |     Setzt das Verzeichnis <dirp> wieder auf den Anfang zurueck, sodass   |
  161.  |     ein "readdir()" die physikalisch erste Datei (".") liefert.          |
  162.  | "closedir()":                                                            |
  163.  |     Nach dem Auslesen des Verzeichnisses muss dieses wieder geschlossen  |
  164.  |     werden. Falls das Schliessen erfalgreich war, wird <dirp> auf NULL   |
  165.  |     gesetzt.                                                             |
  166.  |                                                                          |
  167.  | "GEMDOS": Es werden alle Dateien ausser dem Diskettennamen geliefert.    |
  168.  |           Diese Routinen sind anstelle von "Fsfirst/Fsnext" zu benutzen. |
  169.  |           ("MiNT"-Unterstuetzung)                                        |
  170.   --------------------------------------------------------------------------*)
  171.  
  172.  
  173. (* noch nicht POSIX: *)
  174.  PROCEDURE symlink ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  175.                     (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  176.  
  177. (*--------------------------------------------------------------------------
  178.  | Es wird ein symbolischer Dateieintrag <new> fuer die Datei mit dem Datei-|
  179.  | eintrag <old> angelegt (Symbolic Link), sodass die entsprechende Datei   |
  180.  | ueber beide Namen angesprochen werden kann. <old> und <new> muessen sich |
  181.  | nicht auf dem gleichen Dateisystem befinden.                             |
  182.  |                                                                          |
  183.  | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet.   |
  184.  |           ("MiNT"-Unterstuetzung.)                                       |
  185.   --------------------------------------------------------------------------*)
  186.  
  187. (* noch nicht POSIX: *)
  188.  PROCEDURE readlink ((* EIN/ -- *) REF lname  : ARRAY OF CHAR;
  189.                      (* EIN/ -- *)     buf    : StrPtr;
  190.                      (* EIN/ -- *)     bufsiz : StrRange      ): INTEGER;
  191.  
  192. (*--------------------------------------------------------------------------
  193.  | Wenn <lname> der Name eines ``Symbolischen Links'' ist, wird in <buf>^   |
  194.  | der bei "symlink()" angegebene Name der zugehoerigen Zieldatei abgelegt; |
  195.  | Der Name ist immer mit einem Nullbyte abgeschlossen (das ist ein Unter-  |
  196.  | schied zu POSIX).                                                        |
  197.  | Als Funktionswert wird die Laenge von <buf>^ oder -1 (fuer Fehler) zu-   |
  198.  | rueckgegeben. <bufsiz> ist der Platz in <buf>^ einschliesslich Nullbyte. |
  199.  | Es wird KEIN Fehler gemeldet, wenn <buf> nicht gross genug war, den      |
  200.  | gesamten Namen aufzunehmen, es wird dann lediglich gekuerzt! Die Laenge  |
  201.  | eines symbolischen Links kann lediglich ueber "lstat(lname, st)" und     |
  202.  | 'st.stSize' ermittelt werden.                                            |
  203.  |                                                                          |
  204.  | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet.   |
  205.  |           ("MiNT"-Unterstuetzung.)                                       |
  206.   --------------------------------------------------------------------------*)
  207.  
  208. END dir.
  209.