home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* PDIR.PAS *)
- (* ermittelt das Startverzeichnis Programms *)
- (* (c) 1989 Beat Knoblauch & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT PDir;
-
- INTERFACE
-
- USES Dos; { wegen Import der PathStr-, DirStr- usw. TYPES }
-
- PROCEDURE GetProgDir(VAR ProgDir : Dos.DirStr);
- { für Turbo-Pascal 4.0 muss DOS.DirStr durch den TYPE }
- { "String" ersetzt werden }
-
- IMPLEMENTATION
-
- PROCEDURE GetProgDir(VAR ProgDir : Dos.DirStr);
-
- CONST
- MaxEnv = $8000; { = 32 KBytes }
-
- TYPE
- EnvArray = ARRAY[0..MaxEnv] OF Char;
-
- VAR
- PDlen : BYTE ABSOLUTE ProgDir;
- p : ^EnvArray;
- ProgPath : Dos.PathStr;
- Name : Dos.NameStr;
- Ext : Dos.ExtStr;
- i : WORD;
-
- BEGIN
- ProgPath := '';
- p := Ptr(Word(Ptr(System.PrefixSeg, $2C)^), 0);
- { p auf den Anfang der Env-Tabelle. Die Adresse }
- { lässt sich aus der typisierten Konstanten der }
- { Unit System, PrefixSeg, gewinnen. }
- i := 0;
- REPEAT
- Inc(i);
- UNTIL ((p^[i-1] = #0) AND (p^[i] = #0)) OR (i >= MaxEnv);
- Inc(i);
- { Einträge bis zu einem "0-Word" überspringen }
- ProgDir := '';
- IF i >= MaxEnv THEN Exit;
- REPEAT
- Inc(i);
- UNTIL p^[i] = #0;
- Inc(i);
- { Byte im Environment überlesen, das angibt, wieviele }
- { Parameter noch folgen. Danach folgt ein ASCIIZ- }
- { String, der Laufwerk, Pfad und Filename[.Ext] }
- { des laufenden Programmes enthält. }
- ProgPath := '';
- WHILE p^[i] <> #0 DO BEGIN
- ProgPath := ProgPath + p^[i];
- Inc(i);
- END;
- { ASCIIZ-String in die Variable ProgPath einlesen }
- FSplit(ProgPath, ProgDir, Name, Ext);
- { Turbo Pascal 5.0 Prozedur zum Aufsplitten von }
- { Pfad-Angaben. Für Turbo-Pascal 4.0 muß der Name.Ext }
- { eigenhändig abgetrennt werden, um das Directory zu }
- { extrahieren. }
-
- IF PDlen > 3 THEN Dec(PDlen);
- { Damit hat die Ausgabe dieselbe Form wie die Pascal- }
- { Prozedur GetDir }
- END;
-
- BEGIN
- END.
- (* ------------------------------------------------------ *)
- (* Ende von PDIR.PAS *)