Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!unmvax!ncar!ames!haven!adm!xadmx!kirsch%BRAGGVAX.ARPA@cunyvm.cuny.edu From: kirsch%BRAGGVAX.ARPA@cunyvm.cuny.edu (David Kirschbaum) Newsgroups: comp.lang.pascal Subject: Getting Environment Strings Message-ID: <17911@adm.BRL.MIL> Date: 20 Dec 88 17:57:05 GMT Sender: news@adm.BRL.MIL Lines: 94 NetLandians, I usually don't post listings because it clutters up the nets. However, I've been getting requests from all over the known world (and one from a Klingon) for my little sample code .. and some of the return addresses are 30 lines deep! So here it is. David Kirschbaum Toad Hall kirsch@braggvax.ARPA (Oh, yeah .. this is NOT a universal tool .. it only looks for specific strings in the environment .. but that's what the original query asked for. It's pretty easy to also return EVERYTHING in the environment, or test each environment string against a known string. But this'll do.) ---- cut here ---- {Environment code from SUPERCOMM package Rewritten into a little demo program that'll seek out and display the three most common environment specs (and one not-so-common one). This is written for Turbo Pascal v3.0 .. donno if it can be better done in v4.0 or v5.0. David Kirschbaum Toad Hall kirsch@braggvax.ARPA } TYPE Str255 = STRING[255]; FUNCTION GetEnvStr(SearchString : Str255) : Str255; TYPE Env = ARRAY [0..32767] OF Char; VAR EPtr: ^Env; EStr: Str255; Done: BOOLEAN; i: INTEGER; BEGIN GetEnvStr := ''; IF SearchString <> '' THEN BEGIN EPtr := Ptr(MemW[CSeg:$002C],0); i := 0; SearchString := SearchString + '='; Done := FALSE; EStr := ''; REPEAT IF EPtr^[i] = #0 THEN BEGIN IF EPtr^[SUCC(i)] = #0 THEN BEGIN Done := TRUE; IF SearchString='==' THEN BEGIN EStr := ''; i := i + 4; WHILE EPtr^[i] <> #0 DO BEGIN EStr := EStr + EPtr^[i]; i := SUCC(i); END; GetEnvStr := EStr; END; END; IF COPY(EStr,1,LENGTH(SearchString)) = SearchString THEN BEGIN GetEnvStr := COPY(EStr,SUCC(LENGTH(SearchString)),255); Done := TRUE; END; EStr := ''; END ELSE EStr := EStr + EPtr^[i]; i := SUCC(i); Until Done; END; END; {of GetEnvStr} FUNCTION ComSpec: Str255; BEGIN ComSpec := GetEnvStr('COMSPEC'); END; {of ComSpec} CONST {let's define some environment specs to look for...} NRSPECS = 4; Spec : ARRAY[1..NRSPECS] OF STRING[7] = ('PATH', 'COMSPEC', 'PROMPT', 'DSZPORT'); VAR i : INTEGER; BEGIN {main} FOR i := 1 TO NRSPECS DO WRITELN(Spec[i]:7, ': [', GetEnvStr(Spec[i]), ']'); WRITELN('Rivvvvt!'); END.