AppSetting helper

BlitzMax Forums/BlitzMax Programming/AppSetting helper

This will load settings from the commandline and a settings file, and will save the settings file.

Use parameters like this:
+settingname settingvalue +setting2 anothervalue -setting3

This results like this:
settingname=settingvalue
setting2=anothervalue
setting3=1

Then you retrieve the settings to your app like this:
SomeSetting=TAppSetting.get("SomeSetting")
MaximizeWindow=Int(TAppSetting.get("MaximizeWindow",MaximizeWindow))

And calling TAppSetting.save() will save all settings.

TAppSetting.ParseCommandline

Type TAppSetting
	Global filename$=StripExt(AppFile)+".cfg"
	Global list:TList=New TList

	Field link:TLink
	Field name$
	Field value$
	Field flags
	
	Method New()
		link=list.addlast(Self)
	EndMethod
	
	Function Get$(name$,defaultvalue$="")
		name=Trim(name)
		defaultvalue=Trim(defaultvalue)
		For appsetting:TAppSetting=EachIn list
			If Lower(appsetting.name)=Lower(name)
				Return appsetting.value
			EndIf
		Next
		If defaultvalue<>""
			appsetting:TAppSetting=New TAppSetting
			appsetting.name=name
			appsetting.value=defaultvalue
		EndIf
		Return defaultvalue
	EndFunction
	
	Function Set(name$,value$)
		name=Trim(name)
		value=Trim(value)
		For appsetting:TAppSetting=EachIn TAppSetting.list
			If Lower(appsetting.name)=Lower(name)
				If defaultvalue=""
					appsetting.name=""
					appsetting.value=""
					RemoveLink appsetting.link
					appsetting.link=Null
					Return
				Else
					appsetting.value=value
					Return
				EndIf
			EndIf
		Next
		If defaultvalue<>""
			appsetting:TAppSetting=New TAppSetting
			appsetting.name=name
			appsetting.value=value
		EndIf
	EndFunction

	Function Load:Int()
		stream:TStream=ReadFile(filename)
		If Not stream Return False
		While Not stream.eof()
			s$=Trim(stream.readline())
			If s<>"" set piece(s,1,"="),remove(piece(s,2,"="),Chr(34))
		Wend
		stream.close()
		Return True
	EndFunction

	Function Save:Int()
		stream:TStream=WriteFile(filename)
		If Not stream Return False
		For appsetting:TAppSetting=EachIn list
			stream.writeline appsetting.name+"="+Chr(34)+appsetting.value+Chr(34)
		Next
		stream.close()
		Return True
	EndFunction

	Function ParseCommandline()
		Local cl$
		For n=1 To AppArgs.length-1
			arg$=AppArgs[n]
			Select Left(arg,1)
				Case "+"
					If n<AppArgs.length-1
						TAppSetting.set(Right(arg,Len(arg)-1),Trim(AppArgs[n+1]))
						n=n+1
					EndIf
				Case "-"
					TAppSetting.set(Right(arg,Len(arg)-1),"1")
				Default
					TAppSetting.set("command",arg)
			EndSelect
		Next
	EndFunction

EndType