Contributor: GARY MAYS { >> How do I detect / read a string in the enviornment? For example > WriteLn('The DOS variable "COMSPEC" = ",GetEnv('COMSPEC')); If you are using an older version of pascal without the getenv function, then here are two functions to get the environment string and executed program name that I wrote a while ago. It can examime any environment, not just the current program... you just provide the prefix segment... } {--get the text of an environment string variable--} function getenvstr(_prefixseg: word; v : string): string; { gary a. mays 3/1/88 } type envstr = array[1..32768] of char; var env : ^envstr; p : integer; temp : string; i : integer; begin if v = '' then begin getenvstr := ''; exit; end; { convert specified variable name to uppercase } for i := 1 to length(v) do v[i] := upcase(v[i]); env := ptr(memw[_prefixseg:$2c],0); i := 1; temp := ''; while env^[i] <> #0 do begin temp := temp + env^[i]; i := succ(i); if env^[i] = #0 then { end of current string } begin i := succ(i); p := pos('=',temp) + 1; if p > 1 then if v = copy(temp,1,p-2) then { caller's variable name matched } begin getenvstr := copy(temp,p,255); { return variable's value } exit; end; temp := ''; end; end; getenvstr := ''; end; { getenvstr } {--get the executed program name--} function getprogramname(_prefixseg: word): string; { gary a. mays 5/11/88 } type envstr = array[1..32768] of char; var env : ^envstr; p : integer; temp : string; i : integer; begin env := ptr(memw[_prefixseg:$2c],0); i := 1; temp := ''; while env^[i] <> #0 do begin repeat i := succ(i); until env^[i] = #0; {locate end of a string} i := succ(i); { point to next string or final nul } end; i := i + 3; { point to start of asciz string } while env^[i] <> #0 do begin temp := temp + env^[i]; i := succ(i); end; getprogramname := temp; end; { getprogramname }