home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1993-10-23 | 11.1 KB | 224 lines |
- DEFINITION MODULE DosFile;
-
- (*****************************************************************************)
- (* Falls die Environmentvariable "STDERR" nicht existiert, und der Standard- *)
- (* kanal zwei (stdaux) nicht auf eine Datei umgelenkt ist (wird mit *)
- (* "IsDevice()" festgestellt), wird Kanal zwei auf Handle -1 umgelenkt (CON) *)
- (* sodass Kanal zwei wie unter "*IX" als Standardfehlerkanal benutzt werden *)
- (* kann. *)
- (* --------------------------------------------------------------------------*)
- (* 11-Feb-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- FROM types IMPORT
- (* TYPE *) SIGNEDLONG, UNSIGNEDLONG, WORDSET, PathName;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- CONST
- #if GEMDOS
- EXECSUFFIX = "TOS,TTP,PRG,APP,GTP";
- TOSEXT = "TOS,TTP";
- GEMEXT = "PRG,APP,GTP";
- #elif PCDOS (* ?? *)
- EXECSUFFIX = "EXE,COM,APP";
- DOSEXT = "EXE,COM";
- GEMEXT = "APP";
- #endif
-
- TYPE
- #if reverse_set
- FileAttributes = (
- fa15, fa14, fa13, fa12, fa11,
- fa10, fa9, fa8, fa7, fa6, (* --> keine 8-Bit-Menge *)
- faCHANGED,
- faSUBDIR,
- faVOLUME,
- faSYSTEM,
- faHIDDEN,
- faRDONLY
- );
- #else
- FileAttributes = (
- faRDONLY,
- faHIDDEN,
- faSYSTEM,
- faVOLUME,
- faSUBDIR,
- faCHANGED,
- fa6, fa7, fa8, fa9, fa10,
- fa11, fa12, fa13, fa14, fa15 (* --> keine 8-Bit-Menge *)
- );
- #endif /* reverse_set */
-
- FileAttribute = PACKEDSET OF FileAttributes;
-
- CONST
- FINDALL = FileAttribute{faRDONLY, faHIDDEN, faSYSTEM, faSUBDIR, faCHANGED};
-
- TYPE
- DTAPtr = POINTER TO DTA;
-
- DTA = RECORD
- fill : ARRAY [0..19] OF CHAR;
- attr : FileAttribute;
- time : WORDSET;
- date : WORDSET;
- size : UNSIGNEDLONG;
- name : ARRAY [0..13] OF CHAR;
- END;
-
- VAR
- INODE : UNSIGNEDLONG;
- ROOTDIR : CHAR;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE IsExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
-
- PROCEDURE IsGEMExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
- #if GEMDOS
- PROCEDURE IsTOSExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
- #elif PCDOS
- PROCEDURE IsDOSExec ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
- #endif
- (*--------------------------------------------------------------------------
- | Diese Prozeduren stellen anhand der Extension des Dateinamens fest, ob |
- | die Datei ausfuehrbar ist. <path> muss im "GEMDOS"-Format sein. |
- | Falls die Environment-Variablen "SUFFIX" bzw. "GEMEXT"/"TOSEXT" existie- |
- | ren, wird geprueft, ob die Extension mit einer aus der durch Semikolon |
- | oder Komma getrennten Liste der Environment-Variablen uebereinstimmt. |
- | Existieren diese Variablen nicht, wird geprueft, ob eine der Extensionen |
- | aus 'EXECSUFFIX' bzw. 'GEMEXT'/'TOSEXT' vorliegt. Die Gross-, Klein- |
- | schreibung wird nicht beachtet. |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE IsDosDevice ((* EIN/ -- *) VAR path : ARRAY OF CHAR ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | IsDosDevice <=> path = "xx...:" , x weder \ noch / |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE DosToUnix ((* EIN/ -- *) dpath : ARRAY OF CHAR;
- (* -- /AUS *) VAR xpath : ARRAY OF CHAR;
- (* -- /AUS *) VAR xlen : CARDINAL );
-
- (*--------------------------------------------------------------------------
- | Die Prozedur dient dazu, die "DOS"-spezifischen Elemente eines Pfadnamens|
- | in "*IX"-Aequivalente zu wandeln, falls dies moeglich ist. Im einzelnen |
- | werden folgende Umwandlungen vorgenommen: |
- | |
- | \ --> / |
- | x: --> /dev/x |
- | x:\..., x:... --> /dev/x/... |
- | con: --> /dev/tty |
- | xx...:.. --> /dev/xx... |
- | falls MiNT aktiv |
- | V:\... --> /dev/... |
- | Q:\... --> /pipe/... |
- | falls MiNT-Version >= 0.9 |
- | U:\dev\... --> /dev/... |
- | U:\pipe\... --> /pipe/... |
- | |
- | <xpath> enthaelt soviel vom umgewandelten Pfad wie moeglich. <xlen> ent- |
- | haelt die Laenge des UNGEKUERZTEN Pfades. Falls also <xlen> groesser als |
- | der Platz in <xpath> ist, musste gekuerzt werden. |
- --------------------------------------------------------------------------*)
-
- PROCEDURE UnixToDos ((* EIN/ -- *) xpath : ARRAY OF CHAR;
- (* -- /AUS *) VAR dpath : PathName;
- (* -- /AUS *) VAR dot : BOOLEAN;
- (* -- /AUS *) VAR done : BOOLEAN );
-
- (*--------------------------------------------------------------------------
- | Die Prozedur dient dazu, die "*IX"-spezifischen Elemente eines Pfadnamens|
- | in "DOS"-Aequivalente zu wandeln, falls dies moeglich ist. Im einzelnen |
- | werden folgende Umwandlungen vorgenommen: |
- | |
- | / --> \ |
- | /dev/x --> x: |
- | /dev/x/..., /dev/x\... --> x:\... |
- | /dev/tty --> con: |
- | /dev/xx... --> xx...: |
- | falls MiNT aktiv |
- | /dev/xx... --> V:\... |
- | /pipe/... --> Q:\... |
- | falls MiNT-Version >= 0.9 |
- | /dev/xx... --> U:\dev\... |
- | /pipe/... --> U:\pipe\... |
- | |
- | <dpath> wird immer mit einem Nullbyte abgeschlossen. |
- | <dot> == dpath = ("." | "xxx\." | "x:." | ".." | "xxx\.." | "x:..") |
- | |
- | Falls in der Environmentvariablen UNIXMODE der Teilstring "rX" enthalten |
- | ist, wird eine Pfadangabe der Form "\..." zu "X:\..." umgewandelt. |
- | |
- | Die Angaben "\.", "\.." und, falls das aktuelle Verzeichnis das Haupt- |
- | verzeichnis ist, auch ".", ".." werden durch das Hauptverzeichnis ersetzt|
- | |
- | Wenn <dpath> den vollstaendigen umgewandelten Pfad aufnehmen konnte |
- | (einschliesslich dem abschliessenden Nullbyte), ist <done> = TRUE, sonst |
- | ist <done> = FALSE, und 'err.errno' wird auf 'ENAMETOOLONG' gesetzt. |
- | Falls <xpath> der Leerstring ist, wird 'err.errno' auf 'ENOENT' gesetzt, |
- | und <done> ist ebenfalls FALSE. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE FindFirst ((* EIN/ -- *) VAR path : PathName;
- (* EIN/ -- *) attr : FileAttribute;
- (* EIN/AUS *) VAR dta : DTA;
- (* -- /AUS *) VAR res : INTEGER ): BOOLEAN;
-
- PROCEDURE FindNext ((* EIN/AUS *) VAR dta : DTA;
- (* -- /AUS *) VAR res : INTEGER ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | Fuehren ein "GEMDOS-Fsfirst" bzw. "Fsnext" aus. Der Funktionswert ist |
- | TRUE, falls eine Datei gefunden wurde, falls nicht, enthaelt <err> den |
- | Fehlercode. <dta> bei "FindNext()" muss die gleiche wie bei "FindFirst()"|
- | sein. Da die DTA jedesmal explizit gesetzt wird, kann sie zwischendurch |
- | auch beliebig umgesetzt werden. |
- --------------------------------------------------------------------------*)
-
- PROCEDURE CompletePath ((* EIN/ -- *) VAR path : ARRAY OF CHAR;
- (* -- /AUS *) VAR full : PathName;
- (* -- /AUS *) VAR len : CARDINAL;
- (* -- /AUS *) VAR err : INTEGER ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | Falls die Laufwerksangabe in <path> fehlt, und/oder nur ein relativer |
- | Pfad angegeben ist, werden Laufwerk und/oder aktueller Pfad ergaenzt. |
- | <full> enthaelt die vervollstaendigte Pfadangabe. <len> ist die Laenge |
- | von <full>; da <full> mindestens die Laufwerksangabe und das Wurzelver- |
- | zeichnis enthaelt, ist <len> mindestens gleich drei. |
- | <full> ist immer mit einem Nullbyte abgeschlossen. |
- | Wenn ein Fehler aufgetreten ist, wird FALSE als Funktionswert geliefert |
- | und <err> enthaelt den Fehlercode; <len> und <full> sind dann nicht defi-|
- | niert. |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE Seek ((* EIN/ -- *) hndl : INTEGER;
- (* EIN/ -- *) off : SIGNEDLONG;
- (* EIN/ -- *) mode : CARDINAL;
- (* -- /AUS *) VAR pos : SIGNEDLONG;
- (* -- /AUS *) VAR done : BOOLEAN );
-
- (*--------------------------------------------------------------------------
- | Fuehrt ein "GEMDOS-Fseek" aus. Falls ein Fehler auftritt, enthaelt <pos> |
- | den Fehlercode und <done> ist FALSE; ansonsten enthaelt <pos> die jetzige|
- | Position. |
- --------------------------------------------------------------------------*)
-
- PROCEDURE IsDevice ((* EIN/ -- *) h : INTEGER ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | Es wird genau dann "TRUE" geliefert, wenn auf das (gueltige) Handle kein |
- | "Seek" angewendet werden kann, dabei aber kein Fehler gemeldet wird. |
- --------------------------------------------------------------------------*)
-
- END DosFile.
-