Contributor: GAYLE DAVIS {$S-,R-,V-,I-,N-,B-,F-} {$IFNDEF Ver40} {Allow overlays} {$F+,O-,X+,A-} {$ENDIF} UNIT Self; INTERFACE FUNCTION GetSelf : STRING; FUNCTION GetSelfPath : STRING; IMPLEMENTATION FUNCTION GetSelf : STRING; VAR Temp : STRING; I, EnvSeg : WORD; BEGIN I := 0; Temp := ''; EnvSeg := memw [prefixseg : $2C]; { have to set this up like any variable! } WHILE memw [EnvSeg : I] <> 0 DO { read through environment strings } INC (I); INC (I, 4); { jump around 2 null bytes & word count } WHILE mem [EnvSeg : I] <> 0 DO { skim off path & filename } BEGIN Temp := Temp + UPCASE (CHR (mem [EnvSeg : I]) ); INC (I); END; GetSelf := Temp; END; { function GetSelf } FUNCTION GetSelfPath : STRING; VAR Temp : STRING; I, EnvSeg : WORD; Place : INTEGER; BEGIN I := 0; Temp := ''; EnvSeg := memw [prefixseg : $2C]; { have to set this up like any variable! } WHILE memw [EnvSeg : I] <> 0 DO { read through environment strings } INC (I); INC (I, 4); { jump around 2 null bytes & word count } WHILE mem [EnvSeg : I] <> 0 DO { skim off path & filename } BEGIN Temp := Temp + UPCASE (CHR (mem [EnvSeg : I]) ); INC (I); END; Place := LENGTH (Temp); WHILE (Place > 0) AND NOT (Temp [Place] IN [':', '\']) DO Place := PRED (Place); IF Place > 0 THEN Temp [0] := CHR (Place); GetSelfPath := Temp; END; { function SelfPath } END.