home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
program
/
m2posx02
/
dosfile.dpp
< prev
next >
Wrap
Text File
|
1993-10-23
|
11KB
|
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.