; 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 = -