[Back to DOS SWAG index] [Back to Main SWAG index] [Original]

    {
    >> 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 }

[Back to DOS SWAG index] [Back to Main SWAG index] [Original]