; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1643&highlight=
; Author: wichtel (updated for PB4.00 by blbltheworm)
; Date: 08. July 2003
; OS: Windows
; Demo: No
; Umgebungsvariablen lesen und setzen
; (gesetzte Umgebungsvariablen werden an Unterprozesse übergeben,
; bleiben aber nach Programmende nicht erhalten und können auch nicht
; von bereits laufenden Programmen gelesen werden)
Structure envstruct
name.s
value.s
EndStructure
Global NewList env.envstruct()
; gibt als Rückgabewert die Anzahl der Umgebungsvariablen zurück
; braucht ein vorher angelegte LinkedList vom Typ envstruct
Procedure.l myListEnv()
ret$=""
envcount.l=0
envblock.l=GetENVIRONMENTStrings_()
ClearList(env())
Repeat
ret$=PeekS(envblock)
If ret$<>"" And Left(ret$,1)<>"=" And Left(ret$,1)<>":"
AddElement(env())
env()\name=StringField(ret$,1,"=")
env()\value=StringField(ret$,2,"=")
EndIf
envblock+Len(ret$)+1
Until ret$=""
ProcedureReturn CountList(env())
EndProcedure
; gibt als Rückgabewert den Wert der Umgebungsvariablen zurück
; oder einenLeerstring wenn die Variable nicht existiert
Procedure.s myGetEnv(name.s)
value.s=Space(256)
size.l=Len(value)
GetENVIRONMENTVariable_(@name, @value, @size)
ProcedureReturn(value)
EndProcedure
; gibt als Rückgabewert den Wert der Umgebungsvariablen zurück
; oder einenLeerstring wenn das Setzen nicht geklappt hat
Procedure.s mySetEnv(name.s,value.s)
If SetENVIRONMENTVariable_(@name, @value)
ProcedureReturn value
Else
ProcedureReturn ""
EndIf
EndProcedure
OpenConsole()
; gezielt eine Umgebungsvariable abfragen
PrintN("lesen...")
PrintN("systemroot: "+myGetEnv("systemroot"))
; eine Umgebungsvariable setzen
PrintN("setzen...")
PrintN("MeineVariable: "+mySetEnv("MeineVariable","MeinWert"))
PrintN("")
PrintN("Eingabe druecken...")
Input()
PrintN("")
; alle Umgebungsvariablen in ein LinkedList und auflisten
PrintN("Auflisten...")
Anzahl.l=myListEnv()
PrintN(Str(Anzahl)+" Umgebungsvariablen")
PrintN("")
ResetList(env())
While NextElement(env())
PrintN(env()\name+": "+env()\value)
Delay(300) ; da kann man besser zuschauen
Wend
PrintN("")
PrintN("Eingabe druecken...")
Input()
CloseConsole()
; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -