aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:45:50 -0500
committerJacek Antonelli2008-08-15 23:45:50 -0500
commit2a4dea528f670b9bb1f77ef27a8a1dd16603d114 (patch)
tree95c68e362703c9099d571ecbdc6142b1cda1e005
parentSecond Life viewer sources 1.20.6 (diff)
downloadmeta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.zip
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.gz
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.bz2
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.xz
Second Life viewer sources 1.20.7
-rw-r--r--linden/doc/contributions.txt10
-rw-r--r--linden/etc/message.xml5
-rw-r--r--linden/indra/SConstruct30
-rw-r--r--linden/indra/indra_complete/indra_complete_vc8.sln88
-rw-r--r--linden/indra/indra_complete/indra_complete_vc9.sln85
-rw-r--r--linden/indra/lib/python/indra/base/llsd.py85
-rw-r--r--linden/indra/lib/python/indra/ipc/llsdhttp.py2
-rw-r--r--linden/indra/lib/python/indra/util/named_query.py6
-rw-r--r--linden/indra/llaudio/audioengine.cpp41
-rw-r--r--linden/indra/llaudio/audioengine.h3
-rw-r--r--linden/indra/llaudio/audioengine_fmod.cpp66
-rw-r--r--linden/indra/llcharacter/llanimationstates.cpp139
-rw-r--r--linden/indra/llcharacter/llanimationstates.h13
-rw-r--r--linden/indra/llcharacter/llcharacter.cpp21
-rw-r--r--linden/indra/llcharacter/llcharacter.h3
-rw-r--r--linden/indra/llcharacter/llmotion.cpp28
-rw-r--r--linden/indra/llcharacter/llmotion.h4
-rw-r--r--linden/indra/llcommon/files.lst4
-rw-r--r--linden/indra/llcommon/llapp.cpp163
-rw-r--r--linden/indra/llcommon/llapp.h3
-rw-r--r--linden/indra/llcommon/llapr.cpp12
-rw-r--r--linden/indra/llcommon/llares.cpp5
-rw-r--r--linden/indra/llcommon/llcommon.vcproj15
-rw-r--r--linden/indra/llcommon/llcommon_vc8.vcproj36
-rw-r--r--linden/indra/llcommon/llcommon_vc9.vcproj20
-rw-r--r--linden/indra/llcommon/llerror.cpp69
-rw-r--r--linden/indra/llcommon/llerror.h82
-rw-r--r--linden/indra/llcommon/llfile.cpp6
-rw-r--r--linden/indra/llcommon/llfile.h2
-rw-r--r--linden/indra/llcommon/llfindlocale.cpp525
-rw-r--r--linden/indra/llcommon/llfindlocale.h65
-rw-r--r--linden/indra/llcommon/llheartbeat.cpp165
-rw-r--r--linden/indra/llcommon/llheartbeat.h73
-rw-r--r--linden/indra/llcommon/llindraconfigfile.cpp107
-rw-r--r--linden/indra/llcommon/llindraconfigfile.h50
-rw-r--r--linden/indra/llcommon/llkeyusetracker.h220
-rw-r--r--linden/indra/llcommon/lllivefile.h2
-rw-r--r--linden/indra/llcommon/llmemory.cpp2
-rw-r--r--linden/indra/llcommon/llprocessor.cpp2
-rw-r--r--linden/indra/llcommon/llptrskipmap.h6
-rw-r--r--linden/indra/llcommon/llsdserialize.h2
-rw-r--r--linden/indra/llcommon/llsdutil.h12
-rw-r--r--linden/indra/llcommon/llsys.cpp14
-rw-r--r--linden/indra/llcommon/lltimer.cpp84
-rw-r--r--linden/indra/llcommon/lltimer.h10
-rw-r--r--linden/indra/llcommon/llversionserver.h6
-rw-r--r--linden/indra/llcommon/llversionviewer.h2
-rw-r--r--linden/indra/llimage/llimagetga.cpp2
-rw-r--r--linden/indra/llimagej2coj/llimagej2coj.cpp4
-rw-r--r--linden/indra/llinventory/llinventory.cpp10
-rw-r--r--linden/indra/llinventory/llinventory.h12
-rw-r--r--linden/indra/llinventory/llpermissions.cpp4
-rw-r--r--linden/indra/llinventory/llpermissions.h4
-rw-r--r--linden/indra/llinventory/llsaleinfo.cpp4
-rw-r--r--linden/indra/llinventory/llsaleinfo.h4
-rw-r--r--linden/indra/llmath/llcrc.cpp2
-rw-r--r--linden/indra/llmath/llcrc.h2
-rw-r--r--linden/indra/llmath/llmath_vc8.vcproj16
-rw-r--r--linden/indra/llmath/llmath_vc9.vcproj16
-rw-r--r--linden/indra/llmath/llmd5.cpp4
-rw-r--r--linden/indra/llmath/llmd5.h4
-rw-r--r--linden/indra/llmath/lloctree.h4
-rw-r--r--linden/indra/llmath/llvolume.cpp68
-rw-r--r--linden/indra/llmath/llvolume.h25
-rw-r--r--linden/indra/llmath/m4math.h16
-rw-r--r--linden/indra/llmedia/llmediaimplcommon.cpp1
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplllmozlib.cpp6
-rw-r--r--linden/indra/llmedia/llmediaimplquicktime.cpp10
-rw-r--r--linden/indra/llmedia/llmediaobserver.h8
-rw-r--r--linden/indra/llmessage/llassetstorage.cpp4
-rw-r--r--linden/indra/llmessage/llblowfishcipher.cpp33
-rw-r--r--linden/indra/llmessage/llcachename.cpp2
-rw-r--r--linden/indra/llmessage/llcachename.h2
-rw-r--r--linden/indra/llmessage/llcurl.cpp5
-rw-r--r--linden/indra/llmessage/lldatapacker.h4
-rw-r--r--linden/indra/llmessage/llfiltersd2xmlrpc.cpp18
-rw-r--r--linden/indra/llmessage/llhttpassetstorage.cpp2
-rw-r--r--linden/indra/llmessage/llhttpclient.h7
-rw-r--r--linden/indra/llmessage/llhttpnode.cpp4
-rw-r--r--linden/indra/llmessage/llmessageconfig.cpp47
-rw-r--r--linden/indra/llmessage/llmessageconfig.h1
-rw-r--r--linden/indra/llmessage/llregionhandle.h2
-rw-r--r--linden/indra/llmessage/lltransfermanager.cpp4
-rw-r--r--linden/indra/llmessage/lltransfersourcefile.cpp4
-rw-r--r--linden/indra/llmessage/lltransfersourcefile.h2
-rw-r--r--linden/indra/llmessage/lltransfertargetfile.h2
-rw-r--r--linden/indra/llmessage/llxfer_file.cpp6
-rw-r--r--linden/indra/llmessage/llxfer_file.h2
-rw-r--r--linden/indra/llmessage/llxfermanager.cpp4
-rw-r--r--linden/indra/llmessage/message.cpp270
-rw-r--r--linden/indra/llmessage/net.cpp22
-rw-r--r--linden/indra/llrender/files.lst2
-rw-r--r--linden/indra/llrender/llfontgl.cpp41
-rw-r--r--linden/indra/llrender/llfontgl.h1
-rw-r--r--linden/indra/llrender/llglimmediate.cpp303
-rw-r--r--linden/indra/llrender/llglimmediate.h107
-rw-r--r--linden/indra/llrender/llimagegl.cpp152
-rw-r--r--linden/indra/llrender/llimagegl.h16
-rw-r--r--linden/indra/llrender/llrender.cpp704
-rw-r--r--linden/indra/llrender/llrender.h239
-rw-r--r--linden/indra/llrender/llrender.vcproj4
-rw-r--r--linden/indra/llrender/llrender_vc8.vcproj8
-rw-r--r--linden/indra/llrender/llrender_vc9.vcproj4
-rw-r--r--linden/indra/llrender/llrendertarget.cpp17
-rw-r--r--linden/indra/llrender/llvertexbuffer.cpp51
-rw-r--r--linden/indra/llrender/llvertexprogramgl.cpp125
-rw-r--r--linden/indra/llui/llbutton.cpp10
-rw-r--r--linden/indra/llui/llcombobox.cpp14
-rw-r--r--linden/indra/llui/llfloater.cpp20
-rw-r--r--linden/indra/llui/lllineeditor.cpp9
-rw-r--r--linden/indra/llui/lllineeditor.h4
-rw-r--r--linden/indra/llui/llmenugl.cpp2
-rw-r--r--linden/indra/llui/llresizebar.cpp11
-rw-r--r--linden/indra/llui/llresizebar.h2
-rw-r--r--linden/indra/llui/llscrollbar.cpp6
-rw-r--r--linden/indra/llui/llscrollcontainer.cpp2
-rw-r--r--linden/indra/llui/llscrolllistctrl.cpp8
-rw-r--r--linden/indra/llui/llspinctrl.cpp12
-rw-r--r--linden/indra/llui/llspinctrl.h2
-rw-r--r--linden/indra/llui/llstyle.h9
-rw-r--r--linden/indra/llui/lltabcontainer.cpp2
-rw-r--r--linden/indra/llui/lltexteditor.cpp92
-rw-r--r--linden/indra/llui/lltexteditor.h18
-rw-r--r--linden/indra/llui/llui.cpp18
-rw-r--r--linden/indra/llui/lluictrlfactory.cpp17
-rw-r--r--linden/indra/llui/lluictrlfactory.h4
-rw-r--r--linden/indra/llui/llview.cpp2
-rw-r--r--linden/indra/llui/llviewborder.cpp2
-rw-r--r--linden/indra/llvfs/lldir.cpp30
-rw-r--r--linden/indra/llvfs/llvfs.cpp53
-rw-r--r--linden/indra/llvfs/llvfs.h8
-rw-r--r--linden/indra/llwindow/files.linux.lst1
-rw-r--r--linden/indra/llwindow/files.sunos5.lst1
-rw-r--r--linden/indra/llwindow/lldxhardware.cpp21
-rw-r--r--linden/indra/llwindow/llgl.cpp294
-rw-r--r--linden/indra/llwindow/llgl.h30
-rw-r--r--linden/indra/llwindow/llwindow.cpp20
-rw-r--r--linden/indra/llwindow/llwindow.h2
-rw-r--r--linden/indra/llwindow/llwindowlinux.h119
-rw-r--r--linden/indra/llwindow/llwindowmacosx-objc.mm8
-rw-r--r--linden/indra/llwindow/llwindowmacosx.cpp71
-rw-r--r--linden/indra/llwindow/llwindowmacosx.h2
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp98
-rw-r--r--linden/indra/llwindow/llwindowsdl.h3
-rw-r--r--linden/indra/llwindow/llwindowsolaris.h121
-rw-r--r--linden/indra/llwindow/llwindowwin32.cpp133
-rw-r--r--linden/indra/llwindow/llwindowwin32.h2
-rw-r--r--linden/indra/llxml/llcontrol.cpp71
-rw-r--r--linden/indra/llxml/llcontrol.h2
-rw-r--r--linden/indra/llxml/llxmlnode.cpp6
-rw-r--r--linden/indra/llxml/llxmlnode.h8
-rw-r--r--linden/indra/llxml/llxmlparser.cpp4
-rw-r--r--linden/indra/llxml/llxmlparser.h4
-rw-r--r--linden/indra/lscript/lscript_alloc.h2
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l9
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_bytecode.cpp2
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_bytecode.h2
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_error.cpp10
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_error.h12
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_tree.cpp282
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_tree.h238
-rw-r--r--linden/indra/lscript/lscript_compile/lscript_typecheck.cpp6
-rw-r--r--linden/indra/lscript/lscript_execute.h2
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_execute.cpp49
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_readlso.cpp206
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_readlso.h232
-rw-r--r--linden/indra/lscript/lscript_library/lscript_alloc.cpp2
-rw-r--r--linden/indra/mac_crash_logger/llcrashloggermac.cpp2
-rw-r--r--linden/indra/mac_updater/mac_updater.cpp4
-rw-r--r--linden/indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/Info-SecondLife.plist2
-rw-r--r--linden/indra/newview/app_settings/cmd_line.xml670
-rw-r--r--linden/indra/newview/app_settings/keywords.ini4
-rw-r--r--linden/indra/newview/app_settings/logcontrol.xml47
-rw-r--r--linden/indra/newview/app_settings/settings.xml18732
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar.vp146
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp179
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_nobump.vp128
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_select.vp60
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_wind.vp211
-rw-r--r--linden/indra/newview/files.lst4
-rw-r--r--linden/indra/newview/installers/windows/installer_template.nsi21
-rw-r--r--linden/indra/newview/linux_tools/client-readme.txt50
l---------linden/indra/newview/linux_tools/unicode.ttf1
-rwxr-xr-xlinden/indra/newview/linux_tools/wrapper.sh4
-rw-r--r--linden/indra/newview/llagent.cpp1
-rw-r--r--linden/indra/newview/llanimstatelabels.cpp (renamed from linden/indra/llwindow/llwindowlinux.cpp)36
-rw-r--r--linden/indra/newview/llanimstatelabels.h (renamed from linden/indra/llrender/llvertexprogramgl.h)33
-rw-r--r--linden/indra/newview/llappviewer.cpp383
-rw-r--r--linden/indra/newview/llappviewer.h19
-rw-r--r--linden/indra/newview/llappviewerlinux.cpp32
-rw-r--r--linden/indra/newview/llappviewermacosx.cpp13
-rw-r--r--linden/indra/newview/llappviewerwin32.cpp75
-rw-r--r--linden/indra/newview/llbox.cpp2
-rw-r--r--linden/indra/newview/llchatbar.cpp1
-rw-r--r--linden/indra/newview/llcolorswatch.cpp2
-rw-r--r--linden/indra/newview/llcommandlineparser.cpp33
-rw-r--r--linden/indra/newview/llcompilequeue.cpp2
-rw-r--r--linden/indra/newview/llconsole.cpp34
-rw-r--r--linden/indra/newview/llcubemap.cpp44
-rw-r--r--linden/indra/newview/llcubemap.h1
-rw-r--r--linden/indra/newview/llcurrencyuimanager.cpp5
-rw-r--r--linden/indra/newview/lldrawable.cpp8
-rw-r--r--linden/indra/newview/lldrawpool.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolalpha.cpp18
-rw-r--r--linden/indra/newview/lldrawpoolalpha.h3
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp59
-rw-r--r--linden/indra/newview/lldrawpoolbump.cpp97
-rw-r--r--linden/indra/newview/lldrawpoolsimple.cpp18
-rw-r--r--linden/indra/newview/lldrawpoolsky.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolterrain.cpp286
-rw-r--r--linden/indra/newview/lldrawpooltree.cpp30
-rw-r--r--linden/indra/newview/lldrawpoolwater.cpp47
-rw-r--r--linden/indra/newview/lldrawpoolwlsky.cpp21
-rw-r--r--linden/indra/newview/lldynamictexture.cpp2
-rw-r--r--linden/indra/newview/llface.cpp6
-rw-r--r--linden/indra/newview/llface.h1
-rw-r--r--linden/indra/newview/llfasttimerview.cpp2
-rw-r--r--linden/indra/newview/llfeaturemanager.cpp58
-rw-r--r--linden/indra/newview/llfeaturemanager.h2
-rw-r--r--linden/indra/newview/llfloateranimpreview.cpp3
-rw-r--r--linden/indra/newview/llfloaterauction.cpp7
-rw-r--r--linden/indra/newview/llfloaterbuyland.cpp5
-rw-r--r--linden/indra/newview/llfloaterchat.cpp21
-rw-r--r--linden/indra/newview/llfloatercolorpicker.cpp2
-rw-r--r--linden/indra/newview/llfloaterdirectory.cpp45
-rw-r--r--linden/indra/newview/llfloaterdirectory.h6
-rw-r--r--linden/indra/newview/llfloatergroupinfo.cpp26
-rw-r--r--linden/indra/newview/llfloatergroups.cpp2
-rw-r--r--linden/indra/newview/llfloaterimagepreview.cpp2
-rw-r--r--linden/indra/newview/llfloaterproperties.cpp35
-rw-r--r--linden/indra/newview/llfloaterproperties.h4
-rw-r--r--linden/indra/newview/llfloaterregioninfo.cpp3
-rw-r--r--linden/indra/newview/llfloaterreporter.cpp4
-rw-r--r--linden/indra/newview/llfloaterreporter.h2
-rw-r--r--linden/indra/newview/llfloatersnapshot.cpp68
-rw-r--r--linden/indra/newview/llfloatertools.cpp13
-rw-r--r--linden/indra/newview/llfolderview.cpp6
-rw-r--r--linden/indra/newview/llframestats.cpp2
-rw-r--r--linden/indra/newview/llgivemoney.cpp16
-rw-r--r--linden/indra/newview/llglsandbox.cpp2
-rw-r--r--linden/indra/newview/llglslshader.cpp116
-rw-r--r--linden/indra/newview/llglslshader.h3
-rw-r--r--linden/indra/newview/llgroupnotify.cpp4
-rw-r--r--linden/indra/newview/llhoverview.cpp79
-rw-r--r--linden/indra/newview/llhudeffectlookat.cpp2
-rw-r--r--linden/indra/newview/llhudeffectpointat.cpp2
-rw-r--r--linden/indra/newview/llhudicon.cpp2
-rw-r--r--linden/indra/newview/llhudtext.cpp5
-rw-r--r--linden/indra/newview/llimpanel.cpp66
-rw-r--r--linden/indra/newview/llimpanel.h13
-rw-r--r--linden/indra/newview/llimview.cpp55
-rw-r--r--linden/indra/newview/llimview.h4
-rw-r--r--linden/indra/newview/llinventorymodel.cpp8
-rw-r--r--linden/indra/newview/lljoystickbutton.cpp2
-rw-r--r--linden/indra/newview/lllogchat.cpp4
-rw-r--r--linden/indra/newview/llmanip.cpp2
-rw-r--r--linden/indra/newview/llmaniprotate.cpp2
-rw-r--r--linden/indra/newview/llmanipscale.cpp2
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp10
-rw-r--r--linden/indra/newview/llmemoryview.cpp4
-rw-r--r--linden/indra/newview/llmutelist.cpp82
-rw-r--r--linden/indra/newview/llmutelist.h10
-rw-r--r--linden/indra/newview/llnetmap.cpp6
-rw-r--r--linden/indra/newview/llnotify.cpp2
-rw-r--r--linden/indra/newview/lloverlaybar.cpp2
-rw-r--r--linden/indra/newview/llpanelclassified.cpp89
-rw-r--r--linden/indra/newview/llpanelclassified.h9
-rw-r--r--linden/indra/newview/llpaneldirbrowser.cpp78
-rw-r--r--linden/indra/newview/llpaneldirbrowser.h1
-rw-r--r--linden/indra/newview/llpaneldirfind.cpp300
-rw-r--r--linden/indra/newview/llpaneldirfind.h58
-rw-r--r--linden/indra/newview/llpaneldirgroups.cpp100
-rw-r--r--linden/indra/newview/llpaneldirgroups.h13
-rw-r--r--linden/indra/newview/llpaneldirplaces.cpp156
-rw-r--r--linden/indra/newview/llpaneldirplaces.h20
-rw-r--r--linden/indra/newview/llpaneldirpopular.cpp97
-rw-r--r--linden/indra/newview/llpaneldirpopular.h21
-rw-r--r--linden/indra/newview/llpaneldisplay.cpp77
-rw-r--r--linden/indra/newview/llpaneldisplay.h13
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.cpp99
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.h4
-rw-r--r--linden/indra/newview/llpanellogin.cpp94
-rw-r--r--linden/indra/newview/llpanellogin.h1
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp13
-rw-r--r--linden/indra/newview/llpolymesh.cpp2
-rw-r--r--linden/indra/newview/llpolymorph.cpp2
-rw-r--r--linden/indra/newview/llpolymorph.h2
-rw-r--r--linden/indra/newview/llpostprocess.cpp89
-rw-r--r--linden/indra/newview/llpostprocess.h7
-rw-r--r--linden/indra/newview/llpreviewgesture.cpp5
-rw-r--r--linden/indra/newview/llpreviewscript.cpp10
-rw-r--r--linden/indra/newview/llprogressview.cpp2
-rw-r--r--linden/indra/newview/llselectmgr.cpp36
-rw-r--r--linden/indra/newview/llspatialpartition.cpp10
-rw-r--r--linden/indra/newview/llstartup.cpp258
-rw-r--r--linden/indra/newview/llstatgraph.cpp2
-rw-r--r--linden/indra/newview/llstatusbar.cpp20
-rw-r--r--linden/indra/newview/llstylemap.cpp75
-rw-r--r--linden/indra/newview/llstylemap.h (renamed from linden/indra/llwindow/llwindowsolaris.cpp)49
-rw-r--r--linden/indra/newview/llsurfacepatch.cpp3
-rw-r--r--linden/indra/newview/lltexlayer.cpp44
-rw-r--r--linden/indra/newview/lltexturecache.cpp26
-rw-r--r--linden/indra/newview/lltexturectrl.cpp2
-rw-r--r--linden/indra/newview/lltexturefetch.cpp18
-rw-r--r--linden/indra/newview/lltextureview.cpp2
-rw-r--r--linden/indra/newview/lltoolbar.cpp9
-rw-r--r--linden/indra/newview/lltoolbrush.cpp2
-rw-r--r--linden/indra/newview/lltooldraganddrop.cpp5
-rw-r--r--linden/indra/newview/lltoolfocus.cpp3
-rw-r--r--linden/indra/newview/lltoolfocus.h1
-rw-r--r--linden/indra/newview/lltoolmorph.cpp2
-rw-r--r--linden/indra/newview/lltoolselectrect.cpp2
-rw-r--r--linden/indra/newview/lltracker.cpp2
-rw-r--r--linden/indra/newview/lltrans.cpp103
-rw-r--r--linden/indra/newview/lltrans.h92
-rw-r--r--linden/indra/newview/lluserauth.cpp20
-rw-r--r--linden/indra/newview/llviewerassetstorage.cpp2
-rw-r--r--linden/indra/newview/llviewercontrol.cpp18
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp54
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp6
-rw-r--r--linden/indra/newview/llviewerinventory.cpp10
-rw-r--r--linden/indra/newview/llviewerinventory.h10
-rw-r--r--linden/indra/newview/llviewerjoint.cpp6
-rw-r--r--linden/indra/newview/llviewerjointattachment.cpp2
-rw-r--r--linden/indra/newview/llviewerjointmesh.cpp53
-rw-r--r--linden/indra/newview/llviewerjoystick.cpp30
-rw-r--r--linden/indra/newview/llviewerkeyboard.cpp2
-rw-r--r--linden/indra/newview/llviewermenu.cpp59
-rw-r--r--linden/indra/newview/llviewermenufile.cpp51
-rw-r--r--linden/indra/newview/llviewermessage.cpp262
-rw-r--r--linden/indra/newview/llviewernetwork.cpp186
-rw-r--r--linden/indra/newview/llviewernetwork.h46
-rw-r--r--linden/indra/newview/llviewerobject.cpp45
-rw-r--r--linden/indra/newview/llviewerobject.h1
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp3
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp10
-rw-r--r--linden/indra/newview/llviewerparceloverlay.cpp47
-rw-r--r--linden/indra/newview/llviewerpartsource.cpp19
-rw-r--r--linden/indra/newview/llviewerpartsource.h1
-rw-r--r--linden/indra/newview/llviewerregion.cpp12
-rw-r--r--linden/indra/newview/llviewerstats.cpp8
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp14
-rw-r--r--linden/indra/newview/llviewerthrottle.cpp4
-rw-r--r--linden/indra/newview/llviewerwindow.cpp68
-rw-r--r--linden/indra/newview/llviewerwindow.h10
-rw-r--r--linden/indra/newview/llvoavatar.cpp375
-rw-r--r--linden/indra/newview/llvoavatar.h29
-rw-r--r--linden/indra/newview/llvocache.cpp8
-rw-r--r--linden/indra/newview/llvocache.h4
-rw-r--r--linden/indra/newview/llvograss.h4
-rw-r--r--linden/indra/newview/llvoiceclient.cpp249
-rw-r--r--linden/indra/newview/llvoiceclient.h4
-rw-r--r--linden/indra/newview/llvoicevisualizer.cpp177
-rw-r--r--linden/indra/newview/llvoicevisualizer.h23
-rw-r--r--linden/indra/newview/llvosky.cpp6
-rw-r--r--linden/indra/newview/llvosky.h23
-rw-r--r--linden/indra/newview/llvosurfacepatch.cpp12
-rw-r--r--linden/indra/newview/llwatchdog.cpp222
-rw-r--r--linden/indra/newview/llwatchdog.h98
-rw-r--r--linden/indra/newview/llwaterparammanager.cpp15
-rw-r--r--linden/indra/newview/llwaterparammanager.h10
-rw-r--r--linden/indra/newview/llwearable.cpp6
-rw-r--r--linden/indra/newview/llwearable.h4
-rw-r--r--linden/indra/newview/llwearablelist.cpp2
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp9
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h2
-rw-r--r--linden/indra/newview/llwindebug.cpp154
-rw-r--r--linden/indra/newview/llwindebug.h30
-rw-r--r--linden/indra/newview/llwlparammanager.cpp10
-rw-r--r--linden/indra/newview/llwlparammanager.h5
-rw-r--r--linden/indra/newview/llwlparamset.h8
-rw-r--r--linden/indra/newview/llworld.cpp31
-rw-r--r--linden/indra/newview/llworldmap.cpp18
-rw-r--r--linden/indra/newview/llworldmap.h1
-rw-r--r--linden/indra/newview/llworldmapview.cpp81
-rw-r--r--linden/indra/newview/llworldmapview.h1
-rw-r--r--linden/indra/newview/llxmlrpctransaction.cpp8
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj40
-rw-r--r--linden/indra/newview/newview.vcproj27
-rw-r--r--linden/indra/newview/newview_vc8.vcproj44
-rw-r--r--linden/indra/newview/newview_vc9.vcproj36
-rw-r--r--linden/indra/newview/pipeline.cpp185
-rw-r--r--linden/indra/newview/pipeline.h1
-rw-r--r--linden/indra/newview/releasenotes.txt253
-rw-r--r--linden/indra/newview/res/newViewRes.rc8
-rw-r--r--linden/indra/newview/skins/textures/textures.xml4
-rw-r--r--linden/indra/newview/skins/xui/de/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/de/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_group_invite.xml5
-rw-r--r--linden/indra/newview/skins/xui/de/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml46
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_directory.xml404
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_im.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_joystick.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_script_debug.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_snapshot.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_world_map.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_viewer.xml29
-rw-r--r--linden/indra/newview/skins/xui/en-us/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/notify.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_classified.xml19
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_general.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_notices.xml3
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml36
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_general.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/strings.xml166
-rw-r--r--linden/indra/newview/skins/xui/es/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_about.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_joystick.xml93
-rw-r--r--linden/indra/newview/skins/xui/ja/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml10
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml4
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_chat_history.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_joystick.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/menu_viewer.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_chat_bar.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_group_invite.xml5
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/pt/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_group_notices.xml2
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py7
-rw-r--r--linden/indra/test/inventory.cpp8
-rw-r--r--linden/indra/test/llblowfish_tut.cpp4
-rw-r--r--linden/indra/test/lldatapacker_tut.cpp4
-rw-r--r--linden/indra/test/llmessageconfig_tut.cpp17
-rw-r--r--linden/indra/test/llpermissions_tut.cpp4
-rw-r--r--linden/indra/test/llsaleinfo_tut.cpp4
-rw-r--r--linden/scripts/messages/message_template.msg4
441 files changed, 19711 insertions, 16434 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index f26c105..7c5b54c 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -8,6 +8,7 @@ Able Whitman
8 VWR-650 8 VWR-650
9 VWR-1460 9 VWR-1460
10 VWR-1691 10 VWR-1691
11 VWR-1735
11Adam Marker 12Adam Marker
12 VWR-2755 13 VWR-2755
13Aimee Trescothick 14Aimee Trescothick
@@ -39,6 +40,7 @@ Alissa Sabre
39 VWR-2116 40 VWR-2116
40 VWR-2826 41 VWR-2826
41 VWR-3290 42 VWR-3290
43 VWR-3857
42 VWR-4010 44 VWR-4010
43 VWR-3410 45 VWR-3410
44 VWR-6386 46 VWR-6386
@@ -48,6 +50,9 @@ Alissa Sabre
48 VWR-6430 50 VWR-6430
49 VWR-1843 51 VWR-1843
50 VWR-6668 52 VWR-6668
53 VWR-7153
54 VWR-7168
55 VWR-7087
51Angus Boyd 56Angus Boyd
52 VWR-592 57 VWR-592
53Argent Stonecutter 58Argent Stonecutter
@@ -169,6 +174,8 @@ Jacek Antonelli
169 VWR-188 174 VWR-188
170 VWR-427 175 VWR-427
171 VWR-597 176 VWR-597
177 VWR-2448
178 VWR-3605
172Joghert LeSabre 179Joghert LeSabre
173 VWR-64 180 VWR-64
174Kage Pixel 181Kage Pixel
@@ -192,6 +199,7 @@ Michelle2 Zenovka
192 VWR-3749 199 VWR-3749
193Mm Alder 200Mm Alder
194 VWR-3777 201 VWR-3777
202 VWR-4794
195Mr Greggan 203Mr Greggan
196 VWR-445 204 VWR-445
197Nicholaz Beresford 205Nicholaz Beresford
@@ -289,6 +297,8 @@ Robin Cornelius
289 VWR-2488 297 VWR-2488
290Ryozu Kojima 298Ryozu Kojima
291 VWR-287 299 VWR-287
300Sammy Frederix
301 VWR-6186
292Scrippy Scofield 302Scrippy Scofield
293 VWR-3748 303 VWR-3748
294Seg Baphomet 304Seg Baphomet
diff --git a/linden/etc/message.xml b/linden/etc/message.xml
index 331e6bb..701d049 100644
--- a/linden/etc/message.xml
+++ b/linden/etc/message.xml
@@ -424,7 +424,7 @@
424 <key>trusted-sender</key> 424 <key>trusted-sender</key>
425 <boolean>true</boolean> 425 <boolean>true</boolean>
426 </map> 426 </map>
427 427
428 <!-- UDPDeprecated Messages --> 428 <!-- UDPDeprecated Messages -->
429 <key>ScriptRunningReply</key> 429 <key>ScriptRunningReply</key>
430 <map> 430 <map>
@@ -553,5 +553,8 @@
553 <map> 553 <map>
554 </map> 554 </map>
555 </map> 555 </map>
556
557 <key>maxQueuedEvents</key>
558 <integer>100</integer>
556 </map> 559 </map>
557</llsd> 560</llsd>
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 137b1e0..629656f 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -136,11 +136,13 @@ if standalone and platform != 'linux':
136standalone_pkgs = [ 136standalone_pkgs = [
137 'atk', 137 'atk',
138 'cairo', 138 'cairo',
139 'fontconfig',
139 'freetype2', 140 'freetype2',
140 'gdk-2.0', 141 'gdk-2.0',
141 'gdk-pixbuf-2.0', 142 'gdk-pixbuf-2.0',
142 'glib-2.0', 143 'glib-2.0',
143 'gmodule-2.0', 144 'gmodule-2.0',
145 'gthread-2.0',
144 'gtk+-2.0', 146 'gtk+-2.0',
145 'libpng', 147 'libpng',
146 'pango', 148 'pango',
@@ -303,7 +305,7 @@ for build_target in targets:
303 pkgconfig('--cflags-only-I').split()] 305 pkgconfig('--cflags-only-I').split()]
304 client_external_libs += [ 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt'] 306 client_external_libs += [ 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt']
305 else: 307 else:
306 client_external_libs += [ 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama', 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt'] 308 client_external_libs += [ 'fontconfig', 'gtk-x11-2.0', 'atk-1.0', 'gmodule-2.0', 'gdk-x11-2.0', 'gdk_pixbuf-2.0', 'pango-1.0', 'pangoft2-1.0', 'pangox-1.0', 'pangoxft-1.0', 'Xinerama', 'boost_program_options-gcc34-mt', 'boost_signals-gcc34-mt', 'boost_regex-gcc34-mt' ]
307 incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0', 309 incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0',
308 'llfreetype2', 'pango-1.0' ] 310 'llfreetype2', 'pango-1.0' ]
309 include_dirs += ['../libraries/' + system_str + '/include/' + d 311 include_dirs += ['../libraries/' + system_str + '/include/' + d
@@ -408,7 +410,7 @@ for build_target in targets:
408 410
409 base_env = Environment(CXX = compiler, 411 base_env = Environment(CXX = compiler,
410 CPPPATH = include_dirs, 412 CPPPATH = include_dirs,
411 LIBPATH = [lib_dir] + [system_lib_dir] + [havok_lib_dir], 413 LIBPATH = lib_path + [havok_lib_dir],
412 LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' ) 414 LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
413 415
414 ### Environments for various build types ### 416 ### Environments for various build types ###
@@ -474,7 +476,6 @@ for build_target in targets:
474 env['ENV']['DISTCC_HOSTS'] = hosts 476 env['ENV']['DISTCC_HOSTS'] = hosts
475 env['ENV']['USER'] = os.environ['USER'] 477 env['ENV']['USER'] = os.environ['USER']
476 env['ENV']['HOME'] = os.environ['HOME'] 478 env['ENV']['HOME'] = os.environ['HOME']
477 env['ENV']['SSH_AUTH_SOCK'] = os.environ['SSH_AUTH_SOCK']
478 479
479 if enable_colorgcc: 480 if enable_colorgcc:
480 env['ENV']['PATH'] = os.environ['PATH'] 481 env['ENV']['PATH'] = os.environ['PATH']
@@ -733,6 +734,11 @@ for build_target in targets:
733 file_suffix = '' 734 file_suffix = ''
734 if buildtype == 'debug' or buildtype == 'havok1debug': 735 if buildtype == 'debug' or buildtype == 'havok1debug':
735 file_suffix = '_debug' 736 file_suffix = '_debug'
737 boost_signals_lib = 'boost_signals-gcc33-mt-d'
738 boost_libs = [ 'boost_regex-gcc33-mt-d', boost_signals_lib ]
739 else:
740 boost_signals_lib = 'boost_signals-gcc33-mt'
741 boost_libs = [ 'boost_regex-gcc33-mt', boost_signals_lib ]
736 742
737 common_external_libs += [ 'pthread' ] 743 common_external_libs += [ 'pthread' ]
738 744
@@ -759,8 +765,8 @@ for build_target in targets:
759 internal_libs + external_libs) 765 internal_libs + external_libs)
760 766
761 # Dataserver 767 # Dataserver
762 external_libs = common_external_libs + [ 768 external_libs = common_external_libs + boost_libs + [
763 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'mysqlclient', 'tcmalloc', 'stacktrace', 769 'mysqlclient', 'tcmalloc', 'stacktrace',
764 ] 770 ]
765 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory', 771 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory',
766 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ] 772 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
@@ -782,9 +788,8 @@ for build_target in targets:
782 internal_libs + external_libs) 788 internal_libs + external_libs)
783 789
784 # Mapserver 790 # Mapserver
785 external_libs = common_external_libs + ['OSMesa16', 'kdu', 791 external_libs = common_external_libs + [ 'OSMesa16', 'kdu' ] + boost_libs + [
786 'boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'iconv', 792 'iconv', 'jpeg', 'openjpeg', 'GL', 'mysqlclient', 'png12', 'pthread', 'dl' ]
787 'jpeg', 'openjpeg', 'GL', 'mysqlclient', 'png12', 'pthread', 'dl']
788 internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic', 793 internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
789 'llxml', 'llvfs', 'llmath', 'llcommon'] 794 'llxml', 'llvfs', 'llmath', 'llcommon']
790 create_executable('mapserver/mapserver' + file_suffix, 'mapserver', 795 create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
@@ -792,8 +797,9 @@ for build_target in targets:
792 797
793 # Simulator 798 # Simulator
794 Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix) 799 Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
795 external_libs = common_external_libs + ['boost_regex-gcc33-mt', 'boost_signals-gcc33-mt', 'openjpeg', 'dl', 'kdu', 800 external_libs = common_external_libs + boost_libs + [
796 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 'png12'] 801 'openjpeg', 'dl', 'kdu', 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace', 'png12',
802 ]
797 803
798 # the order of the havok libs matters 804 # the order of the havok libs matters
799 external_libs += [ 805 external_libs += [
@@ -822,7 +828,7 @@ for build_target in targets:
822 internal_libs + external_libs) 828 internal_libs + external_libs)
823 829
824 # texture upload verifier 830 # texture upload verifier
825 external_libs = common_external_libs + ['boost_signals-gcc33-mt', 'kdu', 'openjpeg', 'png12', 'z', 'dl'] 831 external_libs = common_external_libs + [boost_signals_lib, 'kdu', 'openjpeg', 'png12', 'z', 'dl']
826 internal_libs = [ 832 internal_libs = [
827 'llimage', 833 'llimage',
828 'llimagej2coj', 834 'llimagej2coj',
@@ -855,7 +861,7 @@ for build_target in targets:
855 Depends('test/test', 'newsim/simulator' + file_suffix) 861 Depends('test/test', 'newsim/simulator' + file_suffix)
856 external_libs = common_external_libs + ['mysqlclient'] 862 external_libs = common_external_libs + ['mysqlclient']
857 if platform == 'linux': 863 if platform == 'linux':
858 external_libs += ['boost_signals-gcc33-mt'] 864 external_libs += [boost_signals_lib]
859 internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml', 865 internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml',
860 'llvfs', 'llcharacter', 'llphysics', 'llprimitive', 'llmath', 'llcommon' ] 866 'llvfs', 'llcharacter', 'llphysics', 'llprimitive', 'llmath', 'llcommon' ]
861 test_executable = 'test/test' + file_suffix 867 test_executable = 'test/test' + file_suffix
diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln
index 54bad30..452608f 100644
--- a/linden/indra/indra_complete/indra_complete_vc8.sln
+++ b/linden/indra/indra_complete/indra_complete_vc8.sln
@@ -69,6 +69,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile", "..\lscri
69 EndProjectSection 69 EndProjectSection
70EndProject 70EndProject
71 ProjectSection(ProjectDependencies) = postProject 71 ProjectSection(ProjectDependencies) = postProject
72 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
73 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
72 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 74 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
73 {FCC4483C-5B84-4944-B91F-4589A219BC0B} = {FCC4483C-5B84-4944-B91F-4589A219BC0B} 75 {FCC4483C-5B84-4944-B91F-4589A219BC0B} = {FCC4483C-5B84-4944-B91F-4589A219BC0B}
74 {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} 76 {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552}
@@ -86,11 +88,11 @@ EndProject
86 EndProjectSection 88 EndProjectSection
87EndProject 89EndProject
88 ProjectSection(ProjectDependencies) = postProject 90 ProjectSection(ProjectDependencies) = postProject
89 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
90 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} = {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} 91 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} = {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}
91 {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34} 92 {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
92 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} 93 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
93 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 94 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
95 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
94 EndProjectSection 96 EndProjectSection
95EndProject 97EndProject
96 ProjectSection(ProjectDependencies) = postProject 98 ProjectSection(ProjectDependencies) = postProject
@@ -178,9 +180,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
178EndProject 180EndProject
179Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc8.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}" 181Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc8.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
180EndProject 182EndProject
183EndProject
181Global 184Global
182 GlobalSection(SolutionConfigurationPlatforms) = preSolution 185 GlobalSection(SolutionConfigurationPlatforms) = preSolution
183 Debug|Win32 = Debug|Win32 186 Debug|Win32 = Debug|Win32
187 DebugHk460|Win32 = DebugHk460|Win32
184 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32 188 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32
185 Release|Win32 = Release|Win32 189 Release|Win32 = Release|Win32
186 ReleaseForDownload|Win32 = ReleaseForDownload|Win32 190 ReleaseForDownload|Win32 = ReleaseForDownload|Win32
@@ -189,6 +193,8 @@ Global
189 GlobalSection(ProjectConfigurationPlatforms) = postSolution 193 GlobalSection(ProjectConfigurationPlatforms) = postSolution
190 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32 194 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32
191 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32 195 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32
196 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.ActiveCfg = Debug|Win32
197 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.Build.0 = Debug|Win32
192 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 198 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
193 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 199 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
194 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32 200 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32
@@ -199,6 +205,8 @@ Global
199 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 205 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
200 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32 206 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32
201 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32 207 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32
208 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.ActiveCfg = Debug|Win32
209 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.Build.0 = Debug|Win32
202 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 210 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
203 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 211 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
204 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32 212 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32
@@ -209,6 +217,8 @@ Global
209 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 217 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
210 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32 218 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32
211 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32 219 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32
220 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.ActiveCfg = Debug|Win32
221 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.Build.0 = Debug|Win32
212 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 222 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
213 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 223 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
214 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32 224 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32
@@ -219,6 +229,8 @@ Global
219 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 229 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
220 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32 230 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32
221 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32 231 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32
232 {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.ActiveCfg = Debug|Win32
233 {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.Build.0 = Debug|Win32
222 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 234 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
223 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 235 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
224 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32 236 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32
@@ -229,6 +241,8 @@ Global
229 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 241 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
230 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32 242 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32
231 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32 243 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32
244 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.ActiveCfg = Debug|Win32
245 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.Build.0 = Debug|Win32
232 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 246 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
233 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 247 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
234 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32 248 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32
@@ -239,6 +253,8 @@ Global
239 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 253 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
240 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32 254 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32
241 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32 255 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32
256 {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.ActiveCfg = Debug|Win32
257 {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.Build.0 = Debug|Win32
242 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 258 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
243 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 259 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
244 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32 260 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32
@@ -249,6 +265,8 @@ Global
249 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 265 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
250 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32 266 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32
251 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32 267 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32
268 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.ActiveCfg = Debug|Win32
269 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.Build.0 = Debug|Win32
252 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 270 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
253 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 271 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
254 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32 272 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32
@@ -259,6 +277,8 @@ Global
259 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 277 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
260 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32 278 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32
261 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32 279 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32
280 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
281 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.Build.0 = Debug|Win32
262 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 282 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
263 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 283 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
264 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32 284 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32
@@ -269,6 +289,8 @@ Global
269 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 289 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
270 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32 290 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32
271 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32 291 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32
292 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.ActiveCfg = Debug|Win32
293 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.Build.0 = Debug|Win32
272 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 294 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
273 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 295 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
274 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32 296 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32
@@ -279,6 +301,8 @@ Global
279 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 301 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
280 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32 302 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32
281 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32 303 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32
304 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.ActiveCfg = Debug|Win32
305 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.Build.0 = Debug|Win32
282 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 306 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
283 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 307 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
284 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32 308 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32
@@ -289,6 +313,8 @@ Global
289 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 313 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
290 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32 314 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32
291 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32 315 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32
316 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.ActiveCfg = Debug|Win32
317 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.Build.0 = Debug|Win32
292 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 318 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
293 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 319 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
294 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32 320 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32
@@ -299,6 +325,8 @@ Global
299 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 325 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
300 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32 326 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32
301 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32 327 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32
328 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.ActiveCfg = Debug|Win32
329 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.Build.0 = Debug|Win32
302 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 330 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
303 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 331 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
304 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32 332 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32
@@ -309,6 +337,8 @@ Global
309 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 337 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
310 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32 338 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32
311 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32 339 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32
340 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.ActiveCfg = Debug|Win32
341 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.Build.0 = Debug|Win32
312 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 342 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
313 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 343 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
314 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32 344 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32
@@ -319,6 +349,8 @@ Global
319 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 349 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
320 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32 350 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32
321 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32 351 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32
352 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
353 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.Build.0 = Debug|Win32
322 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 354 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
323 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 355 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
324 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32 356 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32
@@ -329,6 +361,8 @@ Global
329 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 361 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
330 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32 362 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32
331 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32 363 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32
364 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.ActiveCfg = DebugMesaHeadless|Win32
365 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.Build.0 = DebugMesaHeadless|Win32
332 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32 366 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32
333 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32 367 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32
334 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32 368 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32
@@ -339,6 +373,8 @@ Global
339 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 373 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
340 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32 374 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32
341 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32 375 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32
376 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.ActiveCfg = Debug|Win32
377 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.Build.0 = Debug|Win32
342 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 378 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
343 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 379 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
344 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32 380 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32
@@ -349,6 +385,8 @@ Global
349 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 385 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
350 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32 386 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32
351 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32 387 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32
388 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.ActiveCfg = Debug|Win32
389 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.Build.0 = Debug|Win32
352 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 390 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
353 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 391 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
354 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32 392 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32
@@ -359,6 +397,8 @@ Global
359 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 397 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
360 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32 398 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32
361 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32 399 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32
400 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.ActiveCfg = Debug|Win32
401 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.Build.0 = Debug|Win32
362 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 402 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
363 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 403 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
364 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32 404 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32
@@ -369,6 +409,8 @@ Global
369 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 409 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
370 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32 410 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32
371 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32 411 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32
412 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.ActiveCfg = Debug|Win32
413 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.Build.0 = Debug|Win32
372 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 414 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
373 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 415 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
374 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32 416 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32
@@ -378,6 +420,8 @@ Global
378 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 420 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
379 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32 421 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32
380 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32 422 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32
423 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.ActiveCfg = Debug|Win32
424 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.Build.0 = Debug|Win32
381 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 425 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
382 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 426 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
383 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32 427 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32
@@ -387,6 +431,8 @@ Global
387 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 431 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
388 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32 432 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32
389 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32 433 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32
434 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.ActiveCfg = Debug|Win32
435 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.Build.0 = Debug|Win32
390 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 436 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
391 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 437 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
392 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32 438 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32
@@ -396,6 +442,8 @@ Global
396 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 442 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
397 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32 443 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32
398 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32 444 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32
445 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
446 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.Build.0 = Debug|Win32
399 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 447 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
400 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 448 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
401 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32 449 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32
@@ -405,6 +453,8 @@ Global
405 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 453 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
406 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32 454 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32
407 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32 455 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32
456 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
457 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.Build.0 = Debug|Win32
408 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 458 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
409 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 459 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
410 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32 460 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32
@@ -414,6 +464,8 @@ Global
414 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 464 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
415 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 465 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32
416 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 466 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32
467 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.ActiveCfg = Debug|Win32
468 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.Build.0 = Debug|Win32
417 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 469 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
418 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 470 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
419 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32 471 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32
@@ -423,6 +475,8 @@ Global
423 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 475 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
424 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32 476 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32
425 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32 477 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32
478 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
479 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.Build.0 = Debug|Win32
426 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 480 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
427 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 481 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
428 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32 482 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32
@@ -432,6 +486,8 @@ Global
432 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 486 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
433 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 487 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
434 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32 488 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32
489 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.ActiveCfg = Debug|Win32
490 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.Build.0 = Debug|Win32
435 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 491 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
436 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 492 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
437 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 493 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
@@ -439,6 +495,8 @@ Global
439 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 495 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
440 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32 496 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
441 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32 497 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
498 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.ActiveCfg = Debug|Win32
499 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.Build.0 = Debug|Win32
442 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 500 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
443 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 501 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
444 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32 502 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32
@@ -449,6 +507,8 @@ Global
449 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 507 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
450 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32 508 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32
451 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32 509 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32
510 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.ActiveCfg = Debug|Win32
511 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.Build.0 = Debug|Win32
452 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 512 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
453 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 513 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
454 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32 514 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32
@@ -459,6 +519,8 @@ Global
459 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 519 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
460 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32 520 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32
461 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32 521 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32
522 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
523 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.Build.0 = Debug|Win32
462 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 524 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
463 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 525 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
464 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32 526 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32
@@ -468,6 +530,8 @@ Global
468 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 530 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
469 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32 531 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32
470 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32 532 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32
533 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.ActiveCfg = Debug|Win32
534 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.Build.0 = Debug|Win32
471 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 535 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
472 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 536 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
473 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32 537 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32
@@ -478,6 +542,8 @@ Global
478 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 542 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
479 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32 543 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
480 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32 544 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
545 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.ActiveCfg = Debug|Win32
546 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.Build.0 = Debug|Win32
481 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 547 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
482 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 548 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
483 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32 549 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32
@@ -488,6 +554,8 @@ Global
488 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 554 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
489 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32 555 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32
490 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32 556 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32
557 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
558 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.Build.0 = Debug|Win32
491 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 559 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
492 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 560 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
493 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32 561 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32
@@ -498,6 +566,8 @@ Global
498 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 566 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
499 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32 567 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32
500 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32 568 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32
569 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
570 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.Build.0 = Debug|Win32
501 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 571 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
502 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 572 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
503 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32 573 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32
@@ -508,6 +578,8 @@ Global
508 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 578 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
509 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32 579 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32
510 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32 580 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32
581 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.ActiveCfg = Debug|Win32
582 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.Build.0 = Debug|Win32
511 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 583 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
512 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 584 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
513 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32 585 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32
@@ -518,6 +590,8 @@ Global
518 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 590 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
519 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32 591 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32
520 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32 592 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32
593 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.ActiveCfg = Debug|Win32
594 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.Build.0 = Debug|Win32
521 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 595 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
522 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 596 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
523 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32 597 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32
@@ -526,6 +600,18 @@ Global
526 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32 600 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32
527 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32 601 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
528 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 602 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
603 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.ActiveCfg = Debug|Win32
604 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.Build.0 = Debug|Win32
605 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.ActiveCfg = DebugHk460|Win32
606 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.Build.0 = DebugHk460|Win32
607 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.ActiveCfg = DebugHk460|Win32
608 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.Build.0 = DebugHk460|Win32
609 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.ActiveCfg = Release|Win32
610 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.Build.0 = Release|Win32
611 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
612 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
613 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
614 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
529 EndGlobalSection 615 EndGlobalSection
530 GlobalSection(SolutionProperties) = preSolution 616 GlobalSection(SolutionProperties) = preSolution
531 HideSolutionNode = FALSE 617 HideSolutionNode = FALSE
diff --git a/linden/indra/indra_complete/indra_complete_vc9.sln b/linden/indra/indra_complete/indra_complete_vc9.sln
index d7e781d..3ef987d 100644
--- a/linden/indra/indra_complete/indra_complete_vc9.sln
+++ b/linden/indra/indra_complete/indra_complete_vc9.sln
@@ -83,6 +83,7 @@ EndProject
83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B} 83 {B4B838C7-2C72-428E-BBFD-25764E659A8B} = {B4B838C7-2C72-428E-BBFD-25764E659A8B}
84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} 84 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E} = {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}
85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} 85 {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
86 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE} = {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}
86 EndProjectSection 87 EndProjectSection
87EndProject 88EndProject
88 ProjectSection(ProjectDependencies) = postProject 89 ProjectSection(ProjectDependencies) = postProject
@@ -178,9 +179,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
178EndProject 179EndProject
179Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}" 180Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb_vc8", "..\lscript\lscript_compile\lscript_compile_fb_vc9.vcproj", "{B771CF1B-E253-47BD-8B0A-6B0440CC9228}"
180EndProject 181EndProject
182EndProject
181Global 183Global
182 GlobalSection(SolutionConfigurationPlatforms) = preSolution 184 GlobalSection(SolutionConfigurationPlatforms) = preSolution
183 Debug|Win32 = Debug|Win32 185 Debug|Win32 = Debug|Win32
186 DebugHk460|Win32 = DebugHk460|Win32
184 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32 187 DebugMesaHeadless|Win32 = DebugMesaHeadless|Win32
185 Release|Win32 = Release|Win32 188 Release|Win32 = Release|Win32
186 ReleaseForDownload|Win32 = ReleaseForDownload|Win32 189 ReleaseForDownload|Win32 = ReleaseForDownload|Win32
@@ -189,6 +192,8 @@ Global
189 GlobalSection(ProjectConfigurationPlatforms) = postSolution 192 GlobalSection(ProjectConfigurationPlatforms) = postSolution
190 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32 193 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.ActiveCfg = Debug|Win32
191 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32 194 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug|Win32.Build.0 = Debug|Win32
195 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.ActiveCfg = Debug|Win32
196 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugHk460|Win32.Build.0 = Debug|Win32
192 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 197 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
193 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 198 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
194 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32 199 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Release|Win32.ActiveCfg = Release|Win32
@@ -199,6 +204,8 @@ Global
199 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 204 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
200 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32 205 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.ActiveCfg = Debug|Win32
201 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32 206 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Debug|Win32.Build.0 = Debug|Win32
207 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.ActiveCfg = Debug|Win32
208 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugHk460|Win32.Build.0 = Debug|Win32
202 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 209 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
203 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 210 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
204 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32 211 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.Release|Win32.ActiveCfg = Release|Win32
@@ -209,6 +216,8 @@ Global
209 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 216 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
210 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32 217 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.ActiveCfg = Debug|Win32
211 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32 218 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Debug|Win32.Build.0 = Debug|Win32
219 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.ActiveCfg = Debug|Win32
220 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugHk460|Win32.Build.0 = Debug|Win32
212 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 221 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
213 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 222 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
214 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32 223 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.Release|Win32.ActiveCfg = Release|Win32
@@ -219,6 +228,8 @@ Global
219 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 228 {E5D94794-5671-4BD6-A16D-26EC18F3DB34}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
220 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32 229 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.ActiveCfg = Debug|Win32
221 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32 230 {D37774F4-253D-4760-BF64-372A943224A1}.Debug|Win32.Build.0 = Debug|Win32
231 {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.ActiveCfg = Debug|Win32
232 {D37774F4-253D-4760-BF64-372A943224A1}.DebugHk460|Win32.Build.0 = Debug|Win32
222 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 233 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
223 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 234 {D37774F4-253D-4760-BF64-372A943224A1}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
224 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32 235 {D37774F4-253D-4760-BF64-372A943224A1}.Release|Win32.ActiveCfg = Release|Win32
@@ -229,6 +240,8 @@ Global
229 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 240 {D37774F4-253D-4760-BF64-372A943224A1}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
230 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32 241 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.ActiveCfg = Debug|Win32
231 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32 242 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Debug|Win32.Build.0 = Debug|Win32
243 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.ActiveCfg = Debug|Win32
244 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugHk460|Win32.Build.0 = Debug|Win32
232 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 245 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
233 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 246 {A5470DA6-0C3A-4602-B930-43DB25511A59}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
234 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32 247 {A5470DA6-0C3A-4602-B930-43DB25511A59}.Release|Win32.ActiveCfg = Release|Win32
@@ -239,6 +252,8 @@ Global
239 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 252 {A5470DA6-0C3A-4602-B930-43DB25511A59}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
240 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32 253 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.ActiveCfg = Debug|Win32
241 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32 254 {DE55D666-6A3D-476C-937F-109269B83681}.Debug|Win32.Build.0 = Debug|Win32
255 {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.ActiveCfg = Debug|Win32
256 {DE55D666-6A3D-476C-937F-109269B83681}.DebugHk460|Win32.Build.0 = Debug|Win32
242 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 257 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
243 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 258 {DE55D666-6A3D-476C-937F-109269B83681}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
244 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32 259 {DE55D666-6A3D-476C-937F-109269B83681}.Release|Win32.ActiveCfg = Release|Win32
@@ -249,6 +264,8 @@ Global
249 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 264 {DE55D666-6A3D-476C-937F-109269B83681}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
250 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32 265 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.ActiveCfg = Debug|Win32
251 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32 266 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Debug|Win32.Build.0 = Debug|Win32
267 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.ActiveCfg = Debug|Win32
268 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugHk460|Win32.Build.0 = Debug|Win32
252 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 269 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
253 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 270 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
254 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32 271 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.Release|Win32.ActiveCfg = Release|Win32
@@ -259,6 +276,8 @@ Global
259 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 276 {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
260 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32 277 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.ActiveCfg = Debug|Win32
261 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32 278 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Debug|Win32.Build.0 = Debug|Win32
279 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
280 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugHk460|Win32.Build.0 = Debug|Win32
262 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 281 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
263 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 282 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
264 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32 283 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.Release|Win32.ActiveCfg = Release|Win32
@@ -269,6 +288,8 @@ Global
269 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 288 {FCC4483C-5B84-4944-B91F-4589A219BC0B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
270 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32 289 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.ActiveCfg = Debug|Win32
271 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32 290 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Debug|Win32.Build.0 = Debug|Win32
291 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.ActiveCfg = Debug|Win32
292 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugHk460|Win32.Build.0 = Debug|Win32
272 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 293 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
273 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 294 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
274 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32 295 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.Release|Win32.ActiveCfg = Release|Win32
@@ -279,6 +300,8 @@ Global
279 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 300 {5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
280 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32 301 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.ActiveCfg = Debug|Win32
281 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32 302 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Debug|Win32.Build.0 = Debug|Win32
303 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.ActiveCfg = Debug|Win32
304 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugHk460|Win32.Build.0 = Debug|Win32
282 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 305 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
283 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 306 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
284 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32 307 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.Release|Win32.ActiveCfg = Release|Win32
@@ -289,6 +312,8 @@ Global
289 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 312 {93B2BA29-FBE9-4376-92C1-6108DCFE09D3}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
290 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32 313 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.ActiveCfg = Debug|Win32
291 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32 314 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Debug|Win32.Build.0 = Debug|Win32
315 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.ActiveCfg = Debug|Win32
316 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugHk460|Win32.Build.0 = Debug|Win32
292 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 317 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
293 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 318 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
294 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32 319 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.Release|Win32.ActiveCfg = Release|Win32
@@ -299,6 +324,8 @@ Global
299 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 324 {2ADE3C14-94C4-40BF-B033-70F3C954EE90}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
300 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32 325 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.ActiveCfg = Debug|Win32
301 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32 326 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Debug|Win32.Build.0 = Debug|Win32
327 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.ActiveCfg = Debug|Win32
328 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugHk460|Win32.Build.0 = Debug|Win32
302 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 329 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
303 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 330 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
304 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32 331 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.Release|Win32.ActiveCfg = Release|Win32
@@ -309,6 +336,8 @@ Global
309 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 336 {328D1968-924F-4863-AAE8-5F9A95BA68E5}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
310 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32 337 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.ActiveCfg = Debug|Win32
311 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32 338 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Debug|Win32.Build.0 = Debug|Win32
339 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.ActiveCfg = Debug|Win32
340 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugHk460|Win32.Build.0 = Debug|Win32
312 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 341 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
313 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 342 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
314 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32 343 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.Release|Win32.ActiveCfg = Release|Win32
@@ -319,6 +348,8 @@ Global
319 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 348 {E6F4CF1B-6109-4CA8-B58D-87FA936CDE08}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
320 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32 349 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.ActiveCfg = Debug|Win32
321 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32 350 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Debug|Win32.Build.0 = Debug|Win32
351 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
352 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugHk460|Win32.Build.0 = Debug|Win32
322 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 353 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
323 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 354 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
324 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32 355 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.Release|Win32.ActiveCfg = Release|Win32
@@ -329,6 +360,8 @@ Global
329 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 360 {B4B838C7-2C72-428E-BBFD-25764E659A8B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
330 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32 361 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.ActiveCfg = Debug|Win32
331 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32 362 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Debug|Win32.Build.0 = Debug|Win32
363 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.ActiveCfg = DebugMesaHeadless|Win32
364 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugHk460|Win32.Build.0 = DebugMesaHeadless|Win32
332 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32 365 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.ActiveCfg = DebugMesaHeadless|Win32
333 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32 366 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.DebugMesaHeadless|Win32.Build.0 = DebugMesaHeadless|Win32
334 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32 367 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.Release|Win32.ActiveCfg = Release|Win32
@@ -339,6 +372,8 @@ Global
339 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 372 {B5B53617-416F-404A-BF10-22EBCCA0E4FB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
340 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32 373 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.ActiveCfg = Debug|Win32
341 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32 374 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Debug|Win32.Build.0 = Debug|Win32
375 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.ActiveCfg = Debug|Win32
376 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugHk460|Win32.Build.0 = Debug|Win32
342 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 377 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
343 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 378 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
344 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32 379 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.Release|Win32.ActiveCfg = Release|Win32
@@ -349,6 +384,8 @@ Global
349 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 384 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
350 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32 385 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.ActiveCfg = Debug|Win32
351 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32 386 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Debug|Win32.Build.0 = Debug|Win32
387 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.ActiveCfg = Debug|Win32
388 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugHk460|Win32.Build.0 = Debug|Win32
352 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 389 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
353 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 390 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
354 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32 391 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.Release|Win32.ActiveCfg = Release|Win32
@@ -359,6 +396,8 @@ Global
359 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 396 {F882263E-4F2A-43D9-A45A-FA4C8EC66552}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
360 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32 397 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.ActiveCfg = Debug|Win32
361 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32 398 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Debug|Win32.Build.0 = Debug|Win32
399 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.ActiveCfg = Debug|Win32
400 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugHk460|Win32.Build.0 = Debug|Win32
362 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 401 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
363 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 402 {44CE6D82-7320-4609-8FC3-5965C19F4808}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
364 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32 403 {44CE6D82-7320-4609-8FC3-5965C19F4808}.Release|Win32.ActiveCfg = Release|Win32
@@ -369,6 +408,8 @@ Global
369 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 408 {44CE6D82-7320-4609-8FC3-5965C19F4808}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
370 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32 409 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.ActiveCfg = Debug|Win32
371 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32 410 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Debug|Win32.Build.0 = Debug|Win32
411 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.ActiveCfg = Debug|Win32
412 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugHk460|Win32.Build.0 = Debug|Win32
372 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 413 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
373 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 414 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
374 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32 415 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.Release|Win32.ActiveCfg = Release|Win32
@@ -379,6 +420,8 @@ Global
379 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 420 {D0FDC1C3-A589-40F2-ABCA-A84FF3835624}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
380 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32 421 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.ActiveCfg = Debug|Win32
381 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32 422 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Debug|Win32.Build.0 = Debug|Win32
423 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.ActiveCfg = Debug|Win32
424 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugHk460|Win32.Build.0 = Debug|Win32
382 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 425 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
383 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 426 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
384 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32 427 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.Release|Win32.ActiveCfg = Release|Win32
@@ -389,6 +432,8 @@ Global
389 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 432 {C6CA76F5-DCB4-4789-BBA7-43D11EE7C8E2}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
390 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32 433 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.ActiveCfg = Debug|Win32
391 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32 434 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Debug|Win32.Build.0 = Debug|Win32
435 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.ActiveCfg = Debug|Win32
436 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugHk460|Win32.Build.0 = Debug|Win32
392 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 437 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
393 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 438 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
394 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32 439 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.Release|Win32.ActiveCfg = Release|Win32
@@ -399,6 +444,8 @@ Global
399 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 444 {A5504A1E-8BA4-45D2-8144-1B6937E37E98}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
400 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32 445 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.ActiveCfg = Debug|Win32
401 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32 446 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Debug|Win32.Build.0 = Debug|Win32
447 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
448 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugHk460|Win32.Build.0 = Debug|Win32
402 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 449 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
403 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 450 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
404 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32 451 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.Release|Win32.ActiveCfg = Release|Win32
@@ -408,6 +455,8 @@ Global
408 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 455 {777F38BE-2DFE-4051-9AAD-2832ABC474CC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
409 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32 456 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.ActiveCfg = Debug|Win32
410 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32 457 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Debug|Win32.Build.0 = Debug|Win32
458 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
459 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugHk460|Win32.Build.0 = Debug|Win32
411 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 460 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
412 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 461 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
413 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32 462 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.ActiveCfg = Release|Win32
@@ -417,6 +466,8 @@ Global
417 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 466 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
418 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 467 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32
419 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 468 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32
469 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.ActiveCfg = Debug|Win32
470 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugHk460|Win32.Build.0 = Debug|Win32
420 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 471 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
421 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 472 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
422 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32 473 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release|Win32.ActiveCfg = Release|Win32
@@ -426,6 +477,8 @@ Global
426 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 477 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
427 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32 478 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.ActiveCfg = Debug|Win32
428 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32 479 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Debug|Win32.Build.0 = Debug|Win32
480 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
481 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugHk460|Win32.Build.0 = Debug|Win32
429 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 482 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
430 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 483 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
431 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32 484 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.Release|Win32.ActiveCfg = Release|Win32
@@ -435,6 +488,8 @@ Global
435 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 488 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
436 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 489 {E928F33B-E090-4FA8-818B-6B5D8B0F1F4B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
437 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32 490 {F56CA265-93E9-4068-8A67-8B104C876D70}.Debug|Win32.ActiveCfg = Debug|Win32
491 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.ActiveCfg = Debug|Win32
492 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugHk460|Win32.Build.0 = Debug|Win32
438 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 493 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
439 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 494 {F56CA265-93E9-4068-8A67-8B104C876D70}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
440 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32 495 {F56CA265-93E9-4068-8A67-8B104C876D70}.Release|Win32.ActiveCfg = Release|Win32
@@ -442,6 +497,8 @@ Global
442 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 497 {F56CA265-93E9-4068-8A67-8B104C876D70}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
443 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32 498 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.ActiveCfg = Debug|Win32
444 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32 499 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Debug|Win32.Build.0 = Debug|Win32
500 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.ActiveCfg = Debug|Win32
501 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugHk460|Win32.Build.0 = Debug|Win32
445 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 502 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
446 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 503 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
447 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32 504 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.Release|Win32.ActiveCfg = Release|Win32
@@ -452,6 +509,8 @@ Global
452 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 509 {9D0C7E02-6506-4EE7-BC5C-75671D28D594}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
453 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32 510 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.ActiveCfg = Debug|Win32
454 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32 511 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Debug|Win32.Build.0 = Debug|Win32
512 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.ActiveCfg = Debug|Win32
513 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugHk460|Win32.Build.0 = Debug|Win32
455 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 514 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
456 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 515 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
457 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32 516 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.Release|Win32.ActiveCfg = Release|Win32
@@ -462,6 +521,8 @@ Global
462 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 521 {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
463 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32 522 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.ActiveCfg = Debug|Win32
464 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32 523 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Debug|Win32.Build.0 = Debug|Win32
524 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
525 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugHk460|Win32.Build.0 = Debug|Win32
465 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 526 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
466 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 527 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
467 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32 528 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.Release|Win32.ActiveCfg = Release|Win32
@@ -471,6 +532,8 @@ Global
471 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 532 {BBAA6588-CA96-4A87-A988-B02270B8D02B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
472 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32 533 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.ActiveCfg = Debug|Win32
473 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32 534 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Debug|Win32.Build.0 = Debug|Win32
535 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.ActiveCfg = Debug|Win32
536 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugHk460|Win32.Build.0 = Debug|Win32
474 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 537 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
475 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 538 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
476 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32 539 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.Release|Win32.ActiveCfg = Release|Win32
@@ -481,6 +544,8 @@ Global
481 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 544 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
482 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32 545 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.ActiveCfg = Debug|Win32
483 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32 546 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Debug|Win32.Build.0 = Debug|Win32
547 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.ActiveCfg = Debug|Win32
548 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugHk460|Win32.Build.0 = Debug|Win32
484 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 549 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
485 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 550 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
486 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32 551 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.Release|Win32.ActiveCfg = Release|Win32
@@ -491,6 +556,8 @@ Global
491 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 556 {6AEE004D-BFE8-4082-B4D3-E51163B01EEB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
492 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32 557 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.ActiveCfg = Debug|Win32
493 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32 558 {076DD042-2E58-42EA-9401-53210B65C1FC}.Debug|Win32.Build.0 = Debug|Win32
559 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.ActiveCfg = Debug|Win32
560 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugHk460|Win32.Build.0 = Debug|Win32
494 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 561 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
495 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 562 {076DD042-2E58-42EA-9401-53210B65C1FC}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
496 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32 563 {076DD042-2E58-42EA-9401-53210B65C1FC}.Release|Win32.ActiveCfg = Release|Win32
@@ -501,6 +568,8 @@ Global
501 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 568 {076DD042-2E58-42EA-9401-53210B65C1FC}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
502 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32 569 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.ActiveCfg = Debug|Win32
503 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32 570 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Debug|Win32.Build.0 = Debug|Win32
571 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.ActiveCfg = Debug|Win32
572 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugHk460|Win32.Build.0 = Debug|Win32
504 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 573 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
505 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 574 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
506 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32 575 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.Release|Win32.ActiveCfg = Release|Win32
@@ -511,6 +580,8 @@ Global
511 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 580 {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
512 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32 581 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.ActiveCfg = Debug|Win32
513 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32 582 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Debug|Win32.Build.0 = Debug|Win32
583 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.ActiveCfg = Debug|Win32
584 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugHk460|Win32.Build.0 = Debug|Win32
514 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 585 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
515 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 586 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
516 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32 587 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.Release|Win32.ActiveCfg = Release|Win32
@@ -521,6 +592,8 @@ Global
521 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 592 {4C8D64D5-649F-481E-96BE-EF1E82A77ACB}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
522 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32 593 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.ActiveCfg = Debug|Win32
523 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32 594 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Debug|Win32.Build.0 = Debug|Win32
595 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.ActiveCfg = Debug|Win32
596 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugHk460|Win32.Build.0 = Debug|Win32
524 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 597 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32
525 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 598 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32
526 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32 599 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.Release|Win32.ActiveCfg = Release|Win32
@@ -529,6 +602,18 @@ Global
529 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32 602 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseForDownload|Win32.Build.0 = Release|Win32
530 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32 603 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32
531 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32 604 {B771CF1B-E253-47BD-8B0A-6B0440CC9228}.ReleaseNoOpt|Win32.Build.0 = Release|Win32
605 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.ActiveCfg = Debug|Win32
606 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Debug|Win32.Build.0 = Debug|Win32
607 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.ActiveCfg = DebugHk460|Win32
608 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugHk460|Win32.Build.0 = DebugHk460|Win32
609 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.ActiveCfg = DebugHk460|Win32
610 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.DebugMesaHeadless|Win32.Build.0 = DebugHk460|Win32
611 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.ActiveCfg = Release|Win32
612 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.Release|Win32.Build.0 = Release|Win32
613 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32
614 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseForDownload|Win32.Build.0 = Release|Win32
615 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32
616 {020311F7-3DAB-4D93-9CE5-6D3926FD15FE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32
532 EndGlobalSection 617 EndGlobalSection
533 GlobalSection(SolutionProperties) = preSolution 618 GlobalSection(SolutionProperties) = preSolution
534 HideSolutionNode = FALSE 619 HideSolutionNode = FALSE
diff --git a/linden/indra/lib/python/indra/base/llsd.py b/linden/indra/lib/python/indra/base/llsd.py
index 26ac3a2..cd23551 100644
--- a/linden/indra/lib/python/indra/base/llsd.py
+++ b/linden/indra/lib/python/indra/base/llsd.py
@@ -218,6 +218,78 @@ class LLSDXMLFormatter(object):
218def format_xml(something): 218def format_xml(something):
219 return LLSDXMLFormatter().format(something) 219 return LLSDXMLFormatter().format(something)
220 220
221class LLSDXMLPrettyFormatter(LLSDXMLFormatter):
222 def __init__(self, indent_atom = None):
223 # Call the super class constructor so that we have the type map
224 super(LLSDXMLPrettyFormatter, self).__init__()
225
226 # Override the type map to use our specialized formatters to
227 # emit the pretty output.
228 self.type_map[list] = self.PRETTY_ARRAY
229 self.type_map[tuple] = self.PRETTY_ARRAY
230 self.type_map[types.GeneratorType] = self.PRETTY_ARRAY,
231 self.type_map[dict] = self.PRETTY_MAP
232
233 # Private data used for indentation.
234 self._indent_level = 1
235 if indent_atom is None:
236 self._indent_atom = ' '
237 else:
238 self._indent_atom = indent_atom
239
240 def _indent(self):
241 "Return an indentation based on the atom and indentation level."
242 return self._indent_atom * self._indent_level
243
244 def PRETTY_ARRAY(self, v):
245 rv = []
246 rv.append('<array>\n')
247 self._indent_level = self._indent_level + 1
248 rv.extend(["%s%s\n" %
249 (self._indent(),
250 self.generate(item))
251 for item in v])
252 self._indent_level = self._indent_level - 1
253 rv.append(self._indent())
254 rv.append('</array>')
255 return ''.join(rv)
256
257 def PRETTY_MAP(self, v):
258 rv = []
259 rv.append('<map>\n')
260 self._indent_level = self._indent_level + 1
261 keys = v.keys()
262 keys.sort()
263 rv.extend(["%s%s\n%s%s\n" %
264 (self._indent(),
265 self.elt('key', key),
266 self._indent(),
267 self.generate(v[key]))
268 for key in keys])
269 self._indent_level = self._indent_level - 1
270 rv.append(self._indent())
271 rv.append('</map>')
272 return ''.join(rv)
273
274 def format(self, something):
275 data = []
276 data.append('<?xml version="1.0" ?>\n<llsd>')
277 data.append(self.generate(something))
278 data.append('</llsd>\n')
279 return '\n'.join(data)
280
281def format_pretty_xml(something):
282 """@brief Serialize a python object as 'pretty' llsd xml.
283
284 The output conforms to the LLSD DTD, unlike the output from the
285 standard python xml.dom DOM::toprettyxml() method which does not
286 preserve significant whitespace.
287 This function is not necessarily suited for serializing very large
288 objects. It is not optimized by the cllsd module, and sorts on
289 dict (llsd map) keys alphabetically to ease human reading.
290 """
291 return LLSDXMLPrettyFormatter().format(something)
292
221class LLSDNotationFormatter(object): 293class LLSDNotationFormatter(object):
222 def __init__(self): 294 def __init__(self):
223 self.type_map = { 295 self.type_map = {
@@ -829,6 +901,7 @@ class LLSD(object):
829 901
830 parse = staticmethod(parse) 902 parse = staticmethod(parse)
831 toXML = staticmethod(format_xml) 903 toXML = staticmethod(format_xml)
904 toPrettyXML = staticmethod(format_pretty_xml)
832 toBinary = staticmethod(format_binary) 905 toBinary = staticmethod(format_binary)
833 toNotation = staticmethod(format_notation) 906 toNotation = staticmethod(format_notation)
834 907
@@ -842,6 +915,16 @@ try:
842except: 915except:
843 print "Couldn't import mulib.stacked, not registering LLSD converters" 916 print "Couldn't import mulib.stacked, not registering LLSD converters"
844else: 917else:
918 def llsd_convert_json(llsd_stuff, request):
919 callback = request.get_header('callback')
920 if callback is not None:
921 ## See Yahoo's ajax documentation for information about using this
922 ## callback style of programming
923 ## http://developer.yahoo.com/common/json.html#callbackparam
924 req.write("%s(%s)" % (callback, simplejson.dumps(llsd_stuff)))
925 else:
926 req.write(simplejson.dumps(llsd_stuff))
927
845 def llsd_convert_xml(llsd_stuff, request): 928 def llsd_convert_xml(llsd_stuff, request):
846 request.write(format_xml(llsd_stuff)) 929 request.write(format_xml(llsd_stuff))
847 930
@@ -849,6 +932,8 @@ else:
849 request.write(format_binary(llsd_stuff)) 932 request.write(format_binary(llsd_stuff))
850 933
851 for typ in [LLSD, dict, list, tuple, str, int, float, bool, unicode, type(None)]: 934 for typ in [LLSD, dict, list, tuple, str, int, float, bool, unicode, type(None)]:
935 stacked.add_producer(typ, llsd_convert_json, 'application/json')
936
852 stacked.add_producer(typ, llsd_convert_xml, 'application/llsd+xml') 937 stacked.add_producer(typ, llsd_convert_xml, 'application/llsd+xml')
853 stacked.add_producer(typ, llsd_convert_xml, 'application/xml') 938 stacked.add_producer(typ, llsd_convert_xml, 'application/xml')
854 stacked.add_producer(typ, llsd_convert_xml, 'text/xml') 939 stacked.add_producer(typ, llsd_convert_xml, 'text/xml')
diff --git a/linden/indra/lib/python/indra/ipc/llsdhttp.py b/linden/indra/lib/python/indra/ipc/llsdhttp.py
index 378c1c2..24cad61 100644
--- a/linden/indra/lib/python/indra/ipc/llsdhttp.py
+++ b/linden/indra/lib/python/indra/ipc/llsdhttp.py
@@ -34,7 +34,7 @@ from indra.base import llsd
34 34
35from eventlet import httpc 35from eventlet import httpc
36 36
37suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/xml+llsd') 37suite = httpc.HttpSuite(llsd.format_xml, llsd.parse, 'application/llsd+xml')
38delete = suite.delete 38delete = suite.delete
39delete_ = suite.delete_ 39delete_ = suite.delete_
40get = suite.get 40get = suite.get
diff --git a/linden/indra/lib/python/indra/util/named_query.py b/linden/indra/lib/python/indra/util/named_query.py
index c52bfde..680d1f9 100644
--- a/linden/indra/lib/python/indra/util/named_query.py
+++ b/linden/indra/lib/python/indra/util/named_query.py
@@ -47,6 +47,9 @@ except NameError:
47from indra.base import llsd 47from indra.base import llsd
48from indra.base import config 48from indra.base import config
49 49
50NQ_FILE_SUFFIX = config.get('named-query-file-suffix', '')
51NQ_FILE_SUFFIX_LEN = len(NQ_FILE_SUFFIX)
52
50_g_named_manager = None 53_g_named_manager = None
51 54
52def _init_g_named_manager(sql_dir = None): 55def _init_g_named_manager(sql_dir = None):
@@ -98,6 +101,9 @@ class NamedQuery(object):
98 a path to a file containing an llsd named query document.""" 101 a path to a file containing an llsd named query document."""
99 self._stat_interval_seconds = 5 # 5 seconds 102 self._stat_interval_seconds = 5 # 5 seconds
100 self._name = name 103 self._name = name
104 if (filename is not None) \
105 and (NQ_FILE_SUFFIX != filename[-NQ_FILE_SUFFIX_LEN:]):
106 filename = filename + NQ_FILE_SUFFIX
101 self._location = filename 107 self._location = filename
102 self._alternative = dict() 108 self._alternative = dict()
103 self._last_mod_time = 0 109 self._last_mod_time = 0
diff --git a/linden/indra/llaudio/audioengine.cpp b/linden/indra/llaudio/audioengine.cpp
index 3e1fdf8..021c940 100644
--- a/linden/indra/llaudio/audioengine.cpp
+++ b/linden/indra/llaudio/audioengine.cpp
@@ -60,6 +60,7 @@ const F32 MAX_CURRENT_TRANSFER_TIME = 60.f;
60 60
61LLAudioEngine::LLAudioEngine() 61LLAudioEngine::LLAudioEngine()
62{ 62{
63 setDefaults();
63} 64}
64 65
65 66
@@ -68,30 +69,42 @@ LLAudioEngine::~LLAudioEngine()
68} 69}
69 70
70 71
71BOOL LLAudioEngine::init(const S32 num_channels, void* userdata) 72void LLAudioEngine::setDefaults()
72{ 73{
73 mMuted = FALSE; 74 mMaxWindGain = 1.f;
74 mMasterGain = 1.f;
75 mInternetStreamGain = 0.125f;
76 mUserData = userdata;
77 mLastStatus = 0;
78 75
79 mNumChannels = num_channels; 76 mListenerp = NULL;
80
81 77
82 mMaxWindGain = 1.0; 78 mMuted = FALSE;
79 mUserData = NULL;
80
81 mLastStatus = 0;
83 82
83 mNumChannels = 0;
84 mEnableWind = FALSE; 84 mEnableWind = FALSE;
85 85
86 S32 i; 86 S32 i;
87 for (i = 0; i < MAX_BUFFERS; i++) 87 for (i = 0; i < MAX_CHANNELS; i++)
88 {
89 mBuffers[i] = NULL;
90 }
91 for (i = 0; i < num_channels; i++)
92 { 88 {
93 mChannels[i] = NULL; 89 mChannels[i] = NULL;
94 } 90 }
91 for (i = 0; i < MAX_BUFFERS; i++)
92 {
93 mBuffers[i] = NULL;
94 }
95
96 mMasterGain = 1.f;
97 mInternetStreamGain = 0.125f;
98 mNextWindUpdate = 0.f;
99}
100
101
102BOOL LLAudioEngine::init(const S32 num_channels, void* userdata)
103{
104 setDefaults();
105
106 mNumChannels = num_channels;
107 mUserData = userdata;
95 108
96 allocateListener(); 109 allocateListener();
97 110
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h
index ac84b77..8994703 100644
--- a/linden/indra/llaudio/audioengine.h
+++ b/linden/indra/llaudio/audioengine.h
@@ -233,6 +233,9 @@ protected:
233 F32 mNextWindUpdate; 233 F32 mNextWindUpdate;
234 234
235 LLFrameTimer mWindUpdateTimer; 235 LLFrameTimer mWindUpdateTimer;
236
237private:
238 void setDefaults();
236}; 239};
237 240
238 241
diff --git a/linden/indra/llaudio/audioengine_fmod.cpp b/linden/indra/llaudio/audioengine_fmod.cpp
index 0fb5146..271074e 100644
--- a/linden/indra/llaudio/audioengine_fmod.cpp
+++ b/linden/indra/llaudio/audioengine_fmod.cpp
@@ -117,16 +117,16 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
117 // Reserve one extra channel for the http stream. 117 // Reserve one extra channel for the http stream.
118 if (!FSOUND_SetMinHardwareChannels(num_channels + 1)) 118 if (!FSOUND_SetMinHardwareChannels(num_channels + 1))
119 { 119 {
120 llwarns<< "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; 120 LL_WARNS("AppInit") << "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
121 } 121 }
122 122
123 llinfos << "LLAudioEngine_FMOD::init() initializing FMOD" << llendl; 123 LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() initializing FMOD" << LL_ENDL;
124 124
125 F32 version = FSOUND_GetVersion(); 125 F32 version = FSOUND_GetVersion();
126 if (version < FMOD_VERSION) 126 if (version < FMOD_VERSION)
127 { 127 {
128 llwarns << "Error : You are using the wrong FMOD version (" << version 128 LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version
129 << ")! You should be using FMOD " << FMOD_VERSION << llendl; 129 << ")! You should be using FMOD " << FMOD_VERSION << LL_ENDL;
130 //return FALSE; 130 //return FALSE;
131 } 131 }
132 132
@@ -140,8 +140,8 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
140 // between minimized and not-focused states. 140 // between minimized and not-focused states.
141 if (!FSOUND_SetHWND(userdata)) 141 if (!FSOUND_SetHWND(userdata))
142 { 142 {
143 llwarns << "Error setting FMOD window: " 143 LL_WARNS("AppInit") << "Error setting FMOD window: "
144 << FMOD_ErrorString(FSOUND_GetError()) << llendl; 144 << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
145 return FALSE; 145 return FALSE;
146 } 146 }
147 // Play audio when we don't have focus. 147 // Play audio when we don't have focus.
@@ -159,7 +159,7 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
159 // otherwise valgrind will fall over on FMOD's MMX detection 159 // otherwise valgrind will fall over on FMOD's MMX detection
160 if (getenv("LL_VALGRIND")) /*Flawfinder: ignore*/ 160 if (getenv("LL_VALGRIND")) /*Flawfinder: ignore*/
161 { 161 {
162 llinfos << "Pacifying valgrind in FMOD init." << llendl; 162 LL_INFOS("AppInit") << "Pacifying valgrind in FMOD init." << LL_ENDL;
163 FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU); 163 FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU);
164 } 164 }
165 165
@@ -175,58 +175,58 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
175 if (!audio_ok) 175 if (!audio_ok)
176 if (NULL == getenv("LL_BAD_ESD")) /*Flawfinder: ignore*/ 176 if (NULL == getenv("LL_BAD_ESD")) /*Flawfinder: ignore*/
177 { 177 {
178 llinfos << "Trying ESD audio output..." << llendl; 178 LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL;
179 if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) && 179 if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) &&
180 FSOUND_Init(44100, num_channels, fmod_flags)) 180 FSOUND_Init(44100, num_channels, fmod_flags))
181 { 181 {
182 llinfos << "ESD audio output initialized OKAY" 182 LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY"
183 << llendl; 183 << LL_ENDL;
184 audio_ok = TRUE; 184 audio_ok = TRUE;
185 } else { 185 } else {
186 llwarns << "ESD audio output FAILED to initialize: " 186 LL_WARNS("AppInit") << "ESD audio output FAILED to initialize: "
187 << FMOD_ErrorString(FSOUND_GetError()) << llendl; 187 << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
188 } 188 }
189 } else { 189 } else {
190 llinfos << "ESD audio output SKIPPED" << llendl; 190 LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL;
191 } 191 }
192 192
193 if (!audio_ok) 193 if (!audio_ok)
194 if (NULL == getenv("LL_BAD_OSS")) /*Flawfinder: ignore*/ 194 if (NULL == getenv("LL_BAD_OSS")) /*Flawfinder: ignore*/
195 { 195 {
196 llinfos << "Trying OSS audio output..." << llendl; 196 LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL;
197 if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) && 197 if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) &&
198 FSOUND_Init(44100, num_channels, fmod_flags)) 198 FSOUND_Init(44100, num_channels, fmod_flags))
199 { 199 {
200 llinfos << "OSS audio output initialized OKAY" << llendl; 200 LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
201 audio_ok = TRUE; 201 audio_ok = TRUE;
202 } else { 202 } else {
203 llwarns << "OSS audio output FAILED to initialize: " 203 LL_WARNS("AppInit") << "OSS audio output FAILED to initialize: "
204 << FMOD_ErrorString(FSOUND_GetError()) << llendl; 204 << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
205 } 205 }
206 } else { 206 } else {
207 llinfos << "OSS audio output SKIPPED" << llendl; 207 LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
208 } 208 }
209 209
210 if (!audio_ok) 210 if (!audio_ok)
211 if (NULL == getenv("LL_BAD_ALSA")) /*Flawfinder: ignore*/ 211 if (NULL == getenv("LL_BAD_ALSA")) /*Flawfinder: ignore*/
212 { 212 {
213 llinfos << "Trying ALSA audio output..." << llendl; 213 LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
214 if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) && 214 if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) &&
215 FSOUND_Init(44100, num_channels, fmod_flags)) 215 FSOUND_Init(44100, num_channels, fmod_flags))
216 { 216 {
217 llinfos << "ALSA audio output initialized OKAY" << llendl; 217 LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
218 audio_ok = TRUE; 218 audio_ok = TRUE;
219 } else { 219 } else {
220 llwarns << "ALSA audio output FAILED to initialize: " 220 LL_WARNS("AppInit") << "ALSA audio output FAILED to initialize: "
221 << FMOD_ErrorString(FSOUND_GetError()) << llendl; 221 << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
222 } 222 }
223 } else { 223 } else {
224 llinfos << "OSS audio output SKIPPED" << llendl; 224 LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
225 } 225 }
226 226
227 if (!audio_ok) 227 if (!audio_ok)
228 { 228 {
229 llwarns << "Overall audio init failure." << llendl; 229 LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
230 return FALSE; 230 return FALSE;
231 } 231 }
232 232
@@ -239,11 +239,11 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
239 // ended up with, for QA purposes. 239 // ended up with, for QA purposes.
240 switch (FSOUND_GetOutput()) 240 switch (FSOUND_GetOutput())
241 { 241 {
242 case FSOUND_OUTPUT_NOSOUND: llinfos << "Audio output: NoSound" << llendl; break; 242 case FSOUND_OUTPUT_NOSOUND: LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
243 case FSOUND_OUTPUT_OSS: llinfos << "Audio output: OSS" << llendl; break; 243 case FSOUND_OUTPUT_OSS: LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
244 case FSOUND_OUTPUT_ESD: llinfos << "Audio output: ESD" << llendl; break; 244 case FSOUND_OUTPUT_ESD: LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break;
245 case FSOUND_OUTPUT_ALSA: llinfos << "Audio output: ALSA" << llendl; break; 245 case FSOUND_OUTPUT_ALSA: LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
246 default: llinfos << "Audio output: Unknown!" << llendl; break; 246 default: LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
247 }; 247 };
248 248
249#else // LL_LINUX 249#else // LL_LINUX
@@ -251,8 +251,8 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
251 // initialize the FMOD engine 251 // initialize the FMOD engine
252 if (!FSOUND_Init(44100, num_channels, fmod_flags)) 252 if (!FSOUND_Init(44100, num_channels, fmod_flags))
253 { 253 {
254 llwarns << "Error initializing FMOD: " 254 LL_WARNS("AppInit") << "Error initializing FMOD: "
255 << FMOD_ErrorString(FSOUND_GetError()) << llendl; 255 << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
256 return FALSE; 256 return FALSE;
257 } 257 }
258 258
@@ -260,7 +260,7 @@ BOOL LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
260 260
261 initInternetStream(); 261 initInternetStream();
262 262
263 llinfos << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << llendl; 263 LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << LL_ENDL;
264 264
265 mInited = TRUE; 265 mInited = TRUE;
266 266
@@ -686,7 +686,7 @@ BOOL LLAudioBufferFMOD::loadWAV(const char *filename)
686 // MikeS. - Loading the sound file manually and then handing it over to FMOD, 686 // MikeS. - Loading the sound file manually and then handing it over to FMOD,
687 // since FMOD uses posix IO internally, 687 // since FMOD uses posix IO internally,
688 // which doesn't work with unicode file paths. 688 // which doesn't work with unicode file paths.
689 FILE* sound_file = LLFile::fopen(filename,"rb"); /* Flawfinder: ignore */ 689 LLFILE* sound_file = LLFile::fopen(filename,"rb"); /* Flawfinder: ignore */
690 if (sound_file) 690 if (sound_file)
691 { 691 {
692 fseek(sound_file,0,SEEK_END); 692 fseek(sound_file,0,SEEK_END);
diff --git a/linden/indra/llcharacter/llanimationstates.cpp b/linden/indra/llcharacter/llanimationstates.cpp
index 81e15c7..2b13b0a 100644
--- a/linden/indra/llcharacter/llanimationstates.cpp
+++ b/linden/indra/llcharacter/llanimationstates.cpp
@@ -260,76 +260,77 @@ LLUUID LLAnimationLibrary::stringToAnimState( const char *name, BOOL allow_ids )
260} 260}
261 261
262// Animation states that the user can trigger as part of a gesture 262// Animation states that the user can trigger as part of a gesture
263// See struct LLAnimStateEntry in header for label location information
263const LLAnimStateEntry gUserAnimStates[] = { 264const LLAnimStateEntry gUserAnimStates[] = {
264 LLAnimStateEntry("Afraid", "express_afraid", ANIM_AGENT_AFRAID), 265 LLAnimStateEntry("express_afraid", ANIM_AGENT_AFRAID),
265 LLAnimStateEntry("Angry", "express_anger", ANIM_AGENT_ANGRY), 266 LLAnimStateEntry("express_anger", ANIM_AGENT_ANGRY),
266 LLAnimStateEntry("Away", "away", ANIM_AGENT_AWAY), 267 LLAnimStateEntry("away", ANIM_AGENT_AWAY),
267 LLAnimStateEntry("Backflip", "backflip", ANIM_AGENT_BACKFLIP), 268 LLAnimStateEntry("backflip", ANIM_AGENT_BACKFLIP),
268 LLAnimStateEntry("Belly Laugh", "express_laugh", ANIM_AGENT_BELLY_LAUGH), 269 LLAnimStateEntry("express_laugh", ANIM_AGENT_BELLY_LAUGH),
269 LLAnimStateEntry("BigSmile", "express_toothsmile", ANIM_AGENT_EXPRESS_TOOTHSMILE), 270 LLAnimStateEntry("express_toothsmile", ANIM_AGENT_EXPRESS_TOOTHSMILE),
270 LLAnimStateEntry("Blow Kiss", "blowkiss", ANIM_AGENT_BLOW_KISS), 271 LLAnimStateEntry("blowkiss", ANIM_AGENT_BLOW_KISS),
271 LLAnimStateEntry("Bored", "express_bored", ANIM_AGENT_BORED), 272 LLAnimStateEntry("express_bored", ANIM_AGENT_BORED),
272 LLAnimStateEntry("Bow", "bow", ANIM_AGENT_BOW), 273 LLAnimStateEntry("bow", ANIM_AGENT_BOW),
273 LLAnimStateEntry("Clap", "clap", ANIM_AGENT_CLAP), 274 LLAnimStateEntry("clap", ANIM_AGENT_CLAP),
274 LLAnimStateEntry("Court Bow", "courtbow", ANIM_AGENT_COURTBOW), 275 LLAnimStateEntry("courtbow", ANIM_AGENT_COURTBOW),
275 LLAnimStateEntry("Cry", "express_cry", ANIM_AGENT_CRY), 276 LLAnimStateEntry("express_cry", ANIM_AGENT_CRY),
276 LLAnimStateEntry("Dance 1", "dance1", ANIM_AGENT_DANCE1), 277 LLAnimStateEntry("dance1", ANIM_AGENT_DANCE1),
277 LLAnimStateEntry("Dance 2", "dance2", ANIM_AGENT_DANCE2), 278 LLAnimStateEntry("dance2", ANIM_AGENT_DANCE2),
278 LLAnimStateEntry("Dance 3", "dance3", ANIM_AGENT_DANCE3), 279 LLAnimStateEntry("dance3", ANIM_AGENT_DANCE3),
279 LLAnimStateEntry("Dance 4", "dance4", ANIM_AGENT_DANCE4), 280 LLAnimStateEntry("dance4", ANIM_AGENT_DANCE4),
280 LLAnimStateEntry("Dance 5", "dance5", ANIM_AGENT_DANCE5), 281 LLAnimStateEntry("dance5", ANIM_AGENT_DANCE5),
281 LLAnimStateEntry("Dance 6", "dance6", ANIM_AGENT_DANCE6), 282 LLAnimStateEntry("dance6", ANIM_AGENT_DANCE6),
282 LLAnimStateEntry("Dance 7", "dance7", ANIM_AGENT_DANCE7), 283 LLAnimStateEntry("dance7", ANIM_AGENT_DANCE7),
283 LLAnimStateEntry("Dance 8", "dance8", ANIM_AGENT_DANCE8), 284 LLAnimStateEntry("dance8", ANIM_AGENT_DANCE8),
284 LLAnimStateEntry("Disdain", "express_disdain", ANIM_AGENT_EXPRESS_DISDAIN), 285 LLAnimStateEntry("express_disdain", ANIM_AGENT_EXPRESS_DISDAIN),
285 LLAnimStateEntry("Drink", "drink", ANIM_AGENT_DRINK), 286 LLAnimStateEntry("drink", ANIM_AGENT_DRINK),
286 LLAnimStateEntry("Embarrassed", "express_embarrased", ANIM_AGENT_EMBARRASSED), 287 LLAnimStateEntry("express_embarrased", ANIM_AGENT_EMBARRASSED),
287 LLAnimStateEntry("Finger Wag", "angry_fingerwag", ANIM_AGENT_FINGER_WAG), 288 LLAnimStateEntry("angry_fingerwag", ANIM_AGENT_FINGER_WAG),
288 LLAnimStateEntry("Fist Pump", "fist_pump", ANIM_AGENT_FIST_PUMP), 289 LLAnimStateEntry("fist_pump", ANIM_AGENT_FIST_PUMP),
289 LLAnimStateEntry("Floating Yoga", "yoga_float", ANIM_AGENT_YOGA_FLOAT), 290 LLAnimStateEntry("yoga_float", ANIM_AGENT_YOGA_FLOAT),
290 LLAnimStateEntry("Frown", "express_frown", ANIM_AGENT_EXPRESS_FROWN), 291 LLAnimStateEntry("express_frown", ANIM_AGENT_EXPRESS_FROWN),
291 LLAnimStateEntry("Impatient", "impatient", ANIM_AGENT_IMPATIENT), 292 LLAnimStateEntry("impatient", ANIM_AGENT_IMPATIENT),
292 LLAnimStateEntry("Jump For Joy", "jumpforjoy", ANIM_AGENT_JUMP_FOR_JOY), 293 LLAnimStateEntry("jumpforjoy", ANIM_AGENT_JUMP_FOR_JOY),
293 LLAnimStateEntry("Kiss My Butt", "kissmybutt", ANIM_AGENT_KISS_MY_BUTT), 294 LLAnimStateEntry("kissmybutt", ANIM_AGENT_KISS_MY_BUTT),
294 LLAnimStateEntry("Kiss", "express_kiss", ANIM_AGENT_EXPRESS_KISS), 295 LLAnimStateEntry("express_kiss", ANIM_AGENT_EXPRESS_KISS),
295 LLAnimStateEntry("Laugh", "laugh_short", ANIM_AGENT_LAUGH_SHORT), 296 LLAnimStateEntry("laugh_short", ANIM_AGENT_LAUGH_SHORT),
296 LLAnimStateEntry("Muscle Beach", "musclebeach", ANIM_AGENT_MUSCLE_BEACH), 297 LLAnimStateEntry("musclebeach", ANIM_AGENT_MUSCLE_BEACH),
297 LLAnimStateEntry("No (Unhappy)", "no_unhappy", ANIM_AGENT_NO_UNHAPPY), 298 LLAnimStateEntry("no_unhappy", ANIM_AGENT_NO_UNHAPPY),
298 LLAnimStateEntry("No", "no_head", ANIM_AGENT_NO), 299 LLAnimStateEntry("no_head", ANIM_AGENT_NO),
299 LLAnimStateEntry("Nya-nya-nya", "nyanya", ANIM_AGENT_NYAH_NYAH), 300 LLAnimStateEntry("nyanya", ANIM_AGENT_NYAH_NYAH),
300 LLAnimStateEntry("One-Two Punch", "punch_onetwo", ANIM_AGENT_ONETWO_PUNCH), 301 LLAnimStateEntry("punch_onetwo", ANIM_AGENT_ONETWO_PUNCH),
301 LLAnimStateEntry("Open Mouth", "express_open_mouth", ANIM_AGENT_EXPRESS_OPEN_MOUTH), 302 LLAnimStateEntry("express_open_mouth", ANIM_AGENT_EXPRESS_OPEN_MOUTH),
302 LLAnimStateEntry("Peace", "peace", ANIM_AGENT_PEACE), 303 LLAnimStateEntry("peace", ANIM_AGENT_PEACE),
303 LLAnimStateEntry("Point at Other", "point_you", ANIM_AGENT_POINT_YOU), 304 LLAnimStateEntry("point_you", ANIM_AGENT_POINT_YOU),
304 LLAnimStateEntry("Point at Self", "point_me", ANIM_AGENT_POINT_ME), 305 LLAnimStateEntry("point_me", ANIM_AGENT_POINT_ME),
305 LLAnimStateEntry("Punch Left", "punch_l", ANIM_AGENT_PUNCH_LEFT), 306 LLAnimStateEntry("punch_l", ANIM_AGENT_PUNCH_LEFT),
306 LLAnimStateEntry("Punch Right", "punch_r", ANIM_AGENT_PUNCH_RIGHT), 307 LLAnimStateEntry("punch_r", ANIM_AGENT_PUNCH_RIGHT),
307 LLAnimStateEntry("RPS count", "rps_countdown", ANIM_AGENT_RPS_COUNTDOWN), 308 LLAnimStateEntry("rps_countdown", ANIM_AGENT_RPS_COUNTDOWN),
308 LLAnimStateEntry("RPS paper", "rps_paper", ANIM_AGENT_RPS_PAPER), 309 LLAnimStateEntry("rps_paper", ANIM_AGENT_RPS_PAPER),
309 LLAnimStateEntry("RPS rock", "rps_rock", ANIM_AGENT_RPS_ROCK), 310 LLAnimStateEntry("rps_rock", ANIM_AGENT_RPS_ROCK),
310 LLAnimStateEntry("RPS scissors", "rps_scissors", ANIM_AGENT_RPS_SCISSORS), 311 LLAnimStateEntry("rps_scissors", ANIM_AGENT_RPS_SCISSORS),
311 LLAnimStateEntry("Repulsed", "express_repulsed", ANIM_AGENT_EXPRESS_REPULSED), 312 LLAnimStateEntry("express_repulsed", ANIM_AGENT_EXPRESS_REPULSED),
312 LLAnimStateEntry("Roundhouse Kick", "kick_roundhouse_r", ANIM_AGENT_ROUNDHOUSE_KICK), 313 LLAnimStateEntry("kick_roundhouse_r", ANIM_AGENT_ROUNDHOUSE_KICK),
313 LLAnimStateEntry("Sad", "express_sad", ANIM_AGENT_SAD), 314 LLAnimStateEntry("express_sad", ANIM_AGENT_SAD),
314 LLAnimStateEntry("Salute", "salute", ANIM_AGENT_SALUTE), 315 LLAnimStateEntry("salute", ANIM_AGENT_SALUTE),
315 LLAnimStateEntry("Shout", "shout", ANIM_AGENT_SHOUT), 316 LLAnimStateEntry("shout", ANIM_AGENT_SHOUT),
316 LLAnimStateEntry("Shrug", "express_shrug", ANIM_AGENT_SHRUG), 317 LLAnimStateEntry("express_shrug", ANIM_AGENT_SHRUG),
317 LLAnimStateEntry("Smile", "express_smile", ANIM_AGENT_EXPRESS_SMILE), 318 LLAnimStateEntry("express_smile", ANIM_AGENT_EXPRESS_SMILE),
318 LLAnimStateEntry("Smoke Idle", "smoke_idle", ANIM_AGENT_SMOKE_IDLE), 319 LLAnimStateEntry("smoke_idle", ANIM_AGENT_SMOKE_IDLE),
319 LLAnimStateEntry("Smoke Inhale", "smoke_inhale", ANIM_AGENT_SMOKE_INHALE), 320 LLAnimStateEntry("smoke_inhale", ANIM_AGENT_SMOKE_INHALE),
320 LLAnimStateEntry("Smoke Throw Down","smoke_throw_down", ANIM_AGENT_SMOKE_THROW_DOWN), 321 LLAnimStateEntry("smoke_throw_down", ANIM_AGENT_SMOKE_THROW_DOWN),
321 LLAnimStateEntry("Surprise", "express_surprise", ANIM_AGENT_SURPRISE), 322 LLAnimStateEntry("express_surprise", ANIM_AGENT_SURPRISE),
322 LLAnimStateEntry("Sword Strike", "sword_strike_r", ANIM_AGENT_SWORD_STRIKE), 323 LLAnimStateEntry("sword_strike_r", ANIM_AGENT_SWORD_STRIKE),
323 LLAnimStateEntry("Tantrum", "angry_tantrum", ANIM_AGENT_TANTRUM), 324 LLAnimStateEntry("angry_tantrum", ANIM_AGENT_TANTRUM),
324 LLAnimStateEntry("TongueOut", "express_tongue_out", ANIM_AGENT_EXPRESS_TONGUE_OUT), 325 LLAnimStateEntry("express_tongue_out", ANIM_AGENT_EXPRESS_TONGUE_OUT),
325 LLAnimStateEntry("Wave", "hello", ANIM_AGENT_HELLO), 326 LLAnimStateEntry("hello", ANIM_AGENT_HELLO),
326 LLAnimStateEntry("Whisper", "whisper", ANIM_AGENT_WHISPER), 327 LLAnimStateEntry("whisper", ANIM_AGENT_WHISPER),
327 LLAnimStateEntry("Whistle", "whistle", ANIM_AGENT_WHISTLE), 328 LLAnimStateEntry("whistle", ANIM_AGENT_WHISTLE),
328 LLAnimStateEntry("Wink", "express_wink", ANIM_AGENT_WINK), 329 LLAnimStateEntry("express_wink", ANIM_AGENT_WINK),
329 LLAnimStateEntry("Wink (Hollywood)","wink_hollywood", ANIM_AGENT_WINK_HOLLYWOOD), 330 LLAnimStateEntry("wink_hollywood", ANIM_AGENT_WINK_HOLLYWOOD),
330 LLAnimStateEntry("Worry", "express_worry", ANIM_AGENT_EXPRESS_WORRY), 331 LLAnimStateEntry("express_worry", ANIM_AGENT_EXPRESS_WORRY),
331 LLAnimStateEntry("Yes (Happy)", "yes_happy", ANIM_AGENT_YES_HAPPY), 332 LLAnimStateEntry("yes_happy", ANIM_AGENT_YES_HAPPY),
332 LLAnimStateEntry("Yes", "yes_head", ANIM_AGENT_YES), 333 LLAnimStateEntry("yes_head", ANIM_AGENT_YES),
333}; 334};
334 335
335const S32 gUserAnimStatesCount = sizeof(gUserAnimStates) / sizeof(gUserAnimStates[0]); 336const S32 gUserAnimStatesCount = sizeof(gUserAnimStates) / sizeof(gUserAnimStates[0]);
diff --git a/linden/indra/llcharacter/llanimationstates.h b/linden/indra/llcharacter/llanimationstates.h
index b2ed27a..dd269de 100644
--- a/linden/indra/llcharacter/llanimationstates.h
+++ b/linden/indra/llcharacter/llanimationstates.h
@@ -227,13 +227,18 @@ public:
227 227
228struct LLAnimStateEntry 228struct LLAnimStateEntry
229{ 229{
230 LLAnimStateEntry(const char* label, const char* name, const LLUUID& id) 230 LLAnimStateEntry(const char* name, const LLUUID& id) :
231 : mLabel(label),
232 mName(name), 231 mName(name),
233 mID(id) 232 mID(id)
234 { } 233 {
234 // LABELS:
235 // Look to newview/LLAnimStateLabels.* for how to get the labels.
236 // The labels should no longer be stored in this structure. The server
237 // shouldn't care about the local friendly name of an animation, and
238 // this is common code.
239 }
240
235 241
236 const char* mLabel;
237 const char* mName; 242 const char* mName;
238 const LLUUID mID; 243 const LLUUID mID;
239}; 244};
diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp
index 0339cf0..ad648f8 100644
--- a/linden/indra/llcharacter/llcharacter.cpp
+++ b/linden/indra/llcharacter/llcharacter.cpp
@@ -377,6 +377,27 @@ void LLCharacter::clearVisualParamWeights()
377} 377}
378 378
379//----------------------------------------------------------------------------- 379//-----------------------------------------------------------------------------
380// BOOL visualParamWeightsAreDefault()
381//-----------------------------------------------------------------------------
382BOOL LLCharacter::visualParamWeightsAreDefault()
383{
384 for (LLVisualParam *param = getFirstVisualParam();
385 param;
386 param = getNextVisualParam())
387 {
388 if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
389 {
390 if (param->getWeight() != param->getDefaultWeight())
391 return false;
392 }
393 }
394
395 return true;
396}
397
398
399
400//-----------------------------------------------------------------------------
380// getVisualParam() 401// getVisualParam()
381//----------------------------------------------------------------------------- 402//-----------------------------------------------------------------------------
382LLVisualParam* LLCharacter::getVisualParam(const char *param_name) 403LLVisualParam* LLCharacter::getVisualParam(const char *param_name)
diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h
index 46faab1..7a841ef 100644
--- a/linden/indra/llcharacter/llcharacter.h
+++ b/linden/indra/llcharacter/llcharacter.h
@@ -207,6 +207,9 @@ public:
207 // set all morph weights to 0 207 // set all morph weights to 0
208 void clearVisualParamWeights(); 208 void clearVisualParamWeights();
209 209
210 // see if all the weights are default
211 BOOL visualParamWeightsAreDefault();
212
210 // visual parameter accessors 213 // visual parameter accessors
211 LLVisualParam* getFirstVisualParam() 214 LLVisualParam* getFirstVisualParam()
212 { 215 {
diff --git a/linden/indra/llcharacter/llmotion.cpp b/linden/indra/llcharacter/llmotion.cpp
index 899796c..f7b8f1f 100644
--- a/linden/indra/llcharacter/llmotion.cpp
+++ b/linden/indra/llcharacter/llmotion.cpp
@@ -47,22 +47,20 @@
47// LLMotion() 47// LLMotion()
48// Class Constructor 48// Class Constructor
49//----------------------------------------------------------------------------- 49//-----------------------------------------------------------------------------
50LLMotion::LLMotion( const LLUUID &id ) 50LLMotion::LLMotion( const LLUUID &id ) :
51 mStopped(TRUE),
52 mActive(FALSE),
53 mID(id),
54 mActivationTimestamp(0.f),
55 mStopTimestamp(0.f),
56 mSendStopTimestamp(F32_MAX),
57 mResidualWeight(0.f),
58 mFadeWeight(1.f),
59 mDeactivateCallback(NULL),
60 mDeactivateCallbackUserData(NULL)
51{ 61{
52 mActivationTimestamp = 0.f; 62 for (int i=0; i<3; ++i)
53 mStopTimestamp = 0.f; 63 memset(&mJointSignature[i][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS);
54 mSendStopTimestamp = F32_MAX;
55 mResidualWeight = 0.f;
56 mFadeWeight = 1.f;
57 mStopped = TRUE;
58 mActive = FALSE;
59 mDeactivateCallback = NULL;
60
61 memset(&mJointSignature[0][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS);
62 memset(&mJointSignature[1][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS);
63 memset(&mJointSignature[2][0], 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS);
64
65 mID = id;
66} 64}
67 65
68//----------------------------------------------------------------------------- 66//-----------------------------------------------------------------------------
diff --git a/linden/indra/llcharacter/llmotion.h b/linden/indra/llcharacter/llmotion.h
index 188937d..c7bb55d 100644
--- a/linden/indra/llcharacter/llmotion.h
+++ b/linden/indra/llcharacter/llmotion.h
@@ -49,13 +49,13 @@ class LLCharacter;
49class LLMotion 49class LLMotion
50{ 50{
51public: 51public:
52 enum LLMotionBlendType 52 typedef enum LLMotionBlendType
53 { 53 {
54 NORMAL_BLEND, 54 NORMAL_BLEND,
55 ADDITIVE_BLEND 55 ADDITIVE_BLEND
56 }; 56 };
57 57
58 enum LLMotionInitStatus 58 typedef enum LLMotionInitStatus
59 { 59 {
60 STATUS_FAILURE, 60 STATUS_FAILURE,
61 STATUS_SUCCESS, 61 STATUS_SUCCESS,
diff --git a/linden/indra/llcommon/files.lst b/linden/indra/llcommon/files.lst
index 6f03155..fd6a07c 100644
--- a/linden/indra/llcommon/files.lst
+++ b/linden/indra/llcommon/files.lst
@@ -12,12 +12,16 @@ llcommon/llerrorthread.cpp
12llcommon/llevent.cpp 12llcommon/llevent.cpp
13llcommon/llfasttimer.cpp 13llcommon/llfasttimer.cpp
14llcommon/llfile.cpp 14llcommon/llfile.cpp
15llcommon/llfindlocale.cpp
15llcommon/llfixedbuffer.cpp 16llcommon/llfixedbuffer.cpp
16llcommon/llformat.cpp 17llcommon/llformat.cpp
17llcommon/llframetimer.cpp 18llcommon/llframetimer.cpp
19llcommon/llheartbeat.cpp
20llcommon/llindraconfigfile.cpp
18llcommon/lllog.cpp 21llcommon/lllog.cpp
19llcommon/llliveappconfig.cpp 22llcommon/llliveappconfig.cpp
20llcommon/lllivefile.cpp 23llcommon/lllivefile.cpp
24llcommon/lllog.cpp
21llcommon/llmemory.cpp 25llcommon/llmemory.cpp
22llcommon/llmemorystream.cpp 26llcommon/llmemorystream.cpp
23llcommon/llmetrics.cpp 27llcommon/llmetrics.cpp
diff --git a/linden/indra/llcommon/llapp.cpp b/linden/indra/llcommon/llapp.cpp
index bd2e377..ebace4e 100644
--- a/linden/indra/llcommon/llapp.cpp
+++ b/linden/indra/llcommon/llapp.cpp
@@ -49,11 +49,24 @@
49LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop); 49LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop);
50BOOL ConsoleCtrlHandler(DWORD fdwCtrlType); 50BOOL ConsoleCtrlHandler(DWORD fdwCtrlType);
51#else 51#else
52#include <unistd.h> // for fork() 52# include <signal.h>
53# include <unistd.h> // for fork()
53void setup_signals(); 54void setup_signals();
54void default_unix_signal_handler(int signum, siginfo_t *info, void *); 55void default_unix_signal_handler(int signum, siginfo_t *info, void *);
55const S32 LL_SMACKDOWN_SIGNAL = SIGUSR1; 56# if LL_DARWIN
56#endif 57/* OSX doesn't support SIGRT* */
58S32 LL_SMACKDOWN_SIGNAL = SIGUSR1;
59S32 LL_HEARTBEAT_SIGNAL = SIGUSR2;
60# else
61/* We want reliable delivery of our signals - SIGRT* is it. */
62/* Old LinuxThreads versions eat SIGRTMIN+0 to SIGRTMIN+2, avoid those. */
63/* Note that SIGRTMIN/SIGRTMAX may expand to a glibc function call with a
64 nonconstant result so these are not consts and cannot be used in constant-
65 expressions. SIGRTMAX may return -1 on rare broken setups. */
66S32 LL_SMACKDOWN_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-1) : SIGUSR1;
67S32 LL_HEARTBEAT_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-0) : SIGUSR2;
68# endif // LL_DARWIN
69#endif // LL_WINDOWS
57 70
58// the static application instance 71// the static application instance
59LLApp* LLApp::sApplication = NULL; 72LLApp* LLApp::sApplication = NULL;
@@ -523,6 +536,9 @@ void setup_signals()
523 sigaction(SIGSEGV, &act, NULL); 536 sigaction(SIGSEGV, &act, NULL);
524 sigaction(SIGSYS, &act, NULL); 537 sigaction(SIGSYS, &act, NULL);
525 538
539 sigaction(LL_HEARTBEAT_SIGNAL, &act, NULL);
540 sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL);
541
526 // Asynchronous signals that are normally ignored 542 // Asynchronous signals that are normally ignored
527 sigaction(SIGCHLD, &act, NULL); 543 sigaction(SIGCHLD, &act, NULL);
528 sigaction(SIGUSR2, &act, NULL); 544 sigaction(SIGUSR2, &act, NULL);
@@ -533,7 +549,6 @@ void setup_signals()
533 sigaction(SIGINT, &act, NULL); 549 sigaction(SIGINT, &act, NULL);
534 550
535 // Asynchronous signals that result in core 551 // Asynchronous signals that result in core
536 sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL);
537 sigaction(SIGQUIT, &act, NULL); 552 sigaction(SIGQUIT, &act, NULL);
538} 553}
539 554
@@ -555,6 +570,9 @@ void clear_signals()
555 sigaction(SIGSEGV, &act, NULL); 570 sigaction(SIGSEGV, &act, NULL);
556 sigaction(SIGSYS, &act, NULL); 571 sigaction(SIGSYS, &act, NULL);
557 572
573 sigaction(LL_HEARTBEAT_SIGNAL, &act, NULL);
574 sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL);
575
558 // Asynchronous signals that are normally ignored 576 // Asynchronous signals that are normally ignored
559 sigaction(SIGCHLD, &act, NULL); 577 sigaction(SIGCHLD, &act, NULL);
560 578
@@ -565,7 +583,6 @@ void clear_signals()
565 583
566 // Asynchronous signals that result in core 584 // Asynchronous signals that result in core
567 sigaction(SIGUSR2, &act, NULL); 585 sigaction(SIGUSR2, &act, NULL);
568 sigaction(LL_SMACKDOWN_SIGNAL, &act, NULL);
569 sigaction(SIGQUIT, &act, NULL); 586 sigaction(SIGQUIT, &act, NULL);
570} 587}
571 588
@@ -586,16 +603,7 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)
586 603
587 switch (signum) 604 switch (signum)
588 { 605 {
589 case SIGALRM: 606 case SIGCHLD:
590 case SIGPIPE:
591 case SIGUSR2:
592 // We don't care about these signals, ignore them
593 if (LLApp::sLogInSignal)
594 {
595 llinfos << "Signal handler - Ignoring this signal" << llendl;
596 }
597 return;
598 case SIGCHLD:
599 if (LLApp::sLogInSignal) 607 if (LLApp::sLogInSignal)
600 { 608 {
601 llinfos << "Signal handler - Got SIGCHLD from " << info->si_pid << llendl; 609 llinfos << "Signal handler - Got SIGCHLD from " << info->si_pid << llendl;
@@ -624,59 +632,6 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)
624 clear_signals(); 632 clear_signals();
625 raise(signum); 633 raise(signum);
626 return; 634 return;
627 case LL_SMACKDOWN_SIGNAL: // Smackdown treated just like any other app termination, for now
628 if (LLApp::sLogInSignal)
629 {
630 llwarns << "Signal handler - Handling smackdown signal!" << llendl;
631 }
632 else
633 {
634 // Don't log anything, even errors - this is because this signal could happen anywhere.
635 LLError::setDefaultLevel(LLError::LEVEL_NONE);
636 }
637
638 // Change the signal that we reraise to SIGABRT, so we generate a core dump.
639 signum = SIGABRT;
640 case SIGBUS:
641 case SIGSEGV:
642 case SIGQUIT:
643 if (LLApp::sLogInSignal)
644 {
645 llwarns << "Signal handler - Handling fatal signal!" << llendl;
646 }
647 if (LLApp::isError())
648 {
649 // Received second fatal signal while handling first, just die right now
650 // Set the signal handlers back to default before handling the signal - this makes the next signal wipe out the app.
651 clear_signals();
652
653 if (LLApp::sLogInSignal)
654 {
655 llwarns << "Signal handler - Got another fatal signal while in the error handler, die now!" << llendl;
656 }
657 raise(signum);
658 return;
659 }
660
661 if (LLApp::sLogInSignal)
662 {
663 llwarns << "Signal handler - Flagging error status and waiting for shutdown" << llendl;
664 }
665 // Flag status to ERROR, so thread_error does its work.
666 LLApp::setError();
667 // Block in the signal handler until somebody says that we're done.
668 while (LLApp::sErrorThreadRunning && !LLApp::isStopped())
669 {
670 ms_sleep(10);
671 }
672
673 if (LLApp::sLogInSignal)
674 {
675 llwarns << "Signal handler - App is stopped, reraising signal" << llendl;
676 }
677 clear_signals();
678 raise(signum);
679 return;
680 case SIGINT: 635 case SIGINT:
681 case SIGHUP: 636 case SIGHUP:
682 case SIGTERM: 637 case SIGTERM:
@@ -697,10 +652,76 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)
697 } 652 }
698 LLApp::setQuitting(); 653 LLApp::setQuitting();
699 return; 654 return;
655 case SIGALRM:
656 case SIGPIPE:
657 case SIGUSR2:
700 default: 658 default:
701 if (LLApp::sLogInSignal) 659 if (signum == LL_SMACKDOWN_SIGNAL ||
702 { 660 signum == SIGBUS ||
703 llwarns << "Signal handler - Unhandled signal, ignoring!" << llendl; 661 signum == SIGILL ||
662 signum == SIGFPE ||
663 signum == SIGSEGV ||
664 signum == SIGQUIT)
665 {
666 if (signum == LL_SMACKDOWN_SIGNAL)
667 {
668 // Smackdown treated just like any other app termination, for now
669 if (LLApp::sLogInSignal)
670 {
671 llwarns << "Signal handler - Handling smackdown signal!" << llendl;
672 }
673 else
674 {
675 // Don't log anything, even errors - this is because this signal could happen anywhere.
676 LLError::setDefaultLevel(LLError::LEVEL_NONE);
677 }
678
679 // Change the signal that we reraise to SIGABRT, so we generate a core dump.
680 signum = SIGABRT;
681 }
682
683 if (LLApp::sLogInSignal)
684 {
685 llwarns << "Signal handler - Handling fatal signal!" << llendl;
686 }
687 if (LLApp::isError())
688 {
689 // Received second fatal signal while handling first, just die right now
690 // Set the signal handlers back to default before handling the signal - this makes the next signal wipe out the app.
691 clear_signals();
692
693 if (LLApp::sLogInSignal)
694 {
695 llwarns << "Signal handler - Got another fatal signal while in the error handler, die now!" << llendl;
696 }
697 raise(signum);
698 return;
699 }
700
701 if (LLApp::sLogInSignal)
702 {
703 llwarns << "Signal handler - Flagging error status and waiting for shutdown" << llendl;
704 }
705 // Flag status to ERROR, so thread_error does its work.
706 LLApp::setError();
707 // Block in the signal handler until somebody says that we're done.
708 while (LLApp::sErrorThreadRunning && !LLApp::isStopped())
709 {
710 ms_sleep(10);
711 }
712
713 if (LLApp::sLogInSignal)
714 {
715 llwarns << "Signal handler - App is stopped, reraising signal" << llendl;
716 }
717 clear_signals();
718 raise(signum);
719 return;
720 } else {
721 if (LLApp::sLogInSignal)
722 {
723 llinfos << "Signal handler - Unhandled signal " << signum << ", ignoring!" << llendl;
724 }
704 } 725 }
705 } 726 }
706} 727}
diff --git a/linden/indra/llcommon/llapp.h b/linden/indra/llcommon/llapp.h
index 50a70ae..9d8ff88 100644
--- a/linden/indra/llcommon/llapp.h
+++ b/linden/indra/llcommon/llapp.h
@@ -46,7 +46,8 @@ typedef void (*LLAppErrorHandler)();
46typedef void (*LLAppChildCallback)(int pid, bool exited, int status); 46typedef void (*LLAppChildCallback)(int pid, bool exited, int status);
47 47
48#if !LL_WINDOWS 48#if !LL_WINDOWS
49extern const S32 LL_SMACKDOWN_SIGNAL; 49extern S32 LL_SMACKDOWN_SIGNAL;
50extern S32 LL_HEARTBEAT_SIGNAL;
50 51
51// Clear all of the signal handlers (which we want to do for the child process when we fork 52// Clear all of the signal handlers (which we want to do for the child process when we fork
52void clear_signals(); 53void clear_signals();
diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp
index 08c40a4..78bf876 100644
--- a/linden/indra/llcommon/llapr.cpp
+++ b/linden/indra/llcommon/llapr.cpp
@@ -54,7 +54,7 @@ void ll_init_apr()
54 54
55void ll_cleanup_apr() 55void ll_cleanup_apr()
56{ 56{
57 llinfos << "Cleaning up APR" << llendl; 57 LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
58 58
59 if (gLogMutexp) 59 if (gLogMutexp)
60 { 60 {
@@ -118,7 +118,7 @@ bool ll_apr_warn_status(apr_status_t status)
118 if(APR_SUCCESS == status) return false; 118 if(APR_SUCCESS == status) return false;
119#ifndef LL_WINDOWS 119#ifndef LL_WINDOWS
120 char buf[MAX_STRING]; /* Flawfinder: ignore */ 120 char buf[MAX_STRING]; /* Flawfinder: ignore */
121 llwarns << "APR: " << apr_strerror(status, buf, MAX_STRING) << llendl; 121 LL_WARNS_ONCE("APR") << "APR: " << apr_strerror(status, buf, MAX_STRING) << LL_ENDL;
122#endif 122#endif
123 return true; 123 return true;
124} 124}
@@ -294,7 +294,7 @@ bool ll_apr_file_remove(const LLString& filename, apr_pool_t* pool)
294 s = apr_file_remove(filename.c_str(), pool); 294 s = apr_file_remove(filename.c_str(), pool);
295 if (s != APR_SUCCESS) 295 if (s != APR_SUCCESS)
296 { 296 {
297 lldebugs << "ll_apr_file_remove failed on file: " << filename << llendl; 297 LL_DEBUGS("APR") << "ll_apr_file_remove failed on file: " << filename << LL_ENDL;
298 ll_apr_warn_status(s); 298 ll_apr_warn_status(s);
299 return false; 299 return false;
300 } 300 }
@@ -308,7 +308,7 @@ bool ll_apr_file_rename(const LLString& filename, const LLString& newname, apr_p
308 s = apr_file_rename(filename.c_str(), newname.c_str(), pool); 308 s = apr_file_rename(filename.c_str(), newname.c_str(), pool);
309 if (s != APR_SUCCESS) 309 if (s != APR_SUCCESS)
310 { 310 {
311 lldebugs << "ll_apr_file_rename failed on file: " << filename << llendl; 311 LL_DEBUGS("APR") << "ll_apr_file_rename failed on file: " << filename << LL_ENDL;
312 ll_apr_warn_status(s); 312 ll_apr_warn_status(s);
313 return false; 313 return false;
314 } 314 }
@@ -365,7 +365,7 @@ bool ll_apr_dir_make(const LLString& dirname, apr_pool_t* pool)
365 s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool); 365 s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool);
366 if (s != APR_SUCCESS) 366 if (s != APR_SUCCESS)
367 { 367 {
368 lldebugs << "ll_apr_dir_make failed on file: " << dirname << llendl; 368 LL_DEBUGS("APR") << "ll_apr_dir_make failed on file: " << dirname << LL_ENDL;
369 ll_apr_warn_status(s); 369 ll_apr_warn_status(s);
370 return false; 370 return false;
371 } 371 }
@@ -379,7 +379,7 @@ bool ll_apr_dir_remove(const LLString& dirname, apr_pool_t* pool)
379 s = apr_file_remove(dirname.c_str(), pool); 379 s = apr_file_remove(dirname.c_str(), pool);
380 if (s != APR_SUCCESS) 380 if (s != APR_SUCCESS)
381 { 381 {
382 lldebugs << "ll_apr_dir_remove failed on file: " << dirname << llendl; 382 LL_DEBUGS("APR") << "ll_apr_dir_remove failed on file: " << dirname << LL_ENDL;
383 ll_apr_warn_status(s); 383 ll_apr_warn_status(s);
384 return false; 384 return false;
385 } 385 }
diff --git a/linden/indra/llcommon/llares.cpp b/linden/indra/llcommon/llares.cpp
index 4adf0c3..4d054e4 100644
--- a/linden/indra/llcommon/llares.cpp
+++ b/linden/indra/llcommon/llares.cpp
@@ -154,7 +154,7 @@ void LLAres::getSrvRecords(const std::string &name, SrvResponder *resp)
154 154
155void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp) 155void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp)
156{ 156{
157 llinfos << "Rewriting " << uri << llendl; 157 LL_DEBUGS2("AppInit","Rewrite") << "Rewriting " << uri << LL_ENDL;
158 158
159 resp->mUri = LLURI(uri); 159 resp->mUri = LLURI(uri);
160 search("_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName(), 160 search("_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName(),
@@ -163,7 +163,8 @@ void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp)
163 163
164LLQueryResponder::LLQueryResponder() 164LLQueryResponder::LLQueryResponder()
165 : LLAres::QueryResponder(), 165 : LLAres::QueryResponder(),
166 mResult(ARES_ENODATA) 166 mResult(ARES_ENODATA),
167 mType(RES_INVALID)
167{ 168{
168} 169}
169 170
diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj
index ab4e67a..f54ea13 100644
--- a/linden/indra/llcommon/llcommon.vcproj
+++ b/linden/indra/llcommon/llcommon.vcproj
@@ -199,6 +199,9 @@
199 RelativePath=".\llfile.cpp"> 199 RelativePath=".\llfile.cpp">
200 </File> 200 </File>
201 <File 201 <File
202 RelativePath=".\llfindlocale.cpp">
203 </File>
204 <File
202 RelativePath=".\llfixedbuffer.cpp"> 205 RelativePath=".\llfixedbuffer.cpp">
203 </File> 206 </File>
204 <File 207 <File
@@ -208,6 +211,12 @@
208 RelativePath=".\llframetimer.cpp"> 211 RelativePath=".\llframetimer.cpp">
209 </File> 212 </File>
210 <File 213 <File
214 RelativePath=".\llheartbeat.cpp">
215 </File>
216 <File
217 RelativePath=".\llindraconfigfile.cpp">
218 </File>
219 <File
211 RelativePath=".\llliveappconfig.cpp"> 220 RelativePath=".\llliveappconfig.cpp">
212 </File> 221 </File>
213 <File 222 <File
@@ -417,12 +426,18 @@
417 RelativePath=".\llhash.h"> 426 RelativePath=".\llhash.h">
418 </File> 427 </File>
419 <File 428 <File
429 RelativePath=".\llheartbeat.h">
430 </File>
431 <File
420 RelativePath=".\llindexedqueue.h"> 432 RelativePath=".\llindexedqueue.h">
421 </File> 433 </File>
422 <File 434 <File
423 RelativePath=".\llkeythrottle.h"> 435 RelativePath=".\llkeythrottle.h">
424 </File> 436 </File>
425 <File 437 <File
438 RelativePath=".\llkeyusetracker.h">
439 </File>
440 <File
426 RelativePath=".\lllinkedqueue.h"> 441 RelativePath=".\lllinkedqueue.h">
427 </File> 442 </File>
428 <File 443 <File
diff --git a/linden/indra/llcommon/llcommon_vc8.vcproj b/linden/indra/llcommon/llcommon_vc8.vcproj
index 5578075..a298499 100644
--- a/linden/indra/llcommon/llcommon_vc8.vcproj
+++ b/linden/indra/llcommon/llcommon_vc8.vcproj
@@ -289,6 +289,10 @@
289 > 289 >
290 </File> 290 </File>
291 <File 291 <File
292 RelativePath=".\llfindlocale.cpp"
293 >
294 </File>
295 <File
292 RelativePath=".\llfixedbuffer.cpp" 296 RelativePath=".\llfixedbuffer.cpp"
293 > 297 >
294 </File> 298 </File>
@@ -301,6 +305,14 @@
301 > 305 >
302 </File> 306 </File>
303 <File 307 <File
308 RelativePath=".\llheartbeat.cpp"
309 >
310 </File>
311 <File
312 RelativePath=".\llindraconfigfile.cpp"
313 >
314 </File>
315 <File
304 RelativePath=".\llliveappconfig.cpp" 316 RelativePath=".\llliveappconfig.cpp"
305 > 317 >
306 </File> 318 </File>
@@ -563,6 +575,10 @@
563 > 575 >
564 </File> 576 </File>
565 <File 577 <File
578 RelativePath=".\llfindlocale.h"
579 >
580 </File>
581 <File
566 RelativePath=".\llfixedbuffer.h" 582 RelativePath=".\llfixedbuffer.h"
567 > 583 >
568 </File> 584 </File>
@@ -587,6 +603,10 @@
587 > 603 >
588 </File> 604 </File>
589 <File 605 <File
606 RelativePath=".\llindraconfigfile.h"
607 >
608 </File>
609 <File
590 RelativePath=".\lllinkedqueue.h" 610 RelativePath=".\lllinkedqueue.h"
591 > 611 >
592 </File> 612 </File>
@@ -759,6 +779,22 @@
759 > 779 >
760 </File> 780 </File>
761 <File 781 <File
782 RelativePath=".\metaclass.h"
783 >
784 </File>
785 <File
786 RelativePath=".\metaclasst.h"
787 >
788 </File>
789 <File
790 RelativePath=".\metaproperty.h"
791 >
792 </File>
793 <File
794 RelativePath=".\metapropertyt.h"
795 >
796 </File>
797 <File
762 RelativePath=".\new_mem_ops.h" 798 RelativePath=".\new_mem_ops.h"
763 > 799 >
764 </File> 800 </File>
diff --git a/linden/indra/llcommon/llcommon_vc9.vcproj b/linden/indra/llcommon/llcommon_vc9.vcproj
index 0bb2d11..1ae534d 100644
--- a/linden/indra/llcommon/llcommon_vc9.vcproj
+++ b/linden/indra/llcommon/llcommon_vc9.vcproj
@@ -290,6 +290,10 @@
290 > 290 >
291 </File> 291 </File>
292 <File 292 <File
293 RelativePath=".\llfindlocale.cpp"
294 >
295 </File>
296 <File
293 RelativePath=".\llfixedbuffer.cpp" 297 RelativePath=".\llfixedbuffer.cpp"
294 > 298 >
295 </File> 299 </File>
@@ -302,6 +306,14 @@
302 > 306 >
303 </File> 307 </File>
304 <File 308 <File
309 RelativePath=".\llheartbeat.cpp"
310 >
311 </File>
312 <File
313 RelativePath=".\llindraconfigfile.cpp"
314 >
315 </File>
316 <File
305 RelativePath=".\llliveappconfig.cpp" 317 RelativePath=".\llliveappconfig.cpp"
306 > 318 >
307 </File> 319 </File>
@@ -564,6 +576,10 @@
564 > 576 >
565 </File> 577 </File>
566 <File 578 <File
579 RelativePath=".\llfindlocale.h"
580 >
581 </File>
582 <File
567 RelativePath=".\llfixedbuffer.h" 583 RelativePath=".\llfixedbuffer.h"
568 > 584 >
569 </File> 585 </File>
@@ -588,6 +604,10 @@
588 > 604 >
589 </File> 605 </File>
590 <File 606 <File
607 RelativePath=".\llindraconfigfile.h"
608 >
609 </File>
610 <File
591 RelativePath=".\lllinkedqueue.h" 611 RelativePath=".\lllinkedqueue.h"
592 > 612 >
593 </File> 613 </File>
diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp
index 0e7db89..b74b288 100644
--- a/linden/indra/llcommon/llerror.cpp
+++ b/linden/indra/llcommon/llerror.cpp
@@ -408,6 +408,8 @@ namespace LLError
408 LevelMap functionLevelMap; 408 LevelMap functionLevelMap;
409 LevelMap classLevelMap; 409 LevelMap classLevelMap;
410 LevelMap fileLevelMap; 410 LevelMap fileLevelMap;
411 LevelMap tagLevelMap;
412 std::map<std::string, unsigned int> uniqueLogMessages;
411 413
412 LLError::FatalFunction crashFunction; 414 LLError::FatalFunction crashFunction;
413 LLError::TimeFunction timeFunction; 415 LLError::TimeFunction timeFunction;
@@ -494,11 +496,17 @@ namespace LLError
494namespace LLError 496namespace LLError
495{ 497{
496 CallSite::CallSite(ELevel level, 498 CallSite::CallSite(ELevel level,
497 const char* file, int line, 499 const char* file,
498 const std::type_info& class_info, const char* function) 500 int line,
501 const std::type_info& class_info,
502 const char* function,
503 const char* broadTag,
504 const char* narrowTag,
505 bool printOnce)
499 : mLevel(level), mFile(file), mLine(line), 506 : mLevel(level), mFile(file), mLine(line),
500 mClassInfo(class_info), mFunction(function), 507 mClassInfo(class_info), mFunction(function),
501 mCached(false), mShouldLog(false) 508 mCached(false), mShouldLog(false),
509 mBroadTag(broadTag), mNarrowTag(narrowTag), mPrintOnce(printOnce)
502 { } 510 { }
503 511
504 512
@@ -552,6 +560,15 @@ namespace
552#endif 560#endif
553 561
554 LogControlFile& e = LogControlFile::fromDirectory(dir); 562 LogControlFile& e = LogControlFile::fromDirectory(dir);
563
564 // NOTE: We want to explicitly load the file before we add it to the event timer
565 // that checks for changes to the file. Else, we're not actually loading the file yet,
566 // and most of the initialization happens without any attention being paid to the
567 // log control file. Not to mention that when it finally gets checked later,
568 // all log statements that have been evaluated already become dirty and need to be
569 // evaluated for printing again. So, make sure to call checkAndReload()
570 // before addToEventTimer().
571 e.checkAndReload();
555 e.addToEventTimer(); 572 e.addToEventTimer();
556 } 573 }
557} 574}
@@ -625,6 +642,14 @@ namespace LLError
625 g.invalidateCallSites(); 642 g.invalidateCallSites();
626 s.fileLevelMap[file_name] = level; 643 s.fileLevelMap[file_name] = level;
627 } 644 }
645
646 void setTagLevel(const std::string& tag_name, ELevel level)
647 {
648 Globals& g = Globals::get();
649 Settings& s = Settings::get();
650 g.invalidateCallSites();
651 s.tagLevelMap[tag_name] = level;
652 }
628} 653}
629 654
630namespace { 655namespace {
@@ -674,6 +699,8 @@ namespace LLError
674 s.functionLevelMap.clear(); 699 s.functionLevelMap.clear();
675 s.classLevelMap.clear(); 700 s.classLevelMap.clear();
676 s.fileLevelMap.clear(); 701 s.fileLevelMap.clear();
702 s.tagLevelMap.clear();
703 s.uniqueLogMessages.clear();
677 704
678 setPrintLocation(config["print-location"]); 705 setPrintLocation(config["print-location"]);
679 setDefaultLevel(decodeLevel(config["default-level"])); 706 setDefaultLevel(decodeLevel(config["default-level"]));
@@ -689,6 +716,7 @@ namespace LLError
689 setLevels(s.functionLevelMap, entry["functions"], level); 716 setLevels(s.functionLevelMap, entry["functions"], level);
690 setLevels(s.classLevelMap, entry["classes"], level); 717 setLevels(s.classLevelMap, entry["classes"], level);
691 setLevels(s.fileLevelMap, entry["files"], level); 718 setLevels(s.fileLevelMap, entry["files"], level);
719 setLevels(s.tagLevelMap, entry["tags"], level);
692 } 720 }
693 } 721 }
694} 722}
@@ -850,7 +878,7 @@ namespace {
850 return false; 878 return false;
851 } 879 }
852 880
853 level = i->second; 881 level = i->second;
854 return true; 882 return true;
855 } 883 }
856 884
@@ -929,9 +957,15 @@ namespace LLError
929 957
930 ELevel compareLevel = s.defaultLevel; 958 ELevel compareLevel = s.defaultLevel;
931 959
932 checkLevelMap(s.functionLevelMap, function_name, compareLevel) 960 // The most specific match found will be used as the log level,
961 // since the computation short circuits.
962 // So, in increasing order of importance:
963 // Default < Broad Tag < File < Class < Function < Narrow Tag
964 ((site.mNarrowTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mNarrowTag, compareLevel) : false)
965 || checkLevelMap(s.functionLevelMap, function_name, compareLevel)
933 || checkLevelMap(s.classLevelMap, class_name, compareLevel) 966 || checkLevelMap(s.classLevelMap, class_name, compareLevel)
934 || checkLevelMap(s.fileLevelMap, abbreviateFile(site.mFile), compareLevel); 967 || checkLevelMap(s.fileLevelMap, abbreviateFile(site.mFile), compareLevel)
968 || ((site.mBroadTag != NULL) ? checkLevelMap(s.tagLevelMap, site.mBroadTag, compareLevel) : false);
935 969
936 site.mCached = true; 970 site.mCached = true;
937 g.addCallSite(site); 971 g.addCallSite(site);
@@ -1018,6 +1052,29 @@ namespace LLError
1018 #endif 1052 #endif
1019 prefix << site.mFunction << ": "; 1053 prefix << site.mFunction << ": ";
1020 } 1054 }
1055
1056 if (site.mPrintOnce)
1057 {
1058 std::map<std::string, unsigned int>::iterator messageIter = s.uniqueLogMessages.find(message);
1059 if (messageIter != s.uniqueLogMessages.end())
1060 {
1061 messageIter->second++;
1062 unsigned int num_messages = messageIter->second;
1063 if (num_messages == 10 || num_messages == 50 || (num_messages % 100) == 0)
1064 {
1065 prefix << "ONCE (" << num_messages << "th time seen): ";
1066 }
1067 else
1068 {
1069 return;
1070 }
1071 }
1072 else
1073 {
1074 prefix << "ONCE: ";
1075 s.uniqueLogMessages[message] = 1;
1076 }
1077 }
1021 1078
1022 prefix << message; 1079 prefix << message;
1023 message = prefix.str(); 1080 message = prefix.str();
diff --git a/linden/indra/llcommon/llerror.h b/linden/indra/llcommon/llerror.h
index e1ace39..0a066bf 100644
--- a/linden/indra/llcommon/llerror.h
+++ b/linden/indra/llcommon/llerror.h
@@ -45,23 +45,23 @@
45 45
46 Code can log messages with constuctions like this: 46 Code can log messages with constuctions like this:
47 47
48 llinfos << "request to fizzbip agent " << agent_id 48 LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id
49 << " denied due to timeout" << llendl; 49 << " denied due to timeout" << LL_ENDL;
50 50
51 Messages can be logged to one of four increasing levels of concern, 51 Messages can be logged to one of four increasing levels of concern,
52 using one of four "streams": 52 using one of four "streams":
53 53
54 lldebugs - debug messages that are normally supressed 54 LL_DEBUGS("StringTag") - debug messages that are normally supressed
55 llinfos - informational messages that are normall shown 55 LL_INFOS("StringTag") - informational messages that are normall shown
56 llwarns - warning messages that singal a problem 56 LL_WARNS("StringTag") - warning messages that singal a problem
57 llerrs - error messages that are major, unrecoverable failures 57 LL_ERRS("StringTag") - error messages that are major, unrecoverable failures
58 58
59 The later (llerrs) automatically crashes the process after the message 59 The later (LL_ERRS("StringTag")) automatically crashes the process after the message
60 is logged. 60 is logged.
61 61
62 Note that these "streams" are actually #define magic. Rules for use: 62 Note that these "streams" are actually #define magic. Rules for use:
63 * they cannot be used as normal streams, only to start a message 63 * they cannot be used as normal streams, only to start a message
64 * messages written to them MUST be terminated with llendl 64 * messages written to them MUST be terminated with LL_ENDL
65 * between the opening and closing, the << operator is indeed 65 * between the opening and closing, the << operator is indeed
66 writing onto a std::ostream, so all conversions and stream 66 writing onto a std::ostream, so all conversions and stream
67 formating are available 67 formating are available
@@ -85,7 +85,7 @@
85 { 85 {
86 if (i > 100) 86 if (i > 100)
87 { 87 {
88 llwanrs << "called with a big value for i: " << i << llendl; 88 LL_WARNS("FooBarTag") << "called with a big value for i: " << i << LL_ENDL;
89 } 89 }
90 ... 90 ...
91 } 91 }
@@ -100,7 +100,7 @@
100 100
101 Lastly, logging is now very efficient in both compiled code and execution 101 Lastly, logging is now very efficient in both compiled code and execution
102 when skipped. There is no need to wrap messages, even debugging ones, in 102 when skipped. There is no need to wrap messages, even debugging ones, in
103 #ifdef _DEBUG constructs. lldebugs messages are compiled into all builds, 103 #ifdef _DEBUG constructs. LL_DEBUGS("StringTag") messages are compiled into all builds,
104 even release. Which means you can use them to help debug even when deployed 104 even release. Which means you can use them to help debug even when deployed
105 to a real grid. 105 to a real grid.
106*/ 106*/
@@ -144,7 +144,7 @@ namespace LLError
144 // intended for public use. 144 // intended for public use.
145 public: 145 public:
146 CallSite(ELevel, const char* file, int line, 146 CallSite(ELevel, const char* file, int line,
147 const std::type_info& class_info, const char* function); 147 const std::type_info& class_info, const char* function, const char* broadTag, const char* narrowTag, bool printOnce);
148 148
149 bool shouldLog() 149 bool shouldLog()
150 { return mCached ? mShouldLog : Log::shouldLog(*this); } 150 { return mCached ? mShouldLog : Log::shouldLog(*this); }
@@ -156,9 +156,12 @@ namespace LLError
156 // these describe the call site and never change 156 // these describe the call site and never change
157 const ELevel mLevel; 157 const ELevel mLevel;
158 const char* const mFile; 158 const char* const mFile;
159 const int mLine; 159 const int mLine;
160 const std::type_info& mClassInfo; 160 const std::type_info& mClassInfo;
161 const char* const mFunction; 161 const char* const mFunction;
162 const char* const mBroadTag;
163 const char* const mNarrowTag;
164 const bool mPrintOnce;
162 165
163 // these implement a cache of the call to shouldLog() 166 // these implement a cache of the call to shouldLog()
164 bool mCached; 167 bool mCached;
@@ -200,39 +203,66 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
200 See top of file for common usage. 203 See top of file for common usage.
201*/ 204*/
202 205
203#define lllog(level) \ 206#define lllog(level, broadTag, narrowTag, once) \
204 { \ 207 { \
205 static LLError::CallSite _site( \ 208 static LLError::CallSite _site( \
206 level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__);\ 209 level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, broadTag, narrowTag, once);\
207 if (_site.shouldLog()) \ 210 if (_site.shouldLog()) \
208 { \ 211 { \
209 std::ostringstream* _out = LLError::Log::out(); \ 212 std::ostringstream* _out = LLError::Log::out(); \
210 (*_out) 213 (*_out)
211 214
215// DEPRECATED: Don't call directly, use LL_ENDL instead, which actually looks like a macro
212#define llendl \ 216#define llendl \
213 LLError::End(); \ 217 LLError::End(); \
214 LLError::Log::flush(_out, _site); \ 218 LLError::Log::flush(_out, _site); \
215 } \ 219 } \
216 } 220 }
217 221
218#define llinfos lllog(LLError::LEVEL_INFO) 222// DEPRECATED: Use the new macros that allow tags and *look* like macros.
219#define lldebugs lllog(LLError::LEVEL_DEBUG) 223#define lldebugs lllog(LLError::LEVEL_DEBUG, NULL, NULL, false)
220#define llwarns lllog(LLError::LEVEL_WARN) 224#define llinfos lllog(LLError::LEVEL_INFO, NULL, NULL, false)
221#define llerrs lllog(LLError::LEVEL_ERROR) 225#define llwarns lllog(LLError::LEVEL_WARN, NULL, NULL, false)
222 226#define llerrs lllog(LLError::LEVEL_ERROR, NULL, NULL, false)
223#define llcont (*_out) 227#define llcont (*_out)
228
229// NEW Macros for debugging, allow the passing of a string tag
230
231// One Tag
232#define LL_DEBUGS(broadTag) lllog(LLError::LEVEL_DEBUG, broadTag, NULL, false)
233#define LL_INFOS(broadTag) lllog(LLError::LEVEL_INFO, broadTag, NULL, false)
234#define LL_WARNS(broadTag) lllog(LLError::LEVEL_WARN, broadTag, NULL, false)
235#define LL_ERRS(broadTag) lllog(LLError::LEVEL_ERROR, broadTag, NULL, false)
236// Two Tags
237#define LL_DEBUGS2(broadTag, narrowTag) lllog(LLError::LEVEL_DEBUG, broadTag, narrowTag, false)
238#define LL_INFOS2(broadTag, narrowTag) lllog(LLError::LEVEL_INFO, broadTag, narrowTag, false)
239#define LL_WARNS2(broadTag, narrowTag) lllog(LLError::LEVEL_WARN, broadTag, narrowTag, false)
240#define LL_ERRS2(broadTag, narrowTag) lllog(LLError::LEVEL_ERROR, broadTag, narrowTag, false)
241
242// Only print the log message once (good for warnings or infos that would otherwise
243// spam the log file over and over, such as tighter loops).
244#define LL_DEBUGS_ONCE(broadTag) lllog(LLError::LEVEL_DEBUG, broadTag, NULL, true)
245#define LL_INFOS_ONCE(broadTag) lllog(LLError::LEVEL_INFO, broadTag, NULL, true)
246#define LL_WARNS_ONCE(broadTag) lllog(LLError::LEVEL_WARN, broadTag, NULL, true)
247#define LL_DEBUGS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_DEBUG, broadTag, narrowTag, true)
248#define LL_INFOS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_INFO, broadTag, narrowTag, true)
249#define LL_WARNS2_ONCE(broadTag, narrowTag) lllog(LLError::LEVEL_WARN, broadTag, narrowTag, true)
250
251#define LL_ENDL llendl
252#define LL_CONT (*_out)
253
224 /* 254 /*
225 Use this construct if you need to do computation in the middle of a 255 Use this construct if you need to do computation in the middle of a
226 message: 256 message:
227 257
228 llinfos << "the agent " << agend_id; 258 LL_INFOS("AgentGesture") << "the agent " << agend_id;
229 switch (f) 259 switch (f)
230 { 260 {
231 case FOP_SHRUGS: llcont << "shrugs"; break; 261 case FOP_SHRUGS: LL_CONT << "shrugs"; break;
232 case FOP_TAPS: llcont << "points at " << who; break; 262 case FOP_TAPS: LL_CONT << "points at " << who; break;
233 case FOP_SAYS: llcont << "says " << message; break; 263 case FOP_SAYS: LL_CONT << "says " << message; break;
234 } 264 }
235 llcont << " for " << t << " seconds" << llendl; 265 LL_CONT << " for " << t << " seconds" << LL_ENDL;
236 266
237 Such computation is done iff the message will be logged. 267 Such computation is done iff the message will be logged.
238 */ 268 */
diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp
index 32e9622..fc0d481 100644
--- a/linden/indra/llcommon/llfile.cpp
+++ b/linden/indra/llcommon/llfile.cpp
@@ -160,7 +160,7 @@ LLFILE * LLFile::_Fiopen(const char *filename, std::ios::openmode mode,int) // p
160 | ios_base::binary, 160 | ios_base::binary,
161 0}; 161 0};
162 162
163 FILE *fp = 0; 163 LLFILE *fp = 0;
164 int n; 164 int n;
165 ios_base::openmode atendflag = mode & ios_base::ate; 165 ios_base::openmode atendflag = mode & ios_base::ate;
166 ios_base::openmode norepflag = mode & ios_base::_Noreplace; 166 ios_base::openmode norepflag = mode & ios_base::_Noreplace;
@@ -207,7 +207,7 @@ void llifstream::open(const char* _Filename, /* Flawfinder: ignore */
207 int _Prot) 207 int _Prot)
208{ // open a C stream with specified mode 208{ // open a C stream with specified mode
209 209
210 FILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::in, _Prot); 210 LLFILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::in, _Prot);
211 if(filep == NULL) 211 if(filep == NULL)
212 { 212 {
213 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/ 213 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
@@ -258,7 +258,7 @@ void llofstream::open(const char* _Filename, /* Flawfinder: ignore */
258 int _Prot) 258 int _Prot)
259{ // open a C stream with specified mode 259{ // open a C stream with specified mode
260 260
261 FILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::out, _Prot); 261 LLFILE* filep = LLFile::_Fiopen(_Filename,_Mode | ios_base::out, _Prot);
262 if(filep == NULL) 262 if(filep == NULL)
263 { 263 {
264 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/ 264 _Myios::setstate(ios_base::failbit); /*Flawfinder: ignore*/
diff --git a/linden/indra/llcommon/llfile.h b/linden/indra/llcommon/llfile.h
index d449ec9..189edbf 100644
--- a/linden/indra/llcommon/llfile.h
+++ b/linden/indra/llcommon/llfile.h
@@ -42,6 +42,8 @@
42 42
43typedef FILE LLFILE; 43typedef FILE LLFILE;
44 44
45#include <fstream>
46
45#ifdef LL_WINDOWS 47#ifdef LL_WINDOWS
46#define USE_LLFILESTREAMS 1 48#define USE_LLFILESTREAMS 1
47#else 49#else
diff --git a/linden/indra/llcommon/llfindlocale.cpp b/linden/indra/llcommon/llfindlocale.cpp
new file mode 100644
index 0000000..47da974
--- /dev/null
+++ b/linden/indra/llcommon/llfindlocale.cpp
@@ -0,0 +1,525 @@
1/**
2 * @file llfindlocale.cpp
3 * @brief Detect system language setting
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32/* Yes, this was originally C code. */
33
34#include "linden_common.h"
35
36#include <stdlib.h>
37#include <string.h>
38#include <ctype.h>
39
40#ifdef WIN32
41#include <windows.h>
42#include <winnt.h>
43#endif
44
45#include "llfindlocale.h"
46
47static int
48is_lcchar(const int c) {
49 return isalnum(c);
50}
51
52static void
53lang_country_variant_from_envstring(const char *str,
54 char **lang,
55 char **country,
56 char **variant) {
57 int end = 0;
58 int start;
59
60 /* get lang, if any */
61 start = end;
62 while (is_lcchar(str[end])) {
63 ++end;
64 }
65 if (start != end) {
66 int i;
67 int len = end - start;
68 char *s = (char*)malloc(len + 1);
69 for (i=0; i<len; ++i) {
70 s[i] = tolower(str[start + i]);
71 }
72 s[i] = '\0';
73 *lang = s;
74 } else {
75 *lang = NULL;
76 }
77
78 if (str[end] && str[end]!=':') { /* not at end of str */
79 ++end;
80 }
81
82 /* get country, if any */
83 start = end;
84 while (is_lcchar(str[end])) {
85 ++end;
86 }
87 if (start != end) {
88 int i;
89 int len = end - start;
90 char *s = (char*)malloc(len + 1);
91 for (i=0; i<len; ++i) {
92 s[i] = toupper(str[start + i]);
93 }
94 s[i] = '\0';
95 *country = s;
96 } else {
97 *country = NULL;
98 }
99
100 if (str[end] && str[end]!=':') { /* not at end of str */
101 ++end;
102 }
103
104 /* get variant, if any */
105 start = end;
106 while (str[end] && str[end]!=':') {
107 ++end;
108 }
109 if (start != end) {
110 int i;
111 int len = end - start;
112 char *s = (char*)malloc(len + 1);
113 for (i=0; i<len; ++i) {
114 s[i] = str[start + i];
115 }
116 s[i] = '\0';
117 *variant = s;
118 } else {
119 *variant = NULL;
120 }
121}
122
123
124static int
125accumulate_locstring(const char *str, FL_Locale *l) {
126 char *lang = NULL;
127 char *country = NULL;
128 char *variant = NULL;
129 if (str) {
130 lang_country_variant_from_envstring(str, &lang, &country, &variant);
131 if (lang) {
132 l->lang = lang;
133 l->country = country;
134 l->variant = variant;
135 return 1;
136 }
137 }
138 free(lang); free(country); free(variant);
139 return 0;
140}
141
142
143static int
144accumulate_env(const char *name, FL_Locale *l) {
145 char *env;
146 char *lang = NULL;
147 char *country = NULL;
148 char *variant = NULL;
149 env = getenv(name);
150 if (env) {
151 return accumulate_locstring(env, l);
152 }
153 free(lang); free(country); free(variant);
154 return 0;
155}
156
157
158static void
159canonise_fl(FL_Locale *l) {
160 /* this function fixes some common locale-specifying mistakes */
161 /* en_UK -> en_GB */
162 if (l->lang && 0 == strcmp(l->lang, "en")) {
163 if (l->country && 0 == strcmp(l->country, "UK")) {
164 free((void*)l->country);
165 l->country = strdup("GB");
166 }
167 }
168 /* ja_JA -> ja_JP */
169 if (l->lang && 0 == strcmp(l->lang, "ja")) {
170 if (l->country && 0 == strcmp(l->country, "JA")) {
171 free((void*)l->country);
172 l->country = strdup("JP");
173 }
174 }
175}
176
177
178#ifdef WIN32
179#include <stdio.h>
180#define ML(pn,sn) MAKELANGID(LANG_##pn, SUBLANG_##pn##_##sn)
181#define MLN(pn) MAKELANGID(LANG_##pn, SUBLANG_DEFAULT)
182#define RML(pn,sn) MAKELANGID(LANG_##pn, SUBLANG_##sn)
183typedef struct {
184 LANGID id;
185 char* code;
186} IDToCode;
187static const IDToCode both_to_code[] = {
188 {ML(ENGLISH,US), "en_US.ISO_8859-1"},
189 {ML(ENGLISH,CAN), "en_CA"}, /* english / canadian */
190 {ML(ENGLISH,UK), "en_GB"},
191 {ML(ENGLISH,EIRE), "en_IE"},
192 {ML(ENGLISH,AUS), "en_AU"},
193 {MLN(GERMAN), "de_DE"},
194 {MLN(SPANISH), "es_ES"},
195 {ML(SPANISH,MEXICAN), "es_MX"},
196 {MLN(FRENCH), "fr_FR"},
197 {ML(FRENCH,CANADIAN), "fr_CA"},
198 {ML(FRENCH,BELGIAN), "fr_BE"}, /* ? */
199 {ML(DUTCH,BELGIAN), "nl_BE"}, /* ? */
200 {ML(PORTUGUESE,BRAZILIAN), "pt_BR"},
201 {MLN(PORTUGUESE), "pt_PT"},
202 {MLN(SWEDISH), "sv_SE"},
203 {ML(CHINESE,HONGKONG), "zh_HK"},
204 /* these are machine-generated and not yet verified */
205 {RML(AFRIKAANS,DEFAULT), "af_ZA"},
206 {RML(ALBANIAN,DEFAULT), "sq_AL"},
207 {RML(ARABIC,ARABIC_ALGERIA), "ar_DZ"},
208 {RML(ARABIC,ARABIC_BAHRAIN), "ar_BH"},
209 {RML(ARABIC,ARABIC_EGYPT), "ar_EG"},
210 {RML(ARABIC,ARABIC_IRAQ), "ar_IQ"},
211 {RML(ARABIC,ARABIC_JORDAN), "ar_JO"},
212 {RML(ARABIC,ARABIC_KUWAIT), "ar_KW"},
213 {RML(ARABIC,ARABIC_LEBANON), "ar_LB"},
214 {RML(ARABIC,ARABIC_LIBYA), "ar_LY"},
215 {RML(ARABIC,ARABIC_MOROCCO), "ar_MA"},
216 {RML(ARABIC,ARABIC_OMAN), "ar_OM"},
217 {RML(ARABIC,ARABIC_QATAR), "ar_QA"},
218 {RML(ARABIC,ARABIC_SAUDI_ARABIA), "ar_SA"},
219 {RML(ARABIC,ARABIC_SYRIA), "ar_SY"},
220 {RML(ARABIC,ARABIC_TUNISIA), "ar_TN"},
221 {RML(ARABIC,ARABIC_UAE), "ar_AE"},
222 {RML(ARABIC,ARABIC_YEMEN), "ar_YE"},
223 {RML(ARMENIAN,DEFAULT), "hy_AM"},
224 {RML(AZERI,AZERI_CYRILLIC), "az_AZ"},
225 {RML(AZERI,AZERI_LATIN), "az_AZ"},
226 {RML(BASQUE,DEFAULT), "eu_ES"},
227 {RML(BELARUSIAN,DEFAULT), "be_BY"},
228/*{RML(BRETON,DEFAULT), "br_FR"},*/
229 {RML(BULGARIAN,DEFAULT), "bg_BG"},
230 {RML(CATALAN,DEFAULT), "ca_ES"},
231 {RML(CHINESE,CHINESE_HONGKONG), "zh_HK"},
232 {RML(CHINESE,CHINESE_MACAU), "zh_MO"},
233 {RML(CHINESE,CHINESE_SIMPLIFIED), "zh_CN"},
234 {RML(CHINESE,CHINESE_SINGAPORE), "zh_SG"},
235 {RML(CHINESE,CHINESE_TRADITIONAL), "zh_TW"},
236/*{RML(CORNISH,DEFAULT), "kw_GB"},*/
237 {RML(CZECH,DEFAULT), "cs_CZ"},
238 {RML(DANISH,DEFAULT), "da_DK"},
239 {RML(DUTCH,DUTCH), "nl_NL"},
240 {RML(DUTCH,DUTCH_BELGIAN), "nl_BE"},
241/*{RML(DUTCH,DUTCH_SURINAM), "nl_SR"},*/
242 {RML(ENGLISH,ENGLISH_AUS), "en_AU"},
243 {RML(ENGLISH,ENGLISH_BELIZE), "en_BZ"},
244 {RML(ENGLISH,ENGLISH_CAN), "en_CA"},
245 {RML(ENGLISH,ENGLISH_CARIBBEAN), "en_CB"},
246 {RML(ENGLISH,ENGLISH_EIRE), "en_IE"},
247 {RML(ENGLISH,ENGLISH_JAMAICA), "en_JM"},
248 {RML(ENGLISH,ENGLISH_NZ), "en_NZ"},
249 {RML(ENGLISH,ENGLISH_PHILIPPINES), "en_PH"},
250 {RML(ENGLISH,ENGLISH_SOUTH_AFRICA), "en_ZA"},
251 {RML(ENGLISH,ENGLISH_TRINIDAD), "en_TT"},
252 {RML(ENGLISH,ENGLISH_UK), "en_GB"},
253 {RML(ENGLISH,ENGLISH_US), "en_US"},
254 {RML(ENGLISH,ENGLISH_ZIMBABWE), "en_ZW"},
255/*{RML(ESPERANTO,DEFAULT), "eo_"},*/
256 {RML(ESTONIAN,DEFAULT), "et_EE"},
257 {RML(FAEROESE,DEFAULT), "fo_FO"},
258 {RML(FARSI,DEFAULT), "fa_IR"},
259 {RML(FINNISH,DEFAULT), "fi_FI"},
260 {RML(FRENCH,FRENCH), "fr_FR"},
261 {RML(FRENCH,FRENCH_BELGIAN), "fr_BE"},
262 {RML(FRENCH,FRENCH_CANADIAN), "fr_CA"},
263 {RML(FRENCH,FRENCH_LUXEMBOURG), "fr_LU"},
264 {RML(FRENCH,FRENCH_MONACO), "fr_MC"},
265 {RML(FRENCH,FRENCH_SWISS), "fr_CH"},
266/*{RML(GAELIC,GAELIC), "ga_IE"},*/
267/*{RML(GAELIC,GAELIC_MANX), "gv_GB"},*/
268/*{RML(GAELIC,GAELIC_SCOTTISH), "gd_GB"},*/
269/*{RML(GALICIAN,DEFAULT), "gl_ES"},*/
270 {RML(GEORGIAN,DEFAULT), "ka_GE"},
271 {RML(GERMAN,GERMAN), "de_DE"},
272 {RML(GERMAN,GERMAN_AUSTRIAN), "de_AT"},
273 {RML(GERMAN,GERMAN_LIECHTENSTEIN), "de_LI"},
274 {RML(GERMAN,GERMAN_LUXEMBOURG), "de_LU"},
275 {RML(GERMAN,GERMAN_SWISS), "de_CH"},
276 {RML(GREEK,DEFAULT), "el_GR"},
277 {RML(GUJARATI,DEFAULT), "gu_IN"},
278 {RML(HEBREW,DEFAULT), "he_IL"},
279 {RML(HINDI,DEFAULT), "hi_IN"},
280 {RML(HUNGARIAN,DEFAULT), "hu_HU"},
281 {RML(ICELANDIC,DEFAULT), "is_IS"},
282 {RML(INDONESIAN,DEFAULT), "id_ID"},
283 {RML(ITALIAN,ITALIAN), "it_IT"},
284 {RML(ITALIAN,ITALIAN_SWISS), "it_CH"},
285 {RML(JAPANESE,DEFAULT), "ja_JP"},
286 {RML(KANNADA,DEFAULT), "kn_IN"},
287 {RML(KAZAK,DEFAULT), "kk_KZ"},
288 {RML(KONKANI,DEFAULT), "kok_IN"},
289 {RML(KOREAN,KOREAN), "ko_KR"},
290/*{RML(KYRGYZ,DEFAULT), "ky_KG"},*/
291 {RML(LATVIAN,DEFAULT), "lv_LV"},
292 {RML(LITHUANIAN,LITHUANIAN), "lt_LT"},
293 {RML(MACEDONIAN,DEFAULT), "mk_MK"},
294 {RML(MALAY,MALAY_BRUNEI_DARUSSALAM), "ms_BN"},
295 {RML(MALAY,MALAY_MALAYSIA), "ms_MY"},
296 {RML(MARATHI,DEFAULT), "mr_IN"},
297/*{RML(MONGOLIAN,DEFAULT), "mn_MN"},*/
298 {RML(NORWEGIAN,NORWEGIAN_BOKMAL), "nb_NO"},
299 {RML(NORWEGIAN,NORWEGIAN_NYNORSK), "nn_NO"},
300 {RML(POLISH,DEFAULT), "pl_PL"},
301 {RML(PORTUGUESE,PORTUGUESE), "pt_PT"},
302 {RML(PORTUGUESE,PORTUGUESE_BRAZILIAN), "pt_BR"},
303 {RML(PUNJABI,DEFAULT), "pa_IN"},
304 {RML(ROMANIAN,DEFAULT), "ro_RO"},
305 {RML(RUSSIAN,DEFAULT), "ru_RU"},
306 {RML(SANSKRIT,DEFAULT), "sa_IN"},
307 {RML(SERBIAN,DEFAULT), "hr_HR"},
308 {RML(SERBIAN,SERBIAN_CYRILLIC), "sr_SP"},
309 {RML(SERBIAN,SERBIAN_LATIN), "sr_SP"},
310 {RML(SLOVAK,DEFAULT), "sk_SK"},
311 {RML(SLOVENIAN,DEFAULT), "sl_SI"},
312 {RML(SPANISH,SPANISH), "es_ES"},
313 {RML(SPANISH,SPANISH_ARGENTINA), "es_AR"},
314 {RML(SPANISH,SPANISH_BOLIVIA), "es_BO"},
315 {RML(SPANISH,SPANISH_CHILE), "es_CL"},
316 {RML(SPANISH,SPANISH_COLOMBIA), "es_CO"},
317 {RML(SPANISH,SPANISH_COSTA_RICA), "es_CR"},
318 {RML(SPANISH,SPANISH_DOMINICAN_REPUBLIC), "es_DO"},
319 {RML(SPANISH,SPANISH_ECUADOR), "es_EC"},
320 {RML(SPANISH,SPANISH_EL_SALVADOR), "es_SV"},
321 {RML(SPANISH,SPANISH_GUATEMALA), "es_GT"},
322 {RML(SPANISH,SPANISH_HONDURAS), "es_HN"},
323 {RML(SPANISH,SPANISH_MEXICAN), "es_MX"},
324 {RML(SPANISH,SPANISH_MODERN), "es_ES"},
325 {RML(SPANISH,SPANISH_NICARAGUA), "es_NI"},
326 {RML(SPANISH,SPANISH_PANAMA), "es_PA"},
327 {RML(SPANISH,SPANISH_PARAGUAY), "es_PY"},
328 {RML(SPANISH,SPANISH_PERU), "es_PE"},
329 {RML(SPANISH,SPANISH_PUERTO_RICO), "es_PR"},
330 {RML(SPANISH,SPANISH_URUGUAY), "es_UY"},
331 {RML(SPANISH,SPANISH_VENEZUELA), "es_VE"},
332 {RML(SWAHILI,DEFAULT), "sw_KE"},
333 {RML(SWEDISH,SWEDISH), "sv_SE"},
334 {RML(SWEDISH,SWEDISH_FINLAND), "sv_FI"},
335/*{RML(SYRIAC,DEFAULT), "syr_SY"},*/
336 {RML(TAMIL,DEFAULT), "ta_IN"},
337 {RML(TATAR,DEFAULT), "tt_TA"},
338 {RML(TELUGU,DEFAULT), "te_IN"},
339 {RML(THAI,DEFAULT), "th_TH"},
340 {RML(TURKISH,DEFAULT), "tr_TR"},
341 {RML(UKRAINIAN,DEFAULT), "uk_UA"},
342 {RML(URDU,URDU_PAKISTAN), "ur_PK"},
343 {RML(UZBEK,UZBEK_CYRILLIC), "uz_UZ"},
344 {RML(UZBEK,UZBEK_LATIN), "uz_UZ"},
345 {RML(VIETNAMESE,DEFAULT), "vi_VN"},
346/*{RML(WALON,DEFAULT), "wa_BE"},*/
347/*{RML(WELSH,DEFAULT), "cy_GB"},*/
348};
349static const IDToCode primary_to_code[] = {
350 {LANG_AFRIKAANS, "af"},
351 {LANG_ARABIC, "ar"},
352 {LANG_AZERI, "az"},
353 {LANG_BULGARIAN, "bg"},
354/*{LANG_BRETON, "br"},*/
355 {LANG_BELARUSIAN, "by"},
356 {LANG_CATALAN, "ca"},
357 {LANG_CZECH, "cs"},
358/*{LANG_WELSH, "cy"},*/
359 {LANG_DANISH, "da"},
360 {LANG_GERMAN, "de"},
361 {LANG_GREEK, "el"},
362 {LANG_ENGLISH, "en"},
363/*{LANG_ESPERANTO, "eo"},*/
364 {LANG_SPANISH, "es"},
365 {LANG_ESTONIAN, "et"},
366 {LANG_BASQUE, "eu"},
367 {LANG_FARSI, "fa"},
368 {LANG_FINNISH, "fi"},
369 {LANG_FAEROESE, "fo"},
370 {LANG_FRENCH, "fr"},
371/*{LANG_GAELIC, "ga"},*/
372/*{LANG_GALICIAN, "gl"},*/
373 {LANG_GUJARATI, "gu"},
374 {LANG_HEBREW, "he"},
375 {LANG_HINDI, "hi"},
376 {LANG_SERBIAN, "hr"},
377 {LANG_HUNGARIAN, "hu"},
378 {LANG_ARMENIAN, "hy"},
379 {LANG_INDONESIAN, "id"},
380 {LANG_ITALIAN, "it"},
381 {LANG_JAPANESE, "ja"},
382 {LANG_GEORGIAN, "ka"},
383 {LANG_KAZAK, "kk"},
384 {LANG_KANNADA, "kn"},
385 {LANG_KOREAN, "ko"},
386/*{LANG_KYRGYZ, "ky"},*/
387 {LANG_LITHUANIAN, "lt"},
388 {LANG_LATVIAN, "lv"},
389 {LANG_MACEDONIAN, "mk"},
390/*{LANG_MONGOLIAN, "mn"},*/
391 {LANG_MARATHI, "mr"},
392 {LANG_MALAY, "ms"},
393 {LANG_NORWEGIAN, "nb"},
394 {LANG_DUTCH, "nl"},
395 {LANG_NORWEGIAN, "nn"},
396 {LANG_NORWEGIAN, "no"},/* unofficial? */
397 {LANG_PUNJABI, "pa"},
398 {LANG_POLISH, "pl"},
399 {LANG_PORTUGUESE, "pt"},
400 {LANG_ROMANIAN, "ro"},
401 {LANG_RUSSIAN, "ru"},
402 {LANG_SLOVAK, "sk"},
403 {LANG_SLOVENIAN, "sl"},
404 {LANG_ALBANIAN, "sq"},
405 {LANG_SERBIAN, "sr"},
406 {LANG_SWEDISH, "sv"},
407 {LANG_SWAHILI, "sw"},
408 {LANG_TAMIL, "ta"},
409 {LANG_THAI, "th"},
410 {LANG_TURKISH, "tr"},
411 {LANG_TATAR, "tt"},
412 {LANG_UKRAINIAN, "uk"},
413 {LANG_URDU, "ur"},
414 {LANG_UZBEK, "uz"},
415 {LANG_VIETNAMESE, "vi"},
416/*{LANG_WALON, "wa"},*/
417 {LANG_CHINESE, "zh"},
418};
419static int num_primary_to_code =
420 sizeof(primary_to_code) / sizeof(*primary_to_code);
421static int num_both_to_code =
422 sizeof(both_to_code) / sizeof(*both_to_code);
423
424static const int
425lcid_to_fl(LCID lcid,
426 FL_Locale *rtn) {
427 LANGID langid = LANGIDFROMLCID(lcid);
428 LANGID primary_lang = PRIMARYLANGID(langid);
429 /*LANGID sub_lang = SUBLANGID(langid);*/
430 int i;
431 /* try to find an exact primary/sublanguage combo that we know about */
432 for (i=0; i<num_both_to_code; ++i) {
433 if (both_to_code[i].id == langid) {
434 accumulate_locstring(both_to_code[i].code, rtn);
435 return 1;
436 }
437 }
438 /* fallback to just checking the primary language id */
439 for (i=0; i<num_primary_to_code; ++i) {
440 if (primary_to_code[i].id == primary_lang) {
441 accumulate_locstring(primary_to_code[i].code, rtn);
442 return 1;
443 }
444 }
445 return 0;
446}
447#endif
448
449
450FL_Success
451FL_FindLocale(FL_Locale **locale, FL_Domain domain) {
452 FL_Success success = FL_FAILED;
453 FL_Locale *rtn = (FL_Locale*)malloc(sizeof(FL_Locale));
454 rtn->lang = NULL;
455 rtn->country = NULL;
456 rtn->variant = NULL;
457
458#ifdef WIN32
459 /* win32 >= mswindows95 */
460 {
461 LCID lcid = GetThreadLocale();
462 if (lcid_to_fl(lcid, rtn)) {
463 success = FL_CONFIDENT;
464 }
465 if (success == FL_FAILED) {
466 /* assume US English on mswindows systems unless we know otherwise */
467 if (accumulate_locstring("en_US.ISO_8859-1", rtn)) {
468 success = FL_DEFAULT_GUESS;
469 }
470 }
471 }
472#else
473 /* assume unixoid */
474 {
475 /* examples: */
476 /* sv_SE.ISO_8859-1 */
477 /* fr_FR.ISO8859-1 */
478 /* no_NO_NB */
479 /* no_NO_NY */
480 /* no_NO */
481 /* de_DE */
482 /* try the various vars in decreasing order of authority */
483 if (accumulate_env("LC_ALL", rtn) ||
484 accumulate_env("LC_MESSAGES", rtn) ||
485 accumulate_env("LANG", rtn) ||
486 accumulate_env("LANGUAGE", rtn)) {
487 success = FL_CONFIDENT;
488 }
489 if (success == FL_FAILED) {
490 /* assume US English on unixoid systems unless we know otherwise */
491 if (accumulate_locstring("en_US.ISO_8859-1", rtn)) {
492 success = FL_DEFAULT_GUESS;
493 }
494 }
495 }
496#endif
497
498 if (success != FL_FAILED) {
499 canonise_fl(rtn);
500 }
501
502 *locale = rtn;
503 return success;
504}
505
506
507void
508FL_FreeLocale(FL_Locale **locale) {
509 if (locale) {
510 FL_Locale *l = *locale;
511 if (l) {
512 if (l->lang) {
513 free((void*)l->lang);
514 }
515 if (l->country) {
516 free((void*)l->country);
517 }
518 if (l->variant) {
519 free((void*)l->variant);
520 }
521 free(l);
522 *locale = NULL;
523 }
524 }
525}
diff --git a/linden/indra/llcommon/llfindlocale.h b/linden/indra/llcommon/llfindlocale.h
new file mode 100644
index 0000000..6cc2dbb
--- /dev/null
+++ b/linden/indra/llcommon/llfindlocale.h
@@ -0,0 +1,65 @@
1/**
2 * @file llfindlocale.h
3 * @brief Detect system language setting
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef __findlocale_h_
33#define __findlocale_h_
34
35typedef const char* FL_Lang;
36typedef const char* FL_Country;
37typedef const char* FL_Variant;
38
39typedef struct {
40 FL_Lang lang;
41 FL_Country country;
42 FL_Variant variant;
43} FL_Locale;
44
45typedef enum {
46 /* for some reason we failed to even guess: this should never happen */
47 FL_FAILED = 0,
48 /* couldn't query locale -- returning a guess (almost always English) */
49 FL_DEFAULT_GUESS = 1,
50 /* the returned locale type was found by successfully asking the system */
51 FL_CONFIDENT = 2
52} FL_Success;
53
54typedef enum {
55 FL_MESSAGES = 0
56} FL_Domain;
57
58/* This allocates/fills in a FL_Locale structure with pointers to
59 strings (which should be treated as static), or NULL for inappropriate /
60 undetected fields. */
61FL_Success FL_FindLocale(FL_Locale **locale, FL_Domain domain);
62/* This should be used to free the struct written by FL_FindLocale */
63void FL_FreeLocale(FL_Locale **locale);
64
65#endif /*__findlocale_h_*/
diff --git a/linden/indra/llcommon/llheartbeat.cpp b/linden/indra/llcommon/llheartbeat.cpp
new file mode 100644
index 0000000..13bcd46
--- /dev/null
+++ b/linden/indra/llcommon/llheartbeat.cpp
@@ -0,0 +1,165 @@
1/**
2 * @file llheartbeat.cpp
3 * @brief Class encapsulating logic for telling a watchdog that we live.
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include <errno.h>
33#include <signal.h>
34
35#include "linden_common.h"
36#include "llapp.h"
37
38#include "llheartbeat.h"
39
40LLHeartbeat::LLHeartbeat(F32 secs_between_heartbeat,
41 F32 aggressive_heartbeat_panic_secs,
42 F32 aggressive_heartbeat_max_blocking_secs)
43 : mSecsBetweenHeartbeat(secs_between_heartbeat),
44 mAggressiveHeartbeatPanicSecs(aggressive_heartbeat_panic_secs),
45 mAggressiveHeartbeatMaxBlockingSecs(aggressive_heartbeat_max_blocking_secs),
46 mSuppressed(false)
47{
48 mBeatTimer.reset();
49 mBeatTimer.setTimerExpirySec(mSecsBetweenHeartbeat);
50 mPanicTimer.reset();
51 mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs);
52}
53
54LLHeartbeat::~LLHeartbeat()
55{
56 // do nothing.
57}
58
59void
60LLHeartbeat::setSuppressed(bool is_suppressed)
61{
62 mSuppressed = is_suppressed;
63}
64
65// returns 0 on success, -1 on permanent failure, 1 on temporary failure
66int
67LLHeartbeat::rawSend()
68{
69#if LL_WINDOWS
70 return 0; // Pretend we succeeded.
71#else
72 if (mSuppressed)
73 return 0; // Pretend we succeeded.
74
75 union sigval dummy;
76 int result = sigqueue(getppid(), LL_HEARTBEAT_SIGNAL, dummy);
77 if (result == 0)
78 return 0; // success
79
80 int err = errno;
81 if (err == EAGAIN)
82 return 1; // failed to queue, try again
83
84 return -1; // other failure.
85#endif
86}
87
88int
89LLHeartbeat::rawSendWithTimeout(F32 timeout_sec)
90{
91 int result = 0;
92
93 // Spin tightly until our heartbeat is digested by the watchdog
94 // or we time-out. We don't really want to sleep because our
95 // wake-up time might be undesirably synchronised to a hidden
96 // clock by the system's scheduler.
97 mTimeoutTimer.reset();
98 mTimeoutTimer.setTimerExpirySec(timeout_sec);
99 do {
100 result = rawSend();
101 //llinfos << " HEARTSENDc=" << result << llendl;
102 } while (result==1 && !mTimeoutTimer.hasExpired());
103
104 return result;
105}
106
107bool
108LLHeartbeat::send(F32 timeout_sec)
109{
110 bool total_success = false;
111 int result = 1;
112
113 if (timeout_sec > 0.f) {
114 // force a spin until success or timeout
115 result = rawSendWithTimeout(timeout_sec);
116 } else {
117 if (mBeatTimer.hasExpired()) {
118 // zero-timeout; we don't care too much whether our
119 // heartbeat was digested.
120 result = rawSend();
121 //llinfos << " HEARTSENDb=" << result << llendl;
122 }
123 }
124
125 if (result == -1) {
126 // big failure.
127 } else if (result == 0) {
128 total_success = true;
129 } else {
130 // need to retry at some point
131 }
132
133 if (total_success) {
134 mBeatTimer.reset();
135 mBeatTimer.setTimerExpirySec(mSecsBetweenHeartbeat);
136 // reset the time until we start panicking about lost
137 // heartbeats again.
138 mPanicTimer.reset();
139 mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs);
140 } else {
141 // leave mBeatTimer as expired so we'll lazily poke the
142 // watchdog again next time through.
143 }
144
145 if (mPanicTimer.hasExpired()) {
146 // It's been ages since we successfully had a heartbeat
147 // digested by the watchdog. Sit here and spin a while
148 // in the hope that we can force it through.
149 llwarns << "Unable to deliver heartbeat to launcher for " << mPanicTimer.getElapsedTimeF32() << " seconds. Going to try very hard for up to " << mAggressiveHeartbeatMaxBlockingSecs << " seconds." << llendl;
150 result = rawSendWithTimeout(mAggressiveHeartbeatMaxBlockingSecs);
151 if (result == 0) {
152 total_success = true;
153 } else {
154 // we couldn't even force it through. That's bad,
155 // but we'll try again in a while.
156 llwarns << "Could not deliver heartbeat to launcher even after trying very hard for " << mAggressiveHeartbeatMaxBlockingSecs << " seconds." << llendl;
157 }
158
159 // in any case, reset the panic timer.
160 mPanicTimer.reset();
161 mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs);
162 }
163
164 return total_success;
165}
diff --git a/linden/indra/llcommon/llheartbeat.h b/linden/indra/llcommon/llheartbeat.h
new file mode 100644
index 0000000..8a2fa0a
--- /dev/null
+++ b/linden/indra/llcommon/llheartbeat.h
@@ -0,0 +1,73 @@
1/**
2 * @file llheartbeat.h
3 * @brief Class encapsulating logic for telling a watchdog that we live.
4 *
5 * $LicenseInfo:firstyear=2008&license=viewergpl$
6 *
7 * Copyright (c) 2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLHEARTBEAT_H
33#define LL_LLHEARTBEAT_H
34
35#include "linden_common.h"
36
37#include "lltimer.h"
38
39// Note: Win32 does not support the heartbeat/smackdown system;
40// heartbeat-delivery turns into a no-op there.
41
42class LLHeartbeat
43{
44public:
45 // secs_between_heartbeat: after a heartbeat is successfully delivered,
46 // we suppress sending more for this length of time.
47 // aggressive_heartbeat_panic_secs: if we've been failing to
48 // successfully deliver heartbeats for this length of time then
49 // we block for a while until we're really sure we got one delivered.
50 // aggressive_heartbeat_max_blocking_secs: this is the length of
51 // time we block for when we're aggressively ensuring that a 'panic'
52 // heartbeat was delivered.
53 LLHeartbeat(F32 secs_between_heartbeat = 5.0f,
54 F32 aggressive_heartbeat_panic_secs = 10.0f,
55 F32 aggressive_heartbeat_max_blocking_secs = 4.0f);
56 ~LLHeartbeat();
57
58 bool send(F32 timeout_sec = 0.0f);
59 void setSuppressed(bool is_suppressed);
60
61private:
62 int rawSend();
63 int rawSendWithTimeout(F32 timeout_sec);
64 F32 mSecsBetweenHeartbeat;
65 F32 mAggressiveHeartbeatPanicSecs;
66 F32 mAggressiveHeartbeatMaxBlockingSecs;
67 bool mSuppressed;
68 LLTimer mBeatTimer;
69 LLTimer mPanicTimer;
70 LLTimer mTimeoutTimer;
71};
72
73#endif // LL_HEARTBEAT_H
diff --git a/linden/indra/llcommon/llindraconfigfile.cpp b/linden/indra/llcommon/llindraconfigfile.cpp
new file mode 100644
index 0000000..7ef1a9b
--- /dev/null
+++ b/linden/indra/llcommon/llindraconfigfile.cpp
@@ -0,0 +1,107 @@
1/**
2 * @file llindraconfigfile.cpp
3 *
4 *
5 * This class is an LLLiveFile that has config info for indra
6 * Currently only whether it's blacklisted
7 *
8 * $LicenseInfo:firstyear=2007&license=internal$
9 *
10 * Copyright (c) 2007-2008, Linden Research, Inc.
11 *
12 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
13 * this source code is governed by the Linden Lab Source Code Disclosure
14 * Agreement ("Agreement") previously entered between you and Linden
15 * Lab. By accessing, using, copying, modifying or distributing this
16 * software, you acknowledge that you have been informed of your
17 * obligations under the Agreement and agree to abide by those obligations.
18 *
19 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
20 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
21 * COMPLETENESS OR PERFORMANCE.
22 * $/LicenseInfo$
23 */
24
25#include "llindraconfigfile.h"
26
27#include "llfile.h"
28#include "llsd.h"
29#include "llsdserialize.h"
30#include "llframetimer.h"
31
32static std::string sConfigDir = "";
33static const char indraConfigFileName[] = "indra.xml";
34
35
36LLIndraConfigFile::LLIndraConfigFile()
37 : LLLiveFile(filename(), configFileRefreshRate),
38 mConfig(LLSD())
39{
40}
41
42//static
43void LLIndraConfigFile::initClass(const std::string& config_dir)
44{
45 sConfigDir = config_dir;
46 llinfos << "LLIndraConfigFile::initClass config dir "
47 << config_dir << "/" << indraConfigFileName << llendl;
48}
49
50LLSD LLIndraConfigFile::getConfig(const std::string& config_name)
51{
52 if (sConfigDir.empty())
53 {
54 llerrs << "LLIndraConfigFile::initClass() not called" << llendl;
55 }
56
57 LLFrameTimer::updateFrameTime();
58
59 static LLIndraConfigFile the_file;
60 the_file.checkAndReload();
61
62 return the_file.mConfig[config_name];
63}
64
65std::string LLIndraConfigFile::filename()
66{
67 std::ostringstream ostr;
68
69 ostr << sConfigDir
70 << "/" << indraConfigFileName;
71
72 return ostr.str();
73}
74
75/* virtual */
76void LLIndraConfigFile::loadFile()
77{
78 llinfos << "LLIndraConfigFile::loadFile: reading from "
79 << filename() << llendl;
80
81 LLSD config;
82
83 {
84 llifstream file(filename().c_str());
85 if (file.is_open())
86 {
87 LLSDSerialize::fromXML(config, file);
88 }
89
90 if (config.isUndefined())
91 {
92 llinfos << "LLIndraConfigFile::loadFile: file missing, ill-formed,"
93 " or simply undefined; not changing the blacklist" << llendl;
94 return;
95 }
96 }
97
98 if (config.isMap())
99 {
100 mConfig = config;
101 }
102 else
103 {
104 llwarns << "LLIndraConfigFile: " << indraConfigFileName << " expects a map; wrong format" << llendl;
105 return;
106 }
107}
diff --git a/linden/indra/llcommon/llindraconfigfile.h b/linden/indra/llcommon/llindraconfigfile.h
new file mode 100644
index 0000000..271a848
--- /dev/null
+++ b/linden/indra/llcommon/llindraconfigfile.h
@@ -0,0 +1,50 @@
1/**
2 * @file llindraconfigfile.h
3 * @brief manages configuration file for indra.xml
4 *
5 * $LicenseInfo:firstyear=2007&license=internal$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * The following source code is PROPRIETARY AND CONFIDENTIAL. Use of
10 * this source code is governed by the Linden Lab Source Code Disclosure
11 * Agreement ("Agreement") previously entered between you and Linden
12 * Lab. By accessing, using, copying, modifying or distributing this
13 * software, you acknowledge that you have been informed of your
14 * obligations under the Agreement and agree to abide by those obligations.
15 *
16 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
17 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
18 * COMPLETENESS OR PERFORMANCE.
19 * $/LicenseInfo$
20 */
21
22#ifndef LL_LLINDRACONFIGFILE_H
23#define LL_LLINDRACONFIGFILE_H
24
25#include <string>
26#include "linden_common.h"
27
28#include "lllivefile.h"
29#include "llsd.h"
30
31
32// To use, call LLIndraConfigFile::initClass(config_dir);
33// Then whenever getConfig is called, it will check and reload automatically
34
35class LLIndraConfigFile : public LLLiveFile
36{
37public:
38 LLIndraConfigFile();
39 static void initClass(const std::string& config_dir);
40 static LLSD getConfig(const std::string& config_name);
41
42private:
43 static std::string filename();
44
45protected:
46 /* virtual */ void loadFile();
47 LLSD mConfig;
48};
49
50#endif //LL_LLINDRACONFIGFILE_H
diff --git a/linden/indra/llcommon/llkeyusetracker.h b/linden/indra/llcommon/llkeyusetracker.h
new file mode 100644
index 0000000..c37ba24
--- /dev/null
+++ b/linden/indra/llcommon/llkeyusetracker.h
@@ -0,0 +1,220 @@
1/**
2 * @file llkeyusetracker.h
3 * @brief Declaration of the LLKeyUseTracker class.
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_KEYUSETRACKER_H
33#define LL_KEYUSETRACKER_H
34
35// This is a generic cache for an arbitrary data type indexed against an
36// arbitrary key type. The cache length is determined by expiration time
37// tince against last use and set size. The age of elements and the size
38// of the cache are queryable.
39//
40// This is implemented as a list, which makes search O(n). If you reuse this
41// for something with a large dataset, consider reimplementing with a Boost
42// multimap based on both a map(key) and priority queue(last_use).
43
44template <class TKey, class TData>
45class KeyUseTrackerNodeImpl
46{
47public:
48 U64 mLastUse;
49 U32 mUseCount;
50 TKey mKey;
51 TData mData;
52
53 KeyUseTrackerNodeImpl( TKey k, TData d ) :
54 mLastUse(0),
55 mUseCount(0),
56 mKey( k ),
57 mData( d )
58 {
59 }
60};
61
62
63template <class TKey, class TData>
64class LLKeyUseTracker
65{
66 typedef KeyUseTrackerNodeImpl<TKey,TData> TKeyUseTrackerNode;
67 typedef std::list<TKeyUseTrackerNode *> TKeyList;
68 TKeyList mKeyList;
69 U64 mMemUsecs;
70 U64 mLastExpire;
71 U32 mMaxCount;
72 U32 mCount;
73
74 static U64 getTime()
75 {
76 // This function operates on a frame basis, not instantaneous.
77 // We can rely on its output for determining first use in a
78 // frame.
79 return LLFrameTimer::getTotalTime();
80 }
81
82 void ageKeys()
83 {
84 U64 now = getTime();
85 if( now == mLastExpire )
86 {
87 return;
88 }
89 mLastExpire = now;
90
91 while( !mKeyList.empty() && (now - mKeyList.front()->mLastUse > mMemUsecs ) )
92 {
93 delete mKeyList.front();
94 mKeyList.pop_front();
95 mCount--;
96 }
97 }
98
99 TKeyUseTrackerNode *findNode( TKey key )
100 {
101 ageKeys();
102
103 typename TKeyList::iterator i;
104 for( i = mKeyList.begin(); i != mKeyList.end(); i++ )
105 {
106 if( (*i)->mKey == key )
107 return *i;
108 }
109
110 return NULL;
111 }
112
113 TKeyUseTrackerNode *removeNode( TKey key )
114 {
115 TKeyUseTrackerNode *i;
116 i = findNode( key );
117 if( i )
118 {
119 mKeyList.remove( i );
120 mCount--;
121 return i;
122 }
123
124 return NULL;
125 }
126
127public:
128 LLKeyUseTracker( U32 memory_seconds, U32 max_count ) :
129 mLastExpire(0),
130 mMaxCount( max_count ),
131 mCount(0)
132 {
133 mMemUsecs = ((U64)memory_seconds) * 1000000;
134 }
135
136 ~LLKeyUseTracker()
137 {
138 // Flush list
139 while( !mKeyList.empty() )
140 {
141 delete mKeyList.front();
142 mKeyList.pop_front();
143 mCount--;
144 }
145 }
146
147 void markUse( TKey key, TData data )
148 {
149 TKeyUseTrackerNode *node = removeNode( key );
150 if( !node )
151 {
152 node = new TKeyUseTrackerNode(key, data);
153 }
154 else
155 {
156 // Update data
157 node->mData = data;
158 }
159 node->mLastUse = getTime();
160 node->mUseCount++;
161 mKeyList.push_back( node );
162 mCount++;
163
164 // Too many items? Drop head
165 if( mCount > mMaxCount )
166 {
167 delete mKeyList.front();
168 mKeyList.pop_front();
169 mCount--;
170 }
171 }
172
173 void forgetKey( TKey key )
174 {
175 TKeyUseTrackerNode *node = removeNode( key );
176 if( node )
177 {
178 delete node;
179 }
180 }
181
182 U32 getUseCount( TKey key )
183 {
184 TKeyUseTrackerNode *node = findNode( key );
185 if( node )
186 {
187 return node->mUseCount;
188 }
189 return 0;
190 }
191
192 U64 getTimeSinceUse( TKey key )
193 {
194 TKeyUseTrackerNode *node = findNode( key );
195 if( node )
196 {
197 U64 now = getTime();
198 U64 delta = now - node->mLastUse;
199 return (U32)( delta / 1000000 );
200 }
201 return 0;
202 }
203
204 TData *getLastUseData( TKey key )
205 {
206 TKeyUseTrackerNode *node = findNode( key );
207 if( node )
208 {
209 return &node->mData;
210 }
211 return NULL;
212 }
213
214 U32 getKeyCount()
215 {
216 return mCount;
217 }
218};
219
220#endif
diff --git a/linden/indra/llcommon/lllivefile.h b/linden/indra/llcommon/lllivefile.h
index 1d55f7b..0a18fe0 100644
--- a/linden/indra/llcommon/lllivefile.h
+++ b/linden/indra/llcommon/lllivefile.h
@@ -32,6 +32,8 @@
32#ifndef LL_LLLIVEFILE_H 32#ifndef LL_LLLIVEFILE_H
33#define LL_LLLIVEFILE_H 33#define LL_LLLIVEFILE_H
34 34
35const F32 configFileRefreshRate = 5.0; // seconds
36
35 37
36class LLLiveFile 38class LLLiveFile
37{ 39{
diff --git a/linden/indra/llcommon/llmemory.cpp b/linden/indra/llcommon/llmemory.cpp
index 0f08877..5edeb4b 100644
--- a/linden/indra/llcommon/llmemory.cpp
+++ b/linden/indra/llcommon/llmemory.cpp
@@ -387,7 +387,7 @@ U64 getCurrentRSS()
387U64 getCurrentRSS() 387U64 getCurrentRSS()
388{ 388{
389 static const char statPath[] = "/proc/self/stat"; 389 static const char statPath[] = "/proc/self/stat";
390 FILE *fp = fopen(statPath, "r"); 390 LLFILE *fp = LLFile::fopen(statPath, "r");
391 U64 rss = 0; 391 U64 rss = 0;
392 392
393 if (fp == NULL) 393 if (fp == NULL)
diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp
index d67a9c4..1c0f7e0 100644
--- a/linden/indra/llcommon/llprocessor.cpp
+++ b/linden/indra/llcommon/llprocessor.cpp
@@ -2230,7 +2230,7 @@ bool CProcessor::WriteInfoTextFile(const char *strFilename)
2230 return false; 2230 return false;
2231 2231
2232 // Then we create a new file (CREATE_ALWAYS) 2232 // Then we create a new file (CREATE_ALWAYS)
2233 FILE *file = LLFile::fopen(strFilename, "w"); /* Flawfinder: ignore */ 2233 LLFILE *file = LLFile::fopen(strFilename, "w"); /* Flawfinder: ignore */
2234 if (!file) 2234 if (!file)
2235 return false; 2235 return false;
2236 2236
diff --git a/linden/indra/llcommon/llptrskipmap.h b/linden/indra/llcommon/llptrskipmap.h
index b369d77..8592197 100644
--- a/linden/indra/llcommon/llptrskipmap.h
+++ b/linden/indra/llcommon/llptrskipmap.h
@@ -238,7 +238,8 @@ private:
238template <class INDEX_T, class DATA_T, S32 BINARY_DEPTH> 238template <class INDEX_T, class DATA_T, S32 BINARY_DEPTH>
239inline LLPtrSkipMap<INDEX_T, DATA_T, BINARY_DEPTH>::LLPtrSkipMap() 239inline LLPtrSkipMap<INDEX_T, DATA_T, BINARY_DEPTH>::LLPtrSkipMap()
240 : mInsertFirst(NULL), 240 : mInsertFirst(NULL),
241 mEquals(defaultEquals) 241 mEquals(defaultEquals),
242 mNumberOfSteps(0)
242{ 243{
243 if (BINARY_DEPTH < 2) 244 if (BINARY_DEPTH < 2)
244 { 245 {
@@ -259,7 +260,8 @@ template <class INDEX_T, class DATA_T, S32 BINARY_DEPTH>
259inline LLPtrSkipMap<INDEX_T, DATA_T, BINARY_DEPTH>::LLPtrSkipMap(insert_func insert_first, 260inline LLPtrSkipMap<INDEX_T, DATA_T, BINARY_DEPTH>::LLPtrSkipMap(insert_func insert_first,
260 equals_func equals) 261 equals_func equals)
261: mInsertFirst(insert_first), 262: mInsertFirst(insert_first),
262 mEquals(equals) 263 mEquals(equals),
264 mNumberOfSteps(0)
263{ 265{
264 if (BINARY_DEPTH < 2) 266 if (BINARY_DEPTH < 2)
265 { 267 {
diff --git a/linden/indra/llcommon/llsdserialize.h b/linden/indra/llcommon/llsdserialize.h
index 41e0aa5..f5282b4 100644
--- a/linden/indra/llcommon/llsdserialize.h
+++ b/linden/indra/llcommon/llsdserialize.h
@@ -390,7 +390,7 @@ public:
390 /** 390 /**
391 * Options for output 391 * Options for output
392 */ 392 */
393 enum e_formatter_options_type 393 typedef enum e_formatter_options_type
394 { 394 {
395 OPTIONS_NONE = 0, 395 OPTIONS_NONE = 0,
396 OPTIONS_PRETTY = 1 396 OPTIONS_PRETTY = 1
diff --git a/linden/indra/llcommon/llsdutil.h b/linden/indra/llcommon/llsdutil.h
index c058185..ae6d694 100644
--- a/linden/indra/llcommon/llsdutil.h
+++ b/linden/indra/llcommon/llsdutil.h
@@ -101,4 +101,16 @@ BOOL compare_llsd_with_template(
101 const LLSD& template_llsd, 101 const LLSD& template_llsd,
102 LLSD& resultant_llsd); 102 LLSD& resultant_llsd);
103 103
104// Simple function to copy data out of input & output iterators if
105// there is no need for casting.
106template<typename Input> LLSD llsd_copy_array(Input iter, Input end)
107{
108 LLSD dest;
109 for (; iter != end; ++iter)
110 {
111 dest.append(*iter);
112 }
113 return dest;
114}
115
104#endif // LL_LLSDUTIL_H 116#endif // LL_LLSDUTIL_H
diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp
index ccdcd00..1285851 100644
--- a/linden/indra/llcommon/llsys.cpp
+++ b/linden/indra/llcommon/llsys.cpp
@@ -293,7 +293,7 @@ U32 LLOSInfo::getProcessVirtualSizeKB()
293#if LL_WINDOWS 293#if LL_WINDOWS
294#endif 294#endif
295#if LL_LINUX 295#if LL_LINUX
296 FILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); 296 LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb");
297 S32 numRead = 0; 297 S32 numRead = 0;
298 char buff[STATUS_SIZE]; /* Flawfinder: ignore */ 298 char buff[STATUS_SIZE]; /* Flawfinder: ignore */
299 299
@@ -336,7 +336,7 @@ U32 LLOSInfo::getProcessResidentSizeKB()
336#if LL_WINDOWS 336#if LL_WINDOWS
337#endif 337#endif
338#if LL_LINUX 338#if LL_LINUX
339 FILE* status_filep = LLFile::fopen("/proc/self/status", "rb"); 339 LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb");
340 if (status_filep != NULL) 340 if (status_filep != NULL)
341 { 341 {
342 S32 numRead = 0; 342 S32 numRead = 0;
@@ -398,7 +398,7 @@ LLCPUInfo::LLCPUInfo()
398 398
399#elif LL_LINUX 399#elif LL_LINUX
400 std::map< LLString, LLString > cpuinfo; 400 std::map< LLString, LLString > cpuinfo;
401 FILE* cpuinfo_fp = LLFile::fopen(CPUINFO_FILE, "rb"); 401 LLFILE* cpuinfo_fp = LLFile::fopen(CPUINFO_FILE, "rb");
402 if(cpuinfo_fp) 402 if(cpuinfo_fp)
403 { 403 {
404 char line[MAX_STRING]; 404 char line[MAX_STRING];
@@ -486,7 +486,7 @@ void LLCPUInfo::stream(std::ostream& s) const
486 } 486 }
487#else 487#else
488 // *NOTE: This works on linux. What will it do on other systems? 488 // *NOTE: This works on linux. What will it do on other systems?
489 FILE* cpuinfo = LLFile::fopen(CPUINFO_FILE, "rb"); 489 LLFILE* cpuinfo = LLFile::fopen(CPUINFO_FILE, "rb");
490 if(cpuinfo) 490 if(cpuinfo)
491 { 491 {
492 char line[MAX_STRING]; 492 char line[MAX_STRING];
@@ -621,7 +621,7 @@ void LLMemoryInfo::stream(std::ostream& s) const
621 s << "Total Physical KB: " << phys << std::endl; 621 s << "Total Physical KB: " << phys << std::endl;
622#else 622#else
623 // *NOTE: This works on linux. What will it do on other systems? 623 // *NOTE: This works on linux. What will it do on other systems?
624 FILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb"); 624 LLFILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb");
625 if(meminfo) 625 if(meminfo)
626 { 626 {
627 char line[MAX_STRING]; /* Flawfinder: ignore */ 627 char line[MAX_STRING]; /* Flawfinder: ignore */
@@ -665,7 +665,7 @@ BOOL gunzip_file(const char *srcfile, const char *dstfile)
665 BOOL retval = FALSE; 665 BOOL retval = FALSE;
666 gzFile src = NULL; 666 gzFile src = NULL;
667 U8 buffer[UNCOMPRESS_BUFFER_SIZE]; 667 U8 buffer[UNCOMPRESS_BUFFER_SIZE];
668 FILE *dst = NULL; 668 LLFILE *dst = NULL;
669 S32 bytes = 0; 669 S32 bytes = 0;
670 (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */ 670 (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */
671 (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */ 671 (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */
@@ -700,7 +700,7 @@ BOOL gzip_file(const char *srcfile, const char *dstfile)
700 BOOL retval = FALSE; 700 BOOL retval = FALSE;
701 U8 buffer[COMPRESS_BUFFER_SIZE]; 701 U8 buffer[COMPRESS_BUFFER_SIZE];
702 gzFile dst = NULL; 702 gzFile dst = NULL;
703 FILE *src = NULL; 703 LLFILE *src = NULL;
704 S32 bytes = 0; 704 S32 bytes = 0;
705 (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */ 705 (void *) strcpy(tmpfile, dstfile); /* Flawfinder: ignore */
706 (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */ 706 (void *) strncat(tmpfile, ".t", sizeof(tmpfile) - strlen(tmpfile) -1); /* Flawfinder: ignore */
diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp
index a421dce..25d9897 100644
--- a/linden/indra/llcommon/lltimer.cpp
+++ b/linden/indra/llcommon/lltimer.cpp
@@ -39,10 +39,8 @@
39# define WIN32_LEAN_AND_MEAN 39# define WIN32_LEAN_AND_MEAN
40# include <winsock2.h> 40# include <winsock2.h>
41# include <windows.h> 41# include <windows.h>
42#elif LL_LINUX || LL_SOLARIS 42#elif LL_LINUX || LL_SOLARIS || LL_DARWIN
43# include <sys/time.h> 43# include <errno.h>
44# include <sched.h>
45#elif LL_DARWIN
46# include <sys/time.h> 44# include <sys/time.h>
47#else 45#else
48# error "architecture not supported" 46# error "architecture not supported"
@@ -81,42 +79,55 @@ U64 gLastTotalTimeClockCount = 0;
81//--------------------------------------------------------------------------- 79//---------------------------------------------------------------------------
82 80
83#if LL_WINDOWS 81#if LL_WINDOWS
84void ms_sleep(long ms) 82void ms_sleep(U32 ms)
85{ 83{
86 Sleep((U32)ms); 84 Sleep(ms);
87} 85}
88 86#elif LL_LINUX || LL_SOLARIS || LL_DARWIN
89void llyield() 87void ms_sleep(U32 ms)
90{ 88{
91 SleepEx(0, TRUE); // Relinquishes time slice to any thread of equal priority, can be woken up by extended IO functions 89 long mslong = ms; // tv_nsec is a long
92} 90 struct timespec thiswait, nextwait;
93#elif LL_LINUX || LL_SOLARIS 91 bool sleep_more = false;
94void ms_sleep(long ms)
95{
96 struct timespec t;
97 t.tv_sec = ms / 1000;
98 t.tv_nsec = (ms % 1000) * 1000000l;
99 nanosleep(&t, NULL);
100}
101 92
102void llyield() 93 thiswait.tv_sec = ms / 1000;
103{ 94 thiswait.tv_nsec = (mslong % 1000) * 1000000l;
104 sched_yield(); 95 do {
105} 96 int result = nanosleep(&thiswait, &nextwait);
106#elif LL_DARWIN
107void ms_sleep(long ms)
108{
109 struct timespec t;
110 t.tv_sec = ms / 1000;
111 t.tv_nsec = (ms % 1000) * 1000000l;
112 nanosleep(&t, NULL);
113}
114 97
115void llyield() 98 // check if sleep was interrupted by a signal; unslept
116{ 99 // remainder was written back into 't' and we just nanosleep
117// sched_yield(); 100 // again.
101 sleep_more = (result == -1 && EINTR == errno);
102
103 if (sleep_more)
104 {
105 if ( nextwait.tv_sec > thiswait.tv_sec ||
106 (nextwait.tv_sec == thiswait.tv_sec &&
107 nextwait.tv_nsec >= thiswait.tv_nsec) )
108 {
109 // if the remaining time isn't actually going
110 // down then we're being shafted by low clock
111 // resolution - manually massage the sleep time
112 // downward.
113 if (nextwait.tv_nsec > 1000000) {
114 // lose 1ms
115 nextwait.tv_nsec -= 1000000;
116 } else {
117 if (nextwait.tv_sec == 0) {
118 // already so close to finished
119 sleep_more = false;
120 } else {
121 // lose up to 1ms
122 nextwait.tv_nsec = 0;
123 }
124 }
125 }
126 thiswait = nextwait;
127 }
128 } while (sleep_more);
118} 129}
119#else 130#else
120# error "architecture not supported" 131# error "architecture not supported"
121#endif 132#endif
122 133
@@ -323,7 +334,7 @@ void LLTimer::setTimerExpirySec(F32 expiration)
323 + (U64)((F32)(expiration * gClockFrequency)); 334 + (U64)((F32)(expiration * gClockFrequency));
324} 335}
325 336
326F32 LLTimer::getRemainingTimeF32() 337F32 LLTimer::getRemainingTimeF32() const
327{ 338{
328 U64 cur_ticks = get_clock_count(); 339 U64 cur_ticks = get_clock_count();
329 if (cur_ticks > mExpirationTicks) 340 if (cur_ticks > mExpirationTicks)
@@ -348,7 +359,7 @@ BOOL LLTimer::checkExpirationAndReset(F32 expiration)
348} 359}
349 360
350 361
351BOOL LLTimer::hasExpired() 362BOOL LLTimer::hasExpired() const
352{ 363{
353 return (get_clock_count() >= mExpirationTicks) 364 return (get_clock_count() >= mExpirationTicks)
354 ? TRUE : FALSE; 365 ? TRUE : FALSE;
@@ -550,3 +561,4 @@ void LLEventTimer::updateClass()
550 } 561 }
551} 562}
552 563
564
diff --git a/linden/indra/llcommon/lltimer.h b/linden/indra/llcommon/lltimer.h
index 8a4bc76..91b93d6 100644
--- a/linden/indra/llcommon/lltimer.h
+++ b/linden/indra/llcommon/lltimer.h
@@ -87,11 +87,11 @@ public:
87 void setLastClockCount(U64 current_count); // Sets the timer so that the next elapsed call will be relative to this time 87 void setLastClockCount(U64 current_count); // Sets the timer so that the next elapsed call will be relative to this time
88 void setTimerExpirySec(F32 expiration); 88 void setTimerExpirySec(F32 expiration);
89 BOOL checkExpirationAndReset(F32 expiration); 89 BOOL checkExpirationAndReset(F32 expiration);
90 BOOL hasExpired(); 90 BOOL hasExpired() const;
91 F32 getElapsedTimeAndResetF32(); // Returns elapsed time in seconds with reset 91 F32 getElapsedTimeAndResetF32(); // Returns elapsed time in seconds with reset
92 F64 getElapsedTimeAndResetF64(); 92 F64 getElapsedTimeAndResetF64();
93 93
94 F32 getRemainingTimeF32(); 94 F32 getRemainingTimeF32() const;
95 95
96 static BOOL knownBadTimer(); 96 static BOOL knownBadTimer();
97 97
@@ -112,12 +112,8 @@ U64 get_clock_count();
112F64 calc_clock_frequency(U32 msecs); 112F64 calc_clock_frequency(U32 msecs);
113void update_clock_frequencies(); 113void update_clock_frequencies();
114 114
115
116// Sleep for milliseconds 115// Sleep for milliseconds
117void ms_sleep(long ms); 116void ms_sleep(U32 ms);
118
119// Yield
120//void llyield(); // Yield your timeslice - not implemented yet for Mac, so commented out.
121 117
122// Returns the correct UTC time in seconds, like time(NULL). 118// Returns the correct UTC time in seconds, like time(NULL).
123// Useful on the viewer, which may have its local clock set wrong. 119// Useful on the viewer, which may have its local clock set wrong.
diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h
index e865b6a..e3ceadf 100644
--- a/linden/indra/llcommon/llversionserver.h
+++ b/linden/indra/llcommon/llversionserver.h
@@ -33,9 +33,9 @@
33#define LL_LLVERSIONSERVER_H 33#define LL_LLVERSIONSERVER_H
34 34
35const S32 LL_VERSION_MAJOR = 1; 35const S32 LL_VERSION_MAJOR = 1;
36const S32 LL_VERSION_MINOR = 20; 36const S32 LL_VERSION_MINOR = 21;
37const S32 LL_VERSION_PATCH = 0; 37const S32 LL_VERSION_PATCH = 1;
38const S32 LL_VERSION_BUILD = 83892; 38const S32 LL_VERSION_BUILD = 86526;
39 39
40const char * const LL_CHANNEL = "Second Life Server"; 40const char * const LL_CHANNEL = "Second Life Server";
41 41
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h
index 71bb12e..db3d42d 100644
--- a/linden/indra/llcommon/llversionviewer.h
+++ b/linden/indra/llcommon/llversionviewer.h
@@ -34,7 +34,7 @@
34 34
35const S32 LL_VERSION_MAJOR = 1; 35const S32 LL_VERSION_MAJOR = 1;
36const S32 LL_VERSION_MINOR = 20; 36const S32 LL_VERSION_MINOR = 20;
37const S32 LL_VERSION_PATCH = 5; 37const S32 LL_VERSION_PATCH = 7;
38const S32 LL_VERSION_BUILD = 0; 38const S32 LL_VERSION_BUILD = 0;
39 39
40const char * const LL_CHANNEL = "Second Life Release"; 40const char * const LL_CHANNEL = "Second Life Release";
diff --git a/linden/indra/llimage/llimagetga.cpp b/linden/indra/llimage/llimagetga.cpp
index 4da374e..bd03abb 100644
--- a/linden/indra/llimage/llimagetga.cpp
+++ b/linden/indra/llimage/llimagetga.cpp
@@ -1128,7 +1128,7 @@ bool LLImageTGA::loadFile( const LLString& path )
1128 return false; 1128 return false;
1129 } 1129 }
1130 1130
1131 FILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ 1131 LLFILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */
1132 if( !file ) 1132 if( !file )
1133 { 1133 {
1134 llwarns << "Couldn't open file " << path << llendl; 1134 llwarns << "Couldn't open file " << path << llendl;
diff --git a/linden/indra/llimagej2coj/llimagej2coj.cpp b/linden/indra/llimagej2coj/llimagej2coj.cpp
index 01868fd..478cc84 100644
--- a/linden/indra/llimagej2coj/llimagej2coj.cpp
+++ b/linden/indra/llimagej2coj/llimagej2coj.cpp
@@ -58,14 +58,14 @@ void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl)
58} 58}
59 59
60/** 60/**
61sample error callback expecting a FILE* client object 61sample error callback expecting a LLFILE* client object
62*/ 62*/
63void error_callback(const char* msg, void*) 63void error_callback(const char* msg, void*)
64{ 64{
65 lldebugs << "LLImageJ2CImpl error_callback: " << msg << llendl; 65 lldebugs << "LLImageJ2CImpl error_callback: " << msg << llendl;
66} 66}
67/** 67/**
68sample warning callback expecting a FILE* client object 68sample warning callback expecting a LLFILE* client object
69*/ 69*/
70void warning_callback(const char* msg, void*) 70void warning_callback(const char* msg, void*)
71{ 71{
diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp
index 4c58789..8cd0700 100644
--- a/linden/indra/llinventory/llinventory.cpp
+++ b/linden/indra/llinventory/llinventory.cpp
@@ -217,7 +217,7 @@ BOOL LLInventoryObject::importLegacyStream(std::istream& input_stream)
217 217
218// exportFile should be replaced with exportLegacyStream 218// exportFile should be replaced with exportLegacyStream
219// not sure whether exportLegacyStream(llofstream(fp)) would work, fp may need to get icramented... 219// not sure whether exportLegacyStream(llofstream(fp)) would work, fp may need to get icramented...
220BOOL LLInventoryObject::exportFile(FILE* fp, BOOL) const 220BOOL LLInventoryObject::exportFile(LLFILE* fp, BOOL) const
221{ 221{
222 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 222 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
223 fprintf(fp, "\tinv_object\t0\n\t{\n"); 223 fprintf(fp, "\tinv_object\t0\n\t{\n");
@@ -520,7 +520,7 @@ BOOL LLInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32
520} 520}
521 521
522// virtual 522// virtual
523BOOL LLInventoryItem::importFile(FILE* fp) 523BOOL LLInventoryItem::importFile(LLFILE* fp)
524{ 524{
525 // *NOTE: Changing the buffer size will require changing the scanf 525 // *NOTE: Changing the buffer size will require changing the scanf
526 // calls below. 526 // calls below.
@@ -674,7 +674,7 @@ BOOL LLInventoryItem::importFile(FILE* fp)
674 return success; 674 return success;
675} 675}
676 676
677BOOL LLInventoryItem::exportFile(FILE* fp, BOOL include_asset_key) const 677BOOL LLInventoryItem::exportFile(LLFILE* fp, BOOL include_asset_key) const
678{ 678{
679 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 679 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
680 fprintf(fp, "\tinv_item\t0\n\t{\n"); 680 fprintf(fp, "\tinv_item\t0\n\t{\n");
@@ -1429,7 +1429,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg,
1429} 1429}
1430 1430
1431// virtual 1431// virtual
1432BOOL LLInventoryCategory::importFile(FILE* fp) 1432BOOL LLInventoryCategory::importFile(LLFILE* fp)
1433{ 1433{
1434 // *NOTE: Changing the buffer size will require changing the scanf 1434 // *NOTE: Changing the buffer size will require changing the scanf
1435 // calls below. 1435 // calls below.
@@ -1495,7 +1495,7 @@ BOOL LLInventoryCategory::importFile(FILE* fp)
1495 return TRUE; 1495 return TRUE;
1496} 1496}
1497 1497
1498BOOL LLInventoryCategory::exportFile(FILE* fp, BOOL) const 1498BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const
1499{ 1499{
1500 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 1500 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
1501 fprintf(fp, "\tinv_category\t0\n\t{\n"); 1501 fprintf(fp, "\tinv_category\t0\n\t{\n");
diff --git a/linden/indra/llinventory/llinventory.h b/linden/indra/llinventory/llinventory.h
index b4199db..1bb6b85 100644
--- a/linden/indra/llinventory/llinventory.h
+++ b/linden/indra/llinventory/llinventory.h
@@ -101,8 +101,8 @@ public:
101 101
102 // file support - implemented here so that a minimal information 102 // file support - implemented here so that a minimal information
103 // set can be transmitted between simulator and viewer. 103 // set can be transmitted between simulator and viewer.
104// virtual BOOL importFile(FILE* fp); 104// virtual BOOL importFile(LLFILE* fp);
105 virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; 105 virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
106 106
107 virtual BOOL importLegacyStream(std::istream& input_stream); 107 virtual BOOL importLegacyStream(std::istream& input_stream);
108 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; 108 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
@@ -259,8 +259,8 @@ public:
259 // we want to detect network mangling somehow. 259 // we want to detect network mangling somehow.
260 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); 260 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
261 // file support 261 // file support
262 virtual BOOL importFile(FILE* fp); 262 virtual BOOL importFile(LLFILE* fp);
263 virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; 263 virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
264 264
265 virtual BOOL importLegacyStream(std::istream& input_stream); 265 virtual BOOL importLegacyStream(std::istream& input_stream);
266 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; 266 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
@@ -319,8 +319,8 @@ public:
319 bool fromLLSD(LLSD& sd); 319 bool fromLLSD(LLSD& sd);
320 320
321 // file support 321 // file support
322 virtual BOOL importFile(FILE* fp); 322 virtual BOOL importFile(LLFILE* fp);
323 virtual BOOL exportFile(FILE* fp, BOOL include_asset_key = TRUE) const; 323 virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const;
324 324
325 virtual BOOL importLegacyStream(std::istream& input_stream); 325 virtual BOOL importLegacyStream(std::istream& input_stream);
326 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; 326 virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
diff --git a/linden/indra/llinventory/llpermissions.cpp b/linden/indra/llinventory/llpermissions.cpp
index 8d800aa..afa2772 100644
--- a/linden/indra/llinventory/llpermissions.cpp
+++ b/linden/indra/llinventory/llpermissions.cpp
@@ -544,7 +544,7 @@ void LLPermissions::unpackMessage(LLMessageSystem* msg, const char* block, S32 b
544// File support 544// File support
545// 545//
546 546
547BOOL LLPermissions::importFile(FILE* fp) 547BOOL LLPermissions::importFile(LLFILE* fp)
548{ 548{
549 init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null); 549 init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null);
550 const S32 BUFSIZE = 16384; 550 const S32 BUFSIZE = 16384;
@@ -648,7 +648,7 @@ BOOL LLPermissions::importFile(FILE* fp)
648} 648}
649 649
650 650
651BOOL LLPermissions::exportFile(FILE* fp) const 651BOOL LLPermissions::exportFile(LLFILE* fp) const
652{ 652{
653 char uuid_str[256]; /* Flawfinder: ignore */ 653 char uuid_str[256]; /* Flawfinder: ignore */
654 654
diff --git a/linden/indra/llinventory/llpermissions.h b/linden/indra/llinventory/llpermissions.h
index 05a30f6..6c858bf 100644
--- a/linden/indra/llinventory/llpermissions.h
+++ b/linden/indra/llinventory/llpermissions.h
@@ -302,8 +302,8 @@ public:
302 void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); 302 void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
303 303
304 // Load/save support 304 // Load/save support
305 BOOL importFile(FILE* fp); 305 BOOL importFile(LLFILE* fp);
306 BOOL exportFile(FILE* fp) const; 306 BOOL exportFile(LLFILE* fp) const;
307 307
308 BOOL importLegacyStream(std::istream& input_stream); 308 BOOL importLegacyStream(std::istream& input_stream);
309 BOOL exportLegacyStream(std::ostream& output_stream) const; 309 BOOL exportLegacyStream(std::ostream& output_stream) const;
diff --git a/linden/indra/llinventory/llsaleinfo.cpp b/linden/indra/llinventory/llsaleinfo.cpp
index bff075b..7aabdda 100644
--- a/linden/indra/llinventory/llsaleinfo.cpp
+++ b/linden/indra/llinventory/llsaleinfo.cpp
@@ -84,7 +84,7 @@ U32 LLSaleInfo::getCRC32() const
84} 84}
85 85
86 86
87BOOL LLSaleInfo::exportFile(FILE* fp) const 87BOOL LLSaleInfo::exportFile(LLFILE* fp) const
88{ 88{
89 fprintf(fp, "\tsale_info\t0\n\t{\n"); 89 fprintf(fp, "\tsale_info\t0\n\t{\n");
90 fprintf(fp, "\t\tsale_type\t%s\n", lookup(mSaleType)); 90 fprintf(fp, "\t\tsale_type\t%s\n", lookup(mSaleType));
@@ -158,7 +158,7 @@ BOOL LLSaleInfo::importXML(LLXMLNode* node)
158 return success; 158 return success;
159} 159}
160 160
161BOOL LLSaleInfo::importFile(FILE* fp, BOOL& has_perm_mask, U32& perm_mask) 161BOOL LLSaleInfo::importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask)
162{ 162{
163 has_perm_mask = FALSE; 163 has_perm_mask = FALSE;
164 164
diff --git a/linden/indra/llinventory/llsaleinfo.h b/linden/indra/llinventory/llsaleinfo.h
index 0af8d89..9aa1024 100644
--- a/linden/indra/llinventory/llsaleinfo.h
+++ b/linden/indra/llinventory/llsaleinfo.h
@@ -91,8 +91,8 @@ public:
91 91
92 92
93 // file serialization 93 // file serialization
94 BOOL exportFile(FILE* fp) const; 94 BOOL exportFile(LLFILE* fp) const;
95 BOOL importFile(FILE* fp, BOOL& has_perm_mask, U32& perm_mask); 95 BOOL importFile(LLFILE* fp, BOOL& has_perm_mask, U32& perm_mask);
96 96
97 BOOL exportLegacyStream(std::ostream& output_stream) const; 97 BOOL exportLegacyStream(std::ostream& output_stream) const;
98 LLSD asLLSD() const; 98 LLSD asLLSD() const;
diff --git a/linden/indra/llmath/llcrc.cpp b/linden/indra/llmath/llcrc.cpp
index 2338691..447521a 100644
--- a/linden/indra/llmath/llcrc.cpp
+++ b/linden/indra/llmath/llcrc.cpp
@@ -171,7 +171,7 @@ void LLCRC::update(const char* filename)
171 return; 171 return;
172 } 172 }
173 173
174 FILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ 174 LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */
175 175
176 if (fp) 176 if (fp)
177 { 177 {
diff --git a/linden/indra/llmath/llcrc.h b/linden/indra/llmath/llcrc.h
index 64e939c..59f58ce 100644
--- a/linden/indra/llmath/llcrc.h
+++ b/linden/indra/llmath/llcrc.h
@@ -41,7 +41,7 @@
41// example (don't try this at work kids): 41// example (don't try this at work kids):
42// 42//
43// LLCRC crc; 43// LLCRC crc;
44// FILE* fp = LLFile::fopen(filename,"rb"); 44// LLFILE* fp = LLFile::fopen(filename,"rb");
45// while(!feof(fp)) { 45// while(!feof(fp)) {
46// crc.update(fgetc(fp)); 46// crc.update(fgetc(fp));
47// } 47// }
diff --git a/linden/indra/llmath/llmath_vc8.vcproj b/linden/indra/llmath/llmath_vc8.vcproj
index e85a852..3b4413a 100644
--- a/linden/indra/llmath/llmath_vc8.vcproj
+++ b/linden/indra/llmath/llmath_vc8.vcproj
@@ -246,6 +246,10 @@
246 > 246 >
247 </File> 247 </File>
248 <File 248 <File
249 RelativePath=".\llline.cpp"
250 >
251 </File>
252 <File
249 RelativePath=".\llmd5.cpp" 253 RelativePath=".\llmd5.cpp"
250 > 254 >
251 </File> 255 </File>
@@ -266,6 +270,10 @@
266 > 270 >
267 </File> 271 </File>
268 <File 272 <File
273 RelativePath=".\llsphere.cpp"
274 >
275 </File>
276 <File
269 RelativePath=".\lluuid.cpp" 277 RelativePath=".\lluuid.cpp"
270 > 278 >
271 </File> 279 </File>
@@ -352,6 +360,10 @@
352 > 360 >
353 </File> 361 </File>
354 <File 362 <File
363 RelativePath=".\llline.h"
364 >
365 </File>
366 <File
355 RelativePath=".\llmath.h" 367 RelativePath=".\llmath.h"
356 > 368 >
357 </File> 369 </File>
@@ -384,6 +396,10 @@
384 > 396 >
385 </File> 397 </File>
386 <File 398 <File
399 RelativePath=".\llsphere.h"
400 >
401 </File>
402 <File
387 RelativePath=".\lltreenode.h" 403 RelativePath=".\lltreenode.h"
388 > 404 >
389 </File> 405 </File>
diff --git a/linden/indra/llmath/llmath_vc9.vcproj b/linden/indra/llmath/llmath_vc9.vcproj
index 6d60d1e..03bc780 100644
--- a/linden/indra/llmath/llmath_vc9.vcproj
+++ b/linden/indra/llmath/llmath_vc9.vcproj
@@ -247,6 +247,10 @@
247 > 247 >
248 </File> 248 </File>
249 <File 249 <File
250 RelativePath=".\llline.cpp"
251 >
252 </File>
253 <File
250 RelativePath=".\llmd5.cpp" 254 RelativePath=".\llmd5.cpp"
251 > 255 >
252 </File> 256 </File>
@@ -267,6 +271,10 @@
267 > 271 >
268 </File> 272 </File>
269 <File 273 <File
274 RelativePath=".\llsphere.cpp"
275 >
276 </File>
277 <File
270 RelativePath=".\lluuid.cpp" 278 RelativePath=".\lluuid.cpp"
271 > 279 >
272 </File> 280 </File>
@@ -353,6 +361,10 @@
353 > 361 >
354 </File> 362 </File>
355 <File 363 <File
364 RelativePath=".\llline.h"
365 >
366 </File>
367 <File
356 RelativePath=".\llmath.h" 368 RelativePath=".\llmath.h"
357 > 369 >
358 </File> 370 </File>
@@ -385,6 +397,10 @@
385 > 397 >
386 </File> 398 </File>
387 <File 399 <File
400 RelativePath=".\llsphere.h"
401 >
402 </File>
403 <File
388 RelativePath=".\lltreenode.h" 404 RelativePath=".\lltreenode.h"
389 > 405 >
390 </File> 406 </File>
diff --git a/linden/indra/llmath/llmd5.cpp b/linden/indra/llmath/llmd5.cpp
index a0ac92f..ea69002 100644
--- a/linden/indra/llmath/llmd5.cpp
+++ b/linden/indra/llmath/llmd5.cpp
@@ -157,7 +157,7 @@ void LLMD5::update (const uint1 *input, const uint4 input_length) {
157// MD5 update for files. 157// MD5 update for files.
158// Like above, except that it works on files (and uses above as a primitive.) 158// Like above, except that it works on files (and uses above as a primitive.)
159 159
160void LLMD5::update(FILE* file){ 160void LLMD5::update(LLFILE* file){
161 161
162 unsigned char buffer[BLOCK_LEN]; /* Flawfinder: ignore */ 162 unsigned char buffer[BLOCK_LEN]; /* Flawfinder: ignore */
163 int len; 163 int len;
@@ -237,7 +237,7 @@ void LLMD5::finalize (){
237 237
238 238
239 239
240LLMD5::LLMD5(FILE *file){ 240LLMD5::LLMD5(LLFILE *file){
241 241
242 init(); // must be called be all constructors 242 init(); // must be called be all constructors
243 update(file); 243 update(file);
diff --git a/linden/indra/llmath/llmd5.h b/linden/indra/llmath/llmd5.h
index 6d21b31..9ba0a9f 100644
--- a/linden/indra/llmath/llmd5.h
+++ b/linden/indra/llmath/llmd5.h
@@ -93,14 +93,14 @@ public:
93 LLMD5 (); // simple initializer 93 LLMD5 (); // simple initializer
94 void update (const uint1 *input, const uint4 input_length); 94 void update (const uint1 *input, const uint4 input_length);
95 void update (std::istream& stream); 95 void update (std::istream& stream);
96 void update (FILE *file); 96 void update (LLFILE *file);
97 void finalize (); 97 void finalize ();
98 98
99// constructors for special circumstances. All these constructors finalize 99// constructors for special circumstances. All these constructors finalize
100// the MD5 context. 100// the MD5 context.
101 LLMD5 (const unsigned char *string); // digest string, finalize 101 LLMD5 (const unsigned char *string); // digest string, finalize
102 LLMD5 (std::istream& stream); // digest stream, finalize 102 LLMD5 (std::istream& stream); // digest stream, finalize
103 LLMD5 (FILE *file); // digest file, close, finalize 103 LLMD5 (LLFILE *file); // digest file, close, finalize
104 LLMD5 (const unsigned char *string, const unsigned int number); 104 LLMD5 (const unsigned char *string, const unsigned int number);
105 105
106// methods to acquire finalized result 106// methods to acquire finalized result
diff --git a/linden/indra/llmath/lloctree.h b/linden/indra/llmath/lloctree.h
index 52ad1bb..e26bae5 100644
--- a/linden/indra/llmath/lloctree.h
+++ b/linden/indra/llmath/lloctree.h
@@ -38,9 +38,9 @@
38#include <set> 38#include <set>
39 39
40#ifdef LL_RELEASE_FOR_DOWNLOAD 40#ifdef LL_RELEASE_FOR_DOWNLOAD
41#define OCT_ERRS llwarns 41#define OCT_ERRS LL_WARNS("OctreeErrors")
42#else 42#else
43#define OCT_ERRS llerrs 43#define OCT_ERRS LL_ERRS("OctreeErrors")
44#endif 44#endif
45 45
46#define LL_OCTREE_PARANOIA_CHECK 0 46#define LL_OCTREE_PARANOIA_CHECK 0
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 527100a..f7c9286 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -770,7 +770,7 @@ BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detai
770 770
771 771
772 772
773BOOL LLProfileParams::importFile(FILE *fp) 773BOOL LLProfileParams::importFile(LLFILE *fp)
774{ 774{
775 LLMemType m1(LLMemType::MTYPE_VOLUME); 775 LLMemType m1(LLMemType::MTYPE_VOLUME);
776 776
@@ -834,7 +834,7 @@ BOOL LLProfileParams::importFile(FILE *fp)
834} 834}
835 835
836 836
837BOOL LLProfileParams::exportFile(FILE *fp) const 837BOOL LLProfileParams::exportFile(LLFILE *fp) const
838{ 838{
839 fprintf(fp,"\t\tprofile 0\n"); 839 fprintf(fp,"\t\tprofile 0\n");
840 fprintf(fp,"\t\t{\n"); 840 fprintf(fp,"\t\t{\n");
@@ -1282,7 +1282,7 @@ BOOL LLDynamicPath::generate(const LLPathParams& params, F32 detail, S32 split,
1282} 1282}
1283 1283
1284 1284
1285BOOL LLPathParams::importFile(FILE *fp) 1285BOOL LLPathParams::importFile(LLFILE *fp)
1286{ 1286{
1287 LLMemType m1(LLMemType::MTYPE_VOLUME); 1287 LLMemType m1(LLMemType::MTYPE_VOLUME);
1288 1288
@@ -1403,7 +1403,7 @@ BOOL LLPathParams::importFile(FILE *fp)
1403} 1403}
1404 1404
1405 1405
1406BOOL LLPathParams::exportFile(FILE *fp) const 1406BOOL LLPathParams::exportFile(LLFILE *fp) const
1407{ 1407{
1408 fprintf(fp, "\t\tpath 0\n"); 1408 fprintf(fp, "\t\tpath 0\n");
1409 fprintf(fp, "\t\t{\n"); 1409 fprintf(fp, "\t\t{\n");
@@ -1874,7 +1874,6 @@ inline LLVector3 sculpt_rgb_to_vector(U8 r, U8 g, U8 b)
1874inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components) 1874inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components)
1875{ 1875{
1876 U32 index = (x + y * sculpt_width) * sculpt_components; 1876 U32 index = (x + y * sculpt_width) * sculpt_components;
1877
1878 return index; 1877 return index;
1879} 1878}
1880 1879
@@ -3560,18 +3559,22 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3560 LLMemType m1(LLMemType::MTYPE_VOLUME); 3559 LLMemType m1(LLMemType::MTYPE_VOLUME);
3561 3560
3562 /* Testing: avoid any cleanup 3561 /* Testing: avoid any cleanup
3563 num_output_vertices = num_input_vertices; 3562 static BOOL skip_cleanup = TRUE;
3564 num_output_triangles = num_input_triangles; 3563 if ( skip_cleanup )
3565
3566 *output_vertices = new LLVector3[num_input_vertices];
3567 for (S32 i = 0; i < num_input_vertices; i++)
3568 { 3564 {
3569 (*output_vertices)[i] = input_vertices[i].mPos; 3565 num_output_vertices = num_input_vertices;
3570 } 3566 num_output_triangles = num_input_triangles;
3571 3567
3572 *output_triangles = new S32[num_input_triangles*3]; 3568 *output_vertices = new LLVector3[num_input_vertices];
3573 memcpy(*output_triangles, input_triangles, 3*num_input_triangles*sizeof(S32)); // Flawfinder: ignore 3569 for (S32 index = 0; index < num_input_vertices; index++)
3574 return TRUE; 3570 {
3571 (*output_vertices)[index] = input_vertices[index].mPos;
3572 }
3573
3574 *output_triangles = new S32[num_input_triangles*3];
3575 memcpy(*output_triangles, input_triangles, 3*num_input_triangles*sizeof(S32)); // Flawfinder: ignore
3576 return TRUE;
3577 }
3575 */ 3578 */
3576 3579
3577 // Here's how we do this: 3580 // Here's how we do this:
@@ -3637,8 +3640,8 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3637 for (i = 0; i < num_input_triangles; i++) 3640 for (i = 0; i < num_input_triangles; i++)
3638 { 3641 {
3639 S32 v1 = i*3; 3642 S32 v1 = i*3;
3640 S32 v2 = i*3 + 1; 3643 S32 v2 = v1 + 1;
3641 S32 v3 = i*3 + 2; 3644 S32 v3 = v1 + 2;
3642 3645
3643 //llinfos << "Checking triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl; 3646 //llinfos << "Checking triangle " << input_triangles[v1] << ":" << input_triangles[v2] << ":" << input_triangles[v3] << llendl;
3644 input_triangles[v1] = vertex_mapping[input_triangles[v1]]; 3647 input_triangles[v1] = vertex_mapping[input_triangles[v1]];
@@ -3774,7 +3777,7 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices,
3774} 3777}
3775 3778
3776 3779
3777BOOL LLVolumeParams::importFile(FILE *fp) 3780BOOL LLVolumeParams::importFile(LLFILE *fp)
3778{ 3781{
3779 LLMemType m1(LLMemType::MTYPE_VOLUME); 3782 LLMemType m1(LLMemType::MTYPE_VOLUME);
3780 3783
@@ -3819,7 +3822,7 @@ BOOL LLVolumeParams::importFile(FILE *fp)
3819 return TRUE; 3822 return TRUE;
3820} 3823}
3821 3824
3822BOOL LLVolumeParams::exportFile(FILE *fp) const 3825BOOL LLVolumeParams::exportFile(LLFILE *fp) const
3823{ 3826{
3824 fprintf(fp,"\tshape 0\n"); 3827 fprintf(fp,"\tshape 0\n");
3825 fprintf(fp,"\t{\n"); 3828 fprintf(fp,"\t{\n");
@@ -3938,16 +3941,19 @@ const F32 MIN_CONCAVE_PATH_WEDGE = 0.111111f; // 1/9 unity
3938BOOL LLVolumeParams::isConvex() const 3941BOOL LLVolumeParams::isConvex() const
3939{ 3942{
3940 F32 path_length = mPathParams.getEnd() - mPathParams.getBegin(); 3943 F32 path_length = mPathParams.getEnd() - mPathParams.getBegin();
3944 F32 hollow = mProfileParams.getHollow();
3941 3945
3942 if ( mPathParams.getTwist() != mPathParams.getTwistBegin() 3946 U8 path_type = mPathParams.getCurveType();
3943 && path_length > MIN_CONCAVE_PATH_WEDGE ) 3947 if ( path_length > MIN_CONCAVE_PATH_WEDGE
3948 && ( mPathParams.getTwist() != mPathParams.getTwistBegin()
3949 || (hollow > 0.f
3950 && LL_PCODE_PATH_LINE != path_type) ) )
3944 { 3951 {
3945 // twist along a "not too short" path is concave 3952 // twist along a "not too short" path is concave
3946 return FALSE; 3953 return FALSE;
3947 } 3954 }
3948 3955
3949 F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin(); 3956 F32 profile_length = mProfileParams.getEnd() - mProfileParams.getBegin();
3950 F32 hollow = mProfileParams.getHollow();
3951 BOOL same_hole = hollow == 0.f 3957 BOOL same_hole = hollow == 0.f
3952 || (mProfileParams.getCurveType() & LL_PCODE_HOLE_MASK) == LL_PCODE_HOLE_SAME; 3958 || (mProfileParams.getCurveType() & LL_PCODE_HOLE_MASK) == LL_PCODE_HOLE_SAME;
3953 3959
@@ -3971,7 +3977,6 @@ BOOL LLVolumeParams::isConvex() const
3971 return FALSE; 3977 return FALSE;
3972 } 3978 }
3973 3979
3974 U8 path_type = mPathParams.getCurveType();
3975 if ( LL_PCODE_PATH_LINE == path_type ) 3980 if ( LL_PCODE_PATH_LINE == path_type )
3976 { 3981 {
3977 // straight paths with convex profile 3982 // straight paths with convex profile
@@ -4176,18 +4181,6 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep)
4176} 4181}
4177 4182
4178 4183
4179LLVolumeFace::LLVolumeFace()
4180{
4181 mTypeMask = 0;
4182 mID = 0;
4183 mBeginS = 0;
4184 mBeginT = 0;
4185 mNumS = 0;
4186 mNumT = 0;
4187 mHasBinormals = FALSE;
4188}
4189
4190
4191BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) 4184BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
4192{ 4185{
4193 if (mTypeMask & CAP_MASK) 4186 if (mTypeMask & CAP_MASK)
@@ -4796,6 +4789,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
4796 mIndices.resize(num_indices); 4789 mIndices.resize(num_indices);
4797 mEdge.resize(num_indices); 4790 mEdge.resize(num_indices);
4798 } 4791 }
4792 else
4793 {
4794 mHasBinormals = FALSE;
4795 }
4796
4799 4797
4800 LLVector3& face_min = mExtents[0]; 4798 LLVector3& face_min = mExtents[0];
4801 LLVector3& face_max = mExtents[1]; 4799 LLVector3& face_max = mExtents[1];
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index c239685..5b48cfc 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -52,6 +52,7 @@ class LLVolume;
52#include "llstrider.h" 52#include "llstrider.h"
53#include "v4coloru.h" 53#include "v4coloru.h"
54#include "llmemory.h" 54#include "llmemory.h"
55#include "llfile.h"
55 56
56//============================================================================ 57//============================================================================
57 58
@@ -229,8 +230,8 @@ public:
229 230
230 void copyParams(const LLProfileParams &params); 231 void copyParams(const LLProfileParams &params);
231 232
232 BOOL importFile(FILE *fp); 233 BOOL importFile(LLFILE *fp);
233 BOOL exportFile(FILE *fp) const; 234 BOOL exportFile(LLFILE *fp) const;
234 235
235 BOOL importLegacyStream(std::istream& input_stream); 236 BOOL importLegacyStream(std::istream& input_stream);
236 BOOL exportLegacyStream(std::ostream& output_stream) const; 237 BOOL exportLegacyStream(std::ostream& output_stream) const;
@@ -354,8 +355,8 @@ public:
354 355
355 void copyParams(const LLPathParams &params); 356 void copyParams(const LLPathParams &params);
356 357
357 BOOL importFile(FILE *fp); 358 BOOL importFile(LLFILE *fp);
358 BOOL exportFile(FILE *fp) const; 359 BOOL exportFile(LLFILE *fp) const;
359 360
360 BOOL importLegacyStream(std::istream& input_stream); 361 BOOL importLegacyStream(std::istream& input_stream);
361 BOOL exportLegacyStream(std::ostream& output_stream) const; 362 BOOL exportLegacyStream(std::ostream& output_stream) const;
@@ -545,8 +546,8 @@ public:
545 const LLPathParams &getPathParams() const {return mPathParams;} 546 const LLPathParams &getPathParams() const {return mPathParams;}
546 LLPathParams &getPathParams() {return mPathParams;} 547 LLPathParams &getPathParams() {return mPathParams;}
547 548
548 BOOL importFile(FILE *fp); 549 BOOL importFile(LLFILE *fp);
549 BOOL exportFile(FILE *fp) const; 550 BOOL exportFile(LLFILE *fp) const;
550 551
551 BOOL importLegacyStream(std::istream& input_stream); 552 BOOL importLegacyStream(std::istream& input_stream);
552 BOOL exportLegacyStream(std::ostream& output_stream) const; 553 BOOL exportLegacyStream(std::ostream& output_stream) const;
@@ -760,7 +761,17 @@ public:
760class LLVolumeFace 761class LLVolumeFace
761{ 762{
762public: 763public:
763 LLVolumeFace(); 764 LLVolumeFace() :
765 mID(0),
766 mTypeMask(0),
767 mHasBinormals(FALSE),
768 mBeginS(0),
769 mBeginT(0),
770 mNumS(0),
771 mNumT(0)
772 {
773 }
774
764 BOOL create(LLVolume* volume, BOOL partial_build = FALSE); 775 BOOL create(LLVolume* volume, BOOL partial_build = FALSE);
765 void createBinormals(); 776 void createBinormals();
766 777
diff --git a/linden/indra/llmath/m4math.h b/linden/indra/llmath/m4math.h
index 27eb865..96e0a31 100644
--- a/linden/indra/llmath/m4math.h
+++ b/linden/indra/llmath/m4math.h
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file m4math.h 2 * @file m4math.h
3 * @brief LLMatrix3 class header file. 3 * @brief LLMatrix4 class header file.
4 * 4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$ 5 * $LicenseInfo:firstyear=2000&license=viewergpl$
6 * 6 *
@@ -101,9 +101,13 @@ class LLMatrix4
101public: 101public:
102 F32 mMatrix[NUM_VALUES_IN_MAT4][NUM_VALUES_IN_MAT4]; 102 F32 mMatrix[NUM_VALUES_IN_MAT4][NUM_VALUES_IN_MAT4];
103 103
104 LLMatrix4(); // Initializes Matrix to identity matrix 104 // Initializes Matrix to identity matrix
105 LLMatrix4()
106 {
107 setIdentity();
108 }
105 explicit LLMatrix4(const F32 *mat); // Initializes Matrix to values in mat 109 explicit LLMatrix4(const F32 *mat); // Initializes Matrix to values in mat
106 explicit LLMatrix4(const LLMatrix3 &mat); // Initializes Matrix to valuee in mat and sets position to (0,0,0) 110 explicit LLMatrix4(const LLMatrix3 &mat); // Initializes Matrix to values in mat and sets position to (0,0,0)
107 explicit LLMatrix4(const LLQuaternion &q); // Initializes Matrix with rotation q and sets position to (0,0,0) 111 explicit LLMatrix4(const LLQuaternion &q); // Initializes Matrix with rotation q and sets position to (0,0,0)
108 112
109 LLMatrix4(const LLMatrix3 &mat, const LLVector4 &pos); // Initializes Matrix to values in mat and pos 113 LLMatrix4(const LLMatrix3 &mat, const LLVector4 &pos); // Initializes Matrix to values in mat and pos
@@ -240,12 +244,6 @@ public:
240 friend std::ostream& operator<<(std::ostream& s, const LLMatrix4 &a); // Stream a 244 friend std::ostream& operator<<(std::ostream& s, const LLMatrix4 &a); // Stream a
241}; 245};
242 246
243
244inline LLMatrix4::LLMatrix4()
245{
246 setIdentity();
247}
248
249inline const LLMatrix4& LLMatrix4::setIdentity() 247inline const LLMatrix4& LLMatrix4::setIdentity()
250{ 248{
251 mMatrix[0][0] = 1.f; 249 mMatrix[0][0] = 1.f;
diff --git a/linden/indra/llmedia/llmediaimplcommon.cpp b/linden/indra/llmedia/llmediaimplcommon.cpp
index a0705bb..abb61e1 100644
--- a/linden/indra/llmedia/llmediaimplcommon.cpp
+++ b/linden/indra/llmedia/llmediaimplcommon.cpp
@@ -52,6 +52,7 @@
52LLMediaImplCommon::LLMediaImplCommon() : 52LLMediaImplCommon::LLMediaImplCommon() :
53 mMimeType( std::string() ), 53 mMimeType( std::string() ),
54 mInitialURL( std::string() ), 54 mInitialURL( std::string() ),
55 mImplMaker( NULL ),
55 mAutoScaled( false ), 56 mAutoScaled( false ),
56 mMediaWidth( 0 ), 57 mMediaWidth( 0 ),
57 mMediaPrevWidth( 0 ), 58 mMediaPrevWidth( 0 ),
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp
index 8b0363a..5bf30d9 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp
@@ -186,7 +186,8 @@ startup ( LLMediaManagerData* init_data )
186 WARNMSG("gst_segtrap_set_enabled() is not available; Automated crash-reporter may cease to function until next restart."); 186 WARNMSG("gst_segtrap_set_enabled() is not available; Automated crash-reporter may cease to function until next restart.");
187 187
188 // Protect against GStreamer resetting the locale, yuck. 188 // Protect against GStreamer resetting the locale, yuck.
189 std::string saved_locale = setlocale(LC_ALL, NULL); 189 static std::string saved_locale;
190 saved_locale = setlocale(LC_ALL, NULL);
190 if (0 == llgst_init_check(NULL, NULL, NULL)) 191 if (0 == llgst_init_check(NULL, NULL, NULL))
191 { 192 {
192 WARNMSG("GST init failed for unspecified reason."); 193 WARNMSG("GST init failed for unspecified reason.");
diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp
index 53cb344..9e2564a 100644
--- a/linden/indra/llmedia/llmediaimplllmozlib.cpp
+++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp
@@ -94,7 +94,8 @@ bool LLMediaImplLLMozLib::startup( LLMediaManagerData* init_data )
94 // the locale to protect it, as exotic/non-C locales 94 // the locale to protect it, as exotic/non-C locales
95 // causes our code lots of general critical weirdness 95 // causes our code lots of general critical weirdness
96 // and crashness. (SL-35450) 96 // and crashness. (SL-35450)
97 std::string saved_locale = setlocale(LC_ALL, NULL); 97 static std::string saved_locale;
98 saved_locale = setlocale(LC_ALL, NULL);
98#endif // LL_LINUX 99#endif // LL_LINUX
99 100
100 bool result = LLMozLib::getInstance()->init( init_data->getBrowserApplicationDir(), 101 bool result = LLMozLib::getInstance()->init( init_data->getBrowserApplicationDir(),
@@ -132,7 +133,8 @@ bool LLMediaImplLLMozLib::init()
132 return false; 133 return false;
133 134
134#if LL_LINUX 135#if LL_LINUX
135 std::string saved_locale = setlocale(LC_ALL, NULL); 136 static std::string saved_locale;
137 saved_locale = setlocale(LC_ALL, NULL);
136#endif // LL_LINUX 138#endif // LL_LINUX
137 139
138 mWindowId = LLMozLib::getInstance()->createBrowserWindow( mBrowserWindowWidth, mBrowserWindowHeight ); 140 mWindowId = LLMozLib::getInstance()->createBrowserWindow( mBrowserWindowWidth, mBrowserWindowHeight );
diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp
index b126e2f..8f7686d 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.cpp
+++ b/linden/indra/llmedia/llmediaimplquicktime.cpp
@@ -116,11 +116,19 @@ bool LLMediaImplQuickTime::load( const std::string url )
116 if ( url.empty() ) 116 if ( url.empty() )
117 return false; 117 return false;
118 118
119 //In case std::string::c_str() makes a copy of the url data,
120 //make sure there is memory to hold it before allocating memory for handle.
121 //if fails, NewHandleClear(...) should return NULL.
122 const char* url_string = url.c_str() ;
119 Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) ); 123 Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) );
120 if ( NULL == handle ) 124 if ( NULL == handle )
121 return false; 125 return false;
126 if(noErr != MemError() || NULL == *handle)
127 {
128 return false ;
129 }
122 130
123 BlockMove( url.c_str(), *handle, ( Size )( url.length() + 1 ) ); 131 BlockMove( url_string, *handle, ( Size )( url.length() + 1 ) );
124 132
125 //std::cout << "LLMediaImplQuickTime::load( " << url << " )" << std::endl; 133 //std::cout << "LLMediaImplQuickTime::load( " << url << " )" << std::endl;
126 134
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index ec9f881..079cb29 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -38,22 +38,22 @@ class LLMediaEvent
38{ 38{
39 public: 39 public:
40 LLMediaEvent( LLMediaBase* subject ) : 40 LLMediaEvent( LLMediaBase* subject ) :
41 mSubject( subject ) 41 mSubject( subject ), mIntValue(-1)
42 { 42 {
43 }; 43 };
44 44
45 LLMediaEvent( LLMediaBase* subject, std::string in ) : 45 LLMediaEvent( LLMediaBase* subject, std::string in ) :
46 mSubject( subject ), mStringValue(in) 46 mSubject( subject ), mIntValue(-1), mStringValue(in)
47 { 47 {
48 }; 48 };
49 49
50 LLMediaEvent( LLMediaBase* subject, std::string string_in, std::string string_ex_in ) : 50 LLMediaEvent( LLMediaBase* subject, std::string string_in, std::string string_ex_in ) :
51 mSubject( subject ), mStringValue(string_in), mStringValueEx(string_ex_in) 51 mSubject( subject ), mIntValue(-1), mStringValue(string_in), mStringValueEx(string_ex_in)
52 { 52 {
53 }; 53 };
54 54
55 LLMediaEvent( LLMediaBase* subject, std::string string_in, int int_in ) : 55 LLMediaEvent( LLMediaBase* subject, std::string string_in, int int_in ) :
56 mSubject( subject ), mStringValue(string_in), mIntValue(int_in) 56 mSubject( subject ), mIntValue(int_in), mStringValue(string_in)
57 { 57 {
58 }; 58 };
59 59
diff --git a/linden/indra/llmessage/llassetstorage.cpp b/linden/indra/llmessage/llassetstorage.cpp
index 13b1525..a6077e5 100644
--- a/linden/indra/llmessage/llassetstorage.cpp
+++ b/linden/indra/llmessage/llassetstorage.cpp
@@ -318,7 +318,7 @@ LLAssetStorage::~LLAssetStorage()
318 318
319void LLAssetStorage::setUpstream(const LLHost &upstream_host) 319void LLAssetStorage::setUpstream(const LLHost &upstream_host)
320{ 320{
321 llinfos << "AssetStorage: Setting upstream provider to " << upstream_host << llendl; 321 LL_DEBUGS("AppInit") << "AssetStorage: Setting upstream provider to " << upstream_host << LL_ENDL;
322 322
323 mUpstreamHost = upstream_host; 323 mUpstreamHost = upstream_host;
324} 324}
@@ -1242,7 +1242,7 @@ void LLAssetStorage::legacyGetDataCallback(LLVFS *vfs, const LLUUID &uuid, LLAss
1242 uuid.toString(uuid_str); 1242 uuid.toString(uuid_str);
1243 snprintf(filename,sizeof(filename),"%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */ 1243 snprintf(filename,sizeof(filename),"%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
1244 1244
1245 FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ 1245 LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
1246 if (fp) 1246 if (fp)
1247 { 1247 {
1248 const S32 buf_size = 65536; 1248 const S32 buf_size = 65536;
diff --git a/linden/indra/llmessage/llblowfishcipher.cpp b/linden/indra/llmessage/llblowfishcipher.cpp
index 45ff045..a0fe157 100644
--- a/linden/indra/llmessage/llblowfishcipher.cpp
+++ b/linden/indra/llmessage/llblowfishcipher.cpp
@@ -30,8 +30,8 @@
30 */ 30 */
31 31
32#include "linden_common.h" 32#include "linden_common.h"
33
34#include "llblowfishcipher.h" 33#include "llblowfishcipher.h"
34#include <openssl/evp.h>
35 35
36 36
37LLBlowfishCipher::LLBlowfishCipher(const U8* secret, size_t secret_size) 37LLBlowfishCipher::LLBlowfishCipher(const U8* secret, size_t secret_size)
@@ -50,11 +50,6 @@ LLBlowfishCipher::~LLBlowfishCipher()
50 mSecret = NULL; 50 mSecret = NULL;
51} 51}
52 52
53
54#if LL_LINUX
55
56#include <openssl/evp.h>
57
58// virtual 53// virtual
59U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len) 54U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
60{ 55{
@@ -133,29 +128,3 @@ U32 LLBlowfishCipher::requiredEncryptionSpace(U32 len) const
133 len -= (len % BLOCK_SIZE); 128 len -= (len % BLOCK_SIZE);
134 return len; 129 return len;
135} 130}
136
137#else // !LL_LINUX
138
139// virtual
140U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
141{
142 llerrs << "LLBlowfishCipher only supported on Linux" << llendl;
143 return 0;
144}
145
146// virtual
147U32 LLBlowfishCipher::decrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
148{
149 llerrs << "LLBlowfishCipher only supported on Linux" << llendl;
150 return 0;
151}
152
153// virtual
154U32 LLBlowfishCipher::requiredEncryptionSpace(U32 len) const
155{
156 llerrs << "LLBlowfishCipher only supported on Linux" << llendl;
157 return 0;
158}
159
160#endif
161
diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp
index e8208cc..9adf10d 100644
--- a/linden/indra/llmessage/llcachename.cpp
+++ b/linden/indra/llmessage/llcachename.cpp
@@ -323,7 +323,7 @@ void LLCacheName::cancelCallback(const LLUUID& id, LLCacheNameCallback callback,
323 } 323 }
324} 324}
325 325
326void LLCacheName::importFile(FILE* fp) 326void LLCacheName::importFile(LLFILE* fp)
327{ 327{
328 S32 count = 0; 328 S32 count = 0;
329 329
diff --git a/linden/indra/llmessage/llcachename.h b/linden/indra/llmessage/llcachename.h
index 26a873f..e7d5a44 100644
--- a/linden/indra/llmessage/llcachename.h
+++ b/linden/indra/llmessage/llcachename.h
@@ -64,7 +64,7 @@ public:
64 void cancelCallback(const LLUUID& id, LLCacheNameCallback callback, void* user_data = NULL); 64 void cancelCallback(const LLUUID& id, LLCacheNameCallback callback, void* user_data = NULL);
65 65
66 // janky old format. Remove after a while. Phoenix. 2008-01-30 66 // janky old format. Remove after a while. Phoenix. 2008-01-30
67 void importFile(FILE* fp); 67 void importFile(LLFILE* fp);
68 68
69 // storing cache on disk; for viewer, in name.cache 69 // storing cache on disk; for viewer, in name.cache
70 bool importFile(std::istream& istr); 70 bool importFile(std::istream& istr);
diff --git a/linden/indra/llmessage/llcurl.cpp b/linden/indra/llmessage/llcurl.cpp
index a8bb46b..f03cebc 100644
--- a/linden/indra/llmessage/llcurl.cpp
+++ b/linden/indra/llmessage/llcurl.cpp
@@ -674,8 +674,9 @@ std::string LLCurl::strerror(CURLcode errorcode)
674// For generating a simple request for data 674// For generating a simple request for data
675// using one multi and one easy per request 675// using one multi and one easy per request
676 676
677LLCurlRequest::LLCurlRequest() 677LLCurlRequest::LLCurlRequest() :
678 : mActiveMulti(NULL) 678 mActiveMulti(NULL),
679 mActiveRequestCount(0)
679{ 680{
680} 681}
681 682
diff --git a/linden/indra/llmessage/lldatapacker.h b/linden/indra/llmessage/lldatapacker.h
index f41fb76..b1aa8fe 100644
--- a/linden/indra/llmessage/lldatapacker.h
+++ b/linden/indra/llmessage/lldatapacker.h
@@ -330,7 +330,7 @@ inline BOOL LLDataPackerAsciiBuffer::verifyLength(const S32 data_size, const cha
330class LLDataPackerAsciiFile : public LLDataPacker 330class LLDataPackerAsciiFile : public LLDataPacker
331{ 331{
332public: 332public:
333 LLDataPackerAsciiFile(FILE *fp, const S32 indent = 2) 333 LLDataPackerAsciiFile(LLFILE *fp, const S32 indent = 2)
334 : LLDataPacker(), 334 : LLDataPacker(),
335 mIndent(indent), 335 mIndent(indent),
336 mFP(fp), 336 mFP(fp),
@@ -407,7 +407,7 @@ protected:
407 407
408protected: 408protected:
409 S32 mIndent; 409 S32 mIndent;
410 FILE *mFP; 410 LLFILE *mFP;
411 std::ostream* mOutputStream; 411 std::ostream* mOutputStream;
412 std::istream* mInputStream; 412 std::istream* mInputStream;
413}; 413};
diff --git a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
index 4e38924..b3ebd0b 100644
--- a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
@@ -695,6 +695,24 @@ LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(
695 buffer->readAfter(channels.in(), NULL, (U8*)buf, bytes); 695 buffer->readAfter(channels.in(), NULL, (U8*)buf, bytes);
696 696
697 //lldebugs << "xmlrpc request: " << buf << llendl; 697 //lldebugs << "xmlrpc request: " << buf << llendl;
698
699 // Check the value in the buffer. XMLRPC_REQUEST_FromXML will report a error code 4 if
700 // values that are less than 0x20 are passed to it, except
701 // 0x09: Horizontal tab; 0x0a: New Line; 0x0d: Carriage
702 U8* cur_pBuf = (U8*)buf;
703 U8 cur_char;
704 for (S32 i=0; i<bytes; i++)
705 {
706 cur_char = *cur_pBuf;
707 if ( cur_char < 0x20
708 && 0x09 != cur_char
709 && 0x0a != cur_char
710 && 0x0d != cur_char )
711 {
712 *cur_pBuf = '?';
713 }
714 ++cur_pBuf;
715 }
698 716
699 PUMP_DEBUG; 717 PUMP_DEBUG;
700 XMLRPC_REQUEST request = XMLRPC_REQUEST_FromXML( 718 XMLRPC_REQUEST request = XMLRPC_REQUEST_FromXML(
diff --git a/linden/indra/llmessage/llhttpassetstorage.cpp b/linden/indra/llmessage/llhttpassetstorage.cpp
index 80598c6..49896c6 100644
--- a/linden/indra/llmessage/llhttpassetstorage.cpp
+++ b/linden/indra/llmessage/llhttpassetstorage.cpp
@@ -334,6 +334,8 @@ void LLHTTPAssetRequest::finishCompressedUpload()
334 334
335size_t LLHTTPAssetRequest::readCompressedData(void* data, size_t size) 335size_t LLHTTPAssetRequest::readCompressedData(void* data, size_t size)
336{ 336{
337 llassert(mZInitialized);
338
337 mZStream.next_out = (Bytef*)data; 339 mZStream.next_out = (Bytef*)data;
338 mZStream.avail_out = size; 340 mZStream.avail_out = size;
339 341
diff --git a/linden/indra/llmessage/llhttpclient.h b/linden/indra/llmessage/llhttpclient.h
index 1587268..df31b44 100644
--- a/linden/indra/llmessage/llhttpclient.h
+++ b/linden/indra/llmessage/llhttpclient.h
@@ -77,7 +77,12 @@ public:
77 static void postFile(const std::string& url, const LLUUID& uuid, 77 static void postFile(const std::string& url, const LLUUID& uuid,
78 LLAssetType::EType asset_type, ResponderPtr responder, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); 78 LLAssetType::EType asset_type, ResponderPtr responder, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
79 79
80 // Blocking HTTP get that returns an LLSD map of status and body. 80 /**
81 * @brief Blocking HTTP get that returns an LLSD map of status and body.
82 *
83 * @param url the complete serialized (and escaped) url to get
84 * @return An LLSD of { 'status':status, 'body':payload }
85 */
81 static LLSD blockingGet(const std::string& url); 86 static LLSD blockingGet(const std::string& url);
82 87
83 static void del(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); 88 static void del(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
diff --git a/linden/indra/llmessage/llhttpnode.cpp b/linden/indra/llmessage/llhttpnode.cpp
index 540b507..46f2061 100644
--- a/linden/indra/llmessage/llhttpnode.cpp
+++ b/linden/indra/llmessage/llhttpnode.cpp
@@ -426,8 +426,8 @@ void LLHTTPRegistrar::buildAllServices(LLHTTPNode& root)
426 FactoryMap::const_iterator end = map.end(); 426 FactoryMap::const_iterator end = map.end();
427 for (; i != end; ++i) 427 for (; i != end; ++i)
428 { 428 {
429 llinfos << "LLHTTPRegistrar::buildAllServices adding node for path " 429 LL_DEBUGS("AppInit") << "LLHTTPRegistrar::buildAllServices adding node for path "
430 << i->first << llendl; 430 << i->first << LL_ENDL;
431 431
432 root.addNode(i->first, i->second->build()); 432 root.addNode(i->first, i->second->build());
433 } 433 }
diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp
index 807a35b..e23ed07 100644
--- a/linden/indra/llmessage/llmessageconfig.cpp
+++ b/linden/indra/llmessage/llmessageconfig.cpp
@@ -66,6 +66,7 @@ public:
66 66
67 /* virtual */ void loadFile(); 67 /* virtual */ void loadFile();
68 void loadServerDefaults(const LLSD& data); 68 void loadServerDefaults(const LLSD& data);
69 void loadMaxQueuedEvents(const LLSD& data);
69 void loadMessages(const LLSD& data); 70 void loadMessages(const LLSD& data);
70 void loadCapBans(const LLSD& blacklist); 71 void loadCapBans(const LLSD& blacklist);
71 void loadMessageBans(const LLSD& blacklist); 72 void loadMessageBans(const LLSD& blacklist);
@@ -73,6 +74,7 @@ public:
73 74
74public: 75public:
75 LLSD mCapBans; 76 LLSD mCapBans;
77 S32 mMaxQueuedEvents;
76}; 78};
77 79
78std::string LLMessageConfigFile::filename() 80std::string LLMessageConfigFile::filename()
@@ -99,19 +101,20 @@ void LLMessageConfigFile::loadFile()
99 101
100 if (file.is_open()) 102 if (file.is_open())
101 { 103 {
102 llinfos << "Loading message.xml file at " << filename() << llendl; 104 LL_DEBUGS("AppInit") << "Loading message.xml file at " << filename() << LL_ENDL;
103 LLSDSerialize::fromXML(data, file); 105 LLSDSerialize::fromXML(data, file);
104 } 106 }
105 107
106 if (data.isUndefined()) 108 if (data.isUndefined())
107 { 109 {
108 llinfos << "LLMessageConfigFile::loadFile: file missing," 110 LL_INFOS("AppInit") << "LLMessageConfigFile::loadFile: file missing,"
109 " ill-formed, or simply undefined; not changing the" 111 " ill-formed, or simply undefined; not changing the"
110 " file" << llendl; 112 " file" << LL_ENDL;
111 return; 113 return;
112 } 114 }
113 } 115 }
114 loadServerDefaults(data); 116 loadServerDefaults(data);
117 loadMaxQueuedEvents(data);
115 loadMessages(data); 118 loadMessages(data);
116 loadCapBans(data); 119 loadCapBans(data);
117 loadMessageBans(data); 120 loadMessageBans(data);
@@ -122,6 +125,19 @@ void LLMessageConfigFile::loadServerDefaults(const LLSD& data)
122 mServerDefault = data["serverDefaults"][sServerName].asString(); 125 mServerDefault = data["serverDefaults"][sServerName].asString();
123} 126}
124 127
128const S32 DEFAULT_MAX_QUEUED_EVENTS = 100;
129void LLMessageConfigFile::loadMaxQueuedEvents(const LLSD& data)
130{
131 if (data.has("maxQueuedEvents"))
132 {
133 mMaxQueuedEvents = data["maxQueuedEvents"].asInteger();
134 }
135 else
136 {
137 mMaxQueuedEvents = DEFAULT_MAX_QUEUED_EVENTS;
138 }
139}
140
125void LLMessageConfigFile::loadMessages(const LLSD& data) 141void LLMessageConfigFile::loadMessages(const LLSD& data)
126{ 142{
127 mMessages = data["messages"]; 143 mMessages = data["messages"];
@@ -141,15 +157,15 @@ void LLMessageConfigFile::loadCapBans(const LLSD& data)
141 LLSD bans = data["capBans"]; 157 LLSD bans = data["capBans"];
142 if (!bans.isMap()) 158 if (!bans.isMap())
143 { 159 {
144 llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section" 160 LL_INFOS("AppInit") << "LLMessageConfigFile::loadCapBans: missing capBans section"
145 << llendl; 161 << LL_ENDL;
146 return; 162 return;
147 } 163 }
148 164
149 mCapBans = bans; 165 mCapBans = bans;
150 166
151 llinfos << "LLMessageConfigFile::loadCapBans: " 167 LL_DEBUGS("AppInit") << "LLMessageConfigFile::loadCapBans: "
152 << bans.size() << " ban tests" << llendl; 168 << bans.size() << " ban tests" << LL_ENDL;
153} 169}
154 170
155void LLMessageConfigFile::loadMessageBans(const LLSD& data) 171void LLMessageConfigFile::loadMessageBans(const LLSD& data)
@@ -157,8 +173,8 @@ void LLMessageConfigFile::loadMessageBans(const LLSD& data)
157 LLSD bans = data["messageBans"]; 173 LLSD bans = data["messageBans"];
158 if (!bans.isMap()) 174 if (!bans.isMap())
159 { 175 {
160 llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section" 176 LL_INFOS("AppInit") << "LLMessageConfigFile::loadMessageBans: missing messageBans section"
161 << llendl; 177 << LL_ENDL;
162 return; 178 return;
163 } 179 }
164 180
@@ -182,8 +198,8 @@ void LLMessageConfig::initClass(const std::string& server_name,
182 sServerName = server_name; 198 sServerName = server_name;
183 sConfigDir = config_dir; 199 sConfigDir = config_dir;
184 (void) LLMessageConfigFile::instance(); 200 (void) LLMessageConfigFile::instance();
185 llinfos << "LLMessageConfig::initClass config file " 201 LL_DEBUGS("AppInit") << "LLMessageConfig::initClass config file "
186 << config_dir << "/" << messageConfigFileName << llendl; 202 << config_dir << "/" << messageConfigFileName << LL_ENDL;
187} 203}
188 204
189//static 205//static
@@ -191,10 +207,10 @@ void LLMessageConfig::useConfig(const LLSD& config)
191{ 207{
192 LLMessageConfigFile &the_file = LLMessageConfigFile::instance(); 208 LLMessageConfigFile &the_file = LLMessageConfigFile::instance();
193 the_file.loadServerDefaults(config); 209 the_file.loadServerDefaults(config);
210 the_file.loadMaxQueuedEvents(config);
194 the_file.loadMessages(config); 211 the_file.loadMessages(config);
195 the_file.loadCapBans(config); 212 the_file.loadCapBans(config);
196 the_file.loadMessageBans(config); 213 the_file.loadMessageBans(config);
197
198} 214}
199 215
200//static 216//static
@@ -213,6 +229,13 @@ LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor()
213} 229}
214 230
215//static 231//static
232S32 LLMessageConfig::getMaxQueuedEvents()
233{
234 LLMessageConfigFile& file = LLMessageConfigFile::instance();
235 return file.mMaxQueuedEvents;
236}
237
238//static
216LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name) 239LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name)
217{ 240{
218 LLMessageConfigFile& file = LLMessageConfigFile::instance(); 241 LLMessageConfigFile& file = LLMessageConfigFile::instance();
diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h
index 9b62f06..61788c7 100644
--- a/linden/indra/llmessage/llmessageconfig.h
+++ b/linden/indra/llmessage/llmessageconfig.h
@@ -48,6 +48,7 @@ public:
48 static void useConfig(const LLSD& config); 48 static void useConfig(const LLSD& config);
49 49
50 static Flavor getServerDefaultFlavor(); 50 static Flavor getServerDefaultFlavor();
51 static S32 getMaxQueuedEvents();
51 52
52 // For individual messages 53 // For individual messages
53 static Flavor getMessageFlavor(const std::string& msg_name); 54 static Flavor getMessageFlavor(const std::string& msg_name);
diff --git a/linden/indra/llmessage/llregionhandle.h b/linden/indra/llmessage/llregionhandle.h
index ac7fb14..7e62e96 100644
--- a/linden/indra/llmessage/llregionhandle.h
+++ b/linden/indra/llmessage/llregionhandle.h
@@ -115,7 +115,7 @@ inline LLVector3d from_region_handle(const U64 &region_handle)
115 115
116// grid-based region handle encoding. pass in a grid position 116// grid-based region handle encoding. pass in a grid position
117// (eg: 1000,1000) and this will return the region handle. 117// (eg: 1000,1000) and this will return the region handle.
118inline U64 grid_to_region_handle(U32 grid_x, U32 grid_y) 118inline U64 grid_to_region_handle(const U32 grid_x, const U32 grid_y)
119{ 119{
120 return to_region_handle(grid_x * REGION_WIDTH_UNITS, 120 return to_region_handle(grid_x * REGION_WIDTH_UNITS,
121 grid_y * REGION_WIDTH_UNITS); 121 grid_y * REGION_WIDTH_UNITS);
diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp
index 6fbb4f9..7817dba 100644
--- a/linden/indra/llmessage/lltransfermanager.cpp
+++ b/linden/indra/llmessage/lltransfermanager.cpp
@@ -1336,7 +1336,9 @@ BOOL LLTransferSourceParamsInvItem::unpackParams(LLDataPacker &dp)
1336} 1336}
1337 1337
1338LLTransferSourceParamsEstate::LLTransferSourceParamsEstate() : 1338LLTransferSourceParamsEstate::LLTransferSourceParamsEstate() :
1339 LLTransferSourceParams(LLTST_SIM_ESTATE), mEstateAssetType(ET_NONE) 1339 LLTransferSourceParams(LLTST_SIM_ESTATE),
1340 mEstateAssetType(ET_NONE),
1341 mAssetType(LLAssetType::AT_NONE)
1340{ 1342{
1341} 1343}
1342 1344
diff --git a/linden/indra/llmessage/lltransfersourcefile.cpp b/linden/indra/llmessage/lltransfersourcefile.cpp
index 55f368f..4b60cf3 100644
--- a/linden/indra/llmessage/lltransfersourcefile.cpp
+++ b/linden/indra/llmessage/lltransfersourcefile.cpp
@@ -153,7 +153,9 @@ BOOL LLTransferSourceFile::unpackParams(LLDataPacker &dp)
153} 153}
154 154
155 155
156LLTransferSourceParamsFile::LLTransferSourceParamsFile() : LLTransferSourceParams(LLTST_FILE) 156LLTransferSourceParamsFile::LLTransferSourceParamsFile() :
157 LLTransferSourceParams(LLTST_FILE),
158 mDeleteOnCompletion(FALSE)
157{ 159{
158} 160}
159 161
diff --git a/linden/indra/llmessage/lltransfersourcefile.h b/linden/indra/llmessage/lltransfersourcefile.h
index 1a9ff9e..030f80e 100644
--- a/linden/indra/llmessage/lltransfersourcefile.h
+++ b/linden/indra/llmessage/lltransfersourcefile.h
@@ -74,7 +74,7 @@ protected:
74 74
75protected: 75protected:
76 LLTransferSourceParamsFile mParams; 76 LLTransferSourceParamsFile mParams;
77 FILE *mFP; 77 LLFILE *mFP;
78}; 78};
79 79
80#endif // LL_LLTRANSFERSOURCEFILE_H 80#endif // LL_LLTRANSFERSOURCEFILE_H
diff --git a/linden/indra/llmessage/lltransfertargetfile.h b/linden/indra/llmessage/lltransfertargetfile.h
index 3f5284e..02c0c11 100644
--- a/linden/indra/llmessage/lltransfertargetfile.h
+++ b/linden/indra/llmessage/lltransfertargetfile.h
@@ -69,7 +69,7 @@ protected:
69 69
70 LLTransferTargetParamsFile mParams; 70 LLTransferTargetParamsFile mParams;
71 71
72 FILE *mFP; 72 LLFILE *mFP;
73}; 73};
74 74
75#endif // LL_LLTRANSFERTARGETFILE_H 75#endif // LL_LLTRANSFERTARGETFILE_H
diff --git a/linden/indra/llmessage/llxfer_file.cpp b/linden/indra/llmessage/llxfer_file.cpp
index 027bacb..840d84c 100644
--- a/linden/indra/llmessage/llxfer_file.cpp
+++ b/linden/indra/llmessage/llxfer_file.cpp
@@ -353,7 +353,7 @@ S32 LLXfer_File::processEOF()
353 } 353 }
354 else 354 else
355 { 355 {
356 //FILE* fp = LLFile::fopen(mTempFilename, "r"); 356 //LLFILE* fp = LLFile::fopen(mTempFilename, "r");
357 //llwarns << "File " << mTempFilename << " does " 357 //llwarns << "File " << mTempFilename << " does "
358 // << (!fp ? "not" : "" ) << " exit." << llendl; 358 // << (!fp ? "not" : "" ) << " exit." << llendl;
359 //if(fp) fclose(fp); 359 //if(fp) fclose(fp);
@@ -424,8 +424,8 @@ U32 LLXfer_File::getXferTypeTag()
424S32 copy_file(const char* from, const char* to) 424S32 copy_file(const char* from, const char* to)
425{ 425{
426 S32 rv = 0; 426 S32 rv = 0;
427 FILE* in = LLFile::fopen(from, "rb"); /*Flawfinder: ignore*/ 427 LLFILE* in = LLFile::fopen(from, "rb"); /*Flawfinder: ignore*/
428 FILE* out = LLFile::fopen(to, "wb"); /*Flawfinder: ignore*/ 428 LLFILE* out = LLFile::fopen(to, "wb"); /*Flawfinder: ignore*/
429 if(in && out) 429 if(in && out)
430 { 430 {
431 S32 read = 0; 431 S32 read = 0;
diff --git a/linden/indra/llmessage/llxfer_file.h b/linden/indra/llmessage/llxfer_file.h
index 7958af1..b5294ad 100644
--- a/linden/indra/llmessage/llxfer_file.h
+++ b/linden/indra/llmessage/llxfer_file.h
@@ -38,7 +38,7 @@
38class LLXfer_File : public LLXfer 38class LLXfer_File : public LLXfer
39{ 39{
40 protected: 40 protected:
41 FILE *mFp; 41 LLFILE *mFp;
42 char mLocalFilename[LL_MAX_PATH]; /* Flawfinder : ignore */ 42 char mLocalFilename[LL_MAX_PATH]; /* Flawfinder : ignore */
43 char mRemoteFilename[LL_MAX_PATH]; /* Flawfinder : ignore */ 43 char mRemoteFilename[LL_MAX_PATH]; /* Flawfinder : ignore */
44 ELLPath mRemotePath; 44 ELLPath mRemotePath;
diff --git a/linden/indra/llmessage/llxfermanager.cpp b/linden/indra/llmessage/llxfermanager.cpp
index 47c950b..f7b83ec 100644
--- a/linden/indra/llmessage/llxfermanager.cpp
+++ b/linden/indra/llmessage/llxfermanager.cpp
@@ -143,8 +143,8 @@ void LLXferManager::setAckThrottleBPS(const F32 bps)
143 143
144 // Set 144 // Set
145 F32 actual_rate = llmax(min_bps*1.1f, bps); 145 F32 actual_rate = llmax(min_bps*1.1f, bps);
146 llinfos << "LLXferManager ack throttle min rate: " << min_bps << llendl; 146 LL_DEBUGS("AppInit") << "LLXferManager ack throttle min rate: " << min_bps << LL_ENDL;
147 llinfos << "LLXferManager ack throttle actual rate: " << actual_rate << llendl; 147 LL_DEBUGS("AppInit") << "LLXferManager ack throttle actual rate: " << actual_rate << LL_ENDL;
148 mAckThrottle.setRate(actual_rate); 148 mAckThrottle.setRate(actual_rate);
149} 149}
150 150
diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp
index c572341..f3aac29 100644
--- a/linden/indra/llmessage/message.cpp
+++ b/linden/indra/llmessage/message.cpp
@@ -120,7 +120,7 @@ namespace
120 // don't spam when agent communication disconnected already 120 // don't spam when agent communication disconnected already
121 if (status != 410) 121 if (status != 410)
122 { 122 {
123 llwarns << "error status " << status 123 LL_WARNS("Messaging") << "error status " << status
124 << " for message " << mMessageName 124 << " for message " << mMessageName
125 << " reason " << reason << llendl; 125 << " reason " << reason << llendl;
126 } 126 }
@@ -176,7 +176,7 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response,
176 gMessageSystem->isTrustedMessage(name))) 176 gMessageSystem->isTrustedMessage(name)))
177 && !gMessageSystem->isTrustedSender(LLHost(sender))) 177 && !gMessageSystem->isTrustedSender(LLHost(sender)))
178 { 178 {
179 llwarns << "trusted message POST to /trusted-message/" 179 LL_WARNS("Messaging") << "trusted message POST to /trusted-message/"
180 << name << " from unknown or untrusted sender " 180 << name << " from unknown or untrusted sender "
181 << sender << llendl; 181 << sender << llendl;
182 response->status(403, "Unknown or untrusted sender"); 182 response->status(403, "Unknown or untrusted sender");
@@ -326,14 +326,14 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port,
326 mbError = TRUE; 326 mbError = TRUE;
327 mErrorCode = error; 327 mErrorCode = error;
328 } 328 }
329 //llinfos << << "*** port: " << mPort << llendl; 329// LL_DEBUGS("Messaging") << << "*** port: " << mPort << llendl;
330 330
331 // 331 //
332 // Create the data structure that we can poll on 332 // Create the data structure that we can poll on
333 // 333 //
334 if (!gAPRPoolp) 334 if (!gAPRPoolp)
335 { 335 {
336 llerrs << "No APR pool before message system initialization!" << llendl; 336 LL_ERRS("Messaging") << "No APR pool before message system initialization!" << llendl;
337 ll_init_apr(); 337 ll_init_apr();
338 } 338 }
339 apr_socket_t *aprSocketp = NULL; 339 apr_socket_t *aprSocketp = NULL;
@@ -369,7 +369,7 @@ void LLMessageSystem::loadTemplateFile(const char* filename)
369{ 369{
370 if(!filename) 370 if(!filename)
371 { 371 {
372 llerrs << "No template filename specified" << llendl; 372 LL_ERRS("Messaging") << "No template filename specified" << llendl;
373 mbError = TRUE; 373 mbError = TRUE;
374 return; 374 return;
375 } 375 }
@@ -377,7 +377,7 @@ void LLMessageSystem::loadTemplateFile(const char* filename)
377 std::string template_body; 377 std::string template_body;
378 if(!_read_file_into_string(template_body, filename)) 378 if(!_read_file_into_string(template_body, filename))
379 { 379 {
380 llwarns << "Failed to open template: " << filename << llendl; 380 LL_WARNS("Messaging") << "Failed to open template: " << filename << llendl;
381 mbError = TRUE; 381 mbError = TRUE;
382 return; 382 return;
383 } 383 }
@@ -588,7 +588,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
588 // Ones that are non-zero but below the minimum packet size are worrisome. 588 // Ones that are non-zero but below the minimum packet size are worrisome.
589 if (receive_size > 0) 589 if (receive_size > 0)
590 { 590 {
591 llwarns << "Invalid (too short) packet discarded " << receive_size << llendl; 591 LL_WARNS("Messaging") << "Invalid (too short) packet discarded " << receive_size << llendl;
592 callExceptionFunc(MX_PACKET_TOO_SHORT); 592 callExceptionFunc(MX_PACKET_TOO_SHORT);
593 } 593 }
594 // no data in packet receive buffer 594 // no data in packet receive buffer
@@ -612,7 +612,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
612 { 612 {
613 // mal-formed packet. ignore it and continue with 613 // mal-formed packet. ignore it and continue with
614 // the next one 614 // the next one
615 llwarns << "Malformed packet received. Packet size " 615 LL_WARNS("Messaging") << "Malformed packet received. Packet size "
616 << receive_size << " with invalid no. of acks " << acks 616 << receive_size << " with invalid no. of acks " << acks
617 << llendl; 617 << llendl;
618 valid_packet = FALSE; 618 valid_packet = FALSE;
@@ -642,7 +642,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
642 memcpy(&mem_id, &mTrueReceiveBuffer[true_rcv_size], /* Flawfinder: ignore*/ 642 memcpy(&mem_id, &mTrueReceiveBuffer[true_rcv_size], /* Flawfinder: ignore*/
643 sizeof(TPACKETID)); 643 sizeof(TPACKETID));
644 packet_id = ntohl(mem_id); 644 packet_id = ntohl(mem_id);
645 //llinfos << "got ack: " << packet_id << llendl; 645 //LL_INFOS("Messaging") << "got ack: " << packet_id << llendl;
646 cdp->ackReliablePacket(packet_id); 646 cdp->ackReliablePacket(packet_id);
647 } 647 }
648 if (!cdp->getUnackedPacketCount()) 648 if (!cdp->getUnackedPacketCount())
@@ -671,7 +671,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
671 // TESTING CODE 671 // TESTING CODE
672 //if(mCircuitInfo.mCurrentCircuit->mHost != host) 672 //if(mCircuitInfo.mCurrentCircuit->mHost != host)
673 //{ 673 //{
674 // llwarns << "DISCARDED PACKET HOST MISMATCH! HOST: " 674 // LL_WARNS("Messaging") << "DISCARDED PACKET HOST MISMATCH! HOST: "
675 // << host << " CIRCUIT: " 675 // << host << " CIRCUIT: "
676 // << mCircuitInfo.mCurrentCircuit->mHost 676 // << mCircuitInfo.mCurrentCircuit->mHost
677 // << llendl; 677 // << llendl;
@@ -681,7 +681,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
681 cdp->collectRAck(mCurrentRecvPacketID); 681 cdp->collectRAck(mCurrentRecvPacketID);
682 } 682 }
683 683
684 //llinfos << "Discarding duplicate resend from " << host << llendl; 684 LL_DEBUGS("Messaging") << "Discarding duplicate resend from " << host << llendl;
685 if(mVerboseLog) 685 if(mVerboseLog)
686 { 686 {
687 std::ostringstream str; 687 std::ostringstream str;
@@ -693,7 +693,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
693 << " resent " 693 << " resent "
694 << ((acks > 0) ? "acks" : "") 694 << ((acks > 0) ? "acks" : "")
695 << " DISCARD DUPLICATE"; 695 << " DISCARD DUPLICATE";
696 llinfos << str.str() << llendl; 696 LL_INFOS("Messaging") << str.str() << llendl;
697 } 697 }
698 mPacketsIn++; 698 mPacketsIn++;
699 valid_packet = FALSE; 699 valid_packet = FALSE;
@@ -740,7 +740,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
740 valid_packet && 740 valid_packet &&
741 mTemplateMessageReader->isBanned(cdp && cdp->getTrusted())) 741 mTemplateMessageReader->isBanned(cdp && cdp->getTrusted()))
742 { 742 {
743 llwarns << "LLMessageSystem::checkMessages " 743 LL_WARNS("Messaging") << "LLMessageSystem::checkMessages "
744 << "received banned message " 744 << "received banned message "
745 << mTemplateMessageReader->getMessageName() 745 << mTemplateMessageReader->getMessageName()
746 << " from " 746 << " from "
@@ -764,7 +764,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
764 if (valid_packet) 764 if (valid_packet)
765 { 765 {
766 // enable this for output of message names 766 // enable this for output of message names
767 //llinfos << "< \"" << mTemplateMessageReader->getMessageName() 767 //LL_INFOS("Messaging") << "< \"" << mTemplateMessageReader->getMessageName()
768 //<< "\"" << llendl; 768 //<< "\"" << llendl;
769 769
770 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. 770 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages.
@@ -773,23 +773,23 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
773 static char* object_update = LLMessageStringTable::getInstance()->getString("ObjectUpdate"); 773 static char* object_update = LLMessageStringTable::getInstance()->getString("ObjectUpdate");
774 if(object_update == mTemplateMessageReader->getMessageName() ) 774 if(object_update == mTemplateMessageReader->getMessageName() )
775 { 775 {
776 llinfos << "ObjectUpdate:" << llendl; 776 LL_INFOS("Messaging") << "ObjectUpdate:" << llendl;
777 U32 i; 777 U32 i;
778 llinfos << " Zero Encoded: " << zero_unexpanded_size << llendl; 778 LL_INFOS("Messaging") << " Zero Encoded: " << zero_unexpanded_size << llendl;
779 for( i = 0; i<zero_unexpanded_size; i++ ) 779 for( i = 0; i<zero_unexpanded_size; i++ )
780 { 780 {
781 llinfos << " " << i << ": " << (U32) zero_unexpanded_buffer[i] << llendl; 781 LL_INFOS("Messaging") << " " << i << ": " << (U32) zero_unexpanded_buffer[i] << llendl;
782 } 782 }
783 llinfos << "" << llendl; 783 LL_INFOS("Messaging") << "" << llendl;
784 784
785 llinfos << " Zero Unencoded: " << receive_size << llendl; 785 LL_INFOS("Messaging") << " Zero Unencoded: " << receive_size << llendl;
786 for( i = 0; i<receive_size; i++ ) 786 for( i = 0; i<receive_size; i++ )
787 { 787 {
788 llinfos << " " << i << ": " << (U32) buffer[i] << llendl; 788 LL_INFOS("Messaging") << " " << i << ": " << (U32) buffer[i] << llendl;
789 } 789 }
790 llinfos << "" << llendl; 790 LL_INFOS("Messaging") << "" << llendl;
791 791
792 llinfos << " Blocks and variables: " << llendl; 792 LL_INFOS("Messaging") << " Blocks and variables: " << llendl;
793 S32 byte_count = 0; 793 S32 byte_count = 0;
794 for (LLMessageTemplate::message_block_map_t::iterator 794 for (LLMessageTemplate::message_block_map_t::iterator
795 iter = mCurrentRMessageTemplate->mMemberBlocks.begin(), 795 iter = mCurrentRMessageTemplate->mMemberBlocks.begin(),
@@ -807,7 +807,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
807 807
808 if( getNumberOfBlocksFast( block_name ) < 1 ) 808 if( getNumberOfBlocksFast( block_name ) < 1 )
809 { 809 {
810 llinfos << var_name << " has no blocks" << llendl; 810 LL_INFOS("Messaging") << var_name << " has no blocks" << llendl;
811 } 811 }
812 for( S32 blocknum = 0; blocknum < getNumberOfBlocksFast( block_name ); blocknum++ ) 812 for( S32 blocknum = 0; blocknum < getNumberOfBlocksFast( block_name ); blocknum++ )
813 { 813 {
@@ -820,7 +820,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
820 if (!msg_block_data) 820 if (!msg_block_data)
821 { 821 {
822 sprintf(errmsg, "Block %s #%d not in message %s", block_name, blocknum, mCurrentRMessageData->mName); 822 sprintf(errmsg, "Block %s #%d not in message %s", block_name, blocknum, mCurrentRMessageData->mName);
823 llerrs << errmsg << llendl; 823 LL_ERRS("Messaging") << errmsg << llendl;
824 } 824 }
825 825
826 LLMsgVarData vardata = msg_block_data->mMemberVarData[vnamep]; 826 LLMsgVarData vardata = msg_block_data->mMemberVarData[vnamep];
@@ -828,7 +828,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
828 if (!vardata.getName()) 828 if (!vardata.getName())
829 { 829 {
830 sprintf(errmsg, "Variable %s not in message %s block %s", vnamep, mCurrentRMessageData->mName, bnamep); 830 sprintf(errmsg, "Variable %s not in message %s block %s", vnamep, mCurrentRMessageData->mName, bnamep);
831 llerrs << errmsg << llendl; 831 LL_ERRS("Messaging") << errmsg << llendl;
832 } 832 }
833 833
834 const S32 vardata_size = vardata.getSize(); 834 const S32 vardata_size = vardata.getSize();
@@ -837,17 +837,17 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
837 for( i = 0; i < vardata_size; i++ ) 837 for( i = 0; i < vardata_size; i++ )
838 { 838 {
839 byte_count++; 839 byte_count++;
840 llinfos << block_name << " " << var_name << " [" << blocknum << "][" << i << "]= " << (U32)(((U8*)vardata.getData())[i]) << llendl; 840 LL_INFOS("Messaging") << block_name << " " << var_name << " [" << blocknum << "][" << i << "]= " << (U32)(((U8*)vardata.getData())[i]) << llendl;
841 } 841 }
842 } 842 }
843 else 843 else
844 { 844 {
845 llinfos << block_name << " " << var_name << " [" << blocknum << "] 0 bytes" << llendl; 845 LL_INFOS("Messaging") << block_name << " " << var_name << " [" << blocknum << "] 0 bytes" << llendl;
846 } 846 }
847 } 847 }
848 } 848 }
849 } 849 }
850 llinfos << "Byte count =" << byte_count << llendl; 850 LL_INFOS("Messaging") << "Byte count =" << byte_count << llendl;
851 } 851 }
852 } 852 }
853 */ 853 */
@@ -871,7 +871,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
871 { 871 {
872 if (mbProtected && (!cdp)) 872 if (mbProtected && (!cdp))
873 { 873 {
874 llwarns << "Invalid Packet from invalid circuit " << host << llendl; 874 LL_WARNS("Messaging") << "Invalid Packet from invalid circuit " << host << llendl;
875 mOffCircuitPackets++; 875 mOffCircuitPackets++;
876 } 876 }
877 else 877 else
@@ -944,7 +944,7 @@ void LLMessageSystem::processAcks()
944 944
945 if (!mDenyTrustedCircuitSet.empty()) 945 if (!mDenyTrustedCircuitSet.empty())
946 { 946 {
947 llinfos << "Sending queued DenyTrustedCircuit messages." << llendl; 947 LL_INFOS("Messaging") << "Sending queued DenyTrustedCircuit messages." << llendl;
948 for (host_set_t::iterator hostit = mDenyTrustedCircuitSet.begin(); hostit != mDenyTrustedCircuitSet.end(); ++hostit) 948 for (host_set_t::iterator hostit = mDenyTrustedCircuitSet.begin(); hostit != mDenyTrustedCircuitSet.end(); ++hostit)
949 { 949 {
950 reallySendDenyTrustedCircuit(*hostit); 950 reallySendDenyTrustedCircuit(*hostit);
@@ -1176,7 +1176,7 @@ LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& n
1176 { 1176 {
1177 // These messages aren't really unreliable, they just weren't 1177 // These messages aren't really unreliable, they just weren't
1178 // explicitly sent as reliable, so they don't have a callback 1178 // explicitly sent as reliable, so they don't have a callback
1179// llwarns << "LLMessageSystem::sendMessage: Sending unreliable " 1179// LL_WARNS("Messaging") << "LLMessageSystem::sendMessage: Sending unreliable "
1180// << mMessageBuilder->getMessageName() << " message via HTTP" 1180// << mMessageBuilder->getMessageName() << " message via HTTP"
1181// << llendl; 1181// << llendl;
1182 return new LLFnPtrResponder( 1182 return new LLFnPtrResponder(
@@ -1213,10 +1213,10 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
1213 // yup! don't send packets to an unknown circuit 1213 // yup! don't send packets to an unknown circuit
1214 if(mVerboseLog) 1214 if(mVerboseLog)
1215 { 1215 {
1216 llinfos << "MSG: -> " << host << "\tUNKNOWN CIRCUIT:\t" 1216 LL_INFOS_ONCE("Messaging") << "MSG: -> " << host << "\tUNKNOWN CIRCUIT:\t"
1217 << mMessageBuilder->getMessageName() << llendl; 1217 << mMessageBuilder->getMessageName() << llendl;
1218 } 1218 }
1219 llwarns << "sendMessage - Trying to send " 1219 LL_WARNS_ONCE("Messaging") << "sendMessage - Trying to send "
1220 << mMessageBuilder->getMessageName() << " on unknown circuit " 1220 << mMessageBuilder->getMessageName() << " on unknown circuit "
1221 << host << llendl; 1221 << host << llendl;
1222 return 0; 1222 return 0;
@@ -1236,10 +1236,10 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
1236 // nope. don't send to dead circuits 1236 // nope. don't send to dead circuits
1237 if(mVerboseLog) 1237 if(mVerboseLog)
1238 { 1238 {
1239 llinfos << "MSG: -> " << host << "\tDEAD CIRCUIT\t\t" 1239 LL_INFOS("Messaging") << "MSG: -> " << host << "\tDEAD CIRCUIT\t\t"
1240 << mMessageBuilder->getMessageName() << llendl; 1240 << mMessageBuilder->getMessageName() << llendl;
1241 } 1241 }
1242 llwarns << "sendMessage - Trying to send message " 1242 LL_WARNS("Messaging") << "sendMessage - Trying to send message "
1243 << mMessageBuilder->getMessageName() << " to dead circuit " 1243 << mMessageBuilder->getMessageName() << " to dead circuit "
1244 << host << llendl; 1244 << host << llendl;
1245 return 0; 1245 return 0;
@@ -1283,7 +1283,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
1283 if((mMessageBuilder->getMessageName() != _PREHASH_ChildAgentUpdate) 1283 if((mMessageBuilder->getMessageName() != _PREHASH_ChildAgentUpdate)
1284 && (mMessageBuilder->getMessageName() != _PREHASH_SendXferPacket)) 1284 && (mMessageBuilder->getMessageName() != _PREHASH_SendXferPacket))
1285 { 1285 {
1286 llwarns << "sendMessage - Trying to send " 1286 LL_WARNS("Messaging") << "sendMessage - Trying to send "
1287 << ((buffer_length > 4000) ? "EXTRA " : "") 1287 << ((buffer_length > 4000) ? "EXTRA " : "")
1288 << "BIG message " << mMessageBuilder->getMessageName() << " - " 1288 << "BIG message " << mMessageBuilder->getMessageName() << " - "
1289 << buffer_length << llendl; 1289 << buffer_length << llendl;
@@ -1348,7 +1348,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
1348 // append_acout_count is incorrect or that 1348 // append_acout_count is incorrect or that
1349 // MAX_BUFFER_SIZE has fallen below MTU which is bad 1349 // MAX_BUFFER_SIZE has fallen below MTU which is bad
1350 // and probably programmer error. 1350 // and probably programmer error.
1351 llerrs << "Buffer packing failed due to size.." << llendl; 1351 LL_ERRS("Messaging") << "Buffer packing failed due to size.." << llendl;
1352 } 1352 }
1353 } 1353 }
1354 1354
@@ -1389,13 +1389,9 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
1389 std::ostream_iterator<TPACKETID> append(str, " "); 1389 std::ostream_iterator<TPACKETID> append(str, " ");
1390 std::copy(acks.begin(), acks.end(), append); 1390 std::copy(acks.begin(), acks.end(), append);
1391 } 1391 }
1392 llinfos << str.str() << llendl; 1392 LL_INFOS("Messaging") << str.str() << llendl;
1393 } 1393 }
1394 1394
1395 /*lldebugst(LLERR_MESSAGE) << "MessageSent at: " << (S32)totalTime()
1396 << "," << mMessageBuilder->getMessageName()
1397 << " to " << host
1398 << llendl;*/
1399 1395
1400 mPacketsOut++; 1396 mPacketsOut++;
1401 mBytesOut += buffer_length; 1397 mBytesOut += buffer_length;
@@ -1417,7 +1413,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re
1417 << nullToEmpty(mMessageReader->getMessageName()) 1413 << nullToEmpty(mMessageReader->getMessageName())
1418 << (recv_reliable ? " reliable" : "") 1414 << (recv_reliable ? " reliable" : "")
1419 << " REJECTED"; 1415 << " REJECTED";
1420 llinfos << str.str() << llendl; 1416 LL_INFOS("Messaging") << str.str() << llendl;
1421 } 1417 }
1422 // nope! 1418 // nope!
1423 // cout << "Rejecting unexpected message " << mCurrentMessageTemplate->mName << " from " << hex << ip << " , " << dec << port << endl; 1419 // cout << "Rejecting unexpected message " << mCurrentMessageTemplate->mName << " from " << hex << ip << " , " << dec << port << endl;
@@ -1425,7 +1421,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re
1425 // Keep track of rejected messages as well 1421 // Keep track of rejected messages as well
1426 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) 1422 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
1427 { 1423 {
1428 llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; 1424 LL_WARNS("Messaging") << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl;
1429 } 1425 }
1430 else 1426 else
1431 { 1427 {
@@ -1444,13 +1440,13 @@ S32 LLMessageSystem::sendMessage(
1444{ 1440{
1445 if (!(host.isOk())) 1441 if (!(host.isOk()))
1446 { 1442 {
1447 llwarns << "trying to send message to invalid host" << llendl; 1443 LL_WARNS("Messaging") << "trying to send message to invalid host" << llendl;
1448 return 0; 1444 return 0;
1449 } 1445 }
1450 newMessage(name); 1446 newMessage(name);
1451 if (mMessageBuilder != mLLSDMessageBuilder) 1447 if (mMessageBuilder != mLLSDMessageBuilder)
1452 { 1448 {
1453 llwarns << "trying to send llsd message when builder is not LLSD!" 1449 LL_WARNS("Messaging") << "trying to send llsd message when builder is not LLSD!"
1454 << llendl; 1450 << llendl;
1455 return 0; 1451 return 0;
1456 } 1452 }
@@ -1466,7 +1462,7 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
1466 // if it's received on a trusted circuit. JC 1462 // if it's received on a trusted circuit. JC
1467 if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) 1463 if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit"))
1468 { 1464 {
1469 llwarns << "Received trusted message on untrusted circuit. " 1465 LL_WARNS("Messaging") << "Received trusted message on untrusted circuit. "
1470 << "Will reply with deny. " 1466 << "Will reply with deny. "
1471 << "Message: " << nullToEmpty(mMessageReader->getMessageName()) 1467 << "Message: " << nullToEmpty(mMessageReader->getMessageName())
1472 << " Host: " << host << llendl; 1468 << " Host: " << host << llendl;
@@ -1474,7 +1470,7 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
1474 1470
1475 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) 1471 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
1476 { 1472 {
1477 llwarns << "got more than " << MAX_MESSAGE_COUNT_NUM 1473 LL_WARNS("Messaging") << "got more than " << MAX_MESSAGE_COUNT_NUM
1478 << " packets without clearing counts" 1474 << " packets without clearing counts"
1479 << llendl; 1475 << llendl;
1480 } 1476 }
@@ -1494,7 +1490,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
1494{ 1490{
1495 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) 1491 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
1496 { 1492 {
1497 llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl; 1493 LL_WARNS("Messaging") << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl;
1498 } 1494 }
1499 else 1495 else
1500 { 1496 {
@@ -1523,7 +1519,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
1523 << (recv_reliable ? " reliable" : "") 1519 << (recv_reliable ? " reliable" : "")
1524 << (recv_resent ? " resent" : "") 1520 << (recv_resent ? " resent" : "")
1525 << (recv_acks ? " acks" : ""); 1521 << (recv_acks ? " acks" : "");
1526 llinfos << str.str() << llendl; 1522 LL_INFOS("Messaging") << str.str() << llendl;
1527 } 1523 }
1528} 1524}
1529 1525
@@ -1533,48 +1529,48 @@ void LLMessageSystem::sanityCheck()
1533 1529
1534// if (!mCurrentRMessageData) 1530// if (!mCurrentRMessageData)
1535// { 1531// {
1536// llerrs << "mCurrentRMessageData is NULL" << llendl; 1532// LL_ERRS("Messaging") << "mCurrentRMessageData is NULL" << llendl;
1537// } 1533// }
1538 1534
1539// if (!mCurrentRMessageTemplate) 1535// if (!mCurrentRMessageTemplate)
1540// { 1536// {
1541// llerrs << "mCurrentRMessageTemplate is NULL" << llendl; 1537// LL_ERRS("Messaging") << "mCurrentRMessageTemplate is NULL" << llendl;
1542// } 1538// }
1543 1539
1544// if (!mCurrentRTemplateBlock) 1540// if (!mCurrentRTemplateBlock)
1545// { 1541// {
1546// llerrs << "mCurrentRTemplateBlock is NULL" << llendl; 1542// LL_ERRS("Messaging") << "mCurrentRTemplateBlock is NULL" << llendl;
1547// } 1543// }
1548 1544
1549// if (!mCurrentRDataBlock) 1545// if (!mCurrentRDataBlock)
1550// { 1546// {
1551// llerrs << "mCurrentRDataBlock is NULL" << llendl; 1547// LL_ERRS("Messaging") << "mCurrentRDataBlock is NULL" << llendl;
1552// } 1548// }
1553 1549
1554// if (!mCurrentSMessageData) 1550// if (!mCurrentSMessageData)
1555// { 1551// {
1556// llerrs << "mCurrentSMessageData is NULL" << llendl; 1552// LL_ERRS("Messaging") << "mCurrentSMessageData is NULL" << llendl;
1557// } 1553// }
1558 1554
1559// if (!mCurrentSMessageTemplate) 1555// if (!mCurrentSMessageTemplate)
1560// { 1556// {
1561// llerrs << "mCurrentSMessageTemplate is NULL" << llendl; 1557// LL_ERRS("Messaging") << "mCurrentSMessageTemplate is NULL" << llendl;
1562// } 1558// }
1563 1559
1564// if (!mCurrentSTemplateBlock) 1560// if (!mCurrentSTemplateBlock)
1565// { 1561// {
1566// llerrs << "mCurrentSTemplateBlock is NULL" << llendl; 1562// LL_ERRS("Messaging") << "mCurrentSTemplateBlock is NULL" << llendl;
1567// } 1563// }
1568 1564
1569// if (!mCurrentSDataBlock) 1565// if (!mCurrentSDataBlock)
1570// { 1566// {
1571// llerrs << "mCurrentSDataBlock is NULL" << llendl; 1567// LL_ERRS("Messaging") << "mCurrentSDataBlock is NULL" << llendl;
1572// } 1568// }
1573} 1569}
1574 1570
1575void LLMessageSystem::showCircuitInfo() 1571void LLMessageSystem::showCircuitInfo()
1576{ 1572{
1577 llinfos << mCircuitInfo << llendl; 1573 LL_INFOS("Messaging") << mCircuitInfo << llendl;
1578} 1574}
1579 1575
1580 1576
@@ -1624,7 +1620,7 @@ void LLMessageSystem::enableCircuit(const LLHost &host, BOOL trusted)
1624 1620
1625void LLMessageSystem::disableCircuit(const LLHost &host) 1621void LLMessageSystem::disableCircuit(const LLHost &host)
1626{ 1622{
1627 llinfos << "LLMessageSystem::disableCircuit for " << host << llendl; 1623 LL_INFOS("Messaging") << "LLMessageSystem::disableCircuit for " << host << llendl;
1628 U32 code = gMessageSystem->findCircuitCode( host ); 1624 U32 code = gMessageSystem->findCircuitCode( host );
1629 1625
1630 // Don't need to do this, as we're removing the circuit info anyway - djs 01/28/03 1626 // Don't need to do this, as we're removing the circuit info anyway - djs 01/28/03
@@ -1637,7 +1633,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host)
1637 code_session_map_t::iterator it = mCircuitCodes.find(code); 1633 code_session_map_t::iterator it = mCircuitCodes.find(code);
1638 if(it != mCircuitCodes.end()) 1634 if(it != mCircuitCodes.end())
1639 { 1635 {
1640 llinfos << "Circuit " << code << " removed from list" << llendl; 1636 LL_INFOS("Messaging") << "Circuit " << code << " removed from list" << llendl;
1641 //mCircuitCodes.removeData(code); 1637 //mCircuitCodes.removeData(code);
1642 mCircuitCodes.erase(it); 1638 mCircuitCodes.erase(it);
1643 } 1639 }
@@ -1653,7 +1649,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host)
1653 U32 old_port = (U32)(ip_port & (U64)0xFFFFFFFF); 1649 U32 old_port = (U32)(ip_port & (U64)0xFFFFFFFF);
1654 U32 old_ip = (U32)(ip_port >> 32); 1650 U32 old_ip = (U32)(ip_port >> 32);
1655 1651
1656 llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; 1652 LL_INFOS("Messaging") << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl;
1657 gMessageSystem->mIPPortToCircuitCode.erase(ip_port); 1653 gMessageSystem->mIPPortToCircuitCode.erase(ip_port);
1658 } 1654 }
1659 mCircuitInfo.removeCircuitData(host); 1655 mCircuitInfo.removeCircuitData(host);
@@ -1663,7 +1659,7 @@ void LLMessageSystem::disableCircuit(const LLHost &host)
1663 // Sigh, since we can open circuits which don't have circuit 1659 // Sigh, since we can open circuits which don't have circuit
1664 // codes, it's possible for this to happen... 1660 // codes, it's possible for this to happen...
1665 1661
1666 llwarns << "Couldn't find circuit code for " << host << llendl; 1662 LL_WARNS("Messaging") << "Couldn't find circuit code for " << host << llendl;
1667 } 1663 }
1668 1664
1669} 1665}
@@ -1694,7 +1690,7 @@ BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit)
1694 1690
1695 if (!host.isOk()) 1691 if (!host.isOk())
1696 { 1692 {
1697 //llinfos << "checkCircuitBlocked: Unknown circuit " << circuit << llendl; 1693 LL_DEBUGS("Messaging") << "checkCircuitBlocked: Unknown circuit " << circuit << llendl;
1698 return TRUE; 1694 return TRUE;
1699 } 1695 }
1700 1696
@@ -1705,7 +1701,7 @@ BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit)
1705 } 1701 }
1706 else 1702 else
1707 { 1703 {
1708 llinfos << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl; 1704 LL_INFOS("Messaging") << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl;
1709 return FALSE; 1705 return FALSE;
1710 } 1706 }
1711} 1707}
@@ -1716,7 +1712,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit)
1716 1712
1717 if (!host.isOk()) 1713 if (!host.isOk())
1718 { 1714 {
1719 //llinfos << "checkCircuitAlive: Unknown circuit " << circuit << llendl; 1715 LL_DEBUGS("Messaging") << "checkCircuitAlive: Unknown circuit " << circuit << llendl;
1720 return FALSE; 1716 return FALSE;
1721 } 1717 }
1722 1718
@@ -1727,7 +1723,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit)
1727 } 1723 }
1728 else 1724 else
1729 { 1725 {
1730 llinfos << "checkCircuitAlive(circuit): Unknown host - " << host << llendl; 1726 LL_INFOS("Messaging") << "checkCircuitAlive(circuit): Unknown host - " << host << llendl;
1731 return FALSE; 1727 return FALSE;
1732 } 1728 }
1733} 1729}
@@ -1741,7 +1737,7 @@ BOOL LLMessageSystem::checkCircuitAlive(const LLHost &host)
1741 } 1737 }
1742 else 1738 else
1743 { 1739 {
1744 //llinfos << "checkCircuitAlive(host): Unknown host - " << host << llendl; 1740 LL_DEBUGS("Messaging") << "checkCircuitAlive(host): Unknown host - " << host << llendl;
1745 return FALSE; 1741 return FALSE;
1746 } 1742 }
1747} 1743}
@@ -1891,7 +1887,7 @@ void LLMessageSystem::processAssignCircuitCode(LLMessageSystem* msg, void**)
1891 msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id); 1887 msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id);
1892 if(session_id != msg->getMySessionID()) 1888 if(session_id != msg->getMySessionID())
1893 { 1889 {
1894 llwarns << "AssignCircuitCode, bad session id. Expecting " 1890 LL_WARNS("Messaging") << "AssignCircuitCode, bad session id. Expecting "
1895 << msg->getMySessionID() << " but got " << session_id 1891 << msg->getMySessionID() << " but got " << session_id
1896 << llendl; 1892 << llendl;
1897 return; 1893 return;
@@ -1900,11 +1896,11 @@ void LLMessageSystem::processAssignCircuitCode(LLMessageSystem* msg, void**)
1900 msg->getU32Fast(_PREHASH_CircuitCode, _PREHASH_Code, code); 1896 msg->getU32Fast(_PREHASH_CircuitCode, _PREHASH_Code, code);
1901 if (!code) 1897 if (!code)
1902 { 1898 {
1903 llerrs << "Assigning circuit code of zero!" << llendl; 1899 LL_ERRS("Messaging") << "Assigning circuit code of zero!" << llendl;
1904 } 1900 }
1905 1901
1906 msg->mOurCircuitCode = code; 1902 msg->mOurCircuitCode = code;
1907 llinfos << "Circuit code " << code << " assigned." << llendl; 1903 LL_INFOS("Messaging") << "Circuit code " << code << " assigned." << llendl;
1908} 1904}
1909*/ 1905*/
1910 1906
@@ -1928,20 +1924,20 @@ bool LLMessageSystem::addCircuitCode(U32 code, const LLUUID& session_id)
1928{ 1924{
1929 if(!code) 1925 if(!code)
1930 { 1926 {
1931 llwarns << "addCircuitCode: zero circuit code" << llendl; 1927 LL_WARNS("Messaging") << "addCircuitCode: zero circuit code" << llendl;
1932 return false; 1928 return false;
1933 } 1929 }
1934 code_session_map_t::iterator it = mCircuitCodes.find(code); 1930 code_session_map_t::iterator it = mCircuitCodes.find(code);
1935 if(it == mCircuitCodes.end()) 1931 if(it == mCircuitCodes.end())
1936 { 1932 {
1937 llinfos << "New circuit code " << code << " added" << llendl; 1933 LL_INFOS("Messaging") << "New circuit code " << code << " added" << llendl;
1938 //msg->mCircuitCodes[circuit_code] = circuit_code; 1934 //msg->mCircuitCodes[circuit_code] = circuit_code;
1939 1935
1940 mCircuitCodes.insert(code_session_map_t::value_type(code, session_id)); 1936 mCircuitCodes.insert(code_session_map_t::value_type(code, session_id));
1941 } 1937 }
1942 else 1938 else
1943 { 1939 {
1944 llinfos << "Duplicate circuit code " << code << " added" << llendl; 1940 LL_INFOS("Messaging") << "Duplicate circuit code " << code << " added" << llendl;
1945 } 1941 }
1946 return true; 1942 return true;
1947} 1943}
@@ -1973,7 +1969,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
1973 if(it == msg->mCircuitCodes.end()) 1969 if(it == msg->mCircuitCodes.end())
1974 { 1970 {
1975 // Whoah, abort! We don't know anything about this circuit code. 1971 // Whoah, abort! We don't know anything about this circuit code.
1976 llwarns << "UseCircuitCode for " << circuit_code_in 1972 LL_WARNS("Messaging") << "UseCircuitCode for " << circuit_code_in
1977 << " received without AddCircuitCode message - aborting" 1973 << " received without AddCircuitCode message - aborting"
1978 << llendl; 1974 << llendl;
1979 return; 1975 return;
@@ -1985,7 +1981,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
1985 msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id); 1981 msg->getUUIDFast(_PREHASH_CircuitCode, _PREHASH_SessionID, session_id);
1986 if(session_id != (*it).second) 1982 if(session_id != (*it).second)
1987 { 1983 {
1988 llwarns << "UseCircuitCode unmatched session id. Got " 1984 LL_WARNS("Messaging") << "UseCircuitCode unmatched session id. Got "
1989 << session_id << " but expected " << (*it).second 1985 << session_id << " but expected " << (*it).second
1990 << llendl; 1986 << llendl;
1991 return; 1987 return;
@@ -2000,7 +1996,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
2000 if ((ip_port_old == ip_port_in) && (circuit_code_old == circuit_code_in)) 1996 if ((ip_port_old == ip_port_in) && (circuit_code_old == circuit_code_in))
2001 { 1997 {
2002 // Current information is the same as incoming info, ignore 1998 // Current information is the same as incoming info, ignore
2003 llinfos << "Got duplicate UseCircuitCode for circuit " << circuit_code_in << " to " << msg->getSender() << llendl; 1999 LL_INFOS("Messaging") << "Got duplicate UseCircuitCode for circuit " << circuit_code_in << " to " << msg->getSender() << llendl;
2004 return; 2000 return;
2005 } 2001 }
2006 2002
@@ -2010,25 +2006,25 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
2010 msg->mIPPortToCircuitCode.erase(ip_port_old); 2006 msg->mIPPortToCircuitCode.erase(ip_port_old);
2011 U32 old_port = (U32)(ip_port_old & (U64)0xFFFFFFFF); 2007 U32 old_port = (U32)(ip_port_old & (U64)0xFFFFFFFF);
2012 U32 old_ip = (U32)(ip_port_old >> 32); 2008 U32 old_ip = (U32)(ip_port_old >> 32);
2013 llinfos << "Removing derelict lookup entry for circuit " << circuit_code_old << " to " << LLHost(old_ip, old_port) << llendl; 2009 LL_INFOS("Messaging") << "Removing derelict lookup entry for circuit " << circuit_code_old << " to " << LLHost(old_ip, old_port) << llendl;
2014 } 2010 }
2015 2011
2016 if (circuit_code_old) 2012 if (circuit_code_old)
2017 { 2013 {
2018 LLHost cur_host(ip, port); 2014 LLHost cur_host(ip, port);
2019 2015
2020 llwarns << "Disabling existing circuit for " << cur_host << llendl; 2016 LL_WARNS("Messaging") << "Disabling existing circuit for " << cur_host << llendl;
2021 msg->disableCircuit(cur_host); 2017 msg->disableCircuit(cur_host);
2022 if (circuit_code_old == circuit_code_in) 2018 if (circuit_code_old == circuit_code_in)
2023 { 2019 {
2024 llwarns << "Asymmetrical circuit to ip/port lookup!" << llendl; 2020 LL_WARNS("Messaging") << "Asymmetrical circuit to ip/port lookup!" << llendl;
2025 llwarns << "Multiple circuit codes for " << cur_host << " probably!" << llendl; 2021 LL_WARNS("Messaging") << "Multiple circuit codes for " << cur_host << " probably!" << llendl;
2026 llwarns << "Permanently disabling circuit" << llendl; 2022 LL_WARNS("Messaging") << "Permanently disabling circuit" << llendl;
2027 return; 2023 return;
2028 } 2024 }
2029 else 2025 else
2030 { 2026 {
2031 llwarns << "Circuit code changed for " << msg->getSender() 2027 LL_WARNS("Messaging") << "Circuit code changed for " << msg->getSender()
2032 << " from " << circuit_code_old << " to " 2028 << " from " << circuit_code_old << " to "
2033 << circuit_code_in << llendl; 2029 << circuit_code_in << llendl;
2034 } 2030 }
@@ -2070,7 +2066,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
2070 msg->mIPPortToCircuitCode[ip_port_in] = circuit_code_in; 2066 msg->mIPPortToCircuitCode[ip_port_in] = circuit_code_in;
2071 msg->mCircuitCodeToIPPort[circuit_code_in] = ip_port_in; 2067 msg->mCircuitCodeToIPPort[circuit_code_in] = ip_port_in;
2072 2068
2073 llinfos << "Circuit code " << circuit_code_in << " from " 2069 LL_INFOS("Messaging") << "Circuit code " << circuit_code_in << " from "
2074 << msg->getSender() << " for agent " << id << " in session " 2070 << msg->getSender() << " for agent " << id << " in session "
2075 << session_id << llendl; 2071 << session_id << llendl;
2076 2072
@@ -2083,7 +2079,7 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
2083 } 2079 }
2084 else 2080 else
2085 { 2081 {
2086 llwarns << "Got zero circuit code in use_circuit_code" << llendl; 2082 LL_WARNS("Messaging") << "Got zero circuit code in use_circuit_code" << llendl;
2087 } 2083 }
2088} 2084}
2089 2085
@@ -2105,7 +2101,7 @@ void LLMessageSystem::processError(LLMessageSystem* msg, void**)
2105 msg->getString("Data", "Message", MTUBYTES, buffer); 2101 msg->getString("Data", "Message", MTUBYTES, buffer);
2106 error_message.assign(buffer); 2102 error_message.assign(buffer);
2107 2103
2108 llwarns << "Message error from " << msg->getSender() << " - " 2104 LL_WARNS("Messaging") << "Message error from " << msg->getSender() << " - "
2109 << error_code << " " << error_token << " " << error_id << " \"" 2105 << error_code << " " << error_token << " " << error_id << " \""
2110 << error_system << "\" \"" << error_message << "\"" << llendl; 2106 << error_system << "\" \"" << error_message << "\"" << llendl;
2111} 2107}
@@ -2143,7 +2139,7 @@ void LLMessageSystem::dispatch(
2143 gMessageSystem->mMessageTemplates.end()) && 2139 gMessageSystem->mMessageTemplates.end()) &&
2144 !LLMessageConfig::isValidMessage(msg_name)) 2140 !LLMessageConfig::isValidMessage(msg_name))
2145 { 2141 {
2146 llwarns << "Ignoring unknown message " << msg_name << llendl; 2142 LL_WARNS("Messaging") << "Ignoring unknown message " << msg_name << llendl;
2147 responsep->notFound("Invalid message name"); 2143 responsep->notFound("Invalid message name");
2148 return; 2144 return;
2149 } 2145 }
@@ -2153,12 +2149,12 @@ void LLMessageSystem::dispatch(
2153 const LLHTTPNode* handler = messageRootNode().traverse(path, context); 2149 const LLHTTPNode* handler = messageRootNode().traverse(path, context);
2154 if (!handler) 2150 if (!handler)
2155 { 2151 {
2156 llwarns << "LLMessageService::dispatch > no handler for " 2152 LL_WARNS("Messaging") << "LLMessageService::dispatch > no handler for "
2157 << path << llendl; 2153 << path << llendl;
2158 return; 2154 return;
2159 } 2155 }
2160 // enable this for output of message names 2156 // enable this for output of message names
2161 //llinfos << "< \"" << msg_name << "\"" << llendl; 2157 //LL_INFOS("Messaging") << "< \"" << msg_name << "\"" << llendl;
2162 //lldebugs << "data: " << LLSDNotationStreamer(message) << llendl; 2158 //lldebugs << "data: " << LLSDNotationStreamer(message) << llendl;
2163 2159
2164 handler->post(responsep, context, message); 2160 handler->post(responsep, context, message);
@@ -2177,9 +2173,9 @@ static void check_for_unrecognized_messages(
2177 2173
2178 if (templates.find(name) == templates.end()) 2174 if (templates.find(name) == templates.end())
2179 { 2175 {
2180 llinfos << " " << type 2176 LL_INFOS("AppInit") << " " << type
2181 << " ban list contains unrecognized message " 2177 << " ban list contains unrecognized message "
2182 << name << llendl; 2178 << name << LL_ENDL;
2183 } 2179 }
2184 } 2180 }
2185} 2181}
@@ -2187,7 +2183,7 @@ static void check_for_unrecognized_messages(
2187void LLMessageSystem::setMessageBans( 2183void LLMessageSystem::setMessageBans(
2188 const LLSD& trusted, const LLSD& untrusted) 2184 const LLSD& trusted, const LLSD& untrusted)
2189{ 2185{
2190 llinfos << "LLMessageSystem::setMessageBans:" << llendl; 2186 LL_DEBUGS("AppInit") << "LLMessageSystem::setMessageBans:" << LL_ENDL;
2191 bool any_set = false; 2187 bool any_set = false;
2192 2188
2193 for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), 2189 for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(),
@@ -2207,17 +2203,17 @@ void LLMessageSystem::setMessageBans(
2207 2203
2208 if (ban_from_trusted || ban_from_untrusted) 2204 if (ban_from_trusted || ban_from_untrusted)
2209 { 2205 {
2210 llinfos << " " << name << " banned from " 2206 LL_INFOS("AppInit") << " " << name << " banned from "
2211 << (ban_from_trusted ? "TRUSTED " : " ") 2207 << (ban_from_trusted ? "TRUSTED " : " ")
2212 << (ban_from_untrusted ? "UNTRUSTED " : " ") 2208 << (ban_from_untrusted ? "UNTRUSTED " : " ")
2213 << llendl; 2209 << LL_ENDL;
2214 any_set = true; 2210 any_set = true;
2215 } 2211 }
2216 } 2212 }
2217 2213
2218 if (!any_set) 2214 if (!any_set)
2219 { 2215 {
2220 llinfos << " no messages banned" << llendl; 2216 LL_DEBUGS("AppInit") << " no messages banned" << LL_ENDL;
2221 } 2217 }
2222 2218
2223 check_for_unrecognized_messages("trusted", trusted, mMessageTemplates); 2219 check_for_unrecognized_messages("trusted", trusted, mMessageTemplates);
@@ -2267,7 +2263,7 @@ S32 LLMessageSystem::sendError(
2267 } 2263 }
2268 else 2264 else
2269 { 2265 {
2270 llwarns << "Data and message were too large -- data removed." 2266 LL_WARNS("Messaging") << "Data and message were too large -- data removed."
2271 << llendl; 2267 << llendl;
2272 addBinaryData("Data", NULL, 0); 2268 addBinaryData("Data", NULL, 0);
2273 } 2269 }
@@ -2288,7 +2284,7 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/)
2288 for (S32 i = 0; i < ack_count; i++) 2284 for (S32 i = 0; i < ack_count; i++)
2289 { 2285 {
2290 msgsystem->getU32Fast(_PREHASH_Packets, _PREHASH_ID, packet_id, i); 2286 msgsystem->getU32Fast(_PREHASH_Packets, _PREHASH_ID, packet_id, i);
2291// llinfos << "ack recvd' from " << host << " for packet " << (TPACKETID)packet_id << llendl; 2287// LL_DEBUGS("Messaging") << "ack recvd' from " << host << " for packet " << (TPACKETID)packet_id << llendl;
2292 cdp->ackReliablePacket(packet_id); 2288 cdp->ackReliablePacket(packet_id);
2293 } 2289 }
2294 if (!cdp->getUnackedPacketCount()) 2290 if (!cdp->getUnackedPacketCount())
@@ -2309,12 +2305,12 @@ void process_log_messages(LLMessageSystem* msg, void**)
2309 2305
2310 if (log_message) 2306 if (log_message)
2311 { 2307 {
2312 llinfos << "Starting logging via message" << llendl; 2308 LL_INFOS("Messaging") << "Starting logging via message" << llendl;
2313 msg->startLogging(); 2309 msg->startLogging();
2314 } 2310 }
2315 else 2311 else
2316 { 2312 {
2317 llinfos << "Stopping logging via message" << llendl; 2313 LL_INFOS("Messaging") << "Stopping logging via message" << llendl;
2318 msg->stopLogging(); 2314 msg->stopLogging();
2319 } 2315 }
2320}*/ 2316}*/
@@ -2333,7 +2329,7 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **)
2333 LLCircuitData *cdp = msg->mCircuitInfo.findCircuit(msg->getSender()); 2329 LLCircuitData *cdp = msg->mCircuitInfo.findCircuit(msg->getSender());
2334 if (!cdp) 2330 if (!cdp)
2335 { 2331 {
2336 llwarns << "Attempt to create trusted circuit without circuit data: " 2332 LL_WARNS("Messaging") << "Attempt to create trusted circuit without circuit data: "
2337 << msg->getSender() << llendl; 2333 << msg->getSender() << llendl;
2338 return; 2334 return;
2339 } 2335 }
@@ -2358,7 +2354,7 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **)
2358 if(msg->isMatchingDigestForWindowAndUUIDs(their_digest, TRUST_TIME_WINDOW, local_id, remote_id)) 2354 if(msg->isMatchingDigestForWindowAndUUIDs(their_digest, TRUST_TIME_WINDOW, local_id, remote_id))
2359 { 2355 {
2360 cdp->setTrusted(TRUE); 2356 cdp->setTrusted(TRUE);
2361 llinfos << "Trusted digest from " << msg->getSender() << llendl; 2357 LL_INFOS("Messaging") << "Trusted digest from " << msg->getSender() << llendl;
2362 return; 2358 return;
2363 } 2359 }
2364 else if (cdp->getTrusted()) 2360 else if (cdp->getTrusted())
@@ -2367,13 +2363,13 @@ void process_create_trusted_circuit(LLMessageSystem *msg, void **)
2367 // This means that this could just be the result of a stale deny sent from a while back, and 2363 // This means that this could just be the result of a stale deny sent from a while back, and
2368 // the message system is being slow. Don't bother sending the deny, as it may continually 2364 // the message system is being slow. Don't bother sending the deny, as it may continually
2369 // ping-pong back and forth on a very hosed circuit. 2365 // ping-pong back and forth on a very hosed circuit.
2370 llwarns << "Ignoring bad digest from known trusted circuit: " << their_digest 2366 LL_WARNS("Messaging") << "Ignoring bad digest from known trusted circuit: " << their_digest
2371 << " host: " << msg->getSender() << llendl; 2367 << " host: " << msg->getSender() << llendl;
2372 return; 2368 return;
2373 } 2369 }
2374 else 2370 else
2375 { 2371 {
2376 llwarns << "Bad digest from known circuit: " << their_digest 2372 LL_WARNS("Messaging") << "Bad digest from known circuit: " << their_digest
2377 << " host: " << msg->getSender() << llendl; 2373 << " host: " << msg->getSender() << llendl;
2378 msg->sendDenyTrustedCircuit(msg->getSender()); 2374 msg->sendDenyTrustedCircuit(msg->getSender());
2379 return; 2375 return;
@@ -2410,7 +2406,7 @@ void process_deny_trusted_circuit(LLMessageSystem *msg, void **)
2410 // spin. 2406 // spin.
2411 // *TODO: probably should keep a count of number of resends 2407 // *TODO: probably should keep a count of number of resends
2412 // per circuit, and stop resending after a while. 2408 // per circuit, and stop resending after a while.
2413 llinfos << "Got DenyTrustedCircuit. Sending CreateTrustedCircuit to " 2409 LL_INFOS("Messaging") << "Got DenyTrustedCircuit. Sending CreateTrustedCircuit to "
2414 << msg->getSender() << llendl; 2410 << msg->getSender() << llendl;
2415 msg->sendCreateTrustedCircuit(msg->getSender(), local_id, remote_id); 2411 msg->sendCreateTrustedCircuit(msg->getSender(), local_id, remote_id);
2416} 2412}
@@ -2419,7 +2415,7 @@ void process_deny_trusted_circuit(LLMessageSystem *msg, void **)
2419void dump_prehash_files() 2415void dump_prehash_files()
2420{ 2416{
2421 U32 i; 2417 U32 i;
2422 FILE* fp = LLFile::fopen("../../indra/llmessage/message_prehash.h", "w"); /* Flawfinder: ignore */ 2418 LLFILE* fp = LLFile::fopen("../../indra/llmessage/message_prehash.h", "w"); /* Flawfinder: ignore */
2423 if (fp) 2419 if (fp)
2424 { 2420 {
2425 fprintf( 2421 fprintf(
@@ -2499,7 +2495,7 @@ BOOL start_messaging_system(
2499 2495
2500 if (!gMessageSystem) 2496 if (!gMessageSystem)
2501 { 2497 {
2502 llerrs << "Messaging system initialization failed." << llendl; 2498 LL_ERRS("AppInit") << "Messaging system initialization failed." << LL_ENDL;
2503 return FALSE; 2499 return FALSE;
2504 } 2500 }
2505 2501
@@ -2518,12 +2514,12 @@ BOOL start_messaging_system(
2518 { 2514 {
2519 if (gMessageSystem->mMessageFileVersionNumber != gPrehashVersionNumber) 2515 if (gMessageSystem->mMessageFileVersionNumber != gPrehashVersionNumber)
2520 { 2516 {
2521 llinfos << "Message template version does not match prehash version number" << llendl; 2517 LL_INFOS("AppInit") << "Message template version does not match prehash version number" << LL_ENDL;
2522 llinfos << "Run simulator with -prehash command line option to rebuild prehash data" << llendl; 2518 LL_INFOS("AppInit") << "Run simulator with -prehash command line option to rebuild prehash data" << llendl;
2523 } 2519 }
2524 else 2520 else
2525 { 2521 {
2526 llinfos << "Message template version matches prehash version number" << llendl; 2522 LL_DEBUGS("AppInit") << "Message template version matches prehash version number" << llendl;
2527 } 2523 }
2528 } 2524 }
2529 2525
@@ -2569,7 +2565,7 @@ void LLMessageSystem::startLogging()
2569 str << "\t<-\tincoming message" <<std::endl; 2565 str << "\t<-\tincoming message" <<std::endl;
2570 str << "\t->\toutgoing message" << std::endl; 2566 str << "\t->\toutgoing message" << std::endl;
2571 str << " <> host size zero id name"; 2567 str << " <> host size zero id name";
2572 llinfos << str.str() << llendl; 2568 LL_INFOS("Messaging") << str.str() << llendl;
2573} 2569}
2574 2570
2575void LLMessageSystem::stopLogging() 2571void LLMessageSystem::stopLogging()
@@ -2577,7 +2573,7 @@ void LLMessageSystem::stopLogging()
2577 if(mVerboseLog) 2573 if(mVerboseLog)
2578 { 2574 {
2579 mVerboseLog = FALSE; 2575 mVerboseLog = FALSE;
2580 llinfos << "END MESSAGE LOG" << llendl; 2576 LL_INFOS("Messaging") << "END MESSAGE LOG" << llendl;
2581 } 2577 }
2582} 2578}
2583 2579
@@ -2683,7 +2679,7 @@ void end_messaging_system()
2683 2679
2684 std::ostringstream str; 2680 std::ostringstream str;
2685 gMessageSystem->summarizeLogs(str); 2681 gMessageSystem->summarizeLogs(str);
2686 llinfos << str.str().c_str() << llendl; 2682 LL_INFOS("Messaging") << str.str().c_str() << llendl;
2687 2683
2688 delete gMessageSystem; 2684 delete gMessageSystem;
2689 gMessageSystem = NULL; 2685 gMessageSystem = NULL;
@@ -2735,7 +2731,7 @@ void LLMessageSystem::dumpReceiveCounts()
2735 2731
2736 if(mNumMessageCounts > 0) 2732 if(mNumMessageCounts > 0)
2737 { 2733 {
2738 llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; 2734 LL_DEBUGS("Messaging") << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl;
2739 for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), 2735 for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(),
2740 end = mMessageTemplates.end(); 2736 end = mMessageTemplates.end();
2741 iter != end; iter++) 2737 iter != end; iter++)
@@ -2743,7 +2739,7 @@ void LLMessageSystem::dumpReceiveCounts()
2743 const LLMessageTemplate* mt = iter->second; 2739 const LLMessageTemplate* mt = iter->second;
2744 if (mt->mReceiveCount > 0) 2740 if (mt->mReceiveCount > 0)
2745 { 2741 {
2746 llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes 2742 LL_INFOS("Messaging") << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes
2747 << " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << llround(100 * mt->mDecodeTimeThisFrame / mReceiveTime) << "%" << llendl; 2743 << " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << llround(100 * mt->mDecodeTimeThisFrame / mReceiveTime) << "%" << llendl;
2748 } 2744 }
2749 } 2745 }
@@ -2860,7 +2856,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size)
2860{ 2856{
2861 if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE) 2857 if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE)
2862 { 2858 {
2863 llwarns << "zeroCodeExpand() called with data_size of " << *data_size 2859 LL_WARNS("Messaging") << "zeroCodeExpand() called with data_size of " << *data_size
2864 << llendl; 2860 << llendl;
2865 } 2861 }
2866 2862
@@ -2900,7 +2896,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size)
2900 { 2896 {
2901 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-1])) 2897 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-1]))
2902 { 2898 {
2903 llwarns << "attempt to write past reasonable encoded buffer size 1" << llendl; 2899 LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 1" << llendl;
2904 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); 2900 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE);
2905 outptr = mEncodedRecvBuffer; 2901 outptr = mEncodedRecvBuffer;
2906 break; 2902 break;
@@ -2912,7 +2908,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size)
2912 *outptr++ = *inptr++; 2908 *outptr++ = *inptr++;
2913 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-256])) 2909 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-256]))
2914 { 2910 {
2915 llwarns << "attempt to write past reasonable encoded buffer size 2" << llendl; 2911 LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 2" << llendl;
2916 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); 2912 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE);
2917 outptr = mEncodedRecvBuffer; 2913 outptr = mEncodedRecvBuffer;
2918 count = -1; 2914 count = -1;
@@ -2931,7 +2927,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size)
2931 { 2927 {
2932 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-(*inptr)])) 2928 if (outptr > (&mEncodedRecvBuffer[MAX_BUFFER_SIZE-(*inptr)]))
2933 { 2929 {
2934 llwarns << "attempt to write past reasonable encoded buffer size 3" << llendl; 2930 LL_WARNS("Messaging") << "attempt to write past reasonable encoded buffer size 3" << llendl;
2935 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE); 2931 callExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE);
2936 outptr = mEncodedRecvBuffer; 2932 outptr = mEncodedRecvBuffer;
2937 } 2933 }
@@ -2954,7 +2950,7 @@ void LLMessageSystem::addTemplate(LLMessageTemplate *templatep)
2954{ 2950{
2955 if (mMessageTemplates.count(templatep->mName) > 0) 2951 if (mMessageTemplates.count(templatep->mName) > 0)
2956 { 2952 {
2957 llerrs << templatep->mName << " already used as a template name!" 2953 LL_ERRS("Messaging") << templatep->mName << " already used as a template name!"
2958 << llendl; 2954 << llendl;
2959 } 2955 }
2960 mMessageTemplates[templatep->mName] = templatep; 2956 mMessageTemplates[templatep->mName] = templatep;
@@ -2971,7 +2967,7 @@ void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)(
2971 } 2967 }
2972 else 2968 else
2973 { 2969 {
2974 llerrs << name << " is not a known message name!" << llendl; 2970 LL_ERRS("Messaging") << name << " is not a known message name!" << llendl;
2975 } 2971 }
2976} 2972}
2977 2973
@@ -2983,7 +2979,7 @@ bool LLMessageSystem::callHandler(const char *name,
2983 iter = mMessageTemplates.find(name); 2979 iter = mMessageTemplates.find(name);
2984 if(iter == mMessageTemplates.end()) 2980 if(iter == mMessageTemplates.end())
2985 { 2981 {
2986 llwarns << "LLMessageSystem::callHandler: unknown message " 2982 LL_WARNS("Messaging") << "LLMessageSystem::callHandler: unknown message "
2987 << name << llendl; 2983 << name << llendl;
2988 return false; 2984 return false;
2989 } 2985 }
@@ -2991,7 +2987,7 @@ bool LLMessageSystem::callHandler(const char *name,
2991 const LLMessageTemplate* msg_template = iter->second; 2987 const LLMessageTemplate* msg_template = iter->second;
2992 if (msg_template->isBanned(trustedSource)) 2988 if (msg_template->isBanned(trustedSource))
2993 { 2989 {
2994 llwarns << "LLMessageSystem::callHandler: banned message " 2990 LL_WARNS("Messaging") << "LLMessageSystem::callHandler: banned message "
2995 << name 2991 << name
2996 << " from " 2992 << " from "
2997 << (trustedSource ? "trusted " : "untrusted ") 2993 << (trustedSource ? "trusted " : "untrusted ")
@@ -3131,7 +3127,7 @@ bool LLMessageSystem::generateDigestForWindowAndUUIDs(char* digest, const S32 wi
3131 std::string shared_secret = get_shared_secret(); 3127 std::string shared_secret = get_shared_secret();
3132 if(shared_secret.empty()) 3128 if(shared_secret.empty())
3133 { 3129 {
3134 llerrs << "Trying to generate complex digest on a machine without a shared secret!" << llendl; 3130 LL_ERRS("Messaging") << "Trying to generate complex digest on a machine without a shared secret!" << llendl;
3135 } 3131 }
3136 3132
3137 U32 now = time(NULL); 3133 U32 now = time(NULL);
@@ -3150,7 +3146,7 @@ bool LLMessageSystem::isMatchingDigestForWindowAndUUIDs(const char* digest, cons
3150 std::string shared_secret = get_shared_secret(); 3146 std::string shared_secret = get_shared_secret();
3151 if(shared_secret.empty()) 3147 if(shared_secret.empty())
3152 { 3148 {
3153 llerrs << "Trying to compare complex digests on a machine without a shared secret!" << llendl; 3149 LL_ERRS("Messaging") << "Trying to compare complex digests on a machine without a shared secret!" << llendl;
3154 } 3150 }
3155 3151
3156 char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ 3152 char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
@@ -3197,7 +3193,7 @@ bool LLMessageSystem::generateDigestForWindow(char* digest, const S32 window) co
3197 std::string shared_secret = get_shared_secret(); 3193 std::string shared_secret = get_shared_secret();
3198 if(shared_secret.empty()) 3194 if(shared_secret.empty())
3199 { 3195 {
3200 llerrs << "Trying to generate simple digest on a machine without a shared secret!" << llendl; 3196 LL_ERRS("Messaging") << "Trying to generate simple digest on a machine without a shared secret!" << llendl;
3201 } 3197 }
3202 3198
3203 U32 now = time(NULL); 3199 U32 now = time(NULL);
@@ -3216,7 +3212,7 @@ bool LLMessageSystem::isMatchingDigestForWindow(const char* digest, S32 const wi
3216 std::string shared_secret = get_shared_secret(); 3212 std::string shared_secret = get_shared_secret();
3217 if(shared_secret.empty()) 3213 if(shared_secret.empty())
3218 { 3214 {
3219 llerrs << "Trying to compare simple digests on a machine without a shared secret!" << llendl; 3215 LL_ERRS("Messaging") << "Trying to compare simple digests on a machine without a shared secret!" << llendl;
3220 } 3216 }
3221 3217
3222 char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ 3218 char our_digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
@@ -3250,12 +3246,12 @@ void LLMessageSystem::sendCreateTrustedCircuit(const LLHost &host, const LLUUID
3250 char digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ 3246 char digest[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
3251 if (id1.isNull()) 3247 if (id1.isNull())
3252 { 3248 {
3253 llwarns << "Can't send CreateTrustedCircuit to " << host << " because we don't have the local end point ID" << llendl; 3249 LL_WARNS("Messaging") << "Can't send CreateTrustedCircuit to " << host << " because we don't have the local end point ID" << llendl;
3254 return; 3250 return;
3255 } 3251 }
3256 if (id2.isNull()) 3252 if (id2.isNull())
3257 { 3253 {
3258 llwarns << "Can't send CreateTrustedCircuit to " << host << " because we don't have the remote end point ID" << llendl; 3254 LL_WARNS("Messaging") << "Can't send CreateTrustedCircuit to " << host << " because we don't have the remote end point ID" << llendl;
3259 return; 3255 return;
3260 } 3256 }
3261 generateDigestForWindowAndUUIDs(digest, TRUST_TIME_WINDOW, id1, id2); 3257 generateDigestForWindowAndUUIDs(digest, TRUST_TIME_WINDOW, id1, id2);
@@ -3263,7 +3259,7 @@ void LLMessageSystem::sendCreateTrustedCircuit(const LLHost &host, const LLUUID
3263 nextBlockFast(_PREHASH_DataBlock); 3259 nextBlockFast(_PREHASH_DataBlock);
3264 addUUIDFast(_PREHASH_EndPointID, id1); 3260 addUUIDFast(_PREHASH_EndPointID, id1);
3265 addBinaryDataFast(_PREHASH_Digest, digest, MD5HEX_STR_BYTES); 3261 addBinaryDataFast(_PREHASH_Digest, digest, MD5HEX_STR_BYTES);
3266 llinfos << "xmitting digest: " << digest << " Host: " << host << llendl; 3262 LL_INFOS("Messaging") << "xmitting digest: " << digest << " Host: " << host << llendl;
3267 sendMessage(host); 3263 sendMessage(host);
3268} 3264}
3269 3265
@@ -3277,10 +3273,10 @@ void LLMessageSystem::reallySendDenyTrustedCircuit(const LLHost &host)
3277 LLCircuitData *cdp = mCircuitInfo.findCircuit(host); 3273 LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
3278 if (!cdp) 3274 if (!cdp)
3279 { 3275 {
3280 llwarns << "Not sending DenyTrustedCircuit to host without a circuit." << llendl; 3276 LL_WARNS("Messaging") << "Not sending DenyTrustedCircuit to host without a circuit." << llendl;
3281 return; 3277 return;
3282 } 3278 }
3283 llinfos << "Sending DenyTrustedCircuit to " << host << llendl; 3279 LL_INFOS("Messaging") << "Sending DenyTrustedCircuit to " << host << llendl;
3284 newMessageFast(_PREHASH_DenyTrustedCircuit); 3280 newMessageFast(_PREHASH_DenyTrustedCircuit);
3285 nextBlockFast(_PREHASH_DataBlock); 3281 nextBlockFast(_PREHASH_DataBlock);
3286 addUUIDFast(_PREHASH_EndPointID, cdp->getLocalEndPointID()); 3282 addUUIDFast(_PREHASH_EndPointID, cdp->getLocalEndPointID());
@@ -3301,7 +3297,7 @@ void LLMessageSystem::establishBidirectionalTrust(const LLHost &host, S64 frame_
3301 std::string shared_secret = get_shared_secret(); 3297 std::string shared_secret = get_shared_secret();
3302 if(shared_secret.empty()) 3298 if(shared_secret.empty())
3303 { 3299 {
3304 llerrs << "Trying to establish bidirectional trust on a machine without a shared secret!" << llendl; 3300 LL_ERRS("Messaging") << "Trying to establish bidirectional trust on a machine without a shared secret!" << llendl;
3305 } 3301 }
3306 LLTimer timeout; 3302 LLTimer timeout;
3307 3303
@@ -3353,8 +3349,8 @@ void LLMessageSystem::establishBidirectionalTrust(const LLHost &host, S64 frame_
3353 3349
3354void LLMessageSystem::dumpPacketToLog() 3350void LLMessageSystem::dumpPacketToLog()
3355{ 3351{
3356 llwarns << "Packet Dump from:" << mPacketRing.getLastSender() << llendl; 3352 LL_WARNS("Messaging") << "Packet Dump from:" << mPacketRing.getLastSender() << llendl;
3357 llwarns << "Packet Size:" << mTrueReceiveSize << llendl; 3353 LL_WARNS("Messaging") << "Packet Size:" << mTrueReceiveSize << llendl;
3358 char line_buffer[256]; /* Flawfinder: ignore */ 3354 char line_buffer[256]; /* Flawfinder: ignore */
3359 S32 i; 3355 S32 i;
3360 S32 cur_line_pos = 0; 3356 S32 cur_line_pos = 0;
@@ -3369,13 +3365,13 @@ void LLMessageSystem::dumpPacketToLog()
3369 if (cur_line_pos >= 16) 3365 if (cur_line_pos >= 16)
3370 { 3366 {
3371 cur_line_pos = 0; 3367 cur_line_pos = 0;
3372 llwarns << "PD:" << cur_line << "PD:" << line_buffer << llendl; 3368 LL_WARNS("Messaging") << "PD:" << cur_line << "PD:" << line_buffer << llendl;
3373 cur_line++; 3369 cur_line++;
3374 } 3370 }
3375 } 3371 }
3376 if (cur_line_pos) 3372 if (cur_line_pos)
3377 { 3373 {
3378 llwarns << "PD:" << cur_line << "PD:" << line_buffer << llendl; 3374 LL_WARNS("Messaging") << "PD:" << cur_line << "PD:" << line_buffer << llendl;
3379 } 3375 }
3380} 3376}
3381 3377
@@ -3919,7 +3915,7 @@ void LLMessageSystem::getStringFast(const char *block, const char *var,
3919{ 3915{
3920 if(buffer_size <= 0) 3916 if(buffer_size <= 0)
3921 { 3917 {
3922 llwarns << "buffer_size <= 0" << llendl; 3918 LL_WARNS("Messaging") << "buffer_size <= 0" << llendl;
3923 } 3919 }
3924 mMessageReader->getString(block, var, buffer_size, s, blocknum); 3920 mMessageReader->getString(block, var, buffer_size, s, blocknum);
3925} 3921}
diff --git a/linden/indra/llmessage/net.cpp b/linden/indra/llmessage/net.cpp
index 40c19a7..aa095a1 100644
--- a/linden/indra/llmessage/net.cpp
+++ b/linden/indra/llmessage/net.cpp
@@ -185,7 +185,7 @@ S32 start_net(S32& socket_out, int& nPort)
185 { 185 {
186 S32 err = WSAGetLastError(); 186 S32 err = WSAGetLastError();
187 WSACleanup(); 187 WSACleanup();
188 llwarns << "Windows Sockets initialization failed, err " << err << llendl; 188 LL_WARNS("AppInit") << "Windows Sockets initialization failed, err " << err << LL_ENDL;
189 return 1; 189 return 1;
190 } 190 }
191 191
@@ -195,7 +195,7 @@ S32 start_net(S32& socket_out, int& nPort)
195 { 195 {
196 S32 err = WSAGetLastError(); 196 S32 err = WSAGetLastError();
197 WSACleanup(); 197 WSACleanup();
198 llwarns << "socket() failed, err " << err << llendl; 198 LL_WARNS("AppInit") << "socket() failed, err " << err << LL_ENDL;
199 return 2; 199 return 2;
200 } 200 }
201 201
@@ -205,7 +205,7 @@ S32 start_net(S32& socket_out, int& nPort)
205 stLclAddr.sin_port = htons(nPort); 205 stLclAddr.sin_port = htons(nPort);
206 206
207 S32 attempt_port = nPort; 207 S32 attempt_port = nPort;
208 llinfos << "attempting to connect on port " << attempt_port << llendl; 208 LL_DEBUGS("AppInit") << "attempting to connect on port " << attempt_port << LL_ENDL;
209 nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr)); 209 nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr));
210 210
211 if (nRet == SOCKET_ERROR) 211 if (nRet == SOCKET_ERROR)
@@ -219,7 +219,7 @@ S32 start_net(S32& socket_out, int& nPort)
219 attempt_port++) 219 attempt_port++)
220 { 220 {
221 stLclAddr.sin_port = htons(attempt_port); 221 stLclAddr.sin_port = htons(attempt_port);
222 llinfos << "trying port " << attempt_port << llendl; 222 LL_DEBUGS("AppInit") << "trying port " << attempt_port << LL_ENDL;
223 nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr)); 223 nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr));
224 224
225 if (!(nRet == SOCKET_ERROR && 225 if (!(nRet == SOCKET_ERROR &&
@@ -231,7 +231,7 @@ S32 start_net(S32& socket_out, int& nPort)
231 231
232 if (nRet == SOCKET_ERROR) 232 if (nRet == SOCKET_ERROR)
233 { 233 {
234 llwarns << "startNet() : Couldn't find available network port." << llendl; 234 LL_WARNS("AppInit") << "startNet() : Couldn't find available network port." << LL_ENDL;
235 // Fail gracefully here in release 235 // Fail gracefully here in release
236 return 3; 236 return 3;
237 } 237 }
@@ -239,7 +239,7 @@ S32 start_net(S32& socket_out, int& nPort)
239 else 239 else
240 // Some other socket error 240 // Some other socket error
241 { 241 {
242 llwarns << llformat("bind() port: %d failed, Err: %d\n", nPort, WSAGetLastError()) << llendl; 242 LL_WARNS("AppInit") << llformat("bind() port: %d failed, Err: %d\n", nPort, WSAGetLastError()) << LL_ENDL;
243 // Fail gracefully in release. 243 // Fail gracefully in release.
244 return 4; 244 return 4;
245 } 245 }
@@ -250,7 +250,7 @@ S32 start_net(S32& socket_out, int& nPort)
250 getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size); 250 getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size);
251 attempt_port = ntohs(socket_address.sin_port); 251 attempt_port = ntohs(socket_address.sin_port);
252 252
253 llinfos << "connected on port " << attempt_port << llendl; 253 LL_INFOS("AppInit") << "connected on port " << attempt_port << LL_ENDL;
254 nPort = attempt_port; 254 nPort = attempt_port;
255 255
256 // Set socket to be non-blocking 256 // Set socket to be non-blocking
@@ -266,20 +266,20 @@ S32 start_net(S32& socket_out, int& nPort)
266 nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size); 266 nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size);
267 if (nRet) 267 if (nRet)
268 { 268 {
269 llinfos << "Can't set receive buffer size!" << llendl; 269 LL_INFOS("AppInit") << "Can't set receive buffer size!" << LL_ENDL;
270 } 270 }
271 271
272 nRet = setsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, buff_size); 272 nRet = setsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, buff_size);
273 if (nRet) 273 if (nRet)
274 { 274 {
275 llinfos << "Can't set send buffer size!" << llendl; 275 LL_INFOS("AppInit") << "Can't set send buffer size!" << LL_ENDL;
276 } 276 }
277 277
278 getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, &buff_size); 278 getsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, &buff_size);
279 getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, &buff_size); 279 getsockopt(hSocket, SOL_SOCKET, SO_SNDBUF, (char *)&snd_size, &buff_size);
280 280
281 llinfos << "startNet - receive buffer size : " << rec_size << llendl; 281 LL_DEBUGS("AppInit") << "startNet - receive buffer size : " << rec_size << LL_ENDL;
282 llinfos << "startNet - send buffer size : " << snd_size << llendl; 282 LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL;
283 283
284 // Setup a destination address 284 // Setup a destination address
285 char achMCAddr[MAXADDRSTR] = " "; /* Flawfinder: ignore */ 285 char achMCAddr[MAXADDRSTR] = " "; /* Flawfinder: ignore */
diff --git a/linden/indra/llrender/files.lst b/linden/indra/llrender/files.lst
index 3ada47b..5dc9579 100644
--- a/linden/indra/llrender/files.lst
+++ b/linden/indra/llrender/files.lst
@@ -1,7 +1,7 @@
1llrender/llfont.cpp 1llrender/llfont.cpp
2llrender/llfontgl.cpp 2llrender/llfontgl.cpp
3llrender/llgldbg.cpp 3llrender/llgldbg.cpp
4llrender/llglimmediate.cpp 4llrender/llrender.cpp
5llrender/llimagegl.cpp 5llrender/llimagegl.cpp
6llrender/llrendertarget.cpp 6llrender/llrendertarget.cpp
7llrender/llvertexbuffer.cpp 7llrender/llvertexbuffer.cpp
diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp
index 938dd73..253bf50 100644
--- a/linden/indra/llrender/llfontgl.cpp
+++ b/linden/indra/llrender/llfontgl.cpp
@@ -36,7 +36,7 @@
36#include "llfont.h" 36#include "llfont.h"
37#include "llfontgl.h" 37#include "llfontgl.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v4color.h" 40#include "v4color.h"
41#include "llstl.h" 41#include "llstl.h"
42 42
@@ -56,6 +56,7 @@ LLFontGL* LLFontGL::sSansSerif = NULL;
56LLFontGL* LLFontGL::sSansSerifBig = NULL; 56LLFontGL* LLFontGL::sSansSerifBig = NULL;
57LLFontGL* LLFontGL::sSansSerifHuge = NULL; 57LLFontGL* LLFontGL::sSansSerifHuge = NULL;
58LLFontGL* LLFontGL::sSansSerifBold = NULL; 58LLFontGL* LLFontGL::sSansSerifBold = NULL;
59LLFontList* LLFontGL::sMonospaceFallback = NULL;
59LLFontList* LLFontGL::sSSFallback = NULL; 60LLFontList* LLFontGL::sSSFallback = NULL;
60LLFontList* LLFontGL::sSSSmallFallback = NULL; 61LLFontList* LLFontGL::sSSSmallFallback = NULL;
61LLFontList* LLFontGL::sSSBigFallback = NULL; 62LLFontList* LLFontGL::sSSBigFallback = NULL;
@@ -240,7 +241,7 @@ bool LLFontGL::loadFaceFallback(LLFontList *fontlistp, const LLString& fontname,
240 font_path = sys_path + *token_iter; 241 font_path = sys_path + *token_iter;
241 if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, TRUE)) 242 if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, TRUE))
242 { 243 {
243 llwarns << "Couldn't load font " << *token_iter << llendl; 244 LL_INFOS_ONCE("ViewerImages") << "Couldn't load font " << *token_iter << LL_ENDL;
244 delete fontp; 245 delete fontp;
245 fontp = NULL; 246 fontp = NULL;
246 } 247 }
@@ -267,7 +268,7 @@ bool LLFontGL::loadFace(LLFontGL *fontp, const LLString& fontname, const F32 poi
267 font_path = sys_path + fontname; 268 font_path = sys_path + fontname;
268 if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, FALSE)) 269 if (!fontp->loadFace(font_path, point_size, sVertDPI, sHorizDPI, 2, FALSE))
269 { 270 {
270 llwarns << "Couldn't load font " << fontname << llendl; 271 LL_WARNS("ViewerImages") << "Couldn't load font " << fontname << LL_ENDL;
271 return false; 272 return false;
272 } 273 }
273 } 274 }
@@ -279,12 +280,12 @@ bool LLFontGL::loadFace(LLFontGL *fontp, const LLString& fontname, const F32 poi
279 280
280// static 281// static
281BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale, 282BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
282 const LLString& monospace_file, F32 monospace_size, 283 const LLString& monospace_file, F32 monospace_size,
283 const LLString& sansserif_file, 284 const LLString& sansserif_file,
284 const LLString& sanserif_fallback_file, F32 ss_fallback_scale, 285 const LLString& sanserif_fallback_file, F32 ss_fallback_scale,
285 F32 small_size, F32 medium_size, F32 big_size, F32 huge_size, 286 F32 small_size, F32 medium_size, F32 big_size, F32 huge_size,
286 const LLString& sansserif_bold_file, F32 bold_size, 287 const LLString& sansserif_bold_file, F32 bold_size,
287 const LLString& app_dir) 288 const LLString& app_dir)
288{ 289{
289 BOOL failed = FALSE; 290 BOOL failed = FALSE;
290 sVertDPI = (F32)llfloor(screen_dpi * y_scale); 291 sVertDPI = (F32)llfloor(screen_dpi * y_scale);
@@ -306,7 +307,21 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
306 sMonospace->reset(); 307 sMonospace->reset();
307 } 308 }
308 309
309 failed |= !loadFace(sMonospace, monospace_file, monospace_size, NULL); 310 if (sMonospaceFallback)
311 {
312 delete sMonospaceFallback;
313 }
314 sMonospaceFallback = new LLFontList();
315 if (!loadFaceFallback(
316 sMonospaceFallback,
317 sanserif_fallback_file,
318 monospace_size * ss_fallback_scale))
319 {
320 delete sMonospaceFallback;
321 sMonospaceFallback = NULL;
322 }
323
324 failed |= !loadFace(sMonospace, monospace_file, monospace_size, sMonospaceFallback);
310 325
311 // 326 //
312 // Sans-serif fonts 327 // Sans-serif fonts
@@ -466,6 +481,9 @@ void LLFontGL::destroyDefaultFonts()
466 delete sSansSerifBold; 481 delete sSansSerifBold;
467 sSansSerifBold = NULL; 482 sSansSerifBold = NULL;
468 483
484 delete sMonospaceFallback;
485 sMonospaceFallback = NULL;
486
469 delete sSSHugeFallback; 487 delete sSSHugeFallback;
470 sSSHugeFallback = NULL; 488 sSSHugeFallback = NULL;
471 489
@@ -647,7 +665,8 @@ S32 LLFontGL::render(const LLWString &wstr,
647 665
648 mImageGLp->bind(0); 666 mImageGLp->bind(0);
649 667
650 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Not guaranteed to be set correctly 668 // Not guaranteed to be set correctly
669 gGL.setSceneBlendType(LLRender::BT_ALPHA);
651 670
652 cur_x = ((F32)x * sScaleX); 671 cur_x = ((F32)x * sScaleX);
653 cur_y = ((F32)y * sScaleY); 672 cur_y = ((F32)y * sScaleY);
diff --git a/linden/indra/llrender/llfontgl.h b/linden/indra/llrender/llfontgl.h
index 4df1063..01046af 100644
--- a/linden/indra/llrender/llfontgl.h
+++ b/linden/indra/llrender/llfontgl.h
@@ -228,6 +228,7 @@ public:
228 static LLString sAppDir; // For loading fonts 228 static LLString sAppDir; // For loading fonts
229 229
230 static LLFontGL* sMonospace; // medium 230 static LLFontGL* sMonospace; // medium
231 static LLFontList* sMonospaceFallback;
231 232
232 static LLFontGL* sSansSerifSmall; // small 233 static LLFontGL* sSansSerifSmall; // small
233 static LLFontList* sSSSmallFallback; 234 static LLFontList* sSSSmallFallback;
diff --git a/linden/indra/llrender/llglimmediate.cpp b/linden/indra/llrender/llglimmediate.cpp
index edc694a..17c2182 100644
--- a/linden/indra/llrender/llglimmediate.cpp
+++ b/linden/indra/llrender/llglimmediate.cpp
@@ -1,302 +1 @@
1/** #error This file has been renamed llrender.cpp
2 * @file llglimmediate.cpp
3 * @brief LLGLImmediate implementation
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "linden_common.h"
33
34#include "llglimmediate.h"
35#include "llvertexbuffer.h"
36
37LLGLImmediate gGL;
38
39bool LLGLImmediate::sClever = false;
40
41const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD;
42
43LLGLImmediate::LLGLImmediate()
44{
45 mCount = 0;
46 mMode = LLVertexBuffer::TRIANGLES;
47 mBuffer = new LLVertexBuffer(immediate_mask, 0);
48 mBuffer->allocateBuffer(4096, 0, TRUE);
49 mBuffer->getVertexStrider(mVerticesp);
50 mBuffer->getTexCoordStrider(mTexcoordsp);
51 mBuffer->getColorStrider(mColorsp);
52}
53
54void LLGLImmediate::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z)
55{
56 flush();
57 glTranslatef(x,y,z);
58}
59
60void LLGLImmediate::pushMatrix()
61{
62 flush();
63 glPushMatrix();
64}
65
66void LLGLImmediate::popMatrix()
67{
68 flush();
69 glPopMatrix();
70}
71
72void LLGLImmediate::blendFunc(GLenum sfactor, GLenum dfactor)
73{
74 flush();
75 glBlendFunc(sfactor, dfactor);
76}
77
78void LLGLImmediate::begin(const GLuint& mode)
79{
80 if (sClever)
81 {
82 if (mode != mMode)
83 {
84 if (mMode == LLVertexBuffer::QUADS ||
85 mMode == LLVertexBuffer::LINES ||
86 mMode == LLVertexBuffer::TRIANGLES ||
87 mMode == LLVertexBuffer::POINTS)
88 {
89 flush();
90 }
91 else if (mCount != 0)
92 {
93 llerrs << "gGL.begin() called redundantly." << llendl;
94 }
95
96 mMode = mode;
97 }
98 }
99 else
100 {
101 glBegin(LLVertexBuffer::sGLMode[mode]);
102 }
103}
104
105void LLGLImmediate::end()
106{
107 if (sClever)
108 {
109 if (mCount == 0)
110 {
111 return;
112 //IMM_ERRS << "GL begin and end called with no vertices specified." << llendl;
113 }
114
115 if ((mMode != LLVertexBuffer::QUADS &&
116 mMode != LLVertexBuffer::LINES &&
117 mMode != LLVertexBuffer::TRIANGLES &&
118 mMode != LLVertexBuffer::POINTS) ||
119 mCount > 2048)
120 {
121 flush();
122 }
123 }
124 else
125 {
126 glEnd();
127 }
128}
129
130void LLGLImmediate::flush()
131{
132 if (sClever)
133 {
134 if (mCount > 0)
135 {
136#if 0
137 if (!glIsEnabled(GL_VERTEX_ARRAY))
138 {
139 llerrs << "foo 1" << llendl;
140 }
141
142 if (!glIsEnabled(GL_COLOR_ARRAY))
143 {
144 llerrs << "foo 2" << llendl;
145 }
146
147 if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY))
148 {
149 llerrs << "foo 3" << llendl;
150 }
151
152 if (glIsEnabled(GL_NORMAL_ARRAY))
153 {
154 llerrs << "foo 7" << llendl;
155 }
156
157 GLvoid* pointer;
158
159 glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer);
160 if (pointer != &(mBuffer[0].v))
161 {
162 llerrs << "foo 4" << llendl;
163 }
164
165 glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer);
166 if (pointer != &(mBuffer[0].c))
167 {
168 llerrs << "foo 5" << llendl;
169 }
170
171 glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer);
172 if (pointer != &(mBuffer[0].uv))
173 {
174 llerrs << "foo 6" << llendl;
175 }
176#endif
177
178 mBuffer->setBuffer(immediate_mask);
179 mBuffer->drawArrays(mMode, 0, mCount);
180
181 mVerticesp[0] = mVerticesp[mCount];
182 mTexcoordsp[0] = mTexcoordsp[mCount];
183 mColorsp[0] = mColorsp[mCount];
184 mCount = 0;
185 }
186 }
187}
188
189void LLGLImmediate::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
190{
191 if (sClever)
192 {
193 if (mCount >= 4096)
194 {
195 // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl;
196 return;
197 }
198
199 mVerticesp[mCount] = LLVector3(x,y,z);
200 mCount++;
201 if (mCount < 4096)
202 {
203 mVerticesp[mCount] = mVerticesp[mCount-1];
204 mColorsp[mCount] = mColorsp[mCount-1];
205 mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
206 }
207 }
208 else
209 {
210 glVertex3f(x,y,z);
211 }
212}
213
214void LLGLImmediate::vertex2i(const GLint& x, const GLint& y)
215{
216 vertex3f((GLfloat) x, (GLfloat) y, 0);
217}
218
219void LLGLImmediate::vertex2f(const GLfloat& x, const GLfloat& y)
220{
221 vertex3f(x,y,0);
222}
223
224void LLGLImmediate::vertex2fv(const GLfloat* v)
225{
226 vertex3f(v[0], v[1], 0);
227}
228
229void LLGLImmediate::vertex3fv(const GLfloat* v)
230{
231 vertex3f(v[0], v[1], v[2]);
232}
233
234void LLGLImmediate::texCoord2f(const GLfloat& x, const GLfloat& y)
235{
236 if (sClever)
237 {
238 mTexcoordsp[mCount] = LLVector2(x,y);
239 }
240 else
241 {
242 glTexCoord2f(x,y);
243 }
244}
245
246void LLGLImmediate::texCoord2i(const GLint& x, const GLint& y)
247{
248 texCoord2f((GLfloat) x, (GLfloat) y);
249}
250
251void LLGLImmediate::texCoord2fv(const GLfloat* tc)
252{
253 texCoord2f(tc[0], tc[1]);
254}
255
256void LLGLImmediate::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a)
257{
258 if (sClever)
259 {
260 mColorsp[mCount] = LLColor4U(r,g,b,a);
261 }
262 else
263 {
264 glColor4ub(r,g,b,a);
265 }
266}
267
268void LLGLImmediate::color4ubv(const GLubyte* c)
269{
270 color4ub(c[0], c[1], c[2], c[3]);
271}
272
273void LLGLImmediate::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a)
274{
275 color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255),
276 (GLubyte) (llclamp(g, 0.f, 1.f)*255),
277 (GLubyte) (llclamp(b, 0.f, 1.f)*255),
278 (GLubyte) (llclamp(a, 0.f, 1.f)*255));
279}
280
281void LLGLImmediate::color4fv(const GLfloat* c)
282{
283 color4f(c[0],c[1],c[2],c[3]);
284}
285
286void LLGLImmediate::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b)
287{
288 color4f(r,g,b,1);
289}
290
291void LLGLImmediate::color3fv(const GLfloat* c)
292{
293 color4f(c[0],c[1],c[2],1);
294}
295
296void LLGLImmediate::setClever(bool do_clever)
297{
298 llassert(mCount == 0);
299
300 sClever = do_clever;
301}
302
diff --git a/linden/indra/llrender/llglimmediate.h b/linden/indra/llrender/llglimmediate.h
index e0cddff..4a7a0eb 100644
--- a/linden/indra/llrender/llglimmediate.h
+++ b/linden/indra/llrender/llglimmediate.h
@@ -1,106 +1 @@
1/** #error This file has been renamed llrender.h
2 * @file llglimmediate.h
3 * @brief LLGLImmediate definition
4 *
5 * This class acts as a wrapper for OpenGL immediate calls concerning glBegin and glEnd.
6 * The goal of this class is to minimize the number of api calls due to legacy rendering
7 * code, and to define an interface for a multiple rendering API abstraction of the UI
8 * rendering.
9 *
10 * $LicenseInfo:firstyear=2001&license=viewergpl$
11 *
12 * Copyright (c) 2001-2008, Linden Research, Inc.
13 *
14 * Second Life Viewer Source Code
15 * The source code in this file ("Source Code") is provided by Linden Lab
16 * to you under the terms of the GNU General Public License, version 2.0
17 * ("GPL"), unless you have obtained a separate licensing agreement
18 * ("Other License"), formally executed by you and Linden Lab. Terms of
19 * the GPL can be found in doc/GPL-license.txt in this distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
21 *
22 * There are special exceptions to the terms and conditions of the GPL as
23 * it is applied to this Source Code. View the full text of the exception
24 * in the file doc/FLOSS-exception.txt in this software distribution, or
25 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
26 *
27 * By copying, modifying or distributing this software, you acknowledge
28 * that you have read and understood your obligations described above,
29 * and agree to abide by those obligations.
30 *
31 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
32 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
33 * COMPLETENESS OR PERFORMANCE.
34 * $/LicenseInfo$
35 */
36
37#ifndef LL_LLGLIMMEDIATE_H
38#define LL_LLGLIMMEDIATE_H
39
40#include "stdtypes.h"
41#include "llgltypes.h"
42#include "llglheaders.h"
43#include "llvertexbuffer.h"
44
45class LLGLImmediate
46{
47public:
48 LLGLImmediate();
49
50 void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z);
51 void pushMatrix();
52 void popMatrix();
53 void blendFunc(GLenum sfactor, GLenum dfactor);
54 void flush();
55
56 void begin(const GLuint& mode);
57 void end();
58 void vertex2i(const GLint& x, const GLint& y);
59 void vertex2f(const GLfloat& x, const GLfloat& y);
60 void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z);
61 void vertex2fv(const GLfloat* v);
62 void vertex3fv(const GLfloat* v);
63
64 void texCoord2i(const GLint& x, const GLint& y);
65 void texCoord2f(const GLfloat& x, const GLfloat& y);
66 void texCoord2fv(const GLfloat* tc);
67
68 void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a);
69 void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a);
70 void color4fv(const GLfloat* c);
71 void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b);
72 void color3fv(const GLfloat* c);
73 void color4ubv(const GLubyte* c);
74
75 // switch clever mode GL immediate rendering on or off. Setting to true builds
76 // client arrays manually, setting to false passes through the GL immediate mode
77 // commands to the GL implementation. Controllable by the RenderUseCleverUI
78 // debug setting.
79 // *NOTE: I have measured that this has about a 9% performance cost (0.6ms) for the
80 // Render/UI fasttimer vs the old #if CLEVER compile time switch. Dave Parks and I
81 // agreed that this was acceptable at the time due to it enabling better regression
82 // testing for QA.
83 // -Brad
84 void setClever(bool do_clever);
85
86 typedef struct Vertex
87 {
88 GLfloat v[3];
89 GLubyte c[4];
90 GLfloat uv[2];
91 };
92
93private:
94 static bool sClever;
95
96 U32 mCount;
97 U32 mMode;
98 LLPointer<LLVertexBuffer> mBuffer;
99 LLStrider<LLVector3> mVerticesp;
100 LLStrider<LLVector2> mTexcoordsp;
101 LLStrider<LLColor4U> mColorsp;
102};
103
104extern LLGLImmediate gGL;
105
106#endif
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index 92d8eb4..fd934b9 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -41,7 +41,7 @@
41 41
42#include "llmath.h" 42#include "llmath.h"
43#include "llgl.h" 43#include "llgl.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46 46
47//---------------------------------------------------------------------------- 47//----------------------------------------------------------------------------
@@ -130,13 +130,13 @@ void LLImageGL::bindExternalTexture(LLGLuint gl_name, S32 stage, LLGLenum bind_t
130 gGL.flush(); 130 gGL.flush();
131 if (stage > 0) 131 if (stage > 0)
132 { 132 {
133 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 133 gGL.getTexUnit(stage)->activate();
134 } 134 }
135 glBindTexture(bind_target, gl_name); 135 glBindTexture(bind_target, gl_name);
136 sCurrentBoundTextures[stage] = gl_name; 136 sCurrentBoundTextures[stage] = gl_name;
137 if (stage > 0) 137 if (stage > 0)
138 { 138 {
139 glActiveTextureARB(GL_TEXTURE0_ARB); 139 gGL.getTexUnit(0)->activate();
140 } 140 }
141} 141}
142 142
@@ -149,9 +149,9 @@ void LLImageGL::unbindTexture(S32 stage, LLGLenum bind_target)
149 gGL.flush(); 149 gGL.flush();
150 if (stage > 0) 150 if (stage > 0)
151 { 151 {
152 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 152 gGL.getTexUnit(stage)->activate();
153 glBindTexture(GL_TEXTURE_2D, 0); 153 glBindTexture(GL_TEXTURE_2D, 0);
154 glActiveTextureARB(GL_TEXTURE0_ARB); 154 gGL.getTexUnit(0)->activate();
155 } 155 }
156 else 156 else
157 { 157 {
@@ -304,7 +304,9 @@ void LLImageGL::init(BOOL usemipmaps)
304 mIsResident = 0; 304 mIsResident = 0;
305 mClampS = FALSE; 305 mClampS = FALSE;
306 mClampT = FALSE; 306 mClampT = FALSE;
307 mMipFilterNearest = FALSE; 307 mClampR = FALSE;
308 mMagFilterNearest = FALSE;
309 mMinFilterNearest = FALSE;
308 mWidth = 0; 310 mWidth = 0;
309 mHeight = 0; 311 mHeight = 0;
310 mComponents = 0; 312 mComponents = 0;
@@ -439,7 +441,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
439 gGL.flush(); 441 gGL.flush();
440 if (stage > 0) 442 if (stage > 0)
441 { 443 {
442 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 444 gGL.getTexUnit(stage)->activate();
443 } 445 }
444 446
445 glBindTexture(mBindTarget, mTexName); 447 glBindTexture(mBindTarget, mTexName);
@@ -448,7 +450,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
448 450
449 if (stage > 0) 451 if (stage > 0)
450 { 452 {
451 glActiveTextureARB(GL_TEXTURE0_ARB); 453 gGL.getTexUnit(0)->activate();
452 } 454 }
453 455
454 if (mLastBindTime != sLastFrameTime) 456 if (mLastBindTime != sLastFrameTime)
@@ -466,12 +468,12 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
466 gGL.flush(); 468 gGL.flush();
467 if (stage > 0) 469 if (stage > 0)
468 { 470 {
469 glActiveTextureARB(GL_TEXTURE0_ARB+stage); 471 gGL.getTexUnit(stage)->activate();
470 } 472 }
471 glBindTexture(mBindTarget, 0); 473 glBindTexture(mBindTarget, 0);
472 if (stage > 0) 474 if (stage > 0)
473 { 475 {
474 glActiveTextureARB(GL_TEXTURE0_ARB+stage); 476 gGL.getTexUnit(0)->activate();
475 } 477 }
476 sCurrentBoundTextures[stage] = 0; 478 sCurrentBoundTextures[stage] = 0;
477 return FALSE; 479 return FALSE;
@@ -628,7 +630,7 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
628 { 630 {
629 S32 bytes = w * h * mComponents; 631 S32 bytes = w * h * mComponents;
630 llassert(prev_mip_data); 632 llassert(prev_mip_data);
631 llassert(prev_mip_size == bytes); 633 llassert(prev_mip_size == bytes*4);
632 U8* new_data = new U8[bytes]; 634 U8* new_data = new U8[bytes];
633 llassert_always(new_data); 635 llassert_always(new_data);
634 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents); 636 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
@@ -941,7 +943,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
941 setImage(data_in, data_hasmips); 943 setImage(data_in, data_hasmips);
942 944
943 setClamp(mClampS, mClampT); 945 setClamp(mClampS, mClampT);
944 setMipFilterNearest(mMipFilterNearest); 946 setMipFilterNearest(mMagFilterNearest);
945 947
946 // things will break if we don't unbind after creation 948 // things will break if we don't unbind after creation
947 unbindTexture(0, mBindTarget); 949 unbindTexture(0, mBindTarget);
@@ -1044,8 +1046,23 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1044 1046
1045 S32 gl_discard = discard_level - mCurrentDiscardLevel; 1047 S32 gl_discard = discard_level - mCurrentDiscardLevel;
1046 1048
1047 llverify(bindTextureInternal(0)); 1049 //explicitly unbind texture
1048 1050 LLImageGL::unbindTexture(0, mTarget);
1051 llverify(bindTextureInternal(0));
1052
1053 if (gDebugGL)
1054 {
1055 if (mTarget == GL_TEXTURE_2D)
1056 {
1057 GLint texname;
1058 glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname);
1059 if (texname != mTexName)
1060 {
1061 llerrs << "Invalid texture bound!" << llendl;
1062 }
1063 }
1064 }
1065
1049 LLGLint glwidth = 0; 1066 LLGLint glwidth = 0;
1050 glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth); 1067 glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth);
1051 if (glwidth == 0) 1068 if (glwidth == 0)
@@ -1067,40 +1084,63 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1067 llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl; 1084 llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl;
1068 } 1085 }
1069 1086
1070 BOOL return_result = TRUE ;
1071 LLGLint is_compressed = 0; 1087 LLGLint is_compressed = 0;
1072 if (compressed_ok) 1088 if (compressed_ok)
1073 { 1089 {
1074 glGetTexLevelParameteriv(mTarget, is_compressed, GL_TEXTURE_COMPRESSED, (GLint*)&is_compressed); 1090 glGetTexLevelParameteriv(mTarget, is_compressed, GL_TEXTURE_COMPRESSED, (GLint*)&is_compressed);
1075 } 1091 }
1092
1093 //-----------------------------------------------------------------------------------------------
1094 GLenum error ;
1095 while((error = glGetError()) != GL_NO_ERROR)
1096 {
1097 llwarns << "GL Error happens before reading back texture. Error code: " << error << llendl ;
1098 }
1099 //-----------------------------------------------------------------------------------------------
1100
1076 if (is_compressed) 1101 if (is_compressed)
1077 { 1102 {
1078 LLGLint glbytes; 1103 LLGLint glbytes;
1079 glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, (GLint*)&glbytes); 1104 glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, (GLint*)&glbytes);
1080 imageraw->allocateDataSize(width, height, ncomponents, glbytes); 1105 if(!imageraw->allocateDataSize(width, height, ncomponents, glbytes))
1081 glGetCompressedTexImageARB(mTarget, gl_discard, (GLvoid*)(imageraw->getData()));
1082 if(glGetError() != GL_NO_ERROR)
1083 { 1106 {
1084 llwarns << "Error happens when reading back the compressed texture image." << llendl ; 1107 llwarns << "Memory allocation failed for reading back texture. Size is: " << glbytes << llendl ;
1085 imageraw->deleteData() ; 1108 llwarns << "width: " << width << "height: " << height << "components: " << ncomponents << llendl ;
1086 return_result = FALSE ; 1109 return FALSE ;
1087 } 1110 }
1088 stop_glerror(); 1111
1112 glGetCompressedTexImageARB(mTarget, gl_discard, (GLvoid*)(imageraw->getData()));
1113 //stop_glerror();
1089 } 1114 }
1090 else 1115 else
1091 { 1116 {
1092 imageraw->allocateDataSize(width, height, ncomponents); 1117 if(!imageraw->allocateDataSize(width, height, ncomponents))
1093 glGetTexImage(GL_TEXTURE_2D, gl_discard, mFormatPrimary, mFormatType, (GLvoid*)(imageraw->getData()));
1094 if(glGetError() != GL_NO_ERROR)
1095 { 1118 {
1096 llwarns << "Error happens when reading back the texture image." << llendl ; 1119 llwarns << "Memory allocation failed for reading back texture." << llendl ;
1097 imageraw->deleteData() ; 1120 llwarns << "width: " << width << "height: " << height << "components: " << ncomponents << llendl ;
1098 return_result = FALSE ; 1121 return FALSE ;
1099 } 1122 }
1100 stop_glerror(); 1123
1124 glGetTexImage(GL_TEXTURE_2D, gl_discard, mFormatPrimary, mFormatType, (GLvoid*)(imageraw->getData()));
1125 //stop_glerror();
1101 } 1126 }
1102 1127
1103 return return_result ; 1128 //-----------------------------------------------------------------------------------------------
1129 if((error = glGetError()) != GL_NO_ERROR)
1130 {
1131 llwarns << "GL Error happens after reading back texture. Error code: " << error << llendl ;
1132 imageraw->deleteData() ;
1133
1134 while((error = glGetError()) != GL_NO_ERROR)
1135 {
1136 llwarns << "GL Error happens after reading back texture. Error code: " << error << llendl ;
1137 }
1138
1139 return FALSE ;
1140 }
1141 //-----------------------------------------------------------------------------------------------
1142
1143 return TRUE ;
1104} 1144}
1105 1145
1106void LLImageGL::destroyGLTexture() 1146void LLImageGL::destroyGLTexture()
@@ -1130,25 +1170,55 @@ void LLImageGL::destroyGLTexture()
1130 1170
1131//---------------------------------------------------------------------------- 1171//----------------------------------------------------------------------------
1132 1172
1133void LLImageGL::setClamp(BOOL clamps, BOOL clampt) 1173void LLImageGL::glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
1174{
1175 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
1176 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
1177 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
1178}
1179
1180void LLImageGL::glClamp (BOOL clamps, BOOL clampt)
1134{ 1181{
1135 mClampS = clamps;
1136 mClampT = clampt;
1137 if (mTexName != 0) 1182 if (mTexName != 0)
1138 { 1183 {
1139 glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT); 1184 glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
1140 glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT); 1185 glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT);
1141 } 1186 }
1142 stop_glerror();
1143} 1187}
1144 1188
1145void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest) 1189void LLImageGL::setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
1190{
1191 mClampS = clamps;
1192 mClampT = clampt;
1193 mClampR = clampr;
1194 glClampCubemap (clamps, clampt, clampr);
1195}
1196
1197void LLImageGL::setClamp(BOOL clamps, BOOL clampt)
1198{
1199 mClampS = clamps;
1200 mClampT = clampt;
1201 glClamp (clamps, clampt);
1202}
1203
1204void LLImageGL::overrideClamp (BOOL clamps, BOOL clampt)
1205{
1206 glClamp (clamps, clampt);
1207}
1208
1209void LLImageGL::restoreClamp (void)
1210{
1211 glClamp (mClampS, mClampT);
1212}
1213
1214void LLImageGL::setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest)
1146{ 1215{
1147 mMipFilterNearest = nearest; 1216 mMagFilterNearest = mag_nearest;
1217 mMinFilterNearest = min_nearest;
1148 1218
1149 if (mTexName != 0) 1219 if (mTexName != 0)
1150 { 1220 {
1151 if (min_nearest) 1221 if (mMinFilterNearest)
1152 { 1222 {
1153 glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 1223 glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1154 } 1224 }
@@ -1160,7 +1230,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
1160 { 1230 {
1161 glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 1231 glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1162 } 1232 }
1163 if (mMipFilterNearest) 1233 if (mMagFilterNearest)
1164 { 1234 {
1165 glTexParameteri(mBindTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1235 glTexParameteri(mBindTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1166 } 1236 }
@@ -1170,7 +1240,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
1170 } 1240 }
1171 if (gGLManager.mHasAnisotropic) 1241 if (gGLManager.mHasAnisotropic)
1172 { 1242 {
1173 if (sGlobalUseAnisotropic && !mMipFilterNearest) 1243 if (sGlobalUseAnisotropic && !mMagFilterNearest)
1174 { 1244 {
1175 F32 largest_anisotropy; 1245 F32 largest_anisotropy;
1176 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_anisotropy); 1246 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_anisotropy);
diff --git a/linden/indra/llrender/llimagegl.h b/linden/indra/llrender/llimagegl.h
index b386294..3f231ee 100644
--- a/linden/indra/llrender/llimagegl.h
+++ b/linden/indra/llrender/llimagegl.h
@@ -81,6 +81,10 @@ protected:
81 virtual ~LLImageGL(); 81 virtual ~LLImageGL();
82 BOOL bindTextureInternal(const S32 stage = 0) const; 82 BOOL bindTextureInternal(const S32 stage = 0) const;
83 83
84private:
85 void glClamp (BOOL clamps, BOOL clampt);
86 void glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
87
84public: 88public:
85 virtual void dump(); // debugging info to llinfos 89 virtual void dump(); // debugging info to llinfos
86 virtual BOOL bind(const S32 stage = 0) const; 90 virtual BOOL bind(const S32 stage = 0) const;
@@ -99,8 +103,11 @@ public:
99 BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok); 103 BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok);
100 void destroyGLTexture(); 104 void destroyGLTexture();
101 105
106 void setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
102 void setClamp(BOOL clamps, BOOL clampt); 107 void setClamp(BOOL clamps, BOOL clampt);
103 void setMipFilterNearest(BOOL nearest, BOOL min_nearest = FALSE); 108 void overrideClamp (BOOL clamps, BOOL clampt);
109 void restoreClamp (void);
110 void setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest = FALSE);
104 void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE); 111 void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE);
105 void dontDiscard() { mDontDiscard = 1; } 112 void dontDiscard() { mDontDiscard = 1; }
106 113
@@ -117,7 +124,8 @@ public:
117 124
118 BOOL getClampS() const { return mClampS; } 125 BOOL getClampS() const { return mClampS; }
119 BOOL getClampT() const { return mClampT; } 126 BOOL getClampT() const { return mClampT; }
120 BOOL getMipFilterNearest() const { return mMipFilterNearest; } 127 BOOL getClampR() const { return mClampR; }
128 BOOL getMipFilterNearest() const { return mMagFilterNearest; }
121 129
122 BOOL getHasGLTexture() const { return mTexName != 0; } 130 BOOL getHasGLTexture() const { return mTexName != 0; }
123 LLGLuint getTexName() const { return mTexName; } 131 LLGLuint getTexName() const { return mTexName; }
@@ -167,7 +175,9 @@ protected:
167 175
168 S8 mClampS; // Need to save clamp state 176 S8 mClampS; // Need to save clamp state
169 S8 mClampT; 177 S8 mClampT;
170 S8 mMipFilterNearest; // if TRUE, set magfilter to GL_NEAREST 178 S8 mClampR;
179 S8 mMagFilterNearest; // if TRUE, set magfilter to GL_NEAREST
180 S8 mMinFilterNearest; // if TRUE, set minfilter to GL_NEAREST
171 181
172 LLGLint mFormatInternal; // = GL internalformat 182 LLGLint mFormatInternal; // = GL internalformat
173 LLGLenum mFormatPrimary; // = GL format (pixel data format) 183 LLGLenum mFormatPrimary; // = GL format (pixel data format)
diff --git a/linden/indra/llrender/llrender.cpp b/linden/indra/llrender/llrender.cpp
new file mode 100644
index 0000000..e9c1227
--- /dev/null
+++ b/linden/indra/llrender/llrender.cpp
@@ -0,0 +1,704 @@
1/**
2 * @file llrender.cpp
3 * @brief LLRender implementation
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "linden_common.h"
33
34#include "llrender.h"
35#include "llvertexbuffer.h"
36
37LLRender gGL;
38
39static const U32 LL_NUM_TEXTURE_LAYERS = 8;
40
41static GLenum sGLCompareFunc[] =
42{
43 GL_NEVER,
44 GL_ALWAYS,
45 GL_LESS,
46 GL_LEQUAL,
47 GL_EQUAL,
48 GL_NOTEQUAL,
49 GL_GEQUAL,
50 GL_GREATER
51};
52
53const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD;
54
55static GLenum sGLBlendFactor[] =
56{
57 GL_ONE,
58 GL_ZERO,
59 GL_DST_COLOR,
60 GL_SRC_COLOR,
61 GL_ONE_MINUS_DST_COLOR,
62 GL_ONE_MINUS_SRC_COLOR,
63 GL_DST_ALPHA,
64 GL_SRC_ALPHA,
65 GL_ONE_MINUS_DST_ALPHA,
66 GL_ONE_MINUS_SRC_ALPHA
67};
68
69LLTexUnit::LLTexUnit(U32 index)
70: mIsEnabled(false), mCurrBlendType(TB_MULT),
71mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
72mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
73mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
74mCurrColorScale(1), mCurrAlphaScale(1)
75{
76 llassert_always(index < LL_NUM_TEXTURE_LAYERS);
77 mIndex = index;
78}
79
80U32 LLTexUnit::getIndex(void)
81{
82 return mIndex;
83}
84
85void LLTexUnit::enable(void)
86{
87 if (!mIsEnabled)
88 {
89 activate();
90 glEnable(GL_TEXTURE_2D);
91 mIsEnabled = true;
92 }
93}
94
95void LLTexUnit::disable(void)
96{
97 if (mIsEnabled)
98 {
99 activate();
100 glDisable(GL_TEXTURE_2D);
101 mIsEnabled = false;
102 }
103}
104
105void LLTexUnit::activate(void)
106{
107 //if (gGL.mCurrTextureUnitIndex != mIndex)
108 {
109 glActiveTextureARB(GL_TEXTURE0_ARB + mIndex);
110 gGL.mCurrTextureUnitIndex = mIndex;
111 }
112}
113
114// Useful for debugging that you've manually assigned a texture operation to the correct
115// texture unit based on the currently set active texture in opengl.
116void LLTexUnit::debugTextureUnit(void)
117{
118 GLint activeTexture;
119 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
120 if ((GL_TEXTURE0_ARB + mIndex) != activeTexture)
121 {
122 llerrs << "Incorrect Texture Unit! Expected: " << (activeTexture - GL_TEXTURE0_ARB) << " Actual: " << mIndex << llendl;
123 }
124}
125
126void LLTexUnit::bindTexture(const LLImageGL* texture)
127{
128 if (texture != NULL)
129 {
130 activate();
131 texture->bind(mIndex);
132 }
133}
134
135void LLTexUnit::unbindTexture(void)
136{
137 activate();
138 glBindTexture(GL_TEXTURE_2D, 0);
139}
140
141void LLTexUnit::setTextureBlendType(eTextureBlendType type)
142{
143 // Do nothing if it's already correctly set.
144 if (mCurrBlendType == type)
145 {
146 return;
147 }
148
149 activate();
150 mCurrBlendType = type;
151 S32 scale_amount = 1;
152 switch (type)
153 {
154 case TB_REPLACE:
155 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
156 break;
157 case TB_ADD:
158 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
159 break;
160 case TB_MULT:
161 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
162 break;
163 case TB_MULT_X2:
164 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
165 scale_amount = 2;
166 break;
167 case TB_ALPHA_BLEND:
168 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
169 break;
170 case TB_COMBINE:
171 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
172 break;
173 default:
174 llerrs << "Unknown Texture Blend Type: " << type << llendl;
175 break;
176 }
177 setColorScale(scale_amount);
178 setAlphaScale(1);
179}
180
181GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)
182{
183 switch(src)
184 {
185 // All four cases should return the same value.
186 case TBS_PREV_COLOR:
187 case TBS_PREV_ALPHA:
188 case TBS_ONE_MINUS_PREV_COLOR:
189 case TBS_ONE_MINUS_PREV_ALPHA:
190 return GL_PREVIOUS_ARB;
191
192 // All four cases should return the same value.
193 case TBS_TEX_COLOR:
194 case TBS_TEX_ALPHA:
195 case TBS_ONE_MINUS_TEX_COLOR:
196 case TBS_ONE_MINUS_TEX_ALPHA:
197 return GL_TEXTURE;
198
199 // All four cases should return the same value.
200 case TBS_VERT_COLOR:
201 case TBS_VERT_ALPHA:
202 case TBS_ONE_MINUS_VERT_COLOR:
203 case TBS_ONE_MINUS_VERT_ALPHA:
204 return GL_PRIMARY_COLOR_ARB;
205
206 // All four cases should return the same value.
207 case TBS_CONST_COLOR:
208 case TBS_CONST_ALPHA:
209 case TBS_ONE_MINUS_CONST_COLOR:
210 case TBS_ONE_MINUS_CONST_ALPHA:
211 return GL_CONSTANT_ARB;
212
213 default:
214 llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Vertex Color instead." << llendl;
215 return GL_PRIMARY_COLOR_ARB;
216 }
217}
218
219GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
220{
221 switch(src)
222 {
223 // All four cases should return the same value.
224 case TBS_PREV_COLOR:
225 case TBS_TEX_COLOR:
226 case TBS_VERT_COLOR:
227 case TBS_CONST_COLOR:
228 return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
229
230 // All four cases should return the same value.
231 case TBS_PREV_ALPHA:
232 case TBS_TEX_ALPHA:
233 case TBS_VERT_ALPHA:
234 case TBS_CONST_ALPHA:
235 return GL_SRC_ALPHA;
236
237 // All four cases should return the same value.
238 case TBS_ONE_MINUS_PREV_COLOR:
239 case TBS_ONE_MINUS_TEX_COLOR:
240 case TBS_ONE_MINUS_VERT_COLOR:
241 case TBS_ONE_MINUS_CONST_COLOR:
242 return (isAlpha) ? GL_ONE_MINUS_SRC_ALPHA : GL_ONE_MINUS_SRC_COLOR;
243
244 // All four cases should return the same value.
245 case TBS_ONE_MINUS_PREV_ALPHA:
246 case TBS_ONE_MINUS_TEX_ALPHA:
247 case TBS_ONE_MINUS_VERT_ALPHA:
248 case TBS_ONE_MINUS_CONST_ALPHA:
249 return GL_ONE_MINUS_SRC_ALPHA;
250
251 default:
252 llwarns << "Unknown eTextureBlendSrc: " << src << ". Using Source Color or Alpha instead." << llendl;
253 return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
254 }
255}
256
257void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
258{
259 activate();
260 if (mCurrBlendType != TB_COMBINE)
261 {
262 mCurrBlendType = TB_COMBINE;
263 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
264 }
265
266 // We want an early out, because this function does a LOT of stuff.
267 if ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2) )
268 || (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2) ))
269 {
270 return;
271 }
272
273 // Get the gl source enums according to the eTextureBlendSrc sources passed in
274 GLint source1 = getTextureSource(src1);
275 GLint source2 = getTextureSource(src2);
276 // Get the gl operand enums according to the eTextureBlendSrc sources passed in
277 GLint operand1 = getTextureSourceType(src1, isAlpha);
278 GLint operand2 = getTextureSourceType(src2, isAlpha);
279 // Default the scale amount to 1
280 S32 scale_amount = 1;
281 GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum;
282
283 if (isAlpha)
284 {
285 // Set enums to ALPHA ones
286 comb_enum = GL_COMBINE_ALPHA_ARB;
287 src0_enum = GL_SOURCE0_ALPHA_ARB;
288 src1_enum = GL_SOURCE1_ALPHA_ARB;
289 src2_enum = GL_SOURCE2_ALPHA_ARB;
290 operand0_enum = GL_OPERAND0_ALPHA_ARB;
291 operand1_enum = GL_OPERAND1_ALPHA_ARB;
292 operand2_enum = GL_OPERAND2_ALPHA_ARB;
293
294 // cache current combiner
295 mCurrAlphaOp = op;
296 mCurrAlphaSrc1 = src1;
297 mCurrAlphaSrc2 = src2;
298 }
299 else
300 {
301 // Set enums to ALPHA ones
302 comb_enum = GL_COMBINE_RGB_ARB;
303 src0_enum = GL_SOURCE0_RGB_ARB;
304 src1_enum = GL_SOURCE1_RGB_ARB;
305 src2_enum = GL_SOURCE2_RGB_ARB;
306 operand0_enum = GL_OPERAND0_RGB_ARB;
307 operand1_enum = GL_OPERAND1_RGB_ARB;
308 operand2_enum = GL_OPERAND2_RGB_ARB;
309
310 // cache current combiner
311 mCurrColorOp = op;
312 mCurrColorSrc1 = src1;
313 mCurrColorSrc2 = src2;
314 }
315
316 switch(op)
317 {
318 case TBO_REPLACE:
319 // Slightly special syntax (no second sources), just set all and return.
320 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
321 glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
322 glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
323 (isAlpha) ? setAlphaScale(1) : setColorScale(1);
324 return;
325
326 case TBO_MULT:
327 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
328 break;
329
330 case TBO_MULT_X2:
331 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
332 scale_amount = 2;
333 break;
334
335 case TBO_MULT_X4:
336 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
337 scale_amount = 4;
338 break;
339
340 case TBO_ADD:
341 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD);
342 break;
343
344 case TBO_ADD_SIGNED:
345 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB);
346 break;
347
348 case TBO_SUBTRACT:
349 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB);
350 break;
351
352 case TBO_LERP_VERT_ALPHA:
353 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
354 glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
355 glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
356 break;
357
358 case TBO_LERP_TEX_ALPHA:
359 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
360 glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE);
361 glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
362 break;
363
364 case TBO_LERP_PREV_ALPHA:
365 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
366 glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB);
367 glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
368 break;
369
370 case TBO_LERP_CONST_ALPHA:
371 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
372 glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB);
373 glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
374 break;
375
376 case TBO_LERP_VERT_COLOR:
377 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
378 glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
379 glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR);
380 break;
381
382 default:
383 llwarns << "Unknown eTextureBlendOp: " << op << ". Setting op to replace." << llendl;
384 // Slightly special syntax (no second sources), just set all and return.
385 glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
386 glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
387 glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
388 (isAlpha) ? setAlphaScale(1) : setColorScale(1);
389 return;
390 }
391
392 // Set sources, operands, and scale accordingly
393 glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
394 glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
395 glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2);
396 glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2);
397 (isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount);
398}
399
400void LLTexUnit::setColorScale(S32 scale)
401{
402 if (mCurrColorScale != scale)
403 {
404 mCurrColorScale = scale;
405 glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale );
406 }
407}
408
409void LLTexUnit::setAlphaScale(S32 scale)
410{
411 if (mCurrAlphaScale != scale)
412 {
413 mCurrAlphaScale = scale;
414 glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale );
415 }
416}
417
418LLRender::LLRender()
419{
420 mCount = 0;
421 mMode = LLVertexBuffer::TRIANGLES;
422 mBuffer = new LLVertexBuffer(immediate_mask, 0);
423 mBuffer->allocateBuffer(4096, 0, TRUE);
424 mBuffer->getVertexStrider(mVerticesp);
425 mBuffer->getTexCoordStrider(mTexcoordsp);
426 mBuffer->getColorStrider(mColorsp);
427
428 for (unsigned int i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
429 {
430 mTexUnits.push_back(new LLTexUnit(i));
431 }
432}
433
434LLRender::~LLRender()
435{
436 for (U32 i = 0; i < mTexUnits.size(); i++)
437 {
438 delete mTexUnits[i];
439 }
440}
441
442void LLRender::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z)
443{
444 flush();
445 glTranslatef(x,y,z);
446}
447
448void LLRender::pushMatrix()
449{
450 flush();
451 glPushMatrix();
452}
453
454void LLRender::popMatrix()
455{
456 flush();
457 glPopMatrix();
458}
459
460void LLRender::setColorMask(bool writeColor, bool writeAlpha)
461{
462 setColorMask(writeColor, writeColor, writeColor, writeAlpha);
463}
464
465void LLRender::setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha)
466{
467 flush();
468 glColorMask(writeColorR, writeColorG, writeColorB, writeAlpha);
469}
470
471void LLRender::setSceneBlendType(eBlendType type)
472{
473 flush();
474 switch (type)
475 {
476 case BT_ALPHA:
477 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
478 break;
479 case BT_ADD:
480 glBlendFunc(GL_ONE, GL_ONE);
481 break;
482 case BT_ADD_WITH_ALPHA:
483 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
484 break;
485 case BT_MULT:
486 glBlendFunc(GL_DST_COLOR, GL_ZERO);
487 break;
488 case BT_MULT_X2:
489 glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
490 break;
491 case BT_REPLACE:
492 glBlendFunc(GL_ONE, GL_ZERO);
493 break;
494 default:
495 llerrs << "Unknown Scene Blend Type: " << type << llendl;
496 break;
497 }
498}
499
500void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
501{
502 flush();
503 if (func == CF_DEFAULT)
504 {
505 glAlphaFunc(GL_GREATER, 0.01f);
506 }
507 else
508 {
509 glAlphaFunc(sGLCompareFunc[func], value);
510 }
511}
512
513void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
514{
515 flush();
516 glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
517}
518
519LLTexUnit* LLRender::getTexUnit(U32 index)
520{
521 if (index < mTexUnits.size())
522 {
523 return mTexUnits[index];
524 }
525 llerrs << "Non-existing texture unit layer requested: " << index << llendl;
526 return NULL;
527}
528
529void LLRender::begin(const GLuint& mode)
530{
531 if (mode != mMode)
532 {
533 if (mMode == LLVertexBuffer::QUADS ||
534 mMode == LLVertexBuffer::LINES ||
535 mMode == LLVertexBuffer::TRIANGLES ||
536 mMode == LLVertexBuffer::POINTS)
537 {
538 flush();
539 }
540 else if (mCount != 0)
541 {
542 llerrs << "gGL.begin() called redundantly." << llendl;
543 }
544
545 mMode = mode;
546 }
547}
548
549void LLRender::end()
550{
551 if (mCount == 0)
552 {
553 return;
554 //IMM_ERRS << "GL begin and end called with no vertices specified." << llendl;
555 }
556
557 if ((mMode != LLVertexBuffer::QUADS &&
558 mMode != LLVertexBuffer::LINES &&
559 mMode != LLVertexBuffer::TRIANGLES &&
560 mMode != LLVertexBuffer::POINTS) ||
561 mCount > 2048)
562 {
563 flush();
564 }
565}
566void LLRender::flush()
567{
568 if (mCount > 0)
569 {
570#if 0
571 if (!glIsEnabled(GL_VERTEX_ARRAY))
572 {
573 llerrs << "foo 1" << llendl;
574 }
575
576 if (!glIsEnabled(GL_COLOR_ARRAY))
577 {
578 llerrs << "foo 2" << llendl;
579 }
580
581 if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY))
582 {
583 llerrs << "foo 3" << llendl;
584 }
585
586 if (glIsEnabled(GL_NORMAL_ARRAY))
587 {
588 llerrs << "foo 7" << llendl;
589 }
590
591 GLvoid* pointer;
592
593 glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer);
594 if (pointer != &(mBuffer[0].v))
595 {
596 llerrs << "foo 4" << llendl;
597 }
598
599 glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer);
600 if (pointer != &(mBuffer[0].c))
601 {
602 llerrs << "foo 5" << llendl;
603 }
604
605 glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer);
606 if (pointer != &(mBuffer[0].uv))
607 {
608 llerrs << "foo 6" << llendl;
609 }
610#endif
611
612 mBuffer->setBuffer(immediate_mask);
613 mBuffer->drawArrays(mMode, 0, mCount);
614
615 mVerticesp[0] = mVerticesp[mCount];
616 mTexcoordsp[0] = mTexcoordsp[mCount];
617 mColorsp[0] = mColorsp[mCount];
618 mCount = 0;
619 }
620}
621void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
622{
623 if (mCount >= 4096)
624 {
625 // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl;
626 return;
627 }
628
629 mVerticesp[mCount] = LLVector3(x,y,z);
630 mCount++;
631 if (mCount < 4096)
632 {
633 mVerticesp[mCount] = mVerticesp[mCount-1];
634 mColorsp[mCount] = mColorsp[mCount-1];
635 mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
636 }
637}
638void LLRender::vertex2i(const GLint& x, const GLint& y)
639{
640 vertex3f((GLfloat) x, (GLfloat) y, 0);
641}
642
643void LLRender::vertex2f(const GLfloat& x, const GLfloat& y)
644{
645 vertex3f(x,y,0);
646}
647
648void LLRender::vertex2fv(const GLfloat* v)
649{
650 vertex3f(v[0], v[1], 0);
651}
652
653void LLRender::vertex3fv(const GLfloat* v)
654{
655 vertex3f(v[0], v[1], v[2]);
656}
657
658void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y)
659{
660 mTexcoordsp[mCount] = LLVector2(x,y);
661}
662
663void LLRender::texCoord2i(const GLint& x, const GLint& y)
664{
665 texCoord2f((GLfloat) x, (GLfloat) y);
666}
667
668void LLRender::texCoord2fv(const GLfloat* tc)
669{
670 texCoord2f(tc[0], tc[1]);
671}
672
673void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a)
674{
675 mColorsp[mCount] = LLColor4U(r,g,b,a);
676}
677void LLRender::color4ubv(const GLubyte* c)
678{
679 color4ub(c[0], c[1], c[2], c[3]);
680}
681
682void LLRender::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a)
683{
684 color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255),
685 (GLubyte) (llclamp(g, 0.f, 1.f)*255),
686 (GLubyte) (llclamp(b, 0.f, 1.f)*255),
687 (GLubyte) (llclamp(a, 0.f, 1.f)*255));
688}
689
690void LLRender::color4fv(const GLfloat* c)
691{
692 color4f(c[0],c[1],c[2],c[3]);
693}
694
695void LLRender::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b)
696{
697 color4f(r,g,b,1);
698}
699
700void LLRender::color3fv(const GLfloat* c)
701{
702 color4f(c[0],c[1],c[2],1);
703}
704
diff --git a/linden/indra/llrender/llrender.h b/linden/indra/llrender/llrender.h
new file mode 100644
index 0000000..03280fe
--- /dev/null
+++ b/linden/indra/llrender/llrender.h
@@ -0,0 +1,239 @@
1/**
2 * @file llrender.h
3 * @brief LLRender definition
4 *
5 * This class acts as a wrapper for OpenGL calls.
6 * The goal of this class is to minimize the number of api calls due to legacy rendering
7 * code, to define an interface for a multiple rendering API abstraction of the UI
8 * rendering, and to abstract out direct rendering calls in a way that is cleaner and easier to maintain.
9 *
10 * $LicenseInfo:firstyear=2001&license=viewergpl$
11 *
12 * Copyright (c) 2001-2008, Linden Research, Inc.
13 *
14 * Second Life Viewer Source Code
15 * The source code in this file ("Source Code") is provided by Linden Lab
16 * to you under the terms of the GNU General Public License, version 2.0
17 * ("GPL"), unless you have obtained a separate licensing agreement
18 * ("Other License"), formally executed by you and Linden Lab. Terms of
19 * the GPL can be found in doc/GPL-license.txt in this distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
21 *
22 * There are special exceptions to the terms and conditions of the GPL as
23 * it is applied to this Source Code. View the full text of the exception
24 * in the file doc/FLOSS-exception.txt in this software distribution, or
25 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
26 *
27 * By copying, modifying or distributing this software, you acknowledge
28 * that you have read and understood your obligations described above,
29 * and agree to abide by those obligations.
30 *
31 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
32 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
33 * COMPLETENESS OR PERFORMANCE.
34 * $/LicenseInfo$
35 */
36
37#ifndef LL_LLGLRENDER_H
38#define LL_LLGLRENDER_H
39
40#include "stdtypes.h"
41#include "llgltypes.h"
42#include "llglheaders.h"
43#include "llvertexbuffer.h"
44
45class LLTexUnit
46{
47public:
48 typedef enum
49 {
50 TB_REPLACE = 0,
51 TB_ADD,
52 TB_MULT,
53 TB_MULT_X2,
54 TB_ALPHA_BLEND,
55 TB_COMBINE // Doesn't need to be set directly, setTexture___Blend() set TB_COMBINE automatically
56 } eTextureBlendType;
57
58 typedef enum
59 {
60 TBO_REPLACE = 0, // Use Source 1
61 TBO_MULT, // Multiply: ( Source1 * Source2 )
62 TBO_MULT_X2, // Multiply then scale by 2: ( 2.0 * ( Source1 * Source2 ) )
63 TBO_MULT_X4, // Multiply then scale by 4: ( 4.0 * ( Source1 * Source2 ) )
64 TBO_ADD, // Add: ( Source1 + Source2 )
65 TBO_ADD_SIGNED, // Add then subtract 0.5: ( ( Source1 + Source2 ) - 0.5 )
66 TBO_SUBTRACT, // Subtract Source2 from Source1: ( Source1 - Source2 )
67 TBO_LERP_VERT_ALPHA, // Interpolate based on Vertex Alpha (VA): ( Source1 * VA + Source2 * (1-VA) )
68 TBO_LERP_TEX_ALPHA, // Interpolate based on Texture Alpha (TA): ( Source1 * TA + Source2 * (1-TA) )
69 TBO_LERP_PREV_ALPHA, // Interpolate based on Previous Alpha (PA): ( Source1 * PA + Source2 * (1-PA) )
70 TBO_LERP_CONST_ALPHA, // Interpolate based on Const Alpha (CA): ( Source1 * CA + Source2 * (1-CA) )
71 TBO_LERP_VERT_COLOR // Interpolate based on Vertex Col (VC): ( Source1 * VC + Source2 * (1-VC) )
72 // *Note* TBO_LERP_VERTEX_COLOR only works with setTextureColorBlend(),
73 // and falls back to TBO_LERP_VERTEX_ALPHA for setTextureAlphaBlend().
74 } eTextureBlendOp;
75
76 typedef enum
77 {
78 TBS_PREV_COLOR = 0, // Color from the previous texture stage
79 TBS_PREV_ALPHA,
80 TBS_ONE_MINUS_PREV_COLOR,
81 TBS_ONE_MINUS_PREV_ALPHA,
82 TBS_TEX_COLOR, // Color from the texture bound to this stage
83 TBS_TEX_ALPHA,
84 TBS_ONE_MINUS_TEX_COLOR,
85 TBS_ONE_MINUS_TEX_ALPHA,
86 TBS_VERT_COLOR, // The vertex color currently set
87 TBS_VERT_ALPHA,
88 TBS_ONE_MINUS_VERT_COLOR,
89 TBS_ONE_MINUS_VERT_ALPHA,
90 TBS_CONST_COLOR, // The constant color value currently set
91 TBS_CONST_ALPHA,
92 TBS_ONE_MINUS_CONST_COLOR,
93 TBS_ONE_MINUS_CONST_ALPHA
94 } eTextureBlendSrc;
95
96 LLTexUnit(U32 index);
97 U32 getIndex(void);
98
99 void enable(void);
100 void disable(void);
101 void activate(void);
102
103 void bindTexture(const LLImageGL* texture);
104 void unbindTexture(void);
105
106 void setTextureBlendType(eTextureBlendType type);
107
108 inline void setTextureColorBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_COLOR)
109 { setTextureCombiner(op, src1, src2, false); }
110
111 // NOTE: If *_COLOR enums are passed to src1 or src2, the corresponding *_ALPHA enum will be used instead.
112 inline void setTextureAlphaBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_ALPHA)
113 { setTextureCombiner(op, src1, src2, true); }
114
115private:
116 U32 mIndex;
117 bool mIsEnabled;
118 eTextureBlendType mCurrBlendType;
119 eTextureBlendOp mCurrColorOp;
120 eTextureBlendSrc mCurrColorSrc1;
121 eTextureBlendSrc mCurrColorSrc2;
122 eTextureBlendOp mCurrAlphaOp;
123 eTextureBlendSrc mCurrAlphaSrc1;
124 eTextureBlendSrc mCurrAlphaSrc2;
125 S32 mCurrColorScale;
126 S32 mCurrAlphaScale;
127
128 void debugTextureUnit(void);
129 void setColorScale(S32 scale);
130 void setAlphaScale(S32 scale);
131 GLint getTextureSource(eTextureBlendSrc src);
132 GLint getTextureSourceType(eTextureBlendSrc src, bool isAlpha = false);
133 void setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha = false);
134};
135
136class LLRender
137{
138 friend class LLTexUnit;
139public:
140 typedef enum
141 {
142 CF_NEVER = 0,
143 CF_ALWAYS,
144 CF_LESS,
145 CF_LESS_EQUAL,
146 CF_EQUAL,
147 CF_NOT_EQUAL,
148 CF_GREATER_EQUAL,
149 CF_GREATER,
150 CF_DEFAULT
151 } eCompareFunc;
152
153 typedef enum
154 {
155 BT_ALPHA = 0,
156 BT_ADD,
157 BT_ADD_WITH_ALPHA, // Additive blend modulated by the fragment's alpha.
158 BT_MULT,
159 BT_MULT_X2,
160 BT_REPLACE
161 } eBlendType;
162
163 typedef enum
164 {
165 BF_ONE = 0,
166 BF_ZERO,
167 BF_DEST_COLOR,
168 BF_SOURCE_COLOR,
169 BF_ONE_MINUS_DEST_COLOR,
170 BF_ONE_MINUS_SOURCE_COLOR,
171 BF_DEST_ALPHA,
172 BF_SOURCE_ALPHA,
173 BF_ONE_MINUS_DEST_ALPHA,
174 BF_ONE_MINUS_SOURCE_ALPHA
175 } eBlendFactor;
176
177 LLRender();
178 ~LLRender();
179
180 void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z);
181 void pushMatrix();
182 void popMatrix();
183
184 void flush();
185
186 void begin(const GLuint& mode);
187 void end();
188 void vertex2i(const GLint& x, const GLint& y);
189 void vertex2f(const GLfloat& x, const GLfloat& y);
190 void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z);
191 void vertex2fv(const GLfloat* v);
192 void vertex3fv(const GLfloat* v);
193
194 void texCoord2i(const GLint& x, const GLint& y);
195 void texCoord2f(const GLfloat& x, const GLfloat& y);
196 void texCoord2fv(const GLfloat* tc);
197
198 void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a);
199 void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a);
200 void color4fv(const GLfloat* c);
201 void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b);
202 void color3fv(const GLfloat* c);
203 void color4ubv(const GLubyte* c);
204
205 void setColorMask(bool writeColor, bool writeAlpha);
206 void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha);
207 void setSceneBlendType(eBlendType type);
208
209 void setAlphaRejectSettings(eCompareFunc func, F32 value = 0.01f);
210
211 void blendFunc(eBlendFactor sfactor, eBlendFactor dfactor);
212
213 LLTexUnit* getTexUnit(U32 index);
214
215 typedef struct Vertex
216 {
217 GLfloat v[3];
218 GLubyte c[4];
219 GLfloat uv[2];
220 };
221
222public:
223
224private:
225 U32 mCount;
226 U32 mMode;
227 U32 mCurrTextureUnitIndex;
228 LLPointer<LLVertexBuffer> mBuffer;
229 LLStrider<LLVector3> mVerticesp;
230 LLStrider<LLVector2> mTexcoordsp;
231 LLStrider<LLColor4U> mColorsp;
232 std::vector<LLTexUnit*> mTexUnits;
233};
234
235
236
237extern LLRender gGL;
238
239#endif
diff --git a/linden/indra/llrender/llrender.vcproj b/linden/indra/llrender/llrender.vcproj
index 2c6e2d2..d9144cb 100644
--- a/linden/indra/llrender/llrender.vcproj
+++ b/linden/indra/llrender/llrender.vcproj
@@ -165,7 +165,7 @@
165 RelativePath=".\llgldbg.cpp"> 165 RelativePath=".\llgldbg.cpp">
166 </File> 166 </File>
167 <File 167 <File
168 RelativePath=".\llglimmediate.cpp"> 168 RelativePath=".\llrender.cpp">
169 </File> 169 </File>
170 <File 170 <File
171 RelativePath=".\llimagegl.cpp"> 171 RelativePath=".\llimagegl.cpp">
@@ -206,7 +206,7 @@
206 RelativePath=".\llgldbg.h"> 206 RelativePath=".\llgldbg.h">
207 </File> 207 </File>
208 <File 208 <File
209 RelativePath=".\llglimmediate.h"> 209 RelativePath=".\llrender.h">
210 </File> 210 </File>
211 <File 211 <File
212 RelativePath=".\llimagegl.h"> 212 RelativePath=".\llimagegl.h">
diff --git a/linden/indra/llrender/llrender_vc8.vcproj b/linden/indra/llrender/llrender_vc8.vcproj
index 8c0f82a..2147cec 100644
--- a/linden/indra/llrender/llrender_vc8.vcproj
+++ b/linden/indra/llrender/llrender_vc8.vcproj
@@ -243,11 +243,11 @@
243 > 243 >
244 </File> 244 </File>
245 <File 245 <File
246 RelativePath=".\llglimmediate.cpp" 246 RelativePath=".\llimagegl.cpp"
247 > 247 >
248 </File> 248 </File>
249 <File 249 <File
250 RelativePath=".\llimagegl.cpp" 250 RelativePath=".\llrender.cpp"
251 > 251 >
252 </File> 252 </File>
253 <File 253 <File
@@ -297,11 +297,11 @@
297 > 297 >
298 </File> 298 </File>
299 <File 299 <File
300 RelativePath=".\llglimmediate.h" 300 RelativePath=".\llimagegl.h"
301 > 301 >
302 </File> 302 </File>
303 <File 303 <File
304 RelativePath=".\llimagegl.h" 304 RelativePath=".\llrender.h"
305 > 305 >
306 </File> 306 </File>
307 <File 307 <File
diff --git a/linden/indra/llrender/llrender_vc9.vcproj b/linden/indra/llrender/llrender_vc9.vcproj
index 08e3362..67385e6 100644
--- a/linden/indra/llrender/llrender_vc9.vcproj
+++ b/linden/indra/llrender/llrender_vc9.vcproj
@@ -244,7 +244,7 @@
244 > 244 >
245 </File> 245 </File>
246 <File 246 <File
247 RelativePath=".\llglimmediate.cpp" 247 RelativePath=".\llrender.cpp"
248 > 248 >
249 </File> 249 </File>
250 <File 250 <File
@@ -298,7 +298,7 @@
298 > 298 >
299 </File> 299 </File>
300 <File 300 <File
301 RelativePath=".\llglimmediate.h" 301 RelativePath=".\llrender.h"
302 > 302 >
303 </File> 303 </File>
304 <File 304 <File
diff --git a/linden/indra/llrender/llrendertarget.cpp b/linden/indra/llrender/llrendertarget.cpp
index e1f7703..708c582 100644
--- a/linden/indra/llrender/llrendertarget.cpp
+++ b/linden/indra/llrender/llrendertarget.cpp
@@ -32,17 +32,23 @@
32#include "linden_common.h" 32#include "linden_common.h"
33 33
34#include "llrendertarget.h" 34#include "llrendertarget.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36#include "llgl.h" 36#include "llgl.h"
37 37
38 38
39BOOL LLRenderTarget::sUseFBO = FALSE; 39BOOL LLRenderTarget::sUseFBO = FALSE;
40 40
41LLRenderTarget::LLRenderTarget() 41LLRenderTarget::LLRenderTarget() :
42 mResX(0),
43 mResY(0),
44 mTex(0),
45 mFBO(0),
46 mDepth(0),
47 mStencil(0),
48 mUseDepth(FALSE),
49 mRenderDepth(FALSE),
50 mUsage(GL_TEXTURE_2D)
42{ 51{
43 mResX = mResY = mTex = mFBO = mDepth = 0;
44 mUseDepth = FALSE;
45 mUsage = GL_TEXTURE_2D;
46} 52}
47 53
48LLRenderTarget::~LLRenderTarget() 54LLRenderTarget::~LLRenderTarget()
@@ -175,6 +181,7 @@ void LLRenderTarget::clear()
175 { 181 {
176 LLGLEnable scissor(GL_SCISSOR_TEST); 182 LLGLEnable scissor(GL_SCISSOR_TEST);
177 glScissor(0, 0, mResX, mResY); 183 glScissor(0, 0, mResX, mResY);
184 stop_glerror();
178 glClear(mask); 185 glClear(mask);
179 } 186 }
180} 187}
diff --git a/linden/indra/llrender/llvertexbuffer.cpp b/linden/indra/llrender/llvertexbuffer.cpp
index 4c663e2..073fcbf 100644
--- a/linden/indra/llrender/llvertexbuffer.cpp
+++ b/linden/indra/llrender/llvertexbuffer.cpp
@@ -38,7 +38,7 @@
38#include "llglheaders.h" 38#include "llglheaders.h"
39#include "llmemory.h" 39#include "llmemory.h"
40#include "llmemtype.h" 40#include "llmemtype.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43//============================================================================ 43//============================================================================
44 44
@@ -232,7 +232,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
232 llerrs << "Bad vertex buffer draw range: [" << first << ", " << first+count << "]" << llendl; 232 llerrs << "Bad vertex buffer draw range: [" << first << ", " << first+count << "]" << llendl;
233 } 233 }
234 234
235 if (mGLBuffer != sGLRenderBuffer) 235 if (mGLBuffer != sGLRenderBuffer || useVBOs() != sVBOActive)
236 { 236 {
237 llerrs << "Wrong vertex buffer bound." << llendl; 237 llerrs << "Wrong vertex buffer bound." << llendl;
238 } 238 }
@@ -768,11 +768,26 @@ U8* LLVertexBuffer::mapBuffer(S32 access)
768 sMapped = TRUE;*/ 768 sMapped = TRUE;*/
769 if (!mMappedData) 769 if (!mMappedData)
770 { 770 {
771 GLint buff;
772 glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
773 if (buff != mGLBuffer)
774 {
775 llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
776 }
777
778
771 llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl; 779 llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
772 } 780 }
773 781
774 if (!mMappedIndexData) 782 if (!mMappedIndexData)
775 { 783 {
784 GLint buff;
785 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
786 if (buff != mGLIndices)
787 {
788 llerrs << "Invalid GL index buffer bound: " << buff << llendl;
789 }
790
776 llerrs << "glMapBuffer returned NULL (no index data)" << llendl; 791 llerrs << "glMapBuffer returned NULL (no index data)" << llendl;
777 } 792 }
778 793
@@ -952,8 +967,40 @@ void LLVertexBuffer::setBuffer(U32 data_mask)
952 sIBOActive = TRUE; 967 sIBOActive = TRUE;
953 } 968 }
954 969
970 if (gDebugGL)
971 {
972 GLint buff;
973 glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
974 if (buff != mGLBuffer)
975 {
976 llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
977 }
978
979 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
980 if (buff != mGLIndices)
981 {
982 llerrs << "Invalid GL index buffer bound: " << buff << llendl;
983 }
984 }
985
955 if (mResized) 986 if (mResized)
956 { 987 {
988 if (gDebugGL)
989 {
990 GLint buff;
991 glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
992 if (buff != mGLBuffer)
993 {
994 llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
995 }
996
997 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
998 if (buff != mGLIndices)
999 {
1000 llerrs << "Invalid GL index buffer bound: " << buff << llendl;
1001 }
1002 }
1003
957 if (mGLBuffer) 1004 if (mGLBuffer)
958 { 1005 {
959 stop_glerror(); 1006 stop_glerror();
diff --git a/linden/indra/llrender/llvertexprogramgl.cpp b/linden/indra/llrender/llvertexprogramgl.cpp
deleted file mode 100644
index 9f25582..0000000
--- a/linden/indra/llrender/llvertexprogramgl.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
1/**
2 * @file llvertexprogramgl.cpp
3 * @brief LLVertexProgramGL base class
4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 *
7 * Copyright (c) 2003-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32// This file contains the definition of LLVertexProgramGL,
33// for purposes of running vertex programs on GL hardware.
34
35#include "linden_common.h"
36
37#include "llvertexprogramgl.h"
38
39#include "llglheaders.h"
40
41LLVertexProgramGL::LLVertexProgramGL()
42{
43 mVertexProgramID = 0;
44}
45
46LLVertexProgramGL::~LLVertexProgramGL()
47{
48 glDeleteProgramsARB(1, (GLuint*) &mVertexProgramID);
49}
50
51BOOL LLVertexProgramGL::load(const char * filename)
52{
53 FILE *fp = fopen(filename, "r");
54 if (!fp)
55 {
56 llwarns << "Unable to open vertex program " << filename << llendl;
57 return FALSE;
58 }
59
60 fseek(fp,0,SEEK_END);
61 S32 file_size = ftell(fp);
62 fseek(fp,0,SEEK_SET);
63
64 char *text_buffer = new char[file_size + 1];
65
66 S32 num_read = (S32)fread(text_buffer, sizeof(char), file_size, fp);
67
68 if (ferror(fp) || num_read == 0)
69 {
70 llwarns << "Unable to read vertex program " << filename << llendl;
71 fclose(fp);
72 delete[] text_buffer;
73 return FALSE;
74 }
75 text_buffer[num_read] = '\0';
76 fclose(fp);
77
78 //Send program string to OpenGL
79 glGenProgramsARB(1, (GLuint*) &mVertexProgramID);
80 glBindProgramARB(GL_VERTEX_PROGRAM_ARB, mVertexProgramID);
81 glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, num_read, text_buffer);
82
83 const GLubyte * program_error_string = glGetString(GL_PROGRAM_ERROR_STRING_ARB);
84
85 GLint error_pos;
86 glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos);
87
88 if(error_pos!=-1)
89 {
90 glGetError();
91 S32 line_num = 1;
92 char *next_token = strchr(text_buffer, '\n');
93 while(NULL != next_token && next_token < (text_buffer + error_pos))
94 {
95 next_token++;
96 line_num++;
97 next_token = strchr(next_token, '\n');
98 }
99 char bad_code[11];
100 strncpy(bad_code, text_buffer + error_pos, 10);
101 bad_code[10] = '\0';
102
103 llerrs << filename << "(" << line_num << "): Vertex Program Error: "
104 << program_error_string << " at (" << bad_code<< ")"
105 << llendl;
106 // clean up buffer
107 delete[] text_buffer;
108 return FALSE;
109 }
110
111 // clean up buffer
112 delete[] text_buffer;
113 return TRUE;
114}
115
116void LLVertexProgramGL::bind()
117{
118 glEnable(GL_VERTEX_PROGRAM_ARB);
119 glBindProgramARB(GL_VERTEX_PROGRAM_ARB, mVertexProgramID);
120}
121
122void LLVertexProgramGL::unbind()
123{
124 glDisable(GL_VERTEX_PROGRAM_ARB);
125}
diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp
index 3ada389..3eead67 100644
--- a/linden/indra/llui/llbutton.cpp
+++ b/linden/indra/llui/llbutton.cpp
@@ -48,7 +48,7 @@
48#include "llglheaders.h" 48#include "llglheaders.h"
49#include "llfocusmgr.h" 49#include "llfocusmgr.h"
50#include "llwindow.h" 50#include "llwindow.h"
51#include "llglimmediate.h" 51#include "llrender.h"
52 52
53static LLRegisterWidget<LLButton> r("button"); 53static LLRegisterWidget<LLButton> r("button");
54 54
@@ -574,9 +574,9 @@ void LLButton::draw()
574 mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor ); 574 mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor );
575 if (mCurGlowStrength > 0.01f) 575 if (mCurGlowStrength > 0.01f)
576 { 576 {
577 glBlendFunc(GL_SRC_ALPHA, GL_ONE); 577 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
578 mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); 578 mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
579 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 579 gGL.setSceneBlendType(LLRender::BT_ALPHA);
580 } 580 }
581 } 581 }
582 else 582 else
@@ -584,9 +584,9 @@ void LLButton::draw()
584 mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor ); 584 mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor );
585 if (mCurGlowStrength > 0.01f) 585 if (mCurGlowStrength > 0.01f)
586 { 586 {
587 glBlendFunc(GL_SRC_ALPHA, GL_ONE); 587 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
588 mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); 588 mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
589 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 589 gGL.setSceneBlendType(LLRender::BT_ALPHA);
590 } 590 }
591 } 591 }
592 } 592 }
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index 0523a11..d5edba7 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -565,6 +565,8 @@ void LLComboBox::showList()
565 565
566 S32 min_width = getRect().getWidth(); 566 S32 min_width = getRect().getWidth();
567 S32 max_width = llmax(min_width, MAX_COMBO_WIDTH); 567 S32 max_width = llmax(min_width, MAX_COMBO_WIDTH);
568 // make sure we have up to date content width metrics
569 mList->calcColumnWidths();
568 S32 list_width = llclamp(mList->getMaxContentWidth(), min_width, max_width); 570 S32 list_width = llclamp(mList->getMaxContentWidth(), min_width, max_width);
569 571
570 if (mListPosition == BELOW) 572 if (mListPosition == BELOW)
@@ -781,8 +783,18 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
781 mList->highlightNthItem(mList->getItemIndex(last_selected_item)); 783 mList->highlightNthItem(mList->getItemIndex(last_selected_item));
782 } 784 }
783 result = mList->handleKeyHere(key, mask); 785 result = mList->handleKeyHere(key, mask);
786
787 // will only see return key if it is originating from line editor
788 // since the dropdown button eats the key
789 if (key == KEY_RETURN)
790 {
791 // don't show list and don't eat key input when committing
792 // free-form text entry with RETURN since user already knows
793 // what they are trying to select
794 return FALSE;
795 }
784 // if selection has changed, pop open list 796 // if selection has changed, pop open list
785 if (mList->getLastSelectedItem() != last_selected_item) 797 else if (mList->getLastSelectedItem() != last_selected_item)
786 { 798 {
787 showList(); 799 showList();
788 } 800 }
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index bf50830..759fae0 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -832,8 +832,14 @@ void LLFloater::setMinimized(BOOL minimize)
832 832
833 for (S32 i = 0; i < 4; i++) 833 for (S32 i = 0; i < 4; i++)
834 { 834 {
835 if (mResizeBar[i]) mResizeBar[i]->setEnabled(FALSE); 835 if (mResizeBar[i] != NULL)
836 if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(FALSE); 836 {
837 mResizeBar[i]->setEnabled(FALSE);
838 }
839 if (mResizeHandle[i] != NULL)
840 {
841 mResizeHandle[i]->setEnabled(FALSE);
842 }
837 } 843 }
838 844
839 mMinimized = TRUE; 845 mMinimized = TRUE;
@@ -875,8 +881,14 @@ void LLFloater::setMinimized(BOOL minimize)
875 881
876 for (S32 i = 0; i < 4; i++) 882 for (S32 i = 0; i < 4; i++)
877 { 883 {
878 if (mResizeBar[i]) mResizeBar[i]->setEnabled(isResizable()); 884 if (mResizeBar[i] != NULL)
879 if (mResizeHandle[i]) mResizeHandle[i]->setEnabled(isResizable()); 885 {
886 mResizeBar[i]->setEnabled(isResizable());
887 }
888 if (mResizeHandle[i] != NULL)
889 {
890 mResizeHandle[i]->setEnabled(isResizable());
891 }
880 } 892 }
881 893
882 mMinimized = FALSE; 894 mMinimized = FALSE;
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index aeb906c..a12c9d8 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -132,7 +132,8 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
132 mSelectAllonFocusReceived( FALSE ), 132 mSelectAllonFocusReceived( FALSE ),
133 mPassDelete(FALSE), 133 mPassDelete(FALSE),
134 mReadOnly(FALSE), 134 mReadOnly(FALSE),
135 mImage( sImage ) 135 mImage( sImage ),
136 mReplaceNewlinesWithSpaces( TRUE )
136{ 137{
137 llassert( max_length_bytes > 0 ); 138 llassert( max_length_bytes > 0 );
138 139
@@ -961,7 +962,7 @@ void LLLineEditor::paste()
961 LLWString clean_string(paste); 962 LLWString clean_string(paste);
962 LLWString::replaceTabsWithSpaces(clean_string, 1); 963 LLWString::replaceTabsWithSpaces(clean_string, 1);
963 //clean_string = wstring_detabify(paste, 1); 964 //clean_string = wstring_detabify(paste, 1);
964 LLWString::replaceChar(clean_string, '\n', ' '); 965 LLWString::replaceChar(clean_string, '\n', mReplaceNewlinesWithSpaces ? ' ' : 182); // 182 == paragraph character
965 966
966 // Insert the string 967 // Insert the string
967 968
@@ -2547,6 +2548,10 @@ S32 LLLineEditor::getPreeditFontSize() const
2547 return llround(mGLFont->getLineHeight() * LLUI::sGLScaleFactor.mV[VY]); 2548 return llround(mGLFont->getLineHeight() * LLUI::sGLScaleFactor.mV[VY]);
2548} 2549}
2549 2550
2551void LLLineEditor::setReplaceNewlinesWithSpaces(BOOL replace)
2552{
2553 mReplaceNewlinesWithSpaces = replace;
2554}
2550 2555
2551static LLRegisterWidget<LLSearchEditor> r2("search_editor"); 2556static LLRegisterWidget<LLSearchEditor> r2("search_editor");
2552 2557
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index bf0dcb5..c96e34d 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -211,6 +211,8 @@ public:
211 void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off 211 void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off
212 void updateHistory(); // stores current line in history 212 void updateHistory(); // stores current line in history
213 213
214 void setReplaceNewlinesWithSpaces(BOOL replace);
215
214private: 216private:
215 // private helper methods 217 // private helper methods
216 void removeChar(); 218 void removeChar();
@@ -311,6 +313,8 @@ private:
311 // Instances that by default point to the statics but can be overidden in XML. 313 // Instances that by default point to the statics but can be overidden in XML.
312 LLPointer<LLUIImage> mImage; 314 LLPointer<LLUIImage> mImage;
313 315
316 BOOL mReplaceNewlinesWithSpaces; // if false, will replace pasted newlines with paragraph symbol.
317
314 // private helper class 318 // private helper class
315 class LLLineEditorRollback 319 class LLLineEditorRollback
316 { 320 {
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index f2486f1..5e46ab7 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -47,7 +47,7 @@
47 47
48#include "llmath.h" 48#include "llmath.h"
49#include "llgl.h" 49#include "llgl.h"
50#include "llglimmediate.h" 50#include "llrender.h"
51#include "llfocusmgr.h" 51#include "llfocusmgr.h"
52#include "llfont.h" 52#include "llfont.h"
53#include "llcoord.h" 53#include "llcoord.h"
diff --git a/linden/indra/llui/llresizebar.cpp b/linden/indra/llui/llresizebar.cpp
index e89bfee..fd571a1 100644
--- a/linden/indra/llui/llresizebar.cpp
+++ b/linden/indra/llui/llresizebar.cpp
@@ -50,6 +50,7 @@ LLResizeBar::LLResizeBar( const LLString& name, LLView* resizing_view, const LLR
50 mMaxSize( max_size ), 50 mMaxSize( max_size ),
51 mSide( side ), 51 mSide( side ),
52 mSnappingEnabled(TRUE), 52 mSnappingEnabled(TRUE),
53 mAllowDoubleClickSnapping(TRUE),
53 mResizingView(resizing_view) 54 mResizingView(resizing_view)
54{ 55{
55 // set up some generically good follow code. 56 // set up some generically good follow code.
@@ -260,27 +261,31 @@ BOOL LLResizeBar::handleDoubleClick(S32 x, S32 y, MASK mask)
260 LLRect orig_rect = mResizingView->getRect(); 261 LLRect orig_rect = mResizingView->getRect();
261 LLRect scaled_rect = orig_rect; 262 LLRect scaled_rect = orig_rect;
262 263
263 if (mSnappingEnabled) 264 if (mSnappingEnabled && mAllowDoubleClickSnapping)
264 { 265 {
265 switch( mSide ) 266 switch( mSide )
266 { 267 {
267 case LEFT: 268 case LEFT:
268 mResizingView->findSnapEdge(scaled_rect.mLeft, LLCoordGL(0, 0), SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, S32_MAX); 269 mResizingView->findSnapEdge(scaled_rect.mLeft, LLCoordGL(0, 0), SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, S32_MAX);
270 scaled_rect.mLeft = scaled_rect.mRight - llclamp(scaled_rect.getWidth(), mMinSize, mMaxSize);
269 break; 271 break;
270 case TOP: 272 case TOP:
271 mResizingView->findSnapEdge(scaled_rect.mTop, LLCoordGL(0, 0), SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, S32_MAX); 273 mResizingView->findSnapEdge(scaled_rect.mTop, LLCoordGL(0, 0), SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, S32_MAX);
274 scaled_rect.mTop = scaled_rect.mBottom + llclamp(scaled_rect.getHeight(), mMinSize, mMaxSize);
272 break; 275 break;
273 case RIGHT: 276 case RIGHT:
274 mResizingView->findSnapEdge(scaled_rect.mRight, LLCoordGL(0, 0), SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, S32_MAX); 277 mResizingView->findSnapEdge(scaled_rect.mRight, LLCoordGL(0, 0), SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, S32_MAX);
278 scaled_rect.mRight = scaled_rect.mLeft + llclamp(scaled_rect.getWidth(), mMinSize, mMaxSize);
275 break; 279 break;
276 case BOTTOM: 280 case BOTTOM:
277 mResizingView->findSnapEdge(scaled_rect.mBottom, LLCoordGL(0, 0), SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, S32_MAX); 281 mResizingView->findSnapEdge(scaled_rect.mBottom, LLCoordGL(0, 0), SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, S32_MAX);
282 scaled_rect.mBottom = scaled_rect.mTop - llclamp(scaled_rect.getHeight(), mMinSize, mMaxSize);
278 break; 283 break;
279 } 284 }
285
286 mResizingView->userSetShape(scaled_rect);
280 } 287 }
281 288
282 mResizingView->reshape(scaled_rect.getWidth(), scaled_rect.getHeight());
283 mResizingView->setOrigin(scaled_rect.mLeft, scaled_rect.mBottom);
284 return TRUE; 289 return TRUE;
285} 290}
286 291
diff --git a/linden/indra/llui/llresizebar.h b/linden/indra/llui/llresizebar.h
index d03dafa..f8a7514 100644
--- a/linden/indra/llui/llresizebar.h
+++ b/linden/indra/llui/llresizebar.h
@@ -50,6 +50,7 @@ public:
50 50
51 void setResizeLimits( S32 min_size, S32 max_size ) { mMinSize = min_size; mMaxSize = max_size; } 51 void setResizeLimits( S32 min_size, S32 max_size ) { mMinSize = min_size; mMaxSize = max_size; }
52 void setEnableSnapping(BOOL enable) { mSnappingEnabled = enable; } 52 void setEnableSnapping(BOOL enable) { mSnappingEnabled = enable; }
53 void setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; }
53 54
54private: 55private:
55 S32 mDragLastScreenX; 56 S32 mDragLastScreenX;
@@ -61,6 +62,7 @@ private:
61 S32 mMaxSize; 62 S32 mMaxSize;
62 const Side mSide; 63 const Side mSide;
63 BOOL mSnappingEnabled; 64 BOOL mSnappingEnabled;
65 BOOL mAllowDoubleClickSnapping;
64 LLView* mResizingView; 66 LLView* mResizingView;
65}; 67};
66 68
diff --git a/linden/indra/llui/llscrollbar.cpp b/linden/indra/llui/llscrollbar.cpp
index 8940b80..3d412c1 100644
--- a/linden/indra/llui/llscrollbar.cpp
+++ b/linden/indra/llui/llscrollbar.cpp
@@ -46,7 +46,7 @@
46#include "llwindow.h" 46#include "llwindow.h"
47#include "llglheaders.h" 47#include "llglheaders.h"
48#include "llcontrol.h" 48#include "llcontrol.h"
49#include "llglimmediate.h" 49#include "llrender.h"
50 50
51LLScrollbar::LLScrollbar( 51LLScrollbar::LLScrollbar(
52 const LLString& name, LLRect rect, 52 const LLString& name, LLRect rect,
@@ -520,9 +520,9 @@ void LLScrollbar::draw()
520 rounded_rect_imagep->draw(mThumbRect, mThumbColor); 520 rounded_rect_imagep->draw(mThumbRect, mThumbColor);
521 if (mCurGlowStrength > 0.01f) 521 if (mCurGlowStrength > 0.01f)
522 { 522 {
523 glBlendFunc(GL_SRC_ALPHA, GL_ONE); 523 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
524 rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength)); 524 rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
525 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 525 gGL.setSceneBlendType(LLRender::BT_ALPHA);
526 } 526 }
527 527
528 } 528 }
diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp
index f0b0b81..1217a58 100644
--- a/linden/indra/llui/llscrollcontainer.cpp
+++ b/linden/indra/llui/llscrollcontainer.cpp
@@ -33,7 +33,7 @@
33#include "linden_common.h" 33#include "linden_common.h"
34 34
35#include "llgl.h" 35#include "llgl.h"
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38#include "llscrollcontainer.h" 38#include "llscrollcontainer.h"
39#include "llscrollbar.h" 39#include "llscrollbar.h"
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index 32c4e82..9693df4 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -43,7 +43,7 @@
43#include "llclipboard.h" 43#include "llclipboard.h"
44#include "llfocusmgr.h" 44#include "llfocusmgr.h"
45#include "llgl.h" 45#include "llgl.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47#include "llglheaders.h" 47#include "llglheaders.h"
48#include "llresmgr.h" 48#include "llresmgr.h"
49#include "llscrollbar.h" 49#include "llscrollbar.h"
@@ -1117,9 +1117,7 @@ BOOL LLScrollListCtrl::selectItemRange( S32 first_index, S32 last_index )
1117 if( itemp->getEnabled() ) 1117 if( itemp->getEnabled() )
1118 { 1118 {
1119 selectItem(itemp, FALSE); 1119 selectItem(itemp, FALSE);
1120 success = TRUE; 1120 success = TRUE;
1121 if (!success)
1122 mOriginalSelection = first_index;
1123 } 1121 }
1124 } 1122 }
1125 else 1123 else
@@ -1198,7 +1196,7 @@ void LLScrollListCtrl::deleteItems(const LLSD& sd)
1198 mLastSelected = NULL; 1196 mLastSelected = NULL;
1199 } 1197 }
1200 delete itemp; 1198 delete itemp;
1201 mItemList.erase(iter++); 1199 iter = mItemList.erase(iter);
1202 } 1200 }
1203 else 1201 else
1204 { 1202 {
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp
index 9e85b20..f196975 100644
--- a/linden/indra/llui/llspinctrl.cpp
+++ b/linden/indra/llui/llspinctrl.cpp
@@ -249,6 +249,18 @@ void LLSpinCtrl::setValue(const LLSD& value )
249 } 249 }
250} 250}
251 251
252//no matter if Editor has the focus, update the value
253void LLSpinCtrl::forceSetValue(const LLSD& value )
254{
255 F32 v = (F32)value.asReal();
256 if (mValue != v || !mbHasBeenSet)
257 {
258 mbHasBeenSet = TRUE;
259 mValue = v;
260
261 updateEditor();
262 }
263}
252 264
253void LLSpinCtrl::clear() 265void LLSpinCtrl::clear()
254{ 266{
diff --git a/linden/indra/llui/llspinctrl.h b/linden/indra/llui/llspinctrl.h
index 790e216..5d040fd 100644
--- a/linden/indra/llui/llspinctrl.h
+++ b/linden/indra/llui/llspinctrl.h
@@ -66,6 +66,7 @@ public:
66 virtual LLXMLNodePtr getXML(bool save_children = true) const; 66 virtual LLXMLNodePtr getXML(bool save_children = true) const;
67 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 67 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
68 68
69 virtual void forceSetValue(const LLSD& value ) ;
69 virtual void setValue(const LLSD& value ); 70 virtual void setValue(const LLSD& value );
70 virtual LLSD getValue() const { return mValue; } 71 virtual LLSD getValue() const { return mValue; }
71 F32 get() const { return (F32)getValue().asReal(); } 72 F32 get() const { return (F32)getValue().asReal(); }
@@ -87,6 +88,7 @@ public:
87 virtual void setIncrement(F32 inc) { mIncrement = inc; } 88 virtual void setIncrement(F32 inc) { mIncrement = inc; }
88 virtual F32 getMinValue() { return mMinValue ; } 89 virtual F32 getMinValue() { return mMinValue ; }
89 virtual F32 getMaxValue() { return mMaxValue ; } 90 virtual F32 getMaxValue() { return mMaxValue ; }
91 virtual F32 getIncrement() { return mIncrement ; }
90 92
91 void setLabel(const LLStringExplicit& label); 93 void setLabel(const LLStringExplicit& label);
92 void setLabelColor(const LLColor4& c) { mTextEnabledColor = c; } 94 void setLabelColor(const LLColor4& c) { mTextEnabledColor = c; }
diff --git a/linden/indra/llui/llstyle.h b/linden/indra/llui/llstyle.h
index 6f0099c..56f1398 100644
--- a/linden/indra/llui/llstyle.h
+++ b/linden/indra/llui/llstyle.h
@@ -37,7 +37,7 @@
37#include "llfont.h" 37#include "llfont.h"
38#include "llui.h" 38#include "llui.h"
39 39
40class LLStyle 40class LLStyle : public LLRefCount
41{ 41{
42public: 42public:
43 LLStyle(); 43 LLStyle();
@@ -46,8 +46,6 @@ public:
46 46
47 LLStyle &operator=(const LLStyle &rhs); 47 LLStyle &operator=(const LLStyle &rhs);
48 48
49 virtual ~LLStyle() { }
50
51 virtual void init (BOOL is_visible, const LLColor4 &color, const LLString& font_name); 49 virtual void init (BOOL is_visible, const LLColor4 &color, const LLString& font_name);
52 50
53 virtual const LLColor4& getColor() const { return mColor; } 51 virtual const LLColor4& getColor() const { return mColor; }
@@ -101,6 +99,9 @@ public:
101 S32 mImageWidth; 99 S32 mImageWidth;
102 S32 mImageHeight; 100 S32 mImageHeight;
103 101
102protected:
103 virtual ~LLStyle() { }
104
104private: 105private:
105 BOOL mVisible; 106 BOOL mVisible;
106 LLColor4 mColor; 107 LLColor4 mColor;
@@ -111,4 +112,6 @@ private:
111 BOOL mIsEmbeddedItem; 112 BOOL mIsEmbeddedItem;
112}; 113};
113 114
115typedef LLPointer<LLStyle> LLStyleSP;
116
114#endif // LL_LLSTYLE_H 117#endif // LL_LLSTYLE_H
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index 44f1f20..827d4fb 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -40,7 +40,7 @@
40#include "llcriticaldamp.h" 40#include "llcriticaldamp.h"
41#include "lluictrlfactory.h" 41#include "lluictrlfactory.h"
42#include "lltabcontainervertical.h" 42#include "lltabcontainervertical.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44 44
45 45
46const F32 SCROLL_STEP_TIME = 0.4f; 46const F32 SCROLL_STEP_TIME = 0.4f;
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 4ed936f..71522e5 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -37,7 +37,7 @@
37 37
38#include "llfontgl.h" 38#include "llfontgl.h"
39#include "llgl.h" 39#include "llgl.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llui.h" 41#include "llui.h"
42#include "lluictrlfactory.h" 42#include "lluictrlfactory.h"
43#include "llrect.h" 43#include "llrect.h"
@@ -1244,14 +1244,14 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
1244 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 1244 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
1245 if( cur_segment ) 1245 if( cur_segment )
1246 { 1246 {
1247 if(cur_segment->getStyle().isLink()) 1247 if(cur_segment->getStyle()->isLink())
1248 { 1248 {
1249 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; 1249 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
1250 getWindow()->setCursor(UI_CURSOR_HAND); 1250 getWindow()->setCursor(UI_CURSOR_HAND);
1251 handled = TRUE; 1251 handled = TRUE;
1252 } 1252 }
1253 else 1253 else
1254 if(cur_segment->getStyle().getIsEmbeddedItem()) 1254 if(cur_segment->getStyle()->getIsEmbeddedItem())
1255 { 1255 {
1256 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl; 1256 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
1257 getWindow()->setCursor(UI_CURSOR_HAND); 1257 getWindow()->setCursor(UI_CURSOR_HAND);
@@ -2928,23 +2928,26 @@ void LLTextEditor::drawText()
2928 S32 clipped_len = clipped_end - seg_start; 2928 S32 clipped_len = clipped_end - seg_start;
2929 if( clipped_len > 0 ) 2929 if( clipped_len > 0 )
2930 { 2930 {
2931 LLStyle style = cur_segment->getStyle(); 2931 LLStyleSP style = cur_segment->getStyle();
2932 if ( style.isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end)) 2932 if ( style->isImage() && (cur_segment->getStart() >= seg_start) && (cur_segment->getStart() <= clipped_end))
2933 { 2933 {
2934 LLUIImagePtr image = style.getImage(); 2934 S32 style_image_height = style->mImageHeight;
2935 image->draw(llround(text_x), llround(text_y)+line_height-style.mImageHeight, style.mImageWidth, style.mImageHeight); 2935 S32 style_image_width = style->mImageWidth;
2936 LLUIImagePtr image = style->getImage();
2937 image->draw(llround(text_x), llround(text_y)+line_height-style_image_height,
2938 style_image_width, style_image_height);
2936 } 2939 }
2937 2940
2938 if (cur_segment == mHoverSegment && style.getIsEmbeddedItem()) 2941 if (cur_segment == mHoverSegment && style->getIsEmbeddedItem())
2939 { 2942 {
2940 style.mUnderline = TRUE; 2943 style->mUnderline = TRUE;
2941 } 2944 }
2942 2945
2943 S32 left_pos = llmin( mSelectionStart, mSelectionEnd ); 2946 S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
2944 2947
2945 if ( (mParseHTML) && (left_pos > seg_start) && (left_pos < clipped_end) && mIsSelecting && (mSelectionStart == mSelectionEnd) ) 2948 if ( (mParseHTML) && (left_pos > seg_start) && (left_pos < clipped_end) && mIsSelecting && (mSelectionStart == mSelectionEnd) )
2946 { 2949 {
2947 mHTML = style.getLinkHREF(); 2950 mHTML = style->getLinkHREF();
2948 } 2951 }
2949 2952
2950 drawClippedSegment( text, seg_start, clipped_end, text_x, text_y, selection_left, selection_right, style, &text_x ); 2953 drawClippedSegment( text, seg_start, clipped_end, text_x, text_y, selection_left, selection_right, style, &text_x );
@@ -2963,38 +2966,38 @@ void LLTextEditor::drawText()
2963} 2966}
2964 2967
2965// Draws a single text segment, reversing the color for selection if needed. 2968// Draws a single text segment, reversing the color for selection if needed.
2966void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyle& style, F32* right_x ) 2969void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyleSP& style, F32* right_x )
2967{ 2970{
2968 if (!style.isVisible()) 2971 if (!style->isVisible())
2969 { 2972 {
2970 return; 2973 return;
2971 } 2974 }
2972 2975
2973 const LLFontGL* font = mGLFont; 2976 const LLFontGL* font = mGLFont;
2974 2977
2975 LLColor4 color = style.getColor(); 2978 LLColor4 color = style->getColor();
2976 2979
2977 if ( style.getFontString()[0] ) 2980 if ( style->getFontString()[0] )
2978 { 2981 {
2979 font = LLResMgr::getInstance()->getRes(style.getFontID()); 2982 font = LLResMgr::getInstance()->getRes(style->getFontID());
2980 } 2983 }
2981 2984
2982 U8 font_flags = LLFontGL::NORMAL; 2985 U8 font_flags = LLFontGL::NORMAL;
2983 2986
2984 if (style.mBold) 2987 if (style->mBold)
2985 { 2988 {
2986 font_flags |= LLFontGL::BOLD; 2989 font_flags |= LLFontGL::BOLD;
2987 } 2990 }
2988 if (style.mItalic) 2991 if (style->mItalic)
2989 { 2992 {
2990 font_flags |= LLFontGL::ITALIC; 2993 font_flags |= LLFontGL::ITALIC;
2991 } 2994 }
2992 if (style.mUnderline) 2995 if (style->mUnderline)
2993 { 2996 {
2994 font_flags |= LLFontGL::UNDERLINE; 2997 font_flags |= LLFontGL::UNDERLINE;
2995 } 2998 }
2996 2999
2997 if (style.getIsEmbeddedItem()) 3000 if (style->getIsEmbeddedItem())
2998 { 3001 {
2999 if (mReadOnly) 3002 if (mReadOnly)
3000 { 3003 {
@@ -3434,17 +3437,17 @@ void LLTextEditor::appendColoredText(const LLString &new_text,
3434 const LLColor4 &color, 3437 const LLColor4 &color,
3435 const LLString& font_name) 3438 const LLString& font_name)
3436{ 3439{
3437 LLStyle style; 3440 LLStyleSP style(new LLStyle);
3438 style.setVisible(true); 3441 style->setVisible(true);
3439 style.setColor(color); 3442 style->setColor(color);
3440 style.setFontName(font_name); 3443 style->setFontName(font_name);
3441 appendStyledText(new_text, allow_undo, prepend_newline, &style); 3444 appendStyledText(new_text, allow_undo, prepend_newline, &style);
3442} 3445}
3443 3446
3444void LLTextEditor::appendStyledText(const LLString &new_text, 3447void LLTextEditor::appendStyledText(const LLString &new_text,
3445 bool allow_undo, 3448 bool allow_undo,
3446 bool prepend_newline, 3449 bool prepend_newline,
3447 const LLStyle* style) 3450 const LLStyleSP *stylep)
3448{ 3451{
3449 if(mParseHTML) 3452 if(mParseHTML)
3450 { 3453 {
@@ -3453,17 +3456,17 @@ void LLTextEditor::appendStyledText(const LLString &new_text,
3453 LLString text = new_text; 3456 LLString text = new_text;
3454 while ( findHTML(text, &start, &end) ) 3457 while ( findHTML(text, &start, &end) )
3455 { 3458 {
3456 LLStyle html; 3459 LLStyleSP html(new LLStyle);
3457 html.setVisible(true); 3460 html->setVisible(true);
3458 html.setColor(mLinkColor); 3461 html->setColor(mLinkColor);
3459 if (style) 3462 if (stylep)
3460 { 3463 {
3461 html.setFontName(style->getFontString()); 3464 html->setFontName((*stylep)->getFontString());
3462 } 3465 }
3463 html.mUnderline = TRUE; 3466 html->mUnderline = TRUE;
3464 3467
3465 if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, style); 3468 if (start > 0) appendText(text.substr(0,start),allow_undo, prepend_newline, stylep);
3466 html.setLinkHREF(text.substr(start,end-start)); 3469 html->setLinkHREF(text.substr(start,end-start));
3467 appendText(text.substr(start, end-start),allow_undo, prepend_newline, &html); 3470 appendText(text.substr(start, end-start),allow_undo, prepend_newline, &html);
3468 if (end < (S32)text.length()) 3471 if (end < (S32)text.length())
3469 { 3472 {
@@ -3475,17 +3478,17 @@ void LLTextEditor::appendStyledText(const LLString &new_text,
3475 break; 3478 break;
3476 } 3479 }
3477 } 3480 }
3478 if (end < (S32)text.length()) appendText(text,allow_undo, prepend_newline, style); 3481 if (end < (S32)text.length()) appendText(text,allow_undo, prepend_newline, stylep);
3479 } 3482 }
3480 else 3483 else
3481 { 3484 {
3482 appendText(new_text, allow_undo, prepend_newline, style); 3485 appendText(new_text, allow_undo, prepend_newline, stylep);
3483 } 3486 }
3484} 3487}
3485 3488
3486// Appends new text to end of document 3489// Appends new text to end of document
3487void LLTextEditor::appendText(const LLString &new_text, bool allow_undo, bool prepend_newline, 3490void LLTextEditor::appendText(const LLString &new_text, bool allow_undo, bool prepend_newline,
3488 const LLStyle* segment_style) 3491 const LLStyleSP *stylep)
3489{ 3492{
3490 // Save old state 3493 // Save old state
3491 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax()); 3494 BOOL was_scrolled_to_bottom = (mScrollbar->getDocPos() == mScrollbar->getDocPosMax());
@@ -3513,11 +3516,11 @@ void LLTextEditor::appendText(const LLString &new_text, bool allow_undo, bool pr
3513 append(utf8str_to_wstring(new_text), TRUE ); 3516 append(utf8str_to_wstring(new_text), TRUE );
3514 } 3517 }
3515 3518
3516 if (segment_style) 3519 if (stylep)
3517 { 3520 {
3518 S32 segment_start = old_length; 3521 S32 segment_start = old_length;
3519 S32 segment_end = getLength(); 3522 S32 segment_end = getLength();
3520 LLTextSegment* segment = new LLTextSegment(*segment_style, segment_start, segment_end ); 3523 LLTextSegment* segment = new LLTextSegment(*stylep, segment_start, segment_end );
3521 mSegments.push_back(segment); 3524 mSegments.push_back(segment);
3522 } 3525 }
3523 3526
@@ -3803,8 +3806,8 @@ void LLTextEditor::findEmbeddedItemSegments()
3803 in_text = TRUE; 3806 in_text = TRUE;
3804 } 3807 }
3805 3808
3806 LLStyle embedded_style; 3809 LLStyleSP embedded_style(new LLStyle);
3807 embedded_style.setIsEmbeddedItem( TRUE ); 3810 embedded_style->setIsEmbeddedItem( TRUE );
3808 3811
3809 // Start with i just after the first embedded item 3812 // Start with i just after the first embedded item
3810 while ( text[idx] ) 3813 while ( text[idx] )
@@ -4003,7 +4006,7 @@ BOOL LLTextEditor::exportBuffer(LLString &buffer )
4003LLTextSegment::LLTextSegment(S32 start) : mStart(start) 4006LLTextSegment::LLTextSegment(S32 start) : mStart(start)
4004{ 4007{
4005} 4008}
4006LLTextSegment::LLTextSegment( const LLStyle& style, S32 start, S32 end ) : 4009LLTextSegment::LLTextSegment( const LLStyleSP& style, S32 start, S32 end ) :
4007 mStyle( style ), 4010 mStyle( style ),
4008 mStart( start), 4011 mStart( start),
4009 mEnd( end ), 4012 mEnd( end ),
@@ -4011,9 +4014,8 @@ LLTextSegment::LLTextSegment( const LLStyle& style, S32 start, S32 end ) :
4011 mIsDefault(FALSE) 4014 mIsDefault(FALSE)
4012{ 4015{
4013} 4016}
4014LLTextSegment::LLTextSegment( 4017LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end, BOOL is_visible) :
4015 const LLColor4& color, S32 start, S32 end, BOOL is_visible) : 4018 mStyle(new LLStyle(is_visible,color,"")),
4016 mStyle( is_visible, color,"" ),
4017 mStart( start), 4019 mStart( start),
4018 mEnd( end ), 4020 mEnd( end ),
4019 mToken(NULL), 4021 mToken(NULL),
@@ -4021,7 +4023,7 @@ LLTextSegment::LLTextSegment(
4021{ 4023{
4022} 4024}
4023LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end ) : 4025LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end ) :
4024 mStyle( TRUE, color,"" ), 4026 mStyle(new LLStyle(TRUE, color,"" )),
4025 mStart( start), 4027 mStart( start),
4026 mEnd( end ), 4028 mEnd( end ),
4027 mToken(NULL), 4029 mToken(NULL),
@@ -4029,7 +4031,7 @@ LLTextSegment::LLTextSegment( const LLColor4& color, S32 start, S32 end ) :
4029{ 4031{
4030} 4032}
4031LLTextSegment::LLTextSegment( const LLColor3& color, S32 start, S32 end ) : 4033LLTextSegment::LLTextSegment( const LLColor3& color, S32 start, S32 end ) :
4032 mStyle( TRUE, color,"" ), 4034 mStyle(new LLStyle(TRUE, color,"" )),
4033 mStart( start), 4035 mStart( start),
4034 mEnd( end ), 4036 mEnd( end ),
4035 mToken(NULL), 4037 mToken(NULL),
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h
index 54a34cc..d5a68ca 100644
--- a/linden/indra/llui/lltexteditor.h
+++ b/linden/indra/llui/lltexteditor.h
@@ -139,7 +139,7 @@ public:
139 void insertText(const LLString &text); 139 void insertText(const LLString &text);
140 // appends text at end 140 // appends text at end
141 void appendText(const LLString &wtext, bool allow_undo, bool prepend_newline, 141 void appendText(const LLString &wtext, bool allow_undo, bool prepend_newline,
142 const LLStyle* segment_style = NULL); 142 const LLStyleSP *stylep = NULL);
143 143
144 void appendColoredText(const LLString &wtext, bool allow_undo, 144 void appendColoredText(const LLString &wtext, bool allow_undo,
145 bool prepend_newline, 145 bool prepend_newline,
@@ -148,7 +148,7 @@ public:
148 // if styled text starts a line, you need to prepend a newline. 148 // if styled text starts a line, you need to prepend a newline.
149 void appendStyledText(const LLString &new_text, bool allow_undo, 149 void appendStyledText(const LLString &new_text, bool allow_undo,
150 bool prepend_newline, 150 bool prepend_newline,
151 const LLStyle* style); 151 const LLStyleSP *stylep = NULL);
152 152
153 // Removes text from the end of document 153 // Removes text from the end of document
154 // Does not change highlight or cursor position. 154 // Does not change highlight or cursor position.
@@ -429,7 +429,7 @@ private:
429 void drawSelectionBackground(); 429 void drawSelectionBackground();
430 void drawCursor(); 430 void drawCursor();
431 void drawText(); 431 void drawText();
432 void drawClippedSegment(const LLWString &wtext, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyle& color, F32* right_x); 432 void drawClippedSegment(const LLWString &wtext, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyleSP& color, F32* right_x);
433 433
434 // 434 //
435 // Data 435 // Data
@@ -528,7 +528,7 @@ class LLTextSegment
528public: 528public:
529 // for creating a compare value 529 // for creating a compare value
530 LLTextSegment(S32 start); 530 LLTextSegment(S32 start);
531 LLTextSegment( const LLStyle& style, S32 start, S32 end ); 531 LLTextSegment( const LLStyleSP& style, S32 start, S32 end );
532 LLTextSegment( const LLColor4& color, S32 start, S32 end, BOOL is_visible); 532 LLTextSegment( const LLColor4& color, S32 start, S32 end, BOOL is_visible);
533 LLTextSegment( const LLColor4& color, S32 start, S32 end ); 533 LLTextSegment( const LLColor4& color, S32 start, S32 end );
534 LLTextSegment( const LLColor3& color, S32 start, S32 end ); 534 LLTextSegment( const LLColor3& color, S32 start, S32 end );
@@ -536,10 +536,10 @@ public:
536 S32 getStart() const { return mStart; } 536 S32 getStart() const { return mStart; }
537 S32 getEnd() const { return mEnd; } 537 S32 getEnd() const { return mEnd; }
538 void setEnd( S32 end ) { mEnd = end; } 538 void setEnd( S32 end ) { mEnd = end; }
539 const LLColor4& getColor() const { return mStyle.getColor(); } 539 const LLColor4& getColor() const { return mStyle->getColor(); }
540 void setColor(const LLColor4 &color) { mStyle.setColor(color); } 540 void setColor(const LLColor4 &color) { mStyle->setColor(color); }
541 const LLStyle& getStyle() const { return mStyle; } 541 const LLStyleSP& getStyle() const { return mStyle; }
542 void setStyle(const LLStyle &style) { mStyle = style; } 542 void setStyle(const LLStyleSP &style) { mStyle = style; }
543 void setIsDefault(BOOL b) { mIsDefault = b; } 543 void setIsDefault(BOOL b) { mIsDefault = b; }
544 BOOL getIsDefault() const { return mIsDefault; } 544 BOOL getIsDefault() const { return mIsDefault; }
545 void setToken( LLKeywordToken* token ) { mToken = token; } 545 void setToken( LLKeywordToken* token ) { mToken = token; }
@@ -557,7 +557,7 @@ public:
557 }; 557 };
558 558
559private: 559private:
560 LLStyle mStyle; 560 LLStyleSP mStyle;
561 S32 mStart; 561 S32 mStart;
562 S32 mEnd; 562 S32 mEnd;
563 LLKeywordToken* mToken; 563 LLKeywordToken* mToken;
diff --git a/linden/indra/llui/llui.cpp b/linden/indra/llui/llui.cpp
index 45b1175..d2084e3 100644
--- a/linden/indra/llui/llui.cpp
+++ b/linden/indra/llui/llui.cpp
@@ -42,7 +42,7 @@
42#include "v2math.h" 42#include "v2math.h"
43#include "v4color.h" 43#include "v4color.h"
44#include "llgl.h" 44#include "llgl.h"
45#include "llglimmediate.h" 45#include "llrender.h"
46#include "llrect.h" 46#include "llrect.h"
47#include "llimagegl.h" 47#include "llimagegl.h"
48//#include "llviewerimage.h" 48//#include "llviewerimage.h"
@@ -493,18 +493,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
493 493
494 if (solid_color) 494 if (solid_color)
495 { 495 {
496 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 496 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
497 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 497 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
498 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
499
500 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
501 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
502
503 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
504 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
505
506 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
507 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
508 } 498 }
509 499
510 gGL.pushMatrix(); 500 gGL.pushMatrix();
@@ -640,7 +630,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
640 630
641 if (solid_color) 631 if (solid_color)
642 { 632 {
643 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 633 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
644 } 634 }
645} 635}
646 636
diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp
index cc8135c..7df6ebe 100644
--- a/linden/indra/llui/lluictrlfactory.cpp
+++ b/linden/indra/llui/lluictrlfactory.cpp
@@ -104,10 +104,17 @@ static LLRegisterWidget<LLUICtrlLocate> r2("pad");
104// LLUICtrlFactory() 104// LLUICtrlFactory()
105//----------------------------------------------------------------------------- 105//-----------------------------------------------------------------------------
106LLUICtrlFactory::LLUICtrlFactory() 106LLUICtrlFactory::LLUICtrlFactory()
107 : mDummyPanel(NULL)
107{ 108{
108 setupPaths(); 109 setupPaths();
109} 110}
110 111
112LLUICtrlFactory::~LLUICtrlFactory()
113{
114 delete mDummyPanel;
115 mDummyPanel = NULL;
116}
117
111void LLUICtrlFactory::setupPaths() 118void LLUICtrlFactory::setupPaths()
112{ 119{
113 LLString filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "paths.xml"); 120 LLString filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "paths.xml");
@@ -428,10 +435,6 @@ void LLUICtrlFactory::rebuild()
428 435
429LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node) 436LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node)
430{ 437{
431 // panel for holding dummy widgets, so they have a parent for layout purposes, etc.
432 // does not manage lifetime of child widgets
433 static LLPanel dummy_panel;
434
435 LLString ctrl_type = node->getName()->mString; 438 LLString ctrl_type = node->getName()->mString;
436 LLString::toLower(ctrl_type); 439 LLString::toLower(ctrl_type);
437 440
@@ -445,7 +448,11 @@ LLView *LLUICtrlFactory::createCtrlWidget(LLPanel *parent, LLXMLNodePtr node)
445 448
446 if (parent == NULL) 449 if (parent == NULL)
447 { 450 {
448 parent = &dummy_panel; 451 if (mDummyPanel == NULL)
452 {
453 mDummyPanel = new LLPanel;
454 }
455 parent = mDummyPanel;
449 } 456 }
450 LLView *ctrl = func(node, parent, this); 457 LLView *ctrl = func(node, parent, this);
451 458
diff --git a/linden/indra/llui/lluictrlfactory.h b/linden/indra/llui/lluictrlfactory.h
index b9325a0..0c1d9dd 100644
--- a/linden/indra/llui/lluictrlfactory.h
+++ b/linden/indra/llui/lluictrlfactory.h
@@ -46,7 +46,7 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
46public: 46public:
47 LLUICtrlFactory(); 47 LLUICtrlFactory();
48 // do not call! needs to be public so run-time can clean up the singleton 48 // do not call! needs to be public so run-time can clean up the singleton
49 virtual ~LLUICtrlFactory() {} 49 virtual ~LLUICtrlFactory();
50 50
51 void setupPaths(); 51 void setupPaths();
52 52
@@ -88,6 +88,8 @@ private:
88 std::deque<const LLCallbackMap::map_t*> mFactoryStack; 88 std::deque<const LLCallbackMap::map_t*> mFactoryStack;
89 89
90 static std::vector<LLString> mXUIPaths; 90 static std::vector<LLString> mXUIPaths;
91
92 LLPanel* mDummyPanel;
91}; 93};
92 94
93 95
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index 750821c..91c9564 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -37,7 +37,7 @@
37#include <cassert> 37#include <cassert>
38#include <boost/tokenizer.hpp> 38#include <boost/tokenizer.hpp>
39 39
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llevent.h" 41#include "llevent.h"
42#include "llfontgl.h" 42#include "llfontgl.h"
43#include "llfocusmgr.h" 43#include "llfocusmgr.h"
diff --git a/linden/indra/llui/llviewborder.cpp b/linden/indra/llui/llviewborder.cpp
index e9b7ca5..c354ac5 100644
--- a/linden/indra/llui/llviewborder.cpp
+++ b/linden/indra/llui/llviewborder.cpp
@@ -30,7 +30,7 @@
30 30
31#include "linden_common.h" 31#include "linden_common.h"
32#include "llviewborder.h" 32#include "llviewborder.h"
33#include "llglimmediate.h" 33#include "llrender.h"
34#include "llfocusmgr.h" 34#include "llfocusmgr.h"
35 35
36static LLRegisterWidget<LLViewBorder> r("view_border"); 36static LLRegisterWidget<LLViewBorder> r("view_border");
diff --git a/linden/indra/llvfs/lldir.cpp b/linden/indra/llvfs/lldir.cpp
index dc0ffea..084d3aa 100644
--- a/linden/indra/llvfs/lldir.cpp
+++ b/linden/indra/llvfs/lldir.cpp
@@ -492,21 +492,21 @@ bool LLDir::setCacheDir(const std::string &path)
492 492
493void LLDir::dumpCurrentDirectories() 493void LLDir::dumpCurrentDirectories()
494{ 494{
495 llinfos << "Current Directories:" << llendl; 495 LL_DEBUGS2("AppInit","Directories") << "Current Directories:" << LL_ENDL;
496 496
497 llinfos << " CurPath: " << getCurPath() << llendl; 497 LL_DEBUGS2("AppInit","Directories") << " CurPath: " << getCurPath() << LL_ENDL;
498 llinfos << " AppName: " << getAppName() << llendl; 498 LL_DEBUGS2("AppInit","Directories") << " AppName: " << getAppName() << LL_ENDL;
499 llinfos << " ExecutableFilename: " << getExecutableFilename() << llendl; 499 LL_DEBUGS2("AppInit","Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL;
500 llinfos << " ExecutableDir: " << getExecutableDir() << llendl; 500 LL_DEBUGS2("AppInit","Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL;
501 llinfos << " ExecutablePathAndName: " << getExecutablePathAndName() << llendl; 501 LL_DEBUGS2("AppInit","Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL;
502 llinfos << " WorkingDir: " << getWorkingDir() << llendl; 502 LL_DEBUGS2("AppInit","Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL;
503 llinfos << " AppRODataDir: " << getAppRODataDir() << llendl; 503 LL_DEBUGS2("AppInit","Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL;
504 llinfos << " OSUserDir: " << getOSUserDir() << llendl; 504 LL_DEBUGS2("AppInit","Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL;
505 llinfos << " OSUserAppDir: " << getOSUserAppDir() << llendl; 505 LL_DEBUGS2("AppInit","Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL;
506 llinfos << " LindenUserDir: " << getLindenUserDir() << llendl; 506 LL_DEBUGS2("AppInit","Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL;
507 llinfos << " TempDir: " << getTempDir() << llendl; 507 LL_DEBUGS2("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL;
508 llinfos << " CAFile: " << getCAFile() << llendl; 508 LL_DEBUGS2("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL;
509 llinfos << " SkinDir: " << getSkinDir() << llendl; 509 LL_DEBUGS2("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL;
510} 510}
511 511
512 512
diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp
index e0957db..7903e83 100644
--- a/linden/indra/llvfs/llvfs.cpp
+++ b/linden/indra/llvfs/llvfs.cpp
@@ -248,7 +248,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
248 mDataFilename = new char[strlen(data_filename) + 1]; /* Flawfinder: ignore */ 248 mDataFilename = new char[strlen(data_filename) + 1]; /* Flawfinder: ignore */
249 if (mIndexFilename == NULL || mDataFilename == NULL) 249 if (mIndexFilename == NULL || mDataFilename == NULL)
250 { 250 {
251 llerrs << "Memory Allocation Failure" << llendl; 251 LL_ERRS("VFS") << "Memory Allocation Failure" << LL_ENDL;
252 return; 252 return;
253 } 253 }
254 strcpy(mIndexFilename, index_filename); /* Flawfinder: ignore */ 254 strcpy(mIndexFilename, index_filename); /* Flawfinder: ignore */
@@ -261,7 +261,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
261 261
262 if (mReadOnly) 262 if (mReadOnly)
263 { 263 {
264 llwarns << "Can't find " << mDataFilename << " to open read-only VFS" << llendl; 264 LL_WARNS("VFS") << "Can't find " << mDataFilename << " to open read-only VFS" << LL_ENDL;
265 mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY; 265 mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY;
266 return; 266 return;
267 } 267 }
@@ -274,18 +274,18 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
274 } 274 }
275 else 275 else
276 { 276 {
277 llwarns << "Can't open VFS data file " << mDataFilename << " attempting to use alternate" << llendl; 277 LL_WARNS("VFS") << "Can't open VFS data file " << mDataFilename << " attempting to use alternate" << LL_ENDL;
278 278
279 char *temp_index = new char[strlen(mIndexFilename) + 10]; /* Flawfinder: ignore */ 279 char *temp_index = new char[strlen(mIndexFilename) + 10]; /* Flawfinder: ignore */
280 if (!temp_index) 280 if (!temp_index)
281 { 281 {
282 llerrs << "Out of the memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; 282 LL_ERRS("VFS") << "Out of the memory in LLVFS::LLVFS()" << LL_ENDL;
283 return; 283 return;
284 } 284 }
285 char *temp_data = new char[strlen(mDataFilename) + 10]; /* Flawfinder: ignore */ 285 char *temp_data = new char[strlen(mDataFilename) + 10]; /* Flawfinder: ignore */
286 if (!temp_data) 286 if (!temp_data)
287 { 287 {
288 llerrs << "Out of the memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; 288 LL_ERRS("VFS") << "Out of the memory in LLVFS::LLVFS()" << LL_ENDL;
289 return; 289 return;
290 } 290 }
291 291
@@ -310,7 +310,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
310 310
311 if (! mDataFP) 311 if (! mDataFP)
312 { 312 {
313 llwarns << "Couldn't open vfs data file after trying many alternates" << llendl; 313 LL_WARNS("VFS") << "Couldn't open vfs data file after trying many alternates" << LL_ENDL;
314 mValid = VFSVALID_BAD_CANNOT_CREATE; 314 mValid = VFSVALID_BAD_CANNOT_CREATE;
315 delete[] temp_index; 315 delete[] temp_index;
316 delete[] temp_data; 316 delete[] temp_data;
@@ -338,7 +338,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
338 char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1]; /* Flawfinder: ignore */ 338 char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1]; /* Flawfinder: ignore */
339 if (!marker ) 339 if (!marker )
340 { 340 {
341 llerrs << "Out of memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; 341 LL_ERRS("VFS") << "Out of memory in LLVFS::LLVFS()" << LL_ENDL;
342 return; 342 return;
343 } 343 }
344 sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */ 344 sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */
@@ -348,7 +348,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
348 unlockAndClose(mDataFP); 348 unlockAndClose(mDataFP);
349 mDataFP = NULL; 349 mDataFP = NULL;
350 350
351 llwarns << "VFS: File left open on last run, removing old VFS file " << mDataFilename << llendl; 351 LL_WARNS("VFS") << "VFS: File left open on last run, removing old VFS file " << mDataFilename << LL_ENDL;
352 LLFile::remove(mIndexFilename); 352 LLFile::remove(mIndexFilename);
353 LLFile::remove(mDataFilename); 353 LLFile::remove(mDataFilename);
354 LLFile::remove(marker); 354 LLFile::remove(marker);
@@ -356,7 +356,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
356 mDataFP = openAndLock(mDataFilename, "w+b", FALSE); 356 mDataFP = openAndLock(mDataFilename, "w+b", FALSE);
357 if (!mDataFP) 357 if (!mDataFP)
358 { 358 {
359 llwarns << "Can't open VFS data file in crash recovery" << llendl; 359 LL_WARNS("VFS") << "Can't open VFS data file in crash recovery" << LL_ENDL;
360 mValid = VFSVALID_BAD_CANNOT_CREATE; 360 mValid = VFSVALID_BAD_CANNOT_CREATE;
361 return; 361 return;
362 } 362 }
@@ -414,9 +414,9 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
414 if (block->mLength && block->mSize > 0) 414 if (block->mLength && block->mSize > 0)
415 { 415 {
416 // this is corrupt, not empty 416 // this is corrupt, not empty
417 llwarns << "VFS corruption: " << block->mFileID << " (" << block->mFileType << ") at index " << block->mIndexLocation << " DS: " << data_size << llendl; 417 LL_WARNS("VFS") << "VFS corruption: " << block->mFileID << " (" << block->mFileType << ") at index " << block->mIndexLocation << " DS: " << data_size << LL_ENDL;
418 llwarns << "Length: " << block->mLength << "\tLocation: " << block->mLocation << "\tSize: " << block->mSize << llendl; 418 LL_WARNS("VFS") << "Length: " << block->mLength << "\tLocation: " << block->mLocation << "\tSize: " << block->mSize << LL_ENDL;
419 llwarns << "File has bad data - VFS removed" << llendl; 419 LL_WARNS("VFS") << "File has bad data - VFS removed" << LL_ENDL;
420 420
421 delete[] buffer; 421 delete[] buffer;
422 delete block; 422 delete block;
@@ -481,13 +481,13 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
481 if (cur_file_block->mLocation == last_file_block->mLocation 481 if (cur_file_block->mLocation == last_file_block->mLocation
482 && cur_file_block->mLength == last_file_block->mLength) 482 && cur_file_block->mLength == last_file_block->mLength)
483 { 483 {
484 llwarns << "VFS: removing duplicate entry" 484 LL_WARNS("VFS") << "VFS: removing duplicate entry"
485 << " at " << cur_file_block->mLocation 485 << " at " << cur_file_block->mLocation
486 << " length " << cur_file_block->mLength 486 << " length " << cur_file_block->mLength
487 << " size " << cur_file_block->mSize 487 << " size " << cur_file_block->mSize
488 << " ID " << cur_file_block->mFileID 488 << " ID " << cur_file_block->mFileID
489 << " type " << cur_file_block->mFileType 489 << " type " << cur_file_block->mFileType
490 << llendl; 490 << LL_ENDL;
491 491
492 // Duplicate entries. Nuke them both for safety. 492 // Duplicate entries. Nuke them both for safety.
493 mFileBlocks.erase(*cur_file_block); // remove ID/type entry 493 mFileBlocks.erase(*cur_file_block); // remove ID/type entry
@@ -528,12 +528,12 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
528 mDataFP = NULL; 528 mDataFP = NULL;
529 LLFile::remove( mDataFilename ); 529 LLFile::remove( mDataFilename );
530 530
531 llwarns << "VFS: overlapping entries" 531 LL_WARNS("VFS") << "VFS: overlapping entries"
532 << " at " << cur_file_block->mLocation 532 << " at " << cur_file_block->mLocation
533 << " length " << cur_file_block->mLength 533 << " length " << cur_file_block->mLength
534 << " ID " << cur_file_block->mFileID 534 << " ID " << cur_file_block->mFileID
535 << " type " << cur_file_block->mFileType 535 << " type " << cur_file_block->mFileType
536 << llendl; 536 << LL_ENDL;
537 mValid = VFSVALID_BAD_CORRUPT; 537 mValid = VFSVALID_BAD_CORRUPT;
538 return; 538 return;
539 } 539 }
@@ -563,7 +563,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
563 { 563 {
564 if (mReadOnly) 564 if (mReadOnly)
565 { 565 {
566 llwarns << "Can't find " << mIndexFilename << " to open read-only VFS" << llendl; 566 LL_WARNS("VFS") << "Can't find " << mIndexFilename << " to open read-only VFS" << LL_ENDL;
567 mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY; 567 mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY;
568 return; 568 return;
569 } 569 }
@@ -572,7 +572,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
572 mIndexFP = openAndLock(mIndexFilename, "w+b", FALSE); 572 mIndexFP = openAndLock(mIndexFilename, "w+b", FALSE);
573 if (!mIndexFP) 573 if (!mIndexFP)
574 { 574 {
575 llwarns << "Couldn't open an index file for the VFS, probably a sharing violation!" << llendl; 575 LL_WARNS("VFS") << "Couldn't open an index file for the VFS, probably a sharing violation!" << LL_ENDL;
576 576
577 unlockAndClose( mDataFP ); 577 unlockAndClose( mDataFP );
578 mDataFP = NULL; 578 mDataFP = NULL;
@@ -593,11 +593,11 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
593 char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1]; 593 char* marker = new char[strlen(mDataFilename) + strlen(".open") + 1];
594 if (!marker) 594 if (!marker)
595 { 595 {
596 llerrs << "Out of memory in LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash)" << llendl; 596 LL_ERRS("VFS") << "Out of memory in LLVFS::LLVFS()" << LL_ENDL;
597 return; 597 return;
598 } 598 }
599 sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */ 599 sprintf(marker, "%s.open", mDataFilename); /* Flawfinder: ignore */
600 FILE* marker_fp = LLFile::fopen(marker, "w"); /* Flawfinder: ignore */ 600 LLFILE* marker_fp = LLFile::fopen(marker, "w"); /* Flawfinder: ignore */
601 if (marker_fp) 601 if (marker_fp)
602 { 602 {
603 fclose(marker_fp); 603 fclose(marker_fp);
@@ -607,7 +607,8 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
607 marker = NULL; 607 marker = NULL;
608 } 608 }
609 609
610 llinfos << "VFS: Using index file " << mIndexFilename << " and data file " << mDataFilename << llendl; 610 LL_WARNS("VFS") << "Using index file " << mIndexFilename << LL_ENDL;
611 LL_WARNS("VFS") << "Using data file " << mDataFilename << LL_ENDL;
611 612
612 mValid = VFSVALID_OK; 613 mValid = VFSVALID_OK;
613} 614}
@@ -616,7 +617,7 @@ LLVFS::~LLVFS()
616{ 617{
617 if (mDataMutex->isLocked()) 618 if (mDataMutex->isLocked())
618 { 619 {
619 llerrs << "LLVFS destroyed with mutex locked" << llendl; 620 LL_ERRS("VFS") << "LLVFS destroyed with mutex locked" << LL_ENDL;
620 } 621 }
621 622
622 unlockAndClose(mIndexFP); 623 unlockAndClose(mIndexFP);
@@ -642,7 +643,7 @@ LLVFS::~LLVFS()
642 char* marker_file = new char[strlen(mDataFilename) + strlen(".open") + 1]; 643 char* marker_file = new char[strlen(mDataFilename) + strlen(".open") + 1];
643 if (marker_file == NULL) 644 if (marker_file == NULL)
644 { 645 {
645 llerrs << "Memory Allocation Failure" << llendl; 646 LL_ERRS("VFS") << "Memory Allocation Failure" << LL_ENDL;
646 return; 647 return;
647 } 648 }
648 sprintf(marker_file, "%s.open", mDataFilename); /* Flawfinder: ignore */ 649 sprintf(marker_file, "%s.open", mDataFilename); /* Flawfinder: ignore */
@@ -2134,7 +2135,7 @@ void LLVFS::dumpFiles()
2134//============================================================================ 2135//============================================================================
2135 2136
2136// static 2137// static
2137FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock) 2138LLFILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock)
2138{ 2139{
2139#if LL_WINDOWS 2140#if LL_WINDOWS
2140 2141
@@ -2142,7 +2143,7 @@ FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock)
2142 2143
2143#else 2144#else
2144 2145
2145 FILE *fp; 2146 LLFILE *fp;
2146 int fd; 2147 int fd;
2147 2148
2148 // first test the lock in a non-destructive way 2149 // first test the lock in a non-destructive way
@@ -2192,7 +2193,7 @@ FILE *LLVFS::openAndLock(const char *filename, const char *mode, BOOL read_lock)
2192} 2193}
2193 2194
2194// static 2195// static
2195void LLVFS::unlockAndClose(FILE *fp) 2196void LLVFS::unlockAndClose(LLFILE *fp)
2196{ 2197{
2197 if (fp) 2198 if (fp)
2198 { 2199 {
diff --git a/linden/indra/llvfs/llvfs.h b/linden/indra/llvfs/llvfs.h
index e07e85a..7465bb4 100644
--- a/linden/indra/llvfs/llvfs.h
+++ b/linden/indra/llvfs/llvfs.h
@@ -131,8 +131,8 @@ protected:
131 void sync(LLVFSFileBlock *block, BOOL remove = FALSE); 131 void sync(LLVFSFileBlock *block, BOOL remove = FALSE);
132 void presizeDataFile(const U32 size); 132 void presizeDataFile(const U32 size);
133 133
134 static FILE *openAndLock(const char *filename, const char *mode, BOOL read_lock); 134 static LLFILE *openAndLock(const char *filename, const char *mode, BOOL read_lock);
135 static void unlockAndClose(FILE *fp); 135 static void unlockAndClose(LLFILE *fp);
136 136
137 // Can initiate LRU-based file removal to make space. 137 // Can initiate LRU-based file removal to make space.
138 // The immune file block will not be removed. 138 // The immune file block will not be removed.
@@ -153,8 +153,8 @@ protected:
153 typedef std::multimap<U32, LLVFSBlock*> blocks_location_map_t; 153 typedef std::multimap<U32, LLVFSBlock*> blocks_location_map_t;
154 blocks_location_map_t mFreeBlocksByLocation; 154 blocks_location_map_t mFreeBlocksByLocation;
155 155
156 FILE *mDataFP; 156 LLFILE *mDataFP;
157 FILE *mIndexFP; 157 LLFILE *mIndexFP;
158 158
159 std::deque<S32> mIndexHoles; 159 std::deque<S32> mIndexHoles;
160 160
diff --git a/linden/indra/llwindow/files.linux.lst b/linden/indra/llwindow/files.linux.lst
index e41ac2a..a2dfa07 100644
--- a/linden/indra/llwindow/files.linux.lst
+++ b/linden/indra/llwindow/files.linux.lst
@@ -1,4 +1,3 @@
1llwindow/llkeyboardsdl.cpp 1llwindow/llkeyboardsdl.cpp
2llwindow/llwindowsdl.cpp 2llwindow/llwindowsdl.cpp
3llwindow/llwindowlinux.cpp
4llwindow/llwindowmesaheadless.cpp 3llwindow/llwindowmesaheadless.cpp
diff --git a/linden/indra/llwindow/files.sunos5.lst b/linden/indra/llwindow/files.sunos5.lst
index ee20b05..a2dfa07 100644
--- a/linden/indra/llwindow/files.sunos5.lst
+++ b/linden/indra/llwindow/files.sunos5.lst
@@ -1,4 +1,3 @@
1llwindow/llkeyboardsdl.cpp 1llwindow/llkeyboardsdl.cpp
2llwindow/llwindowsdl.cpp 2llwindow/llwindowsdl.cpp
3llwindow/llwindowsolaris.cpp
4llwindow/llwindowmesaheadless.cpp 3llwindow/llwindowmesaheadless.cpp
diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp
index 4eb8cab..c2d94c3 100644
--- a/linden/indra/llwindow/lldxhardware.cpp
+++ b/linden/indra/llwindow/lldxhardware.cpp
@@ -304,7 +304,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
304 IDxDiagContainer *driver_containerp = NULL; 304 IDxDiagContainer *driver_containerp = NULL;
305 305
306 // CoCreate a IDxDiagProvider* 306 // CoCreate a IDxDiagProvider*
307 llinfos << "CoCreateInstance IID_IDxDiagProvider" << llendl; 307 LL_DEBUGS("AppInit") << "CoCreateInstance IID_IDxDiagProvider" << LL_ENDL;
308 hr = CoCreateInstance(CLSID_DxDiagProvider, 308 hr = CoCreateInstance(CLSID_DxDiagProvider,
309 NULL, 309 NULL,
310 CLSCTX_INPROC_SERVER, 310 CLSCTX_INPROC_SERVER,
@@ -313,7 +313,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
313 313
314 if (FAILED(hr)) 314 if (FAILED(hr))
315 { 315 {
316 llwarns << "No DXDiag provider found! DirectX 9 not installed!" << llendl; 316 LL_WARNS("AppInit") << "No DXDiag provider found! DirectX 9 not installed!" << LL_ENDL;
317 gWriteDebug("No DXDiag provider found! DirectX 9 not installed!\n"); 317 gWriteDebug("No DXDiag provider found! DirectX 9 not installed!\n");
318 goto LCleanup; 318 goto LCleanup;
319 } 319 }
@@ -331,14 +331,14 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
331 dx_diag_init_params.bAllowWHQLChecks = TRUE; 331 dx_diag_init_params.bAllowWHQLChecks = TRUE;
332 dx_diag_init_params.pReserved = NULL; 332 dx_diag_init_params.pReserved = NULL;
333 333
334 llinfos << "dx_diag_providerp->Initialize" << llendl; 334 LL_DEBUGS("AppInit") << "dx_diag_providerp->Initialize" << LL_ENDL;
335 hr = dx_diag_providerp->Initialize(&dx_diag_init_params); 335 hr = dx_diag_providerp->Initialize(&dx_diag_init_params);
336 if(FAILED(hr)) 336 if(FAILED(hr))
337 { 337 {
338 goto LCleanup; 338 goto LCleanup;
339 } 339 }
340 340
341 llinfos << "dx_diag_providerp->GetRootContainer" << llendl; 341 LL_DEBUGS("AppInit") << "dx_diag_providerp->GetRootContainer" << LL_ENDL;
342 hr = dx_diag_providerp->GetRootContainer( &dx_diag_rootp ); 342 hr = dx_diag_providerp->GetRootContainer( &dx_diag_rootp );
343 if(FAILED(hr) || !dx_diag_rootp) 343 if(FAILED(hr) || !dx_diag_rootp)
344 { 344 {
@@ -348,7 +348,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
348 HRESULT hr; 348 HRESULT hr;
349 349
350 // Get display driver information 350 // Get display driver information
351 llinfos << "dx_diag_rootp->GetChildContainer" << llendl; 351 LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer" << LL_ENDL;
352 hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp); 352 hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp);
353 if(FAILED(hr) || !devices_containerp) 353 if(FAILED(hr) || !devices_containerp)
354 { 354 {
@@ -356,7 +356,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
356 } 356 }
357 357
358 // Get device 0 358 // Get device 0
359 llinfos << "devices_containerp->GetChildContainer" << llendl; 359 LL_DEBUGS("AppInit") << "devices_containerp->GetChildContainer" << LL_ENDL;
360 hr = devices_containerp->GetChildContainer(L"0", &device_containerp); 360 hr = devices_containerp->GetChildContainer(L"0", &device_containerp);
361 if(FAILED(hr) || !device_containerp) 361 if(FAILED(hr) || !device_containerp)
362 { 362 {
@@ -373,10 +373,9 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
373 // Dump the string as an int into the structure 373 // Dump the string as an int into the structure
374 char *stopstring; 374 char *stopstring;
375 mVRAM = strtol(ram_str.c_str(), &stopstring, 10); 375 mVRAM = strtol(ram_str.c_str(), &stopstring, 10);
376 llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl; 376 LL_INFOS("AppInit") << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << LL_ENDL;
377 } 377 }
378 378
379
380 if (vram_only) 379 if (vram_only)
381 { 380 {
382 ok = TRUE; 381 ok = TRUE;
@@ -393,7 +392,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
393 // This call may take some time while dxdiag gathers the info. 392 // This call may take some time while dxdiag gathers the info.
394 DWORD num_devices = 0; 393 DWORD num_devices = 0;
395 WCHAR wszContainer[256]; 394 WCHAR wszContainer[256];
396 llinfos << "dx_diag_rootp->GetChildContainer DxDiag_SystemDevices" << llendl; 395 LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer DxDiag_SystemDevices" << LL_ENDL;
397 hr = dx_diag_rootp->GetChildContainer(L"DxDiag_SystemDevices", &system_device_containerp); 396 hr = dx_diag_rootp->GetChildContainer(L"DxDiag_SystemDevices", &system_device_containerp);
398 if (FAILED(hr)) 397 if (FAILED(hr))
399 { 398 {
@@ -406,7 +405,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
406 goto LCleanup; 405 goto LCleanup;
407 } 406 }
408 407
409 llinfos << "DX9 iterating over devices" << llendl; 408 LL_DEBUGS("AppInit") << "DX9 iterating over devices" << LL_ENDL;
410 S32 device_num = 0; 409 S32 device_num = 0;
411 for (device_num = 0; device_num < (S32)num_devices; device_num++) 410 for (device_num = 0; device_num < (S32)num_devices; device_num++)
412 { 411 {
@@ -523,7 +522,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
523LCleanup: 522LCleanup:
524 if (!ok) 523 if (!ok)
525 { 524 {
526 llwarns << "DX9 probe failed" << llendl; 525 LL_WARNS("AppInit") << "DX9 probe failed" << LL_ENDL;
527 gWriteDebug("DX9 probe failed\n"); 526 gWriteDebug("DX9 probe failed\n");
528 } 527 }
529 528
diff --git a/linden/indra/llwindow/llgl.cpp b/linden/indra/llwindow/llgl.cpp
index 229fdf2..e8169b6 100644
--- a/linden/indra/llwindow/llgl.cpp
+++ b/linden/indra/llwindow/llgl.cpp
@@ -41,7 +41,7 @@
41#include "llsys.h" 41#include "llsys.h"
42 42
43#include "llgl.h" 43#include "llgl.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46#include "llerror.h" 46#include "llerror.h"
47#include "llquaternion.h" 47#include "llquaternion.h"
@@ -55,6 +55,7 @@
55//#define GL_STATE_VERIFY 55//#define GL_STATE_VERIFY
56#endif 56#endif
57 57
58BOOL gDebugGL = FALSE;
58BOOL gClothRipple = FALSE; 59BOOL gClothRipple = FALSE;
59BOOL gNoRender = FALSE; 60BOOL gNoRender = FALSE;
60LLMatrix4 gGLObliqueProjectionInverse; 61LLMatrix4 gGLObliqueProjectionInverse;
@@ -253,50 +254,50 @@ PFNGLCOLORTABLEEXTPROC glColorTableEXT = NULL;
253 254
254LLGLManager gGLManager; 255LLGLManager gGLManager;
255 256
256LLGLManager::LLGLManager() 257LLGLManager::LLGLManager() :
257{ 258 mInited(FALSE),
258 mInited = FALSE; 259 mIsDisabled(FALSE),
259 mIsDisabled = FALSE; 260
260 mHasCubeMap = FALSE; 261 mHasMultitexture(FALSE),
261 mHasMultitexture = FALSE; 262 mNumTextureUnits(1),
262 mHasMipMapGeneration = FALSE; 263 mHasMipMapGeneration(FALSE),
263 mHasAnisotropic = FALSE; 264 mHasPalettedTextures(FALSE),
264 mHasCompressedTextures = FALSE; 265 mHasCompressedTextures(FALSE),
265 mHasARBEnvCombine = FALSE; 266 mHasFramebufferObject(FALSE),
266 mIsGF2or4MX = FALSE; 267
267 mIsGF3 = FALSE; 268 mHasVertexBufferObject(FALSE),
268 mIsGFFX = FALSE; 269 mHasPBuffer(FALSE),
269 mIsATI = FALSE; 270 mHasShaderObjects(FALSE),
270 mATIOffsetVerticalLines = FALSE; 271 mHasVertexShader(FALSE),
271 mHasVertexShader = FALSE; 272 mHasFragmentShader(FALSE),
272 mHasFragmentShader = FALSE; 273 mHasOcclusionQuery(FALSE),
273 mHasShaderObjects = FALSE; 274 mHasPointParameters(FALSE),
274 mHasPointParameters = FALSE; 275
275 276 mHasAnisotropic(FALSE),
276#if LL_WINDOWS 277 mHasARBEnvCombine(FALSE),
277 mHasWGLARBPixelFormat = FALSE; 278 mHasCubeMap(FALSE),
278#endif // LL_WINDOWS 279
279 280 mIsATI(FALSE),
280#if LL_DARWIN 281 mIsNVIDIA(FALSE),
281 mHasAPPLEVertexArrayRange = FALSE; 282 mIsIntel(FALSE),
282 mHasAPPLEFence = FALSE; 283 mIsGF2or4MX(FALSE),
283 mHasAPPLEVAO = FALSE; 284 mIsGF3(FALSE),
284#endif 285 mIsGFFX(FALSE),
285 286 mATIOffsetVerticalLines(FALSE),
286 mIsNVIDIA = FALSE; 287
287 mIsIntel = FALSE; 288 mHasRequirements(TRUE),
289
290 mHasSeparateSpecularColor(FALSE),
291
292 mDriverVersionMajor(1),
293 mDriverVersionMinor(0),
294 mDriverVersionRelease(0),
295 mGLVersion(1.0f),
288 296
289 mDriverVersionMajor = 1; 297 mVRAM(0),
290 mDriverVersionMinor = 0; 298 mGLMaxVertexRange(0),
291 mDriverVersionRelease = 0; 299 mGLMaxIndexRange(0)
292 mGLVersion = 1.0f; 300{
293
294 mNumTextureUnits = 1;
295 mVRAM = 0;
296 mGLMaxVertexRange = 0;
297 mGLMaxIndexRange = 0;
298
299 mHasRequirements = TRUE;
300} 301}
301 302
302//--------------------------------------------------------------------- 303//---------------------------------------------------------------------
@@ -308,7 +309,7 @@ void LLGLManager::initWGL()
308#if LL_WINDOWS && !LL_MESA_HEADLESS 309#if LL_WINDOWS && !LL_MESA_HEADLESS
309 if (!glh_init_extensions("WGL_ARB_pixel_format")) 310 if (!glh_init_extensions("WGL_ARB_pixel_format"))
310 { 311 {
311 llwarns << "No ARB pixel format extensions" << llendl; 312 LL_WARNS("RenderInit") << "No ARB pixel format extensions" << LL_ENDL;
312 } 313 }
313 314
314 if (ExtensionExists("WGL_EXT_swap_control", gGLHExts.mSysExts)) 315 if (ExtensionExists("WGL_EXT_swap_control", gGLHExts.mSysExts))
@@ -316,15 +317,14 @@ void LLGLManager::initWGL()
316 GLH_EXT_NAME(wglSwapIntervalEXT) = (PFNWGLSWAPINTERVALEXTPROC)GLH_EXT_GET_PROC_ADDRESS("wglSwapIntervalEXT"); 317 GLH_EXT_NAME(wglSwapIntervalEXT) = (PFNWGLSWAPINTERVALEXTPROC)GLH_EXT_GET_PROC_ADDRESS("wglSwapIntervalEXT");
317 } 318 }
318 319
319 mHasWGLARBPixelFormat = glh_init_extensions("WGL_ARB_pbuffer"); 320 if( !glh_init_extensions("WGL_ARB_pbuffer") )
320 if( !mHasWGLARBPixelFormat )
321 { 321 {
322 llwarns << "No ARB WGL PBuffer extensions" << llendl; 322 LL_WARNS("RenderInit") << "No ARB WGL PBuffer extensions" << LL_ENDL;
323 } 323 }
324 324
325 if( !glh_init_extensions("WGL_ARB_render_texture") ) 325 if( !glh_init_extensions("WGL_ARB_render_texture") )
326 { 326 {
327 llwarns << "No ARB WGL render texture extensions" << llendl; 327 LL_WARNS("RenderInit") << "No ARB WGL render texture extensions" << LL_ENDL;
328 } 328 }
329 329
330 mHasPBuffer = ExtensionExists("WGL_ARB_pbuffer", gGLHExts.mSysExts) && 330 mHasPBuffer = ExtensionExists("WGL_ARB_pbuffer", gGLHExts.mSysExts) &&
@@ -338,19 +338,15 @@ bool LLGLManager::initGL()
338{ 338{
339 if (mInited) 339 if (mInited)
340 { 340 {
341 llerrs << "Calling init on LLGLManager after already initialized!" << llendl; 341 LL_ERRS("RenderInit") << "Calling init on LLGLManager after already initialized!" << LL_ENDL;
342 } 342 }
343 343
344 GLint alpha_bits; 344 GLint alpha_bits;
345 glGetIntegerv( GL_ALPHA_BITS, &alpha_bits ); 345 glGetIntegerv( GL_ALPHA_BITS, &alpha_bits );
346 if( 8 != alpha_bits ) 346 if( 8 != alpha_bits )
347 { 347 {
348 llwarns << "Frame buffer has less than 8 bits of alpha. Avatar texture compositing will fail." << llendl; 348 LL_WARNS("RenderInit") << "Frame buffer has less than 8 bits of alpha. Avatar texture compositing will fail." << LL_ENDL;
349 } 349 }
350
351 // This function uses at least one variable that's initialized below.
352 // Moved this call down to after we figure out which card we're dealing with. -- MBW 2003.10.07
353// initExtensions();
354 350
355 // Extract video card strings and convert to upper case to 351 // Extract video card strings and convert to upper case to
356 // work around driver-to-driver variation in capitalization. 352 // work around driver-to-driver variation in capitalization.
@@ -445,7 +441,7 @@ bool LLGLManager::initGL()
445 mHasRequirements = FALSE; 441 mHasRequirements = FALSE;
446 442
447 // We don't support cards that don't support the GL_ARB_multitexture extension 443 // We don't support cards that don't support the GL_ARB_multitexture extension
448 llwarns << "GL Drivers do not support GL_ARB_multitexture" << llendl; 444 LL_WARNS("RenderInit") << "GL Drivers do not support GL_ARB_multitexture" << LL_ENDL;
449 return false; 445 return false;
450 } 446 }
451 447
@@ -489,6 +485,22 @@ LLString LLGLManager::getGLInfoString()
489 return info_str; 485 return info_str;
490} 486}
491 487
488void LLGLManager::printGLInfoString()
489{
490 LLString info_str;
491 LLString all_exts, line;
492
493 LL_INFOS("RenderInit") << "GL_VENDOR: " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
494 LL_INFOS("RenderInit") << "GL_RENDERER: " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
495 LL_INFOS("RenderInit") << "GL_VERSION: " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL;
496
497#if !LL_MESA_HEADLESS
498 all_exts = (const char *)gGLHExts.mSysExts;
499 LLString::replaceChar(all_exts, ' ', '\n');
500 LL_DEBUGS("RenderInit") << "GL_EXTENSIONS:\n" << all_exts << LL_ENDL;
501#endif
502}
503
492LLString LLGLManager::getRawGLString() 504LLString LLGLManager::getRawGLString()
493{ 505{
494 LLString gl_string; 506 LLString gl_string;
@@ -595,8 +607,7 @@ void LLGLManager::initExtensions()
595 mHasShaderObjects = FALSE; 607 mHasShaderObjects = FALSE;
596 mHasVertexShader = FALSE; 608 mHasVertexShader = FALSE;
597 mHasFragmentShader = FALSE; 609 mHasFragmentShader = FALSE;
598 llwarns << "GL extension support DISABLED via LL_GL_NOEXT" << 610 LL_WARNS("RenderInit") << "GL extension support DISABLED via LL_GL_NOEXT" << LL_ENDL;
599 llendl;
600 } 611 }
601 else if (getenv("LL_GL_BASICEXT")) /* Flawfinder: ignore */ 612 else if (getenv("LL_GL_BASICEXT")) /* Flawfinder: ignore */
602 { 613 {
@@ -612,8 +623,7 @@ void LLGLManager::initExtensions()
612 mHasShaderObjects = FALSE; 623 mHasShaderObjects = FALSE;
613 mHasVertexShader = FALSE; 624 mHasVertexShader = FALSE;
614 mHasFragmentShader = FALSE; 625 mHasFragmentShader = FALSE;
615 llwarns << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << 626 LL_WARNS("RenderInit") << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << LL_ENDL;
616 llendl;
617 } 627 }
618 if (getenv("LL_GL_BLACKLIST")) /* Flawfinder: ignore */ 628 if (getenv("LL_GL_BLACKLIST")) /* Flawfinder: ignore */
619 { 629 {
@@ -621,7 +631,7 @@ void LLGLManager::initExtensions()
621 // GL extensions to isolate problems with their hardware. 631 // GL extensions to isolate problems with their hardware.
622 // SL-28126 632 // SL-28126
623 const char *const blacklist = getenv("LL_GL_BLACKLIST"); /* Flawfinder: ignore */ 633 const char *const blacklist = getenv("LL_GL_BLACKLIST"); /* Flawfinder: ignore */
624 llwarns << "GL extension support partially disabled via LL_GL_BLACKLIST: " << blacklist << llendl; 634 LL_WARNS("RenderInit") << "GL extension support partially disabled via LL_GL_BLACKLIST: " << blacklist << LL_ENDL;
625 if (strchr(blacklist,'a')) mHasARBEnvCombine = FALSE; 635 if (strchr(blacklist,'a')) mHasARBEnvCombine = FALSE;
626 if (strchr(blacklist,'b')) mHasCompressedTextures = FALSE; 636 if (strchr(blacklist,'b')) mHasCompressedTextures = FALSE;
627 if (strchr(blacklist,'c')) mHasVertexBufferObject = FALSE; 637 if (strchr(blacklist,'c')) mHasVertexBufferObject = FALSE;
@@ -651,62 +661,62 @@ void LLGLManager::initExtensions()
651 661
652 if (!mHasMultitexture) 662 if (!mHasMultitexture)
653 { 663 {
654 llinfos << "Couldn't initialize multitexturing" << llendl; 664 LL_INFOS("RenderInit") << "Couldn't initialize multitexturing" << LL_ENDL;
655 } 665 }
656 if (!mHasMipMapGeneration) 666 if (!mHasMipMapGeneration)
657 { 667 {
658 llinfos << "Couldn't initialize mipmap generation" << llendl; 668 LL_INFOS("RenderInit") << "Couldn't initialize mipmap generation" << LL_ENDL;
659 } 669 }
660 if (!mHasARBEnvCombine) 670 if (!mHasARBEnvCombine)
661 { 671 {
662 llinfos << "Couldn't initialize GL_ARB_texture_env_combine" << llendl; 672 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_env_combine" << LL_ENDL;
663 } 673 }
664 if (!mHasPalettedTextures) 674 if (!mHasPalettedTextures)
665 { 675 {
666 llinfos << "Couldn't initialize GL_EXT_paletted_texture" << llendl; 676 LL_INFOS("RenderInit") << "Couldn't initialize GL_EXT_paletted_texture" << LL_ENDL;
667 } 677 }
668 if (!mHasSeparateSpecularColor) 678 if (!mHasSeparateSpecularColor)
669 { 679 {
670 llinfos << "Couldn't initialize separate specular color" << llendl; 680 LL_INFOS("RenderInit") << "Couldn't initialize separate specular color" << LL_ENDL;
671 } 681 }
672 if (!mHasAnisotropic) 682 if (!mHasAnisotropic)
673 { 683 {
674 llinfos << "Couldn't initialize anisotropic filtering" << llendl; 684 LL_INFOS("RenderInit") << "Couldn't initialize anisotropic filtering" << LL_ENDL;
675 } 685 }
676 if (!mHasCompressedTextures) 686 if (!mHasCompressedTextures)
677 { 687 {
678 llinfos << "Couldn't initialize GL_ARB_texture_compression" << llendl; 688 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_compression" << LL_ENDL;
679 } 689 }
680 if (!mHasOcclusionQuery) 690 if (!mHasOcclusionQuery)
681 { 691 {
682 llinfos << "Couldn't initialize GL_ARB_occlusion_query" << llendl; 692 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_occlusion_query" << LL_ENDL;
683 } 693 }
684 if (!mHasPointParameters) 694 if (!mHasPointParameters)
685 { 695 {
686 llinfos << "Couldn't initialize GL_ARB_point_parameters" << llendl; 696 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_point_parameters" << LL_ENDL;
687 } 697 }
688 if (!mHasShaderObjects) 698 if (!mHasShaderObjects)
689 { 699 {
690 llinfos << "Couldn't initialize GL_ARB_shader_objects" << llendl; 700 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_shader_objects" << LL_ENDL;
691 } 701 }
692 if (!mHasVertexShader) 702 if (!mHasVertexShader)
693 { 703 {
694 llinfos << "Couldn't initialize GL_ARB_vertex_shader" << llendl; 704 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_vertex_shader" << LL_ENDL;
695 } 705 }
696 if (!mHasFragmentShader) 706 if (!mHasFragmentShader)
697 { 707 {
698 llinfos << "Couldn't initialize GL_ARB_fragment_shader" << llendl; 708 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_fragment_shader" << LL_ENDL;
699 } 709 }
700 710
701 // Disable certain things due to known bugs 711 // Disable certain things due to known bugs
702 if (mIsIntel && mHasMipMapGeneration) 712 if (mIsIntel && mHasMipMapGeneration)
703 { 713 {
704 llinfos << "Disabling mip-map generation for Intel GPUs" << llendl; 714 LL_INFOS("RenderInit") << "Disabling mip-map generation for Intel GPUs" << LL_ENDL;
705 mHasMipMapGeneration = FALSE; 715 mHasMipMapGeneration = FALSE;
706 } 716 }
707 if (mIsATI && mHasMipMapGeneration) 717 if (mIsATI && mHasMipMapGeneration)
708 { 718 {
709 llinfos << "Disabling mip-map generation for ATI GPUs (performance opt)" << llendl; 719 LL_INFOS("RenderInit") << "Disabling mip-map generation for ATI GPUs (performance opt)" << LL_ENDL;
710 mHasMipMapGeneration = FALSE; 720 mHasMipMapGeneration = FALSE;
711 } 721 }
712 722
@@ -714,30 +724,8 @@ void LLGLManager::initExtensions()
714 glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange); 724 glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);
715 glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange); 725 glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange);
716 726
717 // Apple specific
718#if LL_DARWIN
719 mHasAPPLEVertexArrayRange = glh_init_extensions("GL_APPLE_vertex_array_range");
720 if (!mHasAPPLEVertexArrayRange)
721 {
722 llinfos << "Couldn't initialize GL_APPLE_vertex_array_range" << llendl;
723 }
724
725 mHasAPPLEFence = glh_init_extensions("GL_APPLE_fence");
726 if (!mHasAPPLEFence)
727 {
728 llinfos << "Couldn't initialize GL_APPLE_fence" << llendl;
729 }
730
731 mHasAPPLEVAO = glh_init_extensions("GL_APPLE_vertex_array_object");
732 if (mHasAPPLEVAO)
733 {
734 llinfos << "Has GL_APPLE_vertex_array_object!" << llendl;
735 }
736
737#endif // LL_DARWIN
738
739#if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS 727#if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS
740 llinfos << "GL Probe: Getting symbols" << llendl; 728 LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;
741 if (mHasVertexBufferObject) 729 if (mHasVertexBufferObject)
742 { 730 {
743 glBindBufferARB = (PFNGLBINDBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBindBufferARB"); 731 glBindBufferARB = (PFNGLBINDBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBindBufferARB");
@@ -921,7 +909,7 @@ void LLGLManager::initExtensions()
921 glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glgetVertexAttribPointervARB"); 909 glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glgetVertexAttribPointervARB");
922 glIsProgramARB = (PFNGLISPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glIsProgramARB"); 910 glIsProgramARB = (PFNGLISPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glIsProgramARB");
923 } 911 }
924 llinfos << "GL Probe: Got symbols" << llendl; 912 LL_DEBUGS("RenderInit") << "GL Probe: Got symbols" << LL_ENDL;
925#endif 913#endif
926 914
927 mInited = TRUE; 915 mInited = TRUE;
@@ -941,33 +929,41 @@ void flush_glerror()
941 929
942void assert_glerror() 930void assert_glerror()
943{ 931{
944 if (gNoRender) 932 if (gNoRender || !gDebugGL)
945 { 933 {
946 return; 934 return;
947 } 935 }
948 if (!gGLManager.mInited) 936 if (!gGLManager.mInited)
949 { 937 {
950 llerrs << "GL not initialized" << llendl; 938 LL_ERRS("RenderInit") << "GL not initialized" << LL_ENDL;
951 } 939 }
952 // Create or update texture to be used with this data 940 // Create or update texture to be used with this data
953 GLenum error; 941 GLenum error;
954 error = glGetError(); 942 error = glGetError();
955 if (error) 943 BOOL quit = FALSE;
944 while (error)
956 { 945 {
946 quit = TRUE;
957#ifndef LL_LINUX // *FIX: ! This should be an error for linux as well. 947#ifndef LL_LINUX // *FIX: ! This should be an error for linux as well.
958 GLubyte const * gl_error_msg = gluErrorString(error); 948 GLubyte const * gl_error_msg = gluErrorString(error);
959 if (NULL != gl_error_msg) 949 if (NULL != gl_error_msg)
960 { 950 {
961 llerrs << "GL Error:" << gl_error_msg << llendl; 951 LL_WARNS("RenderState") << "GL Error:" << gl_error_msg << LL_ENDL;
962 } 952 }
963 else 953 else
964 { 954 {
965 // gluErrorString returns NULL for some extensions' error codes. 955 // gluErrorString returns NULL for some extensions' error codes.
966 // you'll probably have to grep for the number in glext.h. 956 // you'll probably have to grep for the number in glext.h.
967 llerrs << "GL Error: UNKNOWN 0x" << std::hex << error << llendl; 957 LL_WARNS("RenderState") << "GL Error: UNKNOWN 0x" << std::hex << error << LL_ENDL;
968 } 958 }
959 error = glGetError();
969#endif 960#endif
970 } 961 }
962
963 if (quit)
964 {
965 llerrs << "One or more unhandled GL errors." << llendl;
966 }
971} 967}
972 968
973void clear_glerror() 969void clear_glerror()
@@ -977,8 +973,7 @@ void clear_glerror()
977 error = glGetError(); 973 error = glGetError();
978} 974}
979 975
980//============================================================================ 976///////////////////////////////////////////////////////////////
981
982// 977//
983// LLGLState 978// LLGLState
984// 979//
@@ -1014,7 +1009,7 @@ void LLGLState::resetTextureStates()
1014 glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); 1009 glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits);
1015 for (S32 j = maxTextureUnits-1; j >=0; j--) 1010 for (S32 j = maxTextureUnits-1; j >=0; j--)
1016 { 1011 {
1017 glActiveTextureARB(GL_TEXTURE0_ARB+j); 1012 gGL.getTexUnit(j)->activate();
1018 glClientActiveTextureARB(GL_TEXTURE0_ARB+j); 1013 glClientActiveTextureARB(GL_TEXTURE0_ARB+j);
1019 j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D); 1014 j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D);
1020 } 1015 }
@@ -1022,17 +1017,21 @@ void LLGLState::resetTextureStates()
1022 1017
1023void LLGLState::dumpStates() 1018void LLGLState::dumpStates()
1024{ 1019{
1025 llinfos << "GL States:" << llendl; 1020 LL_INFOS("RenderState") << "GL States:" << LL_ENDL;
1026 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); 1021 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
1027 iter != sStateMap.end(); ++iter) 1022 iter != sStateMap.end(); ++iter)
1028 { 1023 {
1029 llinfos << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << llendl; 1024 LL_INFOS("RenderState") << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << LL_ENDL;
1030 } 1025 }
1031} 1026}
1032 1027
1033void LLGLState::checkStates() 1028void LLGLState::checkStates()
1034{ 1029{
1035#if LL_DEBUG_GL 1030 if (!gDebugGL)
1031 {
1032 return;
1033 }
1034
1036 stop_glerror(); 1035 stop_glerror();
1037 1036
1038 GLint activeTexture; 1037 GLint activeTexture;
@@ -1040,7 +1039,7 @@ void LLGLState::checkStates()
1040 1039
1041 if (activeTexture != GL_TEXTURE0_ARB) 1040 if (activeTexture != GL_TEXTURE0_ARB)
1042 { 1041 {
1043 LL_GL_ERRS << "Texture channel corrupted. " << llendl; 1042 LL_GL_ERRS << "Texture channel corrupted. " << LL_ENDL;
1044 } 1043 }
1045 1044
1046 GLint src; 1045 GLint src;
@@ -1050,7 +1049,7 @@ void LLGLState::checkStates()
1050 1049
1051 if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA) 1050 if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA)
1052 { 1051 {
1053 LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << llendl; 1052 LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << LL_ENDL;
1054 } 1053 }
1055 1054
1056 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); 1055 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
@@ -1062,17 +1061,20 @@ void LLGLState::checkStates()
1062 if(cur_state != gl_state) 1061 if(cur_state != gl_state)
1063 { 1062 {
1064 dumpStates(); 1063 dumpStates();
1065 LL_GL_ERRS << llformat("LLGLState error. State: 0x%04x",state) << llendl; 1064 LL_GL_ERRS << llformat("LLGLState error. State: 0x%04x",state) << LL_ENDL;
1066 } 1065 }
1067 } 1066 }
1068 1067
1069 stop_glerror(); 1068 stop_glerror();
1070#endif
1071} 1069}
1072 1070
1073void LLGLState::checkTextureChannels() 1071void LLGLState::checkTextureChannels()
1074{ 1072{
1075#if LL_DEBUG_GL 1073 if (!gDebugGL)
1074 {
1075 return;
1076 }
1077
1076 GLint activeTexture; 1078 GLint activeTexture;
1077 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture); 1079 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
1078 1080
@@ -1081,12 +1083,12 @@ void LLGLState::checkTextureChannels()
1081 if (activeTexture != GL_TEXTURE0_ARB) 1083 if (activeTexture != GL_TEXTURE0_ARB)
1082 { 1084 {
1083 error = TRUE; 1085 error = TRUE;
1084 llwarns << "Active texture channel corrupted. " << llendl; 1086 LL_WARNS("RenderState") << "Active texture channel corrupted. " << LL_ENDL;
1085 } 1087 }
1086 else if (!glIsEnabled(GL_TEXTURE_2D)) 1088 else if (!glIsEnabled(GL_TEXTURE_2D))
1087 { 1089 {
1088 error = TRUE; 1090 error = TRUE;
1089 llwarns << "GL_TEXTURE_2D not enabled on texture channel 0." << llendl; 1091 LL_WARNS("RenderState") << "GL_TEXTURE_2D not enabled on texture channel 0." << LL_ENDL;
1090 } 1092 }
1091 else 1093 else
1092 { 1094 {
@@ -1096,7 +1098,7 @@ void LLGLState::checkTextureChannels()
1096 if (tex_env_mode != GL_MODULATE) 1098 if (tex_env_mode != GL_MODULATE)
1097 { 1099 {
1098 error = TRUE; 1100 error = TRUE;
1099 llwarns << "GL_TEXTURE_ENV_MODE invalid: " << std::hex << tex_env_mode << llendl; 1101 LL_WARNS("RenderState") << "GL_TEXTURE_ENV_MODE invalid: " << std::hex << tex_env_mode << LL_ENDL;
1100 } 1102 }
1101 } 1103 }
1102 1104
@@ -1133,7 +1135,7 @@ void LLGLState::checkTextureChannels()
1133 1135
1134 for (GLint i = 0; i < maxTextureUnits; i++) 1136 for (GLint i = 0; i < maxTextureUnits; i++)
1135 { 1137 {
1136 glActiveTextureARB(GL_TEXTURE0_ARB+i); 1138 gGL.getTexUnit(i)->activate();
1137 glClientActiveTextureARB(GL_TEXTURE0_ARB+i); 1139 glClientActiveTextureARB(GL_TEXTURE0_ARB+i);
1138 1140
1139 glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth); 1141 glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth);
@@ -1141,7 +1143,7 @@ void LLGLState::checkTextureChannels()
1141 if (stackDepth != 1) 1143 if (stackDepth != 1)
1142 { 1144 {
1143 error = TRUE; 1145 error = TRUE;
1144 llwarns << "Texture matrix stack corrupted." << llendl; 1146 LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL;
1145 } 1147 }
1146 1148
1147 glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) matrix.mMatrix); 1149 glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) matrix.mMatrix);
@@ -1149,7 +1151,7 @@ void LLGLState::checkTextureChannels()
1149 if (matrix != identity) 1151 if (matrix != identity)
1150 { 1152 {
1151 error = TRUE; 1153 error = TRUE;
1152 llwarns << "Texture matrix in channel " << i << " corrupt." << llendl; 1154 LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL;
1153 } 1155 }
1154 1156
1155 for (S32 j = (i == 0 ? 1 : 0); j < 8; j++) 1157 for (S32 j = (i == 0 ? 1 : 0); j < 8; j++)
@@ -1157,24 +1159,27 @@ void LLGLState::checkTextureChannels()
1157 if (glIsEnabled(value[j])) 1159 if (glIsEnabled(value[j]))
1158 { 1160 {
1159 error = TRUE; 1161 error = TRUE;
1160 llwarns << "Texture channel " << i << " still has " << label[j] << " enabled." << llendl; 1162 LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL;
1161 } 1163 }
1162 } 1164 }
1163 } 1165 }
1164 1166
1165 glActiveTextureARB(GL_TEXTURE0_ARB); 1167 gGL.getTexUnit(0)->activate();
1166 glClientActiveTextureARB(GL_TEXTURE0_ARB); 1168 glClientActiveTextureARB(GL_TEXTURE0_ARB);
1167 1169
1168 if (error) 1170 if (error)
1169 { 1171 {
1170 LL_GL_ERRS << "GL texture state corruption detected." << llendl; 1172 LL_GL_ERRS << "GL texture state corruption detected." << LL_ENDL;
1171 } 1173 }
1172#endif
1173} 1174}
1174 1175
1175void LLGLState::checkClientArrays(U32 data_mask) 1176void LLGLState::checkClientArrays(U32 data_mask)
1176{ 1177{
1177#if LL_DEBUG_GL 1178 if (!gDebugGL)
1179 {
1180 return;
1181 }
1182
1178 stop_glerror(); 1183 stop_glerror();
1179 BOOL error = FALSE; 1184 BOOL error = FALSE;
1180 1185
@@ -1226,7 +1231,7 @@ void LLGLState::checkClientArrays(U32 data_mask)
1226 if (!(mask[j] & data_mask)) 1231 if (!(mask[j] & data_mask))
1227 { 1232 {
1228 error = TRUE; 1233 error = TRUE;
1229 llwarns << "GL still has " << label[j] << " enabled." << llendl; 1234 LL_WARNS("RenderState") << "GL still has " << label[j] << " enabled." << LL_ENDL;
1230 } 1235 }
1231 } 1236 }
1232 else 1237 else
@@ -1234,19 +1239,19 @@ void LLGLState::checkClientArrays(U32 data_mask)
1234 if (mask[j] & data_mask) 1239 if (mask[j] & data_mask)
1235 { 1240 {
1236 error = TRUE; 1241 error = TRUE;
1237 llwarns << "GL does not have " << label[j] << " enabled." << llendl; 1242 LL_WARNS("RenderState") << "GL does not have " << label[j] << " enabled." << LL_ENDL;
1238 } 1243 }
1239 } 1244 }
1240 } 1245 }
1241 1246
1242 glClientActiveTextureARB(GL_TEXTURE1_ARB); 1247 glClientActiveTextureARB(GL_TEXTURE1_ARB);
1243 glActiveTextureARB(GL_TEXTURE1_ARB); 1248 gGL.getTexUnit(1)->activate();
1244 if (glIsEnabled(GL_TEXTURE_COORD_ARRAY)) 1249 if (glIsEnabled(GL_TEXTURE_COORD_ARRAY))
1245 { 1250 {
1246 if (!(data_mask & 0x0008)) 1251 if (!(data_mask & 0x0008))
1247 { 1252 {
1248 error = TRUE; 1253 error = TRUE;
1249 llwarns << "GL still has GL_TEXTURE_COORD_ARRAY enabled on channel 1." << llendl; 1254 LL_WARNS("RenderState") << "GL still has GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL;
1250 } 1255 }
1251 } 1256 }
1252 else 1257 else
@@ -1254,7 +1259,7 @@ void LLGLState::checkClientArrays(U32 data_mask)
1254 if (data_mask & 0x0008) 1259 if (data_mask & 0x0008)
1255 { 1260 {
1256 error = TRUE; 1261 error = TRUE;
1257 llwarns << "GL does not have GL_TEXTURE_COORD_ARRAY enabled on channel 1." << llendl; 1262 LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL;
1258 } 1263 }
1259 } 1264 }
1260 1265
@@ -1263,7 +1268,7 @@ void LLGLState::checkClientArrays(U32 data_mask)
1263 if (!(data_mask & 0x0008)) 1268 if (!(data_mask & 0x0008))
1264 { 1269 {
1265 error = TRUE; 1270 error = TRUE;
1266 llwarns << "GL still has GL_TEXTURE_2D enabled on channel 1." << llendl; 1271 LL_WARNS("RenderState") << "GL still has GL_TEXTURE_2D enabled on channel 1." << LL_ENDL;
1267 } 1272 }
1268 } 1273 }
1269 else 1274 else
@@ -1271,26 +1276,25 @@ void LLGLState::checkClientArrays(U32 data_mask)
1271 if (data_mask & 0x0008) 1276 if (data_mask & 0x0008)
1272 { 1277 {
1273 error = TRUE; 1278 error = TRUE;
1274 llwarns << "GL does not have GL_TEXTURE_2D enabled on channel 1." << llendl; 1279 LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_2D enabled on channel 1." << LL_ENDL;
1275 } 1280 }
1276 } 1281 }
1277 1282
1278 glClientActiveTextureARB(GL_TEXTURE0_ARB); 1283 glClientActiveTextureARB(GL_TEXTURE0_ARB);
1279 glActiveTextureARB(GL_TEXTURE0_ARB); 1284 gGL.getTexUnit(0)->activate();
1280 1285
1281 if (error) 1286 if (error)
1282 { 1287 {
1283 LL_GL_ERRS << "GL client array corruption detected." << llendl; 1288 LL_GL_ERRS << "GL client array corruption detected." << LL_ENDL;
1284 } 1289 }
1285#endif
1286} 1290}
1287 1291
1288//============================================================================ 1292///////////////////////////////////////////////////////////////////////
1289 1293
1290LLGLState::LLGLState(LLGLenum state, S32 enabled) 1294LLGLState::LLGLState(LLGLenum state, S32 enabled) :
1295 mState(state), mWasEnabled(FALSE), mIsEnabled(FALSE)
1291{ 1296{
1292 stop_glerror(); 1297 stop_glerror();
1293 mState = state;
1294 if (state) 1298 if (state)
1295 { 1299 {
1296 mWasEnabled = sStateMap[state]; 1300 mWasEnabled = sStateMap[state];
@@ -1330,9 +1334,11 @@ LLGLState::~LLGLState()
1330 stop_glerror(); 1334 stop_glerror();
1331 if (mState) 1335 if (mState)
1332 { 1336 {
1333#if LL_DEBUG_GL 1337 if (gDebugGL)
1334 llassert(sStateMap[mState] == glIsEnabled(mState)); 1338 {
1335#endif 1339 llassert_always(sStateMap[mState] == glIsEnabled(mState));
1340 }
1341
1336 if (mIsEnabled != mWasEnabled) 1342 if (mIsEnabled != mWasEnabled)
1337 { 1343 {
1338 gGL.flush(); 1344 gGL.flush();
@@ -1351,7 +1357,7 @@ LLGLState::~LLGLState()
1351 stop_glerror(); 1357 stop_glerror();
1352} 1358}
1353 1359
1354//============================================================================ 1360////////////////////////////////////////////////////////////////////////////////
1355 1361
1356void LLGLManager::initGLStates() 1362void LLGLManager::initGLStates()
1357{ 1363{
@@ -1359,7 +1365,7 @@ void LLGLManager::initGLStates()
1359 LLGLState::initClass(); 1365 LLGLState::initClass();
1360} 1366}
1361 1367
1362//============================================================================ 1368////////////////////////////////////////////////////////////////////////////////
1363 1369
1364void enable_vertex_weighting(const S32 index) 1370void enable_vertex_weighting(const S32 index)
1365{ 1371{
diff --git a/linden/indra/llwindow/llgl.h b/linden/indra/llwindow/llgl.h
index e8f17bf..2618dca 100644
--- a/linden/indra/llwindow/llgl.h
+++ b/linden/indra/llwindow/llgl.h
@@ -48,9 +48,9 @@
48#include "llglheaders.h" 48#include "llglheaders.h"
49#include "glh/glh_linear.h" 49#include "glh/glh_linear.h"
50 50
51#define LL_DEBUG_GL 1 51extern BOOL gDebugGL;
52 52
53#define LL_GL_ERRS llerrs 53#define LL_GL_ERRS LL_ERRS("RenderState")
54 54
55class LLSD; 55class LLSD;
56 56
@@ -92,7 +92,7 @@ public:
92 BOOL mHasARBEnvCombine; 92 BOOL mHasARBEnvCombine;
93 BOOL mHasCubeMap; 93 BOOL mHasCubeMap;
94 94
95 // Vender specific extensions 95 // Vendor-specific extensions
96 BOOL mIsATI; 96 BOOL mIsATI;
97 BOOL mIsNVIDIA; 97 BOOL mIsNVIDIA;
98 BOOL mIsIntel; 98 BOOL mIsIntel;
@@ -104,18 +104,7 @@ public:
104 // Whether this version of GL is good enough for SL to use 104 // Whether this version of GL is good enough for SL to use
105 BOOL mHasRequirements; 105 BOOL mHasRequirements;
106 106
107#if LL_WINDOWS 107 // Misc extensions
108 BOOL mHasWGLARBPixelFormat;
109#endif // LL_WINDOWS
110
111#if LL_DARWIN
112 // Apple extensions.
113 BOOL mHasAPPLEVertexArrayRange;
114 BOOL mHasAPPLEFence;
115 BOOL mHasAPPLEVAO;
116#endif
117
118 // Misc exitensions
119 BOOL mHasSeparateSpecularColor; 108 BOOL mHasSeparateSpecularColor;
120 109
121 S32 mDriverVersionMajor; 110 S32 mDriverVersionMajor;
@@ -131,6 +120,7 @@ public:
131 void getPixelFormat(); // Get the best pixel format 120 void getPixelFormat(); // Get the best pixel format
132 121
133 LLString getGLInfoString(); 122 LLString getGLInfoString();
123 void printGLInfoString();
134 void getGLInfo(LLSD& info); 124 void getGLInfo(LLSD& info);
135 125
136 // In ALL CAPS 126 // In ALL CAPS
@@ -159,13 +149,13 @@ void assert_glerror();
159 149
160void clear_glerror(); 150void clear_glerror();
161 151
162#if LL_DEBUG 152//#if LL_DEBUG
163# define stop_glerror() assert_glerror() 153# define stop_glerror() assert_glerror()
164# define llglassertok() assert_glerror() 154# define llglassertok() assert_glerror()
165#else 155//#else
166# define stop_glerror() 156//# define stop_glerror()
167# define llglassertok() 157//# define llglassertok()
168#endif 158//#endif
169 159
170#define llglassertok_always() assert_glerror() 160#define llglassertok_always() assert_glerror()
171 161
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp
index 9963228..ffb6393 100644
--- a/linden/indra/llwindow/llwindow.cpp
+++ b/linden/indra/llwindow/llwindow.cpp
@@ -40,8 +40,6 @@
40#include "llwindowwin32.h" 40#include "llwindowwin32.h"
41#elif LL_DARWIN 41#elif LL_DARWIN
42#include "llwindowmacosx.h" 42#include "llwindowmacosx.h"
43#elif LL_LINUX
44#include "llwindowlinux.h" // currently just a dummy wrapper
45#endif 43#endif
46 44
47#include "llerror.h" 45#include "llerror.h"
@@ -287,6 +285,20 @@ void LLWindow::setCallbacks(LLWindowCallbacks *callbacks)
287 } 285 }
288} 286}
289 287
288// static
289std::string LLWindow::getFontListSans()
290{
291#if LL_WINDOWS
292 return LLWindowWin32::getFontListSans();
293#elif LL_DARWIN
294 return LLWindowMacOSX::getFontListSans();
295#elif LL_SDL
296 return LLWindowSDL::getFontListSans();
297#else
298 return "";
299#endif
300}
301
290#define UTF16_IS_HIGH_SURROGATE(U) ((U16)((U) - 0xD800) < 0x0400) 302#define UTF16_IS_HIGH_SURROGATE(U) ((U16)((U) - 0xD800) < 0x0400)
291#define UTF16_IS_LOW_SURROGATE(U) ((U16)((U) - 0xDC00) < 0x0400) 303#define UTF16_IS_LOW_SURROGATE(U) ((U16)((U) - 0xDC00) < 0x0400)
292#define UTF16_SURROGATE_PAIR_TO_UTF32(H,L) (((H) << 10) + (L) - (0xD800 << 10) - 0xDC00 + 0x00010000) 304#define UTF16_SURROGATE_PAIR_TO_UTF32(H,L) (((H) << 10) + (L) - (0xD800 << 10) - 0xDC00 + 0x00010000)
@@ -450,10 +462,6 @@ LLWindow* LLWindowManager::createWindow(
450 new_window = new LLWindowMacOSX( 462 new_window = new LLWindowMacOSX(
451 title, name, x, y, width, height, flags, 463 title, name, x, y, width, height, flags,
452 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples); 464 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth, fsaa_samples);
453#elif LL_LINUX
454 new_window = new LLWindowLinux(
455 title, name, x, y, width, height, flags,
456 fullscreen, clearBg, disable_vsync, use_gl, ignore_pixel_depth);
457#endif 465#endif
458 } 466 }
459 else 467 else
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index 89de5a0..a63c8d5 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -234,6 +234,8 @@ public:
234 virtual void updateLanguageTextInputArea() {} 234 virtual void updateLanguageTextInputArea() {}
235 virtual void interruptLanguageTextInput() {} 235 virtual void interruptLanguageTextInput() {}
236 236
237 static std::string getFontListSans();
238
237protected: 239protected:
238 LLWindow(BOOL fullscreen, U32 flags); 240 LLWindow(BOOL fullscreen, U32 flags);
239 virtual ~LLWindow() {} 241 virtual ~LLWindow() {}
diff --git a/linden/indra/llwindow/llwindowlinux.h b/linden/indra/llwindow/llwindowlinux.h
deleted file mode 100644
index da80fd4..0000000
--- a/linden/indra/llwindow/llwindowlinux.h
+++ /dev/null
@@ -1,119 +0,0 @@
1/**
2 * @file llwindowlinux.h
3 * @brief Linux implementation of LLWindow class
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLWINDOWWIN32_H
33#define LL_LLWINDOWWIN32_H
34
35#include "llwindow.h"
36
37class LLWindowLinux : public LLWindow
38{
39public:
40 /*virtual*/ void show() {};
41 /*virtual*/ void hide() {};
42 /*virtual*/ void close() {};
43 /*virtual*/ BOOL getVisible() {return FALSE;};
44 /*virtual*/ BOOL getMinimized() {return FALSE;};
45 /*virtual*/ BOOL getMaximized() {return FALSE;};
46 /*virtual*/ BOOL maximize() {return FALSE;};
47 /*virtual*/ BOOL getFullscreen() {return FALSE;};
48 /*virtual*/ BOOL getPosition(LLCoordScreen *position) {return FALSE;};
49 /*virtual*/ BOOL getSize(LLCoordScreen *size) {return FALSE;};
50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
53 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
56 /*virtual*/ void showCursor() {};
57 /*virtual*/ void hideCursor() {};
58 /*virtual*/ void showCursorFromMouseMove() {};
59 /*virtual*/ void hideCursorUntilMouseMove() {};
60 /*virtual*/ BOOL isCursorHidden() {return FALSE;};
61 /*virtual*/ void setCursor(ECursorType cursor) {};
62 //virtual ECursorType getCursor() { return mCurrentCursor; };
63 /*virtual*/ void captureMouse() {};
64 /*virtual*/ void releaseMouse() {};
65 /*virtual*/ void setMouseClipping( BOOL b ) {};
66 /*virtual*/ BOOL isClipboardTextAvailable() {return FALSE; };
67 /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst) {return FALSE; };
68 /*virtual*/ BOOL copyTextToClipboard(const LLWString &src) {return FALSE; };
69 /*virtual*/ void flashIcon(F32 seconds) {};
70 /*virtual*/ F32 getGamma() {return 1.0f; };
71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma
72 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma)
73 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
74 /*virtual*/ void gatherInput() {};
75 /*virtual*/ void delayInputProcessing() {};
76 /*virtual*/ void swapBuffers();
77
78 /*virtual*/ LLString getTempFileName() {return LLString(""); };
79 /*virtual*/ void deleteFile( const char* file_name ) {};
80 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; };
81 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; };
82
83
84 // handy coordinate space conversion routines
85 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
86 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; };
87 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) { return FALSE; };
88 /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordWindow *to) { return FALSE; };
89 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordGL *to) { return FALSE; };
90 /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordScreen *to) { return FALSE; };
91
92 /*virtual*/ LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) { return NULL; };
93 /*virtual*/ F32 getNativeAspectRatio() { return 1.0f; };
94 /*virtual*/ F32 getPixelAspectRatio() { return 1.0f; };
95 /*virtual*/ void setNativeAspectRatio(F32 ratio) {}
96
97 //virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b );
98
99 /*virtual*/ void *getPlatformWindow() { return NULL; }
100
101 LLWindowLinux(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
102 U32 flags, BOOL fullscreen, BOOL clearBg,
103 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth);
104 ~LLWindowLinux();
105};
106
107class LLSplashScreenLinux : public LLSplashScreen
108{
109public:
110 LLSplashScreenLinux() {};
111 virtual ~LLSplashScreenLinux() {};
112
113 /*virtual*/ void showImpl() {};
114 /*virtual*/ void updateImpl(const char* mesg) {};
115 /*virtual*/ void hideImpl() {};
116
117};
118
119#endif //LL_LLWINDOWWIN32_H
diff --git a/linden/indra/llwindow/llwindowmacosx-objc.mm b/linden/indra/llwindow/llwindowmacosx-objc.mm
index d2efd77..d4ea2be 100644
--- a/linden/indra/llwindow/llwindowmacosx-objc.mm
+++ b/linden/indra/llwindow/llwindowmacosx-objc.mm
@@ -47,6 +47,8 @@ void setupCocoa()
47 47
48 if(!inited) 48 if(!inited)
49 { 49 {
50 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
51
50 // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor": 52 // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor":
51 // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html 53 // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html
52 54
@@ -55,6 +57,8 @@ void setupCocoa()
55 57
56 // Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image 58 // Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image
57 [[[NSWindow alloc] init] release]; 59 [[[NSWindow alloc] init] release];
60
61 [pool release];
58 } 62 }
59} 63}
60 64
@@ -82,8 +86,10 @@ OSErr releaseImageCursor(CursorRef ref)
82{ 86{
83 if( ref != NULL ) 87 if( ref != NULL )
84 { 88 {
89 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
85 NSCursor *cursor = (NSCursor*)ref; 90 NSCursor *cursor = (NSCursor*)ref;
86 [cursor release]; 91 [cursor release];
92 [pool release];
87 } 93 }
88 else 94 else
89 { 95 {
@@ -97,8 +103,10 @@ OSErr setImageCursor(CursorRef ref)
97{ 103{
98 if( ref != NULL ) 104 if( ref != NULL )
99 { 105 {
106 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
100 NSCursor *cursor = (NSCursor*)ref; 107 NSCursor *cursor = (NSCursor*)ref;
101 [cursor set]; 108 [cursor set];
109 [pool release];
102 } 110 }
103 else 111 else
104 { 112 {
diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp
index f5cc8c6..5ab0ba6 100644
--- a/linden/indra/llwindow/llwindowmacosx.cpp
+++ b/linden/indra/llwindow/llwindowmacosx.cpp
@@ -359,7 +359,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
359 359
360 if (mFullscreen && (mOldDisplayMode == NULL)) 360 if (mFullscreen && (mOldDisplayMode == NULL))
361 { 361 {
362 llinfos << "createContext: setting up fullscreen " << width << "x" << height << llendl; 362 LL_INFOS("Window") << "createContext: setting up fullscreen " << width << "x" << height << LL_ENDL;
363 363
364 // NOTE: The refresh rate will be REPORTED AS 0 for many DVI and notebook displays. Plan accordingly. 364 // NOTE: The refresh rate will be REPORTED AS 0 for many DVI and notebook displays. Plan accordingly.
365 double refresh = getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate); 365 double refresh = getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate);
@@ -380,18 +380,18 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
380 U32 closestWidth = 0; 380 U32 closestWidth = 0;
381 int i; 381 int i;
382 382
383 llinfos << "createContext: searching for a display mode, original aspect is " << mOriginalAspectRatio << llendl; 383 LL_DEBUGS("Window") << "createContext: searching for a display mode, original aspect is " << mOriginalAspectRatio << LL_ENDL;
384 384
385 for(i=0; i < resolutionCount; i++) 385 for(i=0; i < resolutionCount; i++)
386 { 386 {
387 F32 aspect = (F32)resolutionList[i].mWidth / (F32)resolutionList[i].mHeight; 387 F32 aspect = (F32)resolutionList[i].mWidth / (F32)resolutionList[i].mHeight;
388 388
389 llinfos << "createContext: width " << resolutionList[i].mWidth << " height " << resolutionList[i].mHeight << " aspect " << aspect << llendl; 389 LL_DEBUGS("Window") << "createContext: width " << resolutionList[i].mWidth << " height " << resolutionList[i].mHeight << " aspect " << aspect << LL_ENDL;
390 390
391 if( (resolutionList[i].mHeight >= 700) && (resolutionList[i].mHeight <= 800) && 391 if( (resolutionList[i].mHeight >= 700) && (resolutionList[i].mHeight <= 800) &&
392 (fabs(aspect - mOriginalAspectRatio) < fabs(closestAspect - mOriginalAspectRatio))) 392 (fabs(aspect - mOriginalAspectRatio) < fabs(closestAspect - mOriginalAspectRatio)))
393 { 393 {
394 llinfos << " (new closest mode) " << llendl; 394 LL_DEBUGS("Window") << " (new closest mode) " << LL_ENDL;
395 395
396 // This is the closest mode we've seen yet. 396 // This is the closest mode we've seen yet.
397 closestWidth = resolutionList[i].mWidth; 397 closestWidth = resolutionList[i].mWidth;
@@ -437,7 +437,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
437 437
438 if (refDisplayMode) 438 if (refDisplayMode)
439 { 439 {
440 llinfos << "createContext: switching display resolution" << llendl; 440 LL_DEBUGS("Window") << "createContext: switching display resolution" << LL_ENDL;
441 mOldDisplayMode = CGDisplayCurrentMode (mDisplay); 441 mOldDisplayMode = CGDisplayCurrentMode (mDisplay);
442 CGDisplaySwitchToMode (mDisplay, refDisplayMode); 442 CGDisplaySwitchToMode (mDisplay, refDisplayMode);
443 // CFRelease(refDisplayMode); 443 // CFRelease(refDisplayMode);
@@ -452,11 +452,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
452 mFullscreenBits = CGDisplayBitsPerPixel(mDisplay); 452 mFullscreenBits = CGDisplayBitsPerPixel(mDisplay);
453 mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate)); 453 mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate));
454 454
455 llinfos << "Running at " << mFullscreenWidth 455 LL_INFOS("Window") << "Running at " << mFullscreenWidth
456 << "x" << mFullscreenHeight 456 << "x" << mFullscreenHeight
457 << "x" << mFullscreenBits 457 << "x" << mFullscreenBits
458 << " @ " << mFullscreenRefresh 458 << " @ " << mFullscreenRefresh
459 << llendl; 459 << LL_ENDL;
460 } 460 }
461 else 461 else
462 { 462 {
@@ -480,7 +480,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
480 //int displayHeight = CGDisplayPixelsHigh(mDisplay); 480 //int displayHeight = CGDisplayPixelsHigh(mDisplay);
481 //const int menuBarPlusTitleBar = 44; // Ugly magic number. 481 //const int menuBarPlusTitleBar = 44; // Ugly magic number.
482 482
483 llinfos << "createContext: creating window" << llendl; 483 LL_DEBUGS("Window") << "createContext: creating window" << LL_ENDL;
484 484
485 window_rect.left = (long) x; 485 window_rect.left = (long) x;
486 window_rect.right = (long) x + width; 486 window_rect.right = (long) x + width;
@@ -534,7 +534,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
534 err = NewTSMDocument(1, types, &mTSMDocument, 0); 534 err = NewTSMDocument(1, types, &mTSMDocument, 0);
535 if (err != noErr) 535 if (err != noErr)
536 { 536 {
537 llwarns << "createContext: couldn't create a TSMDocument (" << err << ")" << llendl; 537 LL_WARNS("Window") << "createContext: couldn't create a TSMDocument (" << err << ")" << LL_ENDL;
538 } 538 }
539 if (mTSMDocument) 539 if (mTSMDocument)
540 { 540 {
@@ -575,7 +575,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
575 AGL_NONE 575 AGL_NONE
576 }; 576 };
577 577
578 llinfos << "createContext: creating fullscreen pixelformat" << llendl; 578 LL_DEBUGS("Window") << "createContext: creating fullscreen pixelformat" << LL_ENDL;
579 579
580 GDHandle gdhDisplay = NULL; 580 GDHandle gdhDisplay = NULL;
581 err = DMGetGDeviceByDisplayID ((DisplayIDType)mDisplay, &gdhDisplay, false); 581 err = DMGetGDeviceByDisplayID ((DisplayIDType)mDisplay, &gdhDisplay, false);
@@ -602,7 +602,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
602 AGL_NONE 602 AGL_NONE
603 }; 603 };
604 604
605 llinfos << "createContext: creating windowed pixelformat" << llendl; 605 LL_DEBUGS("Window") << "createContext: creating windowed pixelformat" << LL_ENDL;
606 606
607 mPixelFormat = aglChoosePixelFormat(NULL, 0, windowedAttrib); 607 mPixelFormat = aglChoosePixelFormat(NULL, 0, windowedAttrib);
608 608
@@ -622,7 +622,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
622 622
623 if(mPixelFormat) 623 if(mPixelFormat)
624 { 624 {
625 llinfos << "createContext: creating GL context" << llendl; 625 LL_DEBUGS("Window") << "createContext: creating GL context" << LL_ENDL;
626 mContext = aglCreateContext(mPixelFormat, NULL); 626 mContext = aglCreateContext(mPixelFormat, NULL);
627 } 627 }
628 628
@@ -670,7 +670,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
670 { 670 {
671 // We successfully captured the display. Use a fullscreen drawable 671 // We successfully captured the display. Use a fullscreen drawable
672 672
673 llinfos << "createContext: attaching fullscreen drawable" << llendl; 673 LL_DEBUGS("Window") << "createContext: attaching fullscreen drawable" << LL_ENDL;
674 674
675#if CAPTURE_ALL_DISPLAYS 675#if CAPTURE_ALL_DISPLAYS
676 // Capture all displays (may want to do this for final build) 676 // Capture all displays (may want to do this for final build)
@@ -688,7 +688,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
688 } 688 }
689 else if(!mFullscreen && (mWindow != NULL)) 689 else if(!mFullscreen && (mWindow != NULL))
690 { 690 {
691 llinfos << "createContext: attaching windowed drawable" << llendl; 691 LL_DEBUGS("Window") << "createContext: attaching windowed drawable" << LL_ENDL;
692 692
693 // We created a window. Use it as the drawable. 693 // We created a window. Use it as the drawable.
694 if(!aglSetDrawable(mContext, GetWindowPort (mWindow))) 694 if(!aglSetDrawable(mContext, GetWindowPort (mWindow)))
@@ -705,7 +705,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
705 705
706 if(mContext != NULL) 706 if(mContext != NULL)
707 { 707 {
708 llinfos << "createContext: setting current context" << llendl; 708 LL_DEBUGS("Window") << "createContext: setting current context" << LL_ENDL;
709 709
710 if (!aglSetCurrentContext(mContext)) 710 if (!aglSetCurrentContext(mContext))
711 { 711 {
@@ -759,11 +759,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
759 return FALSE; 759 return FALSE;
760 } 760 }
761 761
762 llinfos << "GL buffer: Color Bits " << S32(colorBits) 762 LL_INFOS("GLInit") << "GL buffer: Color Bits " << S32(colorBits)
763 << " Alpha Bits " << S32(alphaBits) 763 << " Alpha Bits " << S32(alphaBits)
764 << " Depth Bits " << S32(depthBits) 764 << " Depth Bits " << S32(depthBits)
765 << " Stencil Bits" << S32(stencilBits) 765 << " Stencil Bits" << S32(stencilBits)
766 << llendl; 766 << LL_ENDL;
767 767
768 if (colorBits < 32) 768 if (colorBits < 32)
769 { 769 {
@@ -798,12 +798,12 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
798 GLint frames_per_swap = 0; 798 GLint frames_per_swap = 0;
799 if (disable_vsync) 799 if (disable_vsync)
800 { 800 {
801 llinfos << "Disabling vertical sync" << llendl; 801 LL_DEBUGS("GLInit") << "Disabling vertical sync" << LL_ENDL;
802 frames_per_swap = 0; 802 frames_per_swap = 0;
803 } 803 }
804 else 804 else
805 { 805 {
806 llinfos << "Keeping vertical sync" << llendl; 806 LL_DEBUGS("GLinit") << "Keeping vertical sync" << LL_ENDL;
807 frames_per_swap = 1; 807 frames_per_swap = 1;
808 } 808 }
809 aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap); 809 aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap);
@@ -818,11 +818,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
818 818
819 if (cgl_err != kCGLNoError ) 819 if (cgl_err != kCGLNoError )
820 { 820 {
821 llinfos << "Multi-threaded OpenGL not available." << llendl; 821 LL_DEBUGS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
822 } 822 }
823 else 823 else
824 { 824 {
825 llinfos << "Multi-threaded OpenGL enabled." << llendl; 825 LL_DEBUGS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
826 } 826 }
827 } 827 }
828 828
@@ -869,11 +869,11 @@ BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, const LLCoordScreen &size, B
869 mFullscreenBits = CGDisplayBitsPerPixel(mDisplay); 869 mFullscreenBits = CGDisplayBitsPerPixel(mDisplay);
870 mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate)); 870 mFullscreenRefresh = llround(getDictDouble (CGDisplayCurrentMode (mDisplay), kCGDisplayRefreshRate));
871 871
872 llinfos << "Switched resolution to " << mFullscreenWidth 872 LL_INFOS("Window") << "Switched resolution to " << mFullscreenWidth
873 << "x" << mFullscreenHeight 873 << "x" << mFullscreenHeight
874 << "x" << mFullscreenBits 874 << "x" << mFullscreenBits
875 << " @ " << mFullscreenRefresh 875 << " @ " << mFullscreenRefresh
876 << llendl; 876 << LL_ENDL;
877 877
878 // Update the GL context to the new screen size 878 // Update the GL context to the new screen size
879 if (!aglUpdateContext(mContext)) 879 if (!aglUpdateContext(mContext))
@@ -943,7 +943,7 @@ void LLWindowMacOSX::destroyContext()
943 // Unhook the GL context from any drawable it may have 943 // Unhook the GL context from any drawable it may have
944 if(mContext != NULL) 944 if(mContext != NULL)
945 { 945 {
946 llinfos << "destroyContext: unhooking drawable " << llendl; 946 LL_DEBUGS("Window") << "destroyContext: unhooking drawable " << LL_ENDL;
947 947
948 aglSetCurrentContext (NULL); 948 aglSetCurrentContext (NULL);
949 aglSetDrawable(mContext, NULL); 949 aglSetDrawable(mContext, NULL);
@@ -952,7 +952,7 @@ void LLWindowMacOSX::destroyContext()
952 // Make sure the display resolution gets restored 952 // Make sure the display resolution gets restored
953 if(mOldDisplayMode != NULL) 953 if(mOldDisplayMode != NULL)
954 { 954 {
955 llinfos << "destroyContext: restoring display resolution " << llendl; 955 LL_DEBUGS("Window") << "destroyContext: restoring display resolution " << LL_ENDL;
956 956
957 CGDisplaySwitchToMode (mDisplay, mOldDisplayMode); 957 CGDisplaySwitchToMode (mDisplay, mOldDisplayMode);
958 958
@@ -978,7 +978,7 @@ void LLWindowMacOSX::destroyContext()
978 // Clean up the pixel format 978 // Clean up the pixel format
979 if(mPixelFormat != NULL) 979 if(mPixelFormat != NULL)
980 { 980 {
981 llinfos << "destroyContext: destroying pixel format " << llendl; 981 LL_DEBUGS("Window") << "destroyContext: destroying pixel format " << LL_ENDL;
982 aglDestroyPixelFormat(mPixelFormat); 982 aglDestroyPixelFormat(mPixelFormat);
983 mPixelFormat = NULL; 983 mPixelFormat = NULL;
984 } 984 }
@@ -986,14 +986,14 @@ void LLWindowMacOSX::destroyContext()
986 // Remove any Carbon Event handlers we installed 986 // Remove any Carbon Event handlers we installed
987 if(mGlobalHandlerRef != NULL) 987 if(mGlobalHandlerRef != NULL)
988 { 988 {
989 llinfos << "destroyContext: removing global event handler" << llendl; 989 LL_DEBUGS("Window") << "destroyContext: removing global event handler" << LL_ENDL;
990 RemoveEventHandler(mGlobalHandlerRef); 990 RemoveEventHandler(mGlobalHandlerRef);
991 mGlobalHandlerRef = NULL; 991 mGlobalHandlerRef = NULL;
992 } 992 }
993 993
994 if(mWindowHandlerRef != NULL) 994 if(mWindowHandlerRef != NULL)
995 { 995 {
996 llinfos << "destroyContext: removing window event handler" << llendl; 996 LL_DEBUGS("Window") << "destroyContext: removing window event handler" << LL_ENDL;
997 RemoveEventHandler(mWindowHandlerRef); 997 RemoveEventHandler(mWindowHandlerRef);
998 mWindowHandlerRef = NULL; 998 mWindowHandlerRef = NULL;
999 } 999 }
@@ -1001,7 +1001,7 @@ void LLWindowMacOSX::destroyContext()
1001 // Cleanup any TSM document we created. 1001 // Cleanup any TSM document we created.
1002 if(mTSMDocument != NULL) 1002 if(mTSMDocument != NULL)
1003 { 1003 {
1004 llinfos << "destroyContext: deleting TSM document" << llendl; 1004 LL_DEBUGS("Window") << "destroyContext: deleting TSM document" << LL_ENDL;
1005 DeactivateTSMDocument(mTSMDocument); 1005 DeactivateTSMDocument(mTSMDocument);
1006 DeleteTSMDocument(mTSMDocument); 1006 DeleteTSMDocument(mTSMDocument);
1007 mTSMDocument = NULL; 1007 mTSMDocument = NULL;
@@ -1010,7 +1010,7 @@ void LLWindowMacOSX::destroyContext()
1010 // Close the window 1010 // Close the window
1011 if(mWindow != NULL) 1011 if(mWindow != NULL)
1012 { 1012 {
1013 llinfos << "destroyContext: disposing window" << llendl; 1013 LL_DEBUGS("Window") << "destroyContext: disposing window" << LL_ENDL;
1014 DisposeWindow(mWindow); 1014 DisposeWindow(mWindow);
1015 mWindow = NULL; 1015 mWindow = NULL;
1016 } 1016 }
@@ -1018,7 +1018,7 @@ void LLWindowMacOSX::destroyContext()
1018 // Clean up the GL context 1018 // Clean up the GL context
1019 if(mContext != NULL) 1019 if(mContext != NULL)
1020 { 1020 {
1021 llinfos << "destroyContext: destroying GL context" << llendl; 1021 LL_DEBUGS("Window") << "destroyContext: destroying GL context" << LL_ENDL;
1022 aglDestroyContext(mContext); 1022 aglDestroyContext(mContext);
1023 mContext = NULL; 1023 mContext = NULL;
1024 } 1024 }
@@ -3394,4 +3394,13 @@ void LLWindowMacOSX::interruptLanguageTextInput()
3394 // Well, if Apple's TSM document is correct, we don't. 3394 // Well, if Apple's TSM document is correct, we don't.
3395} 3395}
3396 3396
3397//static
3398std::string LLWindowMacOSX::getFontListSans()
3399{
3400 // This is a fairly complete Japanese font that ships with Mac OS X.
3401 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
3402 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
3403 return "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf";
3404}
3405
3397#endif // LL_DARWIN 3406#endif // LL_DARWIN
diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h
index 1edb218..d8a0788 100644
--- a/linden/indra/llwindow/llwindowmacosx.h
+++ b/linden/indra/llwindow/llwindowmacosx.h
@@ -116,6 +116,8 @@ public:
116 /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b); 116 /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b);
117 /*virtual*/ void interruptLanguageTextInput(); 117 /*virtual*/ void interruptLanguageTextInput();
118 118
119 static std::string getFontListSans();
120
119protected: 121protected:
120 LLWindowMacOSX( 122 LLWindowMacOSX(
121 char *title, char *name, int x, int y, int width, int height, U32 flags, 123 char *title, char *name, int x, int y, int width, int height, U32 flags,
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index d9dc040..0d1d622 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -39,6 +39,7 @@
39#include "llgl.h" 39#include "llgl.h"
40#include "llstring.h" 40#include "llstring.h"
41#include "lldir.h" 41#include "lldir.h"
42#include "llfindlocale.h"
42 43
43#include "llglheaders.h" 44#include "llglheaders.h"
44 45
@@ -51,6 +52,10 @@ extern "C" {
51#include <locale.h> 52#include <locale.h>
52#endif // LL_GTK 53#endif // LL_GTK
53 54
55extern "C" {
56# include "fontconfig/fontconfig.h"
57}
58
54#if LL_LINUX || LL_SOLARIS 59#if LL_LINUX || LL_SOLARIS
55// not necessarily available on random SDL platforms, so #if LL_LINUX 60// not necessarily available on random SDL platforms, so #if LL_LINUX
56// for execv(), waitpid(), fork() 61// for execv(), waitpid(), fork()
@@ -2030,7 +2035,8 @@ void LLWindowSDL::gatherInput()
2030 // the locale to protect it, as exotic/non-C locales 2035 // the locale to protect it, as exotic/non-C locales
2031 // causes our code lots of general critical weirdness 2036 // causes our code lots of general critical weirdness
2032 // and crashness. (SL-35450) 2037 // and crashness. (SL-35450)
2033 std::string saved_locale = setlocale(LC_ALL, NULL); 2038 static std::string saved_locale;
2039 saved_locale = ll_safe_string(setlocale(LC_ALL, NULL));
2034 2040
2035 // Pump until we've nothing left to do or passed 1/15th of a 2041 // Pump until we've nothing left to do or passed 1/15th of a
2036 // second pumping for this frame. 2042 // second pumping for this frame.
@@ -2751,8 +2757,8 @@ void spawn_web_browser(const char* escaped_url)
2751# endif // LL_X11 2757# endif // LL_X11
2752 2758
2753 std::string cmd; 2759 std::string cmd;
2754 cmd = gDirUtilp->getAppRODataDir().c_str(); 2760 cmd = gDirUtilp->getAppRODataDir();
2755 cmd += gDirUtilp->getDirDelimiter().c_str(); 2761 cmd += gDirUtilp->getDirDelimiter();
2756 cmd += "launch_url.sh"; 2762 cmd += "launch_url.sh";
2757 char* const argv[] = {(char*)cmd.c_str(), (char*)escaped_url, NULL}; 2763 char* const argv[] = {(char*)cmd.c_str(), (char*)escaped_url, NULL};
2758 2764
@@ -2829,4 +2835,90 @@ void LLWindowSDL::bringToFront()
2829#endif // LL_X11 2835#endif // LL_X11
2830} 2836}
2831 2837
2838//static
2839std::string LLWindowSDL::getFontListSans()
2840{
2841 // Use libfontconfig to find us a nice ordered list of fallback fonts
2842 // specific to this system.
2843 std::string final_fallback("/usr/share/fonts/truetype/kochi/kochi-gothic.ttf");
2844 // Our 'ideal' font properties which define the sorting results.
2845 // slant=0 means Roman, index=0 means the first face in a font file
2846 // (the one we actually use), weight=80 means medium weight,
2847 // spacing=0 means proportional spacing.
2848 std::string sort_order("slant=0:index=0:weight=80:spacing=0");
2849 // elide_unicode_coverage removes fonts from the list whose unicode
2850 // range is covered by fonts earlier in the list. This usually
2851 // removes ~90% of the fonts as redundant (which is great because
2852 // the font list can be huge), but might unnecessarily reduce the
2853 // renderable range if for some reason our FreeType actually fails
2854 // to use some of the fonts we want it to.
2855 const bool elide_unicode_coverage = true;
2856 std::string rtn;
2857 FcFontSet *fs = NULL;
2858 FcPattern *sortpat = NULL;
2859 int font_count = 0;
2860
2861 llinfos << "Getting system font list from FontConfig..." << llendl;
2862
2863 // If the user has a system-wide language preference, then favor
2864 // fonts from that language group. This doesn't affect the types
2865 // of languages that can be displayed, but ensures that their
2866 // preferred language is rendered from a single consistent font where
2867 // possible.
2868 FL_Locale *locale = NULL;
2869 FL_Success success = FL_FindLocale(&locale, FL_MESSAGES);
2870 if (success != 0)
2871 {
2872 if (success >= 2 && locale->lang) // confident!
2873 {
2874 llinfos << "Preferring fonts of language: "
2875 << locale->lang
2876 << llendl;
2877 sort_order = "lang=" + std::string(locale->lang) + ":"
2878 + sort_order;
2879 }
2880 FL_FreeLocale(&locale);
2881 }
2882
2883 if (!FcInit())
2884 {
2885 llwarns << "FontConfig failed to initialize." << llendl;
2886 return final_fallback;
2887 }
2888
2889 sortpat = FcNameParse((FcChar8*) sort_order.c_str());
2890 if (sortpat)
2891 {
2892 // Sort the list of system fonts from most-to-least-desirable.
2893 fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
2894 NULL, NULL);
2895 FcPatternDestroy(sortpat);
2896 }
2897
2898 if (fs)
2899 {
2900 // Get the full pathnames to the fonts, where available,
2901 // which is what we really want.
2902 int i;
2903 for (i=0; i<fs->nfont; ++i)
2904 {
2905 FcChar8 *filename;
2906 if (FcResultMatch == FcPatternGetString(fs->fonts[i],
2907 FC_FILE, 0,
2908 &filename)
2909 && filename)
2910 {
2911 rtn += std::string((const char*)filename)+";";
2912 ++font_count;
2913 }
2914 }
2915 FcFontSetDestroy (fs);
2916 }
2917
2918 lldebugs << "Using font list: " << rtn << llendl;
2919 llinfos << "Using " << font_count << " system font(s)." << llendl;
2920
2921 return rtn + final_fallback;
2922}
2923
2832#endif // LL_SDL 2924#endif // LL_SDL
diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h
index d1b2b77..5aed4e6 100644
--- a/linden/indra/llwindow/llwindowsdl.h
+++ b/linden/indra/llwindow/llwindowsdl.h
@@ -120,6 +120,8 @@ public:
120 /*virtual*/ void *getPlatformWindow(); 120 /*virtual*/ void *getPlatformWindow();
121 /*virtual*/ void bringToFront(); 121 /*virtual*/ void bringToFront();
122 122
123 static std::string getFontListSans();
124
123 // Not great that these are public, but they have to be accessible 125 // Not great that these are public, but they have to be accessible
124 // by non-class code and it's better than making them global. 126 // by non-class code and it's better than making them global.
125#if LL_X11 127#if LL_X11
@@ -154,7 +156,6 @@ protected:
154 156
155 BOOL shouldPostQuit() { return mPostQuit; } 157 BOOL shouldPostQuit() { return mPostQuit; }
156 158
157
158protected: 159protected:
159 // 160 //
160 // Platform specific methods 161 // Platform specific methods
diff --git a/linden/indra/llwindow/llwindowsolaris.h b/linden/indra/llwindow/llwindowsolaris.h
deleted file mode 100644
index 7a271c0..0000000
--- a/linden/indra/llwindow/llwindowsolaris.h
+++ /dev/null
@@ -1,121 +0,0 @@
1/**
2 * @file fmodwrapper.cpp
3 * @brief dummy source file for building a shared library to wrap libfmod.a
4 *
5 * $LicenseInfo:firstyear=2005&license=viewergpl$
6 *
7 * Copyright (c) 2005-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLWINDOWSOLARIS_H
33#define LL_LLWINDOWSOLARIS_H
34
35#include "llwindow.h"
36
37class LLWindowSolaris : public LLWindow
38{
39public:
40 /*virtual*/ void show() {};
41 /*virtual*/ void hide() {};
42 /*virtual*/ void close() {};
43 /*virtual*/ BOOL getVisible() {return FALSE;};
44 /*virtual*/ BOOL getMinimized() {return FALSE;};
45 /*virtual*/ BOOL getMaximized() {return FALSE;};
46 /*virtual*/ BOOL maximize() {return FALSE;};
47 /*virtual*/ BOOL getFullscreen() {return FALSE;};
48 /*virtual*/ BOOL getPosition(LLCoordScreen *position) {return FALSE;};
49 /*virtual*/ BOOL getSize(LLCoordScreen *size) {return FALSE;};
50 /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
51 /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
52 /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;};
53 /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
54 /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
55 /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
56 /*virtual*/ void showCursor() {};
57 /*virtual*/ void hideCursor() {};
58 /*virtual*/ void showCursorFromMouseMove() {};
59 /*virtual*/ void hideCursorUntilMouseMove() {};
60 /*virtual*/ BOOL isCursorHidden() {return FALSE;};
61 /*virtual*/ void setCursor(ECursorType cursor) {};
62 //virtual ECursorType getCursor() { return mCurrentCursor; };
63 /*virtual*/ void captureMouse() {};
64 /*virtual*/ void releaseMouse() {};
65 /*virtual*/ void setMouseClipping( BOOL b ) {};
66 /*virtual*/ BOOL isClipboardTextAvailable() {return FALSE; };
67 /*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst) {return FALSE; };
68 /*virtual*/ BOOL copyTextToClipboard(const LLWString &src) {return FALSE; };
69 /*virtual*/ void flashIcon(F32 seconds) {};
70 /*virtual*/ F32 getGamma() {return 1.0f; };
71 /*virtual*/ BOOL setGamma(const F32 gamma) {return FALSE; }; // Set the gamma
72 /*virtual*/ U32 getFSAASamples() { return 0; }
73 /*virtual*/ void setFSAASamples(const U32 samples) { }
74 /*virtual*/ BOOL restoreGamma() {return FALSE; }; // Restore original gamma table (before updating gamma)
75 //virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
76 /*virtual*/ void gatherInput() {};
77 /*virtual*/ void delayInputProcessing() {};
78 /*virtual*/ void swapBuffers();
79
80 /*virtual*/ LLString getTempFileName() {return LLString(""); };
81 /*virtual*/ void deleteFile( const char* file_name ) {};
82 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; };
83 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; };
84
85
86 // handy coordinate space conversion routines
87 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
88 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; };
89 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) { return FALSE; };
90 /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordWindow *to) { return FALSE; };
91 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordGL *to) { return FALSE; };
92 /*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordScreen *to) { return FALSE; };
93
94 /*virtual*/ LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) { return NULL; };
95 /*virtual*/ F32 getNativeAspectRatio() { return 1.0f; };
96 /*virtual*/ F32 getPixelAspectRatio() { return 1.0f; };
97 /*virtual*/ void setNativeAspectRatio(F32 ratio) {}
98
99 //virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b );
100
101 /*virtual*/ void *getPlatformWindow() { return NULL; }
102
103 LLWindowSolaris(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
104 U32 flags, BOOL fullscreen, BOOL clearBg,
105 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth);
106 ~LLWindowSolaris();
107};
108
109class LLSplashScreenLinux : public LLSplashScreen
110{
111public:
112 LLSplashScreenLinux() {};
113 virtual ~LLSplashScreenLinux() {};
114
115 /*virtual*/ void showImpl() {};
116 /*virtual*/ void updateImpl(const char* mesg) {};
117 /*virtual*/ void hideImpl() {};
118
119};
120
121#endif //LL_LLWINDOWSOLARIS_H
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index 9963493..f2a2727 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -84,7 +84,7 @@ LLW32MsgCallback gAsyncMsgCallback = NULL;
84 84
85void show_window_creation_error(const char* title) 85void show_window_creation_error(const char* title)
86{ 86{
87 llwarns << title << llendl; 87 LL_WARNS("Window") << title << LL_ENDL;
88} 88}
89 89
90//static 90//static
@@ -534,7 +534,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
534 534
535 if (closest_refresh == 0) 535 if (closest_refresh == 0)
536 { 536 {
537 llwarns << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << llendl; 537 LL_WARNS("Window") << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << LL_ENDL;
538 success = FALSE; 538 success = FALSE;
539 } 539 }
540 540
@@ -557,11 +557,11 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
557 mFullscreenBits = dev_mode.dmBitsPerPel; 557 mFullscreenBits = dev_mode.dmBitsPerPel;
558 mFullscreenRefresh = dev_mode.dmDisplayFrequency; 558 mFullscreenRefresh = dev_mode.dmDisplayFrequency;
559 559
560 llinfos << "Running at " << dev_mode.dmPelsWidth 560 LL_INFOS("Window") << "Running at " << dev_mode.dmPelsWidth
561 << "x" << dev_mode.dmPelsHeight 561 << "x" << dev_mode.dmPelsHeight
562 << "x" << dev_mode.dmBitsPerPel 562 << "x" << dev_mode.dmBitsPerPel
563 << " @ " << dev_mode.dmDisplayFrequency 563 << " @ " << dev_mode.dmDisplayFrequency
564 << llendl; 564 << LL_ENDL;
565 } 565 }
566 else 566 else
567 { 567 {
@@ -576,7 +576,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
576 OSMessageBox(error, "Error", OSMB_OK); 576 OSMessageBox(error, "Error", OSMB_OK);
577 } 577 }
578 } 578 }
579 579
580 // TODO: add this after resolving _WIN32_WINNT issue 580 // TODO: add this after resolving _WIN32_WINNT issue
581 // if (!fullscreen) 581 // if (!fullscreen)
582 // { 582 // {
@@ -588,7 +588,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
588 // TrackMouseEvent( &track_mouse_event ); 588 // TrackMouseEvent( &track_mouse_event );
589 // } 589 // }
590 590
591 591
592 //----------------------------------------------------------------------- 592 //-----------------------------------------------------------------------
593 // Create GL drawing context 593 // Create GL drawing context
594 //----------------------------------------------------------------------- 594 //-----------------------------------------------------------------------
@@ -657,7 +657,7 @@ void LLWindowWin32::restore()
657// Usually called from LLWindowManager::destroyWindow() 657// Usually called from LLWindowManager::destroyWindow()
658void LLWindowWin32::close() 658void LLWindowWin32::close()
659{ 659{
660 llinfos << "Closing LLWindowWin32" << llendl; 660 LL_DEBUGS("Window") << "Closing LLWindowWin32" << LL_ENDL;
661 // Is window is already closed? 661 // Is window is already closed?
662 if (!mWindowHandle) 662 if (!mWindowHandle)
663 { 663 {
@@ -675,20 +675,20 @@ void LLWindowWin32::close()
675 } 675 }
676 676
677 // Clean up remaining GL state 677 // Clean up remaining GL state
678 llinfos << "Shutting down GL" << llendl; 678 LL_DEBUGS("Window") << "Shutting down GL" << LL_ENDL;
679 gGLManager.shutdownGL(); 679 gGLManager.shutdownGL();
680 680
681 llinfos << "Releasing Context" << llendl; 681 LL_DEBUGS("Window") << "Releasing Context" << LL_ENDL;
682 if (mhRC) 682 if (mhRC)
683 { 683 {
684 if (!wglMakeCurrent(NULL, NULL)) 684 if (!wglMakeCurrent(NULL, NULL))
685 { 685 {
686 llwarns << "Release of DC and RC failed" << llendl; 686 LL_WARNS("Window") << "Release of DC and RC failed" << LL_ENDL;
687 } 687 }
688 688
689 if (!wglDeleteContext(mhRC)) 689 if (!wglDeleteContext(mhRC))
690 { 690 {
691 llwarns << "Release of rendering context failed" << llendl; 691 LL_WARNS("Window") << "Release of rendering context failed" << LL_ENDL;
692 } 692 }
693 693
694 mhRC = NULL; 694 mhRC = NULL;
@@ -699,11 +699,11 @@ void LLWindowWin32::close()
699 699
700 if (mhDC && !ReleaseDC(mWindowHandle, mhDC)) 700 if (mhDC && !ReleaseDC(mWindowHandle, mhDC))
701 { 701 {
702 llwarns << "Release of ghDC failed" << llendl; 702 LL_WARNS("Window") << "Release of ghDC failed" << LL_ENDL;
703 mhDC = NULL; 703 mhDC = NULL;
704 } 704 }
705 705
706 llinfos << "Destroying Window" << llendl; 706 LL_DEBUGS("Window") << "Destroying Window" << LL_ENDL;
707 707
708 // Don't process events in our mainWindowProc any longer. 708 // Don't process events in our mainWindowProc any longer.
709 SetWindowLong(mWindowHandle, GWL_USERDATA, NULL); 709 SetWindowLong(mWindowHandle, GWL_USERDATA, NULL);
@@ -866,12 +866,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
866 { 866 {
867 if (!wglMakeCurrent(NULL, NULL)) 867 if (!wglMakeCurrent(NULL, NULL))
868 { 868 {
869 llwarns << "Release of DC and RC failed" << llendl; 869 LL_WARNS("Window") << "Release of DC and RC failed" << LL_ENDL;
870 } 870 }
871 871
872 if (!wglDeleteContext(mhRC)) 872 if (!wglDeleteContext(mhRC))
873 { 873 {
874 llwarns << "Release of rendering context failed" << llendl; 874 LL_WARNS("Window") << "Release of rendering context failed" << LL_ENDL;
875 } 875 }
876 876
877 mhRC = NULL; 877 mhRC = NULL;
@@ -905,7 +905,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
905 905
906 if (closest_refresh == 0) 906 if (closest_refresh == 0)
907 { 907 {
908 llwarns << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << llendl; 908 LL_WARNS("Window") << "Couldn't find display mode " << width << " by " << height << " at " << BITS_PER_PIXEL << " bits per pixel" << LL_ENDL;
909 return FALSE; 909 return FALSE;
910 } 910 }
911 911
@@ -927,11 +927,11 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
927 mFullscreenBits = dev_mode.dmBitsPerPel; 927 mFullscreenBits = dev_mode.dmBitsPerPel;
928 mFullscreenRefresh = dev_mode.dmDisplayFrequency; 928 mFullscreenRefresh = dev_mode.dmDisplayFrequency;
929 929
930 llinfos << "Running at " << dev_mode.dmPelsWidth 930 LL_INFOS("Window") << "Running at " << dev_mode.dmPelsWidth
931 << "x" << dev_mode.dmPelsHeight 931 << "x" << dev_mode.dmPelsHeight
932 << "x" << dev_mode.dmBitsPerPel 932 << "x" << dev_mode.dmBitsPerPel
933 << " @ " << dev_mode.dmDisplayFrequency 933 << " @ " << dev_mode.dmDisplayFrequency
934 << llendl; 934 << LL_ENDL;
935 935
936 window_rect.left = (long) 0; 936 window_rect.left = (long) 0;
937 window_rect.right = (long) width; // Windows GDI rects don't include rightmost pixel 937 window_rect.right = (long) width; // Windows GDI rects don't include rightmost pixel
@@ -952,8 +952,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
952 mFullscreenBits = -1; 952 mFullscreenBits = -1;
953 mFullscreenRefresh = -1; 953 mFullscreenRefresh = -1;
954 954
955 llinfos << "Unable to run fullscreen at " << width << "x" << height << llendl; 955 LL_INFOS("Window") << "Unable to run fullscreen at " << width << "x" << height << LL_ENDL;
956 llinfos << "Running in window." << llendl;
957 return FALSE; 956 return FALSE;
958 } 957 }
959 } 958 }
@@ -1146,7 +1145,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1146 { 1145 {
1147 if (end_attrib > 0) 1146 if (end_attrib > 0)
1148 { 1147 {
1149 llinfos << "No valid pixel format for " << mFSAASamples << "x anti-aliasing." << llendl; 1148 LL_INFOS("Window") << "No valid pixel format for " << mFSAASamples << "x anti-aliasing." << LL_ENDL;
1150 attrib_list[end_attrib] = 0; 1149 attrib_list[end_attrib] = 0;
1151 1150
1152 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); 1151 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
@@ -1160,7 +1159,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1160 1159
1161 if (!num_formats) 1160 if (!num_formats)
1162 { 1161 {
1163 llinfos << "No 32 bit z-buffer, trying 24 bits instead" << llendl; 1162 LL_INFOS("Window") << "No 32 bit z-buffer, trying 24 bits instead" << LL_ENDL;
1164 // Try 24-bit format 1163 // Try 24-bit format
1165 attrib_list[1] = 24; 1164 attrib_list[1] = 24;
1166 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); 1165 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
@@ -1173,7 +1172,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1173 1172
1174 if (!num_formats) 1173 if (!num_formats)
1175 { 1174 {
1176 llwarns << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << llendl; 1175 LL_WARNS("Window") << "Couldn't get 24 bit z-buffer,trying 16 bits instead!" << LL_ENDL;
1177 attrib_list[1] = 16; 1176 attrib_list[1] = 16;
1178 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats); 1177 BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
1179 if (!result || !num_formats) 1178 if (!result || !num_formats)
@@ -1185,7 +1184,7 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1185 } 1184 }
1186 } 1185 }
1187 1186
1188 llinfos << "Choosing pixel formats: " << num_formats << " pixel formats returned" << llendl; 1187 LL_INFOS("Window") << "Choosing pixel formats: " << num_formats << " pixel formats returned" << LL_ENDL;
1189 } 1188 }
1190 1189
1191 pixel_format = pixel_formats[0]; 1190 pixel_format = pixel_formats[0];
@@ -1241,26 +1240,26 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1241 { 1240 {
1242 case WGL_SWAP_EXCHANGE_ARB: 1241 case WGL_SWAP_EXCHANGE_ARB:
1243 mSwapMethod = SWAP_METHOD_EXCHANGE; 1242 mSwapMethod = SWAP_METHOD_EXCHANGE;
1244 llinfos << "Swap Method: Exchange" << llendl; 1243 LL_DEBUGS("Window") << "Swap Method: Exchange" << LL_ENDL;
1245 break; 1244 break;
1246 case WGL_SWAP_COPY_ARB: 1245 case WGL_SWAP_COPY_ARB:
1247 mSwapMethod = SWAP_METHOD_COPY; 1246 mSwapMethod = SWAP_METHOD_COPY;
1248 llinfos << "Swap Method: Copy" << llendl; 1247 LL_DEBUGS("Window") << "Swap Method: Copy" << LL_ENDL;
1249 break; 1248 break;
1250 case WGL_SWAP_UNDEFINED_ARB: 1249 case WGL_SWAP_UNDEFINED_ARB:
1251 mSwapMethod = SWAP_METHOD_UNDEFINED; 1250 mSwapMethod = SWAP_METHOD_UNDEFINED;
1252 llinfos << "Swap Method: Undefined" << llendl; 1251 LL_DEBUGS("Window") << "Swap Method: Undefined" << LL_ENDL;
1253 break; 1252 break;
1254 default: 1253 default:
1255 mSwapMethod = SWAP_METHOD_UNDEFINED; 1254 mSwapMethod = SWAP_METHOD_UNDEFINED;
1256 llinfos << "Swap Method: Unknown" << llendl; 1255 LL_DEBUGS("Window") << "Swap Method: Unknown" << LL_ENDL;
1257 break; 1256 break;
1258 } 1257 }
1259 } 1258 }
1260 } 1259 }
1261 else 1260 else
1262 { 1261 {
1263 llwarns << "No wgl_ARB_pixel_format extension, using default ChoosePixelFormat!" << llendl; 1262 LL_WARNS("Window") << "No wgl_ARB_pixel_format extension, using default ChoosePixelFormat!" << LL_ENDL;
1264 } 1263 }
1265 1264
1266 // Verify what pixel format we actually received. 1265 // Verify what pixel format we actually received.
@@ -1272,10 +1271,10 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1272 return FALSE; 1271 return FALSE;
1273 } 1272 }
1274 1273
1275 llinfos << "GL buffer: Color Bits " << S32(pfd.cColorBits) 1274 LL_INFOS("Window") << "GL buffer: Color Bits " << S32(pfd.cColorBits)
1276 << " Alpha Bits " << S32(pfd.cAlphaBits) 1275 << " Alpha Bits " << S32(pfd.cAlphaBits)
1277 << " Depth Bits " << S32(pfd.cDepthBits) 1276 << " Depth Bits " << S32(pfd.cDepthBits)
1278 << llendl; 1277 << LL_ENDL;
1279 1278
1280 // make sure we have 32 bits per pixel 1279 // make sure we have 32 bits per pixel
1281 if (pfd.cColorBits < 32 || GetDeviceCaps(mhDC, BITSPIXEL) < 32) 1280 if (pfd.cColorBits < 32 || GetDeviceCaps(mhDC, BITSPIXEL) < 32)
@@ -1338,12 +1337,12 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
1338 // Disable vertical sync for swap 1337 // Disable vertical sync for swap
1339 if (disable_vsync && wglSwapIntervalEXT) 1338 if (disable_vsync && wglSwapIntervalEXT)
1340 { 1339 {
1341 llinfos << "Disabling vertical sync" << llendl; 1340 LL_DEBUGS("Window") << "Disabling vertical sync" << LL_ENDL;
1342 wglSwapIntervalEXT(0); 1341 wglSwapIntervalEXT(0);
1343 } 1342 }
1344 else 1343 else
1345 { 1344 {
1346 llinfos << "Keeping vertical sync" << llendl; 1345 LL_DEBUGS("Window") << "Keeping vertical sync" << LL_ENDL;
1347 } 1346 }
1348 1347
1349 SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this); 1348 SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this);
@@ -1701,11 +1700,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1701 1700
1702 if (gDebugWindowProc) 1701 if (gDebugWindowProc)
1703 { 1702 {
1704 llinfos << "WINDOWPROC ActivateApp " 1703 LL_INFOS("Window") << "WINDOWPROC ActivateApp "
1705 << " activating " << S32(activating) 1704 << " activating " << S32(activating)
1706 << " minimized " << S32(minimized) 1705 << " minimized " << S32(minimized)
1707 << " fullscreen " << S32(window_imp->mFullscreen) 1706 << " fullscreen " << S32(window_imp->mFullscreen)
1708 << llendl; 1707 << LL_ENDL;
1709 } 1708 }
1710 1709
1711 if (window_imp->mFullscreen) 1710 if (window_imp->mFullscreen)
@@ -1746,10 +1745,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1746 // properly when we run fullscreen. 1745 // properly when we run fullscreen.
1747 if (gDebugWindowProc) 1746 if (gDebugWindowProc)
1748 { 1747 {
1749 llinfos << "WINDOWPROC Activate " 1748 LL_INFOS("Window") << "WINDOWPROC Activate "
1750 << " activating " << S32(activating) 1749 << " activating " << S32(activating)
1751 << " minimized " << S32(minimized) 1750 << " minimized " << S32(minimized)
1752 << llendl; 1751 << LL_ENDL;
1753 } 1752 }
1754 1753
1755 // Don't handle this. 1754 // Don't handle this.
@@ -1805,9 +1804,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1805 { 1804 {
1806 if (gDebugWindowProc) 1805 if (gDebugWindowProc)
1807 { 1806 {
1808 llinfos << "Debug WindowProc WM_KEYDOWN " 1807 LL_INFOS("Window") << "Debug WindowProc WM_KEYDOWN "
1809 << " key " << S32(w_param) 1808 << " key " << S32(w_param)
1810 << llendl; 1809 << LL_ENDL;
1811 } 1810 }
1812 if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke) 1811 if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke)
1813 { 1812 {
@@ -1824,9 +1823,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1824 1823
1825 if (gDebugWindowProc) 1824 if (gDebugWindowProc)
1826 { 1825 {
1827 llinfos << "Debug WindowProc WM_KEYUP " 1826 LL_INFOS("Window") << "Debug WindowProc WM_KEYUP "
1828 << " key " << S32(w_param) 1827 << " key " << S32(w_param)
1829 << llendl; 1828 << LL_ENDL;
1830 } 1829 }
1831 if (gKeyboard->handleKeyUp(w_param, mask) && eat_keystroke) 1830 if (gKeyboard->handleKeyUp(w_param, mask) && eat_keystroke)
1832 { 1831 {
@@ -1909,13 +1908,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1909 // it is worth trying. The good old WM_CHAR works just fine even for supplementary 1908 // it is worth trying. The good old WM_CHAR works just fine even for supplementary
1910 // characters. We just need to take care of surrogate pairs sent as two WM_CHAR's 1909 // characters. We just need to take care of surrogate pairs sent as two WM_CHAR's
1911 // by ourselves. It is not that tough. -- Alissa Sabre @ SL 1910 // by ourselves. It is not that tough. -- Alissa Sabre @ SL
1912 //
1913 // llinfos << "WM_CHAR: " << w_param << llendl;
1914 if (gDebugWindowProc) 1911 if (gDebugWindowProc)
1915 { 1912 {
1916 llinfos << "Debug WindowProc WM_CHAR " 1913 LL_INFOS("Window") << "Debug WindowProc WM_CHAR "
1917 << " key " << S32(w_param) 1914 << " key " << S32(w_param)
1918 << llendl; 1915 << LL_ENDL;
1919 } 1916 }
1920 // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE, 1917 // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE,
1921 // we *did* processed the event, so I believe we should not pass it to DefWindowProc... 1918 // we *did* processed the event, so I believe we should not pass it to DefWindowProc...
@@ -1985,7 +1982,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1985 LLFastTimer t2(LLFastTimer::FTM_MOUSEHANDLER); 1982 LLFastTimer t2(LLFastTimer::FTM_MOUSEHANDLER);
1986 //if (gDebugClicks) 1983 //if (gDebugClicks)
1987 //{ 1984 //{
1988 // llinfos << "WndProc left button up" << llendl; 1985 // LL_INFOS("Window") << "WndProc left button up" << LL_ENDL;
1989 //} 1986 //}
1990 // Because we move the cursor position in the app, we need to query 1987 // Because we move the cursor position in the app, we need to query
1991 // to find out where the cursor at the time the event is handled. 1988 // to find out where the cursor at the time the event is handled.
@@ -2181,12 +2178,12 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2181 BOOL restored = ( w_param == SIZE_RESTORED ); 2178 BOOL restored = ( w_param == SIZE_RESTORED );
2182 BOOL minimized = ( w_param == SIZE_MINIMIZED ); 2179 BOOL minimized = ( w_param == SIZE_MINIMIZED );
2183 2180
2184 llinfos << "WINDOWPROC Size " 2181 LL_INFOS("Window") << "WINDOWPROC Size "
2185 << width << "x" << height 2182 << width << "x" << height
2186 << " max " << S32(maximized) 2183 << " max " << S32(maximized)
2187 << " min " << S32(minimized) 2184 << " min " << S32(minimized)
2188 << " rest " << S32(restored) 2185 << " rest " << S32(restored)
2189 << llendl; 2186 << LL_ENDL;
2190 } 2187 }
2191 2188
2192 // There's an odd behavior with WM_SIZE that I would call a bug. If 2189 // There's an odd behavior with WM_SIZE that I would call a bug. If
@@ -2232,7 +2229,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2232 case WM_SETFOCUS: 2229 case WM_SETFOCUS:
2233 if (gDebugWindowProc) 2230 if (gDebugWindowProc)
2234 { 2231 {
2235 llinfos << "WINDOWPROC SetFocus" << llendl; 2232 LL_INFOS("Window") << "WINDOWPROC SetFocus" << LL_ENDL;
2236 } 2233 }
2237 window_imp->mCallbacks->handleFocus(window_imp); 2234 window_imp->mCallbacks->handleFocus(window_imp);
2238 return 0; 2235 return 0;
@@ -2240,7 +2237,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2240 case WM_KILLFOCUS: 2237 case WM_KILLFOCUS:
2241 if (gDebugWindowProc) 2238 if (gDebugWindowProc)
2242 { 2239 {
2243 llinfos << "WINDOWPROC KillFocus" << llendl; 2240 LL_INFOS("Window") << "WINDOWPROC KillFocus" << LL_ENDL;
2244 } 2241 }
2245 window_imp->mCallbacks->handleFocusLost(window_imp); 2242 window_imp->mCallbacks->handleFocusLost(window_imp);
2246 return 0; 2243 return 0;
@@ -2596,7 +2593,7 @@ BOOL LLWindowWin32::setGamma(const F32 gamma)
2596{ 2593{
2597 mCurrentGamma = gamma; 2594 mCurrentGamma = gamma;
2598 2595
2599 llinfos << "Setting gamma to " << gamma << llendl; 2596 LL_DEBUGS("Window") << "Setting gamma to " << gamma << LL_ENDL;
2600 2597
2601 for ( int i = 0; i < 256; ++i ) 2598 for ( int i = 0; i < 256; ++i )
2602 { 2599 {
@@ -2737,8 +2734,8 @@ BOOL LLWindowWin32::setDisplayResolution(S32 width, S32 height, S32 bits, S32 re
2737 2734
2738 if (!success) 2735 if (!success)
2739 { 2736 {
2740 llwarns << "setDisplayResolution failed, " 2737 LL_WARNS("Window") << "setDisplayResolution failed, "
2741 << width << "x" << height << "x" << bits << " @ " << refresh << llendl; 2738 << width << "x" << height << "x" << bits << " @ " << refresh << LL_ENDL;
2742 } 2739 }
2743 2740
2744 return success; 2741 return success;
@@ -2760,7 +2757,7 @@ BOOL LLWindowWin32::setFullscreenResolution()
2760// protected 2757// protected
2761BOOL LLWindowWin32::resetDisplayResolution() 2758BOOL LLWindowWin32::resetDisplayResolution()
2762{ 2759{
2763 llinfos << "resetDisplayResolution START" << llendl; 2760 LL_DEBUGS("Window") << "resetDisplayResolution START" << LL_ENDL;
2764 2761
2765 LONG cds_result = ChangeDisplaySettings(NULL, 0); 2762 LONG cds_result = ChangeDisplaySettings(NULL, 0);
2766 2763
@@ -2768,10 +2765,10 @@ BOOL LLWindowWin32::resetDisplayResolution()
2768 2765
2769 if (!success) 2766 if (!success)
2770 { 2767 {
2771 llwarns << "resetDisplayResolution failed" << llendl; 2768 LL_WARNS("Window") << "resetDisplayResolution failed" << LL_ENDL;
2772 } 2769 }
2773 2770
2774 llinfos << "resetDisplayResolution END" << llendl; 2771 LL_DEBUGS("Window") << "resetDisplayResolution END" << LL_ENDL;
2775 2772
2776 return success; 2773 return success;
2777} 2774}
@@ -2908,11 +2905,11 @@ void spawn_web_browser(const char* escaped_url )
2908 2905
2909 if (!found) 2906 if (!found)
2910 { 2907 {
2911 llwarns << "spawn_web_browser() called for url with protocol not on whitelist: " << escaped_url << llendl; 2908 LL_WARNS("Window") << "spawn_web_browser() called for url with protocol not on whitelist: " << escaped_url << LL_ENDL;
2912 return; 2909 return;
2913 } 2910 }
2914 2911
2915 llinfos << "Opening URL " << escaped_url << llendl; 2912 LL_INFOS("Window") << "Opening URL " << escaped_url << LL_ENDL;
2916 2913
2917 // replaced ShellExecute code with ShellExecuteEx since ShellExecute doesn't work 2914 // replaced ShellExecute code with ShellExecuteEx since ShellExecute doesn't work
2918 // reliablly on Vista. 2915 // reliablly on Vista.
@@ -2952,7 +2949,7 @@ void spawn_web_browser(const char* escaped_url )
2952 2949
2953 if (browser_open_wstring.length() < 2) 2950 if (browser_open_wstring.length() < 2)
2954 { 2951 {
2955 llwarns << "Invalid browser executable in registry " << browser_open_wstring << llendl; 2952 LL_WARNS("Window") << "Invalid browser executable in registry " << browser_open_wstring << LL_ENDL;
2956 return; 2953 return;
2957 } 2954 }
2958 2955
@@ -2972,8 +2969,8 @@ void spawn_web_browser(const char* escaped_url )
2972 browser_executable = browser_open_wstring.substr(0, space_pos); 2969 browser_executable = browser_open_wstring.substr(0, space_pos);
2973 } 2970 }
2974 2971
2975 llinfos << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << llendl; 2972 LL_DEBUGS("Window") << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << LL_ENDL;
2976 llinfos << "Browser executable: " << wstring_to_utf8str(browser_executable) << llendl; 2973 LL_INFOS("Window") << "Browser executable: " << wstring_to_utf8str(browser_executable) << LL_ENDL;
2977 2974
2978 // Convert URL to wide string for Windows API 2975 // Convert URL to wide string for Windows API
2979 // Assume URL is UTF8, as can come from scripts 2976 // Assume URL is UTF8, as can come from scripts
@@ -2995,11 +2992,11 @@ void spawn_web_browser(const char* escaped_url )
2995 SW_SHOWNORMAL); 2992 SW_SHOWNORMAL);
2996 if (retval > 32) 2993 if (retval > 32)
2997 { 2994 {
2998 llinfos << "load_url success with " << retval << llendl; 2995 LL_DEBUGS("Window") << "load_url success with " << retval << LL_ENDL;
2999 } 2996 }
3000 else 2997 else
3001 { 2998 {
3002 llinfos << "load_url failure with " << retval << llendl; 2999 LL_INFOS("Window") << "load_url failure with " << retval << LL_ENDL;
3003 } 3000 }
3004 */ 3001 */
3005} 3002}
@@ -3541,7 +3538,7 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
3541 3538
3542 if (!mPreeditor->getPreeditLocation(position, &caret_coord, &preedit_bounds, &text_control)) 3539 if (!mPreeditor->getPreeditLocation(position, &caret_coord, &preedit_bounds, &text_control))
3543 { 3540 {
3544 llwarns << "*** IMR_QUERYCHARPOSITON called but getPreeditLocation failed." << llendl; 3541 LL_WARNS("Window") << "*** IMR_QUERYCHARPOSITON called but getPreeditLocation failed." << LL_ENDL;
3545 return FALSE; 3542 return FALSE;
3546 } 3543 }
3547 fillCharPosition(caret_coord, preedit_bounds, text_control, char_position); 3544 fillCharPosition(caret_coord, preedit_bounds, text_control, char_position);
@@ -3628,5 +3625,13 @@ BOOL LLWindowWin32::handleImeRequests(U32 request, U32 param, LRESULT *result)
3628 return FALSE; 3625 return FALSE;
3629} 3626}
3630 3627
3628//static
3629std::string LLWindowWin32::getFontListSans()
3630{
3631 // Lists Japanese, Korean, and Chinese sanserif fonts available in
3632 // Windows XP and Vista, as well as "Arial Unicode MS".
3633 return "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf";
3634}
3635
3631 3636
3632#endif // LL_WINDOWS 3637#endif // LL_WINDOWS
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h
index 5535af4..feb1c74 100644
--- a/linden/indra/llwindow/llwindowwin32.h
+++ b/linden/indra/llwindow/llwindowwin32.h
@@ -116,6 +116,8 @@ public:
116 /*virtual*/ void updateLanguageTextInputArea(); 116 /*virtual*/ void updateLanguageTextInputArea();
117 /*virtual*/ void interruptLanguageTextInput(); 117 /*virtual*/ void interruptLanguageTextInput();
118 118
119 static std::string getFontListSans();
120
119protected: 121protected:
120 LLWindowWin32( 122 LLWindowWin32(
121 char *title, char *name, int x, int y, int width, int height, U32 flags, 123 char *title, char *name, int x, int y, int width, int height, U32 flags,
diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp
index 8c74127..09719a5 100644
--- a/linden/indra/llxml/llcontrol.cpp
+++ b/linden/indra/llxml/llcontrol.cpp
@@ -50,44 +50,53 @@
50#include "llsdserialize.h" 50#include "llsdserialize.h"
51 51
52#if LL_RELEASE_FOR_DOWNLOAD 52#if LL_RELEASE_FOR_DOWNLOAD
53#define CONTROL_ERRS llwarns 53#define CONTROL_ERRS LL_WARNS("ControlErrors")
54#else 54#else
55#define CONTROL_ERRS llerrs 55#define CONTROL_ERRS LL_ERRS("ControlErrors")
56#endif 56#endif
57 57
58//this defines the current version of the settings file 58//this defines the current version of the settings file
59const S32 CURRENT_VERSION = 101; 59const S32 CURRENT_VERSION = 101;
60 60
61BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b) 61bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
62{ 62{
63 bool result = false;
63 switch (mType) 64 switch (mType)
64 { 65 {
65 case TYPE_U32: 66 case TYPE_U32:
66 case TYPE_S32: 67 case TYPE_S32:
67 return a.asInteger() == b.asInteger(); 68 result = a.asInteger() == b.asInteger();
69 break;
68 case TYPE_BOOLEAN: 70 case TYPE_BOOLEAN:
69 return a.asBoolean() == b.asBoolean(); 71 result = a.asBoolean() == b.asBoolean();
72 break;
70 case TYPE_F32: 73 case TYPE_F32:
71 return a.asReal() == b.asReal(); 74 result = a.asReal() == b.asReal();
75 break;
72 case TYPE_VEC3: 76 case TYPE_VEC3:
73 case TYPE_VEC3D: 77 case TYPE_VEC3D:
74 return LLVector3d(a) == LLVector3d(b); 78 result = LLVector3d(a) == LLVector3d(b);
79 break;
75 case TYPE_RECT: 80 case TYPE_RECT:
76 return LLRect(a) == LLRect(b); 81 result = LLRect(a) == LLRect(b);
82 break;
77 case TYPE_COL4: 83 case TYPE_COL4:
78 return LLColor4(a) == LLColor4(b); 84 result = LLColor4(a) == LLColor4(b);
85 break;
79 case TYPE_COL3: 86 case TYPE_COL3:
80 return LLColor3(a) == LLColor3(b); 87 result = LLColor3(a) == LLColor3(b);
88 break;
81 case TYPE_COL4U: 89 case TYPE_COL4U:
82 return LLColor4U(a) == LLColor4U(b); 90 result = LLColor4U(a) == LLColor4U(b);
91 break;
83 case TYPE_STRING: 92 case TYPE_STRING:
84 return a.asString() == b.asString(); 93 result = a.asString() == b.asString();
94 break;
85 default: 95 default:
86 // no-op
87 break; 96 break;
88 } 97 }
89 98
90 return FALSE; 99 return result;
91} 100}
92 101
93LLControlVariable::LLControlVariable(const LLString& name, eControlType type, 102LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
@@ -114,14 +123,34 @@ LLControlVariable::~LLControlVariable()
114 123
115void LLControlVariable::setValue(const LLSD& value, bool saved_value) 124void LLControlVariable::setValue(const LLSD& value, bool saved_value)
116{ 125{
117 bool value_changed = llsd_compare(getValue(), value) == FALSE; 126 // *FIX:MEP - The following is needed to make the LLSD::ImplString
127 // work with boolean controls...
128 LLSD storable_value;
129 if(TYPE_BOOLEAN == type() && value.isString())
130 {
131 BOOL temp;
132 if(LLString::convertToBOOL(value.asString(), temp))
133 {
134 storable_value = temp;
135 }
136 else
137 {
138 storable_value = FALSE;
139 }
140 }
141 else
142 {
143 storable_value = value;
144 }
145
146 bool value_changed = llsd_compare(getValue(), storable_value) == FALSE;
118 if(saved_value) 147 if(saved_value)
119 { 148 {
120 // If we're going to save this value, return to default but don't fire 149 // If we're going to save this value, return to default but don't fire
121 resetToDefault(false); 150 resetToDefault(false);
122 if (llsd_compare(mValues.back(), value) == FALSE) 151 if (llsd_compare(mValues.back(), storable_value) == FALSE)
123 { 152 {
124 mValues.push_back(value); 153 mValues.push_back(storable_value);
125 } 154 }
126 } 155 }
127 else 156 else
@@ -129,7 +158,7 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
129 // This is a unsaved value. Its needs to reside at 158 // This is a unsaved value. Its needs to reside at
130 // mValues[2] (or greater). It must not affect 159 // mValues[2] (or greater). It must not affect
131 // the result of getSaveValue() 160 // the result of getSaveValue()
132 if (llsd_compare(mValues.back(), value) == FALSE) 161 if (llsd_compare(mValues.back(), storable_value) == FALSE)
133 { 162 {
134 while(mValues.size() > 2) 163 while(mValues.size() > 2)
135 { 164 {
@@ -144,13 +173,14 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
144 } 173 }
145 174
146 // Add the 'un-save' value. 175 // Add the 'un-save' value.
147 mValues.push_back(value); 176 mValues.push_back(storable_value);
148 } 177 }
149 } 178 }
150 179
180
151 if(value_changed) 181 if(value_changed)
152 { 182 {
153 mSignal(value); 183 mSignal(storable_value);
154 } 184 }
155} 185}
156 186
@@ -1147,3 +1177,4 @@ void main()
1147#endif 1177#endif
1148 1178
1149 1179
1180
diff --git a/linden/indra/llxml/llcontrol.h b/linden/indra/llxml/llcontrol.h
index 2511940..91545ce 100644
--- a/linden/indra/llxml/llcontrol.h
+++ b/linden/indra/llxml/llcontrol.h
@@ -127,7 +127,7 @@ public:
127 { 127 {
128 mSignal(mValues.back()); 128 mSignal(mValues.back());
129 } 129 }
130 BOOL llsd_compare(const LLSD& a, const LLSD& b); 130 bool llsd_compare(const LLSD& a, const LLSD& b);
131}; 131};
132 132
133//const U32 STRING_CACHE_SIZE = 10000; 133//const U32 STRING_CACHE_SIZE = 10000;
diff --git a/linden/indra/llxml/llxmlnode.cpp b/linden/indra/llxml/llxmlnode.cpp
index 757e2f7..f9852d3 100644
--- a/linden/indra/llxml/llxmlnode.cpp
+++ b/linden/indra/llxml/llxmlnode.cpp
@@ -572,7 +572,7 @@ bool LLXMLNode::parseFile(
572 LLXMLNode* defaults_tree) 572 LLXMLNode* defaults_tree)
573{ 573{
574 // Read file 574 // Read file
575 FILE* fp = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ 575 LLFILE* fp = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */
576 if (fp == NULL) 576 if (fp == NULL)
577 { 577 {
578 node = new LLXMLNode(); 578 node = new LLXMLNode();
@@ -741,12 +741,12 @@ BOOL LLXMLNode::isFullyDefault()
741} 741}
742 742
743// static 743// static
744void LLXMLNode::writeHeaderToFile(FILE *fOut) 744void LLXMLNode::writeHeaderToFile(LLFILE *fOut)
745{ 745{
746 fprintf(fOut, "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n"); 746 fprintf(fOut, "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n");
747} 747}
748 748
749void LLXMLNode::writeToFile(FILE *fOut, LLString indent) 749void LLXMLNode::writeToFile(LLFILE *fOut, LLString indent)
750{ 750{
751 if (isFullyDefault()) 751 if (isFullyDefault())
752 { 752 {
diff --git a/linden/indra/llxml/llxmlnode.h b/linden/indra/llxml/llxmlnode.h
index 6183ec1..269108c 100644
--- a/linden/indra/llxml/llxmlnode.h
+++ b/linden/indra/llxml/llxmlnode.h
@@ -32,7 +32,9 @@
32#ifndef LL_LLXMLNODE_H 32#ifndef LL_LLXMLNODE_H
33#define LL_LLXMLNODE_H 33#define LL_LLXMLNODE_H
34 34
35#define XML_STATIC 35#ifndef XML_STATIC
36#define XML_STATIC 1
37#endif
36#ifdef LL_STANDALONE 38#ifdef LL_STANDALONE
37#include <expat.h> 39#include <expat.h>
38#else 40#else
@@ -131,8 +133,8 @@ public:
131 static bool updateNode( 133 static bool updateNode(
132 LLXMLNodePtr& node, 134 LLXMLNodePtr& node,
133 LLXMLNodePtr& update_node); 135 LLXMLNodePtr& update_node);
134 static void writeHeaderToFile(FILE *fOut); 136 static void writeHeaderToFile(LLFILE *fOut);
135 void writeToFile(FILE *fOut, LLString indent = LLString()); 137 void writeToFile(LLFILE *fOut, LLString indent = LLString());
136 void writeToOstream(std::ostream& output_stream, const LLString& indent = LLString()); 138 void writeToOstream(std::ostream& output_stream, const LLString& indent = LLString());
137 139
138 // Utility 140 // Utility
diff --git a/linden/indra/llxml/llxmlparser.cpp b/linden/indra/llxml/llxmlparser.cpp
index 0cbb82b..3b4d944 100644
--- a/linden/indra/llxml/llxmlparser.cpp
+++ b/linden/indra/llxml/llxmlparser.cpp
@@ -77,7 +77,7 @@ BOOL LLXmlParser::parseFile(const std::string &path)
77 77
78 BOOL success = TRUE; 78 BOOL success = TRUE;
79 79
80 FILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */ 80 LLFILE* file = LLFile::fopen(path.c_str(), "rb"); /* Flawfinder: ignore */
81 if( !file ) 81 if( !file )
82 { 82 {
83 snprintf( mAuxErrorString, sizeof(mAuxErrorString), "Couldn't open file %s", path.c_str()); /* Flawfinder: ignore */ 83 snprintf( mAuxErrorString, sizeof(mAuxErrorString), "Couldn't open file %s", path.c_str()); /* Flawfinder: ignore */
@@ -393,7 +393,7 @@ int main()
393{ 393{
394 char buf[1024]; 394 char buf[1024];
395 395
396 FILE* file = LLFile::fopen("test.xml", "rb"); 396 LLFILE* file = LLFile::fopen("test.xml", "rb");
397 if( !file ) 397 if( !file )
398 { 398 {
399 return 1; 399 return 1;
diff --git a/linden/indra/llxml/llxmlparser.h b/linden/indra/llxml/llxmlparser.h
index 611605f..7ce5524 100644
--- a/linden/indra/llxml/llxmlparser.h
+++ b/linden/indra/llxml/llxmlparser.h
@@ -32,7 +32,9 @@
32#ifndef LL_LLXMLPARSER_H 32#ifndef LL_LLXMLPARSER_H
33#define LL_LLXMLPARSER_H 33#define LL_LLXMLPARSER_H
34 34
35#define XML_STATIC 35#ifndef XML_STATIC
36#define XML_STATIC 1
37#endif
36#ifdef LL_STANDALONE 38#ifdef LL_STANDALONE
37#include <expat.h> 39#include <expat.h>
38#else 40#else
diff --git a/linden/indra/lscript/lscript_alloc.h b/linden/indra/lscript/lscript_alloc.h
index 948eb26..2cdd03d 100644
--- a/linden/indra/lscript/lscript_alloc.h
+++ b/linden/indra/lscript/lscript_alloc.h
@@ -118,7 +118,7 @@ inline void bytestream2alloc_entry(LLScriptAllocEntry &entry, U8 *buffer, S32 &o
118 118
119// create a heap from the HR to TM 119// create a heap from the HR to TM
120BOOL lsa_create_heap(U8 *heap_start, S32 size); 120BOOL lsa_create_heap(U8 *heap_start, S32 size);
121void lsa_fprint_heap(U8 *buffer, FILE *fp); 121void lsa_fprint_heap(U8 *buffer, LLFILE *fp);
122 122
123void lsa_print_heap(U8 *buffer); 123void lsa_print_heap(U8 *buffer);
124 124
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l
index 03c8321..ba10ef6 100644
--- a/linden/indra/lscript/lscript_compile/indra.l
+++ b/linden/indra/lscript/lscript_compile/indra.l
@@ -606,6 +606,11 @@ extern "C" { int yyerror(const char *fmt, ...); }
606"CLICK_ACTION_PLAY" { count(); yylval.ival = CLICK_ACTION_PLAY; return(INTEGER_CONSTANT); } 606"CLICK_ACTION_PLAY" { count(); yylval.ival = CLICK_ACTION_PLAY; return(INTEGER_CONSTANT); }
607"CLICK_ACTION_OPEN_MEDIA" { count(); yylval.ival = CLICK_ACTION_OPEN_MEDIA; return(INTEGER_CONSTANT); } 607"CLICK_ACTION_OPEN_MEDIA" { count(); yylval.ival = CLICK_ACTION_OPEN_MEDIA; return(INTEGER_CONSTANT); }
608 608
609"TEXTURE_BLANK" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "5748decc-f629-461c-9a36-a35a221fe21f"); return(STRING_CONSTANT); }
610"TEXTURE_DEFAULT" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"); return(STRING_CONSTANT); }
611"TEXTURE_PLYWOOD" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "89556747-24cb-43ed-920b-47caed15465f"); return(STRING_CONSTANT); }
612"TEXTURE_TRANSPARENT" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "59facb66-4a72-40a2-815c-7d9b42c56f60"); return(STRING_CONSTANT); }
613
609{L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } 614{L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); }
610 615
611{N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } 616{N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); }
@@ -706,7 +711,7 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
706#ifdef EMERGENCY_DEBUG_PRINTOUTS 711#ifdef EMERGENCY_DEBUG_PRINTOUTS
707 char compiled[256]; 712 char compiled[256];
708 sprintf(compiled, "%s.o", src_filename); 713 sprintf(compiled, "%s.o", src_filename);
709 FILE* compfile; 714 LLFILE* compfile;
710 compfile = LLFile::fopen(compiled, "w"); 715 compfile = LLFile::fopen(compiled, "w");
711#endif 716#endif
712 717
@@ -733,7 +738,7 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
733#endif 738#endif
734#ifdef EMIT_CIL_ASSEMBLER 739#ifdef EMIT_CIL_ASSEMBLER
735 const char* cil_output_file_name = dst_filename? dst_filename : "lscript.cil"; 740 const char* cil_output_file_name = dst_filename? dst_filename : "lscript.cil";
736 FILE* cilout = LLFile::fopen(cil_output_file_name, "w"); 741 LLFILE* cilout = LLFile::fopen(cil_output_file_name, "w");
737 if(NULL == cilout) 742 if(NULL == cilout)
738 { 743 {
739 fprintf(yyout, "Error opening cil output file %s\n", cil_output_file_name); 744 fprintf(yyout, "Error opening cil output file %s\n", cil_output_file_name);
diff --git a/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp b/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp
index 5838bc3..31ab909 100644
--- a/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp
+++ b/linden/indra/lscript/lscript_compile/lscript_bytecode.cpp
@@ -245,7 +245,7 @@ LLScriptScriptCodeChunk::~LLScriptScriptCodeChunk()
245 delete [] mCompleteCode; 245 delete [] mCompleteCode;
246} 246}
247 247
248void LLScriptScriptCodeChunk::build(FILE *efp, FILE *bcfp) 248void LLScriptScriptCodeChunk::build(LLFILE *efp, LLFILE *bcfp)
249{ 249{
250 S32 code_data_size = mRegisters->mCurrentOffset + 250 S32 code_data_size = mRegisters->mCurrentOffset +
251 mGlobalVariables->mCurrentOffset + 251 mGlobalVariables->mCurrentOffset +
diff --git a/linden/indra/lscript/lscript_compile/lscript_bytecode.h b/linden/indra/lscript/lscript_compile/lscript_bytecode.h
index 6526e13..272aa60 100644
--- a/linden/indra/lscript/lscript_compile/lscript_bytecode.h
+++ b/linden/indra/lscript/lscript_compile/lscript_bytecode.h
@@ -77,7 +77,7 @@ public:
77 LLScriptScriptCodeChunk(S32 total_size); 77 LLScriptScriptCodeChunk(S32 total_size);
78 ~LLScriptScriptCodeChunk(); 78 ~LLScriptScriptCodeChunk();
79 79
80 void build(FILE *efp, FILE *bcfp); 80 void build(LLFILE *efp, LLFILE *bcfp);
81 81
82 LLScriptByteCodeChunk *mRegisters; 82 LLScriptByteCodeChunk *mRegisters;
83 LLScriptByteCodeChunk *mGlobalVariables; 83 LLScriptByteCodeChunk *mGlobalVariables;
diff --git a/linden/indra/lscript/lscript_compile/lscript_error.cpp b/linden/indra/lscript/lscript_compile/lscript_error.cpp
index 6e03b01..b3c1ffa 100644
--- a/linden/indra/lscript/lscript_compile/lscript_error.cpp
+++ b/linden/indra/lscript/lscript_compile/lscript_error.cpp
@@ -40,7 +40,7 @@ S32 gInternalLine = 0;
40 40
41LLScriptGenerateErrorText gErrorToText; 41LLScriptGenerateErrorText gErrorToText;
42 42
43void LLScriptFilePosition::fdotabs(FILE *fp, S32 tabs, S32 tabsize) 43void LLScriptFilePosition::fdotabs(LLFILE *fp, S32 tabs, S32 tabsize)
44{ 44{
45 S32 i; 45 S32 i;
46 for (i = 0; i < tabs * tabsize; i++) 46 for (i = 0; i < tabs * tabsize; i++)
@@ -75,25 +75,25 @@ char* gErrorText[LSERROR_EOF] = /*Flawfinder: ignore*/
75 "Declaration requires a new scope -- use { and }" 75 "Declaration requires a new scope -- use { and }"
76}; 76};
77 77
78void LLScriptGenerateErrorText::writeWarning(FILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning) 78void LLScriptGenerateErrorText::writeWarning(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning)
79{ 79{
80 fprintf(fp, "(%d, %d) : WARNING : %s\n", pos->mLineNumber, pos->mColumnNumber, gWarningText[warning]); 80 fprintf(fp, "(%d, %d) : WARNING : %s\n", pos->mLineNumber, pos->mColumnNumber, gWarningText[warning]);
81 mTotalWarnings++; 81 mTotalWarnings++;
82} 82}
83 83
84void LLScriptGenerateErrorText::writeWarning(FILE *fp, S32 line, S32 col, LSCRIPTWarnings warning) 84void LLScriptGenerateErrorText::writeWarning(LLFILE *fp, S32 line, S32 col, LSCRIPTWarnings warning)
85{ 85{
86 fprintf(fp, "(%d, %d) : WARNING : %s\n", line, col, gWarningText[warning]); 86 fprintf(fp, "(%d, %d) : WARNING : %s\n", line, col, gWarningText[warning]);
87 mTotalWarnings++; 87 mTotalWarnings++;
88} 88}
89 89
90void LLScriptGenerateErrorText::writeError(FILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error) 90void LLScriptGenerateErrorText::writeError(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error)
91{ 91{
92 fprintf(fp, "(%d, %d) : ERROR : %s\n", pos->mLineNumber, pos->mColumnNumber, gErrorText[error]); 92 fprintf(fp, "(%d, %d) : ERROR : %s\n", pos->mLineNumber, pos->mColumnNumber, gErrorText[error]);
93 mTotalErrors++; 93 mTotalErrors++;
94} 94}
95 95
96void LLScriptGenerateErrorText::writeError(FILE *fp, S32 line, S32 col, LSCRIPTErrors error) 96void LLScriptGenerateErrorText::writeError(LLFILE *fp, S32 line, S32 col, LSCRIPTErrors error)
97{ 97{
98 fprintf(fp, "(%d, %d) : ERROR : %s\n", line, col, gErrorText[error]); 98 fprintf(fp, "(%d, %d) : ERROR : %s\n", line, col, gErrorText[error]);
99 mTotalErrors++; 99 mTotalErrors++;
diff --git a/linden/indra/lscript/lscript_compile/lscript_error.h b/linden/indra/lscript/lscript_compile/lscript_error.h
index d52bdf7..b5fcadb 100644
--- a/linden/indra/lscript/lscript_compile/lscript_error.h
+++ b/linden/indra/lscript/lscript_compile/lscript_error.h
@@ -84,13 +84,13 @@ public:
84 84
85 virtual ~LLScriptFilePosition() {} 85 virtual ~LLScriptFilePosition() {}
86 86
87 virtual void recurse(FILE *fp, S32 tabs, S32 tabsize, 87 virtual void recurse(LLFILE *fp, S32 tabs, S32 tabsize,
88 LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, 88 LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg,
89 LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, 89 LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count,
90 LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) = 0; 90 LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) = 0;
91 virtual S32 getSize() = 0; 91 virtual S32 getSize() = 0;
92 92
93 void fdotabs(FILE *fp, S32 tabs, S32 tabsize); 93 void fdotabs(LLFILE *fp, S32 tabs, S32 tabsize);
94 94
95 S32 mLineNumber; 95 S32 mLineNumber;
96 S32 mColumnNumber; 96 S32 mColumnNumber;
@@ -135,10 +135,10 @@ public:
135 135
136 void init() { mTotalErrors = 0; mTotalWarnings = 0; } 136 void init() { mTotalErrors = 0; mTotalWarnings = 0; }
137 137
138 void writeWarning(FILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning); 138 void writeWarning(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTWarnings warning);
139 void writeWarning(FILE *fp, S32 line, S32 col, LSCRIPTWarnings warning); 139 void writeWarning(LLFILE *fp, S32 line, S32 col, LSCRIPTWarnings warning);
140 void writeError(FILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error); 140 void writeError(LLFILE *fp, LLScriptFilePosition *pos, LSCRIPTErrors error);
141 void writeError(FILE *fp, S32 line, S32 col, LSCRIPTErrors error); 141 void writeError(LLFILE *fp, S32 line, S32 col, LSCRIPTErrors error);
142 142
143 BOOL getErrors() { return mTotalErrors; } 143 BOOL getErrors() { return mTotalErrors; }
144 BOOL getWarnings() { return mTotalWarnings; } 144 BOOL getWarnings() { return mTotalWarnings; }
diff --git a/linden/indra/lscript/lscript_compile/lscript_tree.cpp b/linden/indra/lscript/lscript_compile/lscript_tree.cpp
index 519d726..204f738 100644
--- a/linden/indra/lscript/lscript_compile/lscript_tree.cpp
+++ b/linden/indra/lscript/lscript_compile/lscript_tree.cpp
@@ -43,7 +43,7 @@
43 43
44//#define LSL_INCLUDE_DEBUG_INFO 44//#define LSL_INCLUDE_DEBUG_INFO
45 45
46void print_cil_box(FILE* fp, LSCRIPTType type) 46void print_cil_box(LLFILE* fp, LSCRIPTType type)
47{ 47{
48 switch(type) 48 switch(type)
49 { 49 {
@@ -68,7 +68,7 @@ void print_cil_box(FILE* fp, LSCRIPTType type)
68 } 68 }
69} 69}
70 70
71void print_cil_type(FILE* fp, LSCRIPTType type) 71void print_cil_type(LLFILE* fp, LSCRIPTType type)
72{ 72{
73 switch(type) 73 switch(type)
74 { 74 {
@@ -99,7 +99,7 @@ void print_cil_type(FILE* fp, LSCRIPTType type)
99 } 99 }
100} 100}
101 101
102void LLScriptType::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 102void LLScriptType::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
103{ 103{
104 if (gErrorToText.getErrors()) 104 if (gErrorToText.getErrors())
105 { 105 {
@@ -127,7 +127,7 @@ S32 LLScriptType::getSize()
127 return LSCRIPTDataSize[mType]; 127 return LSCRIPTDataSize[mType];
128} 128}
129 129
130void LLScriptConstant::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 130void LLScriptConstant::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
131{ 131{
132 if (gErrorToText.getErrors()) 132 if (gErrorToText.getErrors())
133 { 133 {
@@ -152,7 +152,7 @@ S32 LLScriptConstant::getSize()
152 152
153 153
154 154
155void LLScriptConstantInteger::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 155void LLScriptConstantInteger::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
156{ 156{
157 if (gErrorToText.getErrors()) 157 if (gErrorToText.getErrors())
158 { 158 {
@@ -200,7 +200,7 @@ S32 LLScriptConstantInteger::getSize()
200 return LSCRIPTDataSize[LST_INTEGER]; 200 return LSCRIPTDataSize[LST_INTEGER];
201} 201}
202 202
203void LLScriptConstantFloat::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 203void LLScriptConstantFloat::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
204{ 204{
205 if (gErrorToText.getErrors()) 205 if (gErrorToText.getErrors())
206 { 206 {
@@ -247,7 +247,7 @@ S32 LLScriptConstantFloat::getSize()
247 return LSCRIPTDataSize[LST_FLOATINGPOINT]; 247 return LSCRIPTDataSize[LST_FLOATINGPOINT];
248} 248}
249 249
250void print_escape_quotes(FILE* fp, const char* str) 250void print_escape_quotes(LLFILE* fp, const char* str)
251{ 251{
252 putc('"', fp); 252 putc('"', fp);
253 for(const char* c = str; *c != '\0'; ++c) 253 for(const char* c = str; *c != '\0'; ++c)
@@ -261,7 +261,7 @@ void print_escape_quotes(FILE* fp, const char* str)
261 putc('"', fp); 261 putc('"', fp);
262} 262}
263 263
264void LLScriptConstantString::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 264void LLScriptConstantString::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
265{ 265{
266 if (gErrorToText.getErrors()) 266 if (gErrorToText.getErrors())
267 { 267 {
@@ -317,7 +317,7 @@ S32 LLScriptConstantString::getSize()
317} 317}
318 318
319 319
320void LLScriptIdentifier::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 320void LLScriptIdentifier::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
321{ 321{
322 if (gErrorToText.getErrors()) 322 if (gErrorToText.getErrors())
323 { 323 {
@@ -412,7 +412,7 @@ void LLScriptSimpleAssignable::addAssignable(LLScriptSimpleAssignable *assign)
412 mNextp = assign; 412 mNextp = assign;
413} 413}
414 414
415void LLScriptSimpleAssignable::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 415void LLScriptSimpleAssignable::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
416{ 416{
417 if (gErrorToText.getErrors()) 417 if (gErrorToText.getErrors())
418 { 418 {
@@ -428,7 +428,7 @@ S32 LLScriptSimpleAssignable::getSize()
428 return 0; 428 return 0;
429} 429}
430 430
431void LLScriptSAIdentifier::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 431void LLScriptSAIdentifier::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
432{ 432{
433 if (gErrorToText.getErrors()) 433 if (gErrorToText.getErrors())
434 { 434 {
@@ -512,7 +512,7 @@ S32 LLScriptSAIdentifier::getSize()
512 return mIdentifier->getSize(); 512 return mIdentifier->getSize();
513} 513}
514 514
515void LLScriptSAConstant::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 515void LLScriptSAConstant::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
516{ 516{
517 if (gErrorToText.getErrors()) 517 if (gErrorToText.getErrors())
518 { 518 {
@@ -553,7 +553,7 @@ S32 LLScriptSAConstant::getSize()
553 return mConstant->getSize(); 553 return mConstant->getSize();
554} 554}
555 555
556void print_cil_cast(FILE* fp, LSCRIPTType srcType, LSCRIPTType targetType) 556void print_cil_cast(LLFILE* fp, LSCRIPTType srcType, LSCRIPTType targetType)
557{ 557{
558 switch(srcType) 558 switch(srcType)
559 { 559 {
@@ -680,7 +680,7 @@ bool is_SA_constant_integer(LLScriptSimpleAssignable* sa)
680 return (sa->mType == LSSAT_CONSTANT && ((LLScriptSAConstant*) sa)->mConstant->mType == LST_INTEGER); 680 return (sa->mType == LSSAT_CONSTANT && ((LLScriptSAConstant*) sa)->mConstant->mType == LST_INTEGER);
681} 681}
682 682
683void LLScriptSAVector::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 683void LLScriptSAVector::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
684{ 684{
685 if (gErrorToText.getErrors()) 685 if (gErrorToText.getErrors())
686 { 686 {
@@ -827,7 +827,7 @@ S32 LLScriptSAVector::getSize()
827 return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize(); 827 return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize();
828} 828}
829 829
830void LLScriptSAQuaternion::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 830void LLScriptSAQuaternion::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
831{ 831{
832 if (gErrorToText.getErrors()) 832 if (gErrorToText.getErrors())
833 { 833 {
@@ -999,7 +999,7 @@ S32 LLScriptSAQuaternion::getSize()
999 return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize() + mEntry4->getSize(); 999 return mEntry1->getSize() + mEntry2->getSize() + mEntry3->getSize() + mEntry4->getSize();
1000} 1000}
1001 1001
1002void LLScriptSAList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1002void LLScriptSAList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1003{ 1003{
1004 if (gErrorToText.getErrors()) 1004 if (gErrorToText.getErrors())
1005 { 1005 {
@@ -1074,7 +1074,7 @@ void LLScriptGlobalVariable::addGlobal(LLScriptGlobalVariable *global)
1074 mNextp = global; 1074 mNextp = global;
1075} 1075}
1076 1076
1077void LLScriptGlobalVariable::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1077void LLScriptGlobalVariable::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1078{ 1078{
1079 switch(pass) 1079 switch(pass)
1080 { 1080 {
@@ -1093,7 +1093,7 @@ void LLScriptGlobalVariable::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTComp
1093 } 1093 }
1094} 1094}
1095 1095
1096void LLScriptGlobalVariable::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1096void LLScriptGlobalVariable::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1097{ 1097{
1098 if (gErrorToText.getErrors()) 1098 if (gErrorToText.getErrors())
1099 { 1099 {
@@ -1288,7 +1288,7 @@ S32 LLScriptGlobalVariable::getSize()
1288 return return_size; 1288 return return_size;
1289} 1289}
1290 1290
1291void LLScriptEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1291void LLScriptEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1292{ 1292{
1293 fprintf(fp, "Event Base Class -- should never get here!\n"); 1293 fprintf(fp, "Event Base Class -- should never get here!\n");
1294} 1294}
@@ -1299,7 +1299,7 @@ S32 LLScriptEvent::getSize()
1299 return 0; 1299 return 0;
1300} 1300}
1301 1301
1302void LLScriptStateEntryEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1302void LLScriptStateEntryEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1303{ 1303{
1304 if (gErrorToText.getErrors()) 1304 if (gErrorToText.getErrors())
1305 { 1305 {
@@ -1335,7 +1335,7 @@ S32 LLScriptStateEntryEvent::getSize()
1335 return 0; 1335 return 0;
1336} 1336}
1337 1337
1338void LLScriptStateExitEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1338void LLScriptStateExitEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1339{ 1339{
1340 if (gErrorToText.getErrors()) 1340 if (gErrorToText.getErrors())
1341 { 1341 {
@@ -1371,7 +1371,7 @@ S32 LLScriptStateExitEvent::getSize()
1371 return 0; 1371 return 0;
1372} 1372}
1373 1373
1374void LLScriptTouchStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1374void LLScriptTouchStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1375{ 1375{
1376 if (gErrorToText.getErrors()) 1376 if (gErrorToText.getErrors())
1377 { 1377 {
@@ -1429,7 +1429,7 @@ S32 LLScriptTouchStartEvent::getSize()
1429 return 4; 1429 return 4;
1430} 1430}
1431 1431
1432void LLScriptTouchEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1432void LLScriptTouchEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1433{ 1433{
1434 if (gErrorToText.getErrors()) 1434 if (gErrorToText.getErrors())
1435 { 1435 {
@@ -1487,7 +1487,7 @@ S32 LLScriptTouchEvent::getSize()
1487 return 4; 1487 return 4;
1488} 1488}
1489 1489
1490void LLScriptTouchEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1490void LLScriptTouchEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1491{ 1491{
1492 if (gErrorToText.getErrors()) 1492 if (gErrorToText.getErrors())
1493 { 1493 {
@@ -1545,7 +1545,7 @@ S32 LLScriptTouchEndEvent::getSize()
1545 return 4; 1545 return 4;
1546} 1546}
1547 1547
1548void LLScriptCollisionStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1548void LLScriptCollisionStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1549{ 1549{
1550 if (gErrorToText.getErrors()) 1550 if (gErrorToText.getErrors())
1551 { 1551 {
@@ -1603,7 +1603,7 @@ S32 LLScriptCollisionStartEvent::getSize()
1603 return 4; 1603 return 4;
1604} 1604}
1605 1605
1606void LLScriptCollisionEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1606void LLScriptCollisionEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1607{ 1607{
1608 if (gErrorToText.getErrors()) 1608 if (gErrorToText.getErrors())
1609 { 1609 {
@@ -1661,7 +1661,7 @@ S32 LLScriptCollisionEvent::getSize()
1661 return 4; 1661 return 4;
1662} 1662}
1663 1663
1664void LLScriptCollisionEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1664void LLScriptCollisionEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1665{ 1665{
1666 if (gErrorToText.getErrors()) 1666 if (gErrorToText.getErrors())
1667 { 1667 {
@@ -1719,7 +1719,7 @@ S32 LLScriptCollisionEndEvent::getSize()
1719 return 4; 1719 return 4;
1720} 1720}
1721 1721
1722void LLScriptLandCollisionStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1722void LLScriptLandCollisionStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1723{ 1723{
1724 if (gErrorToText.getErrors()) 1724 if (gErrorToText.getErrors())
1725 { 1725 {
@@ -1778,7 +1778,7 @@ S32 LLScriptLandCollisionStartEvent::getSize()
1778 1778
1779 1779
1780 1780
1781void LLScriptLandCollisionEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1781void LLScriptLandCollisionEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1782{ 1782{
1783 if (gErrorToText.getErrors()) 1783 if (gErrorToText.getErrors())
1784 { 1784 {
@@ -1836,7 +1836,7 @@ S32 LLScriptLandCollisionEvent::getSize()
1836} 1836}
1837 1837
1838 1838
1839void LLScriptLandCollisionEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1839void LLScriptLandCollisionEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1840{ 1840{
1841 if (gErrorToText.getErrors()) 1841 if (gErrorToText.getErrors())
1842 { 1842 {
@@ -1894,7 +1894,7 @@ S32 LLScriptLandCollisionEndEvent::getSize()
1894} 1894}
1895 1895
1896 1896
1897void LLScriptInventoryEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1897void LLScriptInventoryEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1898{ 1898{
1899 if (gErrorToText.getErrors()) 1899 if (gErrorToText.getErrors())
1900 { 1900 {
@@ -1951,7 +1951,7 @@ S32 LLScriptInventoryEvent::getSize()
1951 return 4; 1951 return 4;
1952} 1952}
1953 1953
1954void LLScriptAttachEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 1954void LLScriptAttachEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
1955{ 1955{
1956 if (gErrorToText.getErrors()) 1956 if (gErrorToText.getErrors())
1957 { 1957 {
@@ -2008,7 +2008,7 @@ S32 LLScriptAttachEvent::getSize()
2008 return 4; 2008 return 4;
2009} 2009}
2010 2010
2011void LLScriptDataserverEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2011void LLScriptDataserverEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2012{ 2012{
2013 if (gErrorToText.getErrors()) 2013 if (gErrorToText.getErrors())
2014 { 2014 {
@@ -2080,7 +2080,7 @@ S32 LLScriptDataserverEvent::getSize()
2080 return 8; 2080 return 8;
2081} 2081}
2082 2082
2083void LLScriptTimerEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2083void LLScriptTimerEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2084{ 2084{
2085 if (gErrorToText.getErrors()) 2085 if (gErrorToText.getErrors())
2086 { 2086 {
@@ -2113,7 +2113,7 @@ S32 LLScriptTimerEvent::getSize()
2113 return 0; 2113 return 0;
2114} 2114}
2115 2115
2116void LLScriptMovingStartEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2116void LLScriptMovingStartEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2117{ 2117{
2118 if (gErrorToText.getErrors()) 2118 if (gErrorToText.getErrors())
2119 { 2119 {
@@ -2144,7 +2144,7 @@ S32 LLScriptMovingStartEvent::getSize()
2144 return 0; 2144 return 0;
2145} 2145}
2146 2146
2147void LLScriptMovingEndEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2147void LLScriptMovingEndEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2148{ 2148{
2149 if (gErrorToText.getErrors()) 2149 if (gErrorToText.getErrors())
2150 { 2150 {
@@ -2175,7 +2175,7 @@ S32 LLScriptMovingEndEvent::getSize()
2175 return 0; 2175 return 0;
2176} 2176}
2177 2177
2178void LLScriptRTPEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2178void LLScriptRTPEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2179{ 2179{
2180 if (gErrorToText.getErrors()) 2180 if (gErrorToText.getErrors())
2181 { 2181 {
@@ -2232,7 +2232,7 @@ S32 LLScriptRTPEvent::getSize()
2232 return 4; 2232 return 4;
2233} 2233}
2234 2234
2235void LLScriptChatEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2235void LLScriptChatEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2236{ 2236{
2237 if (gErrorToText.getErrors()) 2237 if (gErrorToText.getErrors())
2238 { 2238 {
@@ -2334,7 +2334,7 @@ S32 LLScriptChatEvent::getSize()
2334 return 16; 2334 return 16;
2335} 2335}
2336 2336
2337void LLScriptSensorEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2337void LLScriptSensorEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2338{ 2338{
2339 if (gErrorToText.getErrors()) 2339 if (gErrorToText.getErrors())
2340 { 2340 {
@@ -2391,7 +2391,7 @@ S32 LLScriptSensorEvent::getSize()
2391 return 4; 2391 return 4;
2392} 2392}
2393 2393
2394void LLScriptObjectRezEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2394void LLScriptObjectRezEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2395{ 2395{
2396 if (gErrorToText.getErrors()) 2396 if (gErrorToText.getErrors())
2397 { 2397 {
@@ -2448,7 +2448,7 @@ S32 LLScriptObjectRezEvent::getSize()
2448 return 4; 2448 return 4;
2449} 2449}
2450 2450
2451void LLScriptControlEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2451void LLScriptControlEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2452{ 2452{
2453 if (gErrorToText.getErrors()) 2453 if (gErrorToText.getErrors())
2454 { 2454 {
@@ -2535,7 +2535,7 @@ S32 LLScriptControlEvent::getSize()
2535 return 12; 2535 return 12;
2536} 2536}
2537 2537
2538void LLScriptLinkMessageEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2538void LLScriptLinkMessageEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2539{ 2539{
2540 if (gErrorToText.getErrors()) 2540 if (gErrorToText.getErrors())
2541 { 2541 {
@@ -2637,7 +2637,7 @@ S32 LLScriptLinkMessageEvent::getSize()
2637 return 16; 2637 return 16;
2638} 2638}
2639 2639
2640void LLScriptRemoteEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2640void LLScriptRemoteEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2641{ 2641{
2642 if (gErrorToText.getErrors()) 2642 if (gErrorToText.getErrors())
2643 { 2643 {
@@ -2769,7 +2769,7 @@ S32 LLScriptRemoteEvent::getSize()
2769 return 24; 2769 return 24;
2770} 2770}
2771 2771
2772void LLScriptHTTPResponseEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2772void LLScriptHTTPResponseEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2773{ 2773{
2774 if (gErrorToText.getErrors()) 2774 if (gErrorToText.getErrors())
2775 { 2775 {
@@ -2882,7 +2882,7 @@ S32 LLScriptHTTPResponseEvent::getSize()
2882} 2882}
2883 2883
2884 2884
2885void LLScriptMoneyEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2885void LLScriptMoneyEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2886{ 2886{
2887 if (gErrorToText.getErrors()) 2887 if (gErrorToText.getErrors())
2888 { 2888 {
@@ -2954,7 +2954,7 @@ S32 LLScriptMoneyEvent::getSize()
2954 return 8; 2954 return 8;
2955} 2955}
2956 2956
2957void LLScriptEmailEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2957void LLScriptEmailEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2958{ 2958{
2959 if (gErrorToText.getErrors()) 2959 if (gErrorToText.getErrors())
2960 { 2960 {
@@ -3071,7 +3071,7 @@ S32 LLScriptEmailEvent::getSize()
3071 return 20; 3071 return 20;
3072} 3072}
3073 3073
3074void LLScriptRezEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3074void LLScriptRezEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3075{ 3075{
3076 if (gErrorToText.getErrors()) 3076 if (gErrorToText.getErrors())
3077 { 3077 {
@@ -3128,7 +3128,7 @@ S32 LLScriptRezEvent::getSize()
3128 return 4; 3128 return 4;
3129} 3129}
3130 3130
3131void LLScriptNoSensorEvent::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3131void LLScriptNoSensorEvent::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3132{ 3132{
3133 if (gErrorToText.getErrors()) 3133 if (gErrorToText.getErrors())
3134 { 3134 {
@@ -3161,7 +3161,7 @@ S32 LLScriptNoSensorEvent::getSize()
3161 return 0; 3161 return 0;
3162} 3162}
3163 3163
3164void LLScriptAtTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3164void LLScriptAtTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3165{ 3165{
3166 if (gErrorToText.getErrors()) 3166 if (gErrorToText.getErrors())
3167 { 3167 {
@@ -3250,7 +3250,7 @@ S32 LLScriptAtTarget::getSize()
3250 3250
3251 3251
3252 3252
3253void LLScriptNotAtTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3253void LLScriptNotAtTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3254{ 3254{
3255 if (gErrorToText.getErrors()) 3255 if (gErrorToText.getErrors())
3256 { 3256 {
@@ -3283,7 +3283,7 @@ S32 LLScriptNotAtTarget::getSize()
3283 return 0; 3283 return 0;
3284} 3284}
3285 3285
3286void LLScriptAtRotTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3286void LLScriptAtRotTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3287{ 3287{
3288 if (gErrorToText.getErrors()) 3288 if (gErrorToText.getErrors())
3289 { 3289 {
@@ -3372,7 +3372,7 @@ S32 LLScriptAtRotTarget::getSize()
3372 3372
3373 3373
3374 3374
3375void LLScriptNotAtRotTarget::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3375void LLScriptNotAtRotTarget::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3376{ 3376{
3377 if (gErrorToText.getErrors()) 3377 if (gErrorToText.getErrors())
3378 { 3378 {
@@ -3416,7 +3416,7 @@ void LLScriptExpression::addExpression(LLScriptExpression *expression)
3416 mNextp = expression; 3416 mNextp = expression;
3417} 3417}
3418 3418
3419void LLScriptExpression::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3419void LLScriptExpression::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3420{ 3420{
3421 fprintf(fp, "Expression Base Class -- should never get here!\n"); 3421 fprintf(fp, "Expression Base Class -- should never get here!\n");
3422} 3422}
@@ -3427,7 +3427,7 @@ S32 LLScriptExpression::getSize()
3427 return 0; 3427 return 0;
3428} 3428}
3429 3429
3430void LLScriptExpression::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3430void LLScriptExpression::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3431{ 3431{
3432 if (gErrorToText.getErrors()) 3432 if (gErrorToText.getErrors())
3433 { 3433 {
@@ -3451,7 +3451,7 @@ void LLScriptExpression::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompileP
3451 } 3451 }
3452} 3452}
3453 3453
3454void LLScriptForExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3454void LLScriptForExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3455{ 3455{
3456 if (gErrorToText.getErrors()) 3456 if (gErrorToText.getErrors())
3457 { 3457 {
@@ -3563,7 +3563,7 @@ S32 LLScriptForExpressionList::getSize()
3563 return 0; 3563 return 0;
3564} 3564}
3565 3565
3566void LLScriptFuncExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3566void LLScriptFuncExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3567{ 3567{
3568 if (gErrorToText.getErrors()) 3568 if (gErrorToText.getErrors())
3569 { 3569 {
@@ -3700,7 +3700,7 @@ S32 LLScriptFuncExpressionList::getSize()
3700 return 0; 3700 return 0;
3701} 3701}
3702 3702
3703void LLScriptListExpressionList::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3703void LLScriptListExpressionList::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3704{ 3704{
3705 if (gErrorToText.getErrors()) 3705 if (gErrorToText.getErrors())
3706 { 3706 {
@@ -3800,7 +3800,7 @@ bool is_parameter(LLScriptIdentifier* identifier, LLScriptScopeEntry* function_s
3800} 3800}
3801 3801
3802// If assignment is to global variable, pushes this pointer on to stack. 3802// If assignment is to global variable, pushes this pointer on to stack.
3803void print_cil_load_address(FILE* fp, LLScriptExpression* exp, LLScriptScopeEntry* function_scope) 3803void print_cil_load_address(LLFILE* fp, LLScriptExpression* exp, LLScriptScopeEntry* function_scope)
3804{ 3804{
3805 LLScriptLValue *lvalue = (LLScriptLValue *) exp; 3805 LLScriptLValue *lvalue = (LLScriptLValue *) exp;
3806 LLScriptIdentifier *ident = lvalue->mIdentifier; 3806 LLScriptIdentifier *ident = lvalue->mIdentifier;
@@ -3836,7 +3836,7 @@ void print_cil_load_address(FILE* fp, LLScriptExpression* exp, LLScriptScopeEntr
3836 } 3836 }
3837} 3837}
3838 3838
3839void print_cil_accessor(FILE* fp, LLScriptLValue *lvalue) 3839void print_cil_accessor(LLFILE* fp, LLScriptLValue *lvalue)
3840{ 3840{
3841 LLScriptIdentifier *ident = lvalue->mIdentifier; 3841 LLScriptIdentifier *ident = lvalue->mIdentifier;
3842 print_cil_type(fp, lvalue->mReturnType); 3842 print_cil_type(fp, lvalue->mReturnType);
@@ -3845,13 +3845,13 @@ void print_cil_accessor(FILE* fp, LLScriptLValue *lvalue)
3845 fprintf(fp, "::%s\n", lvalue->mAccessor->mName); 3845 fprintf(fp, "::%s\n", lvalue->mAccessor->mName);
3846} 3846}
3847 3847
3848void print_cil_member(FILE* fp, LLScriptIdentifier *ident) 3848void print_cil_member(LLFILE* fp, LLScriptIdentifier *ident)
3849{ 3849{
3850 print_cil_type(fp, ident->mScopeEntry->mType); 3850 print_cil_type(fp, ident->mScopeEntry->mType);
3851 fprintf(fp, " LSL::%s\n", ident->mScopeEntry->mIdentifier); 3851 fprintf(fp, " LSL::%s\n", ident->mScopeEntry->mIdentifier);
3852} 3852}
3853 3853
3854void LLScriptLValue::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 3854void LLScriptLValue::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
3855{ 3855{
3856 if (gErrorToText.getErrors()) 3856 if (gErrorToText.getErrors())
3857 { 3857 {
@@ -4136,7 +4136,7 @@ S32 LLScriptLValue::getSize()
4136 return 0; 4136 return 0;
4137} 4137}
4138 4138
4139void print_asignment(FILE *fp, LLScriptExpression *exp) 4139void print_asignment(LLFILE *fp, LLScriptExpression *exp)
4140{ 4140{
4141 LLScriptLValue *lvalue = (LLScriptLValue *)exp; 4141 LLScriptLValue *lvalue = (LLScriptLValue *)exp;
4142 LLScriptIdentifier *ident = lvalue->mIdentifier; 4142 LLScriptIdentifier *ident = lvalue->mIdentifier;
@@ -4164,7 +4164,7 @@ void print_asignment(FILE *fp, LLScriptExpression *exp)
4164 } 4164 }
4165} 4165}
4166 4166
4167void print_cil_asignment(FILE *fp, LLScriptExpression *exp, LLScriptScopeEntry* function_scope) 4167void print_cil_asignment(LLFILE *fp, LLScriptExpression *exp, LLScriptScopeEntry* function_scope)
4168{ 4168{
4169 LLScriptLValue *lvalue = (LLScriptLValue *) exp; 4169 LLScriptLValue *lvalue = (LLScriptLValue *) exp;
4170 LLScriptIdentifier *ident = lvalue->mIdentifier; 4170 LLScriptIdentifier *ident = lvalue->mIdentifier;
@@ -4215,7 +4215,7 @@ void print_cil_asignment(FILE *fp, LLScriptExpression *exp, LLScriptScopeEntry*
4215 } 4215 }
4216} 4216}
4217 4217
4218void print_cast(FILE *fp, LSCRIPTType ret_type, LSCRIPTType right_type) 4218void print_cast(LLFILE *fp, LSCRIPTType ret_type, LSCRIPTType right_type)
4219{ 4219{
4220 if (right_type != ret_type) 4220 if (right_type != ret_type)
4221 { 4221 {
@@ -4319,7 +4319,7 @@ void store2stack(LLScriptExpression *exp, LLScriptExpression *lv, LLScriptByteCo
4319 chunk->addInteger(address); 4319 chunk->addInteger(address);
4320} 4320}
4321 4321
4322void print_cil_numeric_cast(FILE* fp, LSCRIPTType currentArg, LSCRIPTType otherArg) 4322void print_cil_numeric_cast(LLFILE* fp, LSCRIPTType currentArg, LSCRIPTType otherArg)
4323{ 4323{
4324 if((currentArg == LST_INTEGER) && (otherArg == LST_FLOATINGPOINT)) 4324 if((currentArg == LST_INTEGER) && (otherArg == LST_FLOATINGPOINT))
4325 { 4325 {
@@ -4327,7 +4327,7 @@ void print_cil_numeric_cast(FILE* fp, LSCRIPTType currentArg, LSCRIPTType otherA
4327 } 4327 }
4328} 4328}
4329 4329
4330void LLScriptAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4330void LLScriptAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4331{ 4331{
4332 if (gErrorToText.getErrors()) 4332 if (gErrorToText.getErrors())
4333 { 4333 {
@@ -4387,7 +4387,7 @@ S32 LLScriptAssignment::getSize()
4387 return 0; 4387 return 0;
4388} 4388}
4389 4389
4390void print_cil_add(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4390void print_cil_add(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4391{ 4391{
4392 switch(left_type) 4392 switch(left_type)
4393 { 4393 {
@@ -4429,7 +4429,7 @@ void print_cil_add(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4429 } 4429 }
4430} 4430}
4431 4431
4432void LLScriptAddAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4432void LLScriptAddAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4433{ 4433{
4434 if (gErrorToText.getErrors()) 4434 if (gErrorToText.getErrors())
4435 { 4435 {
@@ -4496,7 +4496,7 @@ S32 LLScriptAddAssignment::getSize()
4496 return 0; 4496 return 0;
4497} 4497}
4498 4498
4499void print_cil_sub(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4499void print_cil_sub(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4500{ 4500{
4501 switch(left_type) 4501 switch(left_type)
4502 { 4502 {
@@ -4528,7 +4528,7 @@ void print_cil_sub(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4528 } 4528 }
4529} 4529}
4530 4530
4531void LLScriptSubAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4531void LLScriptSubAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4532{ 4532{
4533 if (gErrorToText.getErrors()) 4533 if (gErrorToText.getErrors())
4534 { 4534 {
@@ -4595,7 +4595,7 @@ S32 LLScriptSubAssignment::getSize()
4595 return 0; 4595 return 0;
4596} 4596}
4597 4597
4598void print_cil_mul(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4598void print_cil_mul(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4599{ 4599{
4600 switch(left_type) 4600 switch(left_type)
4601 { 4601 {
@@ -4650,7 +4650,7 @@ void print_cil_mul(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4650 } 4650 }
4651} 4651}
4652 4652
4653void LLScriptMulAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4653void LLScriptMulAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4654{ 4654{
4655 if (gErrorToText.getErrors()) 4655 if (gErrorToText.getErrors())
4656 { 4656 {
@@ -4717,7 +4717,7 @@ S32 LLScriptMulAssignment::getSize()
4717 return 0; 4717 return 0;
4718} 4718}
4719 4719
4720void print_cil_div(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4720void print_cil_div(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4721{ 4721{
4722 switch(left_type) 4722 switch(left_type)
4723 { 4723 {
@@ -4765,7 +4765,7 @@ void print_cil_div(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4765 } 4765 }
4766} 4766}
4767 4767
4768void LLScriptDivAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4768void LLScriptDivAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4769{ 4769{
4770 if (gErrorToText.getErrors()) 4770 if (gErrorToText.getErrors())
4771 { 4771 {
@@ -4832,7 +4832,7 @@ S32 LLScriptDivAssignment::getSize()
4832 return 0; 4832 return 0;
4833} 4833}
4834 4834
4835void print_cil_mod(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4835void print_cil_mod(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4836{ 4836{
4837 switch(left_type) 4837 switch(left_type)
4838 { 4838 {
@@ -4855,7 +4855,7 @@ void print_cil_mod(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4855 } 4855 }
4856} 4856}
4857 4857
4858void LLScriptModAssignment::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4858void LLScriptModAssignment::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4859{ 4859{
4860 if (gErrorToText.getErrors()) 4860 if (gErrorToText.getErrors())
4861 { 4861 {
@@ -4920,7 +4920,7 @@ S32 LLScriptModAssignment::getSize()
4920 return 0; 4920 return 0;
4921} 4921}
4922 4922
4923void print_cil_eq(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type) 4923void print_cil_eq(LLFILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4924{ 4924{
4925 switch(left_type) 4925 switch(left_type)
4926 { 4926 {
@@ -4961,7 +4961,7 @@ void print_cil_eq(FILE* fp, LSCRIPTType left_type, LSCRIPTType right_type)
4961 } 4961 }
4962} 4962}
4963 4963
4964void LLScriptEquality::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 4964void LLScriptEquality::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
4965{ 4965{
4966 if (gErrorToText.getErrors()) 4966 if (gErrorToText.getErrors())
4967 { 4967 {
@@ -5021,7 +5021,7 @@ S32 LLScriptEquality::getSize()
5021 return 0; 5021 return 0;
5022} 5022}
5023 5023
5024void LLScriptNotEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5024void LLScriptNotEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5025{ 5025{
5026 if (gErrorToText.getErrors()) 5026 if (gErrorToText.getErrors())
5027 { 5027 {
@@ -5081,7 +5081,7 @@ S32 LLScriptNotEquals::getSize()
5081 return 0; 5081 return 0;
5082} 5082}
5083 5083
5084void LLScriptLessEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5084void LLScriptLessEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5085{ 5085{
5086 if (gErrorToText.getErrors()) 5086 if (gErrorToText.getErrors())
5087 { 5087 {
@@ -5141,7 +5141,7 @@ S32 LLScriptLessEquals::getSize()
5141 return 0; 5141 return 0;
5142} 5142}
5143 5143
5144void LLScriptGreaterEquals::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5144void LLScriptGreaterEquals::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5145{ 5145{
5146 if (gErrorToText.getErrors()) 5146 if (gErrorToText.getErrors())
5147 { 5147 {
@@ -5201,7 +5201,7 @@ S32 LLScriptGreaterEquals::getSize()
5201 return 0; 5201 return 0;
5202} 5202}
5203 5203
5204void LLScriptLessThan::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5204void LLScriptLessThan::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5205{ 5205{
5206 if (gErrorToText.getErrors()) 5206 if (gErrorToText.getErrors())
5207 { 5207 {
@@ -5259,7 +5259,7 @@ S32 LLScriptLessThan::getSize()
5259 return 0; 5259 return 0;
5260} 5260}
5261 5261
5262void LLScriptGreaterThan::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5262void LLScriptGreaterThan::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5263{ 5263{
5264 if (gErrorToText.getErrors()) 5264 if (gErrorToText.getErrors())
5265 { 5265 {
@@ -5317,7 +5317,7 @@ S32 LLScriptGreaterThan::getSize()
5317 return 0; 5317 return 0;
5318} 5318}
5319 5319
5320void LLScriptPlus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5320void LLScriptPlus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5321{ 5321{
5322 if (gErrorToText.getErrors()) 5322 if (gErrorToText.getErrors())
5323 { 5323 {
@@ -5377,7 +5377,7 @@ S32 LLScriptPlus::getSize()
5377 return 0; 5377 return 0;
5378} 5378}
5379 5379
5380void LLScriptMinus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5380void LLScriptMinus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5381{ 5381{
5382 if (gErrorToText.getErrors()) 5382 if (gErrorToText.getErrors())
5383 { 5383 {
@@ -5437,7 +5437,7 @@ S32 LLScriptMinus::getSize()
5437 return 0; 5437 return 0;
5438} 5438}
5439 5439
5440void LLScriptTimes::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5440void LLScriptTimes::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5441{ 5441{
5442 if (gErrorToText.getErrors()) 5442 if (gErrorToText.getErrors())
5443 { 5443 {
@@ -5497,7 +5497,7 @@ S32 LLScriptTimes::getSize()
5497 return 0; 5497 return 0;
5498} 5498}
5499 5499
5500void LLScriptDivide::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5500void LLScriptDivide::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5501{ 5501{
5502 if (gErrorToText.getErrors()) 5502 if (gErrorToText.getErrors())
5503 { 5503 {
@@ -5557,7 +5557,7 @@ S32 LLScriptDivide::getSize()
5557 return 0; 5557 return 0;
5558} 5558}
5559 5559
5560void LLScriptMod::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5560void LLScriptMod::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5561{ 5561{
5562 if (gErrorToText.getErrors()) 5562 if (gErrorToText.getErrors())
5563 { 5563 {
@@ -5615,7 +5615,7 @@ S32 LLScriptMod::getSize()
5615 return 0; 5615 return 0;
5616} 5616}
5617 5617
5618void LLScriptBitAnd::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5618void LLScriptBitAnd::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5619{ 5619{
5620 if (gErrorToText.getErrors()) 5620 if (gErrorToText.getErrors())
5621 { 5621 {
@@ -5671,7 +5671,7 @@ S32 LLScriptBitAnd::getSize()
5671 return 0; 5671 return 0;
5672} 5672}
5673 5673
5674void LLScriptBitOr::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5674void LLScriptBitOr::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5675{ 5675{
5676 if (gErrorToText.getErrors()) 5676 if (gErrorToText.getErrors())
5677 { 5677 {
@@ -5727,7 +5727,7 @@ S32 LLScriptBitOr::getSize()
5727 return 0; 5727 return 0;
5728} 5728}
5729 5729
5730void LLScriptBitXor::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5730void LLScriptBitXor::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5731{ 5731{
5732 if (gErrorToText.getErrors()) 5732 if (gErrorToText.getErrors())
5733 { 5733 {
@@ -5783,7 +5783,7 @@ S32 LLScriptBitXor::getSize()
5783 return 0; 5783 return 0;
5784} 5784}
5785 5785
5786void LLScriptBooleanAnd::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5786void LLScriptBooleanAnd::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5787{ 5787{
5788 if (gErrorToText.getErrors()) 5788 if (gErrorToText.getErrors())
5789 { 5789 {
@@ -5839,7 +5839,7 @@ S32 LLScriptBooleanAnd::getSize()
5839 return 0; 5839 return 0;
5840} 5840}
5841 5841
5842void LLScriptBooleanOr::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5842void LLScriptBooleanOr::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5843{ 5843{
5844 if (gErrorToText.getErrors()) 5844 if (gErrorToText.getErrors())
5845 { 5845 {
@@ -5895,7 +5895,7 @@ S32 LLScriptBooleanOr::getSize()
5895 return 0; 5895 return 0;
5896} 5896}
5897 5897
5898void LLScriptShiftLeft::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5898void LLScriptShiftLeft::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5899{ 5899{
5900 if (gErrorToText.getErrors()) 5900 if (gErrorToText.getErrors())
5901 { 5901 {
@@ -5952,7 +5952,7 @@ S32 LLScriptShiftLeft::getSize()
5952} 5952}
5953 5953
5954 5954
5955void LLScriptShiftRight::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 5955void LLScriptShiftRight::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
5956{ 5956{
5957 if (gErrorToText.getErrors()) 5957 if (gErrorToText.getErrors())
5958 { 5958 {
@@ -6008,7 +6008,7 @@ S32 LLScriptShiftRight::getSize()
6008 return 0; 6008 return 0;
6009} 6009}
6010 6010
6011void LLScriptParenthesis::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6011void LLScriptParenthesis::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6012{ 6012{
6013 if (gErrorToText.getErrors()) 6013 if (gErrorToText.getErrors())
6014 { 6014 {
@@ -6041,7 +6041,7 @@ S32 LLScriptParenthesis::getSize()
6041 return 0; 6041 return 0;
6042} 6042}
6043 6043
6044void LLScriptUnaryMinus::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6044void LLScriptUnaryMinus::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6045{ 6045{
6046 if (gErrorToText.getErrors()) 6046 if (gErrorToText.getErrors())
6047 { 6047 {
@@ -6088,7 +6088,7 @@ S32 LLScriptUnaryMinus::getSize()
6088 return 0; 6088 return 0;
6089} 6089}
6090 6090
6091void LLScriptBooleanNot::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6091void LLScriptBooleanNot::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6092{ 6092{
6093 if (gErrorToText.getErrors()) 6093 if (gErrorToText.getErrors())
6094 { 6094 {
@@ -6138,7 +6138,7 @@ S32 LLScriptBooleanNot::getSize()
6138 return 0; 6138 return 0;
6139} 6139}
6140 6140
6141void LLScriptBitNot::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6141void LLScriptBitNot::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6142{ 6142{
6143 if (gErrorToText.getErrors()) 6143 if (gErrorToText.getErrors())
6144 { 6144 {
@@ -6187,7 +6187,7 @@ S32 LLScriptBitNot::getSize()
6187 return 0; 6187 return 0;
6188} 6188}
6189 6189
6190void LLScriptPreIncrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6190void LLScriptPreIncrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6191{ 6191{
6192 if (gErrorToText.getErrors()) 6192 if (gErrorToText.getErrors())
6193 { 6193 {
@@ -6295,7 +6295,7 @@ S32 LLScriptPreIncrement::getSize()
6295 return 0; 6295 return 0;
6296} 6296}
6297 6297
6298void LLScriptPreDecrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6298void LLScriptPreDecrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6299{ 6299{
6300 if (gErrorToText.getErrors()) 6300 if (gErrorToText.getErrors())
6301 { 6301 {
@@ -6403,7 +6403,7 @@ S32 LLScriptPreDecrement::getSize()
6403 return 0; 6403 return 0;
6404} 6404}
6405 6405
6406void LLScriptTypeCast::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6406void LLScriptTypeCast::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6407{ 6407{
6408 if (gErrorToText.getErrors()) 6408 if (gErrorToText.getErrors())
6409 { 6409 {
@@ -6455,7 +6455,7 @@ S32 LLScriptTypeCast::getSize()
6455 return 0; 6455 return 0;
6456} 6456}
6457 6457
6458void LLScriptVectorInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6458void LLScriptVectorInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6459{ 6459{
6460 if (gErrorToText.getErrors()) 6460 if (gErrorToText.getErrors())
6461 { 6461 {
@@ -6571,7 +6571,7 @@ S32 LLScriptVectorInitializer::getSize()
6571 return 0; 6571 return 0;
6572} 6572}
6573 6573
6574void LLScriptQuaternionInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6574void LLScriptQuaternionInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6575{ 6575{
6576 if (gErrorToText.getErrors()) 6576 if (gErrorToText.getErrors())
6577 { 6577 {
@@ -6713,7 +6713,7 @@ S32 LLScriptQuaternionInitializer::getSize()
6713 return 0; 6713 return 0;
6714} 6714}
6715 6715
6716void LLScriptListInitializer::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6716void LLScriptListInitializer::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6717{ 6717{
6718 if (gErrorToText.getErrors()) 6718 if (gErrorToText.getErrors())
6719 { 6719 {
@@ -6793,7 +6793,7 @@ S32 LLScriptListInitializer::getSize()
6793 return 0; 6793 return 0;
6794} 6794}
6795 6795
6796void LLScriptPostIncrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6796void LLScriptPostIncrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6797{ 6797{
6798 if (gErrorToText.getErrors()) 6798 if (gErrorToText.getErrors())
6799 { 6799 {
@@ -6925,7 +6925,7 @@ S32 LLScriptPostIncrement::getSize()
6925 return 0; 6925 return 0;
6926} 6926}
6927 6927
6928void LLScriptPostDecrement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 6928void LLScriptPostDecrement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
6929{ 6929{
6930 if (gErrorToText.getErrors()) 6930 if (gErrorToText.getErrors())
6931 { 6931 {
@@ -7058,7 +7058,7 @@ S32 LLScriptPostDecrement::getSize()
7058} 7058}
7059 7059
7060// Generate arg list. 7060// Generate arg list.
7061void print_cil_arg_list(FILE *fp, LLScriptFuncExpressionList* exp_list) 7061void print_cil_arg_list(LLFILE *fp, LLScriptFuncExpressionList* exp_list)
7062{ 7062{
7063 // Print first argument. 7063 // Print first argument.
7064 print_cil_type(fp, exp_list->mFirstp->mReturnType); 7064 print_cil_type(fp, exp_list->mFirstp->mReturnType);
@@ -7071,7 +7071,7 @@ void print_cil_arg_list(FILE *fp, LLScriptFuncExpressionList* exp_list)
7071 } 7071 }
7072} 7072}
7073 7073
7074void LLScriptFunctionCall::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7074void LLScriptFunctionCall::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7075{ 7075{
7076 if (gErrorToText.getErrors()) 7076 if (gErrorToText.getErrors())
7077 { 7077 {
@@ -7260,7 +7260,7 @@ S32 LLScriptFunctionCall::getSize()
7260 return 0; 7260 return 0;
7261} 7261}
7262 7262
7263void LLScriptPrint::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7263void LLScriptPrint::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7264{ 7264{
7265 if (gErrorToText.getErrors()) 7265 if (gErrorToText.getErrors())
7266 { 7266 {
@@ -7299,7 +7299,7 @@ S32 LLScriptPrint::getSize()
7299 return 0; 7299 return 0;
7300} 7300}
7301 7301
7302void LLScriptConstantExpression::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7302void LLScriptConstantExpression::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7303{ 7303{
7304 if (gErrorToText.getErrors()) 7304 if (gErrorToText.getErrors())
7305 { 7305 {
@@ -7338,7 +7338,7 @@ void LLScriptStatement::addStatement(LLScriptStatement *event)
7338 mNextp = event; 7338 mNextp = event;
7339} 7339}
7340 7340
7341void LLScriptStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7341void LLScriptStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7342{ 7342{
7343 fprintf(fp, "Statement Base Class -- should never get here!\n"); 7343 fprintf(fp, "Statement Base Class -- should never get here!\n");
7344} 7344}
@@ -7349,7 +7349,7 @@ S32 LLScriptStatement::getSize()
7349 return 0; 7349 return 0;
7350} 7350}
7351 7351
7352void LLScriptStatement::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7352void LLScriptStatement::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7353{ 7353{
7354 if (gErrorToText.getErrors()) 7354 if (gErrorToText.getErrors())
7355 { 7355 {
@@ -7384,7 +7384,7 @@ S32 LLScriptStatementSequence::getSize()
7384 return 0; 7384 return 0;
7385} 7385}
7386 7386
7387void LLScriptStatementSequence::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7387void LLScriptStatementSequence::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7388{ 7388{
7389 if (gErrorToText.getErrors()) 7389 if (gErrorToText.getErrors())
7390 { 7390 {
@@ -7431,7 +7431,7 @@ S32 LLScriptNOOP::getSize()
7431 return 0; 7431 return 0;
7432} 7432}
7433 7433
7434void LLScriptNOOP::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7434void LLScriptNOOP::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7435{ 7435{
7436 if (gErrorToText.getErrors()) 7436 if (gErrorToText.getErrors())
7437 { 7437 {
@@ -7527,7 +7527,7 @@ void add_exit_pops(LLScriptByteCodeChunk *chunk, LLScriptScopeEntry *entry)
7527 } 7527 }
7528} 7528}
7529 7529
7530void print_exit_pops(FILE *fp, LLScriptScopeEntry *entry) 7530void print_exit_pops(LLFILE *fp, LLScriptScopeEntry *entry)
7531{ 7531{
7532 // remember that we need to pop in reverse order 7532 // remember that we need to pop in reverse order
7533 S32 number, i; 7533 S32 number, i;
@@ -7557,7 +7557,7 @@ S32 LLScriptStateChange::getSize()
7557 return 0; 7557 return 0;
7558} 7558}
7559 7559
7560void LLScriptStateChange::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7560void LLScriptStateChange::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7561{ 7561{
7562 if (gErrorToText.getErrors()) 7562 if (gErrorToText.getErrors())
7563 { 7563 {
@@ -7627,7 +7627,7 @@ S32 LLScriptJump::getSize()
7627 return 0; 7627 return 0;
7628} 7628}
7629 7629
7630void LLScriptJump::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7630void LLScriptJump::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7631{ 7631{
7632 if (gErrorToText.getErrors()) 7632 if (gErrorToText.getErrors())
7633 { 7633 {
@@ -7690,7 +7690,7 @@ S32 LLScriptLabel::getSize()
7690 return 0; 7690 return 0;
7691} 7691}
7692 7692
7693void LLScriptLabel::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7693void LLScriptLabel::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7694{ 7694{
7695 if (gErrorToText.getErrors()) 7695 if (gErrorToText.getErrors())
7696 { 7696 {
@@ -7747,7 +7747,7 @@ void add_return(LLScriptByteCodeChunk *chunk, LLScriptScopeEntry *entry)
7747 chunk->addByte(LSCRIPTOpCodes[LOPC_RETURN]); 7747 chunk->addByte(LSCRIPTOpCodes[LOPC_RETURN]);
7748} 7748}
7749 7749
7750void print_return(FILE *fp, LLScriptScopeEntry *entry) 7750void print_return(LLFILE *fp, LLScriptScopeEntry *entry)
7751{ 7751{
7752 print_exit_pops(fp, entry); 7752 print_exit_pops(fp, entry);
7753 fprintf(fp, "RETURN\n"); 7753 fprintf(fp, "RETURN\n");
@@ -7759,7 +7759,7 @@ S32 LLScriptReturn::getSize()
7759 return 0; 7759 return 0;
7760} 7760}
7761 7761
7762void LLScriptReturn::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7762void LLScriptReturn::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7763{ 7763{
7764 if (gErrorToText.getErrors()) 7764 if (gErrorToText.getErrors())
7765 { 7765 {
@@ -7881,7 +7881,7 @@ S32 LLScriptExpressionStatement::getSize()
7881 return 0; 7881 return 0;
7882} 7882}
7883 7883
7884void LLScriptExpressionStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7884void LLScriptExpressionStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7885{ 7885{
7886 if (gErrorToText.getErrors()) 7886 if (gErrorToText.getErrors())
7887 { 7887 {
@@ -7951,7 +7951,7 @@ S32 LLScriptIf::getSize()
7951 return 0; 7951 return 0;
7952} 7952}
7953 7953
7954void LLScriptIf::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 7954void LLScriptIf::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
7955{ 7955{
7956 if (gErrorToText.getErrors()) 7956 if (gErrorToText.getErrors())
7957 { 7957 {
@@ -8022,7 +8022,7 @@ S32 LLScriptIfElse::getSize()
8022 return 0; 8022 return 0;
8023} 8023}
8024 8024
8025void LLScriptIfElse::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8025void LLScriptIfElse::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8026{ 8026{
8027 if (gErrorToText.getErrors()) 8027 if (gErrorToText.getErrors())
8028 { 8028 {
@@ -8115,7 +8115,7 @@ S32 LLScriptFor::getSize()
8115 return 0; 8115 return 0;
8116} 8116}
8117 8117
8118void LLScriptFor::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8118void LLScriptFor::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8119{ 8119{
8120 if (gErrorToText.getErrors()) 8120 if (gErrorToText.getErrors())
8121 { 8121 {
@@ -8230,7 +8230,7 @@ S32 LLScriptDoWhile::getSize()
8230 return 0; 8230 return 0;
8231} 8231}
8232 8232
8233void LLScriptDoWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8233void LLScriptDoWhile::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8234{ 8234{
8235 if (gErrorToText.getErrors()) 8235 if (gErrorToText.getErrors())
8236 { 8236 {
@@ -8303,7 +8303,7 @@ S32 LLScriptWhile::getSize()
8303 return 0; 8303 return 0;
8304} 8304}
8305 8305
8306void LLScriptWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8306void LLScriptWhile::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8307{ 8307{
8308 if (gErrorToText.getErrors()) 8308 if (gErrorToText.getErrors())
8309 { 8309 {
@@ -8386,7 +8386,7 @@ S32 LLScriptDeclaration::getSize()
8386 return mType->getSize(); 8386 return mType->getSize();
8387} 8387}
8388 8388
8389void LLScriptDeclaration::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8389void LLScriptDeclaration::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8390{ 8390{
8391 if (gErrorToText.getErrors()) 8391 if (gErrorToText.getErrors())
8392 { 8392 {
@@ -8645,7 +8645,7 @@ S32 LLScriptCompoundStatement::getSize()
8645 return 0; 8645 return 0;
8646} 8646}
8647 8647
8648void LLScriptCompoundStatement::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8648void LLScriptCompoundStatement::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8649{ 8649{
8650 if (gErrorToText.getErrors()) 8650 if (gErrorToText.getErrors())
8651 { 8651 {
@@ -8721,7 +8721,7 @@ void LLScriptEventHandler::addEvent(LLScriptEventHandler *event)
8721 mNextp = event; 8721 mNextp = event;
8722} 8722}
8723 8723
8724void LLScriptEventHandler::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8724void LLScriptEventHandler::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8725{ 8725{
8726 if (gErrorToText.getErrors()) 8726 if (gErrorToText.getErrors())
8727 { 8727 {
@@ -8751,7 +8751,7 @@ S32 LLScriptEventHandler::getSize()
8751 8751
8752U64 gCurrentHandler = 0; 8752U64 gCurrentHandler = 0;
8753 8753
8754void print_cil_local_init(FILE* fp, LLScriptScopeEntry* scopeEntry) 8754void print_cil_local_init(LLFILE* fp, LLScriptScopeEntry* scopeEntry)
8755{ 8755{
8756 if(scopeEntry->mLocals.getNumber() > 0) 8756 if(scopeEntry->mLocals.getNumber() > 0)
8757 { 8757 {
@@ -8768,7 +8768,7 @@ void print_cil_local_init(FILE* fp, LLScriptScopeEntry* scopeEntry)
8768 } 8768 }
8769} 8769}
8770 8770
8771void LLScriptEventHandler::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 8771void LLScriptEventHandler::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
8772{ 8772{
8773 if (gErrorToText.getErrors()) 8773 if (gErrorToText.getErrors())
8774 { 8774 {
@@ -9071,7 +9071,7 @@ void LLScriptFunctionDec::addFunctionParameter(LLScriptFunctionDec *dec)
9071 mNextp = dec; 9071 mNextp = dec;
9072} 9072}
9073 9073
9074void LLScriptFunctionDec::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9074void LLScriptFunctionDec::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9075{ 9075{
9076 if (gErrorToText.getErrors()) 9076 if (gErrorToText.getErrors())
9077 { 9077 {
@@ -9108,7 +9108,7 @@ S32 LLScriptFunctionDec::getSize()
9108 return 0; 9108 return 0;
9109} 9109}
9110 9110
9111void LLScriptFunctionDec::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9111void LLScriptFunctionDec::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9112{ 9112{
9113 if (gErrorToText.getErrors()) 9113 if (gErrorToText.getErrors())
9114 { 9114 {
@@ -9194,7 +9194,7 @@ void LLScriptGlobalFunctions::addGlobalFunction(LLScriptGlobalFunctions *global)
9194 mNextp = global; 9194 mNextp = global;
9195} 9195}
9196 9196
9197void LLScriptGlobalFunctions::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9197void LLScriptGlobalFunctions::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9198{ 9198{
9199 if (gErrorToText.getErrors()) 9199 if (gErrorToText.getErrors())
9200 { 9200 {
@@ -9222,7 +9222,7 @@ S32 LLScriptGlobalFunctions::getSize()
9222 return 0; 9222 return 0;
9223} 9223}
9224 9224
9225void LLScriptGlobalFunctions::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9225void LLScriptGlobalFunctions::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9226{ 9226{
9227 if (gErrorToText.getErrors()) 9227 if (gErrorToText.getErrors())
9228 { 9228 {
@@ -9507,7 +9507,7 @@ void LLScriptState::addState(LLScriptState *state)
9507 mNextp = state; 9507 mNextp = state;
9508} 9508}
9509 9509
9510void LLScriptState::gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9510void LLScriptState::gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9511{ 9511{
9512 if (gErrorToText.getErrors()) 9512 if (gErrorToText.getErrors())
9513 { 9513 {
@@ -9535,7 +9535,7 @@ S32 LLScriptState::getSize()
9535 return 0; 9535 return 0;
9536} 9536}
9537 9537
9538void LLScriptState::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9538void LLScriptState::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9539{ 9539{
9540 if (gErrorToText.getErrors()) 9540 if (gErrorToText.getErrors())
9541 { 9541 {
@@ -9755,7 +9755,7 @@ void LLScriptScript::setBytecodeDest(const char* dst_filename)
9755 mBytecodeDest[MAX_STRING-1] = '\0'; 9755 mBytecodeDest[MAX_STRING-1] = '\0';
9756} 9756}
9757 9757
9758void print_cil_globals(FILE* fp, LLScriptGlobalVariable* global) 9758void print_cil_globals(LLFILE* fp, LLScriptGlobalVariable* global)
9759{ 9759{
9760 fprintf(fp, ".field private "); 9760 fprintf(fp, ".field private ");
9761 print_cil_type(fp, global->mType->mType); 9761 print_cil_type(fp, global->mType->mType);
@@ -9768,7 +9768,7 @@ void print_cil_globals(FILE* fp, LLScriptGlobalVariable* global)
9768 } 9768 }
9769} 9769}
9770 9770
9771void LLScriptScript::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 9771void LLScriptScript::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
9772{ 9772{
9773 if (gErrorToText.getErrors()) 9773 if (gErrorToText.getErrors())
9774 { 9774 {
@@ -9939,7 +9939,7 @@ void LLScriptScript::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass
9939 9939
9940 // now, put it all together and spit it out 9940 // now, put it all together and spit it out
9941 // we need 9941 // we need
9942 FILE* bcfp = LLFile::fopen(mBytecodeDest, "wb"); /*Flawfinder: ignore*/ 9942 LLFILE* bcfp = LLFile::fopen(mBytecodeDest, "wb"); /*Flawfinder: ignore*/
9943 9943
9944 code->build(fp, bcfp); 9944 code->build(fp, bcfp);
9945 fclose(bcfp); 9945 fclose(bcfp);
diff --git a/linden/indra/lscript/lscript_compile/lscript_tree.h b/linden/indra/lscript/lscript_compile/lscript_tree.h
index 393b3e2..1c2ba1f 100644
--- a/linden/indra/lscript/lscript_compile/lscript_tree.h
+++ b/linden/indra/lscript/lscript_compile/lscript_tree.h
@@ -53,7 +53,7 @@ public:
53 53
54 ~LLScriptType() {} 54 ~LLScriptType() {}
55 55
56 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 56 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
57 S32 getSize(); 57 S32 getSize();
58 58
59 LSCRIPTType mType; 59 LSCRIPTType mType;
@@ -70,7 +70,7 @@ public:
70 70
71 virtual ~LLScriptConstant() {} 71 virtual ~LLScriptConstant() {}
72 72
73 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 73 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
74 S32 getSize(); 74 S32 getSize();
75 75
76 LSCRIPTType mType; 76 LSCRIPTType mType;
@@ -86,7 +86,7 @@ public:
86 86
87 ~LLScriptConstantInteger() {} 87 ~LLScriptConstantInteger() {}
88 88
89 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 89 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
90 S32 getSize(); 90 S32 getSize();
91 91
92 S32 mValue; 92 S32 mValue;
@@ -102,7 +102,7 @@ public:
102 102
103 ~LLScriptConstantFloat() {} 103 ~LLScriptConstantFloat() {}
104 104
105 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 105 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
106 S32 getSize(); 106 S32 getSize();
107 107
108 F32 mValue; 108 F32 mValue;
@@ -122,7 +122,7 @@ public:
122 mValue = NULL; 122 mValue = NULL;
123 } 123 }
124 124
125 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 125 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
126 S32 getSize(); 126 S32 getSize();
127 127
128 char *mValue; 128 char *mValue;
@@ -143,7 +143,7 @@ public:
143 mName = NULL; 143 mName = NULL;
144 } 144 }
145 145
146 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 146 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
147 S32 getSize(); 147 S32 getSize();
148 148
149 char *mName; 149 char *mName;
@@ -177,7 +177,7 @@ public:
177 // don't delete next pointer because we're going to store allocation lists and delete from those 177 // don't delete next pointer because we're going to store allocation lists and delete from those
178 } 178 }
179 179
180 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 180 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
181 S32 getSize(); 181 S32 getSize();
182 182
183 LSCRIPTSimpleAssignableType mType; 183 LSCRIPTSimpleAssignableType mType;
@@ -196,7 +196,7 @@ public:
196 { 196 {
197 } 197 }
198 198
199 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 199 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
200 S32 getSize(); 200 S32 getSize();
201 201
202 LLScriptIdentifier *mIdentifier; 202 LLScriptIdentifier *mIdentifier;
@@ -214,7 +214,7 @@ public:
214 { 214 {
215 } 215 }
216 216
217 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 217 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
218 S32 getSize(); 218 S32 getSize();
219 219
220 LLScriptConstant *mConstant; 220 LLScriptConstant *mConstant;
@@ -235,7 +235,7 @@ public:
235 { 235 {
236 } 236 }
237 237
238 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 238 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
239 S32 getSize(); 239 S32 getSize();
240 240
241 LLScriptSimpleAssignable *mEntry1; 241 LLScriptSimpleAssignable *mEntry1;
@@ -259,7 +259,7 @@ public:
259 { 259 {
260 } 260 }
261 261
262 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 262 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
263 S32 getSize(); 263 S32 getSize();
264 264
265 LLScriptSimpleAssignable *mEntry1; 265 LLScriptSimpleAssignable *mEntry1;
@@ -280,7 +280,7 @@ public:
280 { 280 {
281 } 281 }
282 282
283 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 283 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
284 S32 getSize(); 284 S32 getSize();
285 285
286 LLScriptSimpleAssignable *mEntryList; 286 LLScriptSimpleAssignable *mEntryList;
@@ -303,9 +303,9 @@ public:
303 { 303 {
304 } 304 }
305 305
306 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 306 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
307 307
308 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 308 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
309 S32 getSize(); 309 S32 getSize();
310 310
311 LLScriptType *mType; 311 LLScriptType *mType;
@@ -330,7 +330,7 @@ public:
330 // don't delete next pointer because we're going to store allocation lists and delete from those 330 // don't delete next pointer because we're going to store allocation lists and delete from those
331 } 331 }
332 332
333 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 333 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
334 S32 getSize(); 334 S32 getSize();
335 335
336 LSCRIPTStateEventType mType; 336 LSCRIPTStateEventType mType;
@@ -344,7 +344,7 @@ public:
344 { 344 {
345 } 345 }
346 346
347 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 347 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
348 S32 getSize(); 348 S32 getSize();
349 349
350 ~LLScriptStateEntryEvent() {} 350 ~LLScriptStateEntryEvent() {}
@@ -360,7 +360,7 @@ public:
360 360
361 ~LLScriptStateExitEvent() {} 361 ~LLScriptStateExitEvent() {}
362 362
363 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 363 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
364 S32 getSize(); 364 S32 getSize();
365}; 365};
366 366
@@ -376,7 +376,7 @@ public:
376 { 376 {
377 } 377 }
378 378
379 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 379 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
380 S32 getSize(); 380 S32 getSize();
381 381
382 LLScriptIdentifier *mCount; 382 LLScriptIdentifier *mCount;
@@ -394,7 +394,7 @@ public:
394 { 394 {
395 } 395 }
396 396
397 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 397 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
398 S32 getSize(); 398 S32 getSize();
399 399
400 LLScriptIdentifier *mCount; 400 LLScriptIdentifier *mCount;
@@ -412,7 +412,7 @@ public:
412 { 412 {
413 } 413 }
414 414
415 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 415 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
416 S32 getSize(); 416 S32 getSize();
417 417
418 LLScriptIdentifier *mCount; 418 LLScriptIdentifier *mCount;
@@ -430,7 +430,7 @@ public:
430 { 430 {
431 } 431 }
432 432
433 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 433 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
434 S32 getSize(); 434 S32 getSize();
435 435
436 LLScriptIdentifier *mCount; 436 LLScriptIdentifier *mCount;
@@ -448,7 +448,7 @@ public:
448 { 448 {
449 } 449 }
450 450
451 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 451 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
452 S32 getSize(); 452 S32 getSize();
453 453
454 LLScriptIdentifier *mCount; 454 LLScriptIdentifier *mCount;
@@ -466,7 +466,7 @@ public:
466 { 466 {
467 } 467 }
468 468
469 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 469 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
470 S32 getSize(); 470 S32 getSize();
471 471
472 LLScriptIdentifier *mCount; 472 LLScriptIdentifier *mCount;
@@ -484,7 +484,7 @@ public:
484 { 484 {
485 } 485 }
486 486
487 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 487 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
488 S32 getSize(); 488 S32 getSize();
489 489
490 LLScriptIdentifier *mPosition; 490 LLScriptIdentifier *mPosition;
@@ -502,7 +502,7 @@ public:
502 { 502 {
503 } 503 }
504 504
505 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 505 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
506 S32 getSize(); 506 S32 getSize();
507 507
508 LLScriptIdentifier *mPosition; 508 LLScriptIdentifier *mPosition;
@@ -520,7 +520,7 @@ public:
520 { 520 {
521 } 521 }
522 522
523 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 523 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
524 S32 getSize(); 524 S32 getSize();
525 525
526 LLScriptIdentifier *mPosition; 526 LLScriptIdentifier *mPosition;
@@ -536,7 +536,7 @@ public:
536 536
537 ~LLScriptInventoryEvent() {} 537 ~LLScriptInventoryEvent() {}
538 538
539 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 539 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
540 S32 getSize(); 540 S32 getSize();
541 541
542 LLScriptIdentifier *mChange; 542 LLScriptIdentifier *mChange;
@@ -552,7 +552,7 @@ public:
552 552
553 ~LLScriptAttachEvent() {} 553 ~LLScriptAttachEvent() {}
554 554
555 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 555 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
556 S32 getSize(); 556 S32 getSize();
557 557
558 LLScriptIdentifier *mAttach; 558 LLScriptIdentifier *mAttach;
@@ -568,7 +568,7 @@ public:
568 568
569 ~LLScriptDataserverEvent() {} 569 ~LLScriptDataserverEvent() {}
570 570
571 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 571 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
572 S32 getSize(); 572 S32 getSize();
573 573
574 LLScriptIdentifier *mID; 574 LLScriptIdentifier *mID;
@@ -585,7 +585,7 @@ public:
585 585
586 ~LLScriptTimerEvent() {} 586 ~LLScriptTimerEvent() {}
587 587
588 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 588 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
589 S32 getSize(); 589 S32 getSize();
590}; 590};
591 591
@@ -599,7 +599,7 @@ public:
599 599
600 ~LLScriptMovingStartEvent() {} 600 ~LLScriptMovingStartEvent() {}
601 601
602 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 602 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
603 S32 getSize(); 603 S32 getSize();
604}; 604};
605 605
@@ -613,7 +613,7 @@ public:
613 613
614 ~LLScriptMovingEndEvent() {} 614 ~LLScriptMovingEndEvent() {}
615 615
616 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 616 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
617 S32 getSize(); 617 S32 getSize();
618}; 618};
619 619
@@ -627,7 +627,7 @@ public:
627 627
628 ~LLScriptRTPEvent() {} 628 ~LLScriptRTPEvent() {}
629 629
630 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 630 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
631 S32 getSize(); 631 S32 getSize();
632 632
633 LLScriptIdentifier *mRTPermissions; 633 LLScriptIdentifier *mRTPermissions;
@@ -645,7 +645,7 @@ public:
645 { 645 {
646 } 646 }
647 647
648 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 648 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
649 S32 getSize(); 649 S32 getSize();
650 650
651 LLScriptIdentifier *mChannel; 651 LLScriptIdentifier *mChannel;
@@ -666,7 +666,7 @@ public:
666 { 666 {
667 } 667 }
668 668
669 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 669 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
670 S32 getSize(); 670 S32 getSize();
671 671
672 LLScriptIdentifier *mID; 672 LLScriptIdentifier *mID;
@@ -684,7 +684,7 @@ public:
684 { 684 {
685 } 685 }
686 686
687 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 687 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
688 S32 getSize(); 688 S32 getSize();
689 689
690 LLScriptIdentifier *mNumber; 690 LLScriptIdentifier *mNumber;
@@ -702,7 +702,7 @@ public:
702 { 702 {
703 } 703 }
704 704
705 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 705 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
706 S32 getSize(); 706 S32 getSize();
707 707
708 LLScriptIdentifier *mName; 708 LLScriptIdentifier *mName;
@@ -722,7 +722,7 @@ public:
722 { 722 {
723 } 723 }
724 724
725 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 725 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
726 S32 getSize(); 726 S32 getSize();
727 727
728 LLScriptIdentifier *mSender; 728 LLScriptIdentifier *mSender;
@@ -743,7 +743,7 @@ public:
743 { 743 {
744 } 744 }
745 745
746 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 746 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
747 S32 getSize(); 747 S32 getSize();
748 748
749 LLScriptIdentifier *mType; 749 LLScriptIdentifier *mType;
@@ -767,7 +767,7 @@ public:
767 { 767 {
768 } 768 }
769 769
770 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, 770 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass,
771 LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, 771 LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope,
772 LSCRIPTType &type, LSCRIPTType basetype, U64 &count, 772 LSCRIPTType &type, LSCRIPTType basetype, U64 &count,
773 LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, 773 LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap,
@@ -791,7 +791,7 @@ public:
791 } 791 }
792 ~LLScriptRezEvent() {} 792 ~LLScriptRezEvent() {}
793 793
794 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 794 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
795 S32 getSize(); 795 S32 getSize();
796 796
797 LLScriptIdentifier *mStartParam; 797 LLScriptIdentifier *mStartParam;
@@ -805,7 +805,7 @@ public:
805 { 805 {
806 } 806 }
807 807
808 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 808 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
809 S32 getSize(); 809 S32 getSize();
810 810
811 ~LLScriptNoSensorEvent() {} 811 ~LLScriptNoSensorEvent() {}
@@ -819,7 +819,7 @@ public:
819 { 819 {
820 } 820 }
821 821
822 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 822 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
823 S32 getSize(); 823 S32 getSize();
824 824
825 ~LLScriptAtTarget() {} 825 ~LLScriptAtTarget() {}
@@ -837,7 +837,7 @@ public:
837 { 837 {
838 } 838 }
839 839
840 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 840 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
841 S32 getSize(); 841 S32 getSize();
842 842
843 ~LLScriptNotAtTarget() {} 843 ~LLScriptNotAtTarget() {}
@@ -851,7 +851,7 @@ public:
851 { 851 {
852 } 852 }
853 853
854 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 854 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
855 S32 getSize(); 855 S32 getSize();
856 856
857 ~LLScriptAtRotTarget() {} 857 ~LLScriptAtRotTarget() {}
@@ -869,7 +869,7 @@ public:
869 { 869 {
870 } 870 }
871 871
872 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 872 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
873 S32 getSize(); 873 S32 getSize();
874 874
875 ~LLScriptNotAtRotTarget() {} 875 ~LLScriptNotAtRotTarget() {}
@@ -887,7 +887,7 @@ public:
887 { 887 {
888 } 888 }
889 889
890 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 890 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
891 S32 getSize(); 891 S32 getSize();
892 892
893 LLScriptIdentifier *mName; 893 LLScriptIdentifier *mName;
@@ -906,7 +906,7 @@ public:
906 { 906 {
907 } 907 }
908 908
909 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 909 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
910 S32 getSize(); 910 S32 getSize();
911 911
912 LLScriptIdentifier *mTime; 912 LLScriptIdentifier *mTime;
@@ -932,9 +932,9 @@ public:
932 // don't delete next pointer because we're going to store allocation lists and delete from those 932 // don't delete next pointer because we're going to store allocation lists and delete from those
933 } 933 }
934 934
935 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 935 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
936 936
937 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 937 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
938 S32 getSize(); 938 S32 getSize();
939 939
940 LSCRIPTExpressionType mType; 940 LSCRIPTExpressionType mType;
@@ -955,7 +955,7 @@ public:
955 { 955 {
956 } 956 }
957 957
958 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 958 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
959 S32 getSize(); 959 S32 getSize();
960 960
961 LLScriptExpression *mFirstp; 961 LLScriptExpression *mFirstp;
@@ -974,7 +974,7 @@ public:
974 { 974 {
975 } 975 }
976 976
977 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 977 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
978 S32 getSize(); 978 S32 getSize();
979 979
980 LLScriptExpression *mFirstp; 980 LLScriptExpression *mFirstp;
@@ -993,7 +993,7 @@ public:
993 { 993 {
994 } 994 }
995 995
996 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 996 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
997 S32 getSize(); 997 S32 getSize();
998 998
999 LLScriptExpression *mFirstp; 999 LLScriptExpression *mFirstp;
@@ -1012,7 +1012,7 @@ public:
1012 { 1012 {
1013 } 1013 }
1014 1014
1015 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1015 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1016 S32 getSize(); 1016 S32 getSize();
1017 1017
1018 S32 mOffset; 1018 S32 mOffset;
@@ -1032,7 +1032,7 @@ public:
1032 { 1032 {
1033 } 1033 }
1034 1034
1035 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1035 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1036 S32 getSize(); 1036 S32 getSize();
1037 1037
1038 LLScriptExpression *mLValue; 1038 LLScriptExpression *mLValue;
@@ -1051,7 +1051,7 @@ public:
1051 { 1051 {
1052 } 1052 }
1053 1053
1054 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1054 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1055 S32 getSize(); 1055 S32 getSize();
1056 1056
1057 LLScriptExpression *mLValue; 1057 LLScriptExpression *mLValue;
@@ -1070,7 +1070,7 @@ public:
1070 { 1070 {
1071 } 1071 }
1072 1072
1073 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1073 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1074 S32 getSize(); 1074 S32 getSize();
1075 1075
1076 LLScriptExpression *mLValue; 1076 LLScriptExpression *mLValue;
@@ -1089,7 +1089,7 @@ public:
1089 { 1089 {
1090 } 1090 }
1091 1091
1092 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1092 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1093 S32 getSize(); 1093 S32 getSize();
1094 1094
1095 LLScriptExpression *mLValue; 1095 LLScriptExpression *mLValue;
@@ -1108,7 +1108,7 @@ public:
1108 { 1108 {
1109 } 1109 }
1110 1110
1111 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1111 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1112 S32 getSize(); 1112 S32 getSize();
1113 1113
1114 LLScriptExpression *mLValue; 1114 LLScriptExpression *mLValue;
@@ -1127,7 +1127,7 @@ public:
1127 { 1127 {
1128 } 1128 }
1129 1129
1130 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1130 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1131 S32 getSize(); 1131 S32 getSize();
1132 1132
1133 LLScriptExpression *mLValue; 1133 LLScriptExpression *mLValue;
@@ -1146,7 +1146,7 @@ public:
1146 { 1146 {
1147 } 1147 }
1148 1148
1149 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1149 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1150 S32 getSize(); 1150 S32 getSize();
1151 1151
1152 LLScriptExpression *mLeftSide; 1152 LLScriptExpression *mLeftSide;
@@ -1165,7 +1165,7 @@ public:
1165 { 1165 {
1166 } 1166 }
1167 1167
1168 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1168 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1169 S32 getSize(); 1169 S32 getSize();
1170 1170
1171 LLScriptExpression *mLeftSide; 1171 LLScriptExpression *mLeftSide;
@@ -1184,7 +1184,7 @@ public:
1184 { 1184 {
1185 } 1185 }
1186 1186
1187 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1187 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1188 S32 getSize(); 1188 S32 getSize();
1189 1189
1190 LLScriptExpression *mLeftSide; 1190 LLScriptExpression *mLeftSide;
@@ -1203,7 +1203,7 @@ public:
1203 { 1203 {
1204 } 1204 }
1205 1205
1206 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1206 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1207 S32 getSize(); 1207 S32 getSize();
1208 1208
1209 LLScriptExpression *mLeftSide; 1209 LLScriptExpression *mLeftSide;
@@ -1222,7 +1222,7 @@ public:
1222 { 1222 {
1223 } 1223 }
1224 1224
1225 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1225 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1226 S32 getSize(); 1226 S32 getSize();
1227 1227
1228 LLScriptExpression *mLeftSide; 1228 LLScriptExpression *mLeftSide;
@@ -1241,7 +1241,7 @@ public:
1241 { 1241 {
1242 } 1242 }
1243 1243
1244 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1244 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1245 S32 getSize(); 1245 S32 getSize();
1246 1246
1247 LLScriptExpression *mLeftSide; 1247 LLScriptExpression *mLeftSide;
@@ -1260,7 +1260,7 @@ public:
1260 { 1260 {
1261 } 1261 }
1262 1262
1263 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1263 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1264 S32 getSize(); 1264 S32 getSize();
1265 1265
1266 LLScriptExpression *mLeftSide; 1266 LLScriptExpression *mLeftSide;
@@ -1279,7 +1279,7 @@ public:
1279 { 1279 {
1280 } 1280 }
1281 1281
1282 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1282 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1283 S32 getSize(); 1283 S32 getSize();
1284 1284
1285 LLScriptExpression *mLeftSide; 1285 LLScriptExpression *mLeftSide;
@@ -1298,7 +1298,7 @@ public:
1298 { 1298 {
1299 } 1299 }
1300 1300
1301 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1301 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1302 S32 getSize(); 1302 S32 getSize();
1303 1303
1304 LLScriptExpression *mLeftSide; 1304 LLScriptExpression *mLeftSide;
@@ -1317,7 +1317,7 @@ public:
1317 { 1317 {
1318 } 1318 }
1319 1319
1320 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1320 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1321 S32 getSize(); 1321 S32 getSize();
1322 1322
1323 LLScriptExpression *mLeftSide; 1323 LLScriptExpression *mLeftSide;
@@ -1336,7 +1336,7 @@ public:
1336 { 1336 {
1337 } 1337 }
1338 1338
1339 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1339 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1340 S32 getSize(); 1340 S32 getSize();
1341 1341
1342 LLScriptExpression *mLeftSide; 1342 LLScriptExpression *mLeftSide;
@@ -1355,7 +1355,7 @@ public:
1355 { 1355 {
1356 } 1356 }
1357 1357
1358 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1358 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1359 S32 getSize(); 1359 S32 getSize();
1360 1360
1361 LLScriptExpression *mLeftSide; 1361 LLScriptExpression *mLeftSide;
@@ -1374,7 +1374,7 @@ public:
1374 { 1374 {
1375 } 1375 }
1376 1376
1377 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1377 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1378 S32 getSize(); 1378 S32 getSize();
1379 1379
1380 LLScriptExpression *mLeftSide; 1380 LLScriptExpression *mLeftSide;
@@ -1393,7 +1393,7 @@ public:
1393 { 1393 {
1394 } 1394 }
1395 1395
1396 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1396 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1397 S32 getSize(); 1397 S32 getSize();
1398 1398
1399 LLScriptExpression *mLeftSide; 1399 LLScriptExpression *mLeftSide;
@@ -1412,7 +1412,7 @@ public:
1412 { 1412 {
1413 } 1413 }
1414 1414
1415 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1415 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1416 S32 getSize(); 1416 S32 getSize();
1417 1417
1418 LLScriptExpression *mLeftSide; 1418 LLScriptExpression *mLeftSide;
@@ -1431,7 +1431,7 @@ public:
1431 { 1431 {
1432 } 1432 }
1433 1433
1434 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1434 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1435 S32 getSize(); 1435 S32 getSize();
1436 1436
1437 LLScriptExpression *mLeftSide; 1437 LLScriptExpression *mLeftSide;
@@ -1450,7 +1450,7 @@ public:
1450 { 1450 {
1451 } 1451 }
1452 1452
1453 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1453 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1454 S32 getSize(); 1454 S32 getSize();
1455 1455
1456 LLScriptExpression *mLeftSide; 1456 LLScriptExpression *mLeftSide;
@@ -1469,7 +1469,7 @@ public:
1469 { 1469 {
1470 } 1470 }
1471 1471
1472 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1472 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1473 S32 getSize(); 1473 S32 getSize();
1474 1474
1475 LLScriptExpression *mLeftSide; 1475 LLScriptExpression *mLeftSide;
@@ -1488,7 +1488,7 @@ public:
1488 { 1488 {
1489 } 1489 }
1490 1490
1491 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1491 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1492 S32 getSize(); 1492 S32 getSize();
1493 1493
1494 LLScriptExpression *mExpression; 1494 LLScriptExpression *mExpression;
@@ -1506,7 +1506,7 @@ public:
1506 { 1506 {
1507 } 1507 }
1508 1508
1509 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1509 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1510 S32 getSize(); 1510 S32 getSize();
1511 1511
1512 LLScriptExpression *mExpression; 1512 LLScriptExpression *mExpression;
@@ -1524,7 +1524,7 @@ public:
1524 { 1524 {
1525 } 1525 }
1526 1526
1527 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1527 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1528 S32 getSize(); 1528 S32 getSize();
1529 1529
1530 LLScriptExpression *mExpression; 1530 LLScriptExpression *mExpression;
@@ -1542,7 +1542,7 @@ public:
1542 { 1542 {
1543 } 1543 }
1544 1544
1545 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1545 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1546 S32 getSize(); 1546 S32 getSize();
1547 1547
1548 LLScriptExpression *mExpression; 1548 LLScriptExpression *mExpression;
@@ -1560,7 +1560,7 @@ public:
1560 { 1560 {
1561 } 1561 }
1562 1562
1563 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1563 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1564 S32 getSize(); 1564 S32 getSize();
1565 1565
1566 LLScriptExpression *mExpression; 1566 LLScriptExpression *mExpression;
@@ -1578,7 +1578,7 @@ public:
1578 { 1578 {
1579 } 1579 }
1580 1580
1581 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1581 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1582 S32 getSize(); 1582 S32 getSize();
1583 1583
1584 LLScriptExpression *mExpression; 1584 LLScriptExpression *mExpression;
@@ -1596,7 +1596,7 @@ public:
1596 { 1596 {
1597 } 1597 }
1598 1598
1599 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1599 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1600 S32 getSize(); 1600 S32 getSize();
1601 1601
1602 LLScriptType *mType; 1602 LLScriptType *mType;
@@ -1620,7 +1620,7 @@ public:
1620 { 1620 {
1621 } 1621 }
1622 1622
1623 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1623 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1624 S32 getSize(); 1624 S32 getSize();
1625 1625
1626 LLScriptExpression *mExpression1; 1626 LLScriptExpression *mExpression1;
@@ -1647,7 +1647,7 @@ public:
1647 { 1647 {
1648 } 1648 }
1649 1649
1650 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1650 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1651 S32 getSize(); 1651 S32 getSize();
1652 1652
1653 LLScriptExpression *mExpression1; 1653 LLScriptExpression *mExpression1;
@@ -1668,7 +1668,7 @@ public:
1668 { 1668 {
1669 } 1669 }
1670 1670
1671 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1671 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1672 S32 getSize(); 1672 S32 getSize();
1673 1673
1674 LLScriptExpression *mExpressionList; 1674 LLScriptExpression *mExpressionList;
@@ -1686,7 +1686,7 @@ public:
1686 { 1686 {
1687 } 1687 }
1688 1688
1689 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1689 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1690 S32 getSize(); 1690 S32 getSize();
1691 1691
1692 LLScriptExpression *mExpression; 1692 LLScriptExpression *mExpression;
@@ -1704,7 +1704,7 @@ public:
1704 { 1704 {
1705 } 1705 }
1706 1706
1707 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1707 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1708 S32 getSize(); 1708 S32 getSize();
1709 1709
1710 LLScriptExpression *mExpression; 1710 LLScriptExpression *mExpression;
@@ -1722,7 +1722,7 @@ public:
1722 { 1722 {
1723 } 1723 }
1724 1724
1725 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1725 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1726 S32 getSize(); 1726 S32 getSize();
1727 1727
1728 LLScriptIdentifier *mIdentifier; 1728 LLScriptIdentifier *mIdentifier;
@@ -1741,7 +1741,7 @@ public:
1741 { 1741 {
1742 } 1742 }
1743 1743
1744 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1744 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1745 S32 getSize(); 1745 S32 getSize();
1746 1746
1747 LLScriptExpression *mExpression; 1747 LLScriptExpression *mExpression;
@@ -1759,7 +1759,7 @@ public:
1759 { 1759 {
1760 } 1760 }
1761 1761
1762 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1762 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1763 S32 getSize(); 1763 S32 getSize();
1764 1764
1765 LLScriptConstant *mConstant; 1765 LLScriptConstant *mConstant;
@@ -1801,9 +1801,9 @@ public:
1801 1801
1802 void addStatement(LLScriptStatement *event); 1802 void addStatement(LLScriptStatement *event);
1803 1803
1804 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1804 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1805 1805
1806 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1806 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1807 S32 getSize(); 1807 S32 getSize();
1808 1808
1809 LSCRIPTStatementType mType; 1809 LSCRIPTStatementType mType;
@@ -1824,7 +1824,7 @@ public:
1824 { 1824 {
1825 } 1825 }
1826 1826
1827 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1827 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1828 S32 getSize(); 1828 S32 getSize();
1829 1829
1830 LLScriptStatement *mFirstp; 1830 LLScriptStatement *mFirstp;
@@ -1841,7 +1841,7 @@ public:
1841 1841
1842 ~LLScriptNOOP() {} 1842 ~LLScriptNOOP() {}
1843 1843
1844 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1844 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1845 S32 getSize(); 1845 S32 getSize();
1846}; 1846};
1847 1847
@@ -1857,7 +1857,7 @@ public:
1857 { 1857 {
1858 } 1858 }
1859 1859
1860 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1860 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1861 S32 getSize(); 1861 S32 getSize();
1862 1862
1863 LLScriptIdentifier *mIdentifier; 1863 LLScriptIdentifier *mIdentifier;
@@ -1875,7 +1875,7 @@ public:
1875 { 1875 {
1876 } 1876 }
1877 1877
1878 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1878 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1879 S32 getSize(); 1879 S32 getSize();
1880 1880
1881 LLScriptIdentifier *mIdentifier; 1881 LLScriptIdentifier *mIdentifier;
@@ -1893,7 +1893,7 @@ public:
1893 { 1893 {
1894 } 1894 }
1895 1895
1896 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1896 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1897 S32 getSize(); 1897 S32 getSize();
1898 1898
1899 LLScriptIdentifier *mIdentifier; 1899 LLScriptIdentifier *mIdentifier;
@@ -1911,7 +1911,7 @@ public:
1911 { 1911 {
1912 } 1912 }
1913 1913
1914 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1914 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1915 S32 getSize(); 1915 S32 getSize();
1916 1916
1917 LLScriptExpression *mExpression; 1917 LLScriptExpression *mExpression;
@@ -1930,7 +1930,7 @@ public:
1930 { 1930 {
1931 } 1931 }
1932 1932
1933 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1933 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1934 S32 getSize(); 1934 S32 getSize();
1935 1935
1936 LLScriptExpression *mExpression; 1936 LLScriptExpression *mExpression;
@@ -1948,7 +1948,7 @@ public:
1948 { 1948 {
1949 } 1949 }
1950 1950
1951 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1951 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1952 S32 getSize(); 1952 S32 getSize();
1953 1953
1954 LSCRIPTType mType; 1954 LSCRIPTType mType;
@@ -1968,7 +1968,7 @@ public:
1968 { 1968 {
1969 } 1969 }
1970 1970
1971 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1971 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1972 S32 getSize(); 1972 S32 getSize();
1973 1973
1974 LLScriptExpression *mExpression; 1974 LLScriptExpression *mExpression;
@@ -1989,7 +1989,7 @@ public:
1989 { 1989 {
1990 } 1990 }
1991 1991
1992 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 1992 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
1993 S32 getSize(); 1993 S32 getSize();
1994 1994
1995 LLScriptExpression *mSequence; 1995 LLScriptExpression *mSequence;
@@ -2011,7 +2011,7 @@ public:
2011 { 2011 {
2012 } 2012 }
2013 2013
2014 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2014 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2015 S32 getSize(); 2015 S32 getSize();
2016 2016
2017 LLScriptStatement *mStatement; 2017 LLScriptStatement *mStatement;
@@ -2031,7 +2031,7 @@ public:
2031 { 2031 {
2032 } 2032 }
2033 2033
2034 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2034 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2035 S32 getSize(); 2035 S32 getSize();
2036 2036
2037 LLScriptExpression *mExpression; 2037 LLScriptExpression *mExpression;
@@ -2052,7 +2052,7 @@ public:
2052 { 2052 {
2053 } 2053 }
2054 2054
2055 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2055 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2056 S32 getSize(); 2056 S32 getSize();
2057 2057
2058 LLScriptType *mType; 2058 LLScriptType *mType;
@@ -2072,7 +2072,7 @@ public:
2072 { 2072 {
2073 } 2073 }
2074 2074
2075 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2075 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2076 S32 getSize(); 2076 S32 getSize();
2077 2077
2078 LLScriptStatement *mStatement; 2078 LLScriptStatement *mStatement;
@@ -2094,9 +2094,9 @@ public:
2094 2094
2095 void addEvent(LLScriptEventHandler *event); 2095 void addEvent(LLScriptEventHandler *event);
2096 2096
2097 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2097 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2098 2098
2099 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2099 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2100 S32 getSize(); 2100 S32 getSize();
2101 2101
2102 LLScriptEvent *mEventp; 2102 LLScriptEvent *mEventp;
@@ -2126,9 +2126,9 @@ public:
2126 2126
2127 void addFunctionParameter(LLScriptFunctionDec *dec); 2127 void addFunctionParameter(LLScriptFunctionDec *dec);
2128 2128
2129 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2129 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2130 2130
2131 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2131 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2132 S32 getSize(); 2132 S32 getSize();
2133 2133
2134 LLScriptType *mType; 2134 LLScriptType *mType;
@@ -2154,9 +2154,9 @@ public:
2154 delete mFunctionScope; 2154 delete mFunctionScope;
2155 } 2155 }
2156 2156
2157 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2157 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2158 2158
2159 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2159 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2160 S32 getSize(); 2160 S32 getSize();
2161 2161
2162 LLScriptType *mType; 2162 LLScriptType *mType;
@@ -2192,9 +2192,9 @@ public:
2192 { 2192 {
2193 } 2193 }
2194 2194
2195 void gonext(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2195 void gonext(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2196 2196
2197 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2197 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2198 S32 getSize(); 2198 S32 getSize();
2199 2199
2200 LSCRIPTStateType mType; 2200 LSCRIPTStateType mType;
@@ -2222,7 +2222,7 @@ public:
2222 { 2222 {
2223 } 2223 }
2224 2224
2225 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata) 2225 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata)
2226 { 2226 {
2227 } 2227 }
2228 2228
@@ -2257,7 +2257,7 @@ public:
2257 delete mGlobalScope; 2257 delete mGlobalScope;
2258 } 2258 }
2259 2259
2260 void recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata); 2260 void recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pass, LSCRIPTPruneType ptype, BOOL &prunearg, LLScriptScope *scope, LSCRIPTType &type, LSCRIPTType basetype, U64 &count, LLScriptByteCodeChunk *chunk, LLScriptByteCodeChunk *heap, S32 stacksize, LLScriptScopeEntry *entry, S32 entrycount, LLScriptLibData **ldata);
2261 S32 getSize(); 2261 S32 getSize();
2262 2262
2263 void setBytecodeDest(const char* dst_filename); 2263 void setBytecodeDest(const char* dst_filename);
diff --git a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
index 8cfa815..8c3738d 100644
--- a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
+++ b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
@@ -351,10 +351,10 @@ void init_supported_expressions(void)
351 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_FLOATINGPOINT] = LST_FLOATINGPOINT; 351 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_FLOATINGPOINT] = LST_FLOATINGPOINT;
352 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_FLOATINGPOINT] = LST_FLOATINGPOINT; 352 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_FLOATINGPOINT] = LST_FLOATINGPOINT;
353 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_INTEGER] = LST_VECTOR; 353 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_INTEGER] = LST_VECTOR;
354 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_VECTOR] = LST_VECTOR; 354 //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_INTEGER][LST_VECTOR] = LST_VECTOR;
355 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_FLOATINGPOINT] = LST_VECTOR; 355 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_FLOATINGPOINT] = LST_VECTOR;
356 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_VECTOR] = LST_VECTOR; 356 //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_FLOATINGPOINT][LST_VECTOR] = LST_VECTOR;
357 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_VECTOR] = LST_FLOATINGPOINT; 357 //gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_VECTOR] = LST_FLOATINGPOINT;
358 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_QUATERNION] = LST_VECTOR; 358 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_VECTOR][LST_QUATERNION] = LST_VECTOR;
359 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_QUATERNION][LST_QUATERNION] = LST_QUATERNION; 359 gSupportedExpressionArray[LET_MUL_ASSIGN][LST_QUATERNION][LST_QUATERNION] = LST_QUATERNION;
360 360
diff --git a/linden/indra/lscript/lscript_execute.h b/linden/indra/lscript/lscript_execute.h
index e9353e3..997e04d 100644
--- a/linden/indra/lscript/lscript_execute.h
+++ b/linden/indra/lscript/lscript_execute.h
@@ -367,7 +367,7 @@ public:
367class LLScriptExecute 367class LLScriptExecute
368{ 368{
369public: 369public:
370 LLScriptExecute(FILE *fp); 370 LLScriptExecute(LLFILE *fp);
371 LLScriptExecute(U8 *buffer); 371 LLScriptExecute(U8 *buffer);
372 ~LLScriptExecute(); 372 ~LLScriptExecute();
373 373
diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
index d1200f0..643f3f6 100644
--- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -61,7 +61,7 @@ char* LSCRIPTRunTimeFaultStrings[LSRF_EOF] = /*Flawfinder: ignore*/
61//static 61//static
62S64 LLScriptExecute::sGlobalInstructionCount = 0; 62S64 LLScriptExecute::sGlobalInstructionCount = 0;
63 63
64LLScriptExecute::LLScriptExecute(FILE *fp) 64LLScriptExecute::LLScriptExecute(LLFILE *fp)
65{ 65{
66 U8 sizearray[4]; 66 U8 sizearray[4];
67 S32 filesize; 67 S32 filesize;
@@ -3027,46 +3027,19 @@ BOOL run_return(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
3027 if (b_print) 3027 if (b_print)
3028 printf("[0x%X]\tRETURN\n", offset); 3028 printf("[0x%X]\tRETURN\n", offset);
3029 offset++; 3029 offset++;
3030 S32 bp = lscript_pop_int(buffer); 3030
3031 // SEC-53: babbage: broken instructions may allow inbalanced pushes and
3032 // pops which can cause caller BP and return IP to be corrupted, so restore
3033 // SP from BP before popping caller BP and IP.
3034 S32 bp = get_register(buffer, LREG_BP);
3035 set_sp(buffer, bp);
3036
3037 bp = lscript_pop_int(buffer);
3031 set_bp(buffer, bp); 3038 set_bp(buffer, bp);
3032 offset = lscript_pop_int(buffer); 3039 offset = lscript_pop_int(buffer);
3033 return FALSE; 3040 return FALSE;
3034} 3041}
3035 3042
3036S32 axtoi(char *hexStg)
3037{
3038 S32 n = 0; // position in string
3039 S32 m = 0; // position in digit[] to shift
3040 S32 count; // loop index
3041 S32 intValue = 0; // integer value of hex string
3042 S32 digit[9]; // hold values to convert
3043 while (n < 8)
3044 {
3045 if (hexStg[n]=='\0')
3046 break;
3047 if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9
3048 digit[n] = hexStg[n] & 0x0f; //convert to int
3049 else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f
3050 digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
3051 else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F
3052 digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
3053 else break;
3054 n++;
3055 }
3056 count = n;
3057 m = n - 1;
3058 n = 0;
3059 while(n < count)
3060 {
3061 // digit[n] is value of hex digit at position n
3062 // (m << 2) is the number of positions to shift
3063 // OR the bits into return value
3064 intValue = intValue | (digit[n] << (m << 2));
3065 m--; // adjust the position to set
3066 n++; // next digit to process
3067 }
3068 return (intValue);
3069}
3070 3043
3071 3044
3072BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id) 3045BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
@@ -3718,7 +3691,7 @@ void lscript_run(char *filename, BOOL b_debug)
3718 BOOL b_state; 3691 BOOL b_state;
3719 LLScriptExecute *execute = NULL; 3692 LLScriptExecute *execute = NULL;
3720 3693
3721 FILE* file = LLFile::fopen(filename, "r"); 3694 LLFILE* file = LLFile::fopen(filename, "r");
3722 if (file) 3695 if (file)
3723 { 3696 {
3724 execute = new LLScriptExecute(file); 3697 execute = new LLScriptExecute(file);
@@ -3727,7 +3700,7 @@ void lscript_run(char *filename, BOOL b_debug)
3727 file = LLFile::fopen(filename, "r"); 3700 file = LLFile::fopen(filename, "r");
3728 if (file) 3701 if (file)
3729 { 3702 {
3730 FILE* fp = LLFile::fopen("lscript.parse", "w"); /*Flawfinder: ignore*/ 3703 LLFILE* fp = LLFile::fopen("lscript.parse", "w"); /*Flawfinder: ignore*/
3731 LLScriptLSOParse *parse = new LLScriptLSOParse(file); 3704 LLScriptLSOParse *parse = new LLScriptLSOParse(file);
3732 parse->printData(fp); 3705 parse->printData(fp);
3733 delete parse; 3706 delete parse;
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
index 218e14a..bfd59a7 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -35,7 +35,7 @@
35#include "lscript_library.h" 35#include "lscript_library.h"
36#include "lscript_alloc.h" 36#include "lscript_alloc.h"
37 37
38LLScriptLSOParse::LLScriptLSOParse(FILE *fp) 38LLScriptLSOParse::LLScriptLSOParse(LLFILE *fp)
39{ 39{
40 U8 sizearray[4]; 40 U8 sizearray[4];
41 S32 filesize; 41 S32 filesize;
@@ -68,7 +68,7 @@ LLScriptLSOParse::~LLScriptLSOParse()
68 delete [] mRawData; 68 delete [] mRawData;
69} 69}
70 70
71void LLScriptLSOParse::printData(FILE *fp) 71void LLScriptLSOParse::printData(LLFILE *fp)
72{ 72{
73 73
74 74
@@ -86,14 +86,14 @@ void LLScriptLSOParse::printData(FILE *fp)
86 printHeap(fp); 86 printHeap(fp);
87} 87}
88 88
89void LLScriptLSOParse::printNameDesc(FILE *fp) 89void LLScriptLSOParse::printNameDesc(LLFILE *fp)
90{ 90{
91 fprintf(fp, "=============================\n\n"); 91 fprintf(fp, "=============================\n\n");
92} 92}
93 93
94S32 gMajorVersion = 0; 94S32 gMajorVersion = 0;
95 95
96void LLScriptLSOParse::printRegisters(FILE *fp) 96void LLScriptLSOParse::printRegisters(LLFILE *fp)
97{ 97{
98 // print out registers first 98 // print out registers first
99 S32 i; 99 S32 i;
@@ -125,7 +125,7 @@ void LLScriptLSOParse::printRegisters(FILE *fp)
125 fprintf(fp, "=============================\n\n"); 125 fprintf(fp, "=============================\n\n");
126} 126}
127 127
128void LLScriptLSOParse::printGlobals(FILE *fp) 128void LLScriptLSOParse::printGlobals(LLFILE *fp)
129{ 129{
130 // print out registers first 130 // print out registers first
131 S32 offset, varoffset; 131 S32 offset, varoffset;
@@ -195,7 +195,7 @@ void LLScriptLSOParse::printGlobals(FILE *fp)
195 fprintf(fp, "=============================\n\n"); 195 fprintf(fp, "=============================\n\n");
196} 196}
197 197
198void LLScriptLSOParse::printGlobalFunctions(FILE *fp) 198void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)
199{ 199{
200 // print out registers first 200 // print out registers first
201 S32 i, offset; 201 S32 i, offset;
@@ -284,7 +284,7 @@ void LLScriptLSOParse::printGlobalFunctions(FILE *fp)
284 fprintf(fp, "=============================\n\n"); 284 fprintf(fp, "=============================\n\n");
285} 285}
286 286
287void LLScriptLSOParse::printStates(FILE *fp) 287void LLScriptLSOParse::printStates(LLFILE *fp)
288{ 288{
289 // print out registers first 289 // print out registers first
290 S32 i, offset; 290 S32 i, offset;
@@ -637,7 +637,7 @@ void LLScriptLSOParse::printStates(FILE *fp)
637 fprintf(fp, "=============================\n\n"); 637 fprintf(fp, "=============================\n\n");
638} 638}
639 639
640void LLScriptLSOParse::printHeap(FILE *fp) 640void LLScriptLSOParse::printHeap(LLFILE *fp)
641{ 641{
642 // print out registers first 642 // print out registers first
643 643
@@ -652,7 +652,7 @@ void LLScriptLSOParse::printHeap(FILE *fp)
652 fprintf(fp, "=============================\n\n"); 652 fprintf(fp, "=============================\n\n");
653} 653}
654 654
655void lso_print_tabs(FILE *fp, S32 tabs) 655void lso_print_tabs(LLFILE *fp, S32 tabs)
656{ 656{
657 S32 i; 657 S32 i;
658 for (i = 0; i < tabs; i++) 658 for (i = 0; i < tabs; i++)
@@ -661,13 +661,13 @@ void lso_print_tabs(FILE *fp, S32 tabs)
661 } 661 }
662} 662}
663 663
664void LLScriptLSOParse::printOpCodes(FILE *fp, S32 &offset, S32 tabs) 664void LLScriptLSOParse::printOpCodes(LLFILE *fp, S32 &offset, S32 tabs)
665{ 665{
666 U8 opcode = *(mRawData + offset); 666 U8 opcode = *(mRawData + offset);
667 mPrintOpCodes[opcode](fp, mRawData, offset, tabs); 667 mPrintOpCodes[opcode](fp, mRawData, offset, tabs);
668} 668}
669 669
670void LLScriptLSOParse::printOpCodeRange(FILE *fp, S32 start, S32 end, S32 tabs) 670void LLScriptLSOParse::printOpCodeRange(LLFILE *fp, S32 start, S32 end, S32 tabs)
671{ 671{
672 while (start < end) 672 while (start < end)
673 { 673 {
@@ -791,43 +791,43 @@ void LLScriptLSOParse::initOpCodePrinting()
791 mPrintOpCodes[LSCRIPTOpCodes[LOPC_CALLLIB_TWO_BYTE]] = print_calllib_two_byte; 791 mPrintOpCodes[LSCRIPTOpCodes[LOPC_CALLLIB_TWO_BYTE]] = print_calllib_two_byte;
792} 792}
793 793
794void print_noop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 794void print_noop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
795{ 795{
796 lso_print_tabs(fp, tabs); 796 lso_print_tabs(fp, tabs);
797 fprintf(fp, "[0x%X]\tNOOP\n", offset++); 797 fprintf(fp, "[0x%X]\tNOOP\n", offset++);
798} 798}
799 799
800void print_pop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 800void print_pop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
801{ 801{
802 lso_print_tabs(fp, tabs); 802 lso_print_tabs(fp, tabs);
803 fprintf(fp, "[0x%X]\tPOP\n", offset++); 803 fprintf(fp, "[0x%X]\tPOP\n", offset++);
804} 804}
805 805
806void print_pops(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 806void print_pops(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
807{ 807{
808 lso_print_tabs(fp, tabs); 808 lso_print_tabs(fp, tabs);
809 fprintf(fp, "[0x%X]\tPOPS\n", offset++); 809 fprintf(fp, "[0x%X]\tPOPS\n", offset++);
810} 810}
811 811
812void print_popl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 812void print_popl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
813{ 813{
814 lso_print_tabs(fp, tabs); 814 lso_print_tabs(fp, tabs);
815 fprintf(fp, "[0x%X]\tPOPL\n", offset++); 815 fprintf(fp, "[0x%X]\tPOPL\n", offset++);
816} 816}
817 817
818void print_popv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 818void print_popv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
819{ 819{
820 lso_print_tabs(fp, tabs); 820 lso_print_tabs(fp, tabs);
821 fprintf(fp, "[0x%X]\tPOPV\n", offset++); 821 fprintf(fp, "[0x%X]\tPOPV\n", offset++);
822} 822}
823 823
824void print_popq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 824void print_popq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
825{ 825{
826 lso_print_tabs(fp, tabs); 826 lso_print_tabs(fp, tabs);
827 fprintf(fp, "[0x%X]\tPOPQ\n", offset++); 827 fprintf(fp, "[0x%X]\tPOPQ\n", offset++);
828} 828}
829 829
830void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 830void print_poparg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
831{ 831{
832 S32 arg; 832 S32 arg;
833 lso_print_tabs(fp, tabs); 833 lso_print_tabs(fp, tabs);
@@ -836,61 +836,61 @@ void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
836 fprintf(fp, "%d\n", arg); 836 fprintf(fp, "%d\n", arg);
837} 837}
838 838
839void print_popip(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 839void print_popip(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
840{ 840{
841 lso_print_tabs(fp, tabs); 841 lso_print_tabs(fp, tabs);
842 fprintf(fp, "[0x%X]\tPOPIP\n", offset++); 842 fprintf(fp, "[0x%X]\tPOPIP\n", offset++);
843} 843}
844 844
845void print_popbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 845void print_popbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
846{ 846{
847 lso_print_tabs(fp, tabs); 847 lso_print_tabs(fp, tabs);
848 fprintf(fp, "[0x%X]\tPOPBP\n", offset++); 848 fprintf(fp, "[0x%X]\tPOPBP\n", offset++);
849} 849}
850 850
851void print_popsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 851void print_popsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
852{ 852{
853 lso_print_tabs(fp, tabs); 853 lso_print_tabs(fp, tabs);
854 fprintf(fp, "[0x%X]\tPOPSP\n", offset++); 854 fprintf(fp, "[0x%X]\tPOPSP\n", offset++);
855} 855}
856 856
857void print_popslr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 857void print_popslr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
858{ 858{
859 lso_print_tabs(fp, tabs); 859 lso_print_tabs(fp, tabs);
860 fprintf(fp, "[0x%X]\tPOPSLR\n", offset++); 860 fprintf(fp, "[0x%X]\tPOPSLR\n", offset++);
861} 861}
862 862
863void print_dup(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 863void print_dup(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
864{ 864{
865 lso_print_tabs(fp, tabs); 865 lso_print_tabs(fp, tabs);
866 fprintf(fp, "[0x%X]\tDUP\n", offset++); 866 fprintf(fp, "[0x%X]\tDUP\n", offset++);
867} 867}
868 868
869void print_dups(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 869void print_dups(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
870{ 870{
871 lso_print_tabs(fp, tabs); 871 lso_print_tabs(fp, tabs);
872 fprintf(fp, "[0x%X]\tDUPS\n", offset++); 872 fprintf(fp, "[0x%X]\tDUPS\n", offset++);
873} 873}
874 874
875void print_dupl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 875void print_dupl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
876{ 876{
877 lso_print_tabs(fp, tabs); 877 lso_print_tabs(fp, tabs);
878 fprintf(fp, "[0x%X]\tDUPL\n", offset++); 878 fprintf(fp, "[0x%X]\tDUPL\n", offset++);
879} 879}
880 880
881void print_dupv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 881void print_dupv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
882{ 882{
883 lso_print_tabs(fp, tabs); 883 lso_print_tabs(fp, tabs);
884 fprintf(fp, "[0x%X]\tDUPV\n", offset++); 884 fprintf(fp, "[0x%X]\tDUPV\n", offset++);
885} 885}
886 886
887void print_dupq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 887void print_dupq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
888{ 888{
889 lso_print_tabs(fp, tabs); 889 lso_print_tabs(fp, tabs);
890 fprintf(fp, "[0x%X]\tDUPQ\n", offset++); 890 fprintf(fp, "[0x%X]\tDUPQ\n", offset++);
891} 891}
892 892
893void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 893void print_store(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
894{ 894{
895 S32 arg; 895 S32 arg;
896 lso_print_tabs(fp, tabs); 896 lso_print_tabs(fp, tabs);
@@ -899,7 +899,7 @@ void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
899 fprintf(fp, "%d\n", arg); 899 fprintf(fp, "%d\n", arg);
900} 900}
901 901
902void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 902void print_stores(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
903{ 903{
904 S32 arg; 904 S32 arg;
905 lso_print_tabs(fp, tabs); 905 lso_print_tabs(fp, tabs);
@@ -908,7 +908,7 @@ void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
908 fprintf(fp, "%d\n", arg); 908 fprintf(fp, "%d\n", arg);
909} 909}
910 910
911void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 911void print_storel(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
912{ 912{
913 S32 arg; 913 S32 arg;
914 lso_print_tabs(fp, tabs); 914 lso_print_tabs(fp, tabs);
@@ -917,7 +917,7 @@ void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
917 fprintf(fp, "%d\n", arg); 917 fprintf(fp, "%d\n", arg);
918} 918}
919 919
920void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 920void print_storev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
921{ 921{
922 S32 arg; 922 S32 arg;
923 lso_print_tabs(fp, tabs); 923 lso_print_tabs(fp, tabs);
@@ -926,7 +926,7 @@ void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
926 fprintf(fp, "%d\n", arg); 926 fprintf(fp, "%d\n", arg);
927} 927}
928 928
929void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 929void print_storeq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
930{ 930{
931 S32 arg; 931 S32 arg;
932 lso_print_tabs(fp, tabs); 932 lso_print_tabs(fp, tabs);
@@ -935,7 +935,7 @@ void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
935 fprintf(fp, "%d\n", arg); 935 fprintf(fp, "%d\n", arg);
936} 936}
937 937
938void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 938void print_storeg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
939{ 939{
940 S32 arg; 940 S32 arg;
941 lso_print_tabs(fp, tabs); 941 lso_print_tabs(fp, tabs);
@@ -944,7 +944,7 @@ void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
944 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 944 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
945} 945}
946 946
947void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 947void print_storegs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
948{ 948{
949 S32 arg; 949 S32 arg;
950 lso_print_tabs(fp, tabs); 950 lso_print_tabs(fp, tabs);
@@ -953,7 +953,7 @@ void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
953 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 953 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
954} 954}
955 955
956void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 956void print_storegl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
957{ 957{
958 S32 arg; 958 S32 arg;
959 lso_print_tabs(fp, tabs); 959 lso_print_tabs(fp, tabs);
@@ -962,7 +962,7 @@ void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
962 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 962 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
963} 963}
964 964
965void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 965void print_storegv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
966{ 966{
967 S32 arg; 967 S32 arg;
968 lso_print_tabs(fp, tabs); 968 lso_print_tabs(fp, tabs);
@@ -971,7 +971,7 @@ void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
971 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 971 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
972} 972}
973 973
974void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 974void print_storegq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
975{ 975{
976 S32 arg; 976 S32 arg;
977 lso_print_tabs(fp, tabs); 977 lso_print_tabs(fp, tabs);
@@ -980,7 +980,7 @@ void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
980 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 980 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
981} 981}
982 982
983void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 983void print_loadp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
984{ 984{
985 S32 arg; 985 S32 arg;
986 lso_print_tabs(fp, tabs); 986 lso_print_tabs(fp, tabs);
@@ -989,7 +989,7 @@ void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
989 fprintf(fp, "%d\n", arg); 989 fprintf(fp, "%d\n", arg);
990} 990}
991 991
992void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 992void print_loadsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
993{ 993{
994 S32 arg; 994 S32 arg;
995 lso_print_tabs(fp, tabs); 995 lso_print_tabs(fp, tabs);
@@ -998,7 +998,7 @@ void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
998 fprintf(fp, "%d\n", arg); 998 fprintf(fp, "%d\n", arg);
999} 999}
1000 1000
1001void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1001void print_loadlp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1002{ 1002{
1003 S32 arg; 1003 S32 arg;
1004 lso_print_tabs(fp, tabs); 1004 lso_print_tabs(fp, tabs);
@@ -1007,7 +1007,7 @@ void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1007 fprintf(fp, "%d\n", arg); 1007 fprintf(fp, "%d\n", arg);
1008} 1008}
1009 1009
1010void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1010void print_loadvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1011{ 1011{
1012 S32 arg; 1012 S32 arg;
1013 lso_print_tabs(fp, tabs); 1013 lso_print_tabs(fp, tabs);
@@ -1016,7 +1016,7 @@ void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1016 fprintf(fp, "%d\n", arg); 1016 fprintf(fp, "%d\n", arg);
1017} 1017}
1018 1018
1019void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1019void print_loadqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1020{ 1020{
1021 S32 arg; 1021 S32 arg;
1022 lso_print_tabs(fp, tabs); 1022 lso_print_tabs(fp, tabs);
@@ -1025,7 +1025,7 @@ void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1025 fprintf(fp, "%d\n", arg); 1025 fprintf(fp, "%d\n", arg);
1026} 1026}
1027 1027
1028void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1028void print_loadgp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1029{ 1029{
1030 S32 arg; 1030 S32 arg;
1031 lso_print_tabs(fp, tabs); 1031 lso_print_tabs(fp, tabs);
@@ -1034,7 +1034,7 @@ void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1034 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 1034 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
1035} 1035}
1036 1036
1037void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1037void print_loadgsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1038{ 1038{
1039 S32 arg; 1039 S32 arg;
1040 lso_print_tabs(fp, tabs); 1040 lso_print_tabs(fp, tabs);
@@ -1043,7 +1043,7 @@ void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1043 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 1043 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
1044} 1044}
1045 1045
1046void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1046void print_loadglp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1047{ 1047{
1048 S32 arg; 1048 S32 arg;
1049 lso_print_tabs(fp, tabs); 1049 lso_print_tabs(fp, tabs);
@@ -1052,7 +1052,7 @@ void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1052 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 1052 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
1053} 1053}
1054 1054
1055void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1055void print_loadgvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1056{ 1056{
1057 S32 arg; 1057 S32 arg;
1058 lso_print_tabs(fp, tabs); 1058 lso_print_tabs(fp, tabs);
@@ -1061,7 +1061,7 @@ void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1061 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 1061 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
1062} 1062}
1063 1063
1064void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1064void print_loadgqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1065{ 1065{
1066 S32 arg; 1066 S32 arg;
1067 lso_print_tabs(fp, tabs); 1067 lso_print_tabs(fp, tabs);
@@ -1070,7 +1070,7 @@ void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1070 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR)); 1070 fprintf(fp, "%d\n", arg + get_register(buffer, LREG_GVR));
1071} 1071}
1072 1072
1073void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1073void print_push(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1074{ 1074{
1075 S32 arg; 1075 S32 arg;
1076 lso_print_tabs(fp, tabs); 1076 lso_print_tabs(fp, tabs);
@@ -1079,7 +1079,7 @@ void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1079 fprintf(fp, "%d\n", arg); 1079 fprintf(fp, "%d\n", arg);
1080} 1080}
1081 1081
1082void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1082void print_pushs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1083{ 1083{
1084 S32 arg; 1084 S32 arg;
1085 lso_print_tabs(fp, tabs); 1085 lso_print_tabs(fp, tabs);
@@ -1088,7 +1088,7 @@ void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1088 fprintf(fp, "%d\n", arg); 1088 fprintf(fp, "%d\n", arg);
1089} 1089}
1090 1090
1091void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1091void print_pushl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1092{ 1092{
1093 S32 arg; 1093 S32 arg;
1094 lso_print_tabs(fp, tabs); 1094 lso_print_tabs(fp, tabs);
@@ -1097,7 +1097,7 @@ void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1097 fprintf(fp, "%d\n", arg); 1097 fprintf(fp, "%d\n", arg);
1098} 1098}
1099 1099
1100void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1100void print_pushv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1101{ 1101{
1102 S32 arg; 1102 S32 arg;
1103 lso_print_tabs(fp, tabs); 1103 lso_print_tabs(fp, tabs);
@@ -1106,7 +1106,7 @@ void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1106 fprintf(fp, "%d\n", arg); 1106 fprintf(fp, "%d\n", arg);
1107} 1107}
1108 1108
1109void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1109void print_pushq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1110{ 1110{
1111 S32 arg; 1111 S32 arg;
1112 lso_print_tabs(fp, tabs); 1112 lso_print_tabs(fp, tabs);
@@ -1115,7 +1115,7 @@ void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1115 fprintf(fp, "%d\n", arg); 1115 fprintf(fp, "%d\n", arg);
1116} 1116}
1117 1117
1118void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1118void print_pushg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1119{ 1119{
1120 S32 arg; 1120 S32 arg;
1121 lso_print_tabs(fp, tabs); 1121 lso_print_tabs(fp, tabs);
@@ -1124,7 +1124,7 @@ void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1124 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); 1124 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR));
1125} 1125}
1126 1126
1127void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1127void print_pushgs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1128{ 1128{
1129 S32 arg; 1129 S32 arg;
1130 lso_print_tabs(fp, tabs); 1130 lso_print_tabs(fp, tabs);
@@ -1133,7 +1133,7 @@ void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1133 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); 1133 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR));
1134} 1134}
1135 1135
1136void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1136void print_pushgl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1137{ 1137{
1138 S32 arg; 1138 S32 arg;
1139 lso_print_tabs(fp, tabs); 1139 lso_print_tabs(fp, tabs);
@@ -1142,7 +1142,7 @@ void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1142 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); 1142 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR));
1143} 1143}
1144 1144
1145void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1145void print_pushgv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1146{ 1146{
1147 S32 arg; 1147 S32 arg;
1148 lso_print_tabs(fp, tabs); 1148 lso_print_tabs(fp, tabs);
@@ -1151,7 +1151,7 @@ void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1151 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); 1151 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR));
1152} 1152}
1153 1153
1154void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1154void print_pushgq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1155{ 1155{
1156 S32 arg; 1156 S32 arg;
1157 lso_print_tabs(fp, tabs); 1157 lso_print_tabs(fp, tabs);
@@ -1160,25 +1160,25 @@ void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1160 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR)); 1160 fprintf(fp, "0x%X\n", arg + get_register(buffer, LREG_GVR));
1161} 1161}
1162 1162
1163void print_puship(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1163void print_puship(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1164{ 1164{
1165 lso_print_tabs(fp, tabs); 1165 lso_print_tabs(fp, tabs);
1166 fprintf(fp, "[0x%X]\tPUSHIP\n", offset++); 1166 fprintf(fp, "[0x%X]\tPUSHIP\n", offset++);
1167} 1167}
1168 1168
1169void print_pushbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1169void print_pushbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1170{ 1170{
1171 lso_print_tabs(fp, tabs); 1171 lso_print_tabs(fp, tabs);
1172 fprintf(fp, "[0x%X]\tPUSHBP\n", offset++); 1172 fprintf(fp, "[0x%X]\tPUSHBP\n", offset++);
1173} 1173}
1174 1174
1175void print_pushsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1175void print_pushsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1176{ 1176{
1177 lso_print_tabs(fp, tabs); 1177 lso_print_tabs(fp, tabs);
1178 fprintf(fp, "[0x%X]\tPUSHSP\n", offset++); 1178 fprintf(fp, "[0x%X]\tPUSHSP\n", offset++);
1179} 1179}
1180 1180
1181void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1181void print_pushargb(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1182{ 1182{
1183 U8 arg; 1183 U8 arg;
1184 lso_print_tabs(fp, tabs); 1184 lso_print_tabs(fp, tabs);
@@ -1187,7 +1187,7 @@ void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1187 fprintf(fp, "%d\n", (U32)arg); 1187 fprintf(fp, "%d\n", (U32)arg);
1188} 1188}
1189 1189
1190void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1190void print_pushargi(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1191{ 1191{
1192 S32 arg; 1192 S32 arg;
1193 lso_print_tabs(fp, tabs); 1193 lso_print_tabs(fp, tabs);
@@ -1196,7 +1196,7 @@ void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1196 fprintf(fp, "%d\n", arg); 1196 fprintf(fp, "%d\n", arg);
1197} 1197}
1198 1198
1199void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1199void print_pushargf(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1200{ 1200{
1201 F32 arg; 1201 F32 arg;
1202 lso_print_tabs(fp, tabs); 1202 lso_print_tabs(fp, tabs);
@@ -1205,7 +1205,7 @@ void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1205 fprintf(fp, "%f\n", arg); 1205 fprintf(fp, "%f\n", arg);
1206} 1206}
1207 1207
1208void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1208void print_pushargs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1209{ 1209{
1210 char arg[1024]; /*Flawfinder: ignore*/ 1210 char arg[1024]; /*Flawfinder: ignore*/
1211 lso_print_tabs(fp, tabs); 1211 lso_print_tabs(fp, tabs);
@@ -1214,7 +1214,7 @@ void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1214 fprintf(fp, "%s\n", arg); 1214 fprintf(fp, "%s\n", arg);
1215} 1215}
1216 1216
1217void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1217void print_pushargv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1218{ 1218{
1219 LLVector3 arg; 1219 LLVector3 arg;
1220 lso_print_tabs(fp, tabs); 1220 lso_print_tabs(fp, tabs);
@@ -1223,7 +1223,7 @@ void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1223 fprintf(fp, "< %f, %f, %f >\n", arg.mV[VX], arg.mV[VY], arg.mV[VZ]); 1223 fprintf(fp, "< %f, %f, %f >\n", arg.mV[VX], arg.mV[VY], arg.mV[VZ]);
1224} 1224}
1225 1225
1226void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1226void print_pushargq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1227{ 1227{
1228 LLQuaternion arg; 1228 LLQuaternion arg;
1229 lso_print_tabs(fp, tabs); 1229 lso_print_tabs(fp, tabs);
@@ -1232,25 +1232,25 @@ void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1232 fprintf(fp, "< %f, %f, %f, %f >\n", arg.mQ[VX], arg.mQ[VY], arg.mQ[VZ], arg.mQ[VS]); 1232 fprintf(fp, "< %f, %f, %f, %f >\n", arg.mQ[VX], arg.mQ[VY], arg.mQ[VZ], arg.mQ[VS]);
1233} 1233}
1234 1234
1235void print_pushe(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1235void print_pushe(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1236{ 1236{
1237 lso_print_tabs(fp, tabs); 1237 lso_print_tabs(fp, tabs);
1238 fprintf(fp, "[0x%X]\tPUSHE\n", offset++); 1238 fprintf(fp, "[0x%X]\tPUSHE\n", offset++);
1239} 1239}
1240 1240
1241void print_pushev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1241void print_pushev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1242{ 1242{
1243 lso_print_tabs(fp, tabs); 1243 lso_print_tabs(fp, tabs);
1244 fprintf(fp, "[0x%X]\tPUSHEV\n", offset++); 1244 fprintf(fp, "[0x%X]\tPUSHEV\n", offset++);
1245} 1245}
1246 1246
1247void print_pusheq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1247void print_pusheq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1248{ 1248{
1249 lso_print_tabs(fp, tabs); 1249 lso_print_tabs(fp, tabs);
1250 fprintf(fp, "[0x%X]\tPUSHEQ\n", offset++); 1250 fprintf(fp, "[0x%X]\tPUSHEQ\n", offset++);
1251} 1251}
1252 1252
1253void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1253void print_pusharge(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1254{ 1254{
1255 S32 arg; 1255 S32 arg;
1256 lso_print_tabs(fp, tabs); 1256 lso_print_tabs(fp, tabs);
@@ -1260,7 +1260,7 @@ void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1260} 1260}
1261 1261
1262 1262
1263void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1263void print_add(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1264{ 1264{
1265 U8 types; 1265 U8 types;
1266 U8 type1; 1266 U8 type1;
@@ -1273,7 +1273,7 @@ void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1273 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1273 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1274} 1274}
1275 1275
1276void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1276void print_sub(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1277{ 1277{
1278 U8 types; 1278 U8 types;
1279 U8 type1; 1279 U8 type1;
@@ -1286,7 +1286,7 @@ void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1286 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1286 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1287} 1287}
1288 1288
1289void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1289void print_mul(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1290{ 1290{
1291 U8 types; 1291 U8 types;
1292 U8 type1; 1292 U8 type1;
@@ -1299,7 +1299,7 @@ void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1299 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1299 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1300} 1300}
1301 1301
1302void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1302void print_div(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1303{ 1303{
1304 U8 types; 1304 U8 types;
1305 U8 type1; 1305 U8 type1;
@@ -1312,7 +1312,7 @@ void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1312 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1312 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1313} 1313}
1314 1314
1315void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1315void print_mod(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1316{ 1316{
1317 U8 types; 1317 U8 types;
1318 U8 type1; 1318 U8 type1;
@@ -1325,7 +1325,7 @@ void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1325 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1325 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1326} 1326}
1327 1327
1328void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1328void print_eq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1329{ 1329{
1330 U8 types; 1330 U8 types;
1331 U8 type1; 1331 U8 type1;
@@ -1338,7 +1338,7 @@ void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1338 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1338 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1339} 1339}
1340 1340
1341void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1341void print_neq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1342{ 1342{
1343 U8 types; 1343 U8 types;
1344 U8 type1; 1344 U8 type1;
@@ -1351,7 +1351,7 @@ void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1351 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1351 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1352} 1352}
1353 1353
1354void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1354void print_leq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1355{ 1355{
1356 U8 types; 1356 U8 types;
1357 U8 type1; 1357 U8 type1;
@@ -1364,7 +1364,7 @@ void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1364 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1364 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1365} 1365}
1366 1366
1367void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1367void print_geq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1368{ 1368{
1369 U8 types; 1369 U8 types;
1370 U8 type1; 1370 U8 type1;
@@ -1377,7 +1377,7 @@ void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1377 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1377 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1378} 1378}
1379 1379
1380void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1380void print_less(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1381{ 1381{
1382 U8 types; 1382 U8 types;
1383 U8 type1; 1383 U8 type1;
@@ -1390,7 +1390,7 @@ void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1390 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1390 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1391} 1391}
1392 1392
1393void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1393void print_greater(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1394{ 1394{
1395 U8 types; 1395 U8 types;
1396 U8 type1; 1396 U8 type1;
@@ -1404,50 +1404,50 @@ void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1404} 1404}
1405 1405
1406 1406
1407void print_bitand(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1407void print_bitand(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1408{ 1408{
1409 lso_print_tabs(fp, tabs); 1409 lso_print_tabs(fp, tabs);
1410 fprintf(fp, "[0x%X]\tBITAND\n", offset++); 1410 fprintf(fp, "[0x%X]\tBITAND\n", offset++);
1411} 1411}
1412 1412
1413void print_bitor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1413void print_bitor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1414{ 1414{
1415 lso_print_tabs(fp, tabs); 1415 lso_print_tabs(fp, tabs);
1416 fprintf(fp, "[0x%X]\tBITOR\n", offset++); 1416 fprintf(fp, "[0x%X]\tBITOR\n", offset++);
1417} 1417}
1418 1418
1419void print_bitxor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1419void print_bitxor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1420{ 1420{
1421 lso_print_tabs(fp, tabs); 1421 lso_print_tabs(fp, tabs);
1422 fprintf(fp, "[0x%X]\tBITXOR\n", offset++); 1422 fprintf(fp, "[0x%X]\tBITXOR\n", offset++);
1423} 1423}
1424 1424
1425void print_booland(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1425void print_booland(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1426{ 1426{
1427 lso_print_tabs(fp, tabs); 1427 lso_print_tabs(fp, tabs);
1428 fprintf(fp, "[0x%X]\tBOOLAND\n", offset++); 1428 fprintf(fp, "[0x%X]\tBOOLAND\n", offset++);
1429} 1429}
1430 1430
1431void print_boolor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1431void print_boolor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1432{ 1432{
1433 lso_print_tabs(fp, tabs); 1433 lso_print_tabs(fp, tabs);
1434 fprintf(fp, "[0x%X]\tBOOLOR\n", offset++); 1434 fprintf(fp, "[0x%X]\tBOOLOR\n", offset++);
1435} 1435}
1436 1436
1437void print_shl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1437void print_shl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1438{ 1438{
1439 lso_print_tabs(fp, tabs); 1439 lso_print_tabs(fp, tabs);
1440 fprintf(fp, "[0x%X]\tSHL\n", offset++); 1440 fprintf(fp, "[0x%X]\tSHL\n", offset++);
1441} 1441}
1442 1442
1443void print_shr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1443void print_shr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1444{ 1444{
1445 lso_print_tabs(fp, tabs); 1445 lso_print_tabs(fp, tabs);
1446 fprintf(fp, "[0x%X]\tSHR\n", offset++); 1446 fprintf(fp, "[0x%X]\tSHR\n", offset++);
1447} 1447}
1448 1448
1449 1449
1450void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1450void print_neg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1451{ 1451{
1452 U8 type; 1452 U8 type;
1453 lso_print_tabs(fp, tabs); 1453 lso_print_tabs(fp, tabs);
@@ -1456,19 +1456,19 @@ void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1456 fprintf(fp, "%s\n", LSCRIPTTypeNames[type]); 1456 fprintf(fp, "%s\n", LSCRIPTTypeNames[type]);
1457} 1457}
1458 1458
1459void print_bitnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1459void print_bitnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1460{ 1460{
1461 lso_print_tabs(fp, tabs); 1461 lso_print_tabs(fp, tabs);
1462 fprintf(fp, "[0x%X]\tBITNOT\n", offset++); 1462 fprintf(fp, "[0x%X]\tBITNOT\n", offset++);
1463} 1463}
1464 1464
1465void print_boolnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1465void print_boolnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1466{ 1466{
1467 lso_print_tabs(fp, tabs); 1467 lso_print_tabs(fp, tabs);
1468 fprintf(fp, "[0x%X]\tBOOLNOT\n", offset++); 1468 fprintf(fp, "[0x%X]\tBOOLNOT\n", offset++);
1469} 1469}
1470 1470
1471void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1471void print_jump(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1472{ 1472{
1473 S32 arg; 1473 S32 arg;
1474 lso_print_tabs(fp, tabs); 1474 lso_print_tabs(fp, tabs);
@@ -1477,7 +1477,7 @@ void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1477 fprintf(fp, "%d\n", arg); 1477 fprintf(fp, "%d\n", arg);
1478} 1478}
1479 1479
1480void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1480void print_jumpif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1481{ 1481{
1482 S32 arg; 1482 S32 arg;
1483 U8 type; 1483 U8 type;
@@ -1488,7 +1488,7 @@ void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1488 fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg); 1488 fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg);
1489} 1489}
1490 1490
1491void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1491void print_jumpnif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1492{ 1492{
1493 S32 arg; 1493 S32 arg;
1494 U8 type; 1494 U8 type;
@@ -1499,7 +1499,7 @@ void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1499 fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg); 1499 fprintf(fp, "%s, %d\n", LSCRIPTTypeNames[type], arg);
1500} 1500}
1501 1501
1502void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1502void print_state(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1503{ 1503{
1504 S32 arg; 1504 S32 arg;
1505 lso_print_tabs(fp, tabs); 1505 lso_print_tabs(fp, tabs);
@@ -1508,7 +1508,7 @@ void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1508 fprintf(fp, "%d\n", arg); 1508 fprintf(fp, "%d\n", arg);
1509} 1509}
1510 1510
1511void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1511void print_call(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1512{ 1512{
1513 S32 arg; 1513 S32 arg;
1514 lso_print_tabs(fp, tabs); 1514 lso_print_tabs(fp, tabs);
@@ -1517,13 +1517,13 @@ void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1517 fprintf(fp, "%d\n", arg); 1517 fprintf(fp, "%d\n", arg);
1518} 1518}
1519 1519
1520void print_return(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1520void print_return(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1521{ 1521{
1522 lso_print_tabs(fp, tabs); 1522 lso_print_tabs(fp, tabs);
1523 fprintf(fp, "[0x%X]\tRETURN\n", offset++); 1523 fprintf(fp, "[0x%X]\tRETURN\n", offset++);
1524} 1524}
1525 1525
1526void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1526void print_cast(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1527{ 1527{
1528 U8 types; 1528 U8 types;
1529 U8 type1; 1529 U8 type1;
@@ -1536,7 +1536,7 @@ void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1536 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]); 1536 fprintf(fp, "%s, %s\n", LSCRIPTTypeNames[type1], LSCRIPTTypeNames[type2]);
1537} 1537}
1538 1538
1539void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1539void print_stacktos(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1540{ 1540{
1541 S32 arg; 1541 S32 arg;
1542 lso_print_tabs(fp, tabs); 1542 lso_print_tabs(fp, tabs);
@@ -1545,7 +1545,7 @@ void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1545 fprintf(fp, "%d\n", arg); 1545 fprintf(fp, "%d\n", arg);
1546} 1546}
1547 1547
1548void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1548void print_stacktol(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1549{ 1549{
1550 S32 arg; 1550 S32 arg;
1551 lso_print_tabs(fp, tabs); 1551 lso_print_tabs(fp, tabs);
@@ -1554,7 +1554,7 @@ void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1554 fprintf(fp, "%d\n", arg); 1554 fprintf(fp, "%d\n", arg);
1555} 1555}
1556 1556
1557void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1557void print_print(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1558{ 1558{
1559 lso_print_tabs(fp, tabs); 1559 lso_print_tabs(fp, tabs);
1560 fprintf(fp, "[0x%X]\tPRINT ", offset++); 1560 fprintf(fp, "[0x%X]\tPRINT ", offset++);
@@ -1562,7 +1562,7 @@ void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1562 fprintf(fp, "%s\n", LSCRIPTTypeNames[type]); 1562 fprintf(fp, "%s\n", LSCRIPTTypeNames[type]);
1563} 1563}
1564 1564
1565void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1565void print_calllib(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1566{ 1566{
1567 U8 arg; 1567 U8 arg;
1568 lso_print_tabs(fp, tabs); 1568 lso_print_tabs(fp, tabs);
@@ -1572,7 +1572,7 @@ void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1572} 1572}
1573 1573
1574 1574
1575void print_calllib_two_byte(FILE *fp, U8 *buffer, S32 &offset, S32 tabs) 1575void print_calllib_two_byte(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs)
1576{ 1576{
1577 U16 arg; 1577 U16 arg;
1578 lso_print_tabs(fp, tabs); 1578 lso_print_tabs(fp, tabs);
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.h b/linden/indra/lscript/lscript_execute/lscript_readlso.h
index 17d9460..ab339e0 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.h
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.h
@@ -36,135 +36,135 @@
36#include "linked_lists.h" 36#include "linked_lists.h"
37 37
38// list of op code print functions 38// list of op code print functions
39void print_noop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 39void print_noop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
40void print_pop(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 40void print_pop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
41void print_pops(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 41void print_pops(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
42void print_popl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 42void print_popl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
43void print_popv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 43void print_popv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
44void print_popq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 44void print_popq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
45void print_poparg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 45void print_poparg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
46void print_popip(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 46void print_popip(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
47void print_popbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 47void print_popbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
48void print_popsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 48void print_popsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
49void print_popslr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 49void print_popslr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
50 50
51void print_dup(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 51void print_dup(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
52void print_dups(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 52void print_dups(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
53void print_dupl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 53void print_dupl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
54void print_dupv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 54void print_dupv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
55void print_dupq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 55void print_dupq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
56 56
57void print_store(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 57void print_store(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
58void print_stores(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 58void print_stores(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
59void print_storel(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 59void print_storel(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
60void print_storev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 60void print_storev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
61void print_storeq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 61void print_storeq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
62void print_storeg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 62void print_storeg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
63void print_storegs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 63void print_storegs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
64void print_storegl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 64void print_storegl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
65void print_storegv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 65void print_storegv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
66void print_storegq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 66void print_storegq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
67void print_loadp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 67void print_loadp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
68void print_loadsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 68void print_loadsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
69void print_loadlp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 69void print_loadlp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
70void print_loadvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 70void print_loadvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
71void print_loadqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 71void print_loadqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
72void print_loadgp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 72void print_loadgp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
73void print_loadgsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 73void print_loadgsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
74void print_loadglp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 74void print_loadglp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
75void print_loadgvp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 75void print_loadgvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
76void print_loadgqp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 76void print_loadgqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
77 77
78void print_push(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 78void print_push(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
79void print_pushl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 79void print_pushl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
80void print_pushs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 80void print_pushs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
81void print_pushv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 81void print_pushv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
82void print_pushq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 82void print_pushq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
83void print_pushg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 83void print_pushg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
84void print_pushgl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 84void print_pushgl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
85void print_pushgs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 85void print_pushgs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
86void print_pushgv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 86void print_pushgv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
87void print_pushgq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 87void print_pushgq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
88void print_puship(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 88void print_puship(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
89void print_pushbp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 89void print_pushbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
90void print_pushsp(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 90void print_pushsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
91void print_pushargb(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 91void print_pushargb(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
92void print_pushargi(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 92void print_pushargi(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
93void print_pushargf(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 93void print_pushargf(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
94void print_pushargs(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 94void print_pushargs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
95void print_pushargv(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 95void print_pushargv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
96void print_pushargq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 96void print_pushargq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
97void print_pushe(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 97void print_pushe(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
98void print_pushev(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 98void print_pushev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
99void print_pusheq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 99void print_pusheq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
100void print_pusharge(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 100void print_pusharge(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
101 101
102void print_add(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 102void print_add(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
103void print_sub(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 103void print_sub(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
104void print_mul(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 104void print_mul(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
105void print_div(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 105void print_div(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
106void print_mod(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 106void print_mod(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
107 107
108void print_eq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 108void print_eq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
109void print_neq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 109void print_neq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
110void print_leq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 110void print_leq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
111void print_geq(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 111void print_geq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
112void print_less(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 112void print_less(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
113void print_greater(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 113void print_greater(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
114 114
115void print_bitand(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 115void print_bitand(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
116void print_bitor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 116void print_bitor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
117void print_bitxor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 117void print_bitxor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
118void print_booland(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 118void print_booland(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
119void print_boolor(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 119void print_boolor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
120 120
121void print_shl(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 121void print_shl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
122void print_shr(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 122void print_shr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
123 123
124void print_neg(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 124void print_neg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
125void print_bitnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 125void print_bitnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
126void print_boolnot(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 126void print_boolnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
127 127
128void print_jump(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 128void print_jump(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
129void print_jumpif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 129void print_jumpif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
130void print_jumpnif(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 130void print_jumpnif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
131 131
132void print_state(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 132void print_state(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
133void print_call(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 133void print_call(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
134void print_return(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 134void print_return(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
135void print_cast(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 135void print_cast(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
136void print_stacktos(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 136void print_stacktos(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
137void print_stacktol(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 137void print_stacktol(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
138 138
139void print_print(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 139void print_print(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
140 140
141void print_calllib(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 141void print_calllib(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
142void print_calllib_two_byte(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 142void print_calllib_two_byte(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
143 143
144class LLScriptLSOParse 144class LLScriptLSOParse
145{ 145{
146public: 146public:
147 LLScriptLSOParse(FILE *fp); 147 LLScriptLSOParse(LLFILE *fp);
148 LLScriptLSOParse(U8 *buffer); 148 LLScriptLSOParse(U8 *buffer);
149 ~LLScriptLSOParse(); 149 ~LLScriptLSOParse();
150 150
151 void initOpCodePrinting(); 151 void initOpCodePrinting();
152 152
153 void printData(FILE *fp); 153 void printData(LLFILE *fp);
154 void printNameDesc(FILE *fp); 154 void printNameDesc(LLFILE *fp);
155 void printRegisters(FILE *fp); 155 void printRegisters(LLFILE *fp);
156 void printGlobals(FILE *fp); 156 void printGlobals(LLFILE *fp);
157 void printGlobalFunctions(FILE *fp); 157 void printGlobalFunctions(LLFILE *fp);
158 void printStates(FILE *fp); 158 void printStates(LLFILE *fp);
159 void printHeap(FILE *fp); 159 void printHeap(LLFILE *fp);
160 void printOpCodes(FILE *fp, S32 &offset, S32 tabs); 160 void printOpCodes(LLFILE *fp, S32 &offset, S32 tabs);
161 void printOpCodeRange(FILE *fp, S32 start, S32 end, S32 tabs); 161 void printOpCodeRange(LLFILE *fp, S32 start, S32 end, S32 tabs);
162 162
163 U8 *mRawData; 163 U8 *mRawData;
164 void (*mPrintOpCodes[0x100])(FILE *fp, U8 *buffer, S32 &offset, S32 tabs); 164 void (*mPrintOpCodes[0x100])(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
165}; 165};
166 166
167 167
168void lso_print_tabs(FILE *fp, S32 tabs); 168void lso_print_tabs(LLFILE *fp, S32 tabs);
169 169
170#endif 170#endif
diff --git a/linden/indra/lscript/lscript_library/lscript_alloc.cpp b/linden/indra/lscript/lscript_library/lscript_alloc.cpp
index 2c37d22..9ad6c6b 100644
--- a/linden/indra/lscript/lscript_library/lscript_alloc.cpp
+++ b/linden/indra/lscript/lscript_library/lscript_alloc.cpp
@@ -851,7 +851,7 @@ void lsa_print_heap(U8 *buffer)
851 printf("==========\n"); 851 printf("==========\n");
852} 852}
853 853
854void lsa_fprint_heap(U8 *buffer, FILE *fp) 854void lsa_fprint_heap(U8 *buffer, LLFILE *fp)
855{ 855{
856 S32 offset = get_register(buffer, LREG_HR); 856 S32 offset = get_register(buffer, LREG_HR);
857 S32 readoffset; 857 S32 readoffset;
diff --git a/linden/indra/mac_crash_logger/llcrashloggermac.cpp b/linden/indra/mac_crash_logger/llcrashloggermac.cpp
index 3cbd6c2..36d8285 100644
--- a/linden/indra/mac_crash_logger/llcrashloggermac.cpp
+++ b/linden/indra/mac_crash_logger/llcrashloggermac.cpp
@@ -53,7 +53,7 @@ const S32 SETTINGS_FILE_VERSION = 101;
53// Windows Message Handlers 53// Windows Message Handlers
54 54
55BOOL gFirstDialog = TRUE; // Are we currently handling the Send/Don't Send dialog? 55BOOL gFirstDialog = TRUE; // Are we currently handling the Send/Don't Send dialog?
56FILE *gDebugFile = NULL; 56LLFILE *gDebugFile = NULL;
57 57
58WindowRef gWindow = NULL; 58WindowRef gWindow = NULL;
59EventHandlerRef gEventHandler = NULL; 59EventHandlerRef gEventHandler = NULL;
diff --git a/linden/indra/mac_updater/mac_updater.cpp b/linden/indra/mac_updater/mac_updater.cpp
index b7773e2..15e28ac 100644
--- a/linden/indra/mac_updater/mac_updater.cpp
+++ b/linden/indra/mac_updater/mac_updater.cpp
@@ -727,7 +727,7 @@ void *updatethreadproc(void*)
727 char temp[PATH_MAX] = ""; /* Flawfinder: ignore */ 727 char temp[PATH_MAX] = ""; /* Flawfinder: ignore */
728 // *NOTE: This buffer length is used in a scanf() below. 728 // *NOTE: This buffer length is used in a scanf() below.
729 char deviceNode[1024] = ""; /* Flawfinder: ignore */ 729 char deviceNode[1024] = ""; /* Flawfinder: ignore */
730 FILE *downloadFile = NULL; 730 LLFILE *downloadFile = NULL;
731 OSStatus err; 731 OSStatus err;
732 ProcessSerialNumber psn; 732 ProcessSerialNumber psn;
733 char target[PATH_MAX] = ""; /* Flawfinder: ignore */ 733 char target[PATH_MAX] = ""; /* Flawfinder: ignore */
@@ -942,7 +942,7 @@ void *updatethreadproc(void*)
942 942
943 snprintf(temp, sizeof(temp), "SecondLife.dmg"); 943 snprintf(temp, sizeof(temp), "SecondLife.dmg");
944 944
945 downloadFile = fopen(temp, "wb"); /* Flawfinder: ignore */ 945 downloadFile = LLFile::fopen(temp, "wb"); /* Flawfinder: ignore */
946 if(downloadFile == NULL) 946 if(downloadFile == NULL)
947 { 947 {
948 throw 0; 948 throw 0;
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index bb7ddc1..7272173 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Second Life"; 3CFBundleName = "Second Life";
4CFBundleShortVersionString = "Second Life version 1.19.1.4"; 4CFBundleShortVersionString = "Second Life version 1.20.6.86975";
5CFBundleGetInfoString = "Second Life version 1.19.1.4, Copyright 2004-2008 Linden Research, Inc."; 5CFBundleGetInfoString = "Second Life version 1.20.6.86975, Copyright 2004-2008 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index 492e589..fa50503 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
32 </dict> 32 </dict>
33 </array> 33 </array>
34 <key>CFBundleVersion</key> 34 <key>CFBundleVersion</key>
35 <string>1.19.1.4</string> 35 <string>1.20.6.86975</string>
36 <key>CSResourcesFileMapped</key> 36 <key>CSResourcesFileMapped</key>
37 <true/> 37 <true/>
38</dict> 38</dict>
diff --git a/linden/indra/newview/app_settings/cmd_line.xml b/linden/indra/newview/app_settings/cmd_line.xml
index 3e6fa21..746e56d 100644
--- a/linden/indra/newview/app_settings/cmd_line.xml
+++ b/linden/indra/newview/app_settings/cmd_line.xml
@@ -1,335 +1,335 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<llsd> 2<llsd>
3 <map> 3 <map>
4 <key>help</key> 4 <key>help</key>
5 <map> 5 <map>
6 <key>desc</key> 6 <key>desc</key>
7 <string>display this help message</string> 7 <string>display this help message</string>
8 8
9 <key>short</key> 9 <key>short</key>
10 <string>h</string> 10 <string>h</string>
11 </map> 11 </map>
12 12
13 <key>port</key> 13 <key>port</key>
14 <map> 14 <map>
15 <key>count</key> 15 <key>count</key>
16 <integer>1</integer> 16 <integer>1</integer>
17 <key>map-to</key> 17 <key>map-to</key>
18 <string>UserConnectionPort</string> 18 <string>UserConnectionPort</string>
19 </map> 19 </map>
20 20
21 <key>drop</key> 21 <key>drop</key>
22 <map> 22 <map>
23 <key>count</key> 23 <key>count</key>
24 <integer>1</integer> 24 <integer>1</integer>
25 <key>map-to</key> 25 <key>map-to</key>
26 <string>PacketDropPercentage</string> 26 <string>PacketDropPercentage</string>
27 </map> 27 </map>
28 28
29 <key>inbw</key> 29 <key>inbw</key>
30 <map> 30 <map>
31 <key>count</key> 31 <key>count</key>
32 <integer>1</integer> 32 <integer>1</integer>
33 <key>map-to</key> 33 <key>map-to</key>
34 <string>InBandwidth</string> 34 <string>InBandwidth</string>
35 </map> 35 </map>
36 36
37 <key>outbw</key> 37 <key>outbw</key>
38 <map> 38 <map>
39 <key>count</key> 39 <key>count</key>
40 <integer>1</integer> 40 <integer>1</integer>
41 <key>map-to</key> 41 <key>map-to</key>
42 <string>OutBandwidth</string> 42 <string>OutBandwidth</string>
43 </map> 43 </map>
44 44
45 <key>grid</key> 45 <key>grid</key>
46 <map> 46 <map>
47 <key>desc</key> 47 <key>desc</key>
48 <string>Specify the name of the grid, local, or an IP address to connect to.</string> 48 <string>Specify the name of the grid, local, or an IP address to connect to.</string>
49 <key>count</key> 49 <key>count</key>
50 <integer>1</integer> 50 <integer>1</integer>
51 <key>map-to</key> 51 <key>map-to</key>
52 <string>GridChoice</string> 52 <string>CmdLineGridChoice</string>
53 </map> 53 </map>
54 54
55 <key>loginuri</key> 55 <key>loginuri</key>
56 <map> 56 <map>
57 <key>desc</key> 57 <key>desc</key>
58 <string>login server and CGI script to use</string> 58 <string>login server and CGI script to use</string>
59 <key>count</key> 59 <key>count</key>
60 <integer>1</integer> 60 <integer>1</integer>
61 <key>compose</key> 61 <key>compose</key>
62 <boolean>true</boolean> 62 <boolean>true</boolean>
63 <key>map-to</key> 63 <key>map-to</key>
64 <string>LoginURI</string> 64 <string>CmdLineLoginURI</string>
65 </map> 65 </map>
66 66
67 <key>helperuri</key> 67 <key>helperuri</key>
68 <map> 68 <map>
69 <key>desc</key> 69 <key>desc</key>
70 <string>helper web CGI prefix to use</string> 70 <string>helper web CGI prefix to use</string>
71 <key>count</key> 71 <key>count</key>
72 <integer>1</integer> 72 <integer>1</integer>
73 <key>map-to</key> 73 <key>map-to</key>
74 <string>HelperURI</string> 74 <string>CmdLineHelperURI</string>
75 </map> 75 </map>
76 76
77 <key>debugviews</key> 77 <key>debugviews</key>
78 <map> 78 <map>
79 <key>map-to</key> 79 <key>map-to</key>
80 <string>DebugViews</string> 80 <string>DebugViews</string>
81 </map> 81 </map>
82 82
83 <key>skin</key> 83 <key>skin</key>
84 <map> 84 <map>
85 <key>desc</key> 85 <key>desc</key>
86 <string>ui/branding skin folder to use</string> 86 <string>ui/branding skin folder to use</string>
87 <key>count</key> 87 <key>count</key>
88 <integer>1</integer> 88 <integer>1</integer>
89 <key>map-to</key> 89 <key>map-to</key>
90 <string>SkinFolder</string> 90 <string>SkinFolder</string>
91 </map> 91 </map>
92 92
93 <key>autologin</key> 93 <key>autologin</key>
94 <map> 94 <map>
95 <key>desc</key> 95 <key>desc</key>
96 <string>log in as last saved user</string> 96 <string>log in as last saved user</string>
97 <key>map-to</key> 97 <key>map-to</key>
98 <string>AutoLogin</string> 98 <string>AutoLogin</string>
99 </map> 99 </map>
100 100
101 <key>quitafter</key> 101 <key>quitafter</key>
102 <map> 102 <map>
103 <key>count</key> 103 <key>count</key>
104 <integer>1</integer> 104 <integer>1</integer>
105 <key>map-to</key> 105 <key>map-to</key>
106 <string>QuitAfterSeconds</string> 106 <string>QuitAfterSeconds</string>
107 </map> 107 </map>
108 108
109 <key>rotate</key> 109 <key>rotate</key>
110 <map> 110 <map>
111 <key>map-to</key> 111 <key>map-to</key>
112 <string>RotateRight</string> 112 <string>RotateRight</string>
113 </map> 113 </map>
114 114
115 <key>noaudio</key> 115 <key>noaudio</key>
116 <map> 116 <map>
117 <key>map-to</key> 117 <key>map-to</key>
118 <string>NoAudio</string> 118 <string>NoAudio</string>
119 </map> 119 </map>
120 120
121 <key>nosound</key> 121 <key>nosound</key>
122 <map> 122 <map>
123 <key>map-to</key> 123 <key>map-to</key>
124 <string>NoAudio</string> 124 <string>NoAudio</string>
125 </map> 125 </map>
126 126
127 <key>noprobe</key> 127 <key>noprobe</key>
128 <map> 128 <map>
129 <key>map-to</key> 129 <key>map-to</key>
130 <string>NoHardwareProbe</string> 130 <string>NoHardwareProbe</string>
131 </map> 131 </map>
132 132
133 <key>noquicktime</key> 133 <key>noquicktime</key>
134 <map> 134 <map>
135 <key>map-to</key> 135 <key>map-to</key>
136 <string>NoQuickTime</string> 136 <string>NoQuickTime</string>
137 </map> 137 </map>
138 138
139 <key>nopreload</key> 139 <key>nopreload</key>
140 <map> 140 <map>
141 <key>map-to</key> 141 <key>map-to</key>
142 <string>NoPreload</string> 142 <string>NoPreload</string>
143 </map> 143 </map>
144 144
145 <key>purge</key> 145 <key>purge</key>
146 <map> 146 <map>
147 <key>desc</key> 147 <key>desc</key>
148 <string>Delete files in the cache.</string> 148 <string>Delete files in the cache.</string>
149 <key>map-to</key> 149 <key>map-to</key>
150 <string>PurgeCacheOnNextStartup</string> 150 <string>PurgeCacheOnNextStartup</string>
151 </map> 151 </map>
152 152
153 <key>noinvlib</key> 153 <key>noinvlib</key>
154 <map> 154 <map>
155 <key>desc</key> 155 <key>desc</key>
156 <string>Do not request the inventory library.</string> 156 <string>Do not request the inventory library.</string>
157 <key>map-to</key> 157 <key>map-to</key>
158 <string>NoInventoryLibrary</string> 158 <string>NoInventoryLibrary</string>
159 </map> 159 </map>
160 160
161 <key>logfile</key> 161 <key>logfile</key>
162 <map> 162 <map>
163 <key>count</key> 163 <key>count</key>
164 <integer>1</integer> 164 <integer>1</integer>
165 <key>map-to</key> 165 <key>map-to</key>
166 <string>UserLogFile</string> 166 <string>UserLogFile</string>
167 </map> 167 </map>
168 168
169 <key>setdefault</key> 169 <key>setdefault</key>
170 <map> 170 <map>
171 <key>desc</key> 171 <key>desc</key>
172 <string> specify the value of a particular 172 <string> specify the value of a particular
173 configuration variable which can be 173 configuration variable which can be
174 overridden by settings.xml 174 overridden by settings.xml
175 </string> 175 </string>
176 <key>count</key> 176 <key>count</key>
177 <integer>2</integer> 177 <integer>2</integer>
178 <!-- Special case. Mapped to settings procedurally. --> 178 <!-- Special case. Mapped to settings procedurally. -->
179 </map> 179 </map>
180 180
181 <key>set</key> 181 <key>set</key>
182 <map> 182 <map>
183 <key>desc</key> 183 <key>desc</key>
184 <string> specify the value of a particular 184 <string> specify the value of a particular
185 configuration variable that 185 configuration variable that
186 overrides all other settings 186 overrides all other settings
187 </string> 187 </string>
188 <key>count</key> 188 <key>count</key>
189 <integer>2</integer> 189 <integer>2</integer>
190 <!-- Special case. Mapped to settings procedurally. --> 190 <!-- Special case. Mapped to settings procedurally. -->
191 </map> 191 </map>
192 192
193 <key>settings</key> 193 <key>settings</key>
194 <map> 194 <map>
195 <key>desc</key> 195 <key>desc</key>
196 <string>Specify the filename of a configuration file.</string> 196 <string>Specify the filename of a configuration file.</string>
197 <key>count</key> 197 <key>count</key>
198 <integer>1</integer> 198 <integer>1</integer>
199 <!-- Special case. Mapped to settings procedurally. --> 199 <!-- Special case. Mapped to settings procedurally. -->
200 </map> 200 </map>
201 201
202 <key>login</key> 202 <key>login</key>
203 <map> 203 <map>
204 <key>desc</key> 204 <key>desc</key>
205 <string>3 tokens: first, last and password</string> 205 <string>3 tokens: first, last and password</string>
206 <key>count</key> 206 <key>count</key>
207 <integer>3</integer> 207 <integer>3</integer>
208 <key>map-to</key> 208 <key>map-to</key>
209 <string>UserLoginInfo</string> 209 <string>UserLoginInfo</string>
210 </map> 210 </map>
211 211
212 <key>god</key> 212 <key>god</key>
213 <map> 213 <map>
214 <key>desc</key> 214 <key>desc</key>
215 <string>Log in a god if you have god access.</string> 215 <string>Log in a god if you have god access.</string>
216 <key>map-to</key> 216 <key>map-to</key>
217 <string>ConnectAsGod</string> 217 <string>ConnectAsGod</string>
218 </map> 218 </map>
219 219
220 <key>console</key> 220 <key>console</key>
221 <map> 221 <map>
222 <key>count</key> 222 <key>count</key>
223 <integer>1</integer> 223 <integer>1</integer>
224 <key>map-to</key> 224 <key>map-to</key>
225 <string>ShowConsoleWindow</string> 225 <string>ShowConsoleWindow</string>
226 </map> 226 </map>
227 227
228 <key>safe</key> 228 <key>safe</key>
229 <map> 229 <map>
230 <key>desc</key> 230 <key>desc</key>
231 <string>Reset preferences, run in safe mode.</string> 231 <string>Reset preferences, run in safe mode.</string>
232 <key>map-to</key> 232 <key>map-to</key>
233 <string>SafeMode</string> 233 <string>SafeMode</string>
234 </map> 234 </map>
235 235
236 <key>multiple</key> 236 <key>multiple</key>
237 <map> 237 <map>
238 <key>desc</key> 238 <key>desc</key>
239 <string>Allow multple viewers.</string> 239 <string>Allow multple viewers.</string>
240 <key>map-to</key> 240 <key>map-to</key>
241 <string>AllowMultipleViewers</string> 241 <string>AllowMultipleViewers</string>
242 </map> 242 </map>
243 243
244 <key>novoice</key> 244 <key>novoice</key>
245 <map> 245 <map>
246 <key>desc</key> 246 <key>desc</key>
247 <string>Disable voice.</string> 247 <string>Disable voice.</string>
248 <key>map-to</key> 248 <key>map-to</key>
249 <string>CmdLineDisableVoice</string> 249 <string>CmdLineDisableVoice</string>
250 </map> 250 </map>
251 251
252 <key>url</key> 252 <key>url</key>
253 <map> 253 <map>
254 <key>desc</key> 254 <key>desc</key>
255 <string>Startup location</string> 255 <string>Startup location</string>
256 <key>count</key> 256 <key>count</key>
257 <integer>1</integer> 257 <integer>1</integer>
258 <key>last_option</key> 258 <key>last_option</key>
259 <boolean>true</boolean> 259 <boolean>true</boolean>
260 <!-- Special case. Not mapped to a setting. --> 260 <!-- Special case. Not mapped to a setting. -->
261 </map> 261 </map>
262 262
263 <key>slurl</key> 263 <key>slurl</key>
264 <map> 264 <map>
265 <key>desc</key> 265 <key>desc</key>
266 <string>Startup SLurl</string> 266 <string>Startup SLurl</string>
267 <key>count</key> 267 <key>count</key>
268 <integer>1</integer> 268 <integer>1</integer>
269 <key>positional</key> 269 <key>positional</key>
270 <boolean>true</boolean> 270 <boolean>true</boolean>
271 <key>last_option</key> 271 <key>last_option</key>
272 <boolean>true</boolean> 272 <boolean>true</boolean>
273 <!-- Special case. Not mapped to a setting. --> 273 <!-- Special case. Not mapped to a setting. -->
274 </map> 274 </map>
275 275
276 <key>ignorepixeldepth</key> 276 <key>ignorepixeldepth</key>
277 <map> 277 <map>
278 <key>desc</key> 278 <key>desc</key>
279 <string>Ignore pixel depth settings.</string> 279 <string>Ignore pixel depth settings.</string>
280 <key>map-to</key> 280 <key>map-to</key>
281 <string>IgnorePixelDepth</string> 281 <string>IgnorePixelDepth</string>
282 </map> 282 </map>
283 283
284 <key>cooperative</key> 284 <key>cooperative</key>
285 <map> 285 <map>
286 <key>desc</key> 286 <key>desc</key>
287 <string>Yield some idle time to local host.</string> 287 <string>Yield some idle time to local host.</string>
288 <key>count</key> 288 <key>count</key>
289 <integer>1</integer> 289 <integer>1</integer>
290 <key>map-to</key> 290 <key>map-to</key>
291 <string>YieldTime</string> 291 <string>YieldTime</string>
292 </map> 292 </map>
293 293
294 <key>no-verify-ssl-cert</key> 294 <key>no-verify-ssl-cert</key>
295 <map> 295 <map>
296 <key>map-to</key> 296 <key>map-to</key>
297 <string>NoVerifySSLCert</string> 297 <string>NoVerifySSLCert</string>
298 </map> 298 </map>
299 299
300 <key>channel</key> 300 <key>channel</key>
301 <map> 301 <map>
302 <key>count</key> 302 <key>count</key>
303 <integer>1</integer> 303 <integer>1</integer>
304 <key>map-to</key> 304 <key>map-to</key>
305 <string>VersionChannelName</string> 305 <string>VersionChannelName</string>
306 </map> 306 </map>
307 307
308 <key>loginpage</key> 308 <key>loginpage</key>
309 <map> 309 <map>
310 <key>desc</key> 310 <key>desc</key>
311 <string>Login authentication page to use.</string> 311 <string>Login authentication page to use.</string>
312 <key>count</key> 312 <key>count</key>
313 <integer>1</integer> 313 <integer>1</integer>
314 <key>map-to</key> 314 <key>map-to</key>
315 <string>LoginPage</string> 315 <string>LoginPage</string>
316 </map> 316 </map>
317 317
318 <key>qa</key> 318 <key>qa</key>
319 <map> 319 <map>
320 <key>desc</key> 320 <key>desc</key>
321 <string>Activated debugging menu in Advanced Settings.</string> 321 <string>Activated debugging menu in Advanced Settings.</string>
322 <key>map-to</key> 322 <key>map-to</key>
323 <string>QAMode</string> 323 <string>QAMode</string>
324 </map> 324 </map>
325 325
326 <key>crashonstartup</key> 326 <key>crashonstartup</key>
327 <map> 327 <map>
328 <key>desc</key> 328 <key>desc</key>
329 <string>Crashes on startup. For QA use.</string> 329 <string>Crashes on startup. For QA use.</string>
330 <key>map-to</key> 330 <key>map-to</key>
331 <string>CrashOnStartup</string> 331 <string>CrashOnStartup</string>
332 </map> 332 </map>
333 333
334 </map> 334 </map>
335</llsd> 335</llsd>
diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini
index 9a8b1f7..b6892dc 100644
--- a/linden/indra/newview/app_settings/keywords.ini
+++ b/linden/indra/newview/app_settings/keywords.ini
@@ -507,6 +507,10 @@ CLICK_ACTION_OPEN_MEDIA Used with llSetClickAction to set open-media as the defa
507[word .1, .3, .5] 507[word .1, .3, .5]
508NULL_KEY Indicates an empty key 508NULL_KEY Indicates an empty key
509EOF Indicates the last line of a notecard was read 509EOF Indicates the last line of a notecard was read
510TEXTURE_BLANK UUID for the "Blank" texture
511TEXTURE_DEFAULT UUID for the "Default Media" texture
512TEXTURE_PLYWOOD UUID for the default "Plywood" texture
513TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture
510 514
511# float constants 515# float constants
512[word .3, .1, .5] 516[word .3, .1, .5]
diff --git a/linden/indra/newview/app_settings/logcontrol.xml b/linden/indra/newview/app_settings/logcontrol.xml
new file mode 100644
index 0000000..d7bb64c
--- /dev/null
+++ b/linden/indra/newview/app_settings/logcontrol.xml
@@ -0,0 +1,47 @@
1<llsd>
2 <map>
3 <!-- default-level can be ALL, DEBUG, INFO, WARN, ERROR, or NONE -->
4 <key>default-level</key> <string>INFO</string>
5 <key>print-location</key> <boolean>false</boolean>
6 <key>settings</key>
7 <array>
8 <!-- sample entry for changing settings on specific items -->
9 <map>
10 <key>level</key><string>INFO</string>
11 <key>functions</key>
12 <array>
13 </array>
14 <key>classes</key>
15 <array>
16 </array>
17 <key>files</key>
18 <array>
19 </array>
20 <key>tags</key>
21 <array>
22 <string>AppInit</string>
23 <string>SystemInfo</string>
24 <string>TextureCache</string>
25 <string>AppCache</string>
26 <string>Window</string>
27 <string>RenderInit</string>
28 </array>
29 </map>
30 <map>
31 <key>level</key><string>DEBUG</string>
32 <key>functions</key>
33 <array>
34 </array>
35 <key>classes</key>
36 <array>
37 </array>
38 <key>files</key>
39 <array>
40 </array>
41 <key>tags</key>
42 <array>
43 </array>
44 </map>
45 </array>
46 </map>
47</llsd>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 69ae958..f5e57a5 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -1,10118 +1,10196 @@
1<?xml version="1.0" ?>
1<llsd> 2<llsd>
3<map>
4 <key>AFKTimeout</key>
2 <map> 5 <map>
6 <key>Comment</key>
7 <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
8 <key>Persist</key>
9 <integer>1</integer>
10 <key>Type</key>
11 <string>F32</string>
12 <key>Value</key>
13 <real>300.0</real>
14 </map>
3 <key>AdvanceSnapshot</key> 15 <key>AdvanceSnapshot</key>
4 <map> 16 <map>
5 <key>Comment</key> 17 <key>Comment</key>
6 <string>Display advanced parameter settings in snaphot interface</string> 18 <string>Display advanced parameter settings in snaphot interface</string>
7 <key>Persist</key> 19 <key>Persist</key>
8 <integer>1</integer> 20 <integer>1</integer>
9 <key>Type</key> 21 <key>Type</key>
10 <string>Boolean</string> 22 <string>Boolean</string>
11 <key>Value</key> 23 <key>Value</key>
12 <integer>0</integer> 24 <integer>0</integer>
13 </map> 25 </map>
14 <key>AFKTimeout</key>
15 <map>
16 <key>Comment</key>
17 <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
18 <key>Persist</key>
19 <integer>1</integer>
20 <key>Type</key>
21 <string>F32</string>
22 <key>Value</key>
23 <real>300</real>
24 </map>
25 <key>AgentChatColor</key> 26 <key>AgentChatColor</key>
26 <map> 27 <map>
27 <key>Comment</key> 28 <key>Comment</key>
28 <string>Color of chat messages from other residents</string> 29 <string>Color of chat messages from other residents</string>
29 <key>Persist</key> 30 <key>Persist</key>
30 <integer>1</integer> 31 <integer>1</integer>
31 <key>Type</key> 32 <key>Type</key>
32 <string>Color4</string> 33 <string>Color4</string>
33 <key>Value</key> 34 <key>Value</key>
34 <array> 35 <array>
35 <real>1</real> 36 <real>1.0</real>
36 <real>1</real> 37 <real>1.0</real>
37 <real>1</real> 38 <real>1.0</real>
38 <real>1</real> 39 <real>1.0</real>
39 </array> 40 </array>
40 </map> 41 </map>
41 <key>IMChatColor</key>
42 <map>
43 <key>Comment</key>
44 <string>Color of instant messages from other residents</string>
45 <key>Persist</key>
46 <integer>1</integer>
47 <key>Type</key>
48 <string>Color4</string>
49 <key>Value</key>
50 <array>
51 <real>1</real>
52 <real>1</real>
53 <real>1</real>
54 <real>1</real>
55 </array>
56 </map>
57 <key>AllowIdleAFK</key> 42 <key>AllowIdleAFK</key>
58 <map> 43 <map>
59 <key>Comment</key> 44 <key>Comment</key>
60 <string>Automatically set AFK (away from keyboard) mode when idle</string> 45 <string>Automatically set AFK (away from keyboard) mode when idle</string>
61 <key>Persist</key> 46 <key>Persist</key>
62 <integer>1</integer> 47 <integer>1</integer>
63 <key>Type</key> 48 <key>Type</key>
64 <string>Boolean</string> 49 <string>Boolean</string>
65 <key>Value</key> 50 <key>Value</key>
66 <integer>1</integer> 51 <integer>1</integer>
67 </map> 52 </map>
68 <key>AllowMultipleViewers</key> 53 <key>AllowMultipleViewers</key>
69 <map> 54 <map>
70 <key>Comment</key> 55 <key>Comment</key>
71 <string>Allow multiple viewers.</string> 56 <string>Allow multiple viewers.</string>
72 <key>Persist</key> 57 <key>Persist</key>
73 <integer>1</integer> 58 <integer>1</integer>
74 <key>Type</key> 59 <key>Type</key>
75 <string>Boolean</string> 60 <string>Boolean</string>
76 <key>Value</key> 61 <key>Value</key>
77 <integer>0</integer> 62 <integer>0</integer>
78 </map> 63 </map>
79 <key>AllowTapTapHoldRun</key> 64 <key>AllowTapTapHoldRun</key>
80 <map> 65 <map>
81 <key>Comment</key> 66 <key>Comment</key>
82 <string>Tapping a direction key twice and holding it down makes avatar run</string> 67 <string>Tapping a direction key twice and holding it down makes avatar run</string>
83 <key>Persist</key> 68 <key>Persist</key>
84 <integer>1</integer> 69 <integer>1</integer>
85 <key>Type</key> 70 <key>Type</key>
86 <string>Boolean</string> 71 <string>Boolean</string>
87 <key>Value</key> 72 <key>Value</key>
88 <integer>1</integer> 73 <integer>1</integer>
89 </map> 74 </map>
90 <key>AnimateTextures</key> 75 <key>AnimateTextures</key>
91 <map> 76 <map>
92 <key>Comment</key> 77 <key>Comment</key>
93 <string>Enable texture animation (debug)</string> 78 <string>Enable texture animation (debug)</string>
94 <key>Persist</key> 79 <key>Persist</key>
95 <integer>1</integer> 80 <integer>1</integer>
96 <key>Type</key> 81 <key>Type</key>
97 <string>Boolean</string> 82 <string>Boolean</string>
98 <key>Value</key> 83 <key>Value</key>
99 <integer>1</integer> 84 <integer>1</integer>
100 </map> 85 </map>
101 <key>AnimationDebug</key> 86 <key>AnimationDebug</key>
102 <map> 87 <map>
103 <key>Comment</key> 88 <key>Comment</key>
104 <string>Show active animations in a bubble above avatars head</string> 89 <string>Show active animations in a bubble above avatars head</string>
105 <key>Persist</key> 90 <key>Persist</key>
106 <integer>1</integer> 91 <integer>1</integer>
107 <key>Type</key> 92 <key>Type</key>
108 <string>Boolean</string> 93 <string>Boolean</string>
109 <key>Value</key> 94 <key>Value</key>
110 <integer>0</integer> 95 <integer>0</integer>
111 </map> 96 </map>
112 <key>AppearanceCameraMovement</key> 97 <key>AppearanceCameraMovement</key>
113 <map> 98 <map>
114 <key>Comment</key> 99 <key>Comment</key>
115 <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string> 100 <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
116 <key>Persist</key> 101 <key>Persist</key>
117 <integer>1</integer> 102 <integer>1</integer>
118 <key>Type</key> 103 <key>Type</key>
119 <string>Boolean</string> 104 <string>Boolean</string>
120 <key>Value</key> 105 <key>Value</key>
121 <integer>1</integer> 106 <integer>1</integer>
122 </map> 107 </map>
123 <key>ApplyColorImmediately</key> 108 <key>ApplyColorImmediately</key>
124 <map> 109 <map>
125 <key>Comment</key> 110 <key>Comment</key>
126 <string>Preview selections in color picker immediately</string> 111 <string>Preview selections in color picker immediately</string>
127 <key>Persist</key> 112 <key>Persist</key>
128 <integer>1</integer> 113 <integer>1</integer>
129 <key>Type</key> 114 <key>Type</key>
130 <string>Boolean</string> 115 <string>Boolean</string>
131 <key>Value</key> 116 <key>Value</key>
132 <integer>1</integer> 117 <integer>1</integer>
133 </map> 118 </map>
134 <key>ApplyTextureImmediately</key> 119 <key>ApplyTextureImmediately</key>
135 <map> 120 <map>
136 <key>Comment</key> 121 <key>Comment</key>
137 <string>Preview selections in texture picker immediately</string> 122 <string>Preview selections in texture picker immediately</string>
138 <key>Persist</key> 123 <key>Persist</key>
139 <integer>1</integer> 124 <integer>1</integer>
140 <key>Type</key> 125 <key>Type</key>
141 <string>Boolean</string> 126 <string>Boolean</string>
142 <key>Value</key> 127 <key>Value</key>
143 <integer>1</integer> 128 <integer>1</integer>
144 </map> 129 </map>
145 <key>ArrowKeysMoveAvatar</key> 130 <key>ArrowKeysMoveAvatar</key>
146 <map> 131 <map>
147 <key>Comment</key> 132 <key>Comment</key>
148 <string>While cursor is in chat entry box, arrow keys still control your avatar</string> 133 <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
149 <key>Persist</key> 134 <key>Persist</key>
150 <integer>1</integer> 135 <integer>1</integer>
151 <key>Type</key> 136 <key>Type</key>
152 <string>Boolean</string> 137 <string>Boolean</string>
153 <key>Value</key> 138 <key>Value</key>
154 <integer>1</integer> 139 <integer>1</integer>
155 </map> 140 </map>
156 <key>AskedAboutCrashReports</key> 141 <key>AskedAboutCrashReports</key>
157 <map> 142 <map>
158 <key>Comment</key> 143 <key>Comment</key>
159 <string>Turns off dialog asking if you want to enable crash reporting</string> 144 <string>Turns off dialog asking if you want to enable crash reporting</string>
160 <key>Persist</key> 145 <key>Persist</key>
161 <integer>1</integer> 146 <integer>1</integer>
162 <key>Type</key> 147 <key>Type</key>
163 <string>Boolean</string> 148 <string>Boolean</string>
164 <key>Value</key> 149 <key>Value</key>
165 <integer>0</integer> 150 <integer>0</integer>
166 </map> 151 </map>
167 <key>AsyncKeyboard</key> 152 <key>AsyncKeyboard</key>
168 <map> 153 <map>
169 <key>Comment</key> 154 <key>Comment</key>
170 <string>Improves responsiveness to keyboard input when at low framerates</string> 155 <string>Improves responsiveness to keyboard input when at low framerates</string>
171 <key>Persist</key> 156 <key>Persist</key>
172 <integer>1</integer> 157 <integer>1</integer>
173 <key>Type</key> 158 <key>Type</key>
174 <string>Boolean</string> 159 <string>Boolean</string>
175 <key>Value</key> 160 <key>Value</key>
176 <integer>1</integer> 161 <integer>1</integer>
177 </map> 162 </map>
178 <key>AuctionShowFence</key> 163 <key>AuctionShowFence</key>
179 <map> 164 <map>
180 <key>Comment</key> 165 <key>Comment</key>
181 <string>When auctioning land, include parcel boundary marker in snapshot</string> 166 <string>When auctioning land, include parcel boundary marker in snapshot</string>
182 <key>Persist</key> 167 <key>Persist</key>
183 <integer>1</integer> 168 <integer>1</integer>
184 <key>Type</key> 169 <key>Type</key>
185 <string>Boolean</string> 170 <string>Boolean</string>
186 <key>Value</key> 171 <key>Value</key>
187 <integer>1</integer> 172 <integer>1</integer>
188 </map> 173 </map>
189 <key>AudioLevelAmbient</key> 174 <key>AudioLevelAmbient</key>
190 <map> 175 <map>
191 <key>Comment</key> 176 <key>Comment</key>
192 <string>Audio level of environment sounds</string> 177 <string>Audio level of environment sounds</string>
193 <key>Persist</key> 178 <key>Persist</key>
194 <integer>1</integer> 179 <integer>1</integer>
195 <key>Type</key> 180 <key>Type</key>
196 <string>F32</string> 181 <string>F32</string>
197 <key>Value</key> 182 <key>Value</key>
198 <real>0.5</real> 183 <real>0.5</real>
199 </map> 184 </map>
200 <key>AudioLevelDistance</key> 185 <key>AudioLevelDistance</key>
201 <map> 186 <map>
202 <key>Comment</key> 187 <key>Comment</key>
203 <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string> 188 <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
204 <key>Persist</key> 189 <key>Persist</key>
205 <integer>1</integer> 190 <integer>1</integer>
206 <key>Type</key> 191 <key>Type</key>
207 <string>F32</string> 192 <string>F32</string>
208 <key>Value</key> 193 <key>Value</key>
209 <real>1</real> 194 <real>1.0</real>
210 </map> 195 </map>
211 <key>AudioLevelDoppler</key> 196 <key>AudioLevelDoppler</key>
212 <map> 197 <map>
213 <key>Comment</key> 198 <key>Comment</key>
214 <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string> 199 <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
215 <key>Persist</key> 200 <key>Persist</key>
216 <integer>1</integer> 201 <integer>1</integer>
217 <key>Type</key> 202 <key>Type</key>
218 <string>F32</string> 203 <string>F32</string>
219 <key>Value</key> 204 <key>Value</key>
220 <real>1</real> 205 <real>1.0</real>
221 </map> 206 </map>
222 <key>AudioLevelMaster</key> 207 <key>AudioLevelMaster</key>
223 <map> 208 <map>
224 <key>Comment</key> 209 <key>Comment</key>
225 <string>Master audio level, or overall volume</string> 210 <string>Master audio level, or overall volume</string>
226 <key>Persist</key> 211 <key>Persist</key>
227 <integer>1</integer> 212 <integer>1</integer>
228 <key>Type</key> 213 <key>Type</key>
229 <string>F32</string> 214 <string>F32</string>
230 <key>Value</key> 215 <key>Value</key>
231 <real>1</real> 216 <real>1.0</real>
232 </map> 217 </map>
233 <key>AudioLevelMedia</key> 218 <key>AudioLevelMedia</key>
234 <map> 219 <map>
235 <key>Comment</key> 220 <key>Comment</key>
236 <string>Audio level of Quicktime movies</string> 221 <string>Audio level of Quicktime movies</string>
237 <key>Persist</key> 222 <key>Persist</key>
238 <integer>1</integer> 223 <integer>1</integer>
239 <key>Type</key> 224 <key>Type</key>
240 <string>F32</string> 225 <string>F32</string>
241 <key>Value</key> 226 <key>Value</key>
242 <real>1</real> 227 <real>1.0</real>
243 </map> 228 </map>
244 <key>AudioLevelMic</key> 229 <key>AudioLevelMic</key>
245 <map> 230 <map>
246 <key>Comment</key> 231 <key>Comment</key>
247 <string>Audio level of microphone input</string> 232 <string>Audio level of microphone input</string>
248 <key>Persist</key> 233 <key>Persist</key>
249 <integer>1</integer> 234 <integer>1</integer>
250 <key>Type</key> 235 <key>Type</key>
251 <string>F32</string> 236 <string>F32</string>
252 <key>Value</key> 237 <key>Value</key>
253 <real>1</real> 238 <real>1.0</real>
254 </map> 239 </map>
255 <key>AudioLevelMusic</key> 240 <key>AudioLevelMusic</key>
256 <map> 241 <map>
257 <key>Comment</key> 242 <key>Comment</key>
258 <string>Audio level of streaming music</string> 243 <string>Audio level of streaming music</string>
259 <key>Persist</key> 244 <key>Persist</key>
260 <integer>1</integer> 245 <integer>1</integer>
261 <key>Type</key> 246 <key>Type</key>
262 <string>F32</string> 247 <string>F32</string>
263 <key>Value</key> 248 <key>Value</key>
264 <real>1</real> 249 <real>1.0</real>
265 </map> 250 </map>
266 <key>AudioLevelRolloff</key> 251 <key>AudioLevelRolloff</key>
267 <map> 252 <map>
268 <key>Comment</key> 253 <key>Comment</key>
269 <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string> 254 <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
270 <key>Persist</key> 255 <key>Persist</key>
271 <integer>1</integer> 256 <integer>1</integer>
272 <key>Type</key> 257 <key>Type</key>
273 <string>F32</string> 258 <string>F32</string>
274 <key>Value</key> 259 <key>Value</key>
275 <real>1</real> 260 <real>1.0</real>
276 </map> 261 </map>
277 <key>AudioLevelSFX</key> 262 <key>AudioLevelSFX</key>
278 <map> 263 <map>
279 <key>Comment</key> 264 <key>Comment</key>
280 <string>Audio level of in-world sound effects</string> 265 <string>Audio level of in-world sound effects</string>
281 <key>Persist</key> 266 <key>Persist</key>
282 <integer>1</integer> 267 <integer>1</integer>
283 <key>Type</key> 268 <key>Type</key>
284 <string>F32</string> 269 <string>F32</string>
285 <key>Value</key> 270 <key>Value</key>
286 <real>1</real> 271 <real>1.0</real>
287 </map> 272 </map>
288 <key>AudioLevelUI</key> 273 <key>AudioLevelUI</key>
289 <map> 274 <map>
290 <key>Comment</key> 275 <key>Comment</key>
291 <string>Audio level of UI sound effects</string> 276 <string>Audio level of UI sound effects</string>
292 <key>Persist</key> 277 <key>Persist</key>
293 <integer>1</integer> 278 <integer>1</integer>
294 <key>Type</key> 279 <key>Type</key>
295 <string>F32</string> 280 <string>F32</string>
296 <key>Value</key> 281 <key>Value</key>
297 <real>0.5</real> 282 <real>0.5</real>
298 </map> 283 </map>
299 <key>AudioLevelVoice</key> 284 <key>AudioLevelVoice</key>
300 <map> 285 <map>
301 <key>Comment</key> 286 <key>Comment</key>
302 <string>Audio level of voice chat</string> 287 <string>Audio level of voice chat</string>
303 <key>Persist</key> 288 <key>Persist</key>
304 <integer>1</integer> 289 <integer>1</integer>
305 <key>Type</key> 290 <key>Type</key>
306 <string>F32</string> 291 <string>F32</string>
307 <key>Value</key> 292 <key>Value</key>
308 <real>0.5</real> 293 <real>0.5</real>
309 </map> 294 </map>
310 <key>AudioStreamingMusic</key> 295 <key>AudioStreamingMusic</key>
311 <map> 296 <map>
312 <key>Comment</key> 297 <key>Comment</key>
313 <string>Enable streaming audio</string> 298 <string>Enable streaming audio</string>
314 <key>Persist</key> 299 <key>Persist</key>
315 <integer>1</integer> 300 <integer>1</integer>
316 <key>Type</key> 301 <key>Type</key>
317 <string>Boolean</string> 302 <string>Boolean</string>
318 <key>Value</key> 303 <key>Value</key>
319 <integer>0</integer> 304 <integer>0</integer>
320 </map> 305 </map>
321 <key>AudioStreamingVideo</key> 306 <key>AudioStreamingVideo</key>
322 <map> 307 <map>
323 <key>Comment</key> 308 <key>Comment</key>
324 <string>Enable streaming video</string> 309 <string>Enable streaming video</string>
325 <key>Persist</key> 310 <key>Persist</key>
326 <integer>1</integer> 311 <integer>1</integer>
327 <key>Type</key> 312 <key>Type</key>
328 <string>Boolean</string> 313 <string>Boolean</string>
329 <key>Value</key> 314 <key>Value</key>
330 <integer>0</integer> 315 <integer>0</integer>
331 </map> 316 </map>
332 <key>AutoAcceptNewInventory</key> 317 <key>AutoAcceptNewInventory</key>
333 <map> 318 <map>
334 <key>Comment</key> 319 <key>Comment</key>
335 <string>Automatically accept new notecards/textures/landmarks</string> 320 <string>Automatically accept new notecards/textures/landmarks</string>
336 <key>Persist</key> 321 <key>Persist</key>
337 <integer>1</integer> 322 <integer>1</integer>
338 <key>Type</key> 323 <key>Type</key>
339 <string>Boolean</string> 324 <string>Boolean</string>
340 <key>Value</key> 325 <key>Value</key>
341 <integer>0</integer> 326 <integer>0</integer>
342 </map> 327 </map>
328 <key>AutoLeveling</key>
329 <map>
330 <key>Comment</key>
331 <string>Keep Flycam level.</string>
332 <key>Persist</key>
333 <integer>1</integer>
334 <key>Type</key>
335 <string>Boolean</string>
336 <key>Value</key>
337 <integer>1</integer>
338 </map>
343 <key>AutoLoadWebProfiles</key> 339 <key>AutoLoadWebProfiles</key>
344 <map> 340 <map>
345 <key>Comment</key> 341 <key>Comment</key>
346 <string>Automatically load ALL profile webpages without asking first.</string> 342 <string>Automatically load ALL profile webpages without asking first.</string>
347 <key>Persist</key> 343 <key>Persist</key>
348 <integer>1</integer> 344 <integer>1</integer>
349 <key>Type</key> 345 <key>Type</key>
350 <string>Boolean</string> 346 <string>Boolean</string>
351 <key>Value</key> 347 <key>Value</key>
352 <integer>0</integer> 348 <integer>0</integer>
353 </map> 349 </map>
354 <key>AutoLogin</key> 350 <key>AutoLogin</key>
355 <map> 351 <map>
356 <key>Comment</key> 352 <key>Comment</key>
357 <string>Login automatically using last username/password combination</string> 353 <string>Login automatically using last username/password combination</string>
358 <key>Persist</key> 354 <key>Persist</key>
359 <integer>1</integer> 355 <integer>0</integer>
360 <key>Type</key> 356 <key>Type</key>
361 <string>Boolean</string> 357 <string>Boolean</string>
362 <key>Value</key> 358 <key>Value</key>
363 <integer>0</integer> 359 <integer>0</integer>
364 </map> 360 </map>
365 <key>AutoMimeDiscovery</key> 361 <key>AutoMimeDiscovery</key>
366 <map> 362 <map>
367 <key>Comment</key> 363 <key>Comment</key>
368 <string>Enable viewer mime type discovery of media URLs</string> 364 <string>Enable viewer mime type discovery of media URLs</string>
369 <key>Persist</key> 365 <key>Persist</key>
370 <integer>1</integer> 366 <integer>1</integer>
371 <key>Type</key> 367 <key>Type</key>
372 <string>Boolean</string> 368 <string>Boolean</string>
373 <key>Value</key> 369 <key>Value</key>
374 <integer>0</integer> 370 <integer>0</integer>
375 </map> 371 </map>
376 <key>AutoPilotLocksCamera</key> 372 <key>AutoPilotLocksCamera</key>
377 <map> 373 <map>
378 <key>Comment</key> 374 <key>Comment</key>
379 <string>Keep camera position locked when avatar walks to selected position</string> 375 <string>Keep camera position locked when avatar walks to selected position</string>
380 <key>Persist</key> 376 <key>Persist</key>
381 <integer>1</integer> 377 <integer>1</integer>
382 <key>Type</key> 378 <key>Type</key>
383 <string>Boolean</string> 379 <string>Boolean</string>
384 <key>Value</key> 380 <key>Value</key>
385 <integer>0</integer> 381 <integer>0</integer>
386 </map> 382 </map>
387 <key>AutoSnapshot</key> 383 <key>AutoSnapshot</key>
388 <map> 384 <map>
389 <key>Comment</key> 385 <key>Comment</key>
390 <string>Update snapshot when camera stops moving, or any parameter changes</string> 386 <string>Update snapshot when camera stops moving, or any parameter changes</string>
391 <key>Persist</key> 387 <key>Persist</key>
392 <integer>1</integer> 388 <integer>1</integer>
393 <key>Type</key> 389 <key>Type</key>
394 <string>Boolean</string> 390 <string>Boolean</string>
395 <key>Value</key> 391 <key>Value</key>
396 <integer>0</integer> 392 <integer>0</integer>
397 </map> 393 </map>
398 <key>AutomaticFly</key> 394 <key>AutomaticFly</key>
399 <map> 395 <map>
400 <key>Comment</key> 396 <key>Comment</key>
401 <string>Fly by holding jump key or using &quot;Fly&quot; command (FALSE = fly by using &quot;Fly&quot; command only)</string> 397 <string>Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only)</string>
402 <key>Persist</key> 398 <key>Persist</key>
403 <integer>1</integer> 399 <integer>1</integer>
404 <key>Type</key> 400 <key>Type</key>
405 <string>Boolean</string> 401 <string>Boolean</string>
406 <key>Value</key> 402 <key>Value</key>
407 <integer>1</integer> 403 <integer>1</integer>
408 </map> 404 </map>
405 <key>AvatarAxisDeadZone0</key>
406 <map>
407 <key>Comment</key>
408 <string>Avatar axis 0 dead zone.</string>
409 <key>Persist</key>
410 <integer>1</integer>
411 <key>Type</key>
412 <string>F32</string>
413 <key>Value</key>
414 <real>0.1</real>
415 </map>
416 <key>AvatarAxisDeadZone1</key>
417 <map>
418 <key>Comment</key>
419 <string>Avatar axis 1 dead zone.</string>
420 <key>Persist</key>
421 <integer>1</integer>
422 <key>Type</key>
423 <string>F32</string>
424 <key>Value</key>
425 <real>0.1</real>
426 </map>
427 <key>AvatarAxisDeadZone2</key>
428 <map>
429 <key>Comment</key>
430 <string>Avatar axis 2 dead zone.</string>
431 <key>Persist</key>
432 <integer>1</integer>
433 <key>Type</key>
434 <string>F32</string>
435 <key>Value</key>
436 <real>0.1</real>
437 </map>
438 <key>AvatarAxisDeadZone3</key>
439 <map>
440 <key>Comment</key>
441 <string>Avatar axis 3 dead zone.</string>
442 <key>Persist</key>
443 <integer>1</integer>
444 <key>Type</key>
445 <string>F32</string>
446 <key>Value</key>
447 <real>0.1</real>
448 </map>
449 <key>AvatarAxisDeadZone4</key>
450 <map>
451 <key>Comment</key>
452 <string>Avatar axis 4 dead zone.</string>
453 <key>Persist</key>
454 <integer>1</integer>
455 <key>Type</key>
456 <string>F32</string>
457 <key>Value</key>
458 <real>0.1</real>
459 </map>
460 <key>AvatarAxisDeadZone5</key>
461 <map>
462 <key>Comment</key>
463 <string>Avatar axis 5 dead zone.</string>
464 <key>Persist</key>
465 <integer>1</integer>
466 <key>Type</key>
467 <string>F32</string>
468 <key>Value</key>
469 <real>0.1</real>
470 </map>
471 <key>AvatarAxisScale0</key>
472 <map>
473 <key>Comment</key>
474 <string>Avatar axis 0 scaler.</string>
475 <key>Persist</key>
476 <integer>1</integer>
477 <key>Type</key>
478 <string>F32</string>
479 <key>Value</key>
480 <real>1.0</real>
481 </map>
482 <key>AvatarAxisScale1</key>
483 <map>
484 <key>Comment</key>
485 <string>Avatar axis 1 scaler.</string>
486 <key>Persist</key>
487 <integer>1</integer>
488 <key>Type</key>
489 <string>F32</string>
490 <key>Value</key>
491 <real>1.0</real>
492 </map>
493 <key>AvatarAxisScale2</key>
494 <map>
495 <key>Comment</key>
496 <string>Avatar axis 2 scaler.</string>
497 <key>Persist</key>
498 <integer>1</integer>
499 <key>Type</key>
500 <string>F32</string>
501 <key>Value</key>
502 <real>1.0</real>
503 </map>
504 <key>AvatarAxisScale3</key>
505 <map>
506 <key>Comment</key>
507 <string>Avatar axis 3 scaler.</string>
508 <key>Persist</key>
509 <integer>1</integer>
510 <key>Type</key>
511 <string>F32</string>
512 <key>Value</key>
513 <real>1.0</real>
514 </map>
515 <key>AvatarAxisScale4</key>
516 <map>
517 <key>Comment</key>
518 <string>Avatar axis 4 scaler.</string>
519 <key>Persist</key>
520 <integer>1</integer>
521 <key>Type</key>
522 <string>F32</string>
523 <key>Value</key>
524 <real>1.0</real>
525 </map>
526 <key>AvatarAxisScale5</key>
527 <map>
528 <key>Comment</key>
529 <string>Avatar axis 5 scaler.</string>
530 <key>Persist</key>
531 <integer>1</integer>
532 <key>Type</key>
533 <string>F32</string>
534 <key>Value</key>
535 <real>1.0</real>
536 </map>
409 <key>AvatarBacklight</key> 537 <key>AvatarBacklight</key>
410 <map> 538 <map>
411 <key>Comment</key> 539 <key>Comment</key>
412 <string>Add rim lighting to avatar rendering to approximate shininess of skin</string> 540 <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
413 <key>Persist</key> 541 <key>Persist</key>
414 <integer>1</integer> 542 <integer>1</integer>
415 <key>Type</key> 543 <key>Type</key>
416 <string>Boolean</string> 544 <string>Boolean</string>
417 <key>Value</key> 545 <key>Value</key>
418 <integer>1</integer> 546 <integer>1</integer>
419 </map> 547 </map>
420 <key>AvatarCompositeLimit</key> 548 <key>AvatarCompositeLimit</key>
421 <map> 549 <map>
422 <key>Comment</key> 550 <key>Comment</key>
423 <string>Maximum number of avatars to display appearance changes on the fly</string> 551 <string>Maximum number of avatars to display appearance changes on the fly</string>
424 <key>Persist</key> 552 <key>Persist</key>
425 <integer>1</integer> 553 <integer>1</integer>
426 <key>Type</key> 554 <key>Type</key>
427 <string>S32</string> 555 <string>S32</string>
428 <key>Value</key> 556 <key>Value</key>
429 <integer>5</integer> 557 <integer>5</integer>
430 </map> 558 </map>
559 <key>AvatarFeathering</key>
560 <map>
561 <key>Comment</key>
562 <string>Avatar feathering (less is softer)</string>
563 <key>Persist</key>
564 <integer>1</integer>
565 <key>Type</key>
566 <string>F32</string>
567 <key>Value</key>
568 <real>16.0</real>
569 </map>
431 <key>AvatarPickerSortOrder</key> 570 <key>AvatarPickerSortOrder</key>
432 <map> 571 <map>
433 <key>Comment</key> 572 <key>Comment</key>
434 <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 573 <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
435 <key>Persist</key> 574 <key>Persist</key>
436 <integer>1</integer> 575 <integer>1</integer>
437 <key>Type</key> 576 <key>Type</key>
438 <string>U32</string> 577 <string>U32</string>
439 <key>Value</key> 578 <key>Value</key>
440 <integer>2</integer> 579 <integer>2</integer>
441 </map> 580 </map>
442 <key>AvatarSex</key> 581 <key>AvatarSex</key>
443 <map> 582 <map>
444 <key>Comment</key> 583 <key>Comment</key>
445 <string /> 584 <string />
446 <key>Persist</key> 585 <key>Persist</key>
447 <integer>0</integer> 586 <integer>0</integer>
448 <key>Type</key> 587 <key>Type</key>
449 <string>U32</string> 588 <string>U32</string>
450 <key>Value</key> 589 <key>Value</key>
451 <integer>0</integer> 590 <integer>0</integer>
452 </map> 591 </map>
453 <key>BackgroundChatColor</key> 592 <key>BackgroundChatColor</key>
454 <map> 593 <map>
455 <key>Comment</key> 594 <key>Comment</key>
456 <string>Color of chat bubble background</string> 595 <string>Color of chat bubble background</string>
457 <key>Persist</key> 596 <key>Persist</key>
458 <integer>1</integer> 597 <integer>1</integer>
459 <key>Type</key> 598 <key>Type</key>
460 <string>Color4</string> 599 <string>Color4</string>
461 <key>Value</key> 600 <key>Value</key>
462 <array> 601 <array>
463 <real>0</real> 602 <real>0.0</real>
464 <real>0</real> 603 <real>0.0</real>
465 <real>0</real> 604 <real>0.0</real>
466 <real>1</real> 605 <real>1.0</real>
467 </array> 606 </array>
468 </map> 607 </map>
469 <key>BackgroundYieldTime</key> 608 <key>BackgroundYieldTime</key>
470 <map> 609 <map>
471 <key>Comment</key> 610 <key>Comment</key>
472 <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string> 611 <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
473 <key>Persist</key> 612 <key>Persist</key>
474 <integer>1</integer> 613 <integer>1</integer>
475 <key>Type</key> 614 <key>Type</key>
476 <string>S32</string> 615 <string>S32</string>
477 <key>Value</key> 616 <key>Value</key>
478 <integer>40</integer> 617 <integer>40</integer>
479 </map> 618 </map>
480 <key>BackwardBtnRect</key> 619 <key>BackwardBtnRect</key>
481 <map> 620 <map>
482 <key>Comment</key> 621 <key>Comment</key>
483 <string /> 622 <string />
484 <key>Persist</key> 623 <key>Persist</key>
485 <integer>0</integer> 624 <integer>0</integer>
486 <key>Type</key> 625 <key>Type</key>
487 <string>Rect</string> 626 <string>Rect</string>
488 <key>Value</key> 627 <key>Value</key>
489 <array> 628 <array>
490 <integer>45</integer> 629 <integer>45</integer>
491 <integer>29</integer> 630 <integer>29</integer>
492 <integer>66</integer> 631 <integer>66</integer>
493 <integer>4</integer> 632 <integer>4</integer>
494 </array> 633 </array>
495 </map> 634 </map>
496 <key>BasicHelpRect</key> 635 <key>BasicHelpRect</key>
497 <map> 636 <map>
498 <key>Comment</key> 637 <key>Comment</key>
499 <string>Rectangle for help window</string> 638 <string>Rectangle for help window</string>
500 <key>Persist</key> 639 <key>Persist</key>
501 <integer>1</integer> 640 <integer>1</integer>
502 <key>Type</key> 641 <key>Type</key>
503 <string>Rect</string> 642 <string>Rect</string>
504 <key>Value</key> 643 <key>Value</key>
505 <array> 644 <array>
506 <integer>0</integer> 645 <integer>0</integer>
507 <integer>404</integer> 646 <integer>404</integer>
508 <integer>467</integer> 647 <integer>467</integer>
509 <integer>0</integer> 648 <integer>0</integer>
510 </array> 649 </array>
511 </map> 650 </map>
512 <key>BeaconAlwaysOn</key> 651 <key>BeaconAlwaysOn</key>
513 <map> 652 <map>
514 <key>Comment</key> 653 <key>Comment</key>
515 <string>Beacons / highlighting always on</string> 654 <string>Beacons / highlighting always on</string>
516 <key>Persist</key> 655 <key>Persist</key>
517 <integer>1</integer> 656 <integer>1</integer>
518 <key>Type</key> 657 <key>Type</key>
519 <string>Boolean</string> 658 <string>Boolean</string>
520 <key>Value</key> 659 <key>Value</key>
521 <integer>0</integer> 660 <integer>0</integer>
522 </map> 661 </map>
523 <key>BrowserHomePage</key> 662 <key>BrowserHomePage</key>
524 <map> 663 <map>
525 <key>Comment</key> 664 <key>Comment</key>
526 <string>[NOT USED]</string> 665 <string>[NOT USED]</string>
527 <key>Persist</key> 666 <key>Persist</key>
528 <integer>1</integer> 667 <integer>1</integer>
529 <key>Type</key> 668 <key>Type</key>
530 <string>String</string> 669 <string>String</string>
531 <key>Value</key> 670 <key>Value</key>
532 <string>http://www.secondlife.com</string> 671 <string>http://www.secondlife.com</string>
533 </map> 672 </map>
534 <key>BrowserProxyAddress</key> 673 <key>BrowserProxyAddress</key>
535 <map> 674 <map>
536 <key>Comment</key> 675 <key>Comment</key>
537 <string>Address for the Web Proxy]</string> 676 <string>Address for the Web Proxy]</string>
538 <key>Persist</key> 677 <key>Persist</key>
539 <integer>1</integer> 678 <integer>1</integer>
540 <key>Type</key> 679 <key>Type</key>
541 <string>String</string> 680 <string>String</string>
542 <key>Value</key> 681 <key>Value</key>
543 <string /> 682 <string />
544 </map> 683 </map>
545 <key>BrowserProxyEnabled</key> 684 <key>BrowserProxyEnabled</key>
546 <map> 685 <map>
547 <key>Comment</key> 686 <key>Comment</key>
548 <string>Use Web Proxy</string> 687 <string>Use Web Proxy</string>
549 <key>Persist</key> 688 <key>Persist</key>
550 <integer>1</integer> 689 <integer>1</integer>
551 <key>Type</key> 690 <key>Type</key>
552 <string>Boolean</string> 691 <string>Boolean</string>
553 <key>Value</key> 692 <key>Value</key>
554 <integer>0</integer> 693 <integer>0</integer>
555 </map> 694 </map>
556 <key>BrowserProxyExclusions</key> 695 <key>BrowserProxyExclusions</key>
557 <map> 696 <map>
558 <key>Comment</key> 697 <key>Comment</key>
559 <string>[NOT USED]</string> 698 <string>[NOT USED]</string>
560 <key>Persist</key> 699 <key>Persist</key>
561 <integer>1</integer> 700 <integer>1</integer>
562 <key>Type</key> 701 <key>Type</key>
563 <string>String</string> 702 <string>String</string>
564 <key>Value</key> 703 <key>Value</key>
565 <string /> 704 <string />
566 </map> 705 </map>
567 <key>BrowserProxyPort</key> 706 <key>BrowserProxyPort</key>
568 <map> 707 <map>
569 <key>Comment</key> 708 <key>Comment</key>
570 <string>Port for Web Proxy</string> 709 <string>Port for Web Proxy</string>
571 <key>Persist</key> 710 <key>Persist</key>
572 <integer>1</integer> 711 <integer>1</integer>
573 <key>Type</key> 712 <key>Type</key>
574 <string>S32</string> 713 <string>S32</string>
575 <key>Value</key> 714 <key>Value</key>
576 <integer>3128</integer> 715 <integer>3128</integer>
577 </map> 716 </map>
578 <key>BrowserProxySocks45</key> 717 <key>BrowserProxySocks45</key>
579 <map> 718 <map>
580 <key>Comment</key> 719 <key>Comment</key>
581 <string>[NOT USED]</string> 720 <string>[NOT USED]</string>
582 <key>Persist</key> 721 <key>Persist</key>
583 <integer>1</integer> 722 <integer>1</integer>
584 <key>Type</key> 723 <key>Type</key>
585 <string>S32</string> 724 <string>S32</string>
586 <key>Value</key> 725 <key>Value</key>
587 <integer>5</integer> 726 <integer>5</integer>
588 </map> 727 </map>
728 <key>BuildAxisDeadZone0</key>
729 <map>
730 <key>Comment</key>
731 <string>Build axis 0 dead zone.</string>
732 <key>Persist</key>
733 <integer>1</integer>
734 <key>Type</key>
735 <string>F32</string>
736 <key>Value</key>
737 <real>0.1</real>
738 </map>
739 <key>BuildAxisDeadZone1</key>
740 <map>
741 <key>Comment</key>
742 <string>Build axis 1 dead zone.</string>
743 <key>Persist</key>
744 <integer>1</integer>
745 <key>Type</key>
746 <string>F32</string>
747 <key>Value</key>
748 <real>0.1</real>
749 </map>
750 <key>BuildAxisDeadZone2</key>
751 <map>
752 <key>Comment</key>
753 <string>Build axis 2 dead zone.</string>
754 <key>Persist</key>
755 <integer>1</integer>
756 <key>Type</key>
757 <string>F32</string>
758 <key>Value</key>
759 <real>0.1</real>
760 </map>
761 <key>BuildAxisDeadZone3</key>
762 <map>
763 <key>Comment</key>
764 <string>Build axis 3 dead zone.</string>
765 <key>Persist</key>
766 <integer>1</integer>
767 <key>Type</key>
768 <string>F32</string>
769 <key>Value</key>
770 <real>0.1</real>
771 </map>
772 <key>BuildAxisDeadZone4</key>
773 <map>
774 <key>Comment</key>
775 <string>Build axis 4 dead zone.</string>
776 <key>Persist</key>
777 <integer>1</integer>
778 <key>Type</key>
779 <string>F32</string>
780 <key>Value</key>
781 <real>0.1</real>
782 </map>
783 <key>BuildAxisDeadZone5</key>
784 <map>
785 <key>Comment</key>
786 <string>Build axis 5 dead zone.</string>
787 <key>Persist</key>
788 <integer>1</integer>
789 <key>Type</key>
790 <string>F32</string>
791 <key>Value</key>
792 <real>0.1</real>
793 </map>
794 <key>BuildAxisScale0</key>
795 <map>
796 <key>Comment</key>
797 <string>Build axis 0 scaler.</string>
798 <key>Persist</key>
799 <integer>1</integer>
800 <key>Type</key>
801 <string>F32</string>
802 <key>Value</key>
803 <real>1.0</real>
804 </map>
805 <key>BuildAxisScale1</key>
806 <map>
807 <key>Comment</key>
808 <string>Build axis 1 scaler.</string>
809 <key>Persist</key>
810 <integer>1</integer>
811 <key>Type</key>
812 <string>F32</string>
813 <key>Value</key>
814 <real>1.0</real>
815 </map>
816 <key>BuildAxisScale2</key>
817 <map>
818 <key>Comment</key>
819 <string>Build axis 2 scaler.</string>
820 <key>Persist</key>
821 <integer>1</integer>
822 <key>Type</key>
823 <string>F32</string>
824 <key>Value</key>
825 <real>1.0</real>
826 </map>
827 <key>BuildAxisScale3</key>
828 <map>
829 <key>Comment</key>
830 <string>Build axis 3 scaler.</string>
831 <key>Persist</key>
832 <integer>1</integer>
833 <key>Type</key>
834 <string>F32</string>
835 <key>Value</key>
836 <real>1.0</real>
837 </map>
838 <key>BuildAxisScale4</key>
839 <map>
840 <key>Comment</key>
841 <string>Build axis 4 scaler.</string>
842 <key>Persist</key>
843 <integer>1</integer>
844 <key>Type</key>
845 <string>F32</string>
846 <key>Value</key>
847 <real>1.0</real>
848 </map>
849 <key>BuildAxisScale5</key>
850 <map>
851 <key>Comment</key>
852 <string>Build axis 5 scaler.</string>
853 <key>Persist</key>
854 <integer>1</integer>
855 <key>Type</key>
856 <string>F32</string>
857 <key>Value</key>
858 <real>1.0</real>
859 </map>
589 <key>BuildBtnState</key> 860 <key>BuildBtnState</key>
590 <map> 861 <map>
591 <key>Comment</key> 862 <key>Comment</key>
592 <string /> 863 <string />
593 <key>Persist</key> 864 <key>Persist</key>
594 <integer>0</integer> 865 <integer>0</integer>
595 <key>Type</key> 866 <key>Type</key>
596 <string>Boolean</string> 867 <string>Boolean</string>
597 <key>Value</key> 868 <key>Value</key>
598 <integer>0</integer> 869 <integer>0</integer>
599 </map> 870 </map>
871 <key>BuildFeathering</key>
872 <map>
873 <key>Comment</key>
874 <string>Build feathering (less is softer)</string>
875 <key>Persist</key>
876 <integer>1</integer>
877 <key>Type</key>
878 <string>F32</string>
879 <key>Value</key>
880 <real>16.0</real>
881 </map>
600 <key>ButtonFlashCount</key> 882 <key>ButtonFlashCount</key>
601 <map> 883 <map>
602 <key>Comment</key> 884 <key>Comment</key>
603 <string>Number of flashes after which flashing buttons stay lit up</string> 885 <string>Number of flashes after which flashing buttons stay lit up</string>
604 <key>Persist</key> 886 <key>Persist</key>
605 <integer>1</integer> 887 <integer>1</integer>
606 <key>Type</key> 888 <key>Type</key>
607 <string>S32</string> 889 <string>S32</string>
608 <key>Value</key> 890 <key>Value</key>
609 <integer>3</integer> 891 <integer>3</integer>
610 </map> 892 </map>
611 <key>ButtonFlashRate</key> 893 <key>ButtonFlashRate</key>
612 <map> 894 <map>
613 <key>Comment</key> 895 <key>Comment</key>
614 <string>Frequency at which buttons flash (hz)</string> 896 <string>Frequency at which buttons flash (hz)</string>
615 <key>Persist</key> 897 <key>Persist</key>
616 <integer>1</integer> 898 <integer>1</integer>
617 <key>Type</key> 899 <key>Type</key>
618 <string>F32</string> 900 <string>F32</string>
619 <key>Value</key> 901 <key>Value</key>
620 <real>2</real> 902 <real>2.0</real>
621 </map> 903 </map>
622 <key>ButtonHPad</key> 904 <key>ButtonHPad</key>
623 <map> 905 <map>
624 <key>Comment</key> 906 <key>Comment</key>
625 <string>Default horizontal spacing between buttons (pixels)</string> 907 <string>Default horizontal spacing between buttons (pixels)</string>
626 <key>Persist</key> 908 <key>Persist</key>
627 <integer>1</integer> 909 <integer>1</integer>
628 <key>Type</key> 910 <key>Type</key>
629 <string>S32</string> 911 <string>S32</string>
630 <key>Value</key> 912 <key>Value</key>
631 <integer>10</integer> 913 <integer>10</integer>
632 </map> 914 </map>
633 <key>ButtonHeight</key> 915 <key>ButtonHeight</key>
634 <map> 916 <map>
635 <key>Comment</key> 917 <key>Comment</key>
636 <string>Default height for normal buttons (pixels)</string> 918 <string>Default height for normal buttons (pixels)</string>
637 <key>Persist</key> 919 <key>Persist</key>
638 <integer>1</integer> 920 <integer>1</integer>
639 <key>Type</key> 921 <key>Type</key>
640 <string>S32</string> 922 <string>S32</string>
641 <key>Value</key> 923 <key>Value</key>
642 <integer>20</integer> 924 <integer>20</integer>
643 </map> 925 </map>
644 <key>ButtonHeightSmall</key> 926 <key>ButtonHeightSmall</key>
645 <map> 927 <map>
646 <key>Comment</key> 928 <key>Comment</key>
647 <string>Default height for small buttons (pixels)</string> 929 <string>Default height for small buttons (pixels)</string>
648 <key>Persist</key> 930 <key>Persist</key>
649 <integer>1</integer> 931 <integer>1</integer>
650 <key>Type</key> 932 <key>Type</key>
651 <string>S32</string> 933 <string>S32</string>
652 <key>Value</key> 934 <key>Value</key>
653 <integer>16</integer> 935 <integer>16</integer>
654 </map> 936 </map>
655 <key>ButtonVPad</key> 937 <key>ButtonVPad</key>
656 <map> 938 <map>
657 <key>Comment</key> 939 <key>Comment</key>
658 <string>Default vertical spacing between buttons (pixels)</string> 940 <string>Default vertical spacing between buttons (pixels)</string>
659 <key>Persist</key> 941 <key>Persist</key>
660 <integer>1</integer> 942 <integer>1</integer>
661 <key>Type</key> 943 <key>Type</key>
662 <string>S32</string> 944 <string>S32</string>
663 <key>Value</key> 945 <key>Value</key>
664 <integer>1</integer> 946 <integer>1</integer>
665 </map> 947 </map>
666 <key>CacheLocation</key> 948 <key>CacheLocation</key>
667 <map> 949 <map>
668 <key>Comment</key> 950 <key>Comment</key>
669 <string>Controls the location of the local disk cache</string> 951 <string>Controls the location of the local disk cache</string>
670 <key>Persist</key> 952 <key>Persist</key>
671 <integer>1</integer> 953 <integer>1</integer>
672 <key>Type</key> 954 <key>Type</key>
673 <string>String</string> 955 <string>String</string>
674 <key>Value</key> 956 <key>Value</key>
675 <string /> 957 <string />
676 </map> 958 </map>
677 <key>CacheSize</key> 959 <key>CacheSize</key>
678 <map> 960 <map>
679 <key>Comment</key> 961 <key>Comment</key>
680 <string>Controls amount of hard drive space reserved for local file caching in MB</string> 962 <string>Controls amount of hard drive space reserved for local file caching in MB</string>
681 <key>Persist</key> 963 <key>Persist</key>
682 <integer>1</integer> 964 <integer>1</integer>
683 <key>Type</key> 965 <key>Type</key>
684 <string>U32</string> 966 <string>U32</string>
685 <key>Value</key> 967 <key>Value</key>
686 <integer>500</integer> 968 <integer>500</integer>
687 </map> 969 </map>
688 <key>CacheValidateCounter</key> 970 <key>CacheValidateCounter</key>
689 <map> 971 <map>
690 <key>Comment</key> 972 <key>Comment</key>
691 <string>Used to distribute cache validation</string> 973 <string>Used to distribute cache validation</string>
692 <key>Persist</key> 974 <key>Persist</key>
693 <integer>1</integer> 975 <integer>1</integer>
694 <key>Type</key> 976 <key>Type</key>
695 <string>U32</string> 977 <string>U32</string>
696 <key>Value</key> 978 <key>Value</key>
697 <integer>0</integer> 979 <integer>0</integer>
698 </map> 980 </map>
981 <key>CameraMouseWheelZoom</key>
982 <map>
983 <key>Comment</key>
984 <string>Camera zooms in and out with mousewheel</string>
985 <key>Persist</key>
986 <integer>1</integer>
987 <key>Type</key>
988 <string>Boolean</string>
989 <key>Value</key>
990 <integer>1</integer>
991 </map>
699 <key>CameraOffset</key> 992 <key>CameraOffset</key>
700 <map> 993 <map>
701 <key>Comment</key> 994 <key>Comment</key>
702 <string>Render with camera offset from view frustum (rendering debug)</string> 995 <string>Render with camera offset from view frustum (rendering debug)</string>
703 <key>Persist</key> 996 <key>Persist</key>
704 <integer>1</integer> 997 <integer>1</integer>
705 <key>Type</key> 998 <key>Type</key>
706 <string>Boolean</string> 999 <string>Boolean</string>
707 <key>Value</key> 1000 <key>Value</key>
708 <integer>0</integer> 1001 <integer>0</integer>
709 </map> 1002 </map>
710 <key>CameraOffsetBuild</key> 1003 <key>CameraOffsetBuild</key>
711 <map> 1004 <map>
712 <key>Comment</key> 1005 <key>Comment</key>
713 <string>Default camera position relative to focus point when entering build mode</string> 1006 <string>Default camera position relative to focus point when entering build mode</string>
714 <key>Persist</key> 1007 <key>Persist</key>
715 <integer>1</integer> 1008 <integer>1</integer>
716 <key>Type</key> 1009 <key>Type</key>
717 <string>Vector3</string> 1010 <string>Vector3</string>
718 <key>Value</key> 1011 <key>Value</key>
719 <array> 1012 <array>
720 <real>-6</real> 1013 <real>-6.0</real>
721 <real>0</real> 1014 <real>0.0</real>
722 <real>6</real> 1015 <real>6.0</real>
723 </array> 1016 </array>
724 </map> 1017 </map>
725 <key>CameraOffsetDefault</key> 1018 <key>CameraOffsetDefault</key>
726 <map> 1019 <map>
727 <key>Comment</key> 1020 <key>Comment</key>
728 <string>Default camera offset from avatar</string> 1021 <string>Default camera offset from avatar</string>
729 <key>Persist</key> 1022 <key>Persist</key>
730 <integer>1</integer> 1023 <integer>1</integer>
731 <key>Type</key> 1024 <key>Type</key>
732 <string>Vector3</string> 1025 <string>Vector3</string>
733 <key>Value</key> 1026 <key>Value</key>
734 <array> 1027 <array>
735 <real>-3</real> 1028 <real>-3.0</real>
736 <real>0</real> 1029 <real>0.0</real>
737 <real>0.75</real> 1030 <real>0.75</real>
738 </array> 1031 </array>
739 </map> 1032 </map>
740 <key>CameraPositionSmoothing</key>
741 <map>
742 <key>Comment</key>
743 <string>Smooths camera position over time</string>
744 <key>Persist</key>
745 <integer>1</integer>
746 <key>Type</key>
747 <string>F32</string>
748 <key>Value</key>
749 <real>1.0</real>
750 </map>
751 <key>CameraPosOnLogout</key> 1033 <key>CameraPosOnLogout</key>
752 <map> 1034 <map>
753 <key>Comment</key> 1035 <key>Comment</key>
754 <string>Camera position when last logged out (global coordinates)</string> 1036 <string>Camera position when last logged out (global coordinates)</string>
755 <key>Persist</key> 1037 <key>Persist</key>
756 <integer>1</integer> 1038 <integer>1</integer>
757 <key>Type</key> 1039 <key>Type</key>
758 <string>Vector3D</string> 1040 <string>Vector3D</string>
759 <key>Value</key> 1041 <key>Value</key>
760 <array> 1042 <array>
761 <real>0</real> 1043 <real>0.0</real>
762 <real>0</real> 1044 <real>0.0</real>
763 <real>0</real> 1045 <real>0.0</real>
764 </array> 1046 </array>
765 </map> 1047 </map>
766 <key>CameraMouseWheelZoom</key> 1048 <key>CameraPositionSmoothing</key>
767 <map> 1049 <map>
768 <key>Comment</key> 1050 <key>Comment</key>
769 <string>Camera zooms in and out with mousewheel</string> 1051 <string>Smooths camera position over time</string>
770 <key>Persist</key> 1052 <key>Persist</key>
771 <integer>1</integer> 1053 <integer>1</integer>
772 <key>Type</key> 1054 <key>Type</key>
773 <string>Boolean</string> 1055 <string>F32</string>
774 <key>Value</key> 1056 <key>Value</key>
775 <integer>1</integer> 1057 <real>1.0</real>
776 </map> 1058 </map>
777 <key>ChatBarStealsFocus</key> 1059 <key>ChatBarStealsFocus</key>
778 <map> 1060 <map>
779 <key>Comment</key> 1061 <key>Comment</key>
780 <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string> 1062 <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
781 <key>Persist</key> 1063 <key>Persist</key>
782 <integer>1</integer> 1064 <integer>1</integer>
783 <key>Type</key> 1065 <key>Type</key>
784 <string>Boolean</string> 1066 <string>Boolean</string>
785 <key>Value</key> 1067 <key>Value</key>
786 <integer>1</integer> 1068 <integer>1</integer>
787 </map> 1069 </map>
788 <key>ChatBubbleOpacity</key> 1070 <key>ChatBubbleOpacity</key>
789 <map> 1071 <map>
790 <key>Comment</key> 1072 <key>Comment</key>
791 <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string> 1073 <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
792 <key>Persist</key> 1074 <key>Persist</key>
793 <integer>1</integer> 1075 <integer>1</integer>
794 <key>Type</key> 1076 <key>Type</key>
795 <string>F32</string> 1077 <string>F32</string>
796 <key>Value</key> 1078 <key>Value</key>
797 <real>0.5</real> 1079 <real>0.5</real>
798 </map> 1080 </map>
799 <key>ChatFontSize</key> 1081 <key>ChatFontSize</key>
800 <map> 1082 <map>
801 <key>Comment</key> 1083 <key>Comment</key>
802 <string>Size of chat text in chat console (0 = small, 1 = big)</string> 1084 <string>Size of chat text in chat console (0 = small, 1 = big)</string>
803 <key>Persist</key> 1085 <key>Persist</key>
804 <integer>1</integer> 1086 <integer>1</integer>
805 <key>Type</key> 1087 <key>Type</key>
806 <string>S32</string> 1088 <string>S32</string>
807 <key>Value</key> 1089 <key>Value</key>
808 <integer>1</integer> 1090 <integer>1</integer>
809 </map> 1091 </map>
810 <key>ChatFullWidth</key> 1092 <key>ChatFullWidth</key>
811 <map> 1093 <map>
812 <key>Comment</key> 1094 <key>Comment</key>
813 <string>Chat console takes up full width of SL window</string> 1095 <string>Chat console takes up full width of SL window</string>
814 <key>Persist</key> 1096 <key>Persist</key>
815 <integer>1</integer> 1097 <integer>1</integer>
816 <key>Type</key> 1098 <key>Type</key>
817 <string>Boolean</string> 1099 <string>Boolean</string>
818 <key>Value</key> 1100 <key>Value</key>
819 <integer>1</integer> 1101 <integer>1</integer>
820 </map> 1102 </map>
821 <key>ChatHistoryTornOff</key> 1103 <key>ChatHistoryTornOff</key>
822 <map> 1104 <map>
823 <key>Comment</key> 1105 <key>Comment</key>
824 <string>Show chat history window separately from Communicate window.</string> 1106 <string>Show chat history window separately from Communicate window.</string>
825 <key>Persist</key> 1107 <key>Persist</key>
826 <integer>1</integer> 1108 <integer>1</integer>
827 <key>Type</key> 1109 <key>Type</key>
828 <string>Boolean</string> 1110 <string>Boolean</string>
829 <key>Value</key> 1111 <key>Value</key>
830 <integer>0</integer> 1112 <integer>0</integer>
831 </map> 1113 </map>
832 <key>ChatOnlineNotification</key> 1114 <key>ChatOnlineNotification</key>
833 <map> 1115 <map>
834 <key>Comment</key> 1116 <key>Comment</key>
835 <string>Provide notifications for when friend log on and off of SL</string> 1117 <string>Provide notifications for when friend log on and off of SL</string>
836 <key>Persist</key> 1118 <key>Persist</key>
837 <integer>1</integer> 1119 <integer>1</integer>
838 <key>Type</key> 1120 <key>Type</key>
839 <string>Boolean</string> 1121 <string>Boolean</string>
840 <key>Value</key> 1122 <key>Value</key>
841 <integer>1</integer> 1123 <integer>1</integer>
842 </map> 1124 </map>
843 <key>ChatPersistTime</key> 1125 <key>ChatPersistTime</key>
844 <map> 1126 <map>
845 <key>Comment</key> 1127 <key>Comment</key>
846 <string>Time for which chat stays visible in console (seconds)</string> 1128 <string>Time for which chat stays visible in console (seconds)</string>
847 <key>Persist</key> 1129 <key>Persist</key>
848 <integer>1</integer> 1130 <integer>1</integer>
849 <key>Type</key> 1131 <key>Type</key>
850 <string>F32</string> 1132 <string>F32</string>
851 <key>Value</key> 1133 <key>Value</key>
852 <real>15</real> 1134 <real>15.0</real>
853 </map> 1135 </map>
854 <key>ChatShowTimestamps</key> 1136 <key>ChatShowTimestamps</key>
855 <map> 1137 <map>
856 <key>Comment</key> 1138 <key>Comment</key>
857 <string>Show timestamps in chat</string> 1139 <string>Show timestamps in chat</string>
858 <key>Persist</key> 1140 <key>Persist</key>
859 <integer>1</integer> 1141 <integer>1</integer>
860 <key>Type</key> 1142 <key>Type</key>
861 <string>Boolean</string> 1143 <string>Boolean</string>
862 <key>Value</key> 1144 <key>Value</key>
863 <integer>1</integer> 1145 <integer>1</integer>
864 </map> 1146 </map>
865 <key>ChatVisible</key> 1147 <key>ChatVisible</key>
866 <map> 1148 <map>
867 <key>Comment</key> 1149 <key>Comment</key>
868 <string>Chat bar is visible</string> 1150 <string>Chat bar is visible</string>
869 <key>Persist</key> 1151 <key>Persist</key>
870 <integer>1</integer> 1152 <integer>1</integer>
871 <key>Type</key> 1153 <key>Type</key>
872 <string>Boolean</string> 1154 <string>Boolean</string>
873 <key>Value</key> 1155 <key>Value</key>
874 <integer>1</integer> 1156 <integer>1</integer>
875 </map> 1157 </map>
876 <key>ChatterboxRect</key> 1158 <key>ChatterboxRect</key>
877 <map> 1159 <map>
878 <key>Comment</key> 1160 <key>Comment</key>
879 <string>Rectangle for chatterbox window</string> 1161 <string>Rectangle for chatterbox window</string>
880 <key>Persist</key> 1162 <key>Persist</key>
881 <integer>1</integer> 1163 <integer>1</integer>
882 <key>Type</key> 1164 <key>Type</key>
883 <string>Rect</string> 1165 <string>Rect</string>
884 <key>Value</key> 1166 <key>Value</key>
885 <array> 1167 <array>
886 <integer>0</integer> 1168 <integer>0</integer>
887 <integer>400</integer> 1169 <integer>400</integer>
888 <integer>350</integer> 1170 <integer>350</integer>
889 <integer>0</integer> 1171 <integer>0</integer>
890 </array> 1172 </array>
891 </map> 1173 </map>
892 <key>CheesyBeacon</key> 1174 <key>CheesyBeacon</key>
893 <map> 1175 <map>
894 <key>Comment</key> 1176 <key>Comment</key>
895 <string>Enable cheesy beacon effects</string> 1177 <string>Enable cheesy beacon effects</string>
896 <key>Persist</key> 1178 <key>Persist</key>
897 <integer>1</integer> 1179 <integer>1</integer>
898 <key>Type</key> 1180 <key>Type</key>
899 <string>Boolean</string> 1181 <string>Boolean</string>
900 <key>Value</key> 1182 <key>Value</key>
901 <integer>0</integer> 1183 <integer>0</integer>
902 </map> 1184 </map>
903 <key>ClientSettingsFile</key> 1185 <key>ClientSettingsFile</key>
904 <map> 1186 <map>
905 <key>Comment</key> 1187 <key>Comment</key>
906 <string>Persisted client settings file name (per install).</string> 1188 <string>Persisted client settings file name (per install).</string>
907 <key>Persist</key> 1189 <key>Persist</key>
908 <integer>0</integer> 1190 <integer>0</integer>
909 <key>Type</key> 1191 <key>Type</key>
910 <string>String</string> 1192 <string>String</string>
911 <key>Value</key> 1193 <key>Value</key>
912 <string /> 1194 <string />
913 </map> 1195 </map>
914 <key>CloseChatOnReturn</key> 1196 <key>CloseChatOnReturn</key>
915 <map> 1197 <map>
916 <key>Comment</key> 1198 <key>Comment</key>
917 <string>Close chat after hitting return</string> 1199 <string>Close chat after hitting return</string>
918 <key>Persist</key> 1200 <key>Persist</key>
919 <integer>1</integer> 1201 <integer>1</integer>
920 <key>Type</key> 1202 <key>Type</key>
921 <string>Boolean</string> 1203 <string>Boolean</string>
922 <key>Value</key> 1204 <key>Value</key>
923 <integer>0</integer> 1205 <integer>0</integer>
924 </map> 1206 </map>
925 <key>CloseSnapshotOnKeep</key> 1207 <key>CloseSnapshotOnKeep</key>
926 <map> 1208 <map>
927 <key>Comment</key> 1209 <key>Comment</key>
928 <string>Close snapshot window after saving snapshot</string> 1210 <string>Close snapshot window after saving snapshot</string>
929 <key>Persist</key> 1211 <key>Persist</key>
930 <integer>1</integer> 1212 <integer>1</integer>
931 <key>Type</key> 1213 <key>Type</key>
932 <string>Boolean</string> 1214 <string>Boolean</string>
933 <key>Value</key> 1215 <key>Value</key>
934 <integer>1</integer> 1216 <integer>1</integer>
935 </map> 1217 </map>
936 <key>ClothingBtnState</key> 1218 <key>ClothingBtnState</key>
937 <map> 1219 <map>
938 <key>Comment</key> 1220 <key>Comment</key>
939 <string /> 1221 <string />
940 <key>Persist</key> 1222 <key>Persist</key>
941 <integer>0</integer> 1223 <integer>0</integer>
942 <key>Type</key> 1224 <key>Type</key>
943 <string>Boolean</string> 1225 <string>Boolean</string>
944 <key>Value</key> 1226 <key>Value</key>
945 <integer>0</integer> 1227 <integer>0</integer>
946 </map> 1228 </map>
947 <key>CmdLineDisableVoice</key> 1229 <key>CmdLineDisableVoice</key>
948 <map> 1230 <map>
949 <key>Comment</key> 1231 <key>Comment</key>
950 <string>Disable Voice.</string> 1232 <string>Disable Voice.</string>
951 <key>Persist</key> 1233 <key>Persist</key>
952 <integer>0</integer> 1234 <integer>0</integer>
953 <key>Type</key> 1235 <key>Type</key>
954 <string>Boolean</string> 1236 <string>Boolean</string>
955 <key>Value</key> 1237 <key>Value</key>
956 <integer>0</integer> 1238 <integer>0</integer>
957 </map> 1239 </map>
1240 <key>CmdLineGridChoice</key>
1241 <map>
1242 <key>Comment</key>
1243 <string>The user's grid choice or ip address.</string>
1244 <key>Persist</key>
1245 <integer>0</integer>
1246 <key>Type</key>
1247 <string>String</string>
1248 <key>Value</key>
1249 <string />
1250 </map>
1251 <key>CmdLineHelperURI</key>
1252 <map>
1253 <key>Comment</key>
1254 <string>Command line specified helper web CGI prefix to use.</string>
1255 <key>Persist</key>
1256 <integer>0</integer>
1257 <key>Type</key>
1258 <string>String</string>
1259 <key>Value</key>
1260 <string />
1261 </map>
1262 <key>CmdLineLoginURI</key>
1263 <map>
1264 <key>Comment</key>
1265 <string>Command line specified login server and CGI prefix to use.</string>
1266 <key>Persist</key>
1267 <integer>0</integer>
1268 <key>Type</key>
1269 <string>LLSD</string>
1270 <key>Value</key>
1271 <array>
1272 <string />
1273 </array>
1274 </map>
958 <key>ColorPaletteEntry01</key> 1275 <key>ColorPaletteEntry01</key>
959 <map> 1276 <map>
960 <key>Comment</key> 1277 <key>Comment</key>
961 <string>Color picker palette entry</string> 1278 <string>Color picker palette entry</string>
962 <key>Persist</key> 1279 <key>Persist</key>
963 <integer>1</integer> 1280 <integer>1</integer>
964 <key>Type</key> 1281 <key>Type</key>
965 <string>Color4</string> 1282 <string>Color4</string>
966 <key>Value</key> 1283 <key>Value</key>
967 <array> 1284 <array>
968 <real>0</real> 1285 <real>0.0</real>
969 <real>0</real> 1286 <real>0.0</real>
970 <real>0</real> 1287 <real>0.0</real>
971 <real>1</real> 1288 <real>1.0</real>
972 </array> 1289 </array>
973 </map> 1290 </map>
974 <key>ColorPaletteEntry02</key> 1291 <key>ColorPaletteEntry02</key>
975 <map> 1292 <map>
976 <key>Comment</key> 1293 <key>Comment</key>
977 <string>Color picker palette entry</string> 1294 <string>Color picker palette entry</string>
978 <key>Persist</key> 1295 <key>Persist</key>
979 <integer>1</integer> 1296 <integer>1</integer>
980 <key>Type</key> 1297 <key>Type</key>
981 <string>Color4</string> 1298 <string>Color4</string>
982 <key>Value</key> 1299 <key>Value</key>
983 <array> 1300 <array>
984 <real>0.5</real> 1301 <real>0.5</real>
985 <real>0.5</real> 1302 <real>0.5</real>
986 <real>0.5</real> 1303 <real>0.5</real>
987 <real>1</real> 1304 <real>1.0</real>
988 </array> 1305 </array>
989 </map> 1306 </map>
990 <key>ColorPaletteEntry03</key> 1307 <key>ColorPaletteEntry03</key>
991 <map> 1308 <map>
992 <key>Comment</key> 1309 <key>Comment</key>
993 <string>Color picker palette entry</string> 1310 <string>Color picker palette entry</string>
994 <key>Persist</key> 1311 <key>Persist</key>
995 <integer>1</integer> 1312 <integer>1</integer>
996 <key>Type</key> 1313 <key>Type</key>
997 <string>Color4</string> 1314 <string>Color4</string>
998 <key>Value</key> 1315 <key>Value</key>
999 <array> 1316 <array>
1000 <real>0.5</real> 1317 <real>0.5</real>
1001 <real>0</real> 1318 <real>0.0</real>
1002 <real>0</real> 1319 <real>0.0</real>
1003 <real>1</real> 1320 <real>1.0</real>
1004 </array> 1321 </array>
1005 </map> 1322 </map>
1006 <key>ColorPaletteEntry04</key> 1323 <key>ColorPaletteEntry04</key>
1007 <map> 1324 <map>
1008 <key>Comment</key> 1325 <key>Comment</key>
1009 <string>Color picker palette entry</string> 1326 <string>Color picker palette entry</string>
1010 <key>Persist</key> 1327 <key>Persist</key>
1011 <integer>1</integer> 1328 <integer>1</integer>
1012 <key>Type</key> 1329 <key>Type</key>
1013 <string>Color4</string> 1330 <string>Color4</string>
1014 <key>Value</key> 1331 <key>Value</key>
1015 <array> 1332 <array>
1016 <real>0.5</real> 1333 <real>0.5</real>
1017 <real>0.5</real> 1334 <real>0.5</real>
1018 <real>0</real> 1335 <real>0.0</real>
1019 <real>1</real> 1336 <real>1.0</real>
1020 </array> 1337 </array>
1021 </map> 1338 </map>
1022 <key>ColorPaletteEntry05</key> 1339 <key>ColorPaletteEntry05</key>
1023 <map> 1340 <map>
1024 <key>Comment</key> 1341 <key>Comment</key>
1025 <string>Color picker palette entry</string> 1342 <string>Color picker palette entry</string>
1026 <key>Persist</key> 1343 <key>Persist</key>
1027 <integer>1</integer> 1344 <integer>1</integer>
1028 <key>Type</key> 1345 <key>Type</key>
1029 <string>Color4</string> 1346 <string>Color4</string>
1030 <key>Value</key> 1347 <key>Value</key>
1031 <array> 1348 <array>
1032 <real>0</real> 1349 <real>0.0</real>
1033 <real>0.5</real> 1350 <real>0.5</real>
1034 <real>0</real> 1351 <real>0.0</real>
1035 <real>1</real> 1352 <real>1.0</real>
1036 </array> 1353 </array>
1037 </map> 1354 </map>
1038 <key>ColorPaletteEntry06</key> 1355 <key>ColorPaletteEntry06</key>
1039 <map> 1356 <map>
1040 <key>Comment</key> 1357 <key>Comment</key>
1041 <string>Color picker palette entry</string> 1358 <string>Color picker palette entry</string>
1042 <key>Persist</key> 1359 <key>Persist</key>
1043 <integer>1</integer> 1360 <integer>1</integer>
1044 <key>Type</key> 1361 <key>Type</key>
1045 <string>Color4</string> 1362 <string>Color4</string>
1046 <key>Value</key> 1363 <key>Value</key>
1047 <array> 1364 <array>
1048 <real>0</real> 1365 <real>0.0</real>
1049 <real>0.5</real> 1366 <real>0.5</real>
1050 <real>0.5</real> 1367 <real>0.5</real>
1051 <real>1</real> 1368 <real>1.0</real>
1052 </array> 1369 </array>
1053 </map> 1370 </map>
1054 <key>ColorPaletteEntry07</key> 1371 <key>ColorPaletteEntry07</key>
1055 <map> 1372 <map>
1056 <key>Comment</key> 1373 <key>Comment</key>
1057 <string>Color picker palette entry</string> 1374 <string>Color picker palette entry</string>
1058 <key>Persist</key> 1375 <key>Persist</key>
1059 <integer>1</integer> 1376 <integer>1</integer>
1060 <key>Type</key> 1377 <key>Type</key>
1061 <string>Color4</string> 1378 <string>Color4</string>
1062 <key>Value</key> 1379 <key>Value</key>
1063 <array> 1380 <array>
1064 <real>0</real> 1381 <real>0.0</real>
1065 <real>0</real> 1382 <real>0.0</real>
1066 <real>0.5</real> 1383 <real>0.5</real>
1067 <real>1</real> 1384 <real>1.0</real>
1068 </array> 1385 </array>
1069 </map> 1386 </map>
1070 <key>ColorPaletteEntry08</key> 1387 <key>ColorPaletteEntry08</key>
1071 <map> 1388 <map>
1072 <key>Comment</key> 1389 <key>Comment</key>
1073 <string>Color picker palette entry</string> 1390 <string>Color picker palette entry</string>
1074 <key>Persist</key> 1391 <key>Persist</key>
1075 <integer>1</integer> 1392 <integer>1</integer>
1076 <key>Type</key> 1393 <key>Type</key>
1077 <string>Color4</string> 1394 <string>Color4</string>
1078 <key>Value</key> 1395 <key>Value</key>
1079 <array> 1396 <array>
1080 <real>0.5</real> 1397 <real>0.5</real>
1081 <real>0</real> 1398 <real>0.0</real>
1082 <real>0.5</real> 1399 <real>0.5</real>
1083 <real>1</real> 1400 <real>1.0</real>
1084 </array> 1401 </array>
1085 </map> 1402 </map>
1086 <key>ColorPaletteEntry09</key> 1403 <key>ColorPaletteEntry09</key>
1087 <map> 1404 <map>
1088 <key>Comment</key> 1405 <key>Comment</key>
1089 <string>Color picker palette entry</string> 1406 <string>Color picker palette entry</string>
1090 <key>Persist</key> 1407 <key>Persist</key>
1091 <integer>1</integer> 1408 <integer>1</integer>
1092 <key>Type</key> 1409 <key>Type</key>
1093 <string>Color4</string> 1410 <string>Color4</string>
1094 <key>Value</key> 1411 <key>Value</key>
1095 <array> 1412 <array>
1096 <real>0.5</real> 1413 <real>0.5</real>
1097 <real>0.5</real> 1414 <real>0.5</real>
1098 <real>0</real> 1415 <real>0.0</real>
1099 <real>1</real> 1416 <real>1.0</real>
1100 </array> 1417 </array>
1101 </map> 1418 </map>
1102 <key>ColorPaletteEntry10</key> 1419 <key>ColorPaletteEntry10</key>
1103 <map> 1420 <map>
1104 <key>Comment</key> 1421 <key>Comment</key>
1105 <string>Color picker palette entry</string> 1422 <string>Color picker palette entry</string>
1106 <key>Persist</key> 1423 <key>Persist</key>
1107 <integer>1</integer> 1424 <integer>1</integer>
1108 <key>Type</key> 1425 <key>Type</key>
1109 <string>Color4</string> 1426 <string>Color4</string>
1110 <key>Value</key> 1427 <key>Value</key>
1111 <array> 1428 <array>
1112 <real>0</real> 1429 <real>0.0</real>
1113 <real>0.25</real> 1430 <real>0.25</real>
1114 <real>0.25</real> 1431 <real>0.25</real>
1115 <real>1</real> 1432 <real>1.0</real>
1116 </array> 1433 </array>
1117 </map> 1434 </map>
1118 <key>ColorPaletteEntry11</key> 1435 <key>ColorPaletteEntry11</key>
1119 <map> 1436 <map>
1120 <key>Comment</key> 1437 <key>Comment</key>
1121 <string>Color picker palette entry</string> 1438 <string>Color picker palette entry</string>
1122 <key>Persist</key> 1439 <key>Persist</key>
1123 <integer>1</integer> 1440 <integer>1</integer>
1124 <key>Type</key> 1441 <key>Type</key>
1125 <string>Color4</string> 1442 <string>Color4</string>
1126 <key>Value</key> 1443 <key>Value</key>
1127 <array> 1444 <array>
1128 <real>0</real> 1445 <real>0.0</real>
1129 <real>0.5</real> 1446 <real>0.5</real>
1130 <real>1</real> 1447 <real>1.0</real>
1131 <real>1</real> 1448 <real>1.0</real>
1132 </array> 1449 </array>
1133 </map> 1450 </map>
1134 <key>ColorPaletteEntry12</key> 1451 <key>ColorPaletteEntry12</key>
1135 <map> 1452 <map>
1136 <key>Comment</key> 1453 <key>Comment</key>
1137 <string>Color picker palette entry</string> 1454 <string>Color picker palette entry</string>
1138 <key>Persist</key> 1455 <key>Persist</key>
1139 <integer>1</integer> 1456 <integer>1</integer>
1140 <key>Type</key> 1457 <key>Type</key>
1141 <string>Color4</string> 1458 <string>Color4</string>
1142 <key>Value</key> 1459 <key>Value</key>
1143 <array> 1460 <array>
1144 <real>0</real> 1461 <real>0.0</real>
1145 <real>0.25</real> 1462 <real>0.25</real>
1146 <real>0.5</real> 1463 <real>0.5</real>
1147 <real>1</real> 1464 <real>1.0</real>
1148 </array> 1465 </array>
1149 </map> 1466 </map>
1150 <key>ColorPaletteEntry13</key> 1467 <key>ColorPaletteEntry13</key>
1151 <map> 1468 <map>
1152 <key>Comment</key> 1469 <key>Comment</key>
1153 <string>Color picker palette entry</string> 1470 <string>Color picker palette entry</string>
1154 <key>Persist</key> 1471 <key>Persist</key>
1155 <integer>1</integer> 1472 <integer>1</integer>
1156 <key>Type</key> 1473 <key>Type</key>
1157 <string>Color4</string> 1474 <string>Color4</string>
1158 <key>Value</key> 1475 <key>Value</key>
1159 <array> 1476 <array>
1160 <real>0.5</real> 1477 <real>0.5</real>
1161 <real>0</real> 1478 <real>0.0</real>
1162 <real>1</real> 1479 <real>1.0</real>
1163 <real>1</real> 1480 <real>1.0</real>
1164 </array> 1481 </array>
1165 </map> 1482 </map>
1166 <key>ColorPaletteEntry14</key> 1483 <key>ColorPaletteEntry14</key>
1167 <map> 1484 <map>
1168 <key>Comment</key> 1485 <key>Comment</key>
1169 <string>Color picker palette entry</string> 1486 <string>Color picker palette entry</string>
1170 <key>Persist</key> 1487 <key>Persist</key>
1171 <integer>1</integer> 1488 <integer>1</integer>
1172 <key>Type</key> 1489 <key>Type</key>
1173 <string>Color4</string> 1490 <string>Color4</string>
1174 <key>Value</key> 1491 <key>Value</key>
1175 <array> 1492 <array>
1176 <real>0.5</real> 1493 <real>0.5</real>
1177 <real>0.25</real> 1494 <real>0.25</real>
1178 <real>0</real> 1495 <real>0.0</real>
1179 <real>1</real> 1496 <real>1.0</real>
1180 </array> 1497 </array>
1181 </map> 1498 </map>
1182 <key>ColorPaletteEntry15</key> 1499 <key>ColorPaletteEntry15</key>
1183 <map> 1500 <map>
1184 <key>Comment</key> 1501 <key>Comment</key>
1185 <string>Color picker palette entry</string> 1502 <string>Color picker palette entry</string>
1186 <key>Persist</key> 1503 <key>Persist</key>
1187 <integer>1</integer> 1504 <integer>1</integer>
1188 <key>Type</key> 1505 <key>Type</key>
1189 <string>Color4</string> 1506 <string>Color4</string>
1190 <key>Value</key> 1507 <key>Value</key>
1191 <array> 1508 <array>
1192 <real>1</real> 1509 <real>1.0</real>
1193 <real>1</real> 1510 <real>1.0</real>
1194 <real>1</real> 1511 <real>1.0</real>
1195 <real>1</real> 1512 <real>1.0</real>
1196 </array> 1513 </array>
1197 </map> 1514 </map>
1198 <key>ColorPaletteEntry16</key> 1515 <key>ColorPaletteEntry16</key>
1199 <map> 1516 <map>
1200 <key>Comment</key> 1517 <key>Comment</key>
1201 <string>Color picker palette entry</string> 1518 <string>Color picker palette entry</string>
1202 <key>Persist</key> 1519 <key>Persist</key>
1203 <integer>1</integer> 1520 <integer>1</integer>
1204 <key>Type</key> 1521 <key>Type</key>
1205 <string>Color4</string> 1522 <string>Color4</string>
1206 <key>Value</key> 1523 <key>Value</key>
1207 <array> 1524 <array>
1208 <real>1</real> 1525 <real>1.0</real>
1209 <real>1</real> 1526 <real>1.0</real>
1210 <real>1</real> 1527 <real>1.0</real>
1211 <real>1</real> 1528 <real>1.0</real>
1212 </array> 1529 </array>
1213 </map> 1530 </map>
1214 <key>ColorPaletteEntry17</key> 1531 <key>ColorPaletteEntry17</key>
1215 <map> 1532 <map>
1216 <key>Comment</key> 1533 <key>Comment</key>
1217 <string>Color picker palette entry</string> 1534 <string>Color picker palette entry</string>
1218 <key>Persist</key> 1535 <key>Persist</key>
1219 <integer>1</integer> 1536 <integer>1</integer>
1220 <key>Type</key> 1537 <key>Type</key>
1221 <string>Color4</string> 1538 <string>Color4</string>
1222 <key>Value</key> 1539 <key>Value</key>
1223 <array> 1540 <array>
1224 <real>1</real> 1541 <real>1.0</real>
1225 <real>1</real> 1542 <real>1.0</real>
1226 <real>1</real> 1543 <real>1.0</real>
1227 <real>1</real> 1544 <real>1.0</real>
1228 </array> 1545 </array>
1229 </map> 1546 </map>
1230 <key>ColorPaletteEntry18</key> 1547 <key>ColorPaletteEntry18</key>
1231 <map> 1548 <map>
1232 <key>Comment</key> 1549 <key>Comment</key>
1233 <string>Color picker palette entry</string> 1550 <string>Color picker palette entry</string>
1234 <key>Persist</key> 1551 <key>Persist</key>
1235 <integer>1</integer> 1552 <integer>1</integer>
1236 <key>Type</key> 1553 <key>Type</key>
1237 <string>Color4</string> 1554 <string>Color4</string>
1238 <key>Value</key> 1555 <key>Value</key>
1239 <array> 1556 <array>
1240 <real>0.75</real> 1557 <real>0.75</real>
1241 <real>0.75</real> 1558 <real>0.75</real>
1242 <real>0.75</real> 1559 <real>0.75</real>
1243 <real>1</real> 1560 <real>1.0</real>
1244 </array> 1561 </array>
1245 </map> 1562 </map>
1246 <key>ColorPaletteEntry19</key> 1563 <key>ColorPaletteEntry19</key>
1247 <map> 1564 <map>
1248 <key>Comment</key> 1565 <key>Comment</key>
1249 <string>Color picker palette entry</string> 1566 <string>Color picker palette entry</string>
1250 <key>Persist</key> 1567 <key>Persist</key>
1251 <integer>1</integer> 1568 <integer>1</integer>
1252 <key>Type</key> 1569 <key>Type</key>
1253 <string>Color4</string> 1570 <string>Color4</string>
1254 <key>Value</key> 1571 <key>Value</key>
1255 <array> 1572 <array>
1256 <real>1</real> 1573 <real>1.0</real>
1257 <real>0</real> 1574 <real>0.0</real>
1258 <real>0</real> 1575 <real>0.0</real>
1259 <real>1</real> 1576 <real>1.0</real>
1260 </array> 1577 </array>
1261 </map> 1578 </map>
1262 <key>ColorPaletteEntry20</key> 1579 <key>ColorPaletteEntry20</key>
1263 <map> 1580 <map>
1264 <key>Comment</key> 1581 <key>Comment</key>
1265 <string>Color picker palette entry</string> 1582 <string>Color picker palette entry</string>
1266 <key>Persist</key> 1583 <key>Persist</key>
1267 <integer>1</integer> 1584 <integer>1</integer>
1268 <key>Type</key> 1585 <key>Type</key>
1269 <string>Color4</string> 1586 <string>Color4</string>
1270 <key>Value</key> 1587 <key>Value</key>
1271 <array> 1588 <array>
1272 <real>1</real> 1589 <real>1.0</real>
1273 <real>1</real> 1590 <real>1.0</real>
1274 <real>0</real> 1591 <real>0.0</real>
1275 <real>1</real> 1592 <real>1.0</real>
1276 </array> 1593 </array>
1277 </map> 1594 </map>
1278 <key>ColorPaletteEntry21</key> 1595 <key>ColorPaletteEntry21</key>
1279 <map> 1596 <map>
1280 <key>Comment</key> 1597 <key>Comment</key>
1281 <string>Color picker palette entry</string> 1598 <string>Color picker palette entry</string>
1282 <key>Persist</key> 1599 <key>Persist</key>
1283 <integer>1</integer> 1600 <integer>1</integer>
1284 <key>Type</key> 1601 <key>Type</key>
1285 <string>Color4</string> 1602 <string>Color4</string>
1286 <key>Value</key> 1603 <key>Value</key>
1287 <array> 1604 <array>
1288 <real>0</real> 1605 <real>0.0</real>
1289 <real>1</real> 1606 <real>1.0</real>
1290 <real>0</real> 1607 <real>0.0</real>
1291 <real>1</real> 1608 <real>1.0</real>
1292 </array> 1609 </array>
1293 </map> 1610 </map>
1294 <key>ColorPaletteEntry22</key> 1611 <key>ColorPaletteEntry22</key>
1295 <map> 1612 <map>
1296 <key>Comment</key> 1613 <key>Comment</key>
1297 <string>Color picker palette entry</string> 1614 <string>Color picker palette entry</string>
1298 <key>Persist</key> 1615 <key>Persist</key>
1299 <integer>1</integer> 1616 <integer>1</integer>
1300 <key>Type</key> 1617 <key>Type</key>
1301 <string>Color4</string> 1618 <string>Color4</string>
1302 <key>Value</key> 1619 <key>Value</key>
1303 <array> 1620 <array>
1304 <real>0</real> 1621 <real>0.0</real>
1305 <real>1</real> 1622 <real>1.0</real>
1306 <real>1</real> 1623 <real>1.0</real>
1307 <real>1</real> 1624 <real>1.0</real>
1308 </array> 1625 </array>
1309 </map> 1626 </map>
1310 <key>ColorPaletteEntry23</key> 1627 <key>ColorPaletteEntry23</key>
1311 <map> 1628 <map>
1312 <key>Comment</key> 1629 <key>Comment</key>
1313 <string>Color picker palette entry</string> 1630 <string>Color picker palette entry</string>
1314 <key>Persist</key> 1631 <key>Persist</key>
1315 <integer>1</integer> 1632 <integer>1</integer>
1316 <key>Type</key> 1633 <key>Type</key>
1317 <string>Color4</string> 1634 <string>Color4</string>
1318 <key>Value</key> 1635 <key>Value</key>
1319 <array> 1636 <array>
1320 <real>0</real> 1637 <real>0.0</real>
1321 <real>0</real> 1638 <real>0.0</real>
1322 <real>1</real> 1639 <real>1.0</real>
1323 <real>1</real> 1640 <real>1.0</real>
1324 </array> 1641 </array>
1325 </map> 1642 </map>
1326 <key>ColorPaletteEntry24</key> 1643 <key>ColorPaletteEntry24</key>
1327 <map> 1644 <map>
1328 <key>Comment</key> 1645 <key>Comment</key>
1329 <string>Color picker palette entry</string> 1646 <string>Color picker palette entry</string>
1330 <key>Persist</key> 1647 <key>Persist</key>
1331 <integer>1</integer> 1648 <integer>1</integer>
1332 <key>Type</key> 1649 <key>Type</key>
1333 <string>Color4</string> 1650 <string>Color4</string>
1334 <key>Value</key> 1651 <key>Value</key>
1335 <array> 1652 <array>
1336 <real>1</real> 1653 <real>1.0</real>
1337 <real>0</real> 1654 <real>0.0</real>
1338 <real>1</real> 1655 <real>1.0</real>
1339 <real>1</real> 1656 <real>1.0</real>
1340 </array> 1657 </array>
1341 </map> 1658 </map>
1342 <key>ColorPaletteEntry25</key> 1659 <key>ColorPaletteEntry25</key>
1343 <map> 1660 <map>
1344 <key>Comment</key> 1661 <key>Comment</key>
1345 <string>Color picker palette entry</string> 1662 <string>Color picker palette entry</string>
1346 <key>Persist</key> 1663 <key>Persist</key>
1347 <integer>1</integer> 1664 <integer>1</integer>
1348 <key>Type</key> 1665 <key>Type</key>
1349 <string>Color4</string> 1666 <string>Color4</string>
1350 <key>Value</key> 1667 <key>Value</key>
1351 <array> 1668 <array>
1352 <real>1</real> 1669 <real>1.0</real>
1353 <real>1</real> 1670 <real>1.0</real>
1354 <real>0.5</real> 1671 <real>0.5</real>
1355 <real>1</real> 1672 <real>1.0</real>
1356 </array> 1673 </array>
1357 </map> 1674 </map>
1358 <key>ColorPaletteEntry26</key> 1675 <key>ColorPaletteEntry26</key>
1359 <map> 1676 <map>
1360 <key>Comment</key> 1677 <key>Comment</key>
1361 <string>Color picker palette entry</string> 1678 <string>Color picker palette entry</string>
1362 <key>Persist</key> 1679 <key>Persist</key>
1363 <integer>1</integer> 1680 <integer>1</integer>
1364 <key>Type</key> 1681 <key>Type</key>
1365 <string>Color4</string> 1682 <string>Color4</string>
1366 <key>Value</key> 1683 <key>Value</key>
1367 <array> 1684 <array>
1368 <real>0</real> 1685 <real>0.0</real>
1369 <real>1</real> 1686 <real>1.0</real>
1370 <real>0.5</real> 1687 <real>0.5</real>
1371 <real>1</real> 1688 <real>1.0</real>
1372 </array> 1689 </array>
1373 </map> 1690 </map>
1374 <key>ColorPaletteEntry27</key> 1691 <key>ColorPaletteEntry27</key>
1375 <map> 1692 <map>
1376 <key>Comment</key> 1693 <key>Comment</key>
1377 <string>Color picker palette entry</string> 1694 <string>Color picker palette entry</string>
1378 <key>Persist</key> 1695 <key>Persist</key>
1379 <integer>1</integer> 1696 <integer>1</integer>
1380 <key>Type</key> 1697 <key>Type</key>
1381 <string>Color4</string> 1698 <string>Color4</string>
1382 <key>Value</key> 1699 <key>Value</key>
1383 <array> 1700 <array>
1384 <real>0.5</real> 1701 <real>0.5</real>
1385 <real>1</real> 1702 <real>1.0</real>
1386 <real>1</real> 1703 <real>1.0</real>
1387 <real>1</real> 1704 <real>1.0</real>
1388 </array> 1705 </array>
1389 </map> 1706 </map>
1390 <key>ColorPaletteEntry28</key> 1707 <key>ColorPaletteEntry28</key>
1391 <map> 1708 <map>
1392 <key>Comment</key> 1709 <key>Comment</key>
1393 <string>Color picker palette entry</string> 1710 <string>Color picker palette entry</string>
1394 <key>Persist</key> 1711 <key>Persist</key>
1395 <integer>1</integer> 1712 <integer>1</integer>
1396 <key>Type</key> 1713 <key>Type</key>
1397 <string>Color4</string> 1714 <string>Color4</string>
1398 <key>Value</key> 1715 <key>Value</key>
1399 <array> 1716 <array>
1400 <real>0.5</real> 1717 <real>0.5</real>
1401 <real>0.5</real> 1718 <real>0.5</real>
1402 <real>1</real> 1719 <real>1.0</real>
1403 <real>1</real> 1720 <real>1.0</real>
1404 </array> 1721 </array>
1405 </map> 1722 </map>
1406 <key>ColorPaletteEntry29</key> 1723 <key>ColorPaletteEntry29</key>
1407 <map> 1724 <map>
1408 <key>Comment</key> 1725 <key>Comment</key>
1409 <string>Color picker palette entry</string> 1726 <string>Color picker palette entry</string>
1410 <key>Persist</key> 1727 <key>Persist</key>
1411 <integer>1</integer> 1728 <integer>1</integer>
1412 <key>Type</key> 1729 <key>Type</key>
1413 <string>Color4</string> 1730 <string>Color4</string>
1414 <key>Value</key> 1731 <key>Value</key>
1415 <array> 1732 <array>
1416 <real>1</real> 1733 <real>1.0</real>
1417 <real>0</real> 1734 <real>0.0</real>
1418 <real>0.5</real> 1735 <real>0.5</real>
1419 <real>1</real> 1736 <real>1.0</real>
1420 </array> 1737 </array>
1421 </map> 1738 </map>
1422 <key>ColorPaletteEntry30</key> 1739 <key>ColorPaletteEntry30</key>
1423 <map> 1740 <map>
1424 <key>Comment</key> 1741 <key>Comment</key>
1425 <string>Color picker palette entry</string> 1742 <string>Color picker palette entry</string>
1426 <key>Persist</key> 1743 <key>Persist</key>
1427 <integer>1</integer> 1744 <integer>1</integer>
1428 <key>Type</key> 1745 <key>Type</key>
1429 <string>Color4</string> 1746 <string>Color4</string>
1430 <key>Value</key> 1747 <key>Value</key>
1431 <array> 1748 <array>
1432 <real>1</real> 1749 <real>1.0</real>
1433 <real>0.5</real> 1750 <real>0.5</real>
1434 <real>0</real> 1751 <real>0.0</real>
1435 <real>1</real> 1752 <real>1.0</real>
1436 </array> 1753 </array>
1437 </map> 1754 </map>
1438 <key>ColorPaletteEntry31</key> 1755 <key>ColorPaletteEntry31</key>
1439 <map> 1756 <map>
1440 <key>Comment</key> 1757 <key>Comment</key>
1441 <string>Color picker palette entry</string> 1758 <string>Color picker palette entry</string>
1442 <key>Persist</key> 1759 <key>Persist</key>
1443 <integer>1</integer> 1760 <integer>1</integer>
1444 <key>Type</key> 1761 <key>Type</key>
1445 <string>Color4</string> 1762 <string>Color4</string>
1446 <key>Value</key> 1763 <key>Value</key>
1447 <array> 1764 <array>
1448 <real>1</real> 1765 <real>1.0</real>
1449 <real>1</real> 1766 <real>1.0</real>
1450 <real>1</real> 1767 <real>1.0</real>
1451 <real>1</real> 1768 <real>1.0</real>
1452 </array> 1769 </array>
1453 </map> 1770 </map>
1454 <key>ColorPaletteEntry32</key> 1771 <key>ColorPaletteEntry32</key>
1455 <map> 1772 <map>
1456 <key>Comment</key> 1773 <key>Comment</key>
1457 <string>Color picker palette entry</string> 1774 <string>Color picker palette entry</string>
1458 <key>Persist</key> 1775 <key>Persist</key>
1459 <integer>1</integer> 1776 <integer>1</integer>
1460 <key>Type</key> 1777 <key>Type</key>
1461 <string>Color4</string> 1778 <string>Color4</string>
1462 <key>Value</key> 1779 <key>Value</key>
1463 <array> 1780 <array>
1464 <real>1</real> 1781 <real>1.0</real>
1465 <real>1</real> 1782 <real>1.0</real>
1466 <real>1</real> 1783 <real>1.0</real>
1467 <real>1</real> 1784 <real>1.0</real>
1468 </array> 1785 </array>
1469 </map> 1786 </map>
1470 <key>ColumnHeaderDropDownDelay</key> 1787 <key>ColumnHeaderDropDownDelay</key>
1471 <map> 1788 <map>
1472 <key>Comment</key> 1789 <key>Comment</key>
1473 <string>Time in seconds of mouse click before column header shows sort options list</string> 1790 <string>Time in seconds of mouse click before column header shows sort options list</string>
1474 <key>Persist</key> 1791 <key>Persist</key>
1475 <integer>1</integer> 1792 <integer>1</integer>
1476 <key>Type</key> 1793 <key>Type</key>
1477 <string>F32</string> 1794 <string>F32</string>
1478 <key>Value</key> 1795 <key>Value</key>
1479 <real>0.300000011920928955078125</real> 1796 <real>0.300000011921</real>
1480 </map> 1797 </map>
1481 <key>CompileOutputRect</key> 1798 <key>CompileOutputRect</key>
1482 <map> 1799 <map>
1483 <key>Comment</key> 1800 <key>Comment</key>
1484 <string>Rectangle for script Recompile Everything output window</string> 1801 <string>Rectangle for script Recompile Everything output window</string>
1485 <key>Persist</key> 1802 <key>Persist</key>
1486 <integer>1</integer> 1803 <integer>1</integer>
1487 <key>Type</key> 1804 <key>Type</key>
1488 <string>Rect</string> 1805 <string>Rect</string>
1489 <key>Value</key> 1806 <key>Value</key>
1490 <array> 1807 <array>
1491 <integer>0</integer> 1808 <integer>0</integer>
1492 <integer>400</integer> 1809 <integer>400</integer>
1493 <integer>300</integer> 1810 <integer>300</integer>
1494 <integer>0</integer> 1811 <integer>0</integer>
1495 </array> 1812 </array>
1496 </map> 1813 </map>
1497 <key>CompressSnapshotsToDisk</key> 1814 <key>CompressSnapshotsToDisk</key>
1498 <map> 1815 <map>
1499 <key>Comment</key> 1816 <key>Comment</key>
1500 <string>Compress snapshots saved to disk (Using JPEG 2000)</string> 1817 <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
1501 <key>Persist</key> 1818 <key>Persist</key>
1502 <integer>1</integer> 1819 <integer>1</integer>
1503 <key>Type</key> 1820 <key>Type</key>
1504 <string>Boolean</string> 1821 <string>Boolean</string>
1505 <key>Value</key> 1822 <key>Value</key>
1506 <integer>0</integer> 1823 <integer>0</integer>
1507 </map> 1824 </map>
1508 <key>ConnectAsGod</key> 1825 <key>ConnectAsGod</key>
1509 <map> 1826 <map>
1510 <key>Comment</key> 1827 <key>Comment</key>
1511 <string>Log in a god if you have god access.</string> 1828 <string>Log in a god if you have god access.</string>
1512 <key>Persist</key> 1829 <key>Persist</key>
1513 <integer>1</integer> 1830 <integer>1</integer>
1514 <key>Type</key> 1831 <key>Type</key>
1515 <string>Boolean</string> 1832 <string>Boolean</string>
1516 <key>Value</key> 1833 <key>Value</key>
1517 <integer>0</integer> 1834 <integer>0</integer>
1518 </map> 1835 </map>
1519 <key>ConnectionPort</key> 1836 <key>ConnectionPort</key>
1520 <map> 1837 <map>
1521 <key>Comment</key> 1838 <key>Comment</key>
1522 <string>Custom connection port number</string> 1839 <string>Custom connection port number</string>
1523 <key>Persist</key> 1840 <key>Persist</key>
1524 <integer>1</integer> 1841 <integer>1</integer>
1525 <key>Type</key> 1842 <key>Type</key>
1526 <string>U32</string> 1843 <string>U32</string>
1527 <key>Value</key> 1844 <key>Value</key>
1528 <integer>13000</integer> 1845 <integer>13000</integer>
1529 </map> 1846 </map>
1530 <key>ConnectionPortEnabled</key> 1847 <key>ConnectionPortEnabled</key>
1531 <map> 1848 <map>
1532 <key>Comment</key> 1849 <key>Comment</key>
1533 <string>Use the custom connection port?</string> 1850 <string>Use the custom connection port?</string>
1534 <key>Persist</key> 1851 <key>Persist</key>
1535 <integer>1</integer> 1852 <integer>1</integer>
1536 <key>Type</key> 1853 <key>Type</key>
1537 <string>Boolean</string> 1854 <string>Boolean</string>
1538 <key>Value</key> 1855 <key>Value</key>
1539 <integer>0</integer> 1856 <integer>0</integer>
1540 </map> 1857 </map>
1541 <key>ConsoleBackgroundOpacity</key> 1858 <key>ConsoleBackgroundOpacity</key>
1542 <map> 1859 <map>
1543 <key>Comment</key> 1860 <key>Comment</key>
1544 <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string> 1861 <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
1545 <key>Persist</key> 1862 <key>Persist</key>
1546 <integer>1</integer> 1863 <integer>1</integer>
1547 <key>Type</key> 1864 <key>Type</key>
1548 <string>F32</string> 1865 <string>F32</string>
1549 <key>Value</key> 1866 <key>Value</key>
1550 <real>0.4000000059604644775390625</real> 1867 <real>0.40000000596</real>
1551 </map> 1868 </map>
1552 <key>ConsoleBufferSize</key> 1869 <key>ConsoleBufferSize</key>
1553 <map> 1870 <map>
1554 <key>Comment</key> 1871 <key>Comment</key>
1555 <string>Size of chat console history (lines of chat)</string> 1872 <string>Size of chat console history (lines of chat)</string>
1556 <key>Persist</key> 1873 <key>Persist</key>
1557 <integer>1</integer> 1874 <integer>1</integer>
1558 <key>Type</key> 1875 <key>Type</key>
1559 <string>S32</string> 1876 <string>S32</string>
1560 <key>Value</key> 1877 <key>Value</key>
1561 <integer>40</integer> 1878 <integer>40</integer>
1562 </map> 1879 </map>
1563 <key>ConsoleMaxLines</key> 1880 <key>ConsoleMaxLines</key>
1564 <map> 1881 <map>
1565 <key>Comment</key> 1882 <key>Comment</key>
1566 <string>Max number of lines of chat text visible in console.</string> 1883 <string>Max number of lines of chat text visible in console.</string>
1567 <key>Persist</key> 1884 <key>Persist</key>
1568 <integer>1</integer> 1885 <integer>1</integer>
1569 <key>Type</key> 1886 <key>Type</key>
1570 <string>S32</string> 1887 <string>S32</string>
1571 <key>Value</key> 1888 <key>Value</key>
1572 <integer>40</integer> 1889 <integer>40</integer>
1573 </map> 1890 </map>
1574 <key>ContactsTornOff</key> 1891 <key>ContactsTornOff</key>
1575 <map> 1892 <map>
1576 <key>Comment</key> 1893 <key>Comment</key>
1577 <string>Show contacts window separately from Communicate window.</string> 1894 <string>Show contacts window separately from Communicate window.</string>
1578 <key>Persist</key> 1895 <key>Persist</key>
1579 <integer>1</integer> 1896 <integer>1</integer>
1580 <key>Type</key> 1897 <key>Type</key>
1581 <string>Boolean</string> 1898 <string>Boolean</string>
1582 <key>Value</key> 1899 <key>Value</key>
1583 <integer>0</integer> 1900 <integer>0</integer>
1584 </map> 1901 </map>
1585 <key>CookiesEnabled</key> 1902 <key>CookiesEnabled</key>
1586 <map> 1903 <map>
1587 <key>Comment</key> 1904 <key>Comment</key>
1588 <string>Accept cookies from Web sites?</string> 1905 <string>Accept cookies from Web sites?</string>
1589 <key>Persist</key> 1906 <key>Persist</key>
1590 <integer>1</integer> 1907 <integer>1</integer>
1591 <key>Type</key> 1908 <key>Type</key>
1592 <string>Boolean</string> 1909 <string>Boolean</string>
1593 <key>Value</key> 1910 <key>Value</key>
1594 <integer>1</integer> 1911 <integer>1</integer>
1595 </map> 1912 </map>
1596 <key>CrashLogBehavior</key> 1913 <key>CrashLogBehavior</key>
1597 <map> 1914 <map>
1598 <key>Comment</key> 1915 <key>Comment</key>
1599 <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string> 1916 <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
1600 <key>Persist</key> 1917 <key>Persist</key>
1601 <integer>0</integer> 1918 <integer>0</integer>
1602 <key>Type</key> 1919 <key>Type</key>
1603 <string>S32</string> 1920 <string>S32</string>
1604 <key>Value</key> 1921 <key>Value</key>
1605 <integer>1</integer> 1922 <integer>1</integer>
1606 </map> 1923 </map>
1607 <key>CreateToolCopyCenters</key> 1924 <key>CreateToolCopyCenters</key>
1608 <map> 1925 <map>
1609 <key>Comment</key> 1926 <key>Comment</key>
1610 <string /> 1927 <string />
1611 <key>Persist</key> 1928 <key>Persist</key>
1612 <integer>0</integer> 1929 <integer>0</integer>
1613 <key>Type</key> 1930 <key>Type</key>
1614 <string>Boolean</string> 1931 <string>Boolean</string>
1615 <key>Value</key> 1932 <key>Value</key>
1616 <integer>1</integer> 1933 <integer>1</integer>
1617 </map> 1934 </map>
1618 <key>CreateToolCopyRotates</key> 1935 <key>CreateToolCopyRotates</key>
1619 <map> 1936 <map>
1620 <key>Comment</key> 1937 <key>Comment</key>
1621 <string /> 1938 <string />
1622 <key>Persist</key> 1939 <key>Persist</key>
1623 <integer>0</integer> 1940 <integer>0</integer>
1624 <key>Type</key> 1941 <key>Type</key>
1625 <string>Boolean</string> 1942 <string>Boolean</string>
1626 <key>Value</key> 1943 <key>Value</key>
1627 <integer>0</integer> 1944 <integer>0</integer>
1628 </map> 1945 </map>
1629 <key>CreateToolCopySelection</key> 1946 <key>CreateToolCopySelection</key>
1630 <map> 1947 <map>
1631 <key>Comment</key> 1948 <key>Comment</key>
1632 <string /> 1949 <string />
1633 <key>Persist</key> 1950 <key>Persist</key>
1634 <integer>0</integer> 1951 <integer>0</integer>
1635 <key>Type</key> 1952 <key>Type</key>
1636 <string>Boolean</string> 1953 <string>Boolean</string>
1637 <key>Value</key> 1954 <key>Value</key>
1638 <integer>0</integer> 1955 <integer>0</integer>
1639 </map> 1956 </map>
1640 <key>CreateToolKeepSelected</key> 1957 <key>CreateToolKeepSelected</key>
1641 <map> 1958 <map>
1642 <key>Comment</key> 1959 <key>Comment</key>
1643 <string>After using create tool, keep the create tool active</string> 1960 <string>After using create tool, keep the create tool active</string>
1644 <key>Persist</key> 1961 <key>Persist</key>
1645 <integer>1</integer> 1962 <integer>1</integer>
1646 <key>Type</key> 1963 <key>Type</key>
1647 <string>Boolean</string> 1964 <string>Boolean</string>
1648 <key>Value</key> 1965 <key>Value</key>
1649 <integer>0</integer> 1966 <integer>0</integer>
1650 </map> 1967 </map>
1968 <key>Cursor3D</key>
1969 <map>
1970 <key>Comment</key>
1971 <string>Tread Joystick values as absolute positions (not deltas).</string>
1972 <key>Persist</key>
1973 <integer>1</integer>
1974 <key>Type</key>
1975 <string>Boolean</string>
1976 <key>Value</key>
1977 <integer>1</integer>
1978 </map>
1651 <key>CustomServer</key> 1979 <key>CustomServer</key>
1652 <map> 1980 <map>
1653 <key>Comment</key> 1981 <key>Comment</key>
1654 <string>Specifies IP address or hostname of grid to which you connect</string> 1982 <string>Specifies IP address or hostname of grid to which you connect</string>
1655 <key>Persist</key> 1983 <key>Persist</key>
1656 <integer>1</integer> 1984 <integer>1</integer>
1657 <key>Type</key> 1985 <key>Type</key>
1658 <string>String</string> 1986 <string>String</string>
1659 <key>Value</key> 1987 <key>Value</key>
1660 <string /> 1988 <string />
1661 </map> 1989 </map>
1662 <key>DebugBeaconLineWidth</key> 1990 <key>DebugBeaconLineWidth</key>
1663 <map> 1991 <map>
1664 <key>Comment</key> 1992 <key>Comment</key>
1665 <string>Size of lines for Debug Beacons</string> 1993 <string>Size of lines for Debug Beacons</string>
1666 <key>Persist</key> 1994 <key>Persist</key>
1667 <integer>1</integer> 1995 <integer>1</integer>
1668 <key>Type</key> 1996 <key>Type</key>
1669 <string>S32</string> 1997 <string>S32</string>
1670 <key>Value</key> 1998 <key>Value</key>
1671 <integer>1</integer> 1999 <integer>1</integer>
1672 </map> 2000 </map>
1673 <key>DebugInventoryFilters</key> 2001 <key>DebugInventoryFilters</key>
1674 <map> 2002 <map>
1675 <key>Comment</key> 2003 <key>Comment</key>
1676 <string>Turn on debugging display for inventory filtering</string> 2004 <string>Turn on debugging display for inventory filtering</string>
1677 <key>Persist</key> 2005 <key>Persist</key>
1678 <integer>1</integer> 2006 <integer>1</integer>
1679 <key>Type</key> 2007 <key>Type</key>
1680 <string>Boolean</string> 2008 <string>Boolean</string>
1681 <key>Value</key> 2009 <key>Value</key>
1682 <integer>0</integer> 2010 <integer>0</integer>
1683 </map> 2011 </map>
1684 <key>DebugPermissions</key> 2012 <key>DebugPermissions</key>
1685 <map> 2013 <map>
1686 <key>Comment</key> 2014 <key>Comment</key>
1687 <string>Log permissions for selected inventory items</string> 2015 <string>Log permissions for selected inventory items</string>
1688 <key>Persist</key> 2016 <key>Persist</key>
1689 <integer>1</integer> 2017 <integer>1</integer>
1690 <key>Type</key> 2018 <key>Type</key>
1691 <string>Boolean</string> 2019 <string>Boolean</string>
1692 <key>Value</key> 2020 <key>Value</key>
1693 <integer>0</integer> 2021 <integer>0</integer>
1694 </map> 2022 </map>
1695 <key>DebugShowColor</key> 2023 <key>DebugShowColor</key>
1696 <map> 2024 <map>
1697 <key>Comment</key> 2025 <key>Comment</key>
1698 <string>Show color under cursor</string> 2026 <string>Show color under cursor</string>
1699 <key>Persist</key> 2027 <key>Persist</key>
1700 <integer>1</integer> 2028 <integer>1</integer>
1701 <key>Type</key> 2029 <key>Type</key>
1702 <string>Boolean</string> 2030 <string>Boolean</string>
1703 <key>Value</key> 2031 <key>Value</key>
1704 <integer>0</integer> 2032 <integer>0</integer>
1705 </map> 2033 </map>
1706 <key>DebugShowRenderInfo</key> 2034 <key>DebugShowRenderInfo</key>
1707 <map> 2035 <map>
1708 <key>Comment</key> 2036 <key>Comment</key>
1709 <string>Show depth buffer contents</string> 2037 <string>Show depth buffer contents</string>
1710 <key>Persist</key> 2038 <key>Persist</key>
1711 <integer>1</integer> 2039 <integer>1</integer>
1712 <key>Type</key> 2040 <key>Type</key>
1713 <string>Boolean</string> 2041 <string>Boolean</string>
1714 <key>Value</key> 2042 <key>Value</key>
1715 <integer>0</integer> 2043 <integer>0</integer>
1716 </map> 2044 </map>
1717 <key>DebugShowTime</key> 2045 <key>DebugShowTime</key>
1718 <map> 2046 <map>
1719 <key>Comment</key> 2047 <key>Comment</key>
1720 <string>Show depth buffer contents</string> 2048 <string>Show depth buffer contents</string>
1721 <key>Persist</key> 2049 <key>Persist</key>
1722 <integer>1</integer> 2050 <integer>1</integer>
1723 <key>Type</key> 2051 <key>Type</key>
1724 <string>Boolean</string> 2052 <string>Boolean</string>
1725 <key>Value</key> 2053 <key>Value</key>
1726 <integer>0</integer> 2054 <integer>0</integer>
1727 </map> 2055 </map>
1728 <key>DebugViews</key> 2056 <key>DebugViews</key>
1729 <map> 2057 <map>
1730 <key>Comment</key> 2058 <key>Comment</key>
1731 <string>Display debugging info for views.</string> 2059 <string>Display debugging info for views.</string>
1732 <key>Persist</key> 2060 <key>Persist</key>
1733 <integer>1</integer> 2061 <integer>1</integer>
1734 <key>Type</key> 2062 <key>Type</key>
1735 <string>Boolean</string> 2063 <string>Boolean</string>
1736 <key>Value</key> 2064 <key>Value</key>
1737 <integer>0</integer> 2065 <integer>0</integer>
1738 </map> 2066 </map>
1739 <key>DebugWindowProc</key> 2067 <key>DebugWindowProc</key>
1740 <map> 2068 <map>
1741 <key>Comment</key> 2069 <key>Comment</key>
1742 <string>Log windows messages</string> 2070 <string>Log windows messages</string>
1743 <key>Persist</key> 2071 <key>Persist</key>
1744 <integer>1</integer> 2072 <integer>1</integer>
1745 <key>Type</key> 2073 <key>Type</key>
1746 <string>Boolean</string> 2074 <string>Boolean</string>
1747 <key>Value</key> 2075 <key>Value</key>
1748 <integer>0</integer> 2076 <integer>0</integer>
1749 </map> 2077 </map>
1750 <key>DefaultObjectTexture</key> 2078 <key>DefaultObjectTexture</key>
1751 <map> 2079 <map>
1752 <key>Comment</key> 2080 <key>Comment</key>
1753 <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string> 2081 <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string>
1754 <key>Persist</key> 2082 <key>Persist</key>
1755 <integer>1</integer> 2083 <integer>1</integer>
1756 <key>Type</key> 2084 <key>Type</key>
1757 <string>String</string> 2085 <string>String</string>
1758 <key>Value</key> 2086 <key>Value</key>
1759 <string>89556747-24cb-43ed-920b-47caed15465f</string> 2087 <string>89556747-24cb-43ed-920b-47caed15465f</string>
1760 </map> 2088 </map>
1761 <key>DisableCameraConstraints</key> 2089 <key>DisableCameraConstraints</key>
1762 <map> 2090 <map>
1763 <key>Comment</key> 2091 <key>Comment</key>
1764 <string>Disable the normal bounds put on the camera by avatar position</string> 2092 <string>Disable the normal bounds put on the camera by avatar position</string>
1765 <key>Persist</key> 2093 <key>Persist</key>
1766 <integer>1</integer> 2094 <integer>1</integer>
1767 <key>Type</key> 2095 <key>Type</key>
1768 <string>Boolean</string> 2096 <string>Boolean</string>
1769 <key>Value</key> 2097 <key>Value</key>
1770 <integer>0</integer> 2098 <integer>0</integer>
1771 </map> 2099 </map>
1772 <key>DisableRendering</key> 2100 <key>DisableRendering</key>
1773 <map> 2101 <map>
1774 <key>Comment</key> 2102 <key>Comment</key>
1775 <string>Disable GL rendering and GUI (load testing)</string> 2103 <string>Disable GL rendering and GUI (load testing)</string>
1776 <key>Persist</key> 2104 <key>Persist</key>
1777 <integer>1</integer> 2105 <integer>1</integer>
1778 <key>Type</key> 2106 <key>Type</key>
1779 <string>Boolean</string> 2107 <string>Boolean</string>
1780 <key>Value</key> 2108 <key>Value</key>
1781 <integer>0</integer> 2109 <integer>0</integer>
1782 </map> 2110 </map>
1783 <key>DisableVerticalSync</key> 2111 <key>DisableVerticalSync</key>
1784 <map> 2112 <map>
1785 <key>Comment</key> 2113 <key>Comment</key>
1786 <string>Update frames as fast as possible (FALSE = update frames between display scans)</string> 2114 <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
1787 <key>Persist</key> 2115 <key>Persist</key>
1788 <integer>1</integer> 2116 <integer>1</integer>
1789 <key>Type</key> 2117 <key>Type</key>
1790 <string>Boolean</string> 2118 <string>Boolean</string>
1791 <key>Value</key> 2119 <key>Value</key>
1792 <integer>1</integer> 2120 <integer>1</integer>
1793 </map> 2121 </map>
1794 <key>DisplayAvatarAgentTarget</key> 2122 <key>DisplayAvatarAgentTarget</key>
1795 <map> 2123 <map>
1796 <key>Comment</key> 2124 <key>Comment</key>
1797 <string>Show avatar positioning locators (animation debug)</string> 2125 <string>Show avatar positioning locators (animation debug)</string>
1798 <key>Persist</key> 2126 <key>Persist</key>
1799 <integer>1</integer> 2127 <integer>1</integer>
1800 <key>Type</key> 2128 <key>Type</key>
1801 <string>Boolean</string> 2129 <string>Boolean</string>
1802 <key>Value</key> 2130 <key>Value</key>
1803 <integer>0</integer> 2131 <integer>0</integer>
1804 </map> 2132 </map>
1805 <key>DisplayChat</key> 2133 <key>DisplayChat</key>
1806 <map> 2134 <map>
1807 <key>Comment</key> 2135 <key>Comment</key>
1808 <string>Display Latest Chat message on LCD</string> 2136 <string>Display Latest Chat message on LCD</string>
1809 <key>Persist</key> 2137 <key>Persist</key>
1810 <integer>1</integer> 2138 <integer>1</integer>
1811 <key>Type</key> 2139 <key>Type</key>
1812 <string>Boolean</string> 2140 <string>Boolean</string>
1813 <key>Value</key> 2141 <key>Value</key>
1814 <integer>1</integer> 2142 <integer>1</integer>
1815 </map> 2143 </map>
1816 <key>DisplayDebug</key> 2144 <key>DisplayDebug</key>
1817 <map> 2145 <map>
1818 <key>Comment</key> 2146 <key>Comment</key>
1819 <string>Display Network Information on LCD</string> 2147 <string>Display Network Information on LCD</string>
1820 <key>Persist</key> 2148 <key>Persist</key>
1821 <integer>1</integer> 2149 <integer>1</integer>
1822 <key>Type</key> 2150 <key>Type</key>
1823 <string>Boolean</string> 2151 <string>Boolean</string>
1824 <key>Value</key> 2152 <key>Value</key>
1825 <integer>1</integer> 2153 <integer>1</integer>
1826 </map> 2154 </map>
1827 <key>DisplayDebugConsole</key> 2155 <key>DisplayDebugConsole</key>
1828 <map> 2156 <map>
1829 <key>Comment</key> 2157 <key>Comment</key>
1830 <string>Display Console Debug Information on LCD</string> 2158 <string>Display Console Debug Information on LCD</string>
1831 <key>Persist</key> 2159 <key>Persist</key>
1832 <integer>1</integer> 2160 <integer>1</integer>
1833 <key>Type</key> 2161 <key>Type</key>
1834 <string>Boolean</string> 2162 <string>Boolean</string>
1835 <key>Value</key> 2163 <key>Value</key>
1836 <integer>1</integer> 2164 <integer>1</integer>
1837 </map> 2165 </map>
1838 <key>DisplayIM</key> 2166 <key>DisplayIM</key>
1839 <map> 2167 <map>
1840 <key>Comment</key> 2168 <key>Comment</key>
1841 <string>Display Latest IM message on LCD</string> 2169 <string>Display Latest IM message on LCD</string>
1842 <key>Persist</key> 2170 <key>Persist</key>
1843 <integer>1</integer> 2171 <integer>1</integer>
1844 <key>Type</key> 2172 <key>Type</key>
1845 <string>Boolean</string> 2173 <string>Boolean</string>
1846 <key>Value</key> 2174 <key>Value</key>
1847 <integer>1</integer> 2175 <integer>1</integer>
1848 </map> 2176 </map>
1849 <key>DisplayLinden</key> 2177 <key>DisplayLinden</key>
1850 <map> 2178 <map>
1851 <key>Comment</key> 2179 <key>Comment</key>
1852 <string>Display Account Information on LCD</string> 2180 <string>Display Account Information on LCD</string>
1853 <key>Persist</key> 2181 <key>Persist</key>
1854 <integer>1</integer> 2182 <integer>1</integer>
1855 <key>Type</key> 2183 <key>Type</key>
1856 <string>Boolean</string> 2184 <string>Boolean</string>
1857 <key>Value</key> 2185 <key>Value</key>
1858 <integer>1</integer> 2186 <integer>1</integer>
1859 </map> 2187 </map>
1860 <key>DisplayRegion</key> 2188 <key>DisplayRegion</key>
1861 <map> 2189 <map>
1862 <key>Comment</key> 2190 <key>Comment</key>
1863 <string>Display Location information on LCD</string> 2191 <string>Display Location information on LCD</string>
1864 <key>Persist</key> 2192 <key>Persist</key>
1865 <integer>1</integer> 2193 <integer>1</integer>
1866 <key>Type</key> 2194 <key>Type</key>
1867 <string>Boolean</string> 2195 <string>Boolean</string>
1868 <key>Value</key> 2196 <key>Value</key>
1869 <integer>1</integer> 2197 <integer>1</integer>
1870 </map> 2198 </map>
1871 <key>DisplayTimecode</key> 2199 <key>DisplayTimecode</key>
1872 <map> 2200 <map>
1873 <key>Comment</key> 2201 <key>Comment</key>
1874 <string>Display timecode on screen</string> 2202 <string>Display timecode on screen</string>
1875 <key>Persist</key> 2203 <key>Persist</key>
1876 <integer>1</integer> 2204 <integer>1</integer>
1877 <key>Type</key> 2205 <key>Type</key>
1878 <string>Boolean</string> 2206 <string>Boolean</string>
1879 <key>Value</key> 2207 <key>Value</key>
1880 <integer>0</integer> 2208 <integer>0</integer>
1881 </map> 2209 </map>
1882 <key>Disregard128DefaultDrawDistance</key> 2210 <key>Disregard128DefaultDrawDistance</key>
1883 <map> 2211 <map>
1884 <key>Comment</key> 2212 <key>Comment</key>
1885 <string>Whether to use the auto default to 128 draw distance</string> 2213 <string>Whether to use the auto default to 128 draw distance</string>
1886 <key>Persist</key> 2214 <key>Persist</key>
1887 <integer>1</integer> 2215 <integer>1</integer>
1888 <key>Type</key> 2216 <key>Type</key>
1889 <string>Boolean</string> 2217 <string>Boolean</string>
1890 <key>Value</key> 2218 <key>Value</key>
1891 <integer>1</integer> 2219 <real>1.0</real>
1892 </map> 2220 </map>
1893 <key>Disregard96DefaultDrawDistance</key> 2221 <key>Disregard96DefaultDrawDistance</key>
1894 <map> 2222 <map>
1895 <key>Comment</key> 2223 <key>Comment</key>
1896 <string>Whether to use the auto default to 96 draw distance</string> 2224 <string>Whether to use the auto default to 96 draw distance</string>
1897 <key>Persist</key> 2225 <key>Persist</key>
1898 <integer>1</integer> 2226 <integer>1</integer>
1899 <key>Type</key> 2227 <key>Type</key>
1900 <string>Boolean</string> 2228 <string>Boolean</string>
1901 <key>Value</key> 2229 <key>Value</key>
1902 <integer>1</integer> 2230 <real>1.0</real>
1903 </map> 2231 </map>
1904 <key>DoubleClickAutoPilot</key> 2232 <key>DoubleClickAutoPilot</key>
1905 <map> 2233 <map>
1906 <key>Comment</key> 2234 <key>Comment</key>
1907 <string>Enable double-click auto pilot</string> 2235 <string>Enable double-click auto pilot</string>
1908 <key>Persist</key> 2236 <key>Persist</key>
1909 <integer>1</integer> 2237 <integer>1</integer>
1910 <key>Type</key> 2238 <key>Type</key>
1911 <string>Boolean</string> 2239 <string>Boolean</string>
1912 <key>Value</key> 2240 <key>Value</key>
1913 <integer>0</integer> 2241 <integer>0</integer>
1914 </map> 2242 </map>
1915 <key>DragAndDropToolTipDelay</key> 2243 <key>DragAndDropToolTipDelay</key>
1916 <map> 2244 <map>
1917 <key>Comment</key> 2245 <key>Comment</key>
1918 <string>Seconds before displaying tooltip when performing drag and drop operation</string> 2246 <string>Seconds before displaying tooltip when performing drag and drop operation</string>
1919 <key>Persist</key> 2247 <key>Persist</key>
1920 <integer>1</integer> 2248 <integer>1</integer>
1921 <key>Type</key> 2249 <key>Type</key>
1922 <string>F32</string> 2250 <string>F32</string>
1923 <key>Value</key> 2251 <key>Value</key>
1924 <real>0.1000000014901161193847656</real> 2252 <real>0.10000000149</real>
1925 </map> 2253 </map>
1926 <key>DropShadowButton</key> 2254 <key>DropShadowButton</key>
1927 <map> 2255 <map>
1928 <key>Comment</key> 2256 <key>Comment</key>
1929 <string>Drop shadow width for buttons (pixels)</string> 2257 <string>Drop shadow width for buttons (pixels)</string>
1930 <key>Persist</key> 2258 <key>Persist</key>
1931 <integer>1</integer> 2259 <integer>1</integer>
1932 <key>Type</key> 2260 <key>Type</key>
1933 <string>S32</string> 2261 <string>S32</string>
1934 <key>Value</key> 2262 <key>Value</key>
1935 <integer>2</integer> 2263 <integer>2</integer>
1936 </map> 2264 </map>
1937 <key>DropShadowFloater</key> 2265 <key>DropShadowFloater</key>
1938 <map> 2266 <map>
1939 <key>Comment</key> 2267 <key>Comment</key>
1940 <string>Drop shadow width for floaters (pixels)</string> 2268 <string>Drop shadow width for floaters (pixels)</string>
1941 <key>Persist</key> 2269 <key>Persist</key>
1942 <integer>1</integer> 2270 <integer>1</integer>
1943 <key>Type</key> 2271 <key>Type</key>
1944 <string>S32</string> 2272 <string>S32</string>
1945 <key>Value</key> 2273 <key>Value</key>
1946 <integer>5</integer> 2274 <integer>5</integer>
1947 </map> 2275 </map>
1948 <key>DropShadowSlider</key> 2276 <key>DropShadowSlider</key>
1949 <map> 2277 <map>
1950 <key>Comment</key> 2278 <key>Comment</key>
1951 <string>Drop shadow width for sliders (pixels)</string> 2279 <string>Drop shadow width for sliders (pixels)</string>
1952 <key>Persist</key> 2280 <key>Persist</key>
1953 <integer>1</integer> 2281 <integer>1</integer>
1954 <key>Type</key> 2282 <key>Type</key>
1955 <string>S32</string> 2283 <string>S32</string>
1956 <key>Value</key> 2284 <key>Value</key>
1957 <integer>3</integer> 2285 <integer>3</integer>
1958 </map> 2286 </map>
1959 <key>DropShadowTooltip</key> 2287 <key>DropShadowTooltip</key>
1960 <map> 2288 <map>
1961 <key>Comment</key> 2289 <key>Comment</key>
1962 <string>Drop shadow width for tooltips (pixels)</string> 2290 <string>Drop shadow width for tooltips (pixels)</string>
1963 <key>Persist</key> 2291 <key>Persist</key>
1964 <integer>1</integer> 2292 <integer>1</integer>
1965 <key>Type</key> 2293 <key>Type</key>
1966 <string>S32</string> 2294 <string>S32</string>
1967 <key>Value</key> 2295 <key>Value</key>
1968 <integer>4</integer> 2296 <integer>4</integer>
1969 </map> 2297 </map>
1970 <key>DynamicCameraStrength</key> 2298 <key>DynamicCameraStrength</key>
1971 <map> 2299 <map>
1972 <key>Comment</key> 2300 <key>Comment</key>
1973 <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string> 2301 <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
1974 <key>Persist</key> 2302 <key>Persist</key>
1975 <integer>1</integer> 2303 <integer>1</integer>
1976 <key>Type</key> 2304 <key>Type</key>
1977 <string>F32</string> 2305 <string>F32</string>
1978 <key>Value</key> 2306 <key>Value</key>
1979 <real>2</real> 2307 <real>2.0</real>
1980 </map> 2308 </map>
1981 <key>EditCameraMovement</key> 2309 <key>EditCameraMovement</key>
1982 <map> 2310 <map>
1983 <key>Comment</key> 2311 <key>Comment</key>
1984 <string>When entering build mode, camera moves up above avatar</string> 2312 <string>When entering build mode, camera moves up above avatar</string>
1985 <key>Persist</key> 2313 <key>Persist</key>
1986 <integer>1</integer> 2314 <integer>1</integer>
1987 <key>Type</key> 2315 <key>Type</key>
1988 <string>Boolean</string> 2316 <string>Boolean</string>
1989 <key>Value</key> 2317 <key>Value</key>
1990 <integer>0</integer> 2318 <integer>0</integer>
1991 </map> 2319 </map>
1992 <key>EditLinkedParts</key> 2320 <key>EditLinkedParts</key>
1993 <map> 2321 <map>
1994 <key>Comment</key> 2322 <key>Comment</key>
1995 <string>Select individual parts of linked objects</string> 2323 <string>Select individual parts of linked objects</string>
1996 <key>Persist</key> 2324 <key>Persist</key>
1997 <integer>0</integer> 2325 <integer>0</integer>
1998 <key>Type</key> 2326 <key>Type</key>
1999 <string>Boolean</string> 2327 <string>Boolean</string>
2000 <key>Value</key> 2328 <key>Value</key>
2001 <integer>0</integer> 2329 <integer>0</integer>
2002 </map> 2330 </map>
2003 <key>EffectColor</key> 2331 <key>EffectColor</key>
2004 <map> 2332 <map>
2005 <key>Comment</key> 2333 <key>Comment</key>
2006 <string>Particle effects color</string> 2334 <string>Particle effects color</string>
2007 <key>Persist</key> 2335 <key>Persist</key>
2008 <integer>1</integer> 2336 <integer>1</integer>
2009 <key>Type</key> 2337 <key>Type</key>
2010 <string>Color4</string> 2338 <string>Color4</string>
2011 <key>Value</key> 2339 <key>Value</key>
2012 <array> 2340 <array>
2013 <real>1</real> 2341 <real>1.0</real>
2014 <real>1</real> 2342 <real>1.0</real>
2015 <real>1</real> 2343 <real>1.0</real>
2016 <real>1</real> 2344 <real>1.0</real>
2017 </array> 2345 </array>
2018 </map> 2346 </map>
2019 <key>EnablePushToTalk</key> 2347 <key>EnablePushToTalk</key>
2020 <map> 2348 <map>
2021 <key>Comment</key> 2349 <key>Comment</key>
2022 <string>Must hold down a key or moouse button when talking into your microphone</string> 2350 <string>Must hold down a key or moouse button when talking into your microphone</string>
2023 <key>Persist</key> 2351 <key>Persist</key>
2024 <integer>1</integer> 2352 <integer>1</integer>
2025 <key>Type</key> 2353 <key>Type</key>
2026 <string>Boolean</string> 2354 <string>Boolean</string>
2027 <key>Value</key> 2355 <key>Value</key>
2028 <integer>1</integer> 2356 <integer>1</integer>
2029 </map> 2357 </map>
2358 <key>EnableRippleWater</key>
2359 <map>
2360 <key>Comment</key>
2361 <string>Whether to use ripple water shader or not</string>
2362 <key>Persist</key>
2363 <integer>1</integer>
2364 <key>Type</key>
2365 <string>Boolean</string>
2366 <key>Value</key>
2367 <integer>1</integer>
2368 </map>
2030 <key>EnableVoiceChat</key> 2369 <key>EnableVoiceChat</key>
2031 <map> 2370 <map>
2032 <key>Comment</key> 2371 <key>Comment</key>
2033 <string>Enable talking to other residents with a microphone</string> 2372 <string>Enable talking to other residents with a microphone</string>
2034 <key>Persist</key> 2373 <key>Persist</key>
2035 <integer>1</integer> 2374 <integer>1</integer>
2036 <key>Type</key> 2375 <key>Type</key>
2037 <string>Boolean</string> 2376 <string>Boolean</string>
2038 <key>Value</key> 2377 <key>Value</key>
2039 <integer>1</integer> 2378 <integer>1</integer>
2040 </map> 2379 </map>
2041 <key>EnergyFromTop</key> 2380 <key>EnergyFromTop</key>
2042 <map> 2381 <map>
2043 <key>Comment</key> 2382 <key>Comment</key>
2044 <string /> 2383 <string />
2045 <key>Persist</key> 2384 <key>Persist</key>
2046 <integer>0</integer> 2385 <integer>0</integer>
2047 <key>Type</key> 2386 <key>Type</key>
2048 <string>S32</string> 2387 <string>S32</string>
2049 <key>Value</key> 2388 <key>Value</key>
2050 <integer>20</integer> 2389 <integer>20</integer>
2051 </map> 2390 </map>
2052 <key>EnergyHeight</key> 2391 <key>EnergyHeight</key>
2053 <map> 2392 <map>
2054 <key>Comment</key> 2393 <key>Comment</key>
2055 <string /> 2394 <string />
2056 <key>Persist</key> 2395 <key>Persist</key>
2057 <integer>0</integer> 2396 <integer>0</integer>
2058 <key>Type</key> 2397 <key>Type</key>
2059 <string>S32</string> 2398 <string>S32</string>
2060 <key>Value</key> 2399 <key>Value</key>
2061 <integer>40</integer> 2400 <integer>40</integer>
2062 </map> 2401 </map>
2063 <key>EnergyWidth</key> 2402 <key>EnergyWidth</key>
2064 <map> 2403 <map>
2065 <key>Comment</key> 2404 <key>Comment</key>
2066 <string /> 2405 <string />
2067 <key>Persist</key> 2406 <key>Persist</key>
2068 <integer>0</integer> 2407 <integer>0</integer>
2069 <key>Type</key> 2408 <key>Type</key>
2070 <string>S32</string> 2409 <string>S32</string>
2071 <key>Value</key> 2410 <key>Value</key>
2072 <integer>175</integer> 2411 <integer>175</integer>
2073 </map> 2412 </map>
2413 <key>FPSLogFrequency</key>
2414 <map>
2415 <key>Comment</key>
2416 <string>Seconds between display of FPS in log (0 for never)</string>
2417 <key>Persist</key>
2418 <integer>1</integer>
2419 <key>Type</key>
2420 <string>F32</string>
2421 <key>Value</key>
2422 <real>10.0</real>
2423 </map>
2074 <key>FilterItemsPerFrame</key> 2424 <key>FilterItemsPerFrame</key>
2075 <map> 2425 <map>
2076 <key>Comment</key> 2426 <key>Comment</key>
2077 <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string> 2427 <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
2078 <key>Persist</key> 2428 <key>Persist</key>
2079 <integer>1</integer> 2429 <integer>1</integer>
2080 <key>Type</key> 2430 <key>Type</key>
2081 <string>S32</string> 2431 <string>S32</string>
2082 <key>Value</key> 2432 <key>Value</key>
2083 <integer>500</integer> 2433 <integer>500</integer>
2084 </map> 2434 </map>
2085 <key>FindLandArea</key> 2435 <key>FindLandArea</key>
2086 <map> 2436 <map>
2087 <key>Comment</key> 2437 <key>Comment</key>
2088 <string>Enables filtering of land search results by area</string> 2438 <string>Enables filtering of land search results by area</string>
2089 <key>Persist</key> 2439 <key>Persist</key>
2090 <integer>1</integer> 2440 <integer>1</integer>
2091 <key>Type</key> 2441 <key>Type</key>
2092 <string>Boolean</string> 2442 <string>Boolean</string>
2093 <key>Value</key> 2443 <key>Value</key>
2094 <integer>0</integer> 2444 <integer>0</integer>
2095 </map> 2445 </map>
2096 <key>FindLandPrice</key> 2446 <key>FindLandPrice</key>
2097 <map> 2447 <map>
2098 <key>Comment</key> 2448 <key>Comment</key>
2099 <string>Enables filtering of land search results by price</string> 2449 <string>Enables filtering of land search results by price</string>
2100 <key>Persist</key> 2450 <key>Persist</key>
2101 <integer>1</integer> 2451 <integer>1</integer>
2102 <key>Type</key> 2452 <key>Type</key>
2103 <string>Boolean</string> 2453 <string>Boolean</string>
2104 <key>Value</key> 2454 <key>Value</key>
2105 <integer>1</integer> 2455 <integer>1</integer>
2106 </map> 2456 </map>
2107 <key>FindLandType</key> 2457 <key>FindLandType</key>
2108 <map> 2458 <map>
2109 <key>Comment</key> 2459 <key>Comment</key>
2110 <string>Controls which type of land you are searching for in Find Land interface (&quot;All&quot;, &quot;Auction&quot;, &quot;For Sale&quot;)</string> 2460 <string>Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale")</string>
2111 <key>Persist</key> 2461 <key>Persist</key>
2112 <integer>1</integer> 2462 <integer>1</integer>
2113 <key>Type</key> 2463 <key>Type</key>
2114 <string>String</string> 2464 <string>String</string>
2115 <key>Value</key> 2465 <key>Value</key>
2116 <string>All</string> 2466 <string>All</string>
2117 </map> 2467 </map>
2118 <key>FindPeopleOnline</key> 2468 <key>FindPeopleOnline</key>
2119 <map> 2469 <map>
2120 <key>Comment</key> 2470 <key>Comment</key>
2121 <string>Limits people search to only users who are logged on</string> 2471 <string>Limits people search to only users who are logged on</string>
2122 <key>Persist</key> 2472 <key>Persist</key>
2123 <integer>1</integer> 2473 <integer>1</integer>
2124 <key>Type</key> 2474 <key>Type</key>
2125 <string>Boolean</string> 2475 <string>Boolean</string>
2126 <key>Value</key> 2476 <key>Value</key>
2127 <integer>1</integer> 2477 <integer>1</integer>
2128 </map> 2478 </map>
2129 <key>FindPlacesPictures</key> 2479 <key>FindPlacesPictures</key>
2130 <map> 2480 <map>
2131 <key>Comment</key> 2481 <key>Comment</key>
2132 <string>Display only results of find places that have pictures</string> 2482 <string>Display only results of find places that have pictures</string>
2133 <key>Persist</key> 2483 <key>Persist</key>
2134 <integer>1</integer> 2484 <integer>1</integer>
2135 <key>Type</key> 2485 <key>Type</key>
2136 <string>Boolean</string> 2486 <string>Boolean</string>
2137 <key>Value</key> 2487 <key>Value</key>
2138 <integer>1</integer> 2488 <integer>1</integer>
2139 </map> 2489 </map>
2140 <key>FirstLoginThisInstall</key> 2490 <key>FirstLoginThisInstall</key>
2141 <map> 2491 <map>
2142 <key>Comment</key> 2492 <key>Comment</key>
2143 <string>Specifies that you have not successfully logged in since you installed the latest update</string> 2493 <string>Specifies that you have not successfully logged in since you installed the latest update</string>
2144 <key>Persist</key> 2494 <key>Persist</key>
2145 <integer>1</integer> 2495 <integer>1</integer>
2146 <key>Type</key> 2496 <key>Type</key>
2147 <string>Boolean</string> 2497 <string>Boolean</string>
2148 <key>Value</key> 2498 <key>Value</key>
2149 <integer>1</integer> 2499 <integer>1</integer>
2150 </map> 2500 </map>
2151 <key>FirstName</key> 2501 <key>FirstName</key>
2152 <map> 2502 <map>
2153 <key>Comment</key> 2503 <key>Comment</key>
2154 <string>Login first name</string> 2504 <string>Login first name</string>
2155 <key>Persist</key> 2505 <key>Persist</key>
2156 <integer>1</integer> 2506 <integer>1</integer>
2157 <key>Type</key> 2507 <key>Type</key>
2158 <string>String</string> 2508 <string>String</string>
2159 <key>Value</key> 2509 <key>Value</key>
2160 <string /> 2510 <string />
2161 </map> 2511 </map>
2162 <key>FirstPersonAvatarVisible</key> 2512 <key>FirstPersonAvatarVisible</key>
2163 <map> 2513 <map>
2164 <key>Comment</key> 2514 <key>Comment</key>
2165 <string>Display avatar and attachments below neck while in mouselook</string> 2515 <string>Display avatar and attachments below neck while in mouselook</string>
2166 <key>Persist</key> 2516 <key>Persist</key>
2167 <integer>1</integer> 2517 <integer>1</integer>
2168 <key>Type</key> 2518 <key>Type</key>
2169 <string>Boolean</string> 2519 <string>Boolean</string>
2170 <key>Value</key> 2520 <key>Value</key>
2171 <integer>0</integer> 2521 <integer>0</integer>
2172 </map> 2522 </map>
2173 <key>FirstPersonBtnState</key> 2523 <key>FirstPersonBtnState</key>
2174 <map> 2524 <map>
2175 <key>Comment</key> 2525 <key>Comment</key>
2176 <string /> 2526 <string />
2177 <key>Persist</key> 2527 <key>Persist</key>
2178 <integer>0</integer> 2528 <integer>0</integer>
2179 <key>Type</key> 2529 <key>Type</key>
2180 <string>Boolean</string> 2530 <string>Boolean</string>
2181 <key>Value</key> 2531 <key>Value</key>
2182 <integer>0</integer> 2532 <integer>0</integer>
2183 </map> 2533 </map>
2184 <key>FirstRunThisInstall</key> 2534 <key>FirstRunThisInstall</key>
2185 <map> 2535 <map>
2186 <key>Comment</key> 2536 <key>Comment</key>
2187 <string>Specifies that you have not run the viewer since you installed the latest update</string> 2537 <string>Specifies that you have not run the viewer since you installed the latest update</string>
2188 <key>Persist</key> 2538 <key>Persist</key>
2189 <integer>1</integer> 2539 <integer>1</integer>
2190 <key>Type</key> 2540 <key>Type</key>
2191 <string>Boolean</string> 2541 <string>Boolean</string>
2192 <key>Value</key> 2542 <key>Value</key>
2193 <integer>1</integer> 2543 <integer>1</integer>
2194 </map> 2544 </map>
2195 <key>FixedWeather</key> 2545 <key>FixedWeather</key>
2196 <map> 2546 <map>
2197 <key>Comment</key> 2547 <key>Comment</key>
2198 <string>Weather effects do not change over time</string> 2548 <string>Weather effects do not change over time</string>
2199 <key>Persist</key> 2549 <key>Persist</key>
2200 <integer>1</integer> 2550 <integer>1</integer>
2201 <key>Type</key> 2551 <key>Type</key>
2202 <string>Boolean</string> 2552 <string>Boolean</string>
2203 <key>Value</key> 2553 <key>Value</key>
2204 <integer>0</integer> 2554 <integer>0</integer>
2205 </map> 2555 </map>
2206 <key>FloaterAboutRect</key> 2556 <key>FloaterAboutRect</key>
2207 <map> 2557 <map>
2208 <key>Comment</key> 2558 <key>Comment</key>
2209 <string>Rectangle for About window</string> 2559 <string>Rectangle for About window</string>
2210 <key>Persist</key> 2560 <key>Persist</key>
2211 <integer>1</integer> 2561 <integer>1</integer>
2212 <key>Type</key> 2562 <key>Type</key>
2213 <string>Rect</string> 2563 <string>Rect</string>
2214 <key>Value</key> 2564 <key>Value</key>
2215 <array> 2565 <array>
2216 <integer>0</integer> 2566 <integer>0</integer>
2217 <integer>440</integer> 2567 <integer>440</integer>
2218 <integer>470</integer> 2568 <integer>470</integer>
2219 <integer>0</integer> 2569 <integer>0</integer>
2220 </array> 2570 </array>
2221 </map> 2571 </map>
2222 <key>FloaterActiveSpeakersRect</key> 2572 <key>FloaterActiveSpeakersRect</key>
2223 <map> 2573 <map>
2224 <key>Comment</key> 2574 <key>Comment</key>
2225 <string>Rectangle for active speakers window</string> 2575 <string>Rectangle for active speakers window</string>
2226 <key>Persist</key> 2576 <key>Persist</key>
2227 <integer>1</integer> 2577 <integer>1</integer>
2228 <key>Type</key> 2578 <key>Type</key>
2229 <string>Rect</string> 2579 <string>Rect</string>
2230 <key>Value</key> 2580 <key>Value</key>
2231 <array> 2581 <array>
2232 <integer>0</integer> 2582 <integer>0</integer>
2233 <integer>300</integer> 2583 <integer>300</integer>
2234 <integer>250</integer> 2584 <integer>250</integer>
2235 <integer>0</integer> 2585 <integer>0</integer>
2236 </array> 2586 </array>
2237 </map> 2587 </map>
2238 <key>FloaterActiveSpeakersSortColumn</key>
2239 <map>
2240 <key>Comment</key>
2241 <string>Column name to sort on</string>
2242 <key>Persist</key>
2243 <integer>1</integer>
2244 <key>Type</key>
2245 <string>String</string>
2246 <key>Value</key>
2247 <string>speaker_name</string>
2248 </map>
2249 <key>FloaterActiveSpeakersSortAscending</key> 2588 <key>FloaterActiveSpeakersSortAscending</key>
2250 <map> 2589 <map>
2251 <key>Comment</key> 2590 <key>Comment</key>
2252 <string>Whether to sort up or down</string> 2591 <string>Whether to sort up or down</string>
2253 <key>Persist</key> 2592 <key>Persist</key>
2254 <integer>1</integer> 2593 <integer>1</integer>
2255 <key>Type</key> 2594 <key>Type</key>
2256 <string>Boolean</string> 2595 <string>Boolean</string>
2257 <key>Value</key> 2596 <key>Value</key>
2258 <integer>0</integer> 2597 <integer>0</integer>
2259 </map> 2598 </map>
2599 <key>FloaterActiveSpeakersSortColumn</key>
2600 <map>
2601 <key>Comment</key>
2602 <string>Column name to sort on</string>
2603 <key>Persist</key>
2604 <integer>1</integer>
2605 <key>Type</key>
2606 <string>String</string>
2607 <key>Value</key>
2608 <string>speaker_name</string>
2609 </map>
2610 <key>FloaterAdvancedSkyRect</key>
2611 <map>
2612 <key>Comment</key>
2613 <string>Rectangle for Advanced Sky Editor</string>
2614 <key>Persist</key>
2615 <integer>1</integer>
2616 <key>Type</key>
2617 <string>Rect</string>
2618 <key>Value</key>
2619 <array>
2620 <integer>50</integer>
2621 <integer>220</integer>
2622 <integer>450</integer>
2623 <integer>0</integer>
2624 </array>
2625 </map>
2626 <key>FloaterAdvancedWaterRect</key>
2627 <map>
2628 <key>Comment</key>
2629 <string>Rectangle for Advanced Water Editor</string>
2630 <key>Persist</key>
2631 <integer>1</integer>
2632 <key>Type</key>
2633 <string>Rect</string>
2634 <key>Value</key>
2635 <array>
2636 <integer>50</integer>
2637 <integer>220</integer>
2638 <integer>450</integer>
2639 <integer>0</integer>
2640 </array>
2641 </map>
2260 <key>FloaterAudioVolumeRect</key> 2642 <key>FloaterAudioVolumeRect</key>
2261 <map> 2643 <map>
2262 <key>Comment</key> 2644 <key>Comment</key>
2263 <string>Rectangle for Audio Volume window</string> 2645 <string>Rectangle for Audio Volume window</string>
2264 <key>Persist</key> 2646 <key>Persist</key>
2265 <integer>1</integer> 2647 <integer>1</integer>
2266 <key>Type</key> 2648 <key>Type</key>
2267 <string>Rect</string> 2649 <string>Rect</string>
2268 <key>Value</key> 2650 <key>Value</key>
2269 <array> 2651 <array>
2270 <integer>0</integer> 2652 <integer>0</integer>
2271 <integer>440</integer> 2653 <integer>440</integer>
2272 <integer>470</integer> 2654 <integer>470</integer>
2273 <integer>0</integer> 2655 <integer>0</integer>
2274 </array> 2656 </array>
2275 </map> 2657 </map>
2276 <key>FloaterBuildOptionsRect</key> 2658 <key>FloaterBuildOptionsRect</key>
2277 <map> 2659 <map>
2278 <key>Comment</key> 2660 <key>Comment</key>
2279 <string>Rectangle for build options window.</string> 2661 <string>Rectangle for build options window.</string>
2280 <key>Persist</key> 2662 <key>Persist</key>
2281 <integer>1</integer> 2663 <integer>1</integer>
2282 <key>Type</key> 2664 <key>Type</key>
2283 <string>Rect</string> 2665 <string>Rect</string>
2284 <key>Value</key> 2666 <key>Value</key>
2285 <array> 2667 <array>
2286 <integer>0</integer> 2668 <integer>0</integer>
2287 <integer>0</integer> 2669 <integer>0</integer>
2288 <integer>0</integer> 2670 <integer>0</integer>
2289 <integer>0</integer> 2671 <integer>0</integer>
2290 </array> 2672 </array>
2291 </map> 2673 </map>
2292 <key>FloaterBumpRect</key> 2674 <key>FloaterBumpRect</key>
2293 <map> 2675 <map>
2294 <key>Comment</key> 2676 <key>Comment</key>
2295 <string>Rectangle for Bumps/Hits window</string> 2677 <string>Rectangle for Bumps/Hits window</string>
2296 <key>Persist</key> 2678 <key>Persist</key>
2297 <integer>1</integer> 2679 <integer>1</integer>
2298 <key>Type</key> 2680 <key>Type</key>
2299 <string>Rect</string> 2681 <string>Rect</string>
2300 <key>Value</key> 2682 <key>Value</key>
2301 <array> 2683 <array>
2302 <integer>0</integer> 2684 <integer>0</integer>
2303 <integer>180</integer> 2685 <integer>180</integer>
2304 <integer>400</integer> 2686 <integer>400</integer>
2305 <integer>0</integer> 2687 <integer>0</integer>
2306 </array> 2688 </array>
2307 </map> 2689 </map>
2308 <key>FloaterBuyContentsRect</key> 2690 <key>FloaterBuyContentsRect</key>
2309 <map> 2691 <map>
2310 <key>Comment</key> 2692 <key>Comment</key>
2311 <string>Rectangle for Buy Contents window</string> 2693 <string>Rectangle for Buy Contents window</string>
2312 <key>Persist</key> 2694 <key>Persist</key>
2313 <integer>1</integer> 2695 <integer>1</integer>
2314 <key>Type</key> 2696 <key>Type</key>
2315 <string>Rect</string> 2697 <string>Rect</string>
2316 <key>Value</key> 2698 <key>Value</key>
2317 <array> 2699 <array>
2318 <integer>0</integer> 2700 <integer>0</integer>
2319 <integer>250</integer> 2701 <integer>250</integer>
2320 <integer>300</integer> 2702 <integer>300</integer>
2321 <integer>0</integer> 2703 <integer>0</integer>
2322 </array> 2704 </array>
2323 </map> 2705 </map>
2324 <key>FloaterBuyRect</key> 2706 <key>FloaterBuyRect</key>
2325 <map> 2707 <map>
2326 <key>Comment</key> 2708 <key>Comment</key>
2327 <string>Rectangle for buy window</string> 2709 <string>Rectangle for buy window</string>
2328 <key>Persist</key> 2710 <key>Persist</key>
2329 <integer>1</integer> 2711 <integer>1</integer>
2330 <key>Type</key> 2712 <key>Type</key>
2331 <string>Rect</string> 2713 <string>Rect</string>
2332 <key>Value</key> 2714 <key>Value</key>
2333 <array> 2715 <array>
2334 <integer>0</integer> 2716 <integer>0</integer>
2335 <integer>250</integer> 2717 <integer>250</integer>
2336 <integer>300</integer> 2718 <integer>300</integer>
2337 <integer>0</integer> 2719 <integer>0</integer>
2338 </array> 2720 </array>
2339 </map> 2721 </map>
2340 <key>FloaterCameraRect3</key> 2722 <key>FloaterCameraRect3</key>
2341 <map> 2723 <map>
2342 <key>Comment</key> 2724 <key>Comment</key>
2343 <string>Rectangle for camera control window</string> 2725 <string>Rectangle for camera control window</string>
2344 <key>Persist</key> 2726 <key>Persist</key>
2345 <integer>1</integer> 2727 <integer>1</integer>
2346 <key>Type</key> 2728 <key>Type</key>
2347 <string>Rect</string> 2729 <string>Rect</string>
2348 <key>Value</key> 2730 <key>Value</key>
2349 <array> 2731 <array>
2350 <integer>0</integer> 2732 <integer>0</integer>
2351 <integer>64</integer> 2733 <integer>64</integer>
2352 <integer>176</integer> 2734 <integer>176</integer>
2353 <integer>0</integer> 2735 <integer>0</integer>
2354 </array> 2736 </array>
2355 </map> 2737 </map>
2356 <key>FloaterChatRect</key> 2738 <key>FloaterChatRect</key>
2357 <map> 2739 <map>
2358 <key>Comment</key> 2740 <key>Comment</key>
2359 <string>Rectangle for chat history</string> 2741 <string>Rectangle for chat history</string>
2360 <key>Persist</key> 2742 <key>Persist</key>
2361 <integer>1</integer> 2743 <integer>1</integer>
2362 <key>Type</key> 2744 <key>Type</key>
2363 <string>Rect</string> 2745 <string>Rect</string>
2364 <key>Value</key> 2746 <key>Value</key>
2365 <array> 2747 <array>
2366 <integer>0</integer> 2748 <integer>0</integer>
2367 <integer>172</integer> 2749 <integer>172</integer>
2368 <integer>500</integer> 2750 <integer>500</integer>
2369 <integer>0</integer> 2751 <integer>0</integer>
2370 </array> 2752 </array>
2371 </map> 2753 </map>
2372 <key>FloaterClothingRect</key> 2754 <key>FloaterClothingRect</key>
2373 <map> 2755 <map>
2374 <key>Comment</key> 2756 <key>Comment</key>
2375 <string>Rectangle for clothing window</string> 2757 <string>Rectangle for clothing window</string>
2376 <key>Persist</key> 2758 <key>Persist</key>
2377 <integer>1</integer> 2759 <integer>1</integer>
2378 <key>Type</key> 2760 <key>Type</key>
2379 <string>Rect</string> 2761 <string>Rect</string>
2380 <key>Value</key> 2762 <key>Value</key>
2381 <array> 2763 <array>
2382 <integer>0</integer> 2764 <integer>0</integer>
2383 <integer>480</integer> 2765 <integer>480</integer>
2384 <integer>320</integer> 2766 <integer>320</integer>
2385 <integer>0</integer> 2767 <integer>0</integer>
2386 </array> 2768 </array>
2387 </map> 2769 </map>
2388 <key>FloaterContactsRect</key> 2770 <key>FloaterContactsRect</key>
2389 <map> 2771 <map>
2390 <key>Comment</key> 2772 <key>Comment</key>
2391 <string>Rectangle for chat history</string> 2773 <string>Rectangle for chat history</string>
2392 <key>Persist</key> 2774 <key>Persist</key>
2393 <integer>1</integer> 2775 <integer>1</integer>
2394 <key>Type</key> 2776 <key>Type</key>
2395 <string>Rect</string> 2777 <string>Rect</string>
2396 <key>Value</key> 2778 <key>Value</key>
2397 <array> 2779 <array>
2398 <integer>0</integer> 2780 <integer>0</integer>
2399 <integer>390</integer> 2781 <integer>390</integer>
2400 <integer>395</integer> 2782 <integer>395</integer>
2401 <integer>0</integer> 2783 <integer>0</integer>
2402 </array> 2784 </array>
2403 </map> 2785 </map>
2404 <key>FloaterCustomizeAppearanceRect</key> 2786 <key>FloaterCustomizeAppearanceRect</key>
2405 <map> 2787 <map>
2406 <key>Comment</key> 2788 <key>Comment</key>
2407 <string>Rectangle for avatar customization window</string> 2789 <string>Rectangle for avatar customization window</string>
2408 <key>Persist</key> 2790 <key>Persist</key>
2409 <integer>1</integer> 2791 <integer>1</integer>
2410 <key>Type</key> 2792 <key>Type</key>
2411 <string>Rect</string> 2793 <string>Rect</string>
2412 <key>Value</key> 2794 <key>Value</key>
2413 <array> 2795 <array>
2414 <integer>0</integer> 2796 <integer>0</integer>
2415 <integer>540</integer> 2797 <integer>540</integer>
2416 <integer>494</integer> 2798 <integer>494</integer>
2417 <integer>0</integer> 2799 <integer>0</integer>
2418 </array> 2800 </array>
2419 </map> 2801 </map>
2802 <key>FloaterDayCycleRect</key>
2803 <map>
2804 <key>Comment</key>
2805 <string>Rectangle for Day Cycle Editor</string>
2806 <key>Persist</key>
2807 <integer>1</integer>
2808 <key>Type</key>
2809 <string>Rect</string>
2810 <key>Value</key>
2811 <array>
2812 <integer>50</integer>
2813 <integer>450</integer>
2814 <integer>300</integer>
2815 <integer>0</integer>
2816 </array>
2817 </map>
2818 <key>FloaterEnvRect</key>
2819 <map>
2820 <key>Comment</key>
2821 <string>Rectangle for Environment Editor</string>
2822 <key>Persist</key>
2823 <integer>1</integer>
2824 <key>Type</key>
2825 <string>Rect</string>
2826 <key>Value</key>
2827 <array>
2828 <integer>50</integer>
2829 <integer>150</integer>
2830 <integer>650</integer>
2831 <integer>0</integer>
2832 </array>
2833 </map>
2420 <key>FloaterFindRect2</key> 2834 <key>FloaterFindRect2</key>
2421 <map> 2835 <map>
2422 <key>Comment</key> 2836 <key>Comment</key>
2423 <string>Rectangle for Find window</string> 2837 <string>Rectangle for Find window</string>
2424 <key>Persist</key> 2838 <key>Persist</key>
2425 <integer>1</integer> 2839 <integer>1</integer>
2426 <key>Type</key> 2840 <key>Type</key>
2427 <string>Rect</string> 2841 <string>Rect</string>
2428 <key>Value</key> 2842 <key>Value</key>
2429 <array> 2843 <array>
2430 <integer>0</integer> 2844 <integer>0</integer>
2431 <integer>570</integer> 2845 <integer>570</integer>
2432 <integer>780</integer> 2846 <integer>780</integer>
2433 <integer>0</integer> 2847 <integer>0</integer>
2434 </array> 2848 </array>
2435 </map> 2849 </map>
2436 <key>FloaterFriendsRect</key> 2850 <key>FloaterFriendsRect</key>
2437 <map> 2851 <map>
2438 <key>Comment</key> 2852 <key>Comment</key>
2439 <string>Rectangle for friends window</string> 2853 <string>Rectangle for friends window</string>
2440 <key>Persist</key> 2854 <key>Persist</key>
2441 <integer>1</integer> 2855 <integer>1</integer>
2442 <key>Type</key> 2856 <key>Type</key>
2443 <string>Rect</string> 2857 <string>Rect</string>
2444 <key>Value</key> 2858 <key>Value</key>
2445 <array> 2859 <array>
2446 <integer>0</integer> 2860 <integer>0</integer>
2447 <integer>400</integer> 2861 <integer>400</integer>
2448 <integer>250</integer> 2862 <integer>250</integer>
2449 <integer>0</integer> 2863 <integer>0</integer>
2450 </array> 2864 </array>
2451 </map> 2865 </map>
2452 <key>FloaterGestureRect2</key> 2866 <key>FloaterGestureRect2</key>
2453 <map> 2867 <map>
2454 <key>Comment</key> 2868 <key>Comment</key>
2455 <string>Rectangle for gestures window</string> 2869 <string>Rectangle for gestures window</string>
2456 <key>Persist</key> 2870 <key>Persist</key>
2457 <integer>1</integer> 2871 <integer>1</integer>
2458 <key>Type</key> 2872 <key>Type</key>
2459 <string>Rect</string> 2873 <string>Rect</string>
2460 <key>Value</key> 2874 <key>Value</key>
2461 <array> 2875 <array>
2462 <integer>0</integer> 2876 <integer>0</integer>
2463 <integer>465</integer> 2877 <integer>465</integer>
2464 <integer>350</integer> 2878 <integer>350</integer>
2465 <integer>0</integer> 2879 <integer>0</integer>
2466 </array> 2880 </array>
2467 </map> 2881 </map>
2468 <key>FloaterHtmlRect</key>
2469 <map>
2470 <key>Comment</key>
2471 <string>Rectangle for HTML window</string>
2472 <key>Persist</key>
2473 <integer>1</integer>
2474 <key>Type</key>
2475 <string>Rect</string>
2476 <key>Value</key>
2477 <array>
2478 <integer>100</integer>
2479 <integer>460</integer>
2480 <integer>370</integer>
2481 <integer>100</integer>
2482 </array>
2483 </map>
2484 <key>FloaterHUDRect</key> 2882 <key>FloaterHUDRect</key>
2485 <map> 2883 <map>
2486 <key>Comment</key> 2884 <key>Comment</key>
2487 <string>Rectangle for HUD Floater window</string> 2885 <string>Rectangle for HUD Floater window</string>
2488 <key>Persist</key> 2886 <key>Persist</key>
2489 <integer>1</integer> 2887 <integer>1</integer>
2490 <key>Type</key> 2888 <key>Type</key>
2491 <string>Rect</string> 2889 <string>Rect</string>
2492 <key>Value</key> 2890 <key>Value</key>
2493 <array> 2891 <array>
2494 <integer>0</integer> 2892 <integer>0</integer>
2495 <integer>282</integer> 2893 <integer>282</integer>
2496 <integer>342</integer> 2894 <integer>342</integer>
2497 <integer>0</integer> 2895 <integer>0</integer>
2498 </array> 2896 </array>
2499 </map> 2897 </map>
2898 <key>FloaterHtmlRect</key>
2899 <map>
2900 <key>Comment</key>
2901 <string>Rectangle for HTML window</string>
2902 <key>Persist</key>
2903 <integer>1</integer>
2904 <key>Type</key>
2905 <string>Rect</string>
2906 <key>Value</key>
2907 <array>
2908 <integer>100</integer>
2909 <integer>460</integer>
2910 <integer>370</integer>
2911 <integer>100</integer>
2912 </array>
2913 </map>
2500 <key>FloaterIMRect</key> 2914 <key>FloaterIMRect</key>
2501 <map> 2915 <map>
2502 <key>Comment</key> 2916 <key>Comment</key>
2503 <string>Rectangle for IM window</string> 2917 <string>Rectangle for IM window</string>
2504 <key>Persist</key> 2918 <key>Persist</key>
2505 <integer>1</integer> 2919 <integer>1</integer>
2506 <key>Type</key> 2920 <key>Type</key>
2507 <string>Rect</string> 2921 <string>Rect</string>
2508 <key>Value</key> 2922 <key>Value</key>
2509 <array> 2923 <array>
2510 <integer>0</integer> 2924 <integer>0</integer>
2511 <integer>160</integer> 2925 <integer>160</integer>
2512 <integer>500</integer> 2926 <integer>500</integer>
2513 <integer>0</integer> 2927 <integer>0</integer>
2514 </array> 2928 </array>
2515 </map> 2929 </map>
2516 <key>FloaterInspectRect</key> 2930 <key>FloaterInspectRect</key>
2517 <map> 2931 <map>
2518 <key>Comment</key> 2932 <key>Comment</key>
2519 <string>Rectangle for Object Inspect window</string> 2933 <string>Rectangle for Object Inspect window</string>
2520 <key>Persist</key> 2934 <key>Persist</key>
2521 <integer>1</integer> 2935 <integer>1</integer>
2522 <key>Type</key> 2936 <key>Type</key>
2523 <string>Rect</string> 2937 <string>Rect</string>
2524 <key>Value</key> 2938 <key>Value</key>
2525 <array> 2939 <array>
2526 <integer>0</integer> 2940 <integer>0</integer>
2527 <integer>400</integer> 2941 <integer>400</integer>
2528 <integer>400</integer> 2942 <integer>400</integer>
2529 <integer>0</integer> 2943 <integer>0</integer>
2530 </array> 2944 </array>
2531 </map> 2945 </map>
2532 <key>FloaterInventoryRect</key> 2946 <key>FloaterInventoryRect</key>
2533 <map> 2947 <map>
2534 <key>Comment</key> 2948 <key>Comment</key>
2535 <string>Rectangle for inventory window</string> 2949 <string>Rectangle for inventory window</string>
2536 <key>Persist</key> 2950 <key>Persist</key>
2537 <integer>1</integer> 2951 <integer>1</integer>
2538 <key>Type</key> 2952 <key>Type</key>
2539 <string>Rect</string> 2953 <string>Rect</string>
2540 <key>Value</key> 2954 <key>Value</key>
2541 <array> 2955 <array>
2542 <integer>0</integer> 2956 <integer>0</integer>
2543 <integer>400</integer> 2957 <integer>400</integer>
2544 <integer>300</integer> 2958 <integer>300</integer>
2545 <integer>0</integer> 2959 <integer>0</integer>
2546 </array> 2960 </array>
2547 </map> 2961 </map>
2548 <key>FloaterJoystickRect</key> 2962 <key>FloaterJoystickRect</key>
2549 <map> 2963 <map>
2550 <key>Comment</key> 2964 <key>Comment</key>
2551 <string>Rectangle for joystick controls window.</string> 2965 <string>Rectangle for joystick controls window.</string>
2552 <key>Persist</key> 2966 <key>Persist</key>
2553 <integer>1</integer> 2967 <integer>1</integer>
2554 <key>Type</key> 2968 <key>Type</key>
2555 <string>Rect</string> 2969 <string>Rect</string>
2556 <key>Value</key> 2970 <key>Value</key>
2557 <array> 2971 <array>
2558 <integer>0</integer> 2972 <integer>0</integer>
2559 <integer>0</integer> 2973 <integer>0</integer>
2560 <integer>0</integer> 2974 <integer>0</integer>
2561 <integer>0</integer> 2975 <integer>0</integer>
2562 </array> 2976 </array>
2563 </map> 2977 </map>
2564 <key>FloaterLagMeter</key> 2978 <key>FloaterLagMeter</key>
2565 <map> 2979 <map>
2566 <key>Comment</key> 2980 <key>Comment</key>
2567 <string>Rectangle for lag meter</string> 2981 <string>Rectangle for lag meter</string>
2568 <key>Persist</key> 2982 <key>Persist</key>
2569 <integer>1</integer> 2983 <integer>1</integer>
2570 <key>Type</key> 2984 <key>Type</key>
2571 <string>Rect</string> 2985 <string>Rect</string>
2572 <key>Value</key> 2986 <key>Value</key>
2573 <array> 2987 <array>
2574 <integer>0</integer> 2988 <integer>0</integer>
2575 <integer>142</integer> 2989 <integer>142</integer>
2576 <integer>350</integer> 2990 <integer>350</integer>
2577 <integer>0</integer> 2991 <integer>0</integer>
2578 </array> 2992 </array>
2579 </map> 2993 </map>
2580 <key>FloaterLandRect5</key> 2994 <key>FloaterLandRect5</key>
2581 <map> 2995 <map>
2582 <key>Comment</key> 2996 <key>Comment</key>
2583 <string>Rectangle for About Land window</string> 2997 <string>Rectangle for About Land window</string>
2584 <key>Persist</key> 2998 <key>Persist</key>
2585 <integer>1</integer> 2999 <integer>1</integer>
2586 <key>Type</key> 3000 <key>Type</key>
2587 <string>Rect</string> 3001 <string>Rect</string>
2588 <key>Value</key> 3002 <key>Value</key>
2589 <array> 3003 <array>
2590 <integer>0</integer> 3004 <integer>0</integer>
2591 <integer>370</integer> 3005 <integer>370</integer>
2592 <integer>460</integer> 3006 <integer>460</integer>
2593 <integer>0</integer> 3007 <integer>0</integer>
2594 </array> 3008 </array>
2595 </map> 3009 </map>
2596 <key>FloaterLandmarkRect</key> 3010 <key>FloaterLandmarkRect</key>
2597 <map> 3011 <map>
2598 <key>Comment</key> 3012 <key>Comment</key>
2599 <string>Rectangle for landmark picker</string> 3013 <string>Rectangle for landmark picker</string>
2600 <key>Persist</key> 3014 <key>Persist</key>
2601 <integer>1</integer> 3015 <integer>1</integer>
2602 <key>Type</key> 3016 <key>Type</key>
2603 <string>Rect</string> 3017 <string>Rect</string>
2604 <key>Value</key> 3018 <key>Value</key>
2605 <array> 3019 <array>
2606 <integer>0</integer> 3020 <integer>0</integer>
2607 <integer>290</integer> 3021 <integer>290</integer>
2608 <integer>310</integer> 3022 <integer>310</integer>
2609 <integer>0</integer> 3023 <integer>0</integer>
2610 </array> 3024 </array>
2611 </map> 3025 </map>
2612 <key>FloaterMediaRect</key> 3026 <key>FloaterMediaRect</key>
2613 <map> 3027 <map>
2614 <key>Comment</key> 3028 <key>Comment</key>
2615 <string>Rectangle for media browser window</string> 3029 <string>Rectangle for media browser window</string>
2616 <key>Persist</key> 3030 <key>Persist</key>
2617 <integer>1</integer> 3031 <integer>1</integer>
2618 <key>Type</key> 3032 <key>Type</key>
2619 <string>Rect</string> 3033 <string>Rect</string>
2620 <key>Value</key> 3034 <key>Value</key>
2621 <array> 3035 <array>
2622 <integer>16</integer> 3036 <integer>16</integer>
2623 <integer>650</integer> 3037 <integer>650</integer>
2624 <integer>600</integer> 3038 <integer>600</integer>
2625 <integer>128</integer> 3039 <integer>128</integer>
2626 </array> 3040 </array>
2627 </map> 3041 </map>
2628 <key>FloaterMiniMapRect</key> 3042 <key>FloaterMiniMapRect</key>
2629 <map> 3043 <map>
2630 <key>Comment</key> 3044 <key>Comment</key>
2631 <string>Rectangle for world map</string> 3045 <string>Rectangle for world map</string>
2632 <key>Persist</key> 3046 <key>Persist</key>
2633 <integer>1</integer> 3047 <integer>1</integer>
2634 <key>Type</key> 3048 <key>Type</key>
2635 <string>Rect</string> 3049 <string>Rect</string>
2636 <key>Value</key> 3050 <key>Value</key>
2637 <array> 3051 <array>
2638 <integer>0</integer> 3052 <integer>0</integer>
2639 <integer>225</integer> 3053 <integer>225</integer>
2640 <integer>200</integer> 3054 <integer>200</integer>
2641 <integer>0</integer> 3055 <integer>0</integer>
2642 </array> 3056 </array>
2643 </map> 3057 </map>
2644 <key>FloaterMoveRect2</key> 3058 <key>FloaterMoveRect2</key>
2645 <map> 3059 <map>
2646 <key>Comment</key> 3060 <key>Comment</key>
2647 <string>Rectangle for avatar control window</string> 3061 <string>Rectangle for avatar control window</string>
2648 <key>Persist</key> 3062 <key>Persist</key>
2649 <integer>1</integer> 3063 <integer>1</integer>
2650 <key>Type</key> 3064 <key>Type</key>
2651 <string>Rect</string> 3065 <string>Rect</string>
2652 <key>Value</key> 3066 <key>Value</key>
2653 <array> 3067 <array>
2654 <integer>0</integer> 3068 <integer>0</integer>
2655 <integer>58</integer> 3069 <integer>58</integer>
2656 <integer>135</integer> 3070 <integer>135</integer>
2657 <integer>0</integer> 3071 <integer>0</integer>
2658 </array> 3072 </array>
2659 </map> 3073 </map>
2660 <key>FloaterMuteRect3</key> 3074 <key>FloaterMuteRect3</key>
2661 <map> 3075 <map>
2662 <key>Comment</key> 3076 <key>Comment</key>
2663 <string>Rectangle for mute window</string> 3077 <string>Rectangle for mute window</string>
2664 <key>Persist</key> 3078 <key>Persist</key>
2665 <integer>1</integer> 3079 <integer>1</integer>
2666 <key>Type</key> 3080 <key>Type</key>
2667 <string>Rect</string> 3081 <string>Rect</string>
2668 <key>Value</key> 3082 <key>Value</key>
2669 <array> 3083 <array>
2670 <integer>0</integer> 3084 <integer>0</integer>
2671 <integer>300</integer> 3085 <integer>300</integer>
2672 <integer>300</integer> 3086 <integer>300</integer>
2673 <integer>0</integer> 3087 <integer>0</integer>
2674 </array> 3088 </array>
2675 </map> 3089 </map>
2676 <key>FloaterOpenObjectRect</key> 3090 <key>FloaterOpenObjectRect</key>
2677 <map> 3091 <map>
2678 <key>Comment</key> 3092 <key>Comment</key>
2679 <string>Rectangle for Open Object window</string> 3093 <string>Rectangle for Open Object window</string>
2680 <key>Persist</key> 3094 <key>Persist</key>
2681 <integer>1</integer> 3095 <integer>1</integer>
2682 <key>Type</key> 3096 <key>Type</key>
2683 <string>Rect</string> 3097 <string>Rect</string>
2684 <key>Value</key> 3098 <key>Value</key>
2685 <array> 3099 <array>
2686 <integer>0</integer> 3100 <integer>0</integer>
2687 <integer>350</integer> 3101 <integer>350</integer>
2688 <integer>300</integer> 3102 <integer>300</integer>
2689 <integer>0</integer> 3103 <integer>0</integer>
2690 </array> 3104 </array>
2691 </map> 3105 </map>
2692 <key>FloaterPayRectB</key> 3106 <key>FloaterPayRectB</key>
2693 <map> 3107 <map>
2694 <key>Comment</key> 3108 <key>Comment</key>
2695 <string>Rectangle for pay window</string> 3109 <string>Rectangle for pay window</string>
2696 <key>Persist</key> 3110 <key>Persist</key>
2697 <integer>1</integer> 3111 <integer>1</integer>
2698 <key>Type</key> 3112 <key>Type</key>
2699 <string>Rect</string> 3113 <string>Rect</string>
2700 <key>Value</key> 3114 <key>Value</key>
2701 <array> 3115 <array>
2702 <integer>0</integer> 3116 <integer>0</integer>
2703 <integer>150</integer> 3117 <integer>150</integer>
2704 <integer>400</integer> 3118 <integer>400</integer>
2705 <integer>0</integer> 3119 <integer>0</integer>
2706 </array> 3120 </array>
2707 </map> 3121 </map>
2708 <key>FloaterRegionInfo</key> 3122 <key>FloaterRegionInfo</key>
2709 <map> 3123 <map>
2710 <key>Comment</key> 3124 <key>Comment</key>
2711 <string>Rectangle for region info window</string> 3125 <string>Rectangle for region info window</string>
2712 <key>Persist</key> 3126 <key>Persist</key>
2713 <integer>1</integer> 3127 <integer>1</integer>
2714 <key>Type</key> 3128 <key>Type</key>
2715 <string>Rect</string> 3129 <string>Rect</string>
2716 <key>Value</key> 3130 <key>Value</key>
2717 <array> 3131 <array>
2718 <integer>0</integer> 3132 <integer>0</integer>
2719 <integer>512</integer> 3133 <integer>512</integer>
2720 <integer>480</integer> 3134 <integer>480</integer>
2721 <integer>0</integer> 3135 <integer>0</integer>
2722 </array> 3136 </array>
2723 </map> 3137 </map>
2724 <key>FloaterScriptDebugRect</key> 3138 <key>FloaterScriptDebugRect</key>
2725 <map> 3139 <map>
2726 <key>Comment</key> 3140 <key>Comment</key>
2727 <string>Rectangle for Script Error/Debug window</string> 3141 <string>Rectangle for Script Error/Debug window</string>
2728 <key>Persist</key> 3142 <key>Persist</key>
2729 <integer>1</integer> 3143 <integer>1</integer>
2730 <key>Type</key> 3144 <key>Type</key>
2731 <string>Rect</string> 3145 <string>Rect</string>
2732 <key>Value</key> 3146 <key>Value</key>
2733 <array> 3147 <array>
2734 <integer>0</integer> 3148 <integer>0</integer>
2735 <integer>130</integer> 3149 <integer>130</integer>
2736 <integer>450</integer> 3150 <integer>450</integer>
2737 <integer>0</integer> 3151 <integer>0</integer>
2738 </array> 3152 </array>
2739 </map> 3153 </map>
2740 <key>FloaterSnapshotRect</key> 3154 <key>FloaterSnapshotRect</key>
2741 <map> 3155 <map>
2742 <key>Comment</key> 3156 <key>Comment</key>
2743 <string>Rectangle for snapshot window</string> 3157 <string>Rectangle for snapshot window</string>
2744 <key>Persist</key> 3158 <key>Persist</key>
2745 <integer>1</integer> 3159 <integer>1</integer>
2746 <key>Type</key> 3160 <key>Type</key>
2747 <string>Rect</string> 3161 <string>Rect</string>
2748 <key>Value</key> 3162 <key>Value</key>
2749 <array> 3163 <array>
2750 <integer>0</integer> 3164 <integer>0</integer>
2751 <integer>200</integer> 3165 <integer>200</integer>
2752 <integer>200</integer> 3166 <integer>200</integer>
2753 <integer>400</integer> 3167 <integer>400</integer>
2754 </array> 3168 </array>
2755 </map> 3169 </map>
2756 <key>FloaterViewBottom</key> 3170 <key>FloaterViewBottom</key>
2757 <map> 3171 <map>
2758 <key>Comment</key> 3172 <key>Comment</key>
2759 <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string> 3173 <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
2760 <key>Persist</key> 3174 <key>Persist</key>
2761 <integer>1</integer> 3175 <integer>1</integer>
2762 <key>Type</key> 3176 <key>Type</key>
2763 <string>S32</string> 3177 <string>S32</string>
2764 <key>Value</key> 3178 <key>Value</key>
2765 <integer>-1</integer> 3179 <integer>-1</integer>
2766 </map> 3180 </map>
2767 <key>FloaterWorldMapRect2</key> 3181 <key>FloaterWorldMapRect2</key>
2768 <map> 3182 <map>
2769 <key>Comment</key> 3183 <key>Comment</key>
2770 <string>Rectangle for world map window</string> 3184 <string>Rectangle for world map window</string>
2771 <key>Persist</key> 3185 <key>Persist</key>
2772 <integer>1</integer> 3186 <integer>1</integer>
2773 <key>Type</key> 3187 <key>Type</key>
2774 <string>Rect</string> 3188 <string>Rect</string>
2775 <key>Value</key> 3189 <key>Value</key>
2776 <array> 3190 <array>
2777 <integer>0</integer> 3191 <integer>0</integer>
2778 <integer>0</integer> 3192 <integer>0</integer>
2779 <integer>0</integer> 3193 <integer>0</integer>
2780 <integer>0</integer> 3194 <integer>0</integer>
2781 </array> 3195 </array>
2782 </map> 3196 </map>
2783 <key>FlyBtnState</key> 3197 <key>FlyBtnState</key>
2784 <map> 3198 <map>
2785 <key>Comment</key> 3199 <key>Comment</key>
2786 <string /> 3200 <string />
2787 <key>Persist</key> 3201 <key>Persist</key>
2788 <integer>0</integer> 3202 <integer>0</integer>
2789 <key>Type</key> 3203 <key>Type</key>
2790 <string>Boolean</string> 3204 <string>Boolean</string>
2791 <key>Value</key> 3205 <key>Value</key>
2792 <integer>0</integer> 3206 <integer>0</integer>
2793 </map> 3207 </map>
2794 <key>FlycamAbsolute</key> 3208 <key>FlycamAbsolute</key>
2795 <map> 3209 <map>
2796 <key>Comment</key> 3210 <key>Comment</key>
2797 <string>Treat Flycam values as absolute positions (not deltas).</string> 3211 <string>Treat Flycam values as absolute positions (not deltas).</string>
2798 <key>Persist</key> 3212 <key>Persist</key>
2799 <integer>1</integer> 3213 <integer>1</integer>
2800 <key>Type</key> 3214 <key>Type</key>
2801 <string>Boolean</string> 3215 <string>Boolean</string>
2802 <key>Value</key> 3216 <key>Value</key>
2803 <integer>0</integer> 3217 <integer>0</integer>
2804 </map> 3218 </map>
2805 <key>AutoLeveling</key>
2806 <map>
2807 <key>Comment</key>
2808 <string>Keep Flycam level.</string>
2809 <key>Persist</key>
2810 <integer>1</integer>
2811 <key>Type</key>
2812 <string>Boolean</string>
2813 <key>Value</key>
2814 <integer>1</integer>
2815 </map>
2816 <key>Cursor3D</key>
2817 <map>
2818 <key>Comment</key>
2819 <string>Tread Joystick values as absolute positions (not deltas).</string>
2820 <key>Persist</key>
2821 <integer>1</integer>
2822 <key>Type</key>
2823 <string>Boolean</string>
2824 <key>Value</key>
2825 <integer>1</integer>
2826 </map>
2827 <key>ZoomDirect</key>
2828 <map>
2829 <key>Comment</key>
2830 <string>Map Joystick zoom axis directly to camera zoom.</string>
2831 <key>Persist</key>
2832 <integer>1</integer>
2833 <key>Type</key>
2834 <string>Boolean</string>
2835 <key>Value</key>
2836 <integer>0</integer>
2837 </map>
2838 <key>JoystickInitialized</key>
2839 <map>
2840 <key>Comment</key>
2841 <string>Whether or not a joystick has been detected and initiailized.</string>
2842 <key>Persist</key>
2843 <integer>0</integer>
2844 <key>Type</key>
2845 <string>String</string>
2846 <key>Value</key>
2847 <string></string>
2848 </map>
2849 <key>JoystickEnabled</key>
2850 <map>
2851 <key>Comment</key>
2852 <string>Enables Joystick Input.</string>
2853 <key>Persist</key>
2854 <integer>1</integer>
2855 <key>Type</key>
2856 <string>Boolean</string>
2857 <key>Value</key>
2858 <integer>0</integer>
2859 </map>
2860 <key>JoystickFlycamEnabled</key>
2861 <map>
2862 <key>Comment</key>
2863 <string>Enables the Joystick to control the flycam.</string>
2864 <key>Persist</key>
2865 <integer>1</integer>
2866 <key>Type</key>
2867 <string>Boolean</string>
2868 <key>Value</key>
2869 <string>1</string>
2870 </map>
2871 <key>JoystickAvatarEnabled</key>
2872 <map>
2873 <key>Comment</key>
2874 <string>Enables the Joystick to control Avatar movmement.</string>
2875 <key>Persist</key>
2876 <integer>1</integer>
2877 <key>Type</key>
2878 <string>Boolean</string>
2879 <key>Value</key>
2880 <string>1</string>
2881 </map>
2882 <key>JoystickBuildEnabled</key>
2883 <map>
2884 <key>Comment</key>
2885 <string>Enables the Joystick to move edited objects.</string>
2886 <key>Persist</key>
2887 <integer>1</integer>
2888 <key>Type</key>
2889 <string>Boolean</string>
2890 <key>Value</key>
2891 <string>1</string>
2892 </map>
2893 <key>JoystickAxis0</key>
2894 <map>
2895 <key>Comment</key>
2896 <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
2897 <key>Persist</key>
2898 <integer>1</integer>
2899 <key>Type</key>
2900 <string>S32</string>
2901 <key>Value</key>
2902 <integer>1</integer>
2903 </map>
2904 <key>JoystickAxis1</key>
2905 <map>
2906 <key>Comment</key>
2907 <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
2908 <key>Persist</key>
2909 <integer>1</integer>
2910 <key>Type</key>
2911 <string>S32</string>
2912 <key>Value</key>
2913 <integer>0</integer>
2914 </map>
2915 <key>JoystickAxis2</key>
2916 <map>
2917 <key>Comment</key>
2918 <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
2919 <key>Persist</key>
2920 <integer>1</integer>
2921 <key>Type</key>
2922 <string>S32</string>
2923 <key>Value</key>
2924 <integer>2</integer>
2925 </map>
2926 <key>JoystickAxis3</key>
2927 <map>
2928 <key>Comment</key>
2929 <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
2930 <key>Persist</key>
2931 <integer>1</integer>
2932 <key>Type</key>
2933 <string>S32</string>
2934 <key>Value</key>
2935 <integer>4</integer>
2936 </map>
2937 <key>JoystickAxis4</key>
2938 <map>
2939 <key>Comment</key>
2940 <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
2941 <key>Persist</key>
2942 <integer>1</integer>
2943 <key>Type</key>
2944 <string>S32</string>
2945 <key>Value</key>
2946 <integer>3</integer>
2947 </map>
2948 <key>JoystickAxis5</key>
2949 <map>
2950 <key>Comment</key>
2951 <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
2952 <key>Persist</key>
2953 <integer>1</integer>
2954 <key>Type</key>
2955 <string>S32</string>
2956 <key>Value</key>
2957 <integer>5</integer>
2958 </map>
2959 <key>JoystickAxis6</key>
2960 <map>
2961 <key>Comment</key>
2962 <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
2963 <key>Persist</key>
2964 <integer>1</integer>
2965 <key>Type</key>
2966 <string>S32</string>
2967 <key>Value</key>
2968 <integer>-1</integer>
2969 </map>
2970 <key>FlycamAxisDeadZone0</key> 3219 <key>FlycamAxisDeadZone0</key>
2971 <map> 3220 <map>
2972 <key>Comment</key> 3221 <key>Comment</key>
2973 <string>Flycam axis 0 dead zone.</string> 3222 <string>Flycam axis 0 dead zone.</string>
2974 <key>Persist</key> 3223 <key>Persist</key>
2975 <integer>1</integer> 3224 <integer>1</integer>
2976 <key>Type</key> 3225 <key>Type</key>
2977 <string>F32</string> 3226 <string>F32</string>
2978 <key>Value</key> 3227 <key>Value</key>
2979 <real>0.1</real> 3228 <real>0.1</real>
2980 </map> 3229 </map>
2981 <key>FlycamAxisDeadZone1</key> 3230 <key>FlycamAxisDeadZone1</key>
2982 <map> 3231 <map>
2983 <key>Comment</key> 3232 <key>Comment</key>
2984 <string>Flycam axis 1 dead zone.</string> 3233 <string>Flycam axis 1 dead zone.</string>
2985 <key>Persist</key> 3234 <key>Persist</key>
2986 <integer>1</integer> 3235 <integer>1</integer>
2987 <key>Type</key> 3236 <key>Type</key>
2988 <string>F32</string> 3237 <string>F32</string>
2989 <key>Value</key> 3238 <key>Value</key>
2990 <real>0.1</real> 3239 <real>0.1</real>
2991 </map> 3240 </map>
2992 <key>FlycamAxisDeadZone2</key> 3241 <key>FlycamAxisDeadZone2</key>
2993 <map> 3242 <map>
2994 <key>Comment</key> 3243 <key>Comment</key>
2995 <string>Flycam axis 2 dead zone.</string> 3244 <string>Flycam axis 2 dead zone.</string>
2996 <key>Persist</key> 3245 <key>Persist</key>
2997 <integer>1</integer> 3246 <integer>1</integer>
2998 <key>Type</key> 3247 <key>Type</key>
2999 <string>F32</string> 3248 <string>F32</string>
3000 <key>Value</key> 3249 <key>Value</key>
3001 <real>0.1</real> 3250 <real>0.1</real>
3002 </map> 3251 </map>
3003 <key>FlycamAxisDeadZone3</key> 3252 <key>FlycamAxisDeadZone3</key>
3004 <map> 3253 <map>
3005 <key>Comment</key> 3254 <key>Comment</key>
3006 <string>Flycam axis 3 dead zone.</string> 3255 <string>Flycam axis 3 dead zone.</string>
3007 <key>Persist</key> 3256 <key>Persist</key>
3008 <integer>1</integer> 3257 <integer>1</integer>
3009 <key>Type</key> 3258 <key>Type</key>
3010 <string>F32</string> 3259 <string>F32</string>
3011 <key>Value</key> 3260 <key>Value</key>
3012 <real>0.1</real> 3261 <real>0.1</real>
3013 </map> 3262 </map>
3014 <key>FlycamAxisDeadZone4</key> 3263 <key>FlycamAxisDeadZone4</key>
3015 <map> 3264 <map>
3016 <key>Comment</key> 3265 <key>Comment</key>
3017 <string>Flycam axis 4 dead zone.</string> 3266 <string>Flycam axis 4 dead zone.</string>
3018 <key>Persist</key> 3267 <key>Persist</key>
3019 <integer>1</integer> 3268 <integer>1</integer>
3020 <key>Type</key> 3269 <key>Type</key>
3021 <string>F32</string> 3270 <string>F32</string>
3022 <key>Value</key> 3271 <key>Value</key>
3023 <real>0.1</real> 3272 <real>0.1</real>
3024 </map> 3273 </map>
3025 <key>FlycamAxisDeadZone5</key> 3274 <key>FlycamAxisDeadZone5</key>
3026 <map> 3275 <map>
3027 <key>Comment</key> 3276 <key>Comment</key>
3028 <string>Flycam axis 5 dead zone.</string> 3277 <string>Flycam axis 5 dead zone.</string>
3029 <key>Persist</key> 3278 <key>Persist</key>
3030 <integer>1</integer> 3279 <integer>1</integer>
3031 <key>Type</key> 3280 <key>Type</key>
3032 <string>F32</string> 3281 <string>F32</string>
3033 <key>Value</key> 3282 <key>Value</key>
3034 <real>0.1</real> 3283 <real>0.1</real>
3035 </map> 3284 </map>
3036 <key>FlycamAxisDeadZone6</key> 3285 <key>FlycamAxisDeadZone6</key>
3037 <map> 3286 <map>
3038 <key>Comment</key> 3287 <key>Comment</key>
3039 <string>Flycam axis 6 dead zone.</string> 3288 <string>Flycam axis 6 dead zone.</string>
3040 <key>Persist</key> 3289 <key>Persist</key>
3041 <integer>1</integer> 3290 <integer>1</integer>
3042 <key>Type</key> 3291 <key>Type</key>
3043 <string>F32</string> 3292 <string>F32</string>
3044 <key>Value</key> 3293 <key>Value</key>
3045 <real>0.1</real> 3294 <real>0.1</real>
3046 </map> 3295 </map>
3047 <key>FlycamAxisScale0</key> 3296 <key>FlycamAxisScale0</key>
3048 <map> 3297 <map>
3049 <key>Comment</key> 3298 <key>Comment</key>
3050 <string>Flycam axis 0 scaler.</string> 3299 <string>Flycam axis 0 scaler.</string>
3051 <key>Persist</key> 3300 <key>Persist</key>
3052 <integer>1</integer> 3301 <integer>1</integer>
3053 <key>Type</key> 3302 <key>Type</key>
3054 <string>F32</string> 3303 <string>F32</string>
3055 <key>Value</key> 3304 <key>Value</key>
3056 <real>1</real> 3305 <real>1.0</real>
3057 </map> 3306 </map>
3058 <key>FlycamAxisScale1</key> 3307 <key>FlycamAxisScale1</key>
3059 <map> 3308 <map>
3060 <key>Comment</key> 3309 <key>Comment</key>
3061 <string>Flycam axis 1 scaler.</string> 3310 <string>Flycam axis 1 scaler.</string>
3062 <key>Persist</key> 3311 <key>Persist</key>
3063 <integer>1</integer> 3312 <integer>1</integer>
3064 <key>Type</key> 3313 <key>Type</key>
3065 <string>F32</string> 3314 <string>F32</string>
3066 <key>Value</key> 3315 <key>Value</key>
3067 <real>1</real> 3316 <real>1.0</real>
3068 </map> 3317 </map>
3069 <key>FlycamAxisScale2</key> 3318 <key>FlycamAxisScale2</key>
3070 <map> 3319 <map>
3071 <key>Comment</key> 3320 <key>Comment</key>
3072 <string>Flycam axis 2 scaler.</string> 3321 <string>Flycam axis 2 scaler.</string>
3073 <key>Persist</key> 3322 <key>Persist</key>
3074 <integer>1</integer> 3323 <integer>1</integer>
3075 <key>Type</key> 3324 <key>Type</key>
3076 <string>F32</string> 3325 <string>F32</string>
3077 <key>Value</key> 3326 <key>Value</key>
3078 <real>1</real> 3327 <real>1.0</real>
3079 </map> 3328 </map>
3080 <key>FlycamAxisScale3</key> 3329 <key>FlycamAxisScale3</key>
3081 <map> 3330 <map>
3082 <key>Comment</key> 3331 <key>Comment</key>
3083 <string>Flycam axis 3 scaler.</string> 3332 <string>Flycam axis 3 scaler.</string>
3084 <key>Persist</key> 3333 <key>Persist</key>
3085 <integer>1</integer> 3334 <integer>1</integer>
3086 <key>Type</key> 3335 <key>Type</key>
3087 <string>F32</string> 3336 <string>F32</string>
3088 <key>Value</key> 3337 <key>Value</key>
3089 <real>1</real> 3338 <real>1.0</real>
3090 </map> 3339 </map>
3091 <key>FlycamAxisScale4</key> 3340 <key>FlycamAxisScale4</key>
3092 <map> 3341 <map>
3093 <key>Comment</key> 3342 <key>Comment</key>
3094 <string>Flycam axis 4 scaler.</string> 3343 <string>Flycam axis 4 scaler.</string>
3095 <key>Persist</key> 3344 <key>Persist</key>
3096 <integer>1</integer> 3345 <integer>1</integer>
3097 <key>Type</key> 3346 <key>Type</key>
3098 <string>F32</string> 3347 <string>F32</string>
3099 <key>Value</key> 3348 <key>Value</key>
3100 <real>1</real> 3349 <real>1.0</real>
3101 </map> 3350 </map>
3102 <key>FlycamAxisScale5</key> 3351 <key>FlycamAxisScale5</key>
3103 <map> 3352 <map>
3104 <key>Comment</key> 3353 <key>Comment</key>
3105 <string>Flycam axis 5 scaler.</string> 3354 <string>Flycam axis 5 scaler.</string>
3106 <key>Persist</key> 3355 <key>Persist</key>
3107 <integer>1</integer> 3356 <integer>1</integer>
3108 <key>Type</key> 3357 <key>Type</key>
3109 <string>F32</string> 3358 <string>F32</string>
3110 <key>Value</key> 3359 <key>Value</key>
3111 <real>1</real> 3360 <real>1.0</real>
3112 </map> 3361 </map>
3113 <key>FlycamAxisScale6</key> 3362 <key>FlycamAxisScale6</key>
3114 <map> 3363 <map>
3115 <key>Comment</key> 3364 <key>Comment</key>
3116 <string>Flycam axis 6 scaler.</string> 3365 <string>Flycam axis 6 scaler.</string>
3117 <key>Persist</key> 3366 <key>Persist</key>
3118 <integer>1</integer> 3367 <integer>1</integer>
3119 <key>Type</key> 3368 <key>Type</key>
3120 <string>F32</string> 3369 <string>F32</string>
3121 <key>Value</key> 3370 <key>Value</key>
3122 <real>1</real> 3371 <real>1.0</real>
3123 </map> 3372 </map>
3124 <key>FlycamFeathering</key> 3373 <key>FlycamFeathering</key>
3125 <map> 3374 <map>
3126 <key>Comment</key> 3375 <key>Comment</key>
3127 <string>Flycam feathering (less is softer)</string> 3376 <string>Flycam feathering (less is softer)</string>
3128 <key>Persist</key> 3377 <key>Persist</key>
3129 <integer>1</integer> 3378 <integer>1</integer>
3130 <key>Type</key> 3379 <key>Type</key>
3131 <string>F32</string> 3380 <string>F32</string>
3132 <key>Value</key> 3381 <key>Value</key>
3133 <real>16</real> 3382 <real>16.0</real>
3134 </map> 3383 </map>
3135 <key>FlycamZoomDirect</key> 3384 <key>FlycamZoomDirect</key>
3136 <map> 3385 <map>
3137 <key>Comment</key> 3386 <key>Comment</key>
3138 <string>Map flycam zoom axis directly to camera zoom.</string> 3387 <string>Map flycam zoom axis directly to camera zoom.</string>
3139 <key>Persist</key> 3388 <key>Persist</key>
3140 <integer>1</integer> 3389 <integer>1</integer>
3141 <key>Type</key> 3390 <key>Type</key>
3142 <string>Boolean</string> 3391 <string>Boolean</string>
3143 <key>Value</key> 3392 <key>Value</key>
3144 <integer>0</integer> 3393 <integer>0</integer>
3145 </map> 3394 </map>
3146 <key>FlyingAtExit</key> 3395 <key>FlyingAtExit</key>
3147 <map> 3396 <map>
3148 <key>Comment</key> 3397 <key>Comment</key>
3149 <string>Was flying when last logged out, so fly when logging in</string> 3398 <string>Was flying when last logged out, so fly when logging in</string>
3150 <key>Persist</key> 3399 <key>Persist</key>
3151 <integer>1</integer> 3400 <integer>1</integer>
3152 <key>Type</key> 3401 <key>Type</key>
3153 <string>Boolean</string> 3402 <string>Boolean</string>
3154 <key>Value</key> 3403 <key>Value</key>
3155 <integer>0</integer> 3404 <integer>0</integer>
3156 </map> 3405 </map>
3157 <key>FocusOffsetDefault</key> 3406 <key>FocusOffsetDefault</key>
3158 <map> 3407 <map>
3159 <key>Comment</key> 3408 <key>Comment</key>
3160 <string>Default focus point offset relative to avatar (x-axis is forward)</string> 3409 <string>Default focus point offset relative to avatar (x-axis is forward)</string>
3161 <key>Persist</key> 3410 <key>Persist</key>
3162 <integer>1</integer> 3411 <integer>1</integer>
3163 <key>Type</key> 3412 <key>Type</key>
3164 <string>Vector3</string> 3413 <string>Vector3</string>
3165 <key>Value</key> 3414 <key>Value</key>
3166 <array> 3415 <array>
3167 <real>1</real> 3416 <real>1.0</real>
3168 <real>0</real> 3417 <real>0.0</real>
3169 <real>1</real> 3418 <real>1.0</real>
3170 </array> 3419 </array>
3171 </map> 3420 </map>
3172 <key>FocusPosOnLogout</key> 3421 <key>FocusPosOnLogout</key>
3173 <map> 3422 <map>
3174 <key>Comment</key> 3423 <key>Comment</key>
3175 <string>Camera focus point when last logged out (global coordinates)</string> 3424 <string>Camera focus point when last logged out (global coordinates)</string>
3176 <key>Persist</key> 3425 <key>Persist</key>
3177 <integer>1</integer> 3426 <integer>1</integer>
3178 <key>Type</key> 3427 <key>Type</key>
3179 <string>Vector3D</string> 3428 <string>Vector3D</string>
3180 <key>Value</key> 3429 <key>Value</key>
3181 <array> 3430 <array>
3182 <real>0</real> 3431 <real>0.0</real>
3183 <real>0</real> 3432 <real>0.0</real>
3184 <real>0</real> 3433 <real>0.0</real>
3185 </array> 3434 </array>
3186 </map> 3435 </map>
3187 <key>FolderAutoOpenDelay</key> 3436 <key>FolderAutoOpenDelay</key>
3188 <map> 3437 <map>
3189 <key>Comment</key> 3438 <key>Comment</key>
3190 <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string> 3439 <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
3191 <key>Persist</key> 3440 <key>Persist</key>
3192 <integer>1</integer> 3441 <integer>1</integer>
3193 <key>Type</key> 3442 <key>Type</key>
3194 <string>F32</string> 3443 <string>F32</string>
3195 <key>Value</key> 3444 <key>Value</key>
3196 <real>0.75</real> 3445 <real>0.75</real>
3197 </map> 3446 </map>
3198 <key>FolderLoadingMessageWaitTime</key> 3447 <key>FolderLoadingMessageWaitTime</key>
3199 <map> 3448 <map>
3200 <key>Comment</key> 3449 <key>Comment</key>
3201 <string>Seconds to wait before showing the LOADING... text in folder views</string> 3450 <string>Seconds to wait before showing the LOADING... text in folder views</string>
3202 <key>Persist</key> 3451 <key>Persist</key>
3203 <integer>1</integer> 3452 <integer>1</integer>
3204 <key>Type</key> 3453 <key>Type</key>
3205 <string>F32</string> 3454 <string>F32</string>
3206 <key>Value</key> 3455 <key>Value</key>
3207 <real>0.5</real> 3456 <real>0.5</real>
3208 </map> 3457 </map>
3209 <key>FontMonospace</key> 3458 <key>FontMonospace</key>
3210 <map> 3459 <map>
3211 <key>Comment</key> 3460 <key>Comment</key>
3212 <string>Name of monospace font (Truetype file name)</string> 3461 <string>Name of monospace font (Truetype file name)</string>
3213 <key>Persist</key> 3462 <key>Persist</key>
3214 <integer>1</integer> 3463 <integer>1</integer>
3215 <key>Type</key> 3464 <key>Type</key>
3216 <string>String</string> 3465 <string>String</string>
3217 <key>Value</key> 3466 <key>Value</key>
3218 <string>profontwindows.ttf</string> 3467 <string>profontwindows.ttf</string>
3219 </map> 3468 </map>
3220 <key>FontSansSerif</key> 3469 <key>FontSansSerif</key>
3221 <map> 3470 <map>
3222 <key>Comment</key> 3471 <key>Comment</key>
3223 <string>Name of san-serif font (Truetype file name)</string> 3472 <string>Name of san-serif font (Truetype file name)</string>
3224 <key>Persist</key> 3473 <key>Persist</key>
3225 <integer>1</integer> 3474 <integer>1</integer>
3226 <key>Type</key> 3475 <key>Type</key>
3227 <string>String</string> 3476 <string>String</string>
3228 <key>Value</key> 3477 <key>Value</key>
3229 <string>MtBkLfRg.ttf</string> 3478 <string>MtBkLfRg.ttf</string>
3230 </map> 3479 </map>
3231 <key>FontSansSerifBold</key> 3480 <key>FontSansSerifBold</key>
3232 <map> 3481 <map>
3233 <key>Comment</key> 3482 <key>Comment</key>
3234 <string>Name of bold font (Truetype file name)</string> 3483 <string>Name of bold font (Truetype file name)</string>
3235 <key>Persist</key> 3484 <key>Persist</key>
3236 <integer>1</integer> 3485 <integer>1</integer>
3237 <key>Type</key> 3486 <key>Type</key>
3238 <string>String</string> 3487 <string>String</string>
3239 <key>Value</key> 3488 <key>Value</key>
3240 <string>MtBdLfRg.ttf</string> 3489 <string>MtBdLfRg.ttf</string>
3241 </map> 3490 </map>
3242 <key>FontSansSerifFallback</key> 3491 <key>FontSansSerifFallback</key>
3243 <map> 3492 <map>
3244 <key>Comment</key> 3493 <key>Comment</key>
3245 <string>Name of san-serif font (Truetype file name)</string> 3494 <string>Name of san-serif font (Truetype file name)</string>
3246 <key>Persist</key> 3495 <key>Persist</key>
3247 <integer>1</integer> 3496 <integer>1</integer>
3248 <key>Type</key> 3497 <key>Type</key>
3249 <string>String</string> 3498 <string>String</string>
3250 <key>Value</key> 3499 <key>Value</key>
3251 <string></string> 3500 <string />
3252 </map> 3501 </map>
3253 <key>FontSansSerifFallbackScale</key> 3502 <key>FontSansSerifFallbackScale</key>
3254 <map> 3503 <map>
3255 <key>Comment</key> 3504 <key>Comment</key>
3256 <string>Scale of fallback font relative to huge font (fraction of huge font size)</string> 3505 <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
3257 <key>Persist</key> 3506 <key>Persist</key>
3258 <integer>1</integer> 3507 <integer>1</integer>
3259 <key>Type</key> 3508 <key>Type</key>
3260 <string>F32</string> 3509 <string>F32</string>
3261 <key>Value</key> 3510 <key>Value</key>
3262 <real>1</real> 3511 <real>1.0</real>
3263 </map> 3512 </map>
3264 <key>FontScreenDPI</key> 3513 <key>FontScreenDPI</key>
3265 <map> 3514 <map>
3266 <key>Comment</key> 3515 <key>Comment</key>
3267 <string>Font resolution, higher is bigger (pixels per inch)</string> 3516 <string>Font resolution, higher is bigger (pixels per inch)</string>
3268 <key>Persist</key> 3517 <key>Persist</key>
3269 <integer>1</integer> 3518 <integer>1</integer>
3270 <key>Type</key> 3519 <key>Type</key>
3271 <string>F32</string> 3520 <string>F32</string>
3272 <key>Value</key> 3521 <key>Value</key>
3273 <real>96</real> 3522 <real>96.0</real>
3274 </map> 3523 </map>
3275 <key>FontSizeHuge</key> 3524 <key>FontSizeHuge</key>
3276 <map> 3525 <map>
3277 <key>Comment</key> 3526 <key>Comment</key>
3278 <string>Size of huge font (points, or 1/72 of an inch)</string> 3527 <string>Size of huge font (points, or 1/72 of an inch)</string>
3279 <key>Persist</key> 3528 <key>Persist</key>
3280 <integer>1</integer> 3529 <integer>1</integer>
3281 <key>Type</key> 3530 <key>Type</key>
3282 <string>F32</string> 3531 <string>F32</string>
3283 <key>Value</key> 3532 <key>Value</key>
3284 <real>16</real> 3533 <real>16.0</real>
3285 </map> 3534 </map>
3286 <key>FontSizeLarge</key> 3535 <key>FontSizeLarge</key>
3287 <map> 3536 <map>
3288 <key>Comment</key> 3537 <key>Comment</key>
3289 <string>Size of large font (points, or 1/72 of an inch)</string> 3538 <string>Size of large font (points, or 1/72 of an inch)</string>
3290 <key>Persist</key> 3539 <key>Persist</key>
3291 <integer>1</integer> 3540 <integer>1</integer>
3292 <key>Type</key> 3541 <key>Type</key>
3293 <string>F32</string> 3542 <string>F32</string>
3294 <key>Value</key> 3543 <key>Value</key>
3295 <real>12</real> 3544 <real>12.0</real>
3296 </map> 3545 </map>
3297 <key>FontSizeMedium</key> 3546 <key>FontSizeMedium</key>
3298 <map> 3547 <map>
3299 <key>Comment</key> 3548 <key>Comment</key>
3300 <string>Size of medium font (points, or 1/72 of an inch)</string> 3549 <string>Size of medium font (points, or 1/72 of an inch)</string>
3301 <key>Persist</key> 3550 <key>Persist</key>
3302 <integer>1</integer> 3551 <integer>1</integer>
3303 <key>Type</key> 3552 <key>Type</key>
3304 <string>F32</string> 3553 <string>F32</string>
3305 <key>Value</key> 3554 <key>Value</key>
3306 <real>10</real> 3555 <real>10.0</real>
3307 </map> 3556 </map>
3308 <key>FontSizeMonospace</key> 3557 <key>FontSizeMonospace</key>
3309 <map> 3558 <map>
3310 <key>Comment</key> 3559 <key>Comment</key>
3311 <string>Size of monospaced font (points, or 1/72 of an inch)</string> 3560 <string>Size of monospaced font (points, or 1/72 of an inch)</string>
3312 <key>Persist</key> 3561 <key>Persist</key>
3313 <integer>1</integer> 3562 <integer>1</integer>
3314 <key>Type</key> 3563 <key>Type</key>
3315 <string>F32</string> 3564 <string>F32</string>
3316 <key>Value</key> 3565 <key>Value</key>
3317 <real>9</real> 3566 <real>9.0</real>
3318 </map> 3567 </map>
3319 <key>FontSizeSmall</key> 3568 <key>FontSizeSmall</key>
3320 <map> 3569 <map>
3321 <key>Comment</key> 3570 <key>Comment</key>
3322 <string>Size of small font (points, or 1/72 of an inch)</string> 3571 <string>Size of small font (points, or 1/72 of an inch)</string>
3323 <key>Persist</key> 3572 <key>Persist</key>
3324 <integer>1</integer> 3573 <integer>1</integer>
3325 <key>Type</key> 3574 <key>Type</key>
3326 <string>F32</string> 3575 <string>F32</string>
3327 <key>Value</key> 3576 <key>Value</key>
3328 <real>9</real> 3577 <real>9.0</real>
3329 </map> 3578 </map>
3330 <key>ForceShowGrid</key> 3579 <key>ForceShowGrid</key>
3331 <map> 3580 <map>
3332 <key>Comment</key> 3581 <key>Comment</key>
3333 <string>Always show grid dropdown on login screen</string> 3582 <string>Always show grid dropdown on login screen</string>
3334 <key>Persist</key> 3583 <key>Persist</key>
3335 <integer>1</integer> 3584 <integer>1</integer>
3336 <key>Type</key> 3585 <key>Type</key>
3337 <string>Boolean</string> 3586 <string>Boolean</string>
3338 <key>Value</key> 3587 <key>Value</key>
3339 <integer>0</integer> 3588 <integer>0</integer>
3340 </map> 3589 </map>
3341 <key>ForwardBtnRect</key> 3590 <key>ForwardBtnRect</key>
3342 <map> 3591 <map>
3343 <key>Comment</key> 3592 <key>Comment</key>
3344 <string /> 3593 <string />
3345 <key>Persist</key> 3594 <key>Persist</key>
3346 <integer>0</integer> 3595 <integer>0</integer>
3347 <key>Type</key> 3596 <key>Type</key>
3348 <string>Rect</string> 3597 <string>Rect</string>
3349 <key>Value</key> 3598 <key>Value</key>
3350 <array> 3599 <array>
3351 <integer>45</integer> 3600 <integer>45</integer>
3352 <integer>54</integer> 3601 <integer>54</integer>
3353 <integer>66</integer> 3602 <integer>66</integer>
3354 <integer>29</integer> 3603 <integer>29</integer>
3355 </array> 3604 </array>
3356 </map> 3605 </map>
3357 <key>FreezeTime</key> 3606 <key>FreezeTime</key>
3358 <map> 3607 <map>
3359 <key>Comment</key> 3608 <key>Comment</key>
3360 <string /> 3609 <string />
3361 <key>Persist</key> 3610 <key>Persist</key>
3362 <integer>0</integer> 3611 <integer>0</integer>
3363 <key>Type</key> 3612 <key>Type</key>
3364 <string>Boolean</string> 3613 <string>Boolean</string>
3365 <key>Value</key> 3614 <key>Value</key>
3366 <integer>0</integer> 3615 <integer>0</integer>
3367 </map> 3616 </map>
3368 <key>FullScreen</key> 3617 <key>FullScreen</key>
3369 <map> 3618 <map>
3370 <key>Comment</key> 3619 <key>Comment</key>
3371 <string>Run SL in fullscreen mode</string> 3620 <string>Run SL in fullscreen mode</string>
3372 <key>Persist</key> 3621 <key>Persist</key>
3373 <integer>1</integer> 3622 <integer>1</integer>
3374 <key>Type</key> 3623 <key>Type</key>
3375 <string>Boolean</string> 3624 <string>Boolean</string>
3376 <key>Value</key> 3625 <key>Value</key>
3377 <integer>0</integer> 3626 <integer>0</integer>
3378 </map> 3627 </map>
3379 <key>FullScreenAspectRatio</key> 3628 <key>FullScreenAspectRatio</key>
3380 <map> 3629 <map>
3381 <key>Comment</key> 3630 <key>Comment</key>
3382 <string>Aspect ratio of fullscreen display (width / height)</string> 3631 <string>Aspect ratio of fullscreen display (width / height)</string>
3383 <key>Persist</key> 3632 <key>Persist</key>
3384 <integer>1</integer> 3633 <integer>1</integer>
3385 <key>Type</key> 3634 <key>Type</key>
3386 <string>F32</string> 3635 <string>F32</string>
3387 <key>Value</key> 3636 <key>Value</key>
3388 <real>1.33329999446868896484375</real> 3637 <real>1.33329999447</real>
3389 </map> 3638 </map>
3390 <key>FullScreenAutoDetectAspectRatio</key> 3639 <key>FullScreenAutoDetectAspectRatio</key>
3391 <map> 3640 <map>
3392 <key>Comment</key> 3641 <key>Comment</key>
3393 <string>Automatically detect proper aspect ratio for fullscreen display</string> 3642 <string>Automatically detect proper aspect ratio for fullscreen display</string>
3394 <key>Persist</key> 3643 <key>Persist</key>
3395 <integer>1</integer> 3644 <integer>1</integer>
3396 <key>Type</key> 3645 <key>Type</key>
3397 <string>Boolean</string> 3646 <string>Boolean</string>
3398 <key>Value</key> 3647 <key>Value</key>
3399 <integer>1</integer> 3648 <integer>1</integer>
3400 </map> 3649 </map>
3401 <key>FullScreenHeight</key> 3650 <key>FullScreenHeight</key>
3402 <map> 3651 <map>
3403 <key>Comment</key> 3652 <key>Comment</key>
3404 <string>Fullscreen resolution in height</string> 3653 <string>Fullscreen resolution in height</string>
3405 <key>Persist</key> 3654 <key>Persist</key>
3406 <integer>1</integer> 3655 <integer>1</integer>
3407 <key>Type</key> 3656 <key>Type</key>
3408 <string>S32</string> 3657 <string>S32</string>
3409 <key>Value</key> 3658 <key>Value</key>
3410 <integer>768</integer> 3659 <integer>768</integer>
3411 </map> 3660 </map>
3412 <key>FullScreenWidth</key> 3661 <key>FullScreenWidth</key>
3413 <map> 3662 <map>
3414 <key>Comment</key> 3663 <key>Comment</key>
3415 <string>Fullscreen resolution in width</string> 3664 <string>Fullscreen resolution in width</string>
3416 <key>Persist</key> 3665 <key>Persist</key>
3417 <integer>1</integer> 3666 <integer>1</integer>
3418 <key>Type</key> 3667 <key>Type</key>
3419 <string>S32</string> 3668 <string>S32</string>
3420 <key>Value</key> 3669 <key>Value</key>
3421 <integer>1024</integer> 3670 <integer>1024</integer>
3422 </map> 3671 </map>
3423 <key>GridChoice</key>
3424 <map>
3425 <key>Comment</key>
3426 <string>The user&apos;s grid choice or ip address.</string>
3427 <key>Persist</key>
3428 <integer>1</integer>
3429 <key>Type</key>
3430 <string>String</string>
3431 <key>Value</key>
3432 <string />
3433 </map>
3434 <key>GridCrossSections</key> 3672 <key>GridCrossSections</key>
3435 <map> 3673 <map>
3436 <key>Comment</key> 3674 <key>Comment</key>
3437 <string>Highlight cross sections of prims with grid manipulation plane.</string> 3675 <string>Highlight cross sections of prims with grid manipulation plane.</string>
3438 <key>Persist</key> 3676 <key>Persist</key>
3439 <integer>1</integer> 3677 <integer>1</integer>
3440 <key>Type</key> 3678 <key>Type</key>
3441 <string>Boolean</string> 3679 <string>Boolean</string>
3442 <key>Value</key> 3680 <key>Value</key>
3443 <integer>0</integer> 3681 <integer>0</integer>
3444 </map> 3682 </map>
3445 <key>GridDrawSize</key> 3683 <key>GridDrawSize</key>
3446 <map> 3684 <map>
3447 <key>Comment</key> 3685 <key>Comment</key>
3448 <string>Visible extent of 2D snap grid (meters)</string> 3686 <string>Visible extent of 2D snap grid (meters)</string>
3449 <key>Persist</key> 3687 <key>Persist</key>
3450 <integer>1</integer> 3688 <integer>1</integer>
3451 <key>Type</key> 3689 <key>Type</key>
3452 <string>F32</string> 3690 <string>F32</string>
3453 <key>Value</key> 3691 <key>Value</key>
3454 <real>12</real> 3692 <real>12.0</real>
3455 </map> 3693 </map>
3456 <key>GridMode</key> 3694 <key>GridMode</key>
3457 <map> 3695 <map>
3458 <key>Comment</key> 3696 <key>Comment</key>
3459 <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string> 3697 <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
3460 <key>Persist</key> 3698 <key>Persist</key>
3461 <integer>1</integer> 3699 <integer>1</integer>
3462 <key>Type</key> 3700 <key>Type</key>
3463 <string>S32</string> 3701 <string>S32</string>
3464 <key>Value</key> 3702 <key>Value</key>
3465 <integer>0</integer> 3703 <integer>0</integer>
3466 </map> 3704 </map>
3467 <key>GridOpacity</key> 3705 <key>GridOpacity</key>
3468 <map> 3706 <map>
3469 <key>Comment</key> 3707 <key>Comment</key>
3470 <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string> 3708 <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
3471 <key>Persist</key> 3709 <key>Persist</key>
3472 <integer>1</integer> 3710 <integer>1</integer>
3473 <key>Type</key> 3711 <key>Type</key>
3474 <string>F32</string> 3712 <string>F32</string>
3475 <key>Value</key> 3713 <key>Value</key>
3476 <real>0.699999988079071044921875</real> 3714 <real>0.699999988079</real>
3477 </map> 3715 </map>
3478 <key>GridResolution</key> 3716 <key>GridResolution</key>
3479 <map> 3717 <map>
3480 <key>Comment</key> 3718 <key>Comment</key>
3481 <string>Size of single grid step (meters)</string> 3719 <string>Size of single grid step (meters)</string>
3482 <key>Persist</key> 3720 <key>Persist</key>
3483 <integer>1</integer> 3721 <integer>1</integer>
3484 <key>Type</key> 3722 <key>Type</key>
3485 <string>F32</string> 3723 <string>F32</string>
3486 <key>Value</key> 3724 <key>Value</key>
3487 <real>0.5</real> 3725 <real>0.5</real>
3488 </map> 3726 </map>
3489 <key>GridSubUnit</key> 3727 <key>GridSubUnit</key>
3490 <map> 3728 <map>
3491 <key>Comment</key> 3729 <key>Comment</key>
3492 <string>Display fractional grid steps, relative to grid size</string> 3730 <string>Display fractional grid steps, relative to grid size</string>
3493 <key>Persist</key> 3731 <key>Persist</key>
3494 <integer>1</integer> 3732 <integer>1</integer>
3495 <key>Type</key> 3733 <key>Type</key>
3496 <string>Boolean</string> 3734 <string>Boolean</string>
3497 <key>Value</key> 3735 <key>Value</key>
3498 <integer>0</integer> 3736 <integer>0</integer>
3499 </map> 3737 </map>
3500 <key>GridSubdivision</key> 3738 <key>GridSubdivision</key>
3501 <map> 3739 <map>
3502 <key>Comment</key> 3740 <key>Comment</key>
3503 <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string> 3741 <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
3504 <key>Persist</key> 3742 <key>Persist</key>
3505 <integer>1</integer> 3743 <integer>1</integer>
3506 <key>Type</key> 3744 <key>Type</key>
3507 <string>S32</string> 3745 <string>S32</string>
3508 <key>Value</key> 3746 <key>Value</key>
3509 <integer>32</integer> 3747 <integer>32</integer>
3510 </map> 3748 </map>
3511 <key>GroupNotifyBoxHeight</key> 3749 <key>GroupNotifyBoxHeight</key>
3512 <map> 3750 <map>
3513 <key>Comment</key> 3751 <key>Comment</key>
3514 <string>Height of group notice messages</string> 3752 <string>Height of group notice messages</string>
3515 <key>Persist</key> 3753 <key>Persist</key>
3516 <integer>1</integer> 3754 <integer>1</integer>
3517 <key>Type</key> 3755 <key>Type</key>
3518 <string>S32</string> 3756 <string>S32</string>
3519 <key>Value</key> 3757 <key>Value</key>
3520 <integer>260</integer> 3758 <integer>260</integer>
3521 </map> 3759 </map>
3522 <key>GroupNotifyBoxWidth</key> 3760 <key>GroupNotifyBoxWidth</key>
3523 <map> 3761 <map>
3524 <key>Comment</key> 3762 <key>Comment</key>
3525 <string>Width of group notice messages</string> 3763 <string>Width of group notice messages</string>
3526 <key>Persist</key> 3764 <key>Persist</key>
3527 <integer>1</integer> 3765 <integer>1</integer>
3528 <key>Type</key> 3766 <key>Type</key>
3529 <string>S32</string> 3767 <string>S32</string>
3530 <key>Value</key> 3768 <key>Value</key>
3531 <integer>400</integer> 3769 <integer>400</integer>
3532 </map> 3770 </map>
3533 <key>HTMLLinkColor</key> 3771 <key>HTMLLinkColor</key>
3534 <map> 3772 <map>
3535 <key>Comment</key> 3773 <key>Comment</key>
3536 <string>Color of hyperlinks</string> 3774 <string>Color of hyperlinks</string>
3537 <key>Persist</key> 3775 <key>Persist</key>
3538 <integer>1</integer> 3776 <integer>1</integer>
3539 <key>Type</key> 3777 <key>Type</key>
3540 <string>Color4</string> 3778 <string>Color4</string>
3541 <key>Value</key> 3779 <key>Value</key>
3542 <array> 3780 <array>
3543 <real>0.60000002384185791015625</real> 3781 <real>0.600000023842</real>
3544 <real>0.60000002384185791015625</real> 3782 <real>0.600000023842</real>
3545 <real>1</real> 3783 <real>1.0</real>
3546 <real>1</real> 3784 <real>1.0</real>
3547 </array> 3785 </array>
3548 </map> 3786 </map>
3549 <key>HelpHomeURL</key> 3787 <key>HelpHomeURL</key>
3550 <map> 3788 <map>
3551 <key>Comment</key> 3789 <key>Comment</key>
3552 <string>URL of initial help page</string> 3790 <string>URL of initial help page</string>
3553 <key>Persist</key> 3791 <key>Persist</key>
3554 <integer>1</integer> 3792 <integer>1</integer>
3555 <key>Type</key> 3793 <key>Type</key>
3556 <string>String</string> 3794 <string>String</string>
3557 <key>Value</key> 3795 <key>Value</key>
3558 <string>help/index.html</string> 3796 <string>help/index.html</string>
3559 </map> 3797 </map>
3560 <key>HelpLastVisitedURL</key> 3798 <key>HelpLastVisitedURL</key>
3561 <map> 3799 <map>
3562 <key>Comment</key> 3800 <key>Comment</key>
3563 <string>URL of last help page, will be shown next time help is accessed</string> 3801 <string>URL of last help page, will be shown next time help is accessed</string>
3564 <key>Persist</key> 3802 <key>Persist</key>
3565 <integer>1</integer> 3803 <integer>1</integer>
3566 <key>Type</key> 3804 <key>Type</key>
3567 <string>String</string> 3805 <string>String</string>
3568 <key>Value</key> 3806 <key>Value</key>
3569 <string>help/index.html</string> 3807 <string>help/index.html</string>
3570 </map> 3808 </map>
3571 <key>HelperURI</key>
3572 <map>
3573 <key>Comment</key>
3574 <string>helper web CGI prefix to use</string>
3575 <key>Persist</key>
3576 <integer>1</integer>
3577 <key>Type</key>
3578 <string>String</string>
3579 <key>Value</key>
3580 <string />
3581 </map>
3582 <key>HighResSnapshot</key> 3809 <key>HighResSnapshot</key>
3583 <map> 3810 <map>
3584 <key>Comment</key> 3811 <key>Comment</key>
3585 <string>Double resolution of snapshot from current window resolution</string> 3812 <string>Double resolution of snapshot from current window resolution</string>
3586 <key>Persist</key> 3813 <key>Persist</key>
3587 <integer>1</integer> 3814 <integer>1</integer>
3588 <key>Type</key> 3815 <key>Type</key>
3589 <string>Boolean</string> 3816 <string>Boolean</string>
3590 <key>Value</key> 3817 <key>Value</key>
3591 <integer>0</integer> 3818 <integer>0</integer>
3592 </map> 3819 </map>
3593 <key>HtmlFindRect</key> 3820 <key>HtmlFindRect</key>
3594 <map> 3821 <map>
3595 <key>Comment</key> 3822 <key>Comment</key>
3596 <string>Rectangle for HTML find window</string> 3823 <string>Rectangle for HTML find window</string>
3597 <key>Persist</key> 3824 <key>Persist</key>
3598 <integer>1</integer> 3825 <integer>1</integer>
3599 <key>Type</key> 3826 <key>Type</key>
3600 <string>Rect</string> 3827 <string>Rect</string>
3601 <key>Value</key> 3828 <key>Value</key>
3602 <array> 3829 <array>
3603 <integer>16</integer> 3830 <integer>16</integer>
3604 <integer>650</integer> 3831 <integer>650</integer>
3605 <integer>600</integer> 3832 <integer>600</integer>
3606 <integer>128</integer> 3833 <integer>128</integer>
3607 </array> 3834 </array>
3608 </map> 3835 </map>
3609 <key>HtmlHelpLastPage</key> 3836 <key>HtmlHelpLastPage</key>
3610 <map> 3837 <map>
3611 <key>Comment</key> 3838 <key>Comment</key>
3612 <string>Last URL visited via help system</string> 3839 <string>Last URL visited via help system</string>
3613 <key>Persist</key> 3840 <key>Persist</key>
3614 <integer>1</integer> 3841 <integer>1</integer>
3615 <key>Type</key> 3842 <key>Type</key>
3616 <string>String</string> 3843 <string>String</string>
3617 <key>Value</key> 3844 <key>Value</key>
3618 <string /> 3845 <string />
3619 </map> 3846 </map>
3620 <key>HtmlHelpRect</key> 3847 <key>HtmlHelpRect</key>
3621 <map> 3848 <map>
3622 <key>Comment</key> 3849 <key>Comment</key>
3623 <string>Rectangle for HTML help window</string> 3850 <string>Rectangle for HTML help window</string>
3624 <key>Persist</key> 3851 <key>Persist</key>
3625 <integer>1</integer> 3852 <integer>1</integer>
3626 <key>Type</key> 3853 <key>Type</key>
3627 <string>Rect</string> 3854 <string>Rect</string>
3628 <key>Value</key> 3855 <key>Value</key>
3629 <array> 3856 <array>
3630 <integer>16</integer> 3857 <integer>16</integer>
3631 <integer>650</integer> 3858 <integer>650</integer>
3632 <integer>600</integer> 3859 <integer>600</integer>
3633 <integer>128</integer> 3860 <integer>128</integer>
3634 </array> 3861 </array>
3635 </map> 3862 </map>
3636 <key>HtmlReleaseMessage</key> 3863 <key>HtmlReleaseMessage</key>
3637 <map> 3864 <map>
3638 <key>Comment</key> 3865 <key>Comment</key>
3639 <string>Rectangle for HTML Release Message Floater window</string> 3866 <string>Rectangle for HTML Release Message Floater window</string>
3640 <key>Persist</key> 3867 <key>Persist</key>
3641 <integer>1</integer> 3868 <integer>1</integer>
3642 <key>Type</key> 3869 <key>Type</key>
3643 <string>Rect</string> 3870 <string>Rect</string>
3644 <key>Value</key> 3871 <key>Value</key>
3645 <array> 3872 <array>
3646 <integer>46</integer> 3873 <integer>46</integer>
3647 <integer>520</integer> 3874 <integer>520</integer>
3648 <integer>400</integer> 3875 <integer>400</integer>
3649 <integer>128</integer> 3876 <integer>128</integer>
3650 </array> 3877 </array>
3651 </map> 3878 </map>
3879 <key>IMChatColor</key>
3880 <map>
3881 <key>Comment</key>
3882 <string>Color of instant messages from other residents</string>
3883 <key>Persist</key>
3884 <integer>1</integer>
3885 <key>Type</key>
3886 <string>Color4</string>
3887 <key>Value</key>
3888 <array>
3889 <real>1.0</real>
3890 <real>1.0</real>
3891 <real>1.0</real>
3892 <real>1.0</real>
3893 </array>
3894 </map>
3652 <key>IMInChatHistory</key> 3895 <key>IMInChatHistory</key>
3653 <map> 3896 <map>
3654 <key>Comment</key> 3897 <key>Comment</key>
3655 <string>Copy IM into chat history</string> 3898 <string>Copy IM into chat history</string>
3656 <key>Persist</key> 3899 <key>Persist</key>
3657 <integer>1</integer> 3900 <integer>1</integer>
3658 <key>Type</key> 3901 <key>Type</key>
3659 <string>Boolean</string> 3902 <string>Boolean</string>
3660 <key>Value</key> 3903 <key>Value</key>
3661 <integer>0</integer> 3904 <integer>0</integer>
3662 </map> 3905 </map>
3663 <key>IMShowTimestamps</key> 3906 <key>IMShowTimestamps</key>
3664 <map> 3907 <map>
3665 <key>Comment</key> 3908 <key>Comment</key>
3666 <string>Show timestamps in IM</string> 3909 <string>Show timestamps in IM</string>
3667 <key>Persist</key> 3910 <key>Persist</key>
3668 <integer>1</integer> 3911 <integer>1</integer>
3669 <key>Type</key> 3912 <key>Type</key>
3670 <string>Boolean</string> 3913 <string>Boolean</string>
3671 <key>Value</key> 3914 <key>Value</key>
3672 <integer>1</integer> 3915 <integer>1</integer>
3673 </map> 3916 </map>
3674 <key>IgnorePixelDepth</key> 3917 <key>IgnorePixelDepth</key>
3675 <map> 3918 <map>
3676 <key>Comment</key> 3919 <key>Comment</key>
3677 <string>Ignore pixel depth settings.</string> 3920 <string>Ignore pixel depth settings.</string>
3678 <key>Persist</key> 3921 <key>Persist</key>
3679 <integer>1</integer> 3922 <integer>1</integer>
3680 <key>Type</key> 3923 <key>Type</key>
3681 <string>Boolean</string> 3924 <string>Boolean</string>
3682 <key>Value</key> 3925 <key>Value</key>
3683 <integer>0</integer> 3926 <integer>0</integer>
3684 </map> 3927 </map>
3685 <key>ImagePipelineUseHTTP</key> 3928 <key>ImagePipelineUseHTTP</key>
3686 <map> 3929 <map>
3687 <key>Comment</key> 3930 <key>Comment</key>
3688 <string>If TRUE use HTTP GET to fetch textures from the server</string> 3931 <string>If TRUE use HTTP GET to fetch textures from the server</string>
3689 <key>Persist</key> 3932 <key>Persist</key>
3690 <integer>1</integer> 3933 <integer>1</integer>
3691 <key>Type</key> 3934 <key>Type</key>
3692 <string>Boolean</string> 3935 <string>Boolean</string>
3693 <key>Value</key> 3936 <key>Value</key>
3694 <integer>0</integer> 3937 <integer>0</integer>
3695 </map> 3938 </map>
3696 <key>InBandwidth</key> 3939 <key>InBandwidth</key>
3697 <map> 3940 <map>
3698 <key>Comment</key> 3941 <key>Comment</key>
3699 <string>Incoming bandwidth throttle (bps)</string> 3942 <string>Incoming bandwidth throttle (bps)</string>
3700 <key>Persist</key> 3943 <key>Persist</key>
3701 <integer>1</integer> 3944 <integer>1</integer>
3702 <key>Type</key> 3945 <key>Type</key>
3703 <string>F32</string> 3946 <string>F32</string>
3704 <key>Value</key> 3947 <key>Value</key>
3705 <real>0</real> 3948 <real>0.0</real>
3706 </map> 3949 </map>
3707 <key>InventoryAutoOpenDelay</key> 3950 <key>InventoryAutoOpenDelay</key>
3708 <map> 3951 <map>
3709 <key>Comment</key> 3952 <key>Comment</key>
3710 <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string> 3953 <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
3711 <key>Persist</key> 3954 <key>Persist</key>
3712 <integer>1</integer> 3955 <integer>1</integer>
3713 <key>Type</key> 3956 <key>Type</key>
3714 <string>F32</string> 3957 <string>F32</string>
3715 <key>Value</key> 3958 <key>Value</key>
3716 <real>1</real> 3959 <real>1.0</real>
3717 </map> 3960 </map>
3718 <key>InventorySortOrder</key> 3961 <key>InventorySortOrder</key>
3719 <map> 3962 <map>
3720 <key>Comment</key> 3963 <key>Comment</key>
3721 <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 3964 <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
3722 <key>Persist</key> 3965 <key>Persist</key>
3723 <integer>1</integer> 3966 <integer>1</integer>
3724 <key>Type</key> 3967 <key>Type</key>
3725 <string>U32</string> 3968 <string>U32</string>
3726 <key>Value</key> 3969 <key>Value</key>
3727 <integer>7</integer> 3970 <integer>7</integer>
3728 </map> 3971 </map>
3729 <key>InvertMouse</key> 3972 <key>InvertMouse</key>
3730 <map> 3973 <map>
3731 <key>Comment</key> 3974 <key>Comment</key>
3732 <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string> 3975 <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
3733 <key>Persist</key> 3976 <key>Persist</key>
3734 <integer>1</integer> 3977 <integer>1</integer>
3735 <key>Type</key> 3978 <key>Type</key>
3736 <string>Boolean</string> 3979 <string>Boolean</string>
3737 <key>Value</key> 3980 <key>Value</key>
3738 <integer>0</integer> 3981 <integer>0</integer>
3739 </map> 3982 </map>
3983 <key>JoystickAvatarEnabled</key>
3984 <map>
3985 <key>Comment</key>
3986 <string>Enables the Joystick to control Avatar movmement.</string>
3987 <key>Persist</key>
3988 <integer>1</integer>
3989 <key>Type</key>
3990 <string>Boolean</string>
3991 <key>Value</key>
3992 <string>1</string>
3993 </map>
3994 <key>JoystickAxis0</key>
3995 <map>
3996 <key>Comment</key>
3997 <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
3998 <key>Persist</key>
3999 <integer>1</integer>
4000 <key>Type</key>
4001 <string>S32</string>
4002 <key>Value</key>
4003 <integer>1</integer>
4004 </map>
4005 <key>JoystickAxis1</key>
4006 <map>
4007 <key>Comment</key>
4008 <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
4009 <key>Persist</key>
4010 <integer>1</integer>
4011 <key>Type</key>
4012 <string>S32</string>
4013 <key>Value</key>
4014 <integer>0</integer>
4015 </map>
4016 <key>JoystickAxis2</key>
4017 <map>
4018 <key>Comment</key>
4019 <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
4020 <key>Persist</key>
4021 <integer>1</integer>
4022 <key>Type</key>
4023 <string>S32</string>
4024 <key>Value</key>
4025 <integer>2</integer>
4026 </map>
4027 <key>JoystickAxis3</key>
4028 <map>
4029 <key>Comment</key>
4030 <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
4031 <key>Persist</key>
4032 <integer>1</integer>
4033 <key>Type</key>
4034 <string>S32</string>
4035 <key>Value</key>
4036 <integer>4</integer>
4037 </map>
4038 <key>JoystickAxis4</key>
4039 <map>
4040 <key>Comment</key>
4041 <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
4042 <key>Persist</key>
4043 <integer>1</integer>
4044 <key>Type</key>
4045 <string>S32</string>
4046 <key>Value</key>
4047 <integer>3</integer>
4048 </map>
4049 <key>JoystickAxis5</key>
4050 <map>
4051 <key>Comment</key>
4052 <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
4053 <key>Persist</key>
4054 <integer>1</integer>
4055 <key>Type</key>
4056 <string>S32</string>
4057 <key>Value</key>
4058 <integer>5</integer>
4059 </map>
4060 <key>JoystickAxis6</key>
4061 <map>
4062 <key>Comment</key>
4063 <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
4064 <key>Persist</key>
4065 <integer>1</integer>
4066 <key>Type</key>
4067 <string>S32</string>
4068 <key>Value</key>
4069 <integer>-1</integer>
4070 </map>
4071 <key>JoystickBuildEnabled</key>
4072 <map>
4073 <key>Comment</key>
4074 <string>Enables the Joystick to move edited objects.</string>
4075 <key>Persist</key>
4076 <integer>1</integer>
4077 <key>Type</key>
4078 <string>Boolean</string>
4079 <key>Value</key>
4080 <string>1</string>
4081 </map>
4082 <key>JoystickEnabled</key>
4083 <map>
4084 <key>Comment</key>
4085 <string>Enables Joystick Input.</string>
4086 <key>Persist</key>
4087 <integer>1</integer>
4088 <key>Type</key>
4089 <string>Boolean</string>
4090 <key>Value</key>
4091 <integer>0</integer>
4092 </map>
4093 <key>JoystickFlycamEnabled</key>
4094 <map>
4095 <key>Comment</key>
4096 <string>Enables the Joystick to control the flycam.</string>
4097 <key>Persist</key>
4098 <integer>1</integer>
4099 <key>Type</key>
4100 <string>Boolean</string>
4101 <key>Value</key>
4102 <string>1</string>
4103 </map>
4104 <key>JoystickInitialized</key>
4105 <map>
4106 <key>Comment</key>
4107 <string>Whether or not a joystick has been detected and initiailized.</string>
4108 <key>Persist</key>
4109 <integer>1</integer>
4110 <key>Type</key>
4111 <string>String</string>
4112 <key>Value</key>
4113 <string />
4114 </map>
3740 <key>KeepAspectForSnapshot</key> 4115 <key>KeepAspectForSnapshot</key>
3741 <map> 4116 <map>
3742 <key>Comment</key> 4117 <key>Comment</key>
3743 <string>Use full window when taking snapshot, regardless of requested image size</string> 4118 <string>Use full window when taking snapshot, regardless of requested image size</string>
3744 <key>Persist</key> 4119 <key>Persist</key>
3745 <integer>1</integer> 4120 <integer>1</integer>
3746 <key>Type</key> 4121 <key>Type</key>
3747 <string>Boolean</string> 4122 <string>Boolean</string>
3748 <key>Value</key> 4123 <key>Value</key>
3749 <integer>1</integer> 4124 <integer>1</integer>
3750 </map> 4125 </map>
3751 <key>LCDDestination</key> 4126 <key>LCDDestination</key>
3752 <map> 4127 <map>
3753 <key>Comment</key> 4128 <key>Comment</key>
3754 <string>Which LCD to use</string> 4129 <string>Which LCD to use</string>
3755 <key>Persist</key> 4130 <key>Persist</key>
3756 <integer>1</integer> 4131 <integer>1</integer>
3757 <key>Type</key> 4132 <key>Type</key>
3758 <string>S32</string> 4133 <string>S32</string>
3759 <key>Value</key> 4134 <key>Value</key>
3760 <integer>0</integer> 4135 <integer>0</integer>
3761 </map> 4136 </map>
3762 <key>LSLHelpRect</key> 4137 <key>LSLHelpRect</key>
3763 <map> 4138 <map>
3764 <key>Comment</key> 4139 <key>Comment</key>
3765 <string>Rectangle for LSL help window</string> 4140 <string>Rectangle for LSL help window</string>
3766 <key>Persist</key> 4141 <key>Persist</key>
3767 <integer>1</integer> 4142 <integer>1</integer>
3768 <key>Type</key> 4143 <key>Type</key>
3769 <string>Rect</string> 4144 <string>Rect</string>
3770 <key>Value</key> 4145 <key>Value</key>
3771 <array> 4146 <array>
3772 <integer>0</integer> 4147 <integer>0</integer>
3773 <integer>400</integer> 4148 <integer>400</integer>
3774 <integer>400</integer> 4149 <integer>400</integer>
3775 <integer>0</integer> 4150 <integer>0</integer>
3776 </array> 4151 </array>
3777 </map> 4152 </map>
3778 <key>LSLHelpURL</key> 4153 <key>LSLHelpURL</key>
3779 <map> 4154 <map>
3780 <key>Comment</key> 4155 <key>Comment</key>
3781 <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string> 4156 <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
3782 <key>Persist</key> 4157 <key>Persist</key>
3783 <integer>1</integer> 4158 <integer>1</integer>
3784 <key>Type</key> 4159 <key>Type</key>
3785 <string>String</string> 4160 <string>String</string>
3786 <key>Value</key> 4161 <key>Value</key>
3787 <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string> 4162 <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
3788 </map> 4163 </map>
3789 <key>LagMeterShrunk</key> 4164 <key>LagMeterShrunk</key>
3790 <map> 4165 <map>
3791 <key>Comment</key> 4166 <key>Comment</key>
3792 <string>Last large/small state for lag meter</string> 4167 <string>Last large/small state for lag meter</string>
3793 <key>Persist</key> 4168 <key>Persist</key>
3794 <integer>1</integer> 4169 <integer>1</integer>
3795 <key>Type</key> 4170 <key>Type</key>
3796 <string>Boolean</string> 4171 <string>Boolean</string>
3797 <key>Value</key> 4172 <key>Value</key>
3798 <integer>0</integer> 4173 <integer>0</integer>
3799 </map> 4174 </map>
3800 <key>Language</key> 4175 <key>Language</key>
3801 <map> 4176 <map>
3802 <key>Comment</key> 4177 <key>Comment</key>
3803 <string>Language specifier (for XUI)</string> 4178 <string>Language specifier (for XUI)</string>
3804 <key>Persist</key> 4179 <key>Persist</key>
3805 <integer>1</integer> 4180 <integer>1</integer>
3806 <key>Type</key> 4181 <key>Type</key>
3807 <string>String</string> 4182 <string>String</string>
3808 <key>Value</key> 4183 <key>Value</key>
3809 <string>default</string> 4184 <string>default</string>
3810 </map> 4185 </map>
3811 <key>LastFeatureVersion</key> 4186 <key>LastFeatureVersion</key>
3812 <map> 4187 <map>
3813 <key>Comment</key> 4188 <key>Comment</key>
3814 <string>[DO NOT MODIFY] Version number for tracking hardware changes</string> 4189 <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
3815 <key>Persist</key> 4190 <key>Persist</key>
3816 <integer>1</integer> 4191 <integer>1</integer>
3817 <key>Type</key> 4192 <key>Type</key>
3818 <string>S32</string> 4193 <string>S32</string>
3819 <key>Value</key> 4194 <key>Value</key>
3820 <integer>0</integer> 4195 <integer>0</integer>
3821 </map> 4196 </map>
3822 <key>LastFindPanel</key> 4197 <key>LastFindPanel</key>
3823 <map> 4198 <map>
3824 <key>Comment</key> 4199 <key>Comment</key>
3825 <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string> 4200 <string>Controls which find operation appears by default when clicking "Find" button </string>
3826 <key>Persist</key> 4201 <key>Persist</key>
3827 <integer>1</integer> 4202 <integer>1</integer>
3828 <key>Type</key> 4203 <key>Type</key>
3829 <string>String</string> 4204 <string>String</string>
3830 <key>Value</key> 4205 <key>Value</key>
3831 <string>find_all_panel</string> 4206 <string>find_all_panel</string>
3832 </map> 4207 </map>
3833 <key>LastName</key> 4208 <key>LastName</key>
3834 <map> 4209 <map>
3835 <key>Comment</key> 4210 <key>Comment</key>
3836 <string>Login last name</string> 4211 <string>Login last name</string>
3837 <key>Persist</key> 4212 <key>Persist</key>
3838 <integer>1</integer> 4213 <integer>1</integer>
3839 <key>Type</key> 4214 <key>Type</key>
3840 <string>String</string> 4215 <string>String</string>
3841 <key>Value</key> 4216 <key>Value</key>
3842 <string /> 4217 <string />
3843 </map> 4218 </map>
3844 <key>LastPrefTab</key> 4219 <key>LastPrefTab</key>
3845 <map> 4220 <map>
3846 <key>Comment</key> 4221 <key>Comment</key>
3847 <string>Last selected tab in preferences window</string> 4222 <string>Last selected tab in preferences window</string>
3848 <key>Persist</key> 4223 <key>Persist</key>
3849 <integer>1</integer> 4224 <integer>1</integer>
3850 <key>Type</key> 4225 <key>Type</key>
3851 <string>S32</string> 4226 <string>S32</string>
3852 <key>Value</key> 4227 <key>Value</key>
3853 <integer>0</integer> 4228 <integer>0</integer>
3854 </map> 4229 </map>
3855 <key>LastRunVersion</key> 4230 <key>LastRunVersion</key>
3856 <map> 4231 <map>
3857 <key>Comment</key> 4232 <key>Comment</key>
3858 <string>Version number of last instance of the viewer that you ran</string> 4233 <string>Version number of last instance of the viewer that you ran</string>
3859 <key>Persist</key> 4234 <key>Persist</key>
3860 <integer>1</integer> 4235 <integer>1</integer>
3861 <key>Type</key> 4236 <key>Type</key>
3862 <string>String</string> 4237 <string>String</string>
3863 <key>Value</key> 4238 <key>Value</key>
3864 <string>0.0.0</string> 4239 <string>0.0.0</string>
3865 </map> 4240 </map>
3866 <key>LastSnapshotHeight</key> 4241 <key>LastSnapshotHeight</key>
3867 <map> 4242 <map>
3868 <key>Comment</key> 4243 <key>Comment</key>
3869 <string>The height of the last snapshot, in px</string> 4244 <string>The height of the last snapshot, in px</string>
3870 <key>Persist</key> 4245 <key>Persist</key>
3871 <integer>1</integer> 4246 <integer>1</integer>
3872 <key>Type</key> 4247 <key>Type</key>
3873 <string>S32</string> 4248 <string>S32</string>
3874 <key>Value</key> 4249 <key>Value</key>
3875 <integer>768</integer> 4250 <integer>768</integer>
3876 </map> 4251 </map>
3877 <key>LastSnapshotType</key> 4252 <key>LastSnapshotType</key>
3878 <map> 4253 <map>
3879 <key>Comment</key> 4254 <key>Comment</key>
3880 <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string> 4255 <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
3881 <key>Persist</key> 4256 <key>Persist</key>
3882 <integer>1</integer> 4257 <integer>1</integer>
3883 <key>Type</key> 4258 <key>Type</key>
3884 <string>S32</string> 4259 <string>S32</string>
3885 <key>Value</key> 4260 <key>Value</key>
3886 <integer>0</integer> 4261 <integer>0</integer>
3887 </map> 4262 </map>
3888 <key>LastSnapshotWidth</key> 4263 <key>LastSnapshotWidth</key>
3889 <map> 4264 <map>
3890 <key>Comment</key> 4265 <key>Comment</key>
3891 <string>The width of the last snapshot, in px</string> 4266 <string>The width of the last snapshot, in px</string>
3892 <key>Persist</key> 4267 <key>Persist</key>
3893 <integer>1</integer> 4268 <integer>1</integer>
3894 <key>Type</key> 4269 <key>Type</key>
3895 <string>S32</string> 4270 <string>S32</string>
3896 <key>Value</key> 4271 <key>Value</key>
3897 <integer>1024</integer> 4272 <integer>1024</integer>
3898 </map> 4273 </map>
3899 <key>LeftClickShowMenu</key> 4274 <key>LeftClickShowMenu</key>
3900 <map> 4275 <map>
3901 <key>Comment</key> 4276 <key>Comment</key>
3902 <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string> 4277 <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
3903 <key>Persist</key> 4278 <key>Persist</key>
3904 <integer>1</integer> 4279 <integer>1</integer>
3905 <key>Type</key> 4280 <key>Type</key>
3906 <string>Boolean</string> 4281 <string>Boolean</string>
3907 <key>Value</key> 4282 <key>Value</key>
3908 <integer>0</integer> 4283 <integer>0</integer>
3909 </map> 4284 </map>
3910 <key>LimitDragDistance</key> 4285 <key>LimitDragDistance</key>
3911 <map> 4286 <map>
3912 <key>Comment</key> 4287 <key>Comment</key>
3913 <string>Limit translation of object via translate tool</string> 4288 <string>Limit translation of object via translate tool</string>
3914 <key>Persist</key> 4289 <key>Persist</key>
3915 <integer>1</integer> 4290 <integer>1</integer>
3916 <key>Type</key> 4291 <key>Type</key>
3917 <string>Boolean</string> 4292 <string>Boolean</string>
3918 <key>Value</key> 4293 <key>Value</key>
3919 <integer>1</integer> 4294 <integer>1</integer>
3920 </map> 4295 </map>
3921 <key>LimitSelectDistance</key> 4296 <key>LimitSelectDistance</key>
3922 <map> 4297 <map>
3923 <key>Comment</key> 4298 <key>Comment</key>
3924 <string>Disallow selection of objects beyond max select distance</string> 4299 <string>Disallow selection of objects beyond max select distance</string>
3925 <key>Persist</key> 4300 <key>Persist</key>
3926 <integer>1</integer> 4301 <integer>1</integer>
3927 <key>Type</key> 4302 <key>Type</key>
3928 <string>Boolean</string> 4303 <string>Boolean</string>
3929 <key>Value</key> 4304 <key>Value</key>
3930 <integer>1</integer> 4305 <integer>1</integer>
3931 </map> 4306 </map>
4307 <key>LipSyncAah</key>
4308 <map>
4309 <key>Comment</key>
4310 <string>Aah (jaw opening) babble loop</string>
4311 <key>Persist</key>
4312 <integer>1</integer>
4313 <key>Type</key>
4314 <string>String</string>
4315 <key>Value</key>
4316 <string>257998776531013446642343</string>
4317 </map>
4318 <key>LipSyncAahPowerTransfer</key>
4319 <map>
4320 <key>Comment</key>
4321 <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
4322 <key>Persist</key>
4323 <integer>1</integer>
4324 <key>Type</key>
4325 <string>String</string>
4326 <key>Value</key>
4327 <string>0000123456789</string>
4328 </map>
4329 <key>LipSyncEnabled</key>
4330 <map>
4331 <key>Comment</key>
4332 <string>0 disable lip-sync, 1 enable babble loop</string>
4333 <key>Persist</key>
4334 <integer>1</integer>
4335 <key>Type</key>
4336 <string>Boolean</string>
4337 <key>Value</key>
4338 <integer>0</integer>
4339 </map>
4340 <key>LipSyncOoh</key>
4341 <map>
4342 <key>Comment</key>
4343 <string>Ooh (mouth width) babble loop</string>
4344 <key>Persist</key>
4345 <integer>1</integer>
4346 <key>Type</key>
4347 <string>String</string>
4348 <key>Value</key>
4349 <string>1247898743223344444443200000</string>
4350 </map>
4351 <key>LipSyncOohAahRate</key>
4352 <map>
4353 <key>Comment</key>
4354 <string>Rate to babble Ooh and Aah (/sec)</string>
4355 <key>Persist</key>
4356 <integer>1</integer>
4357 <key>Type</key>
4358 <string>F32</string>
4359 <key>Value</key>
4360 <real>24.0</real>
4361 </map>
4362 <key>LipSyncOohPowerTransfer</key>
4363 <map>
4364 <key>Comment</key>
4365 <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
4366 <key>Persist</key>
4367 <integer>1</integer>
4368 <key>Type</key>
4369 <string>String</string>
4370 <key>Value</key>
4371 <string>0012345566778899</string>
4372 </map>
3932 <key>LocalCacheVersion</key> 4373 <key>LocalCacheVersion</key>
3933 <map> 4374 <map>
3934 <key>Comment</key> 4375 <key>Comment</key>
3935 <string>Version number of cache</string> 4376 <string>Version number of cache</string>
3936 <key>Persist</key> 4377 <key>Persist</key>
3937 <integer>1</integer> 4378 <integer>1</integer>
3938 <key>Type</key> 4379 <key>Type</key>
3939 <string>S32</string> 4380 <string>S32</string>
3940 <key>Value</key> 4381 <key>Value</key>
3941 <integer>0</integer> 4382 <integer>0</integer>
3942 </map> 4383 </map>
3943 <key>LogMessages</key> 4384 <key>LogMessages</key>
3944 <map> 4385 <map>
3945 <key>Comment</key> 4386 <key>Comment</key>
3946 <string>Log network traffic</string> 4387 <string>Log network traffic</string>
3947 <key>Persist</key> 4388 <key>Persist</key>
3948 <integer>1</integer> 4389 <integer>1</integer>
3949 <key>Type</key> 4390 <key>Type</key>
3950 <string>Boolean</string> 4391 <string>Boolean</string>
3951 <key>Value</key> 4392 <key>Value</key>
3952 <integer>0</integer> 4393 <integer>0</integer>
3953 </map> 4394 </map>
3954 <key>LoginAsGod</key> 4395 <key>LoginAsGod</key>
3955 <map> 4396 <map>
3956 <key>Comment</key> 4397 <key>Comment</key>
3957 <string>Attempt to login with god powers (Linden accounts only)</string> 4398 <string>Attempt to login with god powers (Linden accounts only)</string>
3958 <key>Persist</key> 4399 <key>Persist</key>
3959 <integer>1</integer> 4400 <integer>1</integer>
3960 <key>Type</key> 4401 <key>Type</key>
3961 <string>Boolean</string> 4402 <string>Boolean</string>
3962 <key>Value</key> 4403 <key>Value</key>
3963 <integer>0</integer> 4404 <integer>0</integer>
3964 </map> 4405 </map>
3965 <key>LoginLastLocation</key> 4406 <key>LoginLastLocation</key>
3966 <map> 4407 <map>
3967 <key>Comment</key> 4408 <key>Comment</key>
3968 <string>Login at same location you last logged out</string> 4409 <string>Login at same location you last logged out</string>
3969 <key>Persist</key> 4410 <key>Persist</key>
3970 <integer>1</integer> 4411 <integer>1</integer>
3971 <key>Type</key> 4412 <key>Type</key>
3972 <string>Boolean</string> 4413 <string>Boolean</string>
3973 <key>Value</key> 4414 <key>Value</key>
3974 <integer>1</integer> 4415 <integer>1</integer>
3975 </map> 4416 </map>
3976 <key>LoginPage</key> 4417 <key>LoginPage</key>
3977 <map> 4418 <map>
3978 <key>Comment</key> 4419 <key>Comment</key>
3979 <string>Login authentication page.</string> 4420 <string>Login authentication page.</string>
3980 <key>Persist</key> 4421 <key>Persist</key>
3981 <integer>1</integer> 4422 <integer>1</integer>
3982 <key>Type</key> 4423 <key>Type</key>
3983 <string>String</string> 4424 <string>String</string>
3984 <key>Value</key> 4425 <key>Value</key>
3985 <string /> 4426 <string />
3986 </map> 4427 </map>
3987 <key>LoginURI</key>
3988 <map>
3989 <key>Comment</key>
3990 <string>login server and CGI prefix to use</string>
3991 <key>Persist</key>
3992 <integer>1</integer>
3993 <key>Type</key>
3994 <string>String</string>
3995 <key>Value</key>
3996 <string />
3997 </map>
3998 <key>LosslessJ2CUpload</key> 4428 <key>LosslessJ2CUpload</key>
3999 <map> 4429 <map>
4000 <key>Comment</key> 4430 <key>Comment</key>
4001 <string>Use lossless compression for small image uploads</string> 4431 <string>Use lossless compression for small image uploads</string>
4002 <key>Persist</key> 4432 <key>Persist</key>
4003 <integer>1</integer> 4433 <integer>1</integer>
4004 <key>Type</key> 4434 <key>Type</key>
4005 <string>Boolean</string> 4435 <string>Boolean</string>
4006 <key>Value</key> 4436 <key>Value</key>
4007 <integer>0</integer> 4437 <integer>0</integer>
4008 </map> 4438 </map>
4439 <key>MainloopTimeoutDefault</key>
4440 <map>
4441 <key>Comment</key>
4442 <string>Timeout duration for mainloop lock detection, in seconds.</string>
4443 <key>Persist</key>
4444 <integer>1</integer>
4445 <key>Type</key>
4446 <string>F32</string>
4447 <key>Value</key>
4448 <real>10.0</real>
4449 </map>
4009 <key>MapOverlayIndex</key> 4450 <key>MapOverlayIndex</key>
4010 <map> 4451 <map>
4011 <key>Comment</key> 4452 <key>Comment</key>
4012 <string>Currently selected world map type</string> 4453 <string>Currently selected world map type</string>
4013 <key>Persist</key> 4454 <key>Persist</key>
4014 <integer>1</integer> 4455 <integer>1</integer>
4015 <key>Type</key> 4456 <key>Type</key>
4016 <string>S32</string> 4457 <string>S32</string>
4017 <key>Value</key> 4458 <key>Value</key>
4018 <integer>0</integer> 4459 <integer>0</integer>
4019 </map> 4460 </map>
4020 <key>MapScale</key> 4461 <key>MapScale</key>
4021 <map> 4462 <map>
4022 <key>Comment</key> 4463 <key>Comment</key>
4023 <string>World map zoom level (pixels per region)</string> 4464 <string>World map zoom level (pixels per region)</string>
4024 <key>Persist</key> 4465 <key>Persist</key>
4025 <integer>1</integer> 4466 <integer>1</integer>
4026 <key>Type</key> 4467 <key>Type</key>
4027 <string>F32</string> 4468 <string>F32</string>
4028 <key>Value</key> 4469 <key>Value</key>
4029 <real>128</real> 4470 <real>128.0</real>
4030 </map> 4471 </map>
4031 <key>MapShowClassifieds</key> 4472 <key>MapShowClassifieds</key>
4032 <map> 4473 <map>
4033 <key>Comment</key> 4474 <key>Comment</key>
4034 <string>Show locations associated with classified ads on world map</string> 4475 <string>Show locations associated with classified ads on world map</string>
4035 <key>Persist</key> 4476 <key>Persist</key>
4036 <integer>1</integer> 4477 <integer>1</integer>
4037 <key>Type</key> 4478 <key>Type</key>
4038 <string>Boolean</string> 4479 <string>Boolean</string>
4039 <key>Value</key> 4480 <key>Value</key>
4040 <integer>1</integer> 4481 <integer>1</integer>
4041 </map> 4482 </map>
4042 <key>MapShowEvents</key> 4483 <key>MapShowEvents</key>
4043 <map> 4484 <map>
4044 <key>Comment</key> 4485 <key>Comment</key>
4045 <string>Show events on world map</string> 4486 <string>Show events on world map</string>
4046 <key>Persist</key> 4487 <key>Persist</key>
4047 <integer>1</integer> 4488 <integer>1</integer>
4048 <key>Type</key> 4489 <key>Type</key>
4049 <string>Boolean</string> 4490 <string>Boolean</string>
4050 <key>Value</key> 4491 <key>Value</key>
4051 <integer>1</integer> 4492 <integer>1</integer>
4052 </map> 4493 </map>
4053 <key>MapShowInfohubs</key> 4494 <key>MapShowInfohubs</key>
4054 <map> 4495 <map>
4055 <key>Comment</key> 4496 <key>Comment</key>
4056 <string>Show infohubs on the world map</string> 4497 <string>Show infohubs on the world map</string>
4057 <key>Persist</key> 4498 <key>Persist</key>
4058 <integer>1</integer> 4499 <integer>1</integer>
4059 <key>Type</key> 4500 <key>Type</key>
4060 <string>Boolean</string> 4501 <string>Boolean</string>
4061 <key>Value</key> 4502 <key>Value</key>
4062 <integer>1</integer> 4503 <integer>1</integer>
4063 </map> 4504 </map>
4064 <key>MapShowLandForSale</key> 4505 <key>MapShowLandForSale</key>
4065 <map> 4506 <map>
4066 <key>Comment</key> 4507 <key>Comment</key>
4067 <string>Show land for sale on world map</string> 4508 <string>Show land for sale on world map</string>
4068 <key>Persist</key> 4509 <key>Persist</key>
4069 <integer>1</integer> 4510 <integer>1</integer>
4070 <key>Type</key> 4511 <key>Type</key>
4071 <string>Boolean</string> 4512 <string>Boolean</string>
4072 <key>Value</key> 4513 <key>Value</key>
4073 <integer>0</integer> 4514 <integer>0</integer>
4074 </map> 4515 </map>
4075 <key>MapShowPeople</key> 4516 <key>MapShowPeople</key>
4076 <map> 4517 <map>
4077 <key>Comment</key> 4518 <key>Comment</key>
4078 <string>Show other users on world map</string> 4519 <string>Show other users on world map</string>
4079 <key>Persist</key> 4520 <key>Persist</key>
4080 <integer>1</integer> 4521 <integer>1</integer>
4081 <key>Type</key> 4522 <key>Type</key>
4082 <string>Boolean</string> 4523 <string>Boolean</string>
4083 <key>Value</key> 4524 <key>Value</key>
4084 <integer>1</integer> 4525 <integer>1</integer>
4085 </map> 4526 </map>
4086 <key>MapShowPopular</key>
4087 <map>
4088 <key>Comment</key>
4089 <string>Show popular places on world map</string>
4090 <key>Persist</key>
4091 <integer>1</integer>
4092 <key>Type</key>
4093 <string>Boolean</string>
4094 <key>Value</key>
4095 <integer>1</integer>
4096 </map>
4097 <key>MapShowTelehubs</key> 4527 <key>MapShowTelehubs</key>
4098 <map> 4528 <map>
4099 <key>Comment</key> 4529 <key>Comment</key>
4100 <string>Show telehubs on world map</string> 4530 <string>Show telehubs on world map</string>
4101 <key>Persist</key> 4531 <key>Persist</key>
4102 <integer>1</integer> 4532 <integer>1</integer>
4103 <key>Type</key> 4533 <key>Type</key>
4104 <string>Boolean</string> 4534 <string>Boolean</string>
4105 <key>Value</key> 4535 <key>Value</key>
4106 <integer>1</integer> 4536 <integer>1</integer>
4107 </map> 4537 </map>
4108 <key>Marker</key> 4538 <key>Marker</key>
4109 <map> 4539 <map>
4110 <key>Comment</key> 4540 <key>Comment</key>
4111 <string>[NOT USED]</string> 4541 <string>[NOT USED]</string>
4112 <key>Persist</key> 4542 <key>Persist</key>
4113 <integer>1</integer> 4543 <integer>1</integer>
4114 <key>Type</key> 4544 <key>Type</key>
4115 <string>String</string> 4545 <string>String</string>
4116 <key>Value</key> 4546 <key>Value</key>
4117 <string /> 4547 <string />
4118 </map> 4548 </map>
4119 <key>MaxDragDistance</key> 4549 <key>MaxDragDistance</key>
4120 <map> 4550 <map>
4121 <key>Comment</key> 4551 <key>Comment</key>
4122 <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string> 4552 <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
4123 <key>Persist</key> 4553 <key>Persist</key>
4124 <integer>1</integer> 4554 <integer>1</integer>
4125 <key>Type</key> 4555 <key>Type</key>
4126 <string>F32</string> 4556 <string>F32</string>
4127 <key>Value</key> 4557 <key>Value</key>
4128 <real>48</real> 4558 <real>48.0</real>
4129 </map> 4559 </map>
4130 <key>MaxSelectDistance</key> 4560 <key>MaxSelectDistance</key>
4131 <map> 4561 <map>
4132 <key>Comment</key> 4562 <key>Comment</key>
4133 <string>Maximum allowed selection distance (meters from avatar)</string> 4563 <string>Maximum allowed selection distance (meters from avatar)</string>
4134 <key>Persist</key> 4564 <key>Persist</key>
4135 <integer>1</integer> 4565 <integer>1</integer>
4136 <key>Type</key> 4566 <key>Type</key>
4137 <string>F32</string> 4567 <string>F32</string>
4138 <key>Value</key> 4568 <key>Value</key>
4139 <real>64</real> 4569 <real>64.0</real>
4140 </map> 4570 </map>
4141 <key>MeanCollisionBump</key> 4571 <key>MeanCollisionBump</key>
4142 <map> 4572 <map>
4143 <key>Comment</key> 4573 <key>Comment</key>
4144 <string>You have experienced an abuse of being bumped by an object or avatar</string> 4574 <string>You have experienced an abuse of being bumped by an object or avatar</string>
4145 <key>Persist</key> 4575 <key>Persist</key>
4146 <integer>1</integer> 4576 <integer>1</integer>
4147 <key>Type</key> 4577 <key>Type</key>
4148 <string>Boolean</string> 4578 <string>Boolean</string>
4149 <key>Value</key> 4579 <key>Value</key>
4150 <integer>0</integer> 4580 <integer>0</integer>
4151 </map> 4581 </map>
4152 <key>MeanCollisionPhysical</key> 4582 <key>MeanCollisionPhysical</key>
4153 <map> 4583 <map>
4154 <key>Comment</key> 4584 <key>Comment</key>
4155 <string>You have experienced an abuse from a physical object</string> 4585 <string>You have experienced an abuse from a physical object</string>
4156 <key>Persist</key> 4586 <key>Persist</key>
4157 <integer>1</integer> 4587 <integer>1</integer>
4158 <key>Type</key> 4588 <key>Type</key>
4159 <string>Boolean</string> 4589 <string>Boolean</string>
4160 <key>Value</key> 4590 <key>Value</key>
4161 <integer>0</integer> 4591 <integer>0</integer>
4162 </map> 4592 </map>
4163 <key>MeanCollisionPushObject</key> 4593 <key>MeanCollisionPushObject</key>
4164 <map> 4594 <map>
4165 <key>Comment</key> 4595 <key>Comment</key>
4166 <string>You have experienced an abuse of being pushed by a scripted object</string> 4596 <string>You have experienced an abuse of being pushed by a scripted object</string>
4167 <key>Persist</key> 4597 <key>Persist</key>
4168 <integer>1</integer> 4598 <integer>1</integer>
4169 <key>Type</key> 4599 <key>Type</key>
4170 <string>Boolean</string> 4600 <string>Boolean</string>
4171 <key>Value</key> 4601 <key>Value</key>
4172 <integer>0</integer> 4602 <integer>0</integer>
4173 </map> 4603 </map>
4174 <key>MeanCollisionScripted</key> 4604 <key>MeanCollisionScripted</key>
4175 <map> 4605 <map>
4176 <key>Comment</key> 4606 <key>Comment</key>
4177 <string>You have experienced an abuse from a scripted object</string> 4607 <string>You have experienced an abuse from a scripted object</string>
4178 <key>Persist</key> 4608 <key>Persist</key>
4179 <integer>1</integer> 4609 <integer>1</integer>
4180 <key>Type</key> 4610 <key>Type</key>
4181 <string>Boolean</string> 4611 <string>Boolean</string>
4182 <key>Value</key> 4612 <key>Value</key>
4183 <integer>0</integer> 4613 <integer>0</integer>
4184 </map> 4614 </map>
4185 <key>MeanCollisionSelected</key> 4615 <key>MeanCollisionSelected</key>
4186 <map> 4616 <map>
4187 <key>Comment</key> 4617 <key>Comment</key>
4188 <string>You have experienced an abuse of being pushed via a selected object</string> 4618 <string>You have experienced an abuse of being pushed via a selected object</string>
4189 <key>Persist</key> 4619 <key>Persist</key>
4190 <integer>1</integer> 4620 <integer>1</integer>
4191 <key>Type</key> 4621 <key>Type</key>
4192 <string>Boolean</string> 4622 <string>Boolean</string>
4193 <key>Value</key> 4623 <key>Value</key>
4194 <integer>0</integer> 4624 <integer>0</integer>
4195 </map> 4625 </map>
4196 <key>MenuAccessKeyTime</key> 4626 <key>MenuAccessKeyTime</key>
4197 <map> 4627 <map>
4198 <key>Comment</key> 4628 <key>Comment</key>
4199 <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string> 4629 <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
4200 <key>Persist</key> 4630 <key>Persist</key>
4201 <integer>1</integer> 4631 <integer>1</integer>
4202 <key>Type</key> 4632 <key>Type</key>
4203 <string>F32</string> 4633 <string>F32</string>
4204 <key>Value</key> 4634 <key>Value</key>
4205 <real>0.25</real> 4635 <real>0.25</real>
4206 </map> 4636 </map>
4207 <key>MenuBarHeight</key> 4637 <key>MenuBarHeight</key>
4208 <map> 4638 <map>
4209 <key>Comment</key> 4639 <key>Comment</key>
4210 <string /> 4640 <string />
4211 <key>Persist</key> 4641 <key>Persist</key>
4212 <integer>0</integer> 4642 <integer>0</integer>
4213 <key>Type</key> 4643 <key>Type</key>
4214 <string>S32</string> 4644 <string>S32</string>
4215 <key>Value</key> 4645 <key>Value</key>
4216 <integer>18</integer> 4646 <integer>18</integer>
4217 </map> 4647 </map>
4218 <key>MenuBarWidth</key> 4648 <key>MenuBarWidth</key>
4219 <map> 4649 <map>
4220 <key>Comment</key> 4650 <key>Comment</key>
4221 <string /> 4651 <string />
4222 <key>Persist</key> 4652 <key>Persist</key>
4223 <integer>0</integer> 4653 <integer>0</integer>
4224 <key>Type</key> 4654 <key>Type</key>
4225 <string>S32</string> 4655 <string>S32</string>
4226 <key>Value</key> 4656 <key>Value</key>
4227 <integer>410</integer> 4657 <integer>410</integer>
4228 </map> 4658 </map>
4229 <key>MiniMapRotate</key> 4659 <key>MiniMapRotate</key>
4230 <map> 4660 <map>
4231 <key>Comment</key> 4661 <key>Comment</key>
4232 <string>Rotate miniature world map to avatar direction</string> 4662 <string>Rotate miniature world map to avatar direction</string>
4233 <key>Persist</key> 4663 <key>Persist</key>
4234 <integer>1</integer> 4664 <integer>1</integer>
4235 <key>Type</key> 4665 <key>Type</key>
4236 <string>Boolean</string> 4666 <string>Boolean</string>
4237 <key>Value</key> 4667 <key>Value</key>
4238 <integer>1</integer> 4668 <integer>1</integer>
4239 </map> 4669 </map>
4240 <key>MiniMapScale</key> 4670 <key>MiniMapScale</key>
4241 <map> 4671 <map>
4242 <key>Comment</key> 4672 <key>Comment</key>
4243 <string>Miniature world map zoom levle (pixels per region)</string> 4673 <string>Miniature world map zoom levle (pixels per region)</string>
4244 <key>Persist</key> 4674 <key>Persist</key>
4245 <integer>1</integer> 4675 <integer>1</integer>
4246 <key>Type</key> 4676 <key>Type</key>
4247 <string>F32</string> 4677 <string>F32</string>
4248 <key>Value</key> 4678 <key>Value</key>
4249 <real>128</real> 4679 <real>128.0</real>
4250 </map> 4680 </map>
4251 <key>MouseSensitivity</key> 4681 <key>MouseSensitivity</key>
4252 <map> 4682 <map>
4253 <key>Comment</key> 4683 <key>Comment</key>
4254 <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string> 4684 <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
4255 <key>Persist</key> 4685 <key>Persist</key>
4256 <integer>1</integer> 4686 <integer>1</integer>
4257 <key>Type</key> 4687 <key>Type</key>
4258 <string>F32</string> 4688 <string>F32</string>
4259 <key>Value</key> 4689 <key>Value</key>
4260 <real>3</real> 4690 <real>3.0</real>
4261 </map> 4691 </map>
4262 <key>MouseSmooth</key> 4692 <key>MouseSmooth</key>
4263 <map> 4693 <map>
4264 <key>Comment</key> 4694 <key>Comment</key>
4265 <string>Smooths out motion of mouse when in mouselook mode.</string> 4695 <string>Smooths out motion of mouse when in mouselook mode.</string>
4266 <key>Persist</key> 4696 <key>Persist</key>
4267 <integer>1</integer> 4697 <integer>1</integer>
4268 <key>Type</key> 4698 <key>Type</key>
4269 <string>Boolean</string> 4699 <string>Boolean</string>
4270 <key>Value</key> 4700 <key>Value</key>
4271 <integer>0</integer> 4701 <integer>0</integer>
4272 </map> 4702 </map>
4273 <key>MouseSun</key> 4703 <key>MouseSun</key>
4274 <map> 4704 <map>
4275 <key>Comment</key> 4705 <key>Comment</key>
4276 <string /> 4706 <string />
4277 <key>Persist</key> 4707 <key>Persist</key>
4278 <integer>0</integer> 4708 <integer>0</integer>
4279 <key>Type</key> 4709 <key>Type</key>
4280 <string>Boolean</string> 4710 <string>Boolean</string>
4281 <key>Value</key> 4711 <key>Value</key>
4282 <integer>0</integer> 4712 <integer>0</integer>
4283 </map> 4713 </map>
4284 <key>MouselookBtnState</key> 4714 <key>MouselookBtnState</key>
4285 <map> 4715 <map>
4286 <key>Comment</key> 4716 <key>Comment</key>
4287 <string /> 4717 <string />
4288 <key>Persist</key> 4718 <key>Persist</key>
4289 <integer>0</integer> 4719 <integer>0</integer>
4290 <key>Type</key> 4720 <key>Type</key>
4291 <string>Boolean</string> 4721 <string>Boolean</string>
4292 <key>Value</key> 4722 <key>Value</key>
4293 <integer>0</integer> 4723 <integer>0</integer>
4294 </map> 4724 </map>
4295 <key>MoveDownBtnRect</key> 4725 <key>MoveDownBtnRect</key>
4296 <map> 4726 <map>
4297 <key>Comment</key> 4727 <key>Comment</key>
4298 <string /> 4728 <string />
4299 <key>Persist</key> 4729 <key>Persist</key>
4300 <integer>0</integer> 4730 <integer>0</integer>
4301 <key>Type</key> 4731 <key>Type</key>
4302 <string>Rect</string> 4732 <string>Rect</string>
4303 <key>Value</key> 4733 <key>Value</key>
4304 <array> 4734 <array>
4305 <integer>91</integer> 4735 <integer>91</integer>
4306 <integer>29</integer> 4736 <integer>29</integer>
4307 <integer>116</integer> 4737 <integer>116</integer>
4308 <integer>4</integer> 4738 <integer>4</integer>
4309 </array> 4739 </array>
4310 </map> 4740 </map>
4311 <key>MoveUpBtnRect</key> 4741 <key>MoveUpBtnRect</key>
4312 <map> 4742 <map>
4313 <key>Comment</key> 4743 <key>Comment</key>
4314 <string /> 4744 <string />
4315 <key>Persist</key> 4745 <key>Persist</key>
4316 <integer>0</integer> 4746 <integer>0</integer>
4317 <key>Type</key> 4747 <key>Type</key>
4318 <string>Rect</string> 4748 <string>Rect</string>
4319 <key>Value</key> 4749 <key>Value</key>
4320 <array> 4750 <array>
4321 <integer>91</integer> 4751 <integer>91</integer>
4322 <integer>54</integer> 4752 <integer>54</integer>
4323 <integer>116</integer> 4753 <integer>116</integer>
4324 <integer>29</integer> 4754 <integer>29</integer>
4325 </array> 4755 </array>
4326 </map> 4756 </map>
4327 <key>MuteAmbient</key> 4757 <key>MuteAmbient</key>
4328 <map> 4758 <map>
4329 <key>Comment</key> 4759 <key>Comment</key>
4330 <string>Ambient sound effects, such as wind noise, play at 0 volume</string> 4760 <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
4331 <key>Persist</key> 4761 <key>Persist</key>
4332 <integer>1</integer> 4762 <integer>1</integer>
4333 <key>Type</key> 4763 <key>Type</key>
4334 <string>Boolean</string> 4764 <string>Boolean</string>
4335 <key>Value</key> 4765 <key>Value</key>
4336 <integer>0</integer> 4766 <integer>0</integer>
4337 </map> 4767 </map>
4338 <key>MuteAudio</key> 4768 <key>MuteAudio</key>
4339 <map> 4769 <map>
4340 <key>Comment</key> 4770 <key>Comment</key>
4341 <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string> 4771 <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
4342 <key>Persist</key> 4772 <key>Persist</key>
4343 <integer>1</integer> 4773 <integer>1</integer>
4344 <key>Type</key> 4774 <key>Type</key>
4345 <string>Boolean</string> 4775 <string>Boolean</string>
4346 <key>Value</key> 4776 <key>Value</key>
4347 <integer>0</integer> 4777 <integer>0</integer>
4348 </map> 4778 </map>
4349 <key>MuteMedia</key> 4779 <key>MuteMedia</key>
4350 <map> 4780 <map>
4351 <key>Comment</key> 4781 <key>Comment</key>
4352 <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string> 4782 <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
4353 <key>Persist</key> 4783 <key>Persist</key>
4354 <integer>1</integer> 4784 <integer>1</integer>
4355 <key>Type</key> 4785 <key>Type</key>
4356 <string>Boolean</string> 4786 <string>Boolean</string>
4357 <key>Value</key> 4787 <key>Value</key>
4358 <integer>0</integer> 4788 <integer>0</integer>
4359 </map> 4789 </map>
4360 <key>MuteMusic</key> 4790 <key>MuteMusic</key>
4361 <map> 4791 <map>
4362 <key>Comment</key> 4792 <key>Comment</key>
4363 <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string> 4793 <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
4364 <key>Persist</key> 4794 <key>Persist</key>
4365 <integer>1</integer> 4795 <integer>1</integer>
4366 <key>Type</key> 4796 <key>Type</key>
4367 <string>Boolean</string> 4797 <string>Boolean</string>
4368 <key>Value</key> 4798 <key>Value</key>
4369 <integer>0</integer> 4799 <integer>0</integer>
4370 </map> 4800 </map>
4371 <key>MuteSounds</key> 4801 <key>MuteSounds</key>
4372 <map> 4802 <map>
4373 <key>Comment</key> 4803 <key>Comment</key>
4374 <string>Sound effects play at 0 volume</string> 4804 <string>Sound effects play at 0 volume</string>
4375 <key>Persist</key> 4805 <key>Persist</key>
4376 <integer>1</integer> 4806 <integer>1</integer>
4377 <key>Type</key> 4807 <key>Type</key>
4378 <string>Boolean</string> 4808 <string>Boolean</string>
4379 <key>Value</key> 4809 <key>Value</key>
4380 <integer>0</integer> 4810 <integer>0</integer>
4381 </map> 4811 </map>
4382 <key>MuteUI</key> 4812 <key>MuteUI</key>
4383 <map> 4813 <map>
4384 <key>Comment</key> 4814 <key>Comment</key>
4385 <string>UI sound effects play at 0 volume</string> 4815 <string>UI sound effects play at 0 volume</string>
4386 <key>Persist</key> 4816 <key>Persist</key>
4387 <integer>1</integer> 4817 <integer>1</integer>
4388 <key>Type</key> 4818 <key>Type</key>
4389 <string>Boolean</string> 4819 <string>Boolean</string>
4390 <key>Value</key> 4820 <key>Value</key>
4391 <integer>0</integer> 4821 <integer>0</integer>
4392 </map> 4822 </map>
4393 <key>MuteVoice</key> 4823 <key>MuteVoice</key>
4394 <map> 4824 <map>
4395 <key>Comment</key> 4825 <key>Comment</key>
4396 <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string> 4826 <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
4397 <key>Persist</key> 4827 <key>Persist</key>
4398 <integer>1</integer> 4828 <integer>1</integer>
4399 <key>Type</key> 4829 <key>Type</key>
4400 <string>Boolean</string> 4830 <string>Boolean</string>
4401 <key>Value</key> 4831 <key>Value</key>
4402 <integer>0</integer> 4832 <integer>0</integer>
4403 </map> 4833 </map>
4404 <key>MuteWhenMinimized</key> 4834 <key>MuteWhenMinimized</key>
4405 <map> 4835 <map>
4406 <key>Comment</key> 4836 <key>Comment</key>
4407 <string>Mute audio when SL window is minimized</string> 4837 <string>Mute audio when SL window is minimized</string>
4408 <key>Persist</key> 4838 <key>Persist</key>
4409 <integer>1</integer> 4839 <integer>1</integer>
4410 <key>Type</key> 4840 <key>Type</key>
4411 <string>Boolean</string> 4841 <string>Boolean</string>
4412 <key>Value</key> 4842 <key>Value</key>
4413 <integer>1</integer> 4843 <integer>1</integer>
4414 </map> 4844 </map>
4415 <key>NewCacheLocation</key> 4845 <key>NewCacheLocation</key>
4416 <map> 4846 <map>
4417 <key>Comment</key> 4847 <key>Comment</key>
4418 <string>Change the location of the local disk cache to this</string> 4848 <string>Change the location of the local disk cache to this</string>
4419 <key>Persist</key> 4849 <key>Persist</key>
4420 <integer>1</integer> 4850 <integer>1</integer>
4421 <key>Type</key> 4851 <key>Type</key>
4422 <string>String</string> 4852 <string>String</string>
4423 <key>Value</key> 4853 <key>Value</key>
4424 <string /> 4854 <string />
4425 </map> 4855 </map>
4426 <key>NextLoginLocation</key> 4856 <key>NextLoginLocation</key>
4427 <map> 4857 <map>
4428 <key>Comment</key> 4858 <key>Comment</key>
4429 <string>Location to log into by default.</string> 4859 <string>Location to log into by default.</string>
4430 <key>Persist</key> 4860 <key>Persist</key>
4431 <integer>1</integer> 4861 <integer>1</integer>
4432 <key>Type</key> 4862 <key>Type</key>
4433 <string>String</string> 4863 <string>String</string>
4434 <key>Value</key> 4864 <key>Value</key>
4435 <string /> 4865 <string />
4436 </map> 4866 </map>
4437 <key>NoAudio</key> 4867 <key>NoAudio</key>
4438 <map> 4868 <map>
4439 <key>Comment</key> 4869 <key>Comment</key>
4440 <string>Disable audio playback.</string> 4870 <string>Disable audio playback.</string>
4441 <key>Persist</key> 4871 <key>Persist</key>
4442 <integer>1</integer> 4872 <integer>1</integer>
4443 <key>Type</key> 4873 <key>Type</key>
4444 <string>Boolean</string> 4874 <string>Boolean</string>
4445 <key>Value</key> 4875 <key>Value</key>
4446 <integer>0</integer> 4876 <integer>0</integer>
4447 </map> 4877 </map>
4448 <key>NoHardwareProbe</key> 4878 <key>NoHardwareProbe</key>
4449 <map> 4879 <map>
4450 <key>Comment</key> 4880 <key>Comment</key>
4451 <string>Disable hardware probe.</string> 4881 <string>Disable hardware probe.</string>
4452 <key>Persist</key> 4882 <key>Persist</key>
4453 <integer>1</integer> 4883 <integer>1</integer>
4454 <key>Type</key> 4884 <key>Type</key>
4455 <string>Boolean</string> 4885 <string>Boolean</string>
4456 <key>Value</key> 4886 <key>Value</key>
4457 <integer>0</integer> 4887 <integer>0</integer>
4458 </map> 4888 </map>
4459 <key>NoInventoryLibrary</key> 4889 <key>NoInventoryLibrary</key>
4460 <map> 4890 <map>
4461 <key>Comment</key> 4891 <key>Comment</key>
4462 <string>Do not request inventory library.</string> 4892 <string>Do not request inventory library.</string>
4463 <key>Persist</key> 4893 <key>Persist</key>
4464 <integer>1</integer> 4894 <integer>1</integer>
4465 <key>Type</key> 4895 <key>Type</key>
4466 <string>Boolean</string> 4896 <string>Boolean</string>
4467 <key>Value</key> 4897 <key>Value</key>
4468 <integer>0</integer> 4898 <integer>0</integer>
4469 </map> 4899 </map>
4470 <key>NoPreload</key> 4900 <key>NoPreload</key>
4471 <map> 4901 <map>
4472 <key>Comment</key> 4902 <key>Comment</key>
4473 <string>Disable sound and image preload.</string> 4903 <string>Disable sound and image preload.</string>
4474 <key>Persist</key> 4904 <key>Persist</key>
4475 <integer>1</integer> 4905 <integer>1</integer>
4476 <key>Type</key> 4906 <key>Type</key>
4477 <string>Boolean</string> 4907 <string>Boolean</string>
4478 <key>Value</key> 4908 <key>Value</key>
4479 <integer>0</integer> 4909 <integer>0</integer>
4480 </map> 4910 </map>
4481 <key>NoQuickTime</key> 4911 <key>NoQuickTime</key>
4482 <map> 4912 <map>
4483 <key>Comment</key> 4913 <key>Comment</key>
4484 <string>Disable quicktime playback.</string> 4914 <string>Disable quicktime playback.</string>
4485 <key>Persist</key> 4915 <key>Persist</key>
4486 <integer>1</integer> 4916 <integer>1</integer>
4487 <key>Type</key> 4917 <key>Type</key>
4488 <string>Boolean</string> 4918 <string>Boolean</string>
4489 <key>Value</key> 4919 <key>Value</key>
4490 <integer>0</integer> 4920 <integer>0</integer>
4491 </map> 4921 </map>
4492 <key>NoVerifySSLCert</key> 4922 <key>NoVerifySSLCert</key>
4493 <map> 4923 <map>
4494 <key>Comment</key> 4924 <key>Comment</key>
4495 <string>Do not verify SSL peers.</string> 4925 <string>Do not verify SSL peers.</string>
4496 <key>Persist</key> 4926 <key>Persist</key>
4497 <integer>1</integer> 4927 <integer>1</integer>
4498 <key>Type</key> 4928 <key>Type</key>
4499 <string>Boolean</string> 4929 <string>Boolean</string>
4500 <key>Value</key> 4930 <key>Value</key>
4501 <integer>0</integer> 4931 <integer>0</integer>
4502 </map> 4932 </map>
4503 <key>NotecardEditorRect</key> 4933 <key>NotecardEditorRect</key>
4504 <map> 4934 <map>
4505 <key>Comment</key> 4935 <key>Comment</key>
4506 <string>Rectangle for notecard editor</string> 4936 <string>Rectangle for notecard editor</string>
4507 <key>Persist</key> 4937 <key>Persist</key>
4508 <integer>1</integer> 4938 <integer>1</integer>
4509 <key>Type</key> 4939 <key>Type</key>
4510 <string>Rect</string> 4940 <string>Rect</string>
4511 <key>Value</key> 4941 <key>Value</key>
4512 <array> 4942 <array>
4513 <integer>0</integer> 4943 <integer>0</integer>
4514 <integer>400</integer> 4944 <integer>400</integer>
4515 <integer>400</integer> 4945 <integer>400</integer>
4516 <integer>0</integer> 4946 <integer>0</integer>
4517 </array> 4947 </array>
4518 </map> 4948 </map>
4519 <key>NotifyBoxHeight</key> 4949 <key>NotifyBoxHeight</key>
4520 <map> 4950 <map>
4521 <key>Comment</key> 4951 <key>Comment</key>
4522 <string>Height of notification messages</string> 4952 <string>Height of notification messages</string>
4523 <key>Persist</key> 4953 <key>Persist</key>
4524 <integer>1</integer> 4954 <integer>1</integer>
4525 <key>Type</key> 4955 <key>Type</key>
4526 <string>S32</string> 4956 <string>S32</string>
4527 <key>Value</key> 4957 <key>Value</key>
4528 <integer>200</integer> 4958 <integer>200</integer>
4529 </map> 4959 </map>
4530 <key>NotifyBoxWidth</key> 4960 <key>NotifyBoxWidth</key>
4531 <map> 4961 <map>
4532 <key>Comment</key> 4962 <key>Comment</key>
4533 <string>Width of notification messages</string> 4963 <string>Width of notification messages</string>
4534 <key>Persist</key> 4964 <key>Persist</key>
4535 <integer>1</integer> 4965 <integer>1</integer>
4536 <key>Type</key> 4966 <key>Type</key>
4537 <string>S32</string> 4967 <string>S32</string>
4538 <key>Value</key> 4968 <key>Value</key>
4539 <integer>350</integer> 4969 <integer>350</integer>
4540 </map> 4970 </map>
4541 <key>NotifyMoneyChange</key> 4971 <key>NotifyMoneyChange</key>
4542 <map> 4972 <map>
4543 <key>Comment</key> 4973 <key>Comment</key>
4544 <string>Pop up notifications for all L$ transactions</string> 4974 <string>Pop up notifications for all L$ transactions</string>
4545 <key>Persist</key> 4975 <key>Persist</key>
4546 <integer>1</integer> 4976 <integer>1</integer>
4547 <key>Type</key> 4977 <key>Type</key>
4548 <string>Boolean</string> 4978 <string>Boolean</string>
4549 <key>Value</key> 4979 <key>Value</key>
4550 <integer>1</integer> 4980 <integer>1</integer>
4551 </map> 4981 </map>
4552 <key>NotifyTipDuration</key> 4982 <key>NotifyTipDuration</key>
4553 <map> 4983 <map>
4554 <key>Comment</key> 4984 <key>Comment</key>
4555 <string>Length of time that notification tips stay on screen (seconds)</string> 4985 <string>Length of time that notification tips stay on screen (seconds)</string>
4556 <key>Persist</key> 4986 <key>Persist</key>
4557 <integer>1</integer> 4987 <integer>1</integer>
4558 <key>Type</key> 4988 <key>Type</key>
4559 <string>F32</string> 4989 <string>F32</string>
4560 <key>Value</key> 4990 <key>Value</key>
4561 <real>4</real> 4991 <real>4.0</real>
4562 </map> 4992 </map>
4563 <key>NumSessions</key> 4993 <key>NumSessions</key>
4564 <map> 4994 <map>
4565 <key>Comment</key> 4995 <key>Comment</key>
4566 <string>Number of successful logins to Second Life</string> 4996 <string>Number of successful logins to Second Life</string>
4567 <key>Persist</key> 4997 <key>Persist</key>
4568 <integer>1</integer> 4998 <integer>1</integer>
4569 <key>Type</key> 4999 <key>Type</key>
4570 <string>S32</string> 5000 <string>S32</string>
4571 <key>Value</key> 5001 <key>Value</key>
4572 <integer>0</integer> 5002 <integer>0</integer>
4573 </map> 5003 </map>
4574 <key>NumpadControl</key> 5004 <key>NumpadControl</key>
4575 <map> 5005 <map>
4576 <key>Comment</key> 5006 <key>Comment</key>
4577 <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string> 5007 <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
4578 <key>Persist</key> 5008 <key>Persist</key>
4579 <integer>1</integer> 5009 <integer>1</integer>
4580 <key>Type</key> 5010 <key>Type</key>
4581 <string>S32</string> 5011 <string>S32</string>
4582 <key>Value</key> 5012 <key>Value</key>
4583 <integer>0</integer> 5013 <integer>0</integer>
4584 </map> 5014 </map>
4585 <key>ObjectChatColor</key> 5015 <key>ObjectChatColor</key>
4586 <map> 5016 <map>
4587 <key>Comment</key> 5017 <key>Comment</key>
4588 <string>Color of chat messages from objects</string> 5018 <string>Color of chat messages from objects</string>
4589 <key>Persist</key> 5019 <key>Persist</key>
4590 <integer>1</integer> 5020 <integer>1</integer>
4591 <key>Type</key> 5021 <key>Type</key>
4592 <string>Color4</string> 5022 <string>Color4</string>
4593 <key>Value</key> 5023 <key>Value</key>
4594 <array> 5024 <array>
4595 <real>0.699999988079071044921875</real> 5025 <real>0.699999988079</real>
4596 <real>0.89999997615814208984375</real> 5026 <real>0.899999976158</real>
4597 <real>0.699999988079071044921875</real> 5027 <real>0.699999988079</real>
4598 <real>1</real> 5028 <real>1.0</real>
4599 </array> 5029 </array>
4600 </map> 5030 </map>
4601 <key>OpenDebugStatAdvanced</key> 5031 <key>OpenDebugStatAdvanced</key>
4602 <map> 5032 <map>
4603 <key>Comment</key> 5033 <key>Comment</key>
4604 <string>Expand advanced performance stats display</string> 5034 <string>Expand advanced performance stats display</string>
4605 <key>Persist</key> 5035 <key>Persist</key>
4606 <integer>1</integer> 5036 <integer>1</integer>
4607 <key>Type</key> 5037 <key>Type</key>
4608 <string>Boolean</string> 5038 <string>Boolean</string>
4609 <key>Value</key> 5039 <key>Value</key>
4610 <integer>0</integer> 5040 <integer>0</integer>
4611 </map> 5041 </map>
4612 <key>OpenDebugStatBasic</key> 5042 <key>OpenDebugStatBasic</key>
4613 <map> 5043 <map>
4614 <key>Comment</key> 5044 <key>Comment</key>
4615 <string>Expand basic performance stats display</string> 5045 <string>Expand basic performance stats display</string>
4616 <key>Persist</key> 5046 <key>Persist</key>
4617 <integer>1</integer> 5047 <integer>1</integer>
4618 <key>Type</key> 5048 <key>Type</key>
4619 <string>Boolean</string> 5049 <string>Boolean</string>
4620 <key>Value</key> 5050 <key>Value</key>
4621 <integer>1</integer> 5051 <integer>1</integer>
4622 </map> 5052 </map>
4623 <key>OpenDebugStatNet</key> 5053 <key>OpenDebugStatNet</key>
4624 <map> 5054 <map>
4625 <key>Comment</key> 5055 <key>Comment</key>
4626 <string>Expand network stats display</string> 5056 <string>Expand network stats display</string>
4627 <key>Persist</key> 5057 <key>Persist</key>
4628 <integer>1</integer> 5058 <integer>1</integer>
4629 <key>Type</key> 5059 <key>Type</key>
4630 <string>Boolean</string> 5060 <string>Boolean</string>
4631 <key>Value</key> 5061 <key>Value</key>
4632 <integer>1</integer> 5062 <integer>1</integer>
4633 </map> 5063 </map>
4634 <key>OpenDebugStatRender</key> 5064 <key>OpenDebugStatRender</key>
4635 <map> 5065 <map>
4636 <key>Comment</key> 5066 <key>Comment</key>
4637 <string>Expand render stats display</string> 5067 <string>Expand render stats display</string>
4638 <key>Persist</key> 5068 <key>Persist</key>
4639 <integer>1</integer> 5069 <integer>1</integer>
4640 <key>Type</key> 5070 <key>Type</key>
4641 <string>Boolean</string> 5071 <string>Boolean</string>
4642 <key>Value</key> 5072 <key>Value</key>
4643 <integer>1</integer> 5073 <integer>1</integer>
4644 </map> 5074 </map>
4645 <key>OpenDebugStatSim</key> 5075 <key>OpenDebugStatSim</key>
4646 <map> 5076 <map>
4647 <key>Comment</key> 5077 <key>Comment</key>
4648 <string>Expand simulator performance stats display</string> 5078 <string>Expand simulator performance stats display</string>
4649 <key>Persist</key> 5079 <key>Persist</key>
4650 <integer>1</integer> 5080 <integer>1</integer>
4651 <key>Type</key> 5081 <key>Type</key>
4652 <string>Boolean</string> 5082 <string>Boolean</string>
4653 <key>Value</key> 5083 <key>Value</key>
4654 <integer>1</integer> 5084 <integer>1</integer>
4655 </map> 5085 </map>
4656 <key>OutBandwidth</key> 5086 <key>OutBandwidth</key>
4657 <map> 5087 <map>
4658 <key>Comment</key> 5088 <key>Comment</key>
4659 <string>Outgoing bandwidth throttle (bps)</string> 5089 <string>Outgoing bandwidth throttle (bps)</string>
4660 <key>Persist</key> 5090 <key>Persist</key>
4661 <integer>1</integer> 5091 <integer>1</integer>
4662 <key>Type</key> 5092 <key>Type</key>
4663 <string>F32</string> 5093 <string>F32</string>
4664 <key>Value</key> 5094 <key>Value</key>
4665 <real>0</real> 5095 <real>0.0</real>
4666 </map> 5096 </map>
4667 <key>OverdrivenColor</key> 5097 <key>OverdrivenColor</key>
4668 <map> 5098 <map>
4669 <key>Comment</key> 5099 <key>Comment</key>
4670 <string>Color of various indicators when resident is speaking too loud.</string> 5100 <string>Color of various indicators when resident is speaking too loud.</string>
4671 <key>Persist</key> 5101 <key>Persist</key>
4672 <integer>1</integer> 5102 <integer>1</integer>
4673 <key>Type</key> 5103 <key>Type</key>
4674 <string>Color4</string> 5104 <string>Color4</string>
4675 <key>Value</key> 5105 <key>Value</key>
4676 <array> 5106 <array>
4677 <real>1</real> 5107 <real>1.0</real>
4678 <real>0</real> 5108 <real>0.0</real>
4679 <real>0</real> 5109 <real>0.0</real>
4680 <real>1</real> 5110 <real>1.0</real>
4681 </array> 5111 </array>
4682 </map> 5112 </map>
4683 <key>OverlayTitle</key> 5113 <key>OverlayTitle</key>
4684 <map> 5114 <map>
4685 <key>Comment</key> 5115 <key>Comment</key>
4686 <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string> 5116 <string>Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces)</string>
4687 <key>Persist</key> 5117 <key>Persist</key>
4688 <integer>1</integer> 5118 <integer>1</integer>
4689 <key>Type</key> 5119 <key>Type</key>
4690 <string>String</string> 5120 <string>String</string>
4691 <key>Value</key> 5121 <key>Value</key>
4692 <string>Set_via_OverlayTitle_in_settings.xml</string> 5122 <string>Set_via_OverlayTitle_in_settings.xml</string>
4693 </map> 5123 </map>
4694 <key>PTTCurrentlyEnabled</key> 5124 <key>PTTCurrentlyEnabled</key>
4695 <map> 5125 <map>
4696 <key>Comment</key> 5126 <key>Comment</key>
4697 <string /> 5127 <string />
4698 <key>Persist</key> 5128 <key>Persist</key>
4699 <integer>0</integer> 5129 <integer>0</integer>
4700 <key>Type</key> 5130 <key>Type</key>
4701 <string>Boolean</string> 5131 <string>Boolean</string>
4702 <key>Value</key> 5132 <key>Value</key>
4703 <integer>1</integer> 5133 <integer>1</integer>
4704 </map> 5134 </map>
4705 <key>PacketDropPercentage</key> 5135 <key>PacketDropPercentage</key>
4706 <map> 5136 <map>
4707 <key>Comment</key> 5137 <key>Comment</key>
4708 <string>Percentage of packets dropped by the client.</string> 5138 <string>Percentage of packets dropped by the client.</string>
4709 <key>Persist</key> 5139 <key>Persist</key>
4710 <integer>1</integer> 5140 <integer>1</integer>
4711 <key>Type</key> 5141 <key>Type</key>
4712 <string>F32</string> 5142 <string>F32</string>
4713 <key>Value</key> 5143 <key>Value</key>
4714 <real>0</real> 5144 <real>0.0</real>
4715 </map> 5145 </map>
5146 <key>ParcelMediaAutoPlayEnable</key>
5147 <map>
5148 <key>Comment</key>
5149 <string>Auto play parcel media when available</string>
5150 <key>Persist</key>
5151 <integer>1</integer>
5152 <key>Type</key>
5153 <string>Boolean</string>
5154 <key>Value</key>
5155 <integer>0</integer>
5156 </map>
4716 <key>PerAccountSettingsFile</key> 5157 <key>PerAccountSettingsFile</key>
4717 <map> 5158 <map>
4718 <key>Comment</key> 5159 <key>Comment</key>
4719 <string>Persisted client settings file name (per user).</string> 5160 <string>Persisted client settings file name (per user).</string>
4720 <key>Persist</key> 5161 <key>Persist</key>
4721 <integer>0</integer> 5162 <integer>0</integer>
4722 <key>Type</key> 5163 <key>Type</key>
4723 <string>String</string> 5164 <string>String</string>
4724 <key>Value</key> 5165 <key>Value</key>
4725 <string /> 5166 <string />
4726 </map> 5167 </map>
4727 <key>PermissionsCautionEnabled</key> 5168 <key>PermissionsCautionEnabled</key>
4728 <map> 5169 <map>
4729 <key>Comment</key> 5170 <key>Comment</key>
4730 <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string> 5171 <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
4731 <key>Persist</key> 5172 <key>Persist</key>
4732 <integer>0</integer> 5173 <integer>0</integer>
4733 <key>Type</key> 5174 <key>Type</key>
4734 <string>Boolean</string> 5175 <string>Boolean</string>
4735 <key>Value</key> 5176 <key>Value</key>
4736 <integer>1</integer> 5177 <integer>1</integer>
4737 </map> 5178 </map>
4738 <key>PermissionsCautionNotifyBoxHeight</key> 5179 <key>PermissionsCautionNotifyBoxHeight</key>
4739 <map> 5180 <map>
4740 <key>Comment</key> 5181 <key>Comment</key>
4741 <string>Height of caution-style notification messages</string> 5182 <string>Height of caution-style notification messages</string>
4742 <key>Persist</key> 5183 <key>Persist</key>
4743 <integer>0</integer> 5184 <integer>0</integer>
4744 <key>Type</key> 5185 <key>Type</key>
4745 <string>S32</string> 5186 <string>S32</string>
4746 <key>Value</key> 5187 <key>Value</key>
4747 <integer>344</integer> 5188 <integer>344</integer>
4748 </map> 5189 </map>
4749 <key>PermissionsManagerRect</key> 5190 <key>PermissionsManagerRect</key>
4750 <map> 5191 <map>
4751 <key>Comment</key> 5192 <key>Comment</key>
4752 <string>Rectangle for permissions manager window</string> 5193 <string>Rectangle for permissions manager window</string>
4753 <key>Persist</key> 5194 <key>Persist</key>
4754 <integer>1</integer> 5195 <integer>1</integer>
4755 <key>Type</key> 5196 <key>Type</key>
4756 <string>Rect</string> 5197 <string>Rect</string>
4757 <key>Value</key> 5198 <key>Value</key>
4758 <array> 5199 <array>
4759 <integer>0</integer> 5200 <integer>0</integer>
4760 <integer>85</integer> 5201 <integer>85</integer>
4761 <integer>300</integer> 5202 <integer>300</integer>
4762 <integer>0</integer> 5203 <integer>0</integer>
4763 </array> 5204 </array>
4764 </map> 5205 </map>
4765 <key>PickerContextOpacity</key> 5206 <key>PickerContextOpacity</key>
4766 <map> 5207 <map>
4767 <key>Comment</key> 5208 <key>Comment</key>
4768 <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string> 5209 <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
4769 <key>Persist</key> 5210 <key>Persist</key>
4770 <integer>1</integer> 5211 <integer>1</integer>
4771 <key>Type</key> 5212 <key>Type</key>
4772 <string>F32</string> 5213 <string>F32</string>
4773 <key>Value</key> 5214 <key>Value</key>
4774 <real>0.3499999940395355224609375</real> 5215 <real>0.34999999404</real>
4775 </map> 5216 </map>
4776 <key>PieMenuLineWidth</key> 5217 <key>PieMenuLineWidth</key>
4777 <map> 5218 <map>
4778 <key>Comment</key> 5219 <key>Comment</key>
4779 <string>Width of lines in pie menu display (pixels)</string> 5220 <string>Width of lines in pie menu display (pixels)</string>
4780 <key>Persist</key> 5221 <key>Persist</key>
4781 <integer>1</integer> 5222 <integer>1</integer>
4782 <key>Type</key> 5223 <key>Type</key>
4783 <string>F32</string> 5224 <string>F32</string>
4784 <key>Value</key> 5225 <key>Value</key>
4785 <real>2.5</real> 5226 <real>2.5</real>
4786 </map> 5227 </map>
4787 <key>PinTalkViewOpen</key> 5228 <key>PinTalkViewOpen</key>
4788 <map> 5229 <map>
4789 <key>Comment</key> 5230 <key>Comment</key>
4790 <string>Stay in IM after hitting return</string> 5231 <string>Stay in IM after hitting return</string>
4791 <key>Persist</key> 5232 <key>Persist</key>
4792 <integer>1</integer> 5233 <integer>1</integer>
4793 <key>Type</key> 5234 <key>Type</key>
4794 <string>Boolean</string> 5235 <string>Boolean</string>
4795 <key>Value</key> 5236 <key>Value</key>
4796 <integer>1</integer> 5237 <integer>1</integer>
4797 </map> 5238 </map>
4798 <key>PingInterpolate</key> 5239 <key>PingInterpolate</key>
4799 <map> 5240 <map>
4800 <key>Comment</key> 5241 <key>Comment</key>
4801 <string>Extrapolate object position along velocity vector based on ping delay</string> 5242 <string>Extrapolate object position along velocity vector based on ping delay</string>
4802 <key>Persist</key> 5243 <key>Persist</key>
4803 <integer>1</integer> 5244 <integer>1</integer>
4804 <key>Type</key> 5245 <key>Type</key>
4805 <string>Boolean</string> 5246 <string>Boolean</string>
4806 <key>Value</key> 5247 <key>Value</key>
4807 <integer>0</integer> 5248 <integer>0</integer>
4808 </map> 5249 </map>
4809 <key>PitchFromMousePosition</key> 5250 <key>PitchFromMousePosition</key>
4810 <map> 5251 <map>
4811 <key>Comment</key> 5252 <key>Comment</key>
4812 <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string> 5253 <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
4813 <key>Persist</key> 5254 <key>Persist</key>
4814 <integer>1</integer> 5255 <integer>1</integer>
4815 <key>Type</key> 5256 <key>Type</key>
4816 <string>F32</string> 5257 <string>F32</string>
4817 <key>Value</key> 5258 <key>Value</key>
4818 <real>90</real> 5259 <real>90.0</real>
4819 </map> 5260 </map>
4820 <key>PlayTypingAnim</key> 5261 <key>PlayTypingAnim</key>
4821 <map> 5262 <map>
4822 <key>Comment</key> 5263 <key>Comment</key>
4823 <string>Your avatar plays the typing animation whenever you type in the chat bar</string> 5264 <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
4824 <key>Persist</key> 5265 <key>Persist</key>
4825 <integer>1</integer> 5266 <integer>1</integer>
4826 <key>Type</key> 5267 <key>Type</key>
4827 <string>Boolean</string> 5268 <string>Boolean</string>
4828 <key>Value</key> 5269 <key>Value</key>
4829 <integer>1</integer> 5270 <integer>1</integer>
4830 </map> 5271 </map>
4831 <key>PrecachingDelay</key> 5272 <key>PrecachingDelay</key>
4832 <map> 5273 <map>
4833 <key>Comment</key> 5274 <key>Comment</key>
4834 <string>Delay when logging in to load world before showing it (seconds)</string> 5275 <string>Delay when logging in to load world before showing it (seconds)</string>
4835 <key>Persist</key> 5276 <key>Persist</key>
4836 <integer>1</integer> 5277 <integer>1</integer>
4837 <key>Type</key> 5278 <key>Type</key>
4838 <string>F32</string> 5279 <string>F32</string>
4839 <key>Value</key> 5280 <key>Value</key>
4840 <real>6</real> 5281 <real>6.0</real>
4841 </map> 5282 </map>
4842 <key>PreviewAnimRect</key> 5283 <key>PreviewAnimRect</key>
4843 <map> 5284 <map>
4844 <key>Comment</key> 5285 <key>Comment</key>
4845 <string>Rectangle for animation preview window</string> 5286 <string>Rectangle for animation preview window</string>
4846 <key>Persist</key> 5287 <key>Persist</key>
4847 <integer>1</integer> 5288 <integer>1</integer>
4848 <key>Type</key> 5289 <key>Type</key>
4849 <string>Rect</string> 5290 <string>Rect</string>
4850 <key>Value</key> 5291 <key>Value</key>
4851 <array> 5292 <array>
4852 <integer>0</integer> 5293 <integer>0</integer>
4853 <integer>85</integer> 5294 <integer>85</integer>
4854 <integer>300</integer> 5295 <integer>300</integer>
4855 <integer>0</integer> 5296 <integer>0</integer>
4856 </array> 5297 </array>
4857 </map> 5298 </map>
4858 <key>PreviewClassifiedRect</key> 5299 <key>PreviewClassifiedRect</key>
4859 <map> 5300 <map>
4860 <key>Comment</key> 5301 <key>Comment</key>
4861 <string>Rectangle for URL preview window</string> 5302 <string>Rectangle for URL preview window</string>
4862 <key>Persist</key> 5303 <key>Persist</key>
4863 <integer>1</integer> 5304 <integer>1</integer>
4864 <key>Type</key> 5305 <key>Type</key>
4865 <string>Rect</string> 5306 <string>Rect</string>
4866 <key>Value</key> 5307 <key>Value</key>
4867 <array> 5308 <array>
4868 <integer>0</integer> 5309 <integer>0</integer>
4869 <integer>530</integer> 5310 <integer>530</integer>
4870 <integer>420</integer> 5311 <integer>420</integer>
4871 <integer>0</integer> 5312 <integer>0</integer>
4872 </array> 5313 </array>
4873 </map> 5314 </map>
4874 <key>PreviewEventRect</key> 5315 <key>PreviewEventRect</key>
4875 <map> 5316 <map>
4876 <key>Comment</key> 5317 <key>Comment</key>
4877 <string>Rectangle for Event preview window</string> 5318 <string>Rectangle for Event preview window</string>
4878 <key>Persist</key> 5319 <key>Persist</key>
4879 <integer>1</integer> 5320 <integer>1</integer>
4880 <key>Type</key> 5321 <key>Type</key>
4881 <string>Rect</string> 5322 <string>Rect</string>
4882 <key>Value</key> 5323 <key>Value</key>
4883 <array> 5324 <array>
4884 <integer>0</integer> 5325 <integer>0</integer>
4885 <integer>530</integer> 5326 <integer>530</integer>
4886 <integer>420</integer> 5327 <integer>420</integer>
4887 <integer>0</integer> 5328 <integer>0</integer>
4888 </array> 5329 </array>
4889 </map> 5330 </map>
4890 <key>PreviewLandmarkRect</key> 5331 <key>PreviewLandmarkRect</key>
4891 <map> 5332 <map>
4892 <key>Comment</key> 5333 <key>Comment</key>
4893 <string>Rectangle for landmark preview window</string> 5334 <string>Rectangle for landmark preview window</string>
4894 <key>Persist</key> 5335 <key>Persist</key>
4895 <integer>1</integer> 5336 <integer>1</integer>
4896 <key>Type</key> 5337 <key>Type</key>
4897 <string>Rect</string> 5338 <string>Rect</string>
4898 <key>Value</key> 5339 <key>Value</key>
4899 <array> 5340 <array>
4900 <integer>0</integer> 5341 <integer>0</integer>
4901 <integer>90</integer> 5342 <integer>90</integer>
4902 <integer>300</integer> 5343 <integer>300</integer>
4903 <integer>0</integer> 5344 <integer>0</integer>
4904 </array> 5345 </array>
4905 </map> 5346 </map>
4906 <key>PreviewObjectRect</key> 5347 <key>PreviewObjectRect</key>
4907 <map> 5348 <map>
4908 <key>Comment</key> 5349 <key>Comment</key>
4909 <string>Rectangle for object preview window</string> 5350 <string>Rectangle for object preview window</string>
4910 <key>Persist</key> 5351 <key>Persist</key>
4911 <integer>1</integer> 5352 <integer>1</integer>
4912 <key>Type</key> 5353 <key>Type</key>
4913 <string>Rect</string> 5354 <string>Rect</string>
4914 <key>Value</key> 5355 <key>Value</key>
4915 <array> 5356 <array>
4916 <integer>0</integer> 5357 <integer>0</integer>
4917 <integer>85</integer> 5358 <integer>85</integer>
4918 <integer>300</integer> 5359 <integer>300</integer>
4919 <integer>0</integer> 5360 <integer>0</integer>
4920 </array> 5361 </array>
4921 </map> 5362 </map>
4922 <key>PreviewScriptRect</key> 5363 <key>PreviewScriptRect</key>
4923 <map> 5364 <map>
4924 <key>Comment</key> 5365 <key>Comment</key>
4925 <string>Rectangle for script preview window</string> 5366 <string>Rectangle for script preview window</string>
4926 <key>Persist</key> 5367 <key>Persist</key>
4927 <integer>1</integer> 5368 <integer>1</integer>
4928 <key>Type</key> 5369 <key>Type</key>
4929 <string>Rect</string> 5370 <string>Rect</string>
4930 <key>Value</key> 5371 <key>Value</key>
4931 <array> 5372 <array>
4932 <integer>0</integer> 5373 <integer>0</integer>
4933 <integer>550</integer> 5374 <integer>550</integer>
4934 <integer>500</integer> 5375 <integer>500</integer>
4935 <integer>0</integer> 5376 <integer>0</integer>
4936 </array> 5377 </array>
4937 </map> 5378 </map>
4938 <key>PreviewSoundRect</key> 5379 <key>PreviewSoundRect</key>
4939 <map> 5380 <map>
4940 <key>Comment</key> 5381 <key>Comment</key>
4941 <string>Rectangle for sound preview window</string> 5382 <string>Rectangle for sound preview window</string>
4942 <key>Persist</key> 5383 <key>Persist</key>
4943 <integer>1</integer> 5384 <integer>1</integer>
4944 <key>Type</key> 5385 <key>Type</key>
4945 <string>Rect</string> 5386 <string>Rect</string>
4946 <key>Value</key> 5387 <key>Value</key>
4947 <array> 5388 <array>
4948 <integer>0</integer> 5389 <integer>0</integer>
4949 <integer>85</integer> 5390 <integer>85</integer>
4950 <integer>300</integer> 5391 <integer>300</integer>
4951 <integer>0</integer> 5392 <integer>0</integer>
4952 </array> 5393 </array>
4953 </map> 5394 </map>
4954 <key>PreviewTextureRect</key> 5395 <key>PreviewTextureRect</key>
4955 <map> 5396 <map>
4956 <key>Comment</key> 5397 <key>Comment</key>
4957 <string>Rectangle for texture preview window</string> 5398 <string>Rectangle for texture preview window</string>
4958 <key>Persist</key> 5399 <key>Persist</key>
4959 <integer>1</integer> 5400 <integer>1</integer>
4960 <key>Type</key> 5401 <key>Type</key>
4961 <string>Rect</string> 5402 <string>Rect</string>
4962 <key>Value</key> 5403 <key>Value</key>
4963 <array> 5404 <array>
4964 <integer>0</integer> 5405 <integer>0</integer>
4965 <integer>400</integer> 5406 <integer>400</integer>
4966 <integer>400</integer> 5407 <integer>400</integer>
4967 <integer>0</integer> 5408 <integer>0</integer>
4968 </array> 5409 </array>
4969 </map> 5410 </map>
4970 <key>PreviewURLRect</key> 5411 <key>PreviewURLRect</key>
4971 <map> 5412 <map>
4972 <key>Comment</key> 5413 <key>Comment</key>
4973 <string>Rectangle for URL preview window</string> 5414 <string>Rectangle for URL preview window</string>
4974 <key>Persist</key> 5415 <key>Persist</key>
4975 <integer>1</integer> 5416 <integer>1</integer>
4976 <key>Type</key> 5417 <key>Type</key>
4977 <string>Rect</string> 5418 <string>Rect</string>
4978 <key>Value</key> 5419 <key>Value</key>
4979 <array> 5420 <array>
4980 <integer>0</integer> 5421 <integer>0</integer>
4981 <integer>90</integer> 5422 <integer>90</integer>
4982 <integer>300</integer> 5423 <integer>300</integer>
4983 <integer>0</integer> 5424 <integer>0</integer>
4984 </array> 5425 </array>
4985 </map> 5426 </map>
4986 <key>PreviewWearableRect</key> 5427 <key>PreviewWearableRect</key>
4987 <map> 5428 <map>
4988 <key>Comment</key> 5429 <key>Comment</key>
4989 <string>Rectangle for wearable preview window</string> 5430 <string>Rectangle for wearable preview window</string>
4990 <key>Persist</key> 5431 <key>Persist</key>
4991 <integer>1</integer> 5432 <integer>1</integer>
4992 <key>Type</key> 5433 <key>Type</key>
4993 <string>Rect</string> 5434 <string>Rect</string>
4994 <key>Value</key> 5435 <key>Value</key>
4995 <array> 5436 <array>
4996 <integer>0</integer> 5437 <integer>0</integer>
4997 <integer>85</integer> 5438 <integer>85</integer>
4998 <integer>300</integer> 5439 <integer>300</integer>
4999 <integer>0</integer> 5440 <integer>0</integer>
5000 </array> 5441 </array>
5001 </map> 5442 </map>
5002 <key>ProbeHardwareOnStartup</key> 5443 <key>ProbeHardwareOnStartup</key>
5003 <map> 5444 <map>
5004 <key>Comment</key> 5445 <key>Comment</key>
5005 <string>Query current hardware configuration on application startup</string> 5446 <string>Query current hardware configuration on application startup</string>
5006 <key>Persist</key> 5447 <key>Persist</key>
5007 <integer>1</integer> 5448 <integer>1</integer>
5008 <key>Type</key> 5449 <key>Type</key>
5009 <string>Boolean</string> 5450 <string>Boolean</string>
5010 <key>Value</key> 5451 <key>Value</key>
5011 <integer>1</integer> 5452 <integer>1</integer>
5012 </map> 5453 </map>
5013 <key>PropertiesRect</key> 5454 <key>PropertiesRect</key>
5014 <map> 5455 <map>
5015 <key>Comment</key> 5456 <key>Comment</key>
5016 <string>Rectangle for inventory item properties window</string> 5457 <string>Rectangle for inventory item properties window</string>
5017 <key>Persist</key> 5458 <key>Persist</key>
5018 <integer>1</integer> 5459 <integer>1</integer>
5019 <key>Type</key> 5460 <key>Type</key>
5020 <string>Rect</string> 5461 <string>Rect</string>
5021 <key>Value</key> 5462 <key>Value</key>
5022 <array> 5463 <array>
5023 <integer>0</integer> 5464 <integer>0</integer>
5024 <integer>320</integer> 5465 <integer>320</integer>
5025 <integer>350</integer> 5466 <integer>350</integer>
5026 <integer>0</integer> 5467 <integer>0</integer>
5027 </array> 5468 </array>
5028 </map> 5469 </map>
5029 <key>PurgeCacheOnNextStartup</key> 5470 <key>PurgeCacheOnNextStartup</key>
5030 <map> 5471 <map>
5031 <key>Comment</key> 5472 <key>Comment</key>
5032 <string>Clear local file cache next time viewer is run</string> 5473 <string>Clear local file cache next time viewer is run</string>
5033 <key>Persist</key> 5474 <key>Persist</key>
5034 <integer>1</integer> 5475 <integer>1</integer>
5035 <key>Type</key> 5476 <key>Type</key>
5036 <string>Boolean</string> 5477 <string>Boolean</string>
5037 <key>Value</key> 5478 <key>Value</key>
5038 <integer>0</integer> 5479 <integer>0</integer>
5039 </map> 5480 </map>
5040 <key>PurgeCacheOnStartup</key> 5481 <key>PurgeCacheOnStartup</key>
5041 <map> 5482 <map>
5042 <key>Comment</key> 5483 <key>Comment</key>
5043 <string>Clear local file cache every time viewer is run</string> 5484 <string>Clear local file cache every time viewer is run</string>
5044 <key>Persist</key> 5485 <key>Persist</key>
5045 <integer>1</integer> 5486 <integer>1</integer>
5046 <key>Type</key> 5487 <key>Type</key>
5047 <string>Boolean</string> 5488 <string>Boolean</string>
5048 <key>Value</key> 5489 <key>Value</key>
5049 <integer>0</integer> 5490 <integer>0</integer>
5050 </map> 5491 </map>
5051 <key>PushToTalkButton</key> 5492 <key>PushToTalkButton</key>
5052 <map> 5493 <map>
5053 <key>Comment</key> 5494 <key>Comment</key>
5054 <string>Which button or keyboard key is used for push-to-talk</string> 5495 <string>Which button or keyboard key is used for push-to-talk</string>
5055 <key>Persist</key> 5496 <key>Persist</key>
5056 <integer>1</integer> 5497 <integer>1</integer>
5057 <key>Type</key> 5498 <key>Type</key>
5058 <string>String</string> 5499 <string>String</string>
5059 <key>Value</key> 5500 <key>Value</key>
5060 <string>MiddleMouse</string> 5501 <string>MiddleMouse</string>
5061 </map> 5502 </map>
5062 <key>PushToTalkToggle</key> 5503 <key>PushToTalkToggle</key>
5063 <map> 5504 <map>
5064 <key>Comment</key> 5505 <key>Comment</key>
5065 <string>Should the push-to-talk button behave as a toggle</string> 5506 <string>Should the push-to-talk button behave as a toggle</string>
5066 <key>Persist</key> 5507 <key>Persist</key>
5067 <integer>1</integer> 5508 <integer>1</integer>
5068 <key>Type</key> 5509 <key>Type</key>
5069 <string>Boolean</string> 5510 <string>Boolean</string>
5070 <key>Value</key> 5511 <key>Value</key>
5071 <integer>0</integer> 5512 <integer>0</integer>
5072 </map> 5513 </map>
5073 <key>QAMode</key> 5514 <key>QAMode</key>
5074 <map> 5515 <map>
5075 <key>Comment</key> 5516 <key>Comment</key>
5076 <string>Enable Testing Features.</string> 5517 <string>Enable Testing Features.</string>
5077 <key>Persist</key> 5518 <key>Persist</key>
5078 <integer>1</integer> 5519 <integer>1</integer>
5079 <key>Type</key> 5520 <key>Type</key>
5080 <string>Boolean</string> 5521 <string>Boolean</string>
5081 <key>Value</key> 5522 <key>Value</key>
5082 <integer>0</integer> 5523 <integer>0</integer>
5083 </map> 5524 </map>
5084 <key>QuietSnapshotsToDisk</key> 5525 <key>QuietSnapshotsToDisk</key>
5085 <map> 5526 <map>
5086 <key>Comment</key> 5527 <key>Comment</key>
5087 <string>Take snapshots to disk without playing animation or sound</string> 5528 <string>Take snapshots to disk without playing animation or sound</string>
5088 <key>Persist</key> 5529 <key>Persist</key>
5089 <integer>1</integer> 5530 <integer>1</integer>
5090 <key>Type</key> 5531 <key>Type</key>
5091 <string>Boolean</string> 5532 <string>Boolean</string>
5092 <key>Value</key> 5533 <key>Value</key>
5093 <integer>0</integer> 5534 <integer>0</integer>
5094 </map> 5535 </map>
5095 <key>QuitAfterSeconds</key> 5536 <key>QuitAfterSeconds</key>
5096 <map> 5537 <map>
5097 <key>Comment</key> 5538 <key>Comment</key>
5098 <string>The duration allowed before quitting.</string> 5539 <string>The duration allowed before quitting.</string>
5099 <key>Persist</key> 5540 <key>Persist</key>
5100 <integer>1</integer> 5541 <integer>1</integer>
5101 <key>Type</key> 5542 <key>Type</key>
5102 <string>F32</string> 5543 <string>F32</string>
5103 <key>Value</key> 5544 <key>Value</key>
5104 <real>0</real> 5545 <real>0.0</real>
5105 </map> 5546 </map>
5106 <key>RadioLandBrushAction</key> 5547 <key>RadioLandBrushAction</key>
5107 <map> 5548 <map>
5108 <key>Comment</key> 5549 <key>Comment</key>
5109 <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string> 5550 <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
5110 <key>Persist</key> 5551 <key>Persist</key>
5111 <integer>1</integer> 5552 <integer>1</integer>
5112 <key>Type</key> 5553 <key>Type</key>
5113 <string>S32</string> 5554 <string>S32</string>
5114 <key>Value</key> 5555 <key>Value</key>
5115 <integer>0</integer> 5556 <integer>0</integer>
5116 </map> 5557 </map>
5117 <key>RadioLandBrushSize</key> 5558 <key>RadioLandBrushSize</key>
5118 <map> 5559 <map>
5119 <key>Comment</key> 5560 <key>Comment</key>
5120 <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string> 5561 <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
5121 <key>Persist</key> 5562 <key>Persist</key>
5122 <integer>1</integer> 5563 <integer>1</integer>
5123 <key>Type</key> 5564 <key>Type</key>
5124 <string>S32</string> 5565 <string>S32</string>
5125 <key>Value</key> 5566 <key>Value</key>
5126 <integer>0</integer> 5567 <integer>0</integer>
5127 </map> 5568 </map>
5128 <key>RecentItemsSortOrder</key> 5569 <key>RecentItemsSortOrder</key>
5129 <map> 5570 <map>
5130 <key>Comment</key> 5571 <key>Comment</key>
5131 <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 5572 <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
5132 <key>Persist</key> 5573 <key>Persist</key>
5133 <integer>1</integer> 5574 <integer>1</integer>
5134 <key>Type</key> 5575 <key>Type</key>
5135 <string>U32</string> 5576 <string>U32</string>
5136 <key>Value</key> 5577 <key>Value</key>
5137 <integer>1</integer> 5578 <integer>1</integer>
5138 </map> 5579 </map>
5139 <key>RectangleSelectInclusive</key> 5580 <key>RectangleSelectInclusive</key>
5140 <map> 5581 <map>
5141 <key>Comment</key> 5582 <key>Comment</key>
5142 <string>Select objects that have at least one vertex inside selection rectangle</string> 5583 <string>Select objects that have at least one vertex inside selection rectangle</string>
5143 <key>Persist</key> 5584 <key>Persist</key>
5144 <integer>1</integer> 5585 <integer>1</integer>
5145 <key>Type</key> 5586 <key>Type</key>
5146 <string>Boolean</string> 5587 <string>Boolean</string>
5147 <key>Value</key> 5588 <key>Value</key>
5148 <integer>1</integer> 5589 <integer>1</integer>
5149 </map> 5590 </map>
5150 <key>RegionTextureSize</key> 5591 <key>RegionTextureSize</key>
5151 <map> 5592 <map>
5152 <key>Comment</key> 5593 <key>Comment</key>
5153 <string>Terrain texture dimensions (power of 2)</string> 5594 <string>Terrain texture dimensions (power of 2)</string>
5154 <key>Persist</key> 5595 <key>Persist</key>
5155 <integer>1</integer> 5596 <integer>1</integer>
5156 <key>Type</key> 5597 <key>Type</key>
5157 <string>U32</string> 5598 <string>U32</string>
5158 <key>Value</key> 5599 <key>Value</key>
5159 <integer>256</integer> 5600 <integer>256</integer>
5160 </map> 5601 </map>
5161 <key>RememberPassword</key> 5602 <key>RememberPassword</key>
5162 <map> 5603 <map>
5163 <key>Comment</key> 5604 <key>Comment</key>
5164 <string>Keep password (in encrypted form) for next login</string> 5605 <string>Keep password (in encrypted form) for next login</string>
5165 <key>Persist</key> 5606 <key>Persist</key>
5166 <integer>1</integer> 5607 <integer>1</integer>
5167 <key>Type</key> 5608 <key>Type</key>
5168 <string>Boolean</string> 5609 <string>Boolean</string>
5169 <key>Value</key> 5610 <key>Value</key>
5170 <integer>1</integer> 5611 <integer>1</integer>
5171 </map> 5612 </map>
5172 <key>RenderAnisotropic</key> 5613 <key>RenderAnisotropic</key>
5173 <map> 5614 <map>
5174 <key>Comment</key> 5615 <key>Comment</key>
5175 <string>Render textures using anisotropic filtering</string> 5616 <string>Render textures using anisotropic filtering</string>
5176 <key>Persist</key> 5617 <key>Persist</key>
5177 <integer>1</integer> 5618 <integer>1</integer>
5178 <key>Type</key> 5619 <key>Type</key>
5179 <string>Boolean</string> 5620 <string>Boolean</string>
5180 <key>Value</key> 5621 <key>Value</key>
5181 <integer>0</integer> 5622 <integer>0</integer>
5182 </map> 5623 </map>
5183 <key>RenderAppleUseMultGL</key> 5624 <key>RenderAppleUseMultGL</key>
5184 <map> 5625 <map>
5185 <key>Comment</key> 5626 <key>Comment</key>
5186 <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string> 5627 <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
5187 <key>Persist</key> 5628 <key>Persist</key>
5188 <integer>1</integer> 5629 <integer>1</integer>
5189 <key>Type</key> 5630 <key>Type</key>
5190 <string>Boolean</string> 5631 <string>Boolean</string>
5191 <key>Value</key> 5632 <key>Value</key>
5192 <integer>0</integer> 5633 <integer>0</integer>
5193 </map> 5634 </map>
5194 <key>RenderAvatarCloth</key> 5635 <key>RenderAvatarCloth</key>
5195 <map> 5636 <map>
5196 <key>Comment</key> 5637 <key>Comment</key>
5197 <string>Controls if avatars use wavy cloth</string> 5638 <string>Controls if avatars use wavy cloth</string>
5198 <key>Persist</key> 5639 <key>Persist</key>
5199 <integer>1</integer> 5640 <integer>1</integer>
5200 <key>Type</key> 5641 <key>Type</key>
5201 <string>Boolean</string> 5642 <string>Boolean</string>
5202 <key>Value</key> 5643 <key>Value</key>
5203 <integer>1</integer> 5644 <integer>1</integer>
5204 </map> 5645 </map>
5205 <key>RenderAvatarLODFactor</key> 5646 <key>RenderAvatarLODFactor</key>
5206 <map> 5647 <map>
5207 <key>Comment</key> 5648 <key>Comment</key>
5208 <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string> 5649 <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
5209 <key>Persist</key> 5650 <key>Persist</key>
5210 <integer>1</integer> 5651 <integer>1</integer>
5211 <key>Type</key> 5652 <key>Type</key>
5212 <string>F32</string> 5653 <string>F32</string>
5213 <key>Value</key> 5654 <key>Value</key>
5214 <real>0.5</real> 5655 <real>0.5</real>
5215 </map> 5656 </map>
5216 <key>RenderAvatarMaxVisible</key> 5657 <key>RenderAvatarMaxVisible</key>
5217 <map> 5658 <map>
5218 <key>Comment</key> 5659 <key>Comment</key>
5219 <string>Maximum number of avatars to display at any one time</string> 5660 <string>Maximum number of avatars to display at any one time</string>
5220 <key>Persist</key> 5661 <key>Persist</key>
5221 <integer>1</integer> 5662 <integer>1</integer>
5222 <key>Type</key> 5663 <key>Type</key>
5223 <string>S32</string> 5664 <string>S32</string>
5224 <key>Value</key> 5665 <key>Value</key>
5225 <integer>35</integer> 5666 <integer>35</integer>
5226 </map> 5667 </map>
5227 <key>RenderAvatarVP</key> 5668 <key>RenderAvatarVP</key>
5228 <map> 5669 <map>
5229 <key>Comment</key> 5670 <key>Comment</key>
5230 <string>Use vertex programs to perform hardware skinning of avatar</string> 5671 <string>Use vertex programs to perform hardware skinning of avatar</string>
5231 <key>Persist</key> 5672 <key>Persist</key>
5232 <integer>1</integer> 5673 <integer>1</integer>
5233 <key>Type</key> 5674 <key>Type</key>
5234 <string>Boolean</string> 5675 <string>Boolean</string>
5235 <key>Value</key> 5676 <key>Value</key>
5236 <integer>1</integer> 5677 <integer>1</integer>
5237 </map> 5678 </map>
5238 <key>RenderBumpmapMinDistanceSquared</key> 5679 <key>RenderBumpmapMinDistanceSquared</key>
5239 <map> 5680 <map>
5240 <key>Comment</key> 5681 <key>Comment</key>
5241 <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string> 5682 <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
5242 <key>Persist</key> 5683 <key>Persist</key>
5243 <integer>1</integer> 5684 <integer>1</integer>
5244 <key>Type</key> 5685 <key>Type</key>
5245 <string>F32</string> 5686 <string>F32</string>
5246 <key>Value</key> 5687 <key>Value</key>
5247 <real>100</real> 5688 <real>100.0</real>
5248 </map> 5689 </map>
5249 <key>RenderCubeMap</key> 5690 <key>RenderCubeMap</key>
5250 <map> 5691 <map>
5251 <key>Comment</key> 5692 <key>Comment</key>
5252 <string>Whether we can render the cube map or not</string> 5693 <string>Whether we can render the cube map or not</string>
5253 <key>Persist</key> 5694 <key>Persist</key>
5254 <integer>1</integer> 5695 <integer>1</integer>
5255 <key>Type</key> 5696 <key>Type</key>
5256 <string>Boolean</string> 5697 <string>Boolean</string>
5257 <key>Value</key> 5698 <key>Value</key>
5258 <integer>1</integer> 5699 <integer>1</integer>
5259 </map> 5700 </map>
5260 <key>RenderCustomSettings</key> 5701 <key>RenderCustomSettings</key>
5261 <map> 5702 <map>
5262 <key>Comment</key> 5703 <key>Comment</key>
5263 <string>Do you want to set the graphics settings yourself</string> 5704 <string>Do you want to set the graphics settings yourself</string>
5264 <key>Persist</key> 5705 <key>Persist</key>
5265 <integer>1</integer> 5706 <integer>1</integer>
5266 <key>Type</key> 5707 <key>Type</key>
5267 <string>Boolean</string> 5708 <string>Boolean</string>
5268 <key>Value</key> 5709 <key>Value</key>
5269 <integer>0</integer> 5710 <integer>0</integer>
5270 </map> 5711 </map>
5712 <key>RenderDebugGL</key>
5713 <map>
5714 <key>Comment</key>
5715 <string>Enable strict GL debugging.</string>
5716 <key>Persist</key>
5717 <integer>1</integer>
5718 <key>Type</key>
5719 <string>Boolean</string>
5720 <key>Value</key>
5721 <integer>0</integer>
5722 </map>
5723 <key>RenderDebugPipeline</key>
5724 <map>
5725 <key>Comment</key>
5726 <string>Enable strict pipeline debugging.</string>
5727 <key>Persist</key>
5728 <integer>1</integer>
5729 <key>Type</key>
5730 <string>Boolean</string>
5731 <key>Value</key>
5732 <integer>0</integer>
5733 </map>
5271 <key>RenderDebugTextureBind</key> 5734 <key>RenderDebugTextureBind</key>
5272 <map> 5735 <map>
5273 <key>Comment</key> 5736 <key>Comment</key>
5274 <string>Enable texture bind performance test.</string> 5737 <string>Enable texture bind performance test.</string>
5275 <key>Persist</key> 5738 <key>Persist</key>
5276 <integer>1</integer> 5739 <integer>1</integer>
5277 <key>Type</key> 5740 <key>Type</key>
5278 <string>Boolean</string> 5741 <string>Boolean</string>
5279 <key>Value</key> 5742 <key>Value</key>
5280 <integer>0</integer> 5743 <integer>0</integer>
5281 </map> 5744 </map>
5745 <key>RenderDeferred</key>
5746 <map>
5747 <key>Comment</key>
5748 <string>Use deferred rendering pipeline.</string>
5749 <key>Persist</key>
5750 <integer>1</integer>
5751 <key>Type</key>
5752 <string>Boolean</string>
5753 <key>Value</key>
5754 <integer>0</integer>
5755 </map>
5282 <key>RenderDynamicLOD</key> 5756 <key>RenderDynamicLOD</key>
5283 <map> 5757 <map>
5284 <key>Comment</key> 5758 <key>Comment</key>
5285 <string>Dynamically adjust level of detail.</string> 5759 <string>Dynamically adjust level of detail.</string>
5286 <key>Persist</key> 5760 <key>Persist</key>
5287 <integer>1</integer> 5761 <integer>1</integer>
5288 <key>Type</key> 5762 <key>Type</key>
5289 <string>Boolean</string> 5763 <string>Boolean</string>
5290 <key>Value</key> 5764 <key>Value</key>
5291 <integer>1</integer> 5765 <integer>1</integer>
5292 </map> 5766 </map>
5293 <key>RenderDynamicReflections</key> 5767 <key>RenderDynamicReflections</key>
5294 <map> 5768 <map>
5295 <key>Comment</key> 5769 <key>Comment</key>
5296 <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string> 5770 <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
5297 <key>Persist</key> 5771 <key>Persist</key>
5298 <integer>1</integer> 5772 <integer>1</integer>
5299 <key>Type</key> 5773 <key>Type</key>
5300 <string>Boolean</string> 5774 <string>Boolean</string>
5301 <key>Value</key> 5775 <key>Value</key>
5302 <integer>0</integer> 5776 <integer>0</integer>
5303 </map> 5777 </map>
5778 <key>RenderFSAASamples</key>
5779 <map>
5780 <key>Comment</key>
5781 <string>Number of samples to use for FSAA (0 = no AA).</string>
5782 <key>Persist</key>
5783 <integer>1</integer>
5784 <key>Type</key>
5785 <string>U32</string>
5786 <key>Value</key>
5787 <integer>0</integer>
5788 </map>
5304 <key>RenderFarClip</key> 5789 <key>RenderFarClip</key>
5305 <map> 5790 <map>
5306 <key>Comment</key> 5791 <key>Comment</key>
5307 <string>Distance of far clip plane from camera (meters)</string> 5792 <string>Distance of far clip plane from camera (meters)</string>
5308 <key>Persist</key> 5793 <key>Persist</key>
5309 <integer>1</integer> 5794 <integer>1</integer>
5310 <key>Type</key> 5795 <key>Type</key>
5311 <string>F32</string> 5796 <string>F32</string>
5312 <key>Value</key> 5797 <key>Value</key>
5313 <real>256</real> 5798 <real>256.0</real>
5314 </map> 5799 </map>
5800 <key>RenderFastAlpha</key>
5801 <map>
5802 <key>Comment</key>
5803 <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
5804 <key>Persist</key>
5805 <integer>1</integer>
5806 <key>Type</key>
5807 <string>Boolean</string>
5808 <key>Value</key>
5809 <integer>0</integer>
5810 </map>
5315 <key>RenderFastUI</key> 5811 <key>RenderFastUI</key>
5316 <map> 5812 <map>
5317 <key>Comment</key> 5813 <key>Comment</key>
5318 <string>[NOT USED]</string> 5814 <string>[NOT USED]</string>
5319 <key>Persist</key> 5815 <key>Persist</key>
5320 <integer>1</integer> 5816 <integer>1</integer>
5321 <key>Type</key> 5817 <key>Type</key>
5322 <string>Boolean</string> 5818 <string>Boolean</string>
5323 <key>Value</key> 5819 <key>Value</key>
5324 <integer>0</integer> 5820 <integer>0</integer>
5325 </map> 5821 </map>
5326 <key>RenderFlexTimeFactor</key> 5822 <key>RenderFlexTimeFactor</key>
5327 <map> 5823 <map>
5328 <key>Comment</key> 5824 <key>Comment</key>
5329 <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string> 5825 <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
5330 <key>Persist</key> 5826 <key>Persist</key>
5331 <integer>1</integer> 5827 <integer>1</integer>
5332 <key>Type</key> 5828 <key>Type</key>
5333 <string>F32</string> 5829 <string>F32</string>
5334 <key>Value</key> 5830 <key>Value</key>
5335 <real>1</real> 5831 <real>1.0</real>
5336 </map> 5832 </map>
5337 <key>RenderFogRatio</key> 5833 <key>RenderFogRatio</key>
5338 <map> 5834 <map>
5339 <key>Comment</key> 5835 <key>Comment</key>
5340 <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string> 5836 <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
5341 <key>Persist</key> 5837 <key>Persist</key>
5342 <integer>1</integer> 5838 <integer>1</integer>
5343 <key>Type</key> 5839 <key>Type</key>
5344 <string>F32</string> 5840 <string>F32</string>
5345 <key>Value</key> 5841 <key>Value</key>
5346 <real>4.0</real> 5842 <real>4.0</real>
5347 </map> 5843 </map>
5348 <key>RenderGamma</key> 5844 <key>RenderGamma</key>
5349 <map> 5845 <map>
5350 <key>Comment</key> 5846 <key>Comment</key>
5351 <string>Sets gamma exponent for renderer</string> 5847 <string>Sets gamma exponent for renderer</string>
5352 <key>Persist</key> 5848 <key>Persist</key>
5353 <integer>1</integer> 5849 <integer>1</integer>
5354 <key>Type</key> 5850 <key>Type</key>
5355 <string>F32</string> 5851 <string>F32</string>
5356 <key>Value</key> 5852 <key>Value</key>
5357 <real>0</real> 5853 <real>0.0</real>
5358 </map> 5854 </map>
5359 <key>RenderGammaFull</key> 5855 <key>RenderGammaFull</key>
5360 <map> 5856 <map>
5361 <key>Comment</key> 5857 <key>Comment</key>
5362 <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string> 5858 <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
5363 <key>Persist</key> 5859 <key>Persist</key>
5364 <integer>1</integer> 5860 <integer>1</integer>
5365 <key>Type</key> 5861 <key>Type</key>
5366 <string>Boolean</string> 5862 <string>Boolean</string>
5367 <key>Value</key> 5863 <key>Value</key>
5368 <real>1</real> 5864 <real>1.0</real>
5369 </map> 5865 </map>
5370 <key>RenderGlow</key> 5866 <key>RenderGlow</key>
5371 <map> 5867 <map>
5372 <key>Comment</key> 5868 <key>Comment</key>
5373 <string>Render bloom post effect.</string> 5869 <string>Render bloom post effect.</string>
5374 <key>Persist</key> 5870 <key>Persist</key>
5375 <integer>1</integer> 5871 <integer>1</integer>
5376 <key>Type</key> 5872 <key>Type</key>
5377 <string>Boolean</string> 5873 <string>Boolean</string>
5378 <key>Value</key> 5874 <key>Value</key>
5379 <integer>1</integer> 5875 <integer>1</integer>
5380 </map> 5876 </map>
5381 <key>RenderGlowIterations</key> 5877 <key>RenderGlowIterations</key>
5382 <map> 5878 <map>
5383 <key>Comment</key> 5879 <key>Comment</key>
5384 <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string> 5880 <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
5385 <key>Persist</key> 5881 <key>Persist</key>
5386 <integer>1</integer> 5882 <integer>1</integer>
5387 <key>Type</key> 5883 <key>Type</key>
5388 <string>S32</string> 5884 <string>S32</string>
5389 <key>Value</key> 5885 <key>Value</key>
5390 <integer>2</integer> 5886 <integer>2</integer>
5391 </map> 5887 </map>
5392 <key>RenderGlowLumWeights</key> 5888 <key>RenderGlowLumWeights</key>
5393 <map> 5889 <map>
5394 <key>Comment</key> 5890 <key>Comment</key>
5395 <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string> 5891 <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
5396 <key>Persist</key> 5892 <key>Persist</key>
5397 <integer>1</integer> 5893 <integer>1</integer>
5398 <key>Type</key> 5894 <key>Type</key>
5399 <string>Vector3</string> 5895 <string>Vector3</string>
5400 <key>Value</key> 5896 <key>Value</key>
5401 <array> 5897 <array>
5402 <real>0.299</real> 5898 <real>0.299</real>
5403 <real>0.587</real> 5899 <real>0.587</real>
5404 <real>0.114</real> 5900 <real>0.114</real>
5405 </array> 5901 </array>
5406 </map> 5902 </map>
5407 <key>RenderGlowMaxExtractAlpha</key> 5903 <key>RenderGlowMaxExtractAlpha</key>
5408 <map> 5904 <map>
5409 <key>Comment</key> 5905 <key>Comment</key>
5410 <string>Max glow alpha value for brightness extraction to auto-glow.</string> 5906 <string>Max glow alpha value for brightness extraction to auto-glow.</string>
5411 <key>Persist</key> 5907 <key>Persist</key>
5412 <integer>1</integer> 5908 <integer>1</integer>
5413 <key>Type</key> 5909 <key>Type</key>
5414 <string>F32</string> 5910 <string>F32</string>
5415 <key>Value</key> 5911 <key>Value</key>
5416 <real>0.065</real> 5912 <real>0.065</real>
5417 </map> 5913 </map>
5418 <key>RenderGlowMinLuminance</key> 5914 <key>RenderGlowMinLuminance</key>
5419 <map> 5915 <map>
5420 <key>Comment</key> 5916 <key>Comment</key>
5421 <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string> 5917 <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
5422 <key>Persist</key> 5918 <key>Persist</key>
5423 <integer>1</integer> 5919 <integer>1</integer>
5424 <key>Type</key> 5920 <key>Type</key>
5425 <string>F32</string> 5921 <string>F32</string>
5426 <key>Value</key> 5922 <key>Value</key>
5427 <real>1.0</real> 5923 <real>1.0</real>
5428 </map> 5924 </map>
5429 <key>RenderGlowResolutionPow</key> 5925 <key>RenderGlowResolutionPow</key>
5430 <map> 5926 <map>
5431 <key>Comment</key> 5927 <key>Comment</key>
5432 <string>Glow map resolution power of two.</string> 5928 <string>Glow map resolution power of two.</string>
5433 <key>Persist</key> 5929 <key>Persist</key>
5434 <integer>1</integer> 5930 <integer>1</integer>
5435 <key>Type</key> 5931 <key>Type</key>
5436 <string>S32</string> 5932 <string>S32</string>
5437 <key>Value</key> 5933 <key>Value</key>
5438 <integer>9</integer> 5934 <integer>9</integer>
5439 </map> 5935 </map>
5440 <key>RenderGlowStrength</key> 5936 <key>RenderGlowStrength</key>
5441 <map> 5937 <map>
5442 <key>Comment</key> 5938 <key>Comment</key>
5443 <string>Additive strength of glow.</string> 5939 <string>Additive strength of glow.</string>
5444 <key>Persist</key> 5940 <key>Persist</key>
5445 <integer>1</integer> 5941 <integer>1</integer>
5446 <key>Type</key> 5942 <key>Type</key>
5447 <string>F32</string> 5943 <string>F32</string>
5448 <key>Value</key> 5944 <key>Value</key>
5449 <real>0.35</real> 5945 <real>0.35</real>
5450 </map> 5946 </map>
5451 <key>RenderGlowWarmthAmount</key> 5947 <key>RenderGlowWarmthAmount</key>
5452 <map> 5948 <map>
5453 <key>Comment</key> 5949 <key>Comment</key>
5454 <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string> 5950 <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
5455 <key>Persist</key> 5951 <key>Persist</key>
5456 <integer>1</integer> 5952 <integer>1</integer>
5457 <key>Type</key> 5953 <key>Type</key>
5458 <string>F32</string> 5954 <string>F32</string>
5459 <key>Value</key> 5955 <key>Value</key>
5460 <real>0</real> 5956 <real>0.0</real>
5461 </map> 5957 </map>
5462 <key>RenderGlowWarmthWeights</key> 5958 <key>RenderGlowWarmthWeights</key>
5463 <map> 5959 <map>
5464 <key>Comment</key> 5960 <key>Comment</key>
5465 <string>Weight of each color channel used before finding the max warmth</string> 5961 <string>Weight of each color channel used before finding the max warmth</string>
5466 <key>Persist</key> 5962 <key>Persist</key>
5467 <integer>1</integer> 5963 <integer>1</integer>
5468 <key>Type</key> 5964 <key>Type</key>
5469 <string>Vector3</string> 5965 <string>Vector3</string>
5470 <key>Value</key> 5966 <key>Value</key>
5471 <array> 5967 <array>
5472 <real>1.0</real> 5968 <real>1.0</real>
5473 <real>0.5</real> 5969 <real>0.5</real>
5474 <real>0.7</real> 5970 <real>0.7</real>
5475 </array> 5971 </array>
5476 </map> 5972 </map>
5477 <key>RenderGlowWidth</key> 5973 <key>RenderGlowWidth</key>
5478 <map> 5974 <map>
5479 <key>Comment</key> 5975 <key>Comment</key>
5480 <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string> 5976 <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
5481 <key>Persist</key> 5977 <key>Persist</key>
5482 <integer>1</integer> 5978 <integer>1</integer>
5483 <key>Type</key> 5979 <key>Type</key>
5484 <string>F32</string> 5980 <string>F32</string>
5485 <key>Value</key> 5981 <key>Value</key>
5486 <real>1.3</real> 5982 <real>1.3</real>
5487 </map> 5983 </map>
5488 <key>RenderHUDInSnapshot</key> 5984 <key>RenderHUDInSnapshot</key>
5489 <map> 5985 <map>
5490 <key>Comment</key> 5986 <key>Comment</key>
5491 <string>Display HUD attachments in snapshot</string> 5987 <string>Display HUD attachments in snapshot</string>
5492 <key>Persist</key> 5988 <key>Persist</key>
5493 <integer>1</integer> 5989 <integer>1</integer>
5494 <key>Type</key> 5990 <key>Type</key>
5495 <string>Boolean</string> 5991 <string>Boolean</string>
5496 <key>Value</key> 5992 <key>Value</key>
5497 <integer>0</integer> 5993 <integer>0</integer>
5498 </map> 5994 </map>
5499 <key>RenderHiddenSelections</key> 5995 <key>RenderHiddenSelections</key>
5500 <map> 5996 <map>
5501 <key>Comment</key> 5997 <key>Comment</key>
5502 <string>Show selection lines on objects that are behind other objects</string> 5998 <string>Show selection lines on objects that are behind other objects</string>
5503 <key>Persist</key> 5999 <key>Persist</key>
5504 <integer>1</integer> 6000 <integer>1</integer>
5505 <key>Type</key> 6001 <key>Type</key>
5506 <string>Boolean</string> 6002 <string>Boolean</string>
5507 <key>Value</key> 6003 <key>Value</key>
5508 <integer>1</integer> 6004 <integer>1</integer>
5509 </map> 6005 </map>
5510 <key>RenderHideGroupTitle</key> 6006 <key>RenderHideGroupTitle</key>
5511 <map> 6007 <map>
5512 <key>Comment</key> 6008 <key>Comment</key>
5513 <string>Don&apos;t show my group title in my name label</string> 6009 <string>Don't show my group title in my name label</string>
5514 <key>Persist</key> 6010 <key>Persist</key>
5515 <integer>1</integer> 6011 <integer>1</integer>
5516 <key>Type</key> 6012 <key>Type</key>
5517 <string>Boolean</string> 6013 <string>Boolean</string>
5518 <key>Value</key> 6014 <key>Value</key>
5519 <integer>0</integer> 6015 <integer>0</integer>
5520 </map> 6016 </map>
5521 <key>RenderHideGroupTitleAll</key> 6017 <key>RenderHideGroupTitleAll</key>
5522 <map> 6018 <map>
5523 <key>Comment</key> 6019 <key>Comment</key>
5524 <string>Show group titles in name labels</string> 6020 <string>Show group titles in name labels</string>
5525 <key>Persist</key> 6021 <key>Persist</key>
5526 <integer>1</integer> 6022 <integer>1</integer>
5527 <key>Type</key> 6023 <key>Type</key>
5528 <string>Boolean</string> 6024 <string>Boolean</string>
5529 <key>Value</key> 6025 <key>Value</key>
5530 <integer>0</integer> 6026 <integer>0</integer>
5531 </map> 6027 </map>
5532 <key>RenderInitError</key> 6028 <key>RenderInitError</key>
5533 <map> 6029 <map>
5534 <key>Comment</key> 6030 <key>Comment</key>
5535 <string>Error occured while initializing GL</string> 6031 <string>Error occured while initializing GL</string>
5536 <key>Persist</key> 6032 <key>Persist</key>
5537 <integer>1</integer> 6033 <integer>1</integer>
5538 <key>Type</key> 6034 <key>Type</key>
5539 <string>Boolean</string> 6035 <string>Boolean</string>
5540 <key>Value</key> 6036 <key>Value</key>
5541 <integer>0</integer> 6037 <integer>0</integer>
5542 </map> 6038 </map>
5543 <key>RenderLightRadius</key> 6039 <key>RenderLightRadius</key>
5544 <map> 6040 <map>
5545 <key>Comment</key> 6041 <key>Comment</key>
5546 <string>Render the radius of selected lights</string> 6042 <string>Render the radius of selected lights</string>
5547 <key>Persist</key> 6043 <key>Persist</key>
5548 <integer>1</integer> 6044 <integer>1</integer>
5549 <key>Type</key> 6045 <key>Type</key>
5550 <string>Boolean</string> 6046 <string>Boolean</string>
5551 <key>Value</key> 6047 <key>Value</key>
5552 <integer>0</integer> 6048 <integer>0</integer>
5553 </map> 6049 </map>
5554 <key>RenderLightingDetail</key> 6050 <key>RenderLightingDetail</key>
5555 <map> 6051 <map>
5556 <key>Comment</key> 6052 <key>Comment</key>
5557 <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string> 6053 <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
5558 <key>Persist</key> 6054 <key>Persist</key>
5559 <integer>1</integer> 6055 <integer>1</integer>
5560 <key>Type</key> 6056 <key>Type</key>
5561 <string>S32</string> 6057 <string>S32</string>
5562 <key>Value</key> 6058 <key>Value</key>
5563 <integer>1</integer> 6059 <integer>1</integer>
5564 </map> 6060 </map>
5565 <key>RenderMaxPartCount</key> 6061 <key>RenderMaxPartCount</key>
5566 <map> 6062 <map>
5567 <key>Comment</key> 6063 <key>Comment</key>
5568 <string>Maximum number of particles to display on screen</string> 6064 <string>Maximum number of particles to display on screen</string>
5569 <key>Persist</key> 6065 <key>Persist</key>
5570 <integer>1</integer> 6066 <integer>1</integer>
5571 <key>Type</key> 6067 <key>Type</key>
5572 <string>S32</string> 6068 <string>S32</string>
5573 <key>Value</key> 6069 <key>Value</key>
5574 <integer>4096</integer> 6070 <integer>4096</integer>
5575 </map> 6071 </map>
5576 <key>RenderMaxVBOSize</key> 6072 <key>RenderMaxVBOSize</key>
5577 <map> 6073 <map>
5578 <key>Comment</key> 6074 <key>Comment</key>
5579 <string>Maximum size of a vertex buffer (in KB).</string> 6075 <string>Maximum size of a vertex buffer (in KB).</string>
5580 <key>Persist</key> 6076 <key>Persist</key>
5581 <integer>1</integer> 6077 <integer>1</integer>
5582 <key>Type</key> 6078 <key>Type</key>
5583 <string>S32</string> 6079 <string>S32</string>
5584 <key>Value</key> 6080 <key>Value</key>
5585 <integer>32</integer> 6081 <integer>32</integer>
5586 </map> 6082 </map>
5587 <key>RenderName</key> 6083 <key>RenderName</key>
5588 <map> 6084 <map>
5589 <key>Comment</key> 6085 <key>Comment</key>
5590 <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string> 6086 <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
5591 <key>Persist</key> 6087 <key>Persist</key>
5592 <integer>1</integer> 6088 <integer>1</integer>
5593 <key>Type</key> 6089 <key>Type</key>
5594 <string>S32</string> 6090 <string>S32</string>
5595 <key>Value</key> 6091 <key>Value</key>
5596 <integer>2</integer> 6092 <integer>2</integer>
5597 </map> 6093 </map>
5598 <key>RenderNameFadeDuration</key> 6094 <key>RenderNameFadeDuration</key>
5599 <map> 6095 <map>
5600 <key>Comment</key> 6096 <key>Comment</key>
5601 <string>Time interval over which to fade avatar names (seconds)</string> 6097 <string>Time interval over which to fade avatar names (seconds)</string>
5602 <key>Persist</key> 6098 <key>Persist</key>
5603 <integer>1</integer> 6099 <integer>1</integer>
5604 <key>Type</key> 6100 <key>Type</key>
5605 <string>F32</string> 6101 <string>F32</string>
5606 <key>Value</key> 6102 <key>Value</key>
5607 <real>1</real> 6103 <real>1.0</real>
5608 </map> 6104 </map>
5609 <key>RenderNameHideSelf</key> 6105 <key>RenderNameHideSelf</key>
5610 <map> 6106 <map>
5611 <key>Comment</key> 6107 <key>Comment</key>
5612 <string>Don&apos;t display own name above avatar</string> 6108 <string>Don't display own name above avatar</string>
5613 <key>Persist</key> 6109 <key>Persist</key>
5614 <integer>1</integer> 6110 <integer>1</integer>
5615 <key>Type</key> 6111 <key>Type</key>
5616 <string>Boolean</string> 6112 <string>Boolean</string>
5617 <key>Value</key> 6113 <key>Value</key>
5618 <integer>0</integer> 6114 <integer>0</integer>
5619 </map> 6115 </map>
5620 <key>RenderNameShowTime</key> 6116 <key>RenderNameShowTime</key>
5621 <map> 6117 <map>
5622 <key>Comment</key> 6118 <key>Comment</key>
5623 <string>Fade avatar names after specified time (seconds)</string> 6119 <string>Fade avatar names after specified time (seconds)</string>
5624 <key>Persist</key> 6120 <key>Persist</key>
5625 <integer>1</integer> 6121 <integer>1</integer>
5626 <key>Type</key> 6122 <key>Type</key>
5627 <string>F32</string> 6123 <string>F32</string>
5628 <key>Value</key> 6124 <key>Value</key>
5629 <real>10</real> 6125 <real>10.0</real>
5630 </map> 6126 </map>
5631 <key>RenderObjectBump</key> 6127 <key>RenderObjectBump</key>
5632 <map> 6128 <map>
5633 <key>Comment</key> 6129 <key>Comment</key>
5634 <string>Show bumpmapping on primitives</string> 6130 <string>Show bumpmapping on primitives</string>
5635 <key>Persist</key> 6131 <key>Persist</key>
5636 <integer>1</integer> 6132 <integer>1</integer>
5637 <key>Type</key> 6133 <key>Type</key>
5638 <string>Boolean</string> 6134 <string>Boolean</string>
5639 <key>Value</key> 6135 <key>Value</key>
5640 <integer>1</integer> 6136 <integer>1</integer>
5641 </map> 6137 </map>
5642 <key>RenderQualityPerformance</key> 6138 <key>RenderQualityPerformance</key>
5643 <map> 6139 <map>
5644 <key>Comment</key> 6140 <key>Comment</key>
5645 <string>Which graphics settings you've chosen</string> 6141 <string>Which graphics settings you've chosen</string>
5646 <key>Persist</key> 6142 <key>Persist</key>
5647 <integer>1</integer> 6143 <integer>1</integer>
5648 <key>Type</key> 6144 <key>Type</key>
5649 <string>U32</string> 6145 <string>U32</string>
5650 <key>Value</key> 6146 <key>Value</key>
5651 <integer>1</integer> 6147 <integer>1</integer>
5652 </map> 6148 </map>
5653 <key>RenderReflectionDetail</key> 6149 <key>RenderReflectionDetail</key>
5654 <map> 6150 <map>
5655 <key>Comment</key> 6151 <key>Comment</key>
5656 <string>Detail of reflection render pass.</string> 6152 <string>Detail of reflection render pass.</string>
5657 <key>Persist</key> 6153 <key>Persist</key>
5658 <integer>1</integer> 6154 <integer>1</integer>
5659 <key>Type</key> 6155 <key>Type</key>
5660 <string>S32</string> 6156 <string>S32</string>
5661 <key>Value</key> 6157 <key>Value</key>
5662 <integer>2</integer> 6158 <integer>2</integer>
5663 </map> 6159 </map>
5664 <key>RenderReflectionRes</key> 6160 <key>RenderReflectionRes</key>
5665 <map> 6161 <map>
5666 <key>Comment</key> 6162 <key>Comment</key>
5667 <string>Reflection map resolution.</string> 6163 <string>Reflection map resolution.</string>
5668 <key>Persist</key> 6164 <key>Persist</key>
5669 <integer>1</integer> 6165 <integer>1</integer>
5670 <key>Type</key> 6166 <key>Type</key>
5671 <string>S32</string> 6167 <string>S32</string>
5672 <key>Value</key> 6168 <key>Value</key>
5673 <integer>64</integer> 6169 <integer>64</integer>
5674 </map> 6170 </map>
5675 <key>RenderResolutionDivisor</key> 6171 <key>RenderResolutionDivisor</key>
5676 <map> 6172 <map>
5677 <key>Comment</key> 6173 <key>Comment</key>
5678 <string>Divisor for rendering 3D scene at reduced resolution.</string> 6174 <string>Divisor for rendering 3D scene at reduced resolution.</string>
5679 <key>Persist</key> 6175 <key>Persist</key>
5680 <integer>1</integer> 6176 <integer>1</integer>
5681 <key>Type</key> 6177 <key>Type</key>
5682 <string>U32</string> 6178 <string>U32</string>
5683 <key>Value</key> 6179 <key>Value</key>
5684 <integer>1</integer> 6180 <integer>1</integer>
5685 </map> 6181 </map>
5686 <key>RenderShaderLODThreshold</key> 6182 <key>RenderShaderLODThreshold</key>
5687 <map> 6183 <map>
5688 <key>Comment</key> 6184 <key>Comment</key>
5689 <string>Fraction of draw distance defining the switch to a different shader LOD</string> 6185 <string>Fraction of draw distance defining the switch to a different shader LOD</string>
5690 <key>Persist</key> 6186 <key>Persist</key>
5691 <integer>1</integer> 6187 <integer>1</integer>
5692 <key>Type</key> 6188 <key>Type</key>
5693 <string>F32</string> 6189 <string>F32</string>
5694 <key>Value</key> 6190 <key>Value</key>
5695 <integer>1.0</integer> 6191 <real>1.0</real>
5696 </map> 6192 </map>
6193 <key>RenderShaderParticleThreshold</key>
6194 <map>
6195 <key>Comment</key>
6196 <string>Fraction of draw distance to not use shader on particles</string>
6197 <key>Persist</key>
6198 <integer>1</integer>
6199 <key>Type</key>
6200 <string>F32</string>
6201 <key>Value</key>
6202 <real>0.25</real>
6203 </map>
5697 <key>RenderSunDynamicRange</key> 6204 <key>RenderSunDynamicRange</key>
5698 <map> 6205 <map>
5699 <key>Comment</key> 6206 <key>Comment</key>
5700 <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string> 6207 <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
5701 <key>Persist</key> 6208 <key>Persist</key>
5702 <integer>1</integer> 6209 <integer>1</integer>
5703 <key>Type</key> 6210 <key>Type</key>
5704 <string>F32</string> 6211 <string>F32</string>
5705 <key>Value</key> 6212 <key>Value</key>
5706 <integer>1.0</integer> 6213 <real>1.0</real>
5707 </map> 6214 </map>
5708 <key>RenderTerrainDetail</key> 6215 <key>RenderTerrainDetail</key>
5709 <map> 6216 <map>
5710 <key>Comment</key> 6217 <key>Comment</key>
5711 <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string> 6218 <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
5712 <key>Persist</key> 6219 <key>Persist</key>
5713 <integer>1</integer> 6220 <integer>1</integer>
5714 <key>Type</key> 6221 <key>Type</key>
5715 <string>S32</string> 6222 <string>S32</string>
5716 <key>Value</key> 6223 <key>Value</key>
5717 <integer>2</integer> 6224 <integer>2</integer>
5718 </map> 6225 </map>
5719 <key>RenderTerrainLODFactor</key> 6226 <key>RenderTerrainLODFactor</key>
5720 <map> 6227 <map>
5721 <key>Comment</key> 6228 <key>Comment</key>
5722 <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string> 6229 <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
5723 <key>Persist</key> 6230 <key>Persist</key>
5724 <integer>1</integer> 6231 <integer>1</integer>
5725 <key>Type</key> 6232 <key>Type</key>
5726 <string>F32</string> 6233 <string>F32</string>
5727 <key>Value</key> 6234 <key>Value</key>
5728 <real>1.0</real> 6235 <real>1.0</real>
5729 </map> 6236 </map>
5730 <key>RenderTerrainScale</key> 6237 <key>RenderTerrainScale</key>
5731 <map> 6238 <map>
5732 <key>Comment</key> 6239 <key>Comment</key>
5733 <string>Terrain detail texture scale</string> 6240 <string>Terrain detail texture scale</string>
5734 <key>Persist</key> 6241 <key>Persist</key>
5735 <integer>1</integer> 6242 <integer>1</integer>
5736 <key>Type</key> 6243 <key>Type</key>
5737 <string>F32</string> 6244 <string>F32</string>
5738 <key>Value</key> 6245 <key>Value</key>
5739 <real>12</real> 6246 <real>12.0</real>
5740 </map> 6247 </map>
6248 <key>RenderTextureMemoryMultiple</key>
6249 <map>
6250 <key>Comment</key>
6251 <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
6252 <key>Persist</key>
6253 <integer>1</integer>
6254 <key>Type</key>
6255 <string>F32</string>
6256 <key>Value</key>
6257 <real>1.0</real>
6258 </map>
5741 <key>RenderTreeLODFactor</key> 6259 <key>RenderTreeLODFactor</key>
5742 <map> 6260 <map>
5743 <key>Comment</key> 6261 <key>Comment</key>
5744 <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string> 6262 <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
5745 <key>Persist</key> 6263 <key>Persist</key>
5746 <integer>1</integer> 6264 <integer>1</integer>
5747 <key>Type</key> 6265 <key>Type</key>
5748 <string>F32</string> 6266 <string>F32</string>
5749 <key>Value</key> 6267 <key>Value</key>
5750 <real>0.5</real> 6268 <real>0.5</real>
5751 </map> 6269 </map>
5752 <key>RenderUIInSnapshot</key> 6270 <key>RenderUIInSnapshot</key>
5753 <map> 6271 <map>
5754 <key>Comment</key> 6272 <key>Comment</key>
5755 <string>Display user interface in snapshot</string> 6273 <string>Display user interface in snapshot</string>
5756 <key>Persist</key> 6274 <key>Persist</key>
5757 <integer>1</integer> 6275 <integer>1</integer>
5758 <key>Type</key> 6276 <key>Type</key>
5759 <string>Boolean</string> 6277 <string>Boolean</string>
5760 <key>Value</key> 6278 <key>Value</key>
5761 <integer>0</integer> 6279 <integer>0</integer>
5762 </map> 6280 </map>
5763 <key>RenderUseCleverUI</key> 6281 <key>RenderUnloadedAvatar</key>
5764 <map> 6282 <map>
5765 <key>Comment</key> 6283 <key>Comment</key>
5766 <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain on apple.</string> 6284 <string>Show avatars which haven't finished loading</string>
5767 <key>Persist</key> 6285 <key>Persist</key>
5768 <integer>1</integer> 6286 <integer>1</integer>
5769 <key>Type</key> 6287 <key>Type</key>
5770 <string>Boolean</string> 6288 <string>Boolean</string>
5771 <key>Value</key> 6289 <key>Value</key>
5772 <integer>1</integer> 6290 <integer>0</integer>
5773 </map> 6291 </map>
5774 <key>RenderUseFarClip</key>
5775 <map>
5776 <key>Comment</key>
5777 <string>If false, frustum culling will ignore far clip plane.</string>
5778 <key>Persist</key>
5779 <integer>1</integer>
5780 <key>Type</key>
5781 <string>Boolean</string>
5782 <key>Value</key>
5783 <integer>1</integer>
5784 </map>
5785 <key>RenderUseFBO</key> 6292 <key>RenderUseFBO</key>
5786 <map> 6293 <map>
5787 <key>Comment</key> 6294 <key>Comment</key>
5788 <string>Whether we want to use GL_EXT_framebuffer_objects.</string> 6295 <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
5789 <key>Persist</key> 6296 <key>Persist</key>
5790 <integer>1</integer> 6297 <integer>1</integer>
5791 <key>Type</key> 6298 <key>Type</key>
5792 <string>Boolean</string> 6299 <string>Boolean</string>
5793 <key>Value</key> 6300 <key>Value</key>
5794 <integer>0</integer> 6301 <integer>0</integer>
5795 </map> 6302 </map>
6303 <key>RenderUseFarClip</key>
6304 <map>
6305 <key>Comment</key>
6306 <string>If false, frustum culling will ignore far clip plane.</string>
6307 <key>Persist</key>
6308 <integer>1</integer>
6309 <key>Type</key>
6310 <string>Boolean</string>
6311 <key>Value</key>
6312 <integer>1</integer>
6313 </map>
5796 <key>RenderUseImpostors</key> 6314 <key>RenderUseImpostors</key>
5797 <map> 6315 <map>
5798 <key>Comment</key> 6316 <key>Comment</key>
5799 <string>Whether we want to use impostors for far away avatars.</string> 6317 <string>Whether we want to use impostors for far away avatars.</string>
5800 <key>Persist</key> 6318 <key>Persist</key>
5801 <integer>1</integer> 6319 <integer>1</integer>
5802 <key>Type</key> 6320 <key>Type</key>
5803 <string>Boolean</string> 6321 <string>Boolean</string>
5804 <key>Value</key> 6322 <key>Value</key>
5805 <integer>1</integer> 6323 <integer>1</integer>
5806 </map> 6324 </map>
5807 <key>RenderUseShaderLOD</key> 6325 <key>RenderUseShaderLOD</key>
5808 <map> 6326 <map>
5809 <key>Comment</key> 6327 <key>Comment</key>
5810 <string>Whether we want to have different shaders for LOD</string> 6328 <string>Whether we want to have different shaders for LOD</string>
5811 <key>Persist</key> 6329 <key>Persist</key>
5812 <integer>1</integer> 6330 <integer>1</integer>
5813 <key>Type</key> 6331 <key>Type</key>
5814 <string>Boolean</string> 6332 <string>Boolean</string>
5815 <key>Value</key> 6333 <key>Value</key>
5816 <integer>1</integer> 6334 <integer>1</integer>
5817 </map> 6335 </map>
5818 <key>RenderUseShaderNearParticles</key> 6336 <key>RenderUseShaderNearParticles</key>
5819 <map> 6337 <map>
5820 <key>Comment</key> 6338 <key>Comment</key>
5821 <string>Whether we want to use shaders on near particles</string> 6339 <string>Whether we want to use shaders on near particles</string>
5822 <key>Persist</key> 6340 <key>Persist</key>
5823 <integer>1</integer> 6341 <integer>1</integer>
5824 <key>Type</key> 6342 <key>Type</key>
5825 <string>Boolean</string> 6343 <string>Boolean</string>
5826 <key>Value</key> 6344 <key>Value</key>
5827 <integer>0</integer> 6345 <integer>0</integer>
5828 </map> 6346 </map>
5829 <key>RenderShaderParticleThreshold</key>
5830 <map>
5831 <key>Comment</key>
5832 <string>Fraction of draw distance to not use shader on particles</string>
5833 <key>Persist</key>
5834 <integer>1</integer>
5835 <key>Type</key>
5836 <string>F32</string>
5837 <key>Value</key>
5838 <real>0.25</real>
5839 </map>
5840 <key>RenderVBOEnable</key> 6347 <key>RenderVBOEnable</key>
5841 <map> 6348 <map>
5842 <key>Comment</key> 6349 <key>Comment</key>
5843 <string>Use GL Vertex Buffer Objects</string> 6350 <string>Use GL Vertex Buffer Objects</string>
5844 <key>Persist</key> 6351 <key>Persist</key>
5845 <integer>1</integer> 6352 <integer>1</integer>
5846 <key>Type</key> 6353 <key>Type</key>
5847 <string>Boolean</string> 6354 <string>Boolean</string>
5848 <key>Value</key> 6355 <key>Value</key>
5849 <integer>1</integer> 6356 <integer>1</integer>
5850 </map> 6357 </map>
5851 <key>RenderVolumeLODFactor</key> 6358 <key>RenderVolumeLODFactor</key>
5852 <map> 6359 <map>
5853 <key>Comment</key> 6360 <key>Comment</key>
5854 <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string> 6361 <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
5855 <key>Persist</key> 6362 <key>Persist</key>
5856 <integer>1</integer> 6363 <integer>1</integer>
5857 <key>Type</key> 6364 <key>Type</key>
5858 <string>F32</string> 6365 <string>F32</string>
5859 <key>Value</key> 6366 <key>Value</key>
5860 <real>1</real> 6367 <real>1.0</real>
5861 </map> 6368 </map>
5862 <key>RenderWater</key> 6369 <key>RenderWater</key>
5863 <map> 6370 <map>
5864 <key>Comment</key> 6371 <key>Comment</key>
5865 <string>Display water</string> 6372 <string>Display water</string>
5866 <key>Persist</key> 6373 <key>Persist</key>
5867 <integer>1</integer> 6374 <integer>1</integer>
5868 <key>Type</key> 6375 <key>Type</key>
5869 <string>Boolean</string> 6376 <string>Boolean</string>
5870 <key>Value</key> 6377 <key>Value</key>
5871 <integer>1</integer> 6378 <integer>1</integer>
5872 </map> 6379 </map>
5873 <key>RenderWaterMipNormal</key> 6380 <key>RenderWaterMipNormal</key>
5874 <map> 6381 <map>
5875 <key>Comment</key> 6382 <key>Comment</key>
5876 <string>Use mip maps for water normal map.</string> 6383 <string>Use mip maps for water normal map.</string>
5877 <key>Persist</key> 6384 <key>Persist</key>
5878 <integer>1</integer> 6385 <integer>1</integer>
5879 <key>Type</key> 6386 <key>Type</key>
5880 <string>Boolean</string> 6387 <string>Boolean</string>
5881 <key>Value</key> 6388 <key>Value</key>
5882 <integer>1</integer> 6389 <integer>1</integer>
5883 </map> 6390 </map>
5884 <key>RenderWaterReflections</key>
5885 <map>
5886 <key>Comment</key>
5887 <string>Reflect the environment in the water.</string>
5888 <key>Persist</key>
5889 <integer>1</integer>
5890 <key>Type</key>
5891 <string>Boolean</string>
5892 <key>Value</key>
5893 <integer>0</integer>
5894 </map>
5895 <key>RenderWaterRefResolution</key> 6391 <key>RenderWaterRefResolution</key>
5896 <map> 6392 <map>
5897 <key>Comment</key> 6393 <key>Comment</key>
5898 <string>Water planar reflection resolution.</string> 6394 <string>Water planar reflection resolution.</string>
5899 <key>Persist</key> 6395 <key>Persist</key>
5900 <integer>1</integer> 6396 <integer>1</integer>
5901 <key>Type</key> 6397 <key>Type</key>
5902 <string>S32</string> 6398 <string>S32</string>
5903 <key>Value</key> 6399 <key>Value</key>
5904 <integer>512</integer> 6400 <integer>512</integer>
5905 </map> 6401 </map>
6402 <key>RenderWaterReflections</key>
6403 <map>
6404 <key>Comment</key>
6405 <string>Reflect the environment in the water.</string>
6406 <key>Persist</key>
6407 <integer>1</integer>
6408 <key>Type</key>
6409 <string>Boolean</string>
6410 <key>Value</key>
6411 <integer>0</integer>
6412 </map>
5906 <key>RotateRight</key> 6413 <key>RotateRight</key>
5907 <map> 6414 <map>
5908 <key>Comment</key> 6415 <key>Comment</key>
5909 <string>Make the agent rotate to its right.</string> 6416 <string>Make the agent rotate to its right.</string>
5910 <key>Persist</key> 6417 <key>Persist</key>
5911 <integer>1</integer> 6418 <integer>1</integer>
5912 <key>Type</key> 6419 <key>Type</key>
5913 <string>Boolean</string> 6420 <string>Boolean</string>
5914 <key>Value</key> 6421 <key>Value</key>
5915 <integer>0</integer> 6422 <integer>0</integer>
5916 </map> 6423 </map>
5917 <key>RotationStep</key> 6424 <key>RotationStep</key>
5918 <map> 6425 <map>
5919 <key>Comment</key> 6426 <key>Comment</key>
5920 <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string> 6427 <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
5921 <key>Persist</key> 6428 <key>Persist</key>
5922 <integer>1</integer> 6429 <integer>1</integer>
5923 <key>Type</key> 6430 <key>Type</key>
5924 <string>F32</string> 6431 <string>F32</string>
5925 <key>Value</key> 6432 <key>Value</key>
5926 <real>1</real> 6433 <real>1.0</real>
5927 </map> 6434 </map>
5928 <key>RunBtnState</key> 6435 <key>RunBtnState</key>
5929 <map> 6436 <map>
5930 <key>Comment</key> 6437 <key>Comment</key>
5931 <string /> 6438 <string />
5932 <key>Persist</key> 6439 <key>Persist</key>
5933 <integer>0</integer> 6440 <integer>0</integer>
5934 <key>Type</key> 6441 <key>Type</key>
5935 <string>Boolean</string> 6442 <string>Boolean</string>
5936 <key>Value</key> 6443 <key>Value</key>
5937 <integer>0</integer> 6444 <integer>0</integer>
5938 </map> 6445 </map>
5939 <key>RunMultipleThreads</key> 6446 <key>RunMultipleThreads</key>
5940 <map> 6447 <map>
5941 <key>Comment</key> 6448 <key>Comment</key>
5942 <string>If TRUE keep background threads active during render</string> 6449 <string>If TRUE keep background threads active during render</string>
5943 <key>Persist</key> 6450 <key>Persist</key>
5944 <integer>1</integer> 6451 <integer>1</integer>
5945 <key>Type</key> 6452 <key>Type</key>
5946 <string>Boolean</string> 6453 <string>Boolean</string>
5947 <key>Value</key> 6454 <key>Value</key>
5948 <integer>0</integer> 6455 <integer>0</integer>
5949 </map> 6456 </map>
5950 <key>SafeMode</key> 6457 <key>SafeMode</key>
5951 <map> 6458 <map>
5952 <key>Comment</key> 6459 <key>Comment</key>
5953 <string>Reset preferences, run in safe mode.</string> 6460 <string>Reset preferences, run in safe mode.</string>
5954 <key>Persist</key> 6461 <key>Persist</key>
5955 <integer>1</integer> 6462 <integer>1</integer>
5956 <key>Type</key> 6463 <key>Type</key>
5957 <string>Boolean</string> 6464 <string>Boolean</string>
5958 <key>Value</key> 6465 <key>Value</key>
5959 <integer>0</integer> 6466 <integer>0</integer>
5960 </map> 6467 </map>
5961 <key>SaveMinidump</key> 6468 <key>SaveMinidump</key>
5962 <map> 6469 <map>
5963 <key>Comment</key> 6470 <key>Comment</key>
5964 <string>Save minidump for developer debugging on crash</string> 6471 <string>Save minidump for developer debugging on crash</string>
5965 <key>Persist</key> 6472 <key>Persist</key>
5966 <integer>1</integer> 6473 <integer>1</integer>
5967 <key>Type</key> 6474 <key>Type</key>
5968 <string>Boolean</string> 6475 <string>Boolean</string>
5969 <key>Value</key> 6476 <key>Value</key>
5970 <integer>1</integer> 6477 <integer>1</integer>
5971 </map> 6478 </map>
5972 <key>ScaleShowAxes</key> 6479 <key>ScaleShowAxes</key>
5973 <map> 6480 <map>
5974 <key>Comment</key> 6481 <key>Comment</key>
5975 <string>Show indicator of selected scale axis when scaling</string> 6482 <string>Show indicator of selected scale axis when scaling</string>
5976 <key>Persist</key> 6483 <key>Persist</key>
5977 <integer>1</integer> 6484 <integer>1</integer>
5978 <key>Type</key> 6485 <key>Type</key>
5979 <string>Boolean</string> 6486 <string>Boolean</string>
5980 <key>Value</key> 6487 <key>Value</key>
5981 <integer>0</integer> 6488 <integer>0</integer>
5982 </map> 6489 </map>
5983 <key>ScaleStretchTextures</key> 6490 <key>ScaleStretchTextures</key>
5984 <map> 6491 <map>
5985 <key>Comment</key> 6492 <key>Comment</key>
5986 <string>Stretch textures along with object when scaling</string> 6493 <string>Stretch textures along with object when scaling</string>
5987 <key>Persist</key> 6494 <key>Persist</key>
5988 <integer>1</integer> 6495 <integer>1</integer>
5989 <key>Type</key> 6496 <key>Type</key>
5990 <string>Boolean</string> 6497 <string>Boolean</string>
5991 <key>Value</key> 6498 <key>Value</key>
5992 <integer>1</integer> 6499 <integer>1</integer>
5993 </map> 6500 </map>
5994 <key>ScaleUniform</key> 6501 <key>ScaleUniform</key>
5995 <map> 6502 <map>
5996 <key>Comment</key> 6503 <key>Comment</key>
5997 <string>Scale selected objects evenly about center of selection</string> 6504 <string>Scale selected objects evenly about center of selection</string>
5998 <key>Persist</key> 6505 <key>Persist</key>
5999 <integer>1</integer> 6506 <integer>1</integer>
6000 <key>Type</key> 6507 <key>Type</key>
6001 <string>Boolean</string> 6508 <string>Boolean</string>
6002 <key>Value</key> 6509 <key>Value</key>
6003 <integer>0</integer> 6510 <integer>0</integer>
6004 </map> 6511 </map>
6005 <key>ScriptErrorColor</key> 6512 <key>ScriptErrorColor</key>
6006 <map> 6513 <map>
6007 <key>Comment</key> 6514 <key>Comment</key>
6008 <string>Color of script error messages</string> 6515 <string>Color of script error messages</string>
6009 <key>Persist</key> 6516 <key>Persist</key>
6010 <integer>1</integer> 6517 <integer>1</integer>
6011 <key>Type</key> 6518 <key>Type</key>
6012 <string>Color4</string> 6519 <string>Color4</string>
6013 <key>Value</key> 6520 <key>Value</key>
6014 <array> 6521 <array>
6015 <real>0.8235294117</real> 6522 <real>0.8235294117</real>
6016 <real>0.2745098039</real> 6523 <real>0.2745098039</real>
6017 <real>0.2745098039</real> 6524 <real>0.2745098039</real>
6018 <real>1</real> 6525 <real>1.0</real>
6019 </array> 6526 </array>
6020 </map> 6527 </map>
6021 <key>ScriptErrorsAsChat</key> 6528 <key>ScriptErrorsAsChat</key>
6022 <map> 6529 <map>
6023 <key>Comment</key> 6530 <key>Comment</key>
6024 <string>Display script errors and warning in chat history</string> 6531 <string>Display script errors and warning in chat history</string>
6025 <key>Persist</key> 6532 <key>Persist</key>
6026 <integer>1</integer> 6533 <integer>1</integer>
6027 <key>Type</key> 6534 <key>Type</key>
6028 <string>Boolean</string> 6535 <string>Boolean</string>
6029 <key>Value</key> 6536 <key>Value</key>
6030 <integer>0</integer> 6537 <integer>0</integer>
6031 </map> 6538 </map>
6032 <key>ScriptHelpFollowsCursor</key> 6539 <key>ScriptHelpFollowsCursor</key>
6033 <map> 6540 <map>
6034 <key>Comment</key> 6541 <key>Comment</key>
6035 <string>Scripting help window updates contents based on script editor contents under text cursor</string> 6542 <string>Scripting help window updates contents based on script editor contents under text cursor</string>
6036 <key>Persist</key> 6543 <key>Persist</key>
6037 <integer>1</integer> 6544 <integer>1</integer>
6038 <key>Type</key> 6545 <key>Type</key>
6039 <string>Boolean</string> 6546 <string>Boolean</string>
6040 <key>Value</key> 6547 <key>Value</key>
6041 <integer>0</integer> 6548 <integer>0</integer>
6042 </map> 6549 </map>
6043 <key>SearchURLDefault</key> 6550 <key>SearchURLDefault</key>
6044 <map> 6551 <map>
6045 <key>Comment</key> 6552 <key>Comment</key>
6046 <string>URL to load for empty searches</string> 6553 <string>URL to load for empty searches</string>
6047 <key>Persist</key> 6554 <key>Persist</key>
6048 <integer>1</integer> 6555 <integer>1</integer>
6049 <key>Type</key> 6556 <key>Type</key>
6050 <string>String</string> 6557 <string>String</string>
6051 <key>Value</key> 6558 <key>Value</key>
6052 <string>http://secondlife.com/app/search/index.php?</string> 6559 <string>http://secondlife.com/app/search/index.php?</string>
6053 </map> 6560 </map>
6054 <key>SearchURLQuery</key> 6561 <key>SearchURLQuery</key>
6055 <map> 6562 <map>
6056 <key>Comment</key> 6563 <key>Comment</key>
6057 <string>URL to use for searches</string> 6564 <string>URL to use for searches</string>
6058 <key>Persist</key> 6565 <key>Persist</key>
6059 <integer>1</integer> 6566 <integer>1</integer>
6060 <key>Type</key> 6567 <key>Type</key>
6061 <string>String</string> 6568 <string>String</string>
6062 <key>Value</key> 6569 <key>Value</key>
6063 <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string> 6570 <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
6064 </map> 6571 </map>
6065 <key>SearchURLSuffix2</key> 6572 <key>SearchURLSuffix2</key>
6066 <map> 6573 <map>
6067 <key>Comment</key> 6574 <key>Comment</key>
6068 <string>Parameters added to end of search queries</string> 6575 <string>Parameters added to end of search queries</string>
6069 <key>Persist</key> 6576 <key>Persist</key>
6070 <integer>1</integer> 6577 <integer>1</integer>
6071 <key>Type</key> 6578 <key>Type</key>
6072 <string>String</string> 6579 <string>String</string>
6073 <key>Value</key> 6580 <key>Value</key>
6074 <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string> 6581 <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
6075 </map> 6582 </map>
6076 <key>SelectMovableOnly</key> 6583 <key>SelectMovableOnly</key>
6077 <map> 6584 <map>
6078 <key>Comment</key> 6585 <key>Comment</key>
6079 <string>Select only objects you can move</string> 6586 <string>Select only objects you can move</string>
6080 <key>Persist</key> 6587 <key>Persist</key>
6081 <integer>1</integer> 6588 <integer>1</integer>
6082 <key>Type</key> 6589 <key>Type</key>
6083 <string>Boolean</string> 6590 <string>Boolean</string>
6084 <key>Value</key> 6591 <key>Value</key>
6085 <integer>0</integer> 6592 <integer>0</integer>
6086 </map> 6593 </map>
6087 <key>SelectOwnedOnly</key> 6594 <key>SelectOwnedOnly</key>
6088 <map> 6595 <map>
6089 <key>Comment</key> 6596 <key>Comment</key>
6090 <string>Select only objects you own</string> 6597 <string>Select only objects you own</string>
6091 <key>Persist</key> 6598 <key>Persist</key>
6092 <integer>1</integer> 6599 <integer>1</integer>
6093 <key>Type</key> 6600 <key>Type</key>
6094 <string>Boolean</string> 6601 <string>Boolean</string>
6095 <key>Value</key> 6602 <key>Value</key>
6096 <integer>0</integer> 6603 <integer>0</integer>
6097 </map> 6604 </map>
6098 <key>SelectionHighlightAlpha</key> 6605 <key>SelectionHighlightAlpha</key>
6099 <map> 6606 <map>
6100 <key>Comment</key> 6607 <key>Comment</key>
6101 <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string> 6608 <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
6102 <key>Persist</key> 6609 <key>Persist</key>
6103 <integer>1</integer> 6610 <integer>1</integer>
6104 <key>Type</key> 6611 <key>Type</key>
6105 <string>F32</string> 6612 <string>F32</string>
6106 <key>Value</key> 6613 <key>Value</key>
6107 <real>0.4000000059604644775390625</real> 6614 <real>0.40000000596</real>
6108 </map> 6615 </map>
6109 <key>SelectionHighlightAlphaTest</key> 6616 <key>SelectionHighlightAlphaTest</key>
6110 <map> 6617 <map>
6111 <key>Comment</key> 6618 <key>Comment</key>
6112 <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string> 6619 <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
6113 <key>Persist</key> 6620 <key>Persist</key>
6114 <integer>1</integer> 6621 <integer>1</integer>
6115 <key>Type</key> 6622 <key>Type</key>
6116 <string>F32</string> 6623 <string>F32</string>
6117 <key>Value</key> 6624 <key>Value</key>
6118 <real>0.1</real> 6625 <real>0.1</real>
6119 </map> 6626 </map>
6120 <key>SelectionHighlightThickness</key> 6627 <key>SelectionHighlightThickness</key>
6121 <map> 6628 <map>
6122 <key>Comment</key> 6629 <key>Comment</key>
6123 <string>Thickness of selection highlight line (fraction of view distance)</string> 6630 <string>Thickness of selection highlight line (fraction of view distance)</string>
6124 <key>Persist</key> 6631 <key>Persist</key>
6125 <integer>1</integer> 6632 <integer>1</integer>
6126 <key>Type</key> 6633 <key>Type</key>
6127 <string>F32</string> 6634 <string>F32</string>
6128 <key>Value</key> 6635 <key>Value</key>
6129 <real>0.009999999776482582092285156</real> 6636 <real>0.00999999977648</real>
6130 </map> 6637 </map>
6131 <key>SelectionHighlightUAnim</key> 6638 <key>SelectionHighlightUAnim</key>
6132 <map> 6639 <map>
6133 <key>Comment</key> 6640 <key>Comment</key>
6134 <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string> 6641 <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
6135 <key>Persist</key> 6642 <key>Persist</key>
6136 <integer>1</integer> 6643 <integer>1</integer>
6137 <key>Type</key> 6644 <key>Type</key>
6138 <string>F32</string> 6645 <string>F32</string>
6139 <key>Value</key> 6646 <key>Value</key>
6140 <real>0</real> 6647 <real>0.0</real>
6141 </map> 6648 </map>
6142 <key>SelectionHighlightUScale</key> 6649 <key>SelectionHighlightUScale</key>
6143 <map> 6650 <map>
6144 <key>Comment</key> 6651 <key>Comment</key>
6145 <string>Scale of texture display on selection highlight line (fraction of texture size)</string> 6652 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6146 <key>Persist</key> 6653 <key>Persist</key>
6147 <integer>1</integer> 6654 <integer>1</integer>
6148 <key>Type</key> 6655 <key>Type</key>
6149 <string>F32</string> 6656 <string>F32</string>
6150 <key>Value</key> 6657 <key>Value</key>
6151 <real>0.1</real> 6658 <real>0.1</real>
6152 </map> 6659 </map>
6153 <key>SelectionHighlightVAnim</key> 6660 <key>SelectionHighlightVAnim</key>
6154 <map> 6661 <map>
6155 <key>Comment</key> 6662 <key>Comment</key>
6156 <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string> 6663 <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
6157 <key>Persist</key> 6664 <key>Persist</key>
6158 <integer>1</integer> 6665 <integer>1</integer>
6159 <key>Type</key> 6666 <key>Type</key>
6160 <string>F32</string> 6667 <string>F32</string>
6161 <key>Value</key> 6668 <key>Value</key>
6162 <real>0.5</real> 6669 <real>0.5</real>
6163 </map> 6670 </map>
6164 <key>SelectionHighlightVScale</key> 6671 <key>SelectionHighlightVScale</key>
6165 <map> 6672 <map>
6166 <key>Comment</key> 6673 <key>Comment</key>
6167 <string>Scale of texture display on selection highlight line (fraction of texture size)</string> 6674 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6168 <key>Persist</key> 6675 <key>Persist</key>
6169 <integer>1</integer> 6676 <integer>1</integer>
6170 <key>Type</key> 6677 <key>Type</key>
6171 <string>F32</string> 6678 <string>F32</string>
6172 <key>Value</key> 6679 <key>Value</key>
6173 <real>1</real> 6680 <real>1.0</real>
6174 </map> 6681 </map>
6175 <key>ServerChoice</key> 6682 <key>ServerChoice</key>
6176 <map> 6683 <map>
6177 <key>Comment</key> 6684 <key>Comment</key>
6178 <string>[DO NOT MODIFY] Controls which grid you connect to</string> 6685 <string>[DO NOT MODIFY] Controls which grid you connect to</string>
6179 <key>Persist</key> 6686 <key>Persist</key>
6180 <integer>1</integer> 6687 <integer>1</integer>
6181 <key>Type</key> 6688 <key>Type</key>
6182 <string>S32</string> 6689 <string>S32</string>
6183 <key>Value</key> 6690 <key>Value</key>
6184 <integer>0</integer> 6691 <integer>0</integer>
6185 </map> 6692 </map>
6186 <key>ShowAllObjectHoverTip</key>
6187 <map>
6188 <key>Comment</key>
6189 <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
6190 <key>Persist</key>
6191 <integer>1</integer>
6192 <key>Type</key>
6193 <string>Boolean</string>
6194 <key>Value</key>
6195 <integer>0</integer>
6196 </map>
6197 <key>ShowActiveSpeakers</key> 6693 <key>ShowActiveSpeakers</key>
6198 <map> 6694 <map>
6199 <key>Comment</key> 6695 <key>Comment</key>
6200 <string>Display active speakers list on login</string> 6696 <string>Display active speakers list on login</string>
6201 <key>Persist</key> 6697 <key>Persist</key>
6202 <integer>1</integer> 6698 <integer>1</integer>
6203 <key>Type</key> 6699 <key>Type</key>
6204 <string>Boolean</string> 6700 <string>Boolean</string>
6205 <key>Value</key> 6701 <key>Value</key>
6206 <integer>0</integer> 6702 <integer>0</integer>
6207 </map> 6703 </map>
6704 <key>ShowAllObjectHoverTip</key>
6705 <map>
6706 <key>Comment</key>
6707 <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
6708 <key>Persist</key>
6709 <integer>1</integer>
6710 <key>Type</key>
6711 <string>Boolean</string>
6712 <key>Value</key>
6713 <integer>0</integer>
6714 </map>
6208 <key>ShowAxes</key> 6715 <key>ShowAxes</key>
6209 <map> 6716 <map>
6210 <key>Comment</key> 6717 <key>Comment</key>
6211 <string>Render coordinate frame at your position</string> 6718 <string>Render coordinate frame at your position</string>
6212 <key>Persist</key> 6719 <key>Persist</key>
6213 <integer>1</integer> 6720 <integer>1</integer>
6214 <key>Type</key> 6721 <key>Type</key>
6215 <string>Boolean</string> 6722 <string>Boolean</string>
6216 <key>Value</key> 6723 <key>Value</key>
6217 <integer>0</integer> 6724 <integer>0</integer>
6218 </map> 6725 </map>
6219 <key>ShowCameraControls</key> 6726 <key>ShowCameraControls</key>
6220 <map> 6727 <map>
6221 <key>Comment</key> 6728 <key>Comment</key>
6222 <string>Display camera controls on login</string> 6729 <string>Display camera controls on login</string>
6223 <key>Persist</key> 6730 <key>Persist</key>
6224 <integer>1</integer> 6731 <integer>1</integer>
6225 <key>Type</key> 6732 <key>Type</key>
6226 <string>Boolean</string> 6733 <string>Boolean</string>
6227 <key>Value</key> 6734 <key>Value</key>
6228 <integer>1</integer> 6735 <integer>1</integer>
6229 </map> 6736 </map>
6230 <key>ShowChatHistory</key> 6737 <key>ShowChatHistory</key>
6231 <map> 6738 <map>
6232 <key>Comment</key> 6739 <key>Comment</key>
6233 <string /> 6740 <string />
6234 <key>Persist</key> 6741 <key>Persist</key>
6235 <integer>0</integer> 6742 <integer>0</integer>
6236 <key>Type</key> 6743 <key>Type</key>
6237 <string>Boolean</string> 6744 <string>Boolean</string>
6238 <key>Value</key> 6745 <key>Value</key>
6239 <integer>0</integer> 6746 <integer>0</integer>
6240 </map> 6747 </map>
6241 <key>ShowCommunicate</key> 6748 <key>ShowCommunicate</key>
6242 <map> 6749 <map>
6243 <key>Comment</key> 6750 <key>Comment</key>
6244 <string /> 6751 <string />
6245 <key>Persist</key> 6752 <key>Persist</key>
6246 <integer>0</integer> 6753 <integer>0</integer>
6247 <key>Type</key> 6754 <key>Type</key>
6248 <string>Boolean</string> 6755 <string>Boolean</string>
6249 <key>Value</key> 6756 <key>Value</key>
6250 <integer>0</integer> 6757 <integer>0</integer>
6251 </map> 6758 </map>
6252 <key>ShowConsoleWindow</key> 6759 <key>ShowConsoleWindow</key>
6253 <map> 6760 <map>
6254 <key>Comment</key> 6761 <key>Comment</key>
6255 <string>Show log in separate OS window</string> 6762 <string>Show log in separate OS window</string>
6256 <key>Persist</key> 6763 <key>Persist</key>
6257 <integer>1</integer> 6764 <integer>1</integer>
6258 <key>Type</key> 6765 <key>Type</key>
6259 <string>Boolean</string> 6766 <string>Boolean</string>
6260 <key>Value</key> 6767 <key>Value</key>
6261 <integer>0</integer> 6768 <integer>0</integer>
6262 </map> 6769 </map>
6263 <key>ShowCrosshairs</key> 6770 <key>ShowCrosshairs</key>
6264 <map> 6771 <map>
6265 <key>Comment</key> 6772 <key>Comment</key>
6266 <string>Display crosshairs when in mouselook mode</string> 6773 <string>Display crosshairs when in mouselook mode</string>
6267 <key>Persist</key> 6774 <key>Persist</key>
6268 <integer>1</integer> 6775 <integer>1</integer>
6269 <key>Type</key> 6776 <key>Type</key>
6270 <string>Boolean</string> 6777 <string>Boolean</string>
6271 <key>Value</key> 6778 <key>Value</key>
6272 <integer>1</integer> 6779 <integer>1</integer>
6273 </map> 6780 </map>
6274 <key>ShowDebugConsole</key> 6781 <key>ShowDebugConsole</key>
6275 <map> 6782 <map>
6276 <key>Comment</key> 6783 <key>Comment</key>
6277 <string>Show log in SL window</string> 6784 <string>Show log in SL window</string>
6278 <key>Persist</key> 6785 <key>Persist</key>
6279 <integer>1</integer> 6786 <integer>1</integer>
6280 <key>Type</key> 6787 <key>Type</key>
6281 <string>Boolean</string> 6788 <string>Boolean</string>
6282 <key>Value</key> 6789 <key>Value</key>
6283 <integer>0</integer> 6790 <integer>0</integer>
6284 </map> 6791 </map>
6285 <key>ShowDebugStats</key> 6792 <key>ShowDebugStats</key>
6286 <map> 6793 <map>
6287 <key>Comment</key> 6794 <key>Comment</key>
6288 <string>Show performance stats display</string> 6795 <string>Show performance stats display</string>
6289 <key>Persist</key> 6796 <key>Persist</key>
6290 <integer>1</integer> 6797 <integer>1</integer>
6291 <key>Type</key> 6798 <key>Type</key>
6292 <string>Boolean</string> 6799 <string>Boolean</string>
6293 <key>Value</key> 6800 <key>Value</key>
6294 <integer>0</integer> 6801 <integer>0</integer>
6295 </map> 6802 </map>
6296 <key>ShowDepthBuffer</key> 6803 <key>ShowDepthBuffer</key>
6297 <map> 6804 <map>
6298 <key>Comment</key> 6805 <key>Comment</key>
6299 <string>Show depth buffer contents</string> 6806 <string>Show depth buffer contents</string>
6300 <key>Persist</key> 6807 <key>Persist</key>
6301 <integer>1</integer> 6808 <integer>1</integer>
6302 <key>Type</key> 6809 <key>Type</key>
6303 <string>Boolean</string> 6810 <string>Boolean</string>
6304 <key>Value</key> 6811 <key>Value</key>
6305 <integer>0</integer> 6812 <integer>0</integer>
6306 </map> 6813 </map>
6307 <key>ShowDirectory</key> 6814 <key>ShowDirectory</key>
6308 <map> 6815 <map>
6309 <key>Comment</key> 6816 <key>Comment</key>
6310 <string /> 6817 <string />
6311 <key>Persist</key> 6818 <key>Persist</key>
6312 <integer>0</integer> 6819 <integer>0</integer>
6313 <key>Type</key> 6820 <key>Type</key>
6314 <string>Boolean</string> 6821 <string>Boolean</string>
6315 <key>Value</key> 6822 <key>Value</key>
6316 <integer>0</integer> 6823 <integer>0</integer>
6317 </map> 6824 </map>
6318 <key>ShowEmptyFoldersWhenSearching</key> 6825 <key>ShowEmptyFoldersWhenSearching</key>
6319 <map> 6826 <map>
6320 <key>Comment</key> 6827 <key>Comment</key>
6321 <string>Shows folders that do not have any visible contents when applying a filter to inventory</string> 6828 <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
6322 <key>Persist</key> 6829 <key>Persist</key>
6323 <integer>1</integer> 6830 <integer>1</integer>
6324 <key>Type</key> 6831 <key>Type</key>
6325 <string>Boolean</string> 6832 <string>Boolean</string>
6326 <key>Value</key> 6833 <key>Value</key>
6327 <integer>0</integer> 6834 <integer>0</integer>
6328 </map> 6835 </map>
6329 <key>ShowHoverTips</key> 6836 <key>ShowHoverTips</key>
6330 <map> 6837 <map>
6331 <key>Comment</key> 6838 <key>Comment</key>
6332 <string>Show descriptive tooltip when mouse hovers over items in world</string> 6839 <string>Show descriptive tooltip when mouse hovers over items in world</string>
6333 <key>Persist</key> 6840 <key>Persist</key>
6334 <integer>1</integer> 6841 <integer>1</integer>
6335 <key>Type</key> 6842 <key>Type</key>
6336 <string>Boolean</string> 6843 <string>Boolean</string>
6337 <key>Value</key> 6844 <key>Value</key>
6338 <integer>1</integer> 6845 <integer>1</integer>
6339 </map> 6846 </map>
6340 <key>ShowInventory</key> 6847 <key>ShowInventory</key>
6341 <map> 6848 <map>
6342 <key>Comment</key> 6849 <key>Comment</key>
6343 <string>Open inventory window on login</string> 6850 <string>Open inventory window on login</string>
6344 <key>Persist</key> 6851 <key>Persist</key>
6345 <integer>1</integer> 6852 <integer>1</integer>
6346 <key>Type</key> 6853 <key>Type</key>
6347 <string>Boolean</string> 6854 <string>Boolean</string>
6348 <key>Value</key> 6855 <key>Value</key>
6349 <integer>0</integer> 6856 <integer>0</integer>
6350 </map> 6857 </map>
6351 <key>ShowLandHoverTip</key> 6858 <key>ShowLandHoverTip</key>
6352 <map> 6859 <map>
6353 <key>Comment</key> 6860 <key>Comment</key>
6354 <string>Show descriptive tooltip when mouse hovers over land</string> 6861 <string>Show descriptive tooltip when mouse hovers over land</string>
6355 <key>Persist</key> 6862 <key>Persist</key>
6356 <integer>1</integer> 6863 <integer>1</integer>
6357 <key>Type</key> 6864 <key>Type</key>
6358 <string>Boolean</string> 6865 <string>Boolean</string>
6359 <key>Value</key> 6866 <key>Value</key>
6360 <integer>0</integer> 6867 <integer>0</integer>
6361 </map> 6868 </map>
6362 <key>ShowLeaders</key> 6869 <key>ShowLeaders</key>
6363 <map> 6870 <map>
6364 <key>Comment</key> 6871 <key>Comment</key>
6365 <string /> 6872 <string />
6366 <key>Persist</key> 6873 <key>Persist</key>
6367 <integer>0</integer> 6874 <integer>0</integer>
6368 <key>Type</key> 6875 <key>Type</key>
6369 <string>Boolean</string> 6876 <string>Boolean</string>
6370 <key>Value</key> 6877 <key>Value</key>
6371 <integer>0</integer> 6878 <integer>0</integer>
6372 </map> 6879 </map>
6373 <key>ShowMatureClassifieds</key> 6880 <key>ShowMatureClassifieds</key>
6374 <map> 6881 <map>
6375 <key>Comment</key> 6882 <key>Comment</key>
6376 <string>Display results of find classifieds that are flagged as mature</string> 6883 <string>Display results of find classifieds that are flagged as mature</string>
6377 <key>Persist</key> 6884 <key>Persist</key>
6378 <integer>1</integer> 6885 <integer>1</integer>
6379 <key>Type</key> 6886 <key>Type</key>
6380 <string>Boolean</string> 6887 <string>Boolean</string>
6381 <key>Value</key> 6888 <key>Value</key>
6382 <integer>0</integer> 6889 <integer>0</integer>
6383 </map> 6890 </map>
6384 <key>ShowMatureEvents</key> 6891 <key>ShowMatureEvents</key>
6385 <map> 6892 <map>
6386 <key>Comment</key> 6893 <key>Comment</key>
6387 <string>Display results of find events that are flagged as mature</string> 6894 <string>Display results of find events that are flagged as mature</string>
6388 <key>Persist</key> 6895 <key>Persist</key>
6389 <integer>1</integer> 6896 <integer>1</integer>
6390 <key>Type</key> 6897 <key>Type</key>
6391 <string>Boolean</string> 6898 <string>Boolean</string>
6392 <key>Value</key> 6899 <key>Value</key>
6393 <integer>0</integer> 6900 <integer>0</integer>
6394 </map> 6901 </map>
6395 <key>ShowMatureFindAll</key> 6902 <key>ShowMatureFindAll</key>
6396 <map> 6903 <map>
6397 <key>Comment</key> 6904 <key>Comment</key>
6398 <string>Display results of find all that are in mature sims</string> 6905 <string>Display results of find all that are in mature sims</string>
6399 <key>Persist</key> 6906 <key>Persist</key>
6400 <integer>1</integer> 6907 <integer>1</integer>
6401 <key>Type</key> 6908 <key>Type</key>
6402 <string>Boolean</string> 6909 <string>Boolean</string>
6403 <key>Value</key> 6910 <key>Value</key>
6404 <integer>0</integer> 6911 <integer>0</integer>
6405 </map> 6912 </map>
6406 <key>ShowMatureGroups</key> 6913 <key>ShowMatureGroups</key>
6407 <map> 6914 <map>
6408 <key>Comment</key> 6915 <key>Comment</key>
6409 <string>Display results of find groups that are in flagged as mature</string> 6916 <string>Display results of find groups that are in flagged as mature</string>
6410 <key>Persist</key> 6917 <key>Persist</key>
6411 <integer>1</integer> 6918 <integer>1</integer>
6412 <key>Type</key> 6919 <key>Type</key>
6413 <string>Boolean</string> 6920 <string>Boolean</string>
6414 <key>Value</key> 6921 <key>Value</key>
6415 <integer>1</integer> 6922 <integer>1</integer>
6416 </map> 6923 </map>
6417 <key>ShowMatureSims</key> 6924 <key>ShowMatureSims</key>
6418 <map> 6925 <map>
6419 <key>Comment</key> 6926 <key>Comment</key>
6420 <string>Display results of find places or find popular that are in mature sims</string> 6927 <string>Display results of find places or find popular that are in mature sims</string>
6421 <key>Persist</key> 6928 <key>Persist</key>
6422 <integer>1</integer> 6929 <integer>1</integer>
6423 <key>Type</key> 6930 <key>Type</key>
6424 <string>Boolean</string> 6931 <string>Boolean</string>
6425 <key>Value</key> 6932 <key>Value</key>
6426 <integer>0</integer> 6933 <integer>0</integer>
6427 </map> 6934 </map>
6428 <key>ShowMiniMap</key> 6935 <key>ShowMiniMap</key>
6429 <map> 6936 <map>
6430 <key>Comment</key> 6937 <key>Comment</key>
6431 <string>Display mini map on login</string> 6938 <string>Display mini map on login</string>
6432 <key>Persist</key> 6939 <key>Persist</key>
6433 <integer>1</integer> 6940 <integer>1</integer>
6434 <key>Type</key> 6941 <key>Type</key>
6435 <string>Boolean</string> 6942 <string>Boolean</string>
6436 <key>Value</key> 6943 <key>Value</key>
6437 <integer>1</integer> 6944 <integer>1</integer>
6438 </map> 6945 </map>
6439 <key>ShowMovementControls</key> 6946 <key>ShowMovementControls</key>
6440 <map> 6947 <map>
6441 <key>Comment</key> 6948 <key>Comment</key>
6442 <string>Display movement controls on login</string> 6949 <string>Display movement controls on login</string>
6443 <key>Persist</key> 6950 <key>Persist</key>
6444 <integer>1</integer> 6951 <integer>1</integer>
6445 <key>Type</key> 6952 <key>Type</key>
6446 <string>Boolean</string> 6953 <string>Boolean</string>
6447 <key>Value</key> 6954 <key>Value</key>
6448 <integer>1</integer> 6955 <integer>1</integer>
6449 </map> 6956 </map>
6450 <key>ShowNearClip</key> 6957 <key>ShowNearClip</key>
6451 <map> 6958 <map>
6452 <key>Comment</key> 6959 <key>Comment</key>
6453 <string /> 6960 <string />
6454 <key>Persist</key> 6961 <key>Persist</key>
6455 <integer>0</integer> 6962 <integer>0</integer>
6456 <key>Type</key> 6963 <key>Type</key>
6457 <string>Boolean</string> 6964 <string>Boolean</string>
6458 <key>Value</key> 6965 <key>Value</key>
6459 <integer>0</integer> 6966 <integer>0</integer>
6460 </map> 6967 </map>
6461 <key>ShowNewInventory</key> 6968 <key>ShowNewInventory</key>
6462 <map> 6969 <map>
6463 <key>Comment</key> 6970 <key>Comment</key>
6464 <string>Automatically views new notecards/textures/landmarks</string> 6971 <string>Automatically views new notecards/textures/landmarks</string>
6465 <key>Persist</key> 6972 <key>Persist</key>
6466 <integer>1</integer> 6973 <integer>1</integer>
6467 <key>Type</key> 6974 <key>Type</key>
6468 <string>Boolean</string> 6975 <string>Boolean</string>
6469 <key>Value</key> 6976 <key>Value</key>
6470 <integer>1</integer> 6977 <integer>1</integer>
6471 </map> 6978 </map>
6472 <key>ShowObjectUpdates</key> 6979 <key>ShowObjectUpdates</key>
6473 <map> 6980 <map>
6474 <key>Comment</key> 6981 <key>Comment</key>
6475 <string>Show when update messages are received for individual objects</string> 6982 <string>Show when update messages are received for individual objects</string>
6476 <key>Persist</key> 6983 <key>Persist</key>
6477 <integer>1</integer> 6984 <integer>1</integer>
6478 <key>Type</key> 6985 <key>Type</key>
6479 <string>Boolean</string> 6986 <string>Boolean</string>
6480 <key>Value</key> 6987 <key>Value</key>
6481 <integer>0</integer> 6988 <integer>0</integer>
6482 </map> 6989 </map>
6483 <key>ShowOverlayTitle</key> 6990 <key>ShowOverlayTitle</key>
6484 <map> 6991 <map>
6485 <key>Comment</key> 6992 <key>Comment</key>
6486 <string>Prints watermark text message on screen</string> 6993 <string>Prints watermark text message on screen</string>
6487 <key>Persist</key> 6994 <key>Persist</key>
6488 <integer>1</integer> 6995 <integer>1</integer>
6489 <key>Type</key> 6996 <key>Type</key>
6490 <string>Boolean</string> 6997 <string>Boolean</string>
6491 <key>Value</key> 6998 <key>Value</key>
6492 <integer>0</integer> 6999 <integer>0</integer>
6493 </map> 7000 </map>
6494 <key>ShowParcelOwners</key> 7001 <key>ShowParcelOwners</key>
6495 <map> 7002 <map>
6496 <key>Comment</key> 7003 <key>Comment</key>
6497 <string /> 7004 <string />
6498 <key>Persist</key> 7005 <key>Persist</key>
6499 <integer>0</integer> 7006 <integer>0</integer>
6500 <key>Type</key> 7007 <key>Type</key>
6501 <string>Boolean</string> 7008 <string>Boolean</string>
6502 <key>Value</key> 7009 <key>Value</key>
6503 <integer>0</integer> 7010 <integer>0</integer>
6504 </map> 7011 </map>
6505 <key>ShowPermissions</key> 7012 <key>ShowPermissions</key>
6506 <map> 7013 <map>
6507 <key>Comment</key> 7014 <key>Comment</key>
6508 <string /> 7015 <string />
6509 <key>Persist</key> 7016 <key>Persist</key>
6510 <integer>0</integer> 7017 <integer>0</integer>
6511 <key>Type</key> 7018 <key>Type</key>
6512 <string>Boolean</string> 7019 <string>Boolean</string>
6513 <key>Value</key> 7020 <key>Value</key>
6514 <integer>0</integer> 7021 <integer>0</integer>
6515 </map> 7022 </map>
6516 <key>ShowPropertyLines</key> 7023 <key>ShowPropertyLines</key>
6517 <map> 7024 <map>
6518 <key>Comment</key> 7025 <key>Comment</key>
6519 <string>Show line overlay demarking property boundaries</string> 7026 <string>Show line overlay demarking property boundaries</string>
6520 <key>Persist</key> 7027 <key>Persist</key>
6521 <integer>1</integer> 7028 <integer>1</integer>
6522 <key>Type</key> 7029 <key>Type</key>
6523 <string>Boolean</string> 7030 <string>Boolean</string>
6524 <key>Value</key> 7031 <key>Value</key>
6525 <integer>0</integer> 7032 <integer>0</integer>
6526 </map> 7033 </map>
6527 <key>ShowSearchBar</key> 7034 <key>ShowSearchBar</key>
6528 <map> 7035 <map>
6529 <key>Comment</key> 7036 <key>Comment</key>
6530 <string>Show the Search Bar in the Status Overlay</string> 7037 <string>Show the Search Bar in the Status Overlay</string>
6531 <key>Persist</key> 7038 <key>Persist</key>
6532 <integer>1</integer> 7039 <integer>1</integer>
6533 <key>Type</key> 7040 <key>Type</key>
6534 <string>Boolean</string> 7041 <string>Boolean</string>
6535 <key>Value</key> 7042 <key>Value</key>
6536 <integer>1</integer> 7043 <integer>1</integer>
6537 </map> 7044 </map>
6538 <key>ShowSelectionBeam</key> 7045 <key>ShowSelectionBeam</key>
6539 <map> 7046 <map>
6540 <key>Comment</key> 7047 <key>Comment</key>
6541 <string>Show selection particle beam when selecting or interacting with objects.</string> 7048 <string>Show selection particle beam when selecting or interacting with objects.</string>
6542 <key>Persist</key> 7049 <key>Persist</key>
6543 <integer>1</integer> 7050 <integer>1</integer>
6544 <key>Type</key> 7051 <key>Type</key>
6545 <string>Boolean</string> 7052 <string>Boolean</string>
6546 <key>Value</key> 7053 <key>Value</key>
6547 <integer>1</integer> 7054 <integer>1</integer>
6548 </map> 7055 </map>
6549 <key>ShowStartLocation</key> 7056 <key>ShowStartLocation</key>
6550 <map> 7057 <map>
6551 <key>Comment</key> 7058 <key>Comment</key>
6552 <string>Display starting location menu on login screen</string> 7059 <string>Display starting location menu on login screen</string>
6553 <key>Persist</key> 7060 <key>Persist</key>
6554 <integer>1</integer> 7061 <integer>1</integer>
6555 <key>Type</key> 7062 <key>Type</key>
6556 <string>Boolean</string> 7063 <string>Boolean</string>
6557 <key>Value</key> 7064 <key>Value</key>
6558 <integer>0</integer> 7065 <integer>0</integer>
6559 </map> 7066 </map>
6560 <key>ShowTangentBasis</key> 7067 <key>ShowTangentBasis</key>
6561 <map> 7068 <map>
6562 <key>Comment</key> 7069 <key>Comment</key>
6563 <string>Render normal and binormal (debugging bump mapping)</string> 7070 <string>Render normal and binormal (debugging bump mapping)</string>
6564 <key>Persist</key> 7071 <key>Persist</key>
6565 <integer>1</integer> 7072 <integer>1</integer>
6566 <key>Type</key> 7073 <key>Type</key>
6567 <string>Boolean</string> 7074 <string>Boolean</string>
6568 <key>Value</key> 7075 <key>Value</key>
6569 <integer>0</integer> 7076 <integer>0</integer>
6570 </map> 7077 </map>
6571 <key>ShowToolBar</key> 7078 <key>ShowToolBar</key>
6572 <map> 7079 <map>
6573 <key>Comment</key> 7080 <key>Comment</key>
6574 <string>Show toolbar at bottom of screen</string> 7081 <string>Show toolbar at bottom of screen</string>
6575 <key>Persist</key> 7082 <key>Persist</key>
6576 <integer>1</integer> 7083 <integer>1</integer>
6577 <key>Type</key> 7084 <key>Type</key>
6578 <string>Boolean</string> 7085 <string>Boolean</string>
6579 <key>Value</key> 7086 <key>Value</key>
6580 <integer>1</integer> 7087 <integer>1</integer>
6581 </map> 7088 </map>
6582 <key>ShowTools</key> 7089 <key>ShowTools</key>
6583 <map> 7090 <map>
6584 <key>Comment</key> 7091 <key>Comment</key>
6585 <string /> 7092 <string />
6586 <key>Persist</key> 7093 <key>Persist</key>
6587 <integer>0</integer> 7094 <integer>0</integer>
6588 <key>Type</key> 7095 <key>Type</key>
6589 <string>Boolean</string> 7096 <string>Boolean</string>
6590 <key>Value</key> 7097 <key>Value</key>
6591 <integer>0</integer> 7098 <integer>0</integer>
6592 </map> 7099 </map>
6593 <key>ShowVoiceChannelPopup</key> 7100 <key>ShowVoiceChannelPopup</key>
6594 <map> 7101 <map>
6595 <key>Comment</key> 7102 <key>Comment</key>
6596 <string>Controls visibility of the current voice channel popup above the voice tab</string> 7103 <string>Controls visibility of the current voice channel popup above the voice tab</string>
6597 <key>Persist</key> 7104 <key>Persist</key>
6598 <integer>1</integer> 7105 <integer>1</integer>
6599 <key>Type</key> 7106 <key>Type</key>
6600 <string>Boolean</string> 7107 <string>Boolean</string>
6601 <key>Value</key> 7108 <key>Value</key>
6602 <integer>0</integer> 7109 <integer>0</integer>
6603 </map> 7110 </map>
6604 <key>ShowVolumeSettingsPopup</key> 7111 <key>ShowVolumeSettingsPopup</key>
6605 <map> 7112 <map>
6606 <key>Comment</key> 7113 <key>Comment</key>
6607 <string>Show individual volume slider for voice, sound effects, etc</string> 7114 <string>Show individual volume slider for voice, sound effects, etc</string>
6608 <key>Persist</key> 7115 <key>Persist</key>
6609 <integer>1</integer> 7116 <integer>1</integer>
6610 <key>Type</key> 7117 <key>Type</key>
6611 <string>Boolean</string> 7118 <string>Boolean</string>
6612 <key>Value</key> 7119 <key>Value</key>
6613 <integer>0</integer> 7120 <integer>0</integer>
6614 </map> 7121 </map>
6615 <key>ShowWorldMap</key> 7122 <key>ShowWorldMap</key>
6616 <map> 7123 <map>
6617 <key>Comment</key> 7124 <key>Comment</key>
6618 <string>Display world map on login</string> 7125 <string>Display world map on login</string>
6619 <key>Persist</key> 7126 <key>Persist</key>
6620 <integer>1</integer> 7127 <integer>1</integer>
6621 <key>Type</key> 7128 <key>Type</key>
6622 <string>Boolean</string> 7129 <string>Boolean</string>
6623 <key>Value</key> 7130 <key>Value</key>
6624 <integer>0</integer> 7131 <integer>0</integer>
6625 </map> 7132 </map>
6626 <key>ShowXUINames</key> 7133 <key>ShowXUINames</key>
6627 <map> 7134 <map>
6628 <key>Comment</key> 7135 <key>Comment</key>
6629 <string>Display XUI Names as Tooltips</string> 7136 <string>Display XUI Names as Tooltips</string>
6630 <key>Persist</key> 7137 <key>Persist</key>
6631 <integer>1</integer> 7138 <integer>1</integer>
6632 <key>Type</key> 7139 <key>Type</key>
6633 <string>Boolean</string> 7140 <string>Boolean</string>
6634 <key>Value</key> 7141 <key>Value</key>
6635 <integer>0</integer> 7142 <integer>0</integer>
6636 </map> 7143 </map>
6637 <key>SitBtnState</key> 7144 <key>SitBtnState</key>
6638 <map> 7145 <map>
6639 <key>Comment</key> 7146 <key>Comment</key>
6640 <string /> 7147 <string />
6641 <key>Persist</key> 7148 <key>Persist</key>
6642 <integer>0</integer> 7149 <integer>0</integer>
6643 <key>Type</key> 7150 <key>Type</key>
6644 <string>Boolean</string> 7151 <string>Boolean</string>
6645 <key>Value</key> 7152 <key>Value</key>
6646 <integer>0</integer> 7153 <integer>0</integer>
6647 </map> 7154 </map>
6648 <key>SkinFolder</key> 7155 <key>SkinFolder</key>
6649 <map> 7156 <map>
6650 <key>Comment</key> 7157 <key>Comment</key>
6651 <string>The skin folder to use.</string> 7158 <string>The skin folder to use.</string>
6652 <key>Persist</key> 7159 <key>Persist</key>
6653 <integer>1</integer> 7160 <integer>1</integer>
6654 <key>Type</key> 7161 <key>Type</key>
6655 <string>String</string> 7162 <string>String</string>
6656 <key>Value</key> 7163 <key>Value</key>
6657 <string /> 7164 <string />
6658 </map> 7165 </map>
6659 <key>SkyAmbientScale</key> 7166 <key>SkyAmbientScale</key>
6660 <map> 7167 <map>
6661 <key>Comment</key> 7168 <key>Comment</key>
6662 <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string> 7169 <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
6663 <key>Persist</key> 7170 <key>Persist</key>
6664 <integer>1</integer> 7171 <integer>1</integer>
6665 <key>Type</key> 7172 <key>Type</key>
6666 <string>F32</string> 7173 <string>F32</string>
6667 <key>Value</key> 7174 <key>Value</key>
6668 <real>0.300000011920928955078125</real> 7175 <real>0.300000011921</real>
6669 </map> 7176 </map>
7177 <key>SkyEditPresets</key>
7178 <map>
7179 <key>Comment</key>
7180 <string>Whether to be able to edit the sky defaults or not</string>
7181 <key>Persist</key>
7182 <integer>1</integer>
7183 <key>Type</key>
7184 <string>Boolean</string>
7185 <key>Value</key>
7186 <integer>0</integer>
7187 </map>
6670 <key>SkyNightColorShift</key> 7188 <key>SkyNightColorShift</key>
6671 <map> 7189 <map>
6672 <key>Comment</key> 7190 <key>Comment</key>
6673 <string>Controls moonlight color (base color applied to moon as light source)</string> 7191 <string>Controls moonlight color (base color applied to moon as light source)</string>
6674 <key>Persist</key> 7192 <key>Persist</key>
6675 <integer>1</integer> 7193 <integer>1</integer>
6676 <key>Type</key> 7194 <key>Type</key>
6677 <string>Color3</string> 7195 <string>Color3</string>
6678 <key>Value</key> 7196 <key>Value</key>
6679 <array> 7197 <array>
6680 <real>0.699999988079071044921875</real> 7198 <real>0.699999988079</real>
6681 <real>0.699999988079071044921875</real> 7199 <real>0.699999988079</real>
6682 <real>1</real> 7200 <real>1.0</real>
6683 </array> 7201 </array>
6684 </map> 7202 </map>
6685 <key>SkyOverrideSimSunPosition</key> 7203 <key>SkyOverrideSimSunPosition</key>
6686 <map> 7204 <map>
6687 <key>Comment</key> 7205 <key>Comment</key>
6688 <string /> 7206 <string />
6689 <key>Persist</key> 7207 <key>Persist</key>
6690 <integer>0</integer> 7208 <integer>0</integer>
6691 <key>Type</key> 7209 <key>Type</key>
6692 <string>Boolean</string> 7210 <string>Boolean</string>
6693 <key>Value</key> 7211 <key>Value</key>
6694 <integer>0</integer> 7212 <integer>0</integer>
6695 </map> 7213 </map>
6696 <key>SkySunDefaultPosition</key> 7214 <key>SkySunDefaultPosition</key>
6697 <map> 7215 <map>
6698 <key>Comment</key> 7216 <key>Comment</key>
6699 <string>Default position of sun in sky (direction in world coordinates)</string> 7217 <string>Default position of sun in sky (direction in world coordinates)</string>
6700 <key>Persist</key> 7218 <key>Persist</key>
6701 <integer>1</integer> 7219 <integer>1</integer>
6702 <key>Type</key> 7220 <key>Type</key>
6703 <string>Vector3</string> 7221 <string>Vector3</string>
6704 <key>Value</key> 7222 <key>Value</key>
6705 <array> 7223 <array>
6706 <real>1</real> 7224 <real>1.0</real>
6707 <real>0</real> 7225 <real>0.0</real>
6708 <real>0.1</real> 7226 <real>0.1</real>
6709 </array> 7227 </array>
6710 </map> 7228 </map>
6711 <key>SkyUseClassicClouds</key> 7229 <key>SkyUseClassicClouds</key>
6712 <map> 7230 <map>
6713 <key>Comment</key> 7231 <key>Comment</key>
6714 <string>Whether to use the old Second Life particle clouds or not</string> 7232 <string>Whether to use the old Second Life particle clouds or not</string>
6715 <key>Persist</key> 7233 <key>Persist</key>
6716 <integer>1</integer> 7234 <integer>1</integer>
6717 <key>Type</key> 7235 <key>Type</key>
6718 <string>Boolean</string> 7236 <string>Boolean</string>
6719 <key>Value</key> 7237 <key>Value</key>
6720 <integer>1</integer> 7238 <integer>1</integer>
6721 </map> 7239 </map>
6722 <key>SlideLeftBtnRect</key> 7240 <key>SlideLeftBtnRect</key>
6723 <map> 7241 <map>
6724 <key>Comment</key> 7242 <key>Comment</key>
6725 <string /> 7243 <string />
6726 <key>Persist</key> 7244 <key>Persist</key>
6727 <integer>0</integer> 7245 <integer>0</integer>
6728 <key>Type</key> 7246 <key>Type</key>
6729 <string>Rect</string> 7247 <string>Rect</string>
6730 <key>Value</key> 7248 <key>Value</key>
6731 <array> 7249 <array>
6732 <integer>20</integer> 7250 <integer>20</integer>
6733 <integer>54</integer> 7251 <integer>54</integer>
6734 <integer>45</integer> 7252 <integer>45</integer>
6735 <integer>29</integer> 7253 <integer>29</integer>
6736 </array> 7254 </array>
6737 </map> 7255 </map>
6738 <key>SlideRightBtnRect</key> 7256 <key>SlideRightBtnRect</key>
6739 <map> 7257 <map>
6740 <key>Comment</key> 7258 <key>Comment</key>
6741 <string /> 7259 <string />
6742 <key>Persist</key> 7260 <key>Persist</key>
6743 <integer>0</integer> 7261 <integer>0</integer>
6744 <key>Type</key> 7262 <key>Type</key>
6745 <string>Rect</string> 7263 <string>Rect</string>
6746 <key>Value</key> 7264 <key>Value</key>
6747 <array> 7265 <array>
6748 <integer>66</integer> 7266 <integer>66</integer>
6749 <integer>54</integer> 7267 <integer>54</integer>
6750 <integer>91</integer> 7268 <integer>91</integer>
6751 <integer>29</integer> 7269 <integer>29</integer>
6752 </array> 7270 </array>
6753 </map> 7271 </map>
6754 <key>SmallAvatarNames</key> 7272 <key>SmallAvatarNames</key>
6755 <map> 7273 <map>
6756 <key>Comment</key> 7274 <key>Comment</key>
6757 <string>Display avatar name text in smaller font</string> 7275 <string>Display avatar name text in smaller font</string>
6758 <key>Persist</key> 7276 <key>Persist</key>
6759 <integer>1</integer> 7277 <integer>1</integer>
6760 <key>Type</key> 7278 <key>Type</key>
6761 <string>Boolean</string> 7279 <string>Boolean</string>
6762 <key>Value</key> 7280 <key>Value</key>
6763 <integer>1</integer> 7281 <integer>1</integer>
6764 </map> 7282 </map>
6765 <key>SnapEnabled</key> 7283 <key>SnapEnabled</key>
6766 <map> 7284 <map>
6767 <key>Comment</key> 7285 <key>Comment</key>
6768 <string>Enable snapping to grid</string> 7286 <string>Enable snapping to grid</string>
6769 <key>Persist</key> 7287 <key>Persist</key>
6770 <integer>1</integer> 7288 <integer>1</integer>
6771 <key>Type</key> 7289 <key>Type</key>
6772 <string>Boolean</string> 7290 <string>Boolean</string>
6773 <key>Value</key> 7291 <key>Value</key>
6774 <integer>1</integer> 7292 <integer>1</integer>
6775 </map> 7293 </map>
6776 <key>SnapMargin</key> 7294 <key>SnapMargin</key>
6777 <map> 7295 <map>
6778 <key>Comment</key> 7296 <key>Comment</key>
6779 <string>Controls maximum distance between windows before they auto-snap together (pixels)</string> 7297 <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
6780 <key>Persist</key> 7298 <key>Persist</key>
6781 <integer>1</integer> 7299 <integer>1</integer>
6782 <key>Type</key> 7300 <key>Type</key>
6783 <string>S32</string> 7301 <string>S32</string>
6784 <key>Value</key> 7302 <key>Value</key>
6785 <integer>10</integer> 7303 <integer>10</integer>
6786 </map> 7304 </map>
6787 <key>SnapToMouseCursor</key> 7305 <key>SnapToMouseCursor</key>
6788 <map> 7306 <map>
6789 <key>Comment</key> 7307 <key>Comment</key>
6790 <string>When snapping to grid, center object on nearest grid point to mouse cursor</string> 7308 <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
6791 <key>Persist</key> 7309 <key>Persist</key>
6792 <integer>1</integer> 7310 <integer>1</integer>
6793 <key>Type</key> 7311 <key>Type</key>
6794 <string>Boolean</string> 7312 <string>Boolean</string>
6795 <key>Value</key> 7313 <key>Value</key>
6796 <integer>0</integer> 7314 <integer>0</integer>
6797 </map> 7315 </map>
6798 <key>SnapshotLocalLastResolution</key> 7316 <key>SnapshotLocalLastResolution</key>
6799 <map> 7317 <map>
6800 <key>Comment</key> 7318 <key>Comment</key>
6801 <string>Take next local snapshot at this resolution</string> 7319 <string>Take next local snapshot at this resolution</string>
6802 <key>Persist</key> 7320 <key>Persist</key>
6803 <integer>1</integer> 7321 <integer>1</integer>
6804 <key>Type</key> 7322 <key>Type</key>
6805 <string>S32</string> 7323 <string>S32</string>
6806 <key>Value</key> 7324 <key>Value</key>
6807 <integer>0</integer> 7325 <integer>0</integer>
6808 </map> 7326 </map>
6809 <key>SnapshotPostcardLastResolution</key> 7327 <key>SnapshotPostcardLastResolution</key>
6810 <map> 7328 <map>
6811 <key>Comment</key> 7329 <key>Comment</key>
6812 <string>Take next postcard snapshot at this resolution</string> 7330 <string>Take next postcard snapshot at this resolution</string>
6813 <key>Persist</key> 7331 <key>Persist</key>
6814 <integer>1</integer> 7332 <integer>1</integer>
6815 <key>Type</key> 7333 <key>Type</key>
6816 <string>S32</string> 7334 <string>S32</string>
6817 <key>Value</key> 7335 <key>Value</key>
6818 <integer>0</integer> 7336 <integer>0</integer>
6819 </map> 7337 </map>
6820 <key>SnapshotQuality</key> 7338 <key>SnapshotQuality</key>
6821 <map> 7339 <map>
6822 <key>Comment</key> 7340 <key>Comment</key>
6823 <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string> 7341 <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
6824 <key>Persist</key> 7342 <key>Persist</key>
6825 <integer>1</integer> 7343 <integer>1</integer>
6826 <key>Type</key> 7344 <key>Type</key>
6827 <string>S32</string> 7345 <string>S32</string>
6828 <key>Value</key> 7346 <key>Value</key>
6829 <integer>75</integer> 7347 <integer>75</integer>
6830 </map> 7348 </map>
6831 <key>SnapshotTextureLastResolution</key> 7349 <key>SnapshotTextureLastResolution</key>
6832 <map> 7350 <map>
6833 <key>Comment</key> 7351 <key>Comment</key>
6834 <string>Take next texture snapshot at this resolution</string> 7352 <string>Take next texture snapshot at this resolution</string>
6835 <key>Persist</key> 7353 <key>Persist</key>
6836 <integer>1</integer> 7354 <integer>1</integer>
6837 <key>Type</key> 7355 <key>Type</key>
6838 <string>S32</string> 7356 <string>S32</string>
6839 <key>Value</key> 7357 <key>Value</key>
6840 <integer>0</integer> 7358 <integer>0</integer>
6841 </map> 7359 </map>
6842 <key>SpeakingColor</key> 7360 <key>SpeakingColor</key>
6843 <map> 7361 <map>
6844 <key>Comment</key> 7362 <key>Comment</key>
6845 <string>Color of various indicators when resident is speaking on a voice channel.</string> 7363 <string>Color of various indicators when resident is speaking on a voice channel.</string>
6846 <key>Persist</key> 7364 <key>Persist</key>
6847 <integer>1</integer> 7365 <integer>1</integer>
6848 <key>Type</key> 7366 <key>Type</key>
6849 <string>Color4</string> 7367 <string>Color4</string>
6850 <key>Value</key> 7368 <key>Value</key>
6851 <array> 7369 <array>
6852 <real>0</real> 7370 <real>0.0</real>
6853 <real>1</real> 7371 <real>1.0</real>
6854 <real>0</real> 7372 <real>0.0</real>
6855 <real>1</real> 7373 <real>1.0</real>
6856 </array> 7374 </array>
6857 </map> 7375 </map>
6858 <key>SpeedTest</key> 7376 <key>SpeedTest</key>
6859 <map> 7377 <map>
6860 <key>Comment</key> 7378 <key>Comment</key>
6861 <string>Performance testing mode, no network</string> 7379 <string>Performance testing mode, no network</string>
6862 <key>Persist</key> 7380 <key>Persist</key>
6863 <integer>1</integer> 7381 <integer>1</integer>
6864 <key>Type</key> 7382 <key>Type</key>
6865 <string>Boolean</string> 7383 <string>Boolean</string>
6866 <key>Value</key> 7384 <key>Value</key>
6867 <integer>0</integer> 7385 <integer>0</integer>
6868 </map> 7386 </map>
6869 <key>StatsAutoRun</key> 7387 <key>StatsAutoRun</key>
6870 <map> 7388 <map>
6871 <key>Comment</key> 7389 <key>Comment</key>
6872 <string>Play back autopilot</string> 7390 <string>Play back autopilot</string>
6873 <key>Persist</key> 7391 <key>Persist</key>
6874 <integer>1</integer> 7392 <integer>1</integer>
6875 <key>Type</key> 7393 <key>Type</key>
6876 <string>Boolean</string> 7394 <string>Boolean</string>
6877 <key>Value</key> 7395 <key>Value</key>
6878 <integer>0</integer> 7396 <integer>0</integer>
6879 </map> 7397 </map>
6880 <key>StatsFile</key> 7398 <key>StatsFile</key>
6881 <map> 7399 <map>
6882 <key>Comment</key> 7400 <key>Comment</key>
6883 <string>Filename for stats logging output</string> 7401 <string>Filename for stats logging output</string>
6884 <key>Persist</key> 7402 <key>Persist</key>
6885 <integer>1</integer> 7403 <integer>1</integer>
6886 <key>Type</key> 7404 <key>Type</key>
6887 <string>String</string> 7405 <string>String</string>
6888 <key>Value</key> 7406 <key>Value</key>
6889 <string>fs.txt</string> 7407 <string>fs.txt</string>
6890 </map> 7408 </map>
6891 <key>StatsNumRuns</key> 7409 <key>StatsNumRuns</key>
6892 <map> 7410 <map>
6893 <key>Comment</key> 7411 <key>Comment</key>
6894 <string>Loop autopilot playback this number of times</string> 7412 <string>Loop autopilot playback this number of times</string>
6895 <key>Persist</key> 7413 <key>Persist</key>
6896 <integer>1</integer> 7414 <integer>1</integer>
6897 <key>Type</key> 7415 <key>Type</key>
6898 <string>S32</string> 7416 <string>S32</string>
6899 <key>Value</key> 7417 <key>Value</key>
6900 <integer>-1</integer> 7418 <integer>-1</integer>
6901 </map> 7419 </map>
6902 <key>StatsPilotFile</key> 7420 <key>StatsPilotFile</key>
6903 <map> 7421 <map>
6904 <key>Comment</key> 7422 <key>Comment</key>
6905 <string>Filename for stats logging autopilot path</string> 7423 <string>Filename for stats logging autopilot path</string>
6906 <key>Persist</key> 7424 <key>Persist</key>
6907 <integer>1</integer> 7425 <integer>1</integer>
6908 <key>Type</key> 7426 <key>Type</key>
6909 <string>String</string> 7427 <string>String</string>
6910 <key>Value</key> 7428 <key>Value</key>
6911 <string>pilot.txt</string> 7429 <string>pilot.txt</string>
6912 </map> 7430 </map>
6913 <key>StatsQuitAfterRuns</key> 7431 <key>StatsQuitAfterRuns</key>
6914 <map> 7432 <map>
6915 <key>Comment</key> 7433 <key>Comment</key>
6916 <string>Quit application after this number of autopilot playback runs</string> 7434 <string>Quit application after this number of autopilot playback runs</string>
6917 <key>Persist</key> 7435 <key>Persist</key>
6918 <integer>1</integer> 7436 <integer>1</integer>
6919 <key>Type</key> 7437 <key>Type</key>
6920 <string>Boolean</string> 7438 <string>Boolean</string>
6921 <key>Value</key> 7439 <key>Value</key>
6922 <integer>0</integer> 7440 <integer>0</integer>
6923 </map> 7441 </map>
6924 <key>StatsSessionTrackFrameStats</key> 7442 <key>StatsSessionTrackFrameStats</key>
6925 <map> 7443 <map>
6926 <key>Comment</key> 7444 <key>Comment</key>
6927 <string>Track rendering and network statistics</string> 7445 <string>Track rendering and network statistics</string>
6928 <key>Persist</key> 7446 <key>Persist</key>
6929 <integer>1</integer> 7447 <integer>1</integer>
6930 <key>Type</key> 7448 <key>Type</key>
6931 <string>Boolean</string> 7449 <string>Boolean</string>
6932 <key>Value</key> 7450 <key>Value</key>
6933 <integer>0</integer> 7451 <integer>0</integer>
6934 </map> 7452 </map>
6935 <key>StatsSummaryFile</key> 7453 <key>StatsSummaryFile</key>
6936 <map> 7454 <map>
6937 <key>Comment</key> 7455 <key>Comment</key>
6938 <string>Filename for stats logging summary</string> 7456 <string>Filename for stats logging summary</string>
6939 <key>Persist</key> 7457 <key>Persist</key>
6940 <integer>1</integer> 7458 <integer>1</integer>
6941 <key>Type</key> 7459 <key>Type</key>
6942 <string>String</string> 7460 <string>String</string>
6943 <key>Value</key> 7461 <key>Value</key>
6944 <string>fss.txt</string> 7462 <string>fss.txt</string>
6945 </map> 7463 </map>
6946 <key>StatusBarHeight</key> 7464 <key>StatusBarHeight</key>
6947 <map> 7465 <map>
6948 <key>Comment</key> 7466 <key>Comment</key>
6949 <string>Height of menu/status bar at top of screen (pixels)</string> 7467 <string>Height of menu/status bar at top of screen (pixels)</string>
6950 <key>Persist</key> 7468 <key>Persist</key>
6951 <integer>1</integer> 7469 <integer>1</integer>
6952 <key>Type</key> 7470 <key>Type</key>
6953 <string>S32</string> 7471 <string>S32</string>
6954 <key>Value</key> 7472 <key>Value</key>
6955 <integer>26</integer> 7473 <integer>26</integer>
6956 </map> 7474 </map>
6957 <key>StatusBarPad</key> 7475 <key>StatusBarPad</key>
6958 <map> 7476 <map>
6959 <key>Comment</key> 7477 <key>Comment</key>
6960 <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string> 7478 <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
6961 <key>Persist</key> 7479 <key>Persist</key>
6962 <integer>1</integer> 7480 <integer>1</integer>
6963 <key>Type</key> 7481 <key>Type</key>
6964 <string>S32</string> 7482 <string>S32</string>
6965 <key>Value</key> 7483 <key>Value</key>
6966 <integer>10</integer> 7484 <integer>10</integer>
6967 </map> 7485 </map>
6968 <key>SystemChatColor</key> 7486 <key>SystemChatColor</key>
6969 <map> 7487 <map>
6970 <key>Comment</key> 7488 <key>Comment</key>
6971 <string>Color of chat messages from SL System</string> 7489 <string>Color of chat messages from SL System</string>
6972 <key>Persist</key> 7490 <key>Persist</key>
6973 <integer>1</integer> 7491 <integer>1</integer>
6974 <key>Type</key> 7492 <key>Type</key>
6975 <string>Color4</string> 7493 <string>Color4</string>
6976 <key>Value</key> 7494 <key>Value</key>
6977 <array> 7495 <array>
6978 <real>0.800000011920928955078125</real> 7496 <real>0.800000011921</real>
6979 <real>1</real> 7497 <real>1.0</real>
6980 <real>1</real> 7498 <real>1.0</real>
6981 <real>1</real> 7499 <real>1.0</real>
6982 </array> 7500 </array>
6983 </map> 7501 </map>
6984 <key>SystemLanguage</key> 7502 <key>SystemLanguage</key>
6985 <map> 7503 <map>
6986 <key>Comment</key> 7504 <key>Comment</key>
6987 <string>Language indicated by system settings (for XUI)</string> 7505 <string>Language indicated by system settings (for XUI)</string>
6988 <key>Persist</key> 7506 <key>Persist</key>
6989 <integer>1</integer> 7507 <integer>1</integer>
6990 <key>Type</key> 7508 <key>Type</key>
6991 <string>String</string> 7509 <string>String</string>
6992 <key>Value</key> 7510 <key>Value</key>
6993 <string>en-us</string> 7511 <string>en-us</string>
6994 </map> 7512 </map>
6995 <key>TabToTextFieldsOnly</key> 7513 <key>TabToTextFieldsOnly</key>
6996 <map> 7514 <map>
6997 <key>Comment</key> 7515 <key>Comment</key>
6998 <string>TAB key takes you to next text entry field, instead of next widget</string> 7516 <string>TAB key takes you to next text entry field, instead of next widget</string>
6999 <key>Persist</key> 7517 <key>Persist</key>
7000 <integer>1</integer> 7518 <integer>1</integer>
7001 <key>Type</key> 7519 <key>Type</key>
7002 <string>Boolean</string> 7520 <string>Boolean</string>
7003 <key>Value</key> 7521 <key>Value</key>
7004 <integer>0</integer> 7522 <integer>0</integer>
7005 </map> 7523 </map>
7006 <key>TerrainColorHeightRange</key> 7524 <key>TerrainColorHeightRange</key>
7007 <map> 7525 <map>
7008 <key>Comment</key> 7526 <key>Comment</key>
7009 <string>Altitude range over which a given terrain texture has effect (meters)</string> 7527 <string>Altitude range over which a given terrain texture has effect (meters)</string>
7010 <key>Persist</key> 7528 <key>Persist</key>
7011 <integer>1</integer> 7529 <integer>1</integer>
7012 <key>Type</key> 7530 <key>Type</key>
7013 <string>F32</string> 7531 <string>F32</string>
7014 <key>Value</key> 7532 <key>Value</key>
7015 <real>60</real> 7533 <real>60.0</real>
7016 </map> 7534 </map>
7017 <key>TerrainColorStartHeight</key> 7535 <key>TerrainColorStartHeight</key>
7018 <map> 7536 <map>
7019 <key>Comment</key> 7537 <key>Comment</key>
7020 <string>Starting altitude for terrain texturing (meters)</string> 7538 <string>Starting altitude for terrain texturing (meters)</string>
7021 <key>Persist</key> 7539 <key>Persist</key>
7022 <integer>1</integer> 7540 <integer>1</integer>
7023 <key>Type</key> 7541 <key>Type</key>
7024 <string>F32</string> 7542 <string>F32</string>
7025 <key>Value</key> 7543 <key>Value</key>
7026 <real>20</real> 7544 <real>20.0</real>
7027 </map> 7545 </map>
7028 <key>TextureMemory</key> 7546 <key>TextureMemory</key>
7029 <map> 7547 <map>
7030 <key>Comment</key> 7548 <key>Comment</key>
7031 <string>Amount of memory to use for textures in MB (0 = autodetect)</string> 7549 <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
7032 <key>Persist</key> 7550 <key>Persist</key>
7033 <integer>1</integer> 7551 <integer>1</integer>
7034 <key>Type</key> 7552 <key>Type</key>
7035 <string>S32</string> 7553 <string>S32</string>
7036 <key>Value</key> 7554 <key>Value</key>
7037 <integer>0</integer> 7555 <integer>0</integer>
7038 </map> 7556 </map>
7039 <key>TexturePickerRect</key> 7557 <key>TexturePickerRect</key>
7040 <map> 7558 <map>
7041 <key>Comment</key> 7559 <key>Comment</key>
7042 <string>Rectangle for texture picker</string> 7560 <string>Rectangle for texture picker</string>
7043 <key>Persist</key> 7561 <key>Persist</key>
7044 <integer>1</integer> 7562 <integer>1</integer>
7045 <key>Type</key> 7563 <key>Type</key>
7046 <string>Rect</string> 7564 <string>Rect</string>
7047 <key>Value</key> 7565 <key>Value</key>
7048 <array> 7566 <array>
7049 <integer>0</integer> 7567 <integer>0</integer>
7050 <integer>290</integer> 7568 <integer>290</integer>
7051 <integer>350</integer> 7569 <integer>350</integer>
7052 <integer>0</integer> 7570 <integer>0</integer>
7053 </array> 7571 </array>
7054 </map> 7572 </map>
7055 <key>TexturePickerShowFolders</key> 7573 <key>TexturePickerShowFolders</key>
7056 <map> 7574 <map>
7057 <key>Comment</key> 7575 <key>Comment</key>
7058 <string>Show folders with no texures in texture picker</string> 7576 <string>Show folders with no texures in texture picker</string>
7059 <key>Persist</key> 7577 <key>Persist</key>
7060 <integer>1</integer> 7578 <integer>1</integer>
7061 <key>Type</key> 7579 <key>Type</key>
7062 <string>Boolean</string> 7580 <string>Boolean</string>
7063 <key>Value</key> 7581 <key>Value</key>
7064 <integer>1</integer> 7582 <integer>1</integer>
7065 </map> 7583 </map>
7066 <key>TexturePickerSortOrder</key> 7584 <key>TexturePickerSortOrder</key>
7067 <map> 7585 <map>
7068 <key>Comment</key> 7586 <key>Comment</key>
7069 <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 7587 <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
7070 <key>Persist</key> 7588 <key>Persist</key>
7071 <integer>1</integer> 7589 <integer>1</integer>
7072 <key>Type</key> 7590 <key>Type</key>
7073 <string>U32</string> 7591 <string>U32</string>
7074 <key>Value</key> 7592 <key>Value</key>
7075 <integer>2</integer> 7593 <integer>2</integer>
7076 </map> 7594 </map>
7077 <key>ThirdPersonBtnState</key> 7595 <key>ThirdPersonBtnState</key>
7078 <map> 7596 <map>
7079 <key>Comment</key> 7597 <key>Comment</key>
7080 <string /> 7598 <string />
7081 <key>Persist</key> 7599 <key>Persist</key>
7082 <integer>0</integer> 7600 <integer>0</integer>
7083 <key>Type</key> 7601 <key>Type</key>
7084 <string>Boolean</string> 7602 <string>Boolean</string>
7085 <key>Value</key> 7603 <key>Value</key>
7086 <integer>1</integer> 7604 <integer>1</integer>
7087 </map> 7605 </map>
7088 <key>ThrottleBandwidthKBPS</key> 7606 <key>ThrottleBandwidthKBPS</key>
7089 <map> 7607 <map>
7090 <key>Comment</key> 7608 <key>Comment</key>
7091 <string>Maximum allowable downstream bandwidth (kilo bits per second)</string> 7609 <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
7092 <key>Persist</key> 7610 <key>Persist</key>
7093 <integer>1</integer> 7611 <integer>1</integer>
7094 <key>Type</key> 7612 <key>Type</key>
7095 <string>F32</string> 7613 <string>F32</string>
7096 <key>Value</key> 7614 <key>Value</key>
7097 <real>500</real> 7615 <real>500.0</real>
7098 </map> 7616 </map>
7099 <key>ToolHelpRect</key> 7617 <key>ToolHelpRect</key>
7100 <map> 7618 <map>
7101 <key>Comment</key> 7619 <key>Comment</key>
7102 <string /> 7620 <string />
7103 <key>Persist</key> 7621 <key>Persist</key>
7104 <integer>0</integer> 7622 <integer>0</integer>
7105 <key>Type</key> 7623 <key>Type</key>
7106 <string>Rect</string> 7624 <string>Rect</string>
7107 <key>Value</key> 7625 <key>Value</key>
7108 <array> 7626 <array>
7109 <integer>8</integer> 7627 <integer>8</integer>
7110 <integer>178</integer> 7628 <integer>178</integer>
7111 <integer>75</integer> 7629 <integer>75</integer>
7112 <integer>162</integer> 7630 <integer>162</integer>
7113 </array> 7631 </array>
7114 </map> 7632 </map>
7115 <key>ToolTipDelay</key> 7633 <key>ToolTipDelay</key>
7116 <map> 7634 <map>
7117 <key>Comment</key> 7635 <key>Comment</key>
7118 <string>Seconds before displaying tooltip when mouse stops over UI element</string> 7636 <string>Seconds before displaying tooltip when mouse stops over UI element</string>
7119 <key>Persist</key> 7637 <key>Persist</key>
7120 <integer>1</integer> 7638 <integer>1</integer>
7121 <key>Type</key> 7639 <key>Type</key>
7122 <string>F32</string> 7640 <string>F32</string>
7123 <key>Value</key> 7641 <key>Value</key>
7124 <real>0.699999988079071044921875</real> 7642 <real>0.699999988079</real>
7125 </map> 7643 </map>
7126 <key>ToolboxAutoMove</key> 7644 <key>ToolboxAutoMove</key>
7127 <map> 7645 <map>
7128 <key>Comment</key> 7646 <key>Comment</key>
7129 <string>[NOT USED]</string> 7647 <string>[NOT USED]</string>
7130 <key>Persist</key> 7648 <key>Persist</key>
7131 <integer>1</integer> 7649 <integer>1</integer>
7132 <key>Type</key> 7650 <key>Type</key>
7133 <string>Boolean</string> 7651 <string>Boolean</string>
7134 <key>Value</key> 7652 <key>Value</key>
7135 <integer>0</integer> 7653 <integer>0</integer>
7136 </map> 7654 </map>
7137 <key>ToolboxRect</key> 7655 <key>ToolboxRect</key>
7138 <map> 7656 <map>
7139 <key>Comment</key> 7657 <key>Comment</key>
7140 <string>Rectangle for tools window</string> 7658 <string>Rectangle for tools window</string>
7141 <key>Persist</key> 7659 <key>Persist</key>
7142 <integer>1</integer> 7660 <integer>1</integer>
7143 <key>Type</key> 7661 <key>Type</key>
7144 <string>Rect</string> 7662 <string>Rect</string>
7145 <key>Value</key> 7663 <key>Value</key>
7146 <array> 7664 <array>
7147 <integer>0</integer> 7665 <integer>0</integer>
7148 <integer>100</integer> 7666 <integer>100</integer>
7149 <integer>100</integer> 7667 <integer>100</integer>
7150 <integer>100</integer> 7668 <integer>100</integer>
7151 </array> 7669 </array>
7152 </map> 7670 </map>
7153 <key>ToolboxShowMore</key> 7671 <key>ToolboxShowMore</key>
7154 <map> 7672 <map>
7155 <key>Comment</key> 7673 <key>Comment</key>
7156 <string>Whether to show additional build tool controls</string> 7674 <string>Whether to show additional build tool controls</string>
7157 <key>Persist</key> 7675 <key>Persist</key>
7158 <integer>1</integer> 7676 <integer>1</integer>
7159 <key>Type</key> 7677 <key>Type</key>
7160 <string>Boolean</string> 7678 <string>Boolean</string>
7161 <key>Value</key> 7679 <key>Value</key>
7162 <integer>1</integer> 7680 <integer>1</integer>
7163 </map> 7681 </map>
7164 <key>TrackFocusObject</key> 7682 <key>TrackFocusObject</key>
7165 <map> 7683 <map>
7166 <key>Comment</key> 7684 <key>Comment</key>
7167 <string>Camera tracks last object zoomed on</string> 7685 <string>Camera tracks last object zoomed on</string>
7168 <key>Persist</key> 7686 <key>Persist</key>
7169 <integer>1</integer> 7687 <integer>1</integer>
7170 <key>Type</key> 7688 <key>Type</key>
7171 <string>Boolean</string> 7689 <string>Boolean</string>
7172 <key>Value</key> 7690 <key>Value</key>
7173 <integer>1</integer> 7691 <integer>1</integer>
7174 </map> 7692 </map>
7175 <key>TurnLeftBtnRect</key> 7693 <key>TurnLeftBtnRect</key>
7176 <map> 7694 <map>
7177 <key>Comment</key> 7695 <key>Comment</key>
7178 <string /> 7696 <string />
7179 <key>Persist</key> 7697 <key>Persist</key>
7180 <integer>0</integer> 7698 <integer>0</integer>
7181 <key>Type</key> 7699 <key>Type</key>
7182 <string>Rect</string> 7700 <string>Rect</string>
7183 <key>Value</key> 7701 <key>Value</key>
7184 <array> 7702 <array>
7185 <integer>20</integer> 7703 <integer>20</integer>
7186 <integer>29</integer> 7704 <integer>29</integer>
7187 <integer>45</integer> 7705 <integer>45</integer>
7188 <integer>4</integer> 7706 <integer>4</integer>
7189 </array> 7707 </array>
7190 </map> 7708 </map>
7191 <key>TurnRightBtnRect</key> 7709 <key>TurnRightBtnRect</key>
7192 <map> 7710 <map>
7193 <key>Comment</key> 7711 <key>Comment</key>
7194 <string /> 7712 <string />
7195 <key>Persist</key> 7713 <key>Persist</key>
7196 <integer>0</integer> 7714 <integer>0</integer>
7197 <key>Type</key> 7715 <key>Type</key>
7198 <string>Rect</string> 7716 <string>Rect</string>
7199 <key>Value</key> 7717 <key>Value</key>
7200 <array> 7718 <array>
7201 <integer>66</integer> 7719 <integer>66</integer>
7202 <integer>29</integer> 7720 <integer>29</integer>
7203 <integer>91</integer> 7721 <integer>91</integer>
7204 <integer>4</integer> 7722 <integer>4</integer>
7205 </array> 7723 </array>
7206 </map> 7724 </map>
7207 <key>TypeAheadTimeout</key> 7725 <key>TypeAheadTimeout</key>
7208 <map> 7726 <map>
7209 <key>Comment</key> 7727 <key>Comment</key>
7210 <string>Time delay before clearing type-ahead buffer in lists (seconds)</string> 7728 <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
7211 <key>Persist</key> 7729 <key>Persist</key>
7212 <integer>1</integer> 7730 <integer>1</integer>
7213 <key>Type</key> 7731 <key>Type</key>
7214 <string>F32</string> 7732 <string>F32</string>
7215 <key>Value</key> 7733 <key>Value</key>
7216 <real>1.5</real> 7734 <real>1.5</real>
7217 </map> 7735 </map>
7218 <key>UIAutoScale</key> 7736 <key>UIAutoScale</key>
7219 <map> 7737 <map>
7220 <key>Comment</key> 7738 <key>Comment</key>
7221 <string>Keep UI scale consistent across different resolutions</string> 7739 <string>Keep UI scale consistent across different resolutions</string>
7222 <key>Persist</key> 7740 <key>Persist</key>
7223 <integer>1</integer> 7741 <integer>1</integer>
7224 <key>Type</key> 7742 <key>Type</key>
7225 <string>Boolean</string> 7743 <string>Boolean</string>
7226 <key>Value</key> 7744 <key>Value</key>
7227 <integer>1</integer> 7745 <integer>1</integer>
7228 </map> 7746 </map>
7229 <key>UIFloaterTestBool</key> 7747 <key>UIFloaterTestBool</key>
7230 <map> 7748 <map>
7231 <key>Comment</key> 7749 <key>Comment</key>
7232 <string>Example saved setting for the test floater</string> 7750 <string>Example saved setting for the test floater</string>
7233 <key>Persist</key> 7751 <key>Persist</key>
7234 <integer>1</integer> 7752 <integer>1</integer>
7235 <key>Type</key> 7753 <key>Type</key>
7236 <string>Boolean</string> 7754 <string>Boolean</string>
7237 <key>Value</key> 7755 <key>Value</key>
7238 <integer>0</integer> 7756 <integer>0</integer>
7239 </map> 7757 </map>
7240 <key>UIImgBtnCloseActiveUUID</key> 7758 <key>UIImgBtnCloseActiveUUID</key>
7241 <map> 7759 <map>
7242 <key>Comment</key> 7760 <key>Comment</key>
7243 <string /> 7761 <string />
7244 <key>Persist</key> 7762 <key>Persist</key>
7245 <integer>0</integer> 7763 <integer>0</integer>
7246 <key>Type</key> 7764 <key>Type</key>
7247 <string>String</string> 7765 <string>String</string>
7248 <key>Value</key> 7766 <key>Value</key>
7249 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7767 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7250 </map> 7768 </map>
7251 <key>UIImgBtnCloseInactiveUUID</key> 7769 <key>UIImgBtnCloseInactiveUUID</key>
7252 <map> 7770 <map>
7253 <key>Comment</key> 7771 <key>Comment</key>
7254 <string /> 7772 <string />
7255 <key>Persist</key> 7773 <key>Persist</key>
7256 <integer>0</integer> 7774 <integer>0</integer>
7257 <key>Type</key> 7775 <key>Type</key>
7258 <string>String</string> 7776 <string>String</string>
7259 <key>Value</key> 7777 <key>Value</key>
7260 <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string> 7778 <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
7261 </map> 7779 </map>
7262 <key>UIImgBtnClosePressedUUID</key> 7780 <key>UIImgBtnClosePressedUUID</key>
7263 <map> 7781 <map>
7264 <key>Comment</key> 7782 <key>Comment</key>
7265 <string /> 7783 <string />
7266 <key>Persist</key> 7784 <key>Persist</key>
7267 <integer>0</integer> 7785 <integer>0</integer>
7268 <key>Type</key> 7786 <key>Type</key>
7269 <string>String</string> 7787 <string>String</string>
7270 <key>Value</key> 7788 <key>Value</key>
7271 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7789 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7272 </map> 7790 </map>
7273 <key>UIImgBtnForwardInUUID</key> 7791 <key>UIImgBtnForwardInUUID</key>
7274 <map> 7792 <map>
7275 <key>Comment</key> 7793 <key>Comment</key>
7276 <string /> 7794 <string />
7277 <key>Persist</key> 7795 <key>Persist</key>
7278 <integer>0</integer> 7796 <integer>0</integer>
7279 <key>Type</key> 7797 <key>Type</key>
7280 <string>String</string> 7798 <string>String</string>
7281 <key>Value</key> 7799 <key>Value</key>
7282 <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string> 7800 <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
7283 </map> 7801 </map>
7284 <key>UIImgBtnForwardOutUUID</key> 7802 <key>UIImgBtnForwardOutUUID</key>
7285 <map> 7803 <map>
7286 <key>Comment</key> 7804 <key>Comment</key>
7287 <string /> 7805 <string />
7288 <key>Persist</key> 7806 <key>Persist</key>
7289 <integer>0</integer> 7807 <integer>0</integer>
7290 <key>Type</key> 7808 <key>Type</key>
7291 <string>String</string> 7809 <string>String</string>
7292 <key>Value</key> 7810 <key>Value</key>
7293 <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string> 7811 <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
7294 </map> 7812 </map>
7295 <key>UIImgBtnJumpLeftInUUID</key> 7813 <key>UIImgBtnJumpLeftInUUID</key>
7296 <map> 7814 <map>
7297 <key>Comment</key> 7815 <key>Comment</key>
7298 <string /> 7816 <string />
7299 <key>Persist</key> 7817 <key>Persist</key>
7300 <integer>0</integer> 7818 <integer>0</integer>
7301 <key>Type</key> 7819 <key>Type</key>
7302 <string>String</string> 7820 <string>String</string>
7303 <key>Value</key> 7821 <key>Value</key>
7304 <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string> 7822 <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
7305 </map> 7823 </map>
7306 <key>UIImgBtnJumpLeftOutUUID</key> 7824 <key>UIImgBtnJumpLeftOutUUID</key>
7307 <map> 7825 <map>
7308 <key>Comment</key> 7826 <key>Comment</key>
7309 <string /> 7827 <string />
7310 <key>Persist</key> 7828 <key>Persist</key>
7311 <integer>0</integer> 7829 <integer>0</integer>
7312 <key>Type</key> 7830 <key>Type</key>
7313 <string>String</string> 7831 <string>String</string>
7314 <key>Value</key> 7832 <key>Value</key>
7315 <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string> 7833 <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
7316 </map> 7834 </map>
7317 <key>UIImgBtnJumpRightInUUID</key> 7835 <key>UIImgBtnJumpRightInUUID</key>
7318 <map> 7836 <map>
7319 <key>Comment</key> 7837 <key>Comment</key>
7320 <string /> 7838 <string />
7321 <key>Persist</key> 7839 <key>Persist</key>
7322 <integer>0</integer> 7840 <integer>0</integer>
7323 <key>Type</key> 7841 <key>Type</key>
7324 <string>String</string> 7842 <string>String</string>
7325 <key>Value</key> 7843 <key>Value</key>
7326 <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string> 7844 <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
7327 </map> 7845 </map>
7328 <key>UIImgBtnJumpRightOutUUID</key> 7846 <key>UIImgBtnJumpRightOutUUID</key>
7329 <map> 7847 <map>
7330 <key>Comment</key> 7848 <key>Comment</key>
7331 <string /> 7849 <string />
7332 <key>Persist</key> 7850 <key>Persist</key>
7333 <integer>0</integer> 7851 <integer>0</integer>
7334 <key>Type</key> 7852 <key>Type</key>
7335 <string>String</string> 7853 <string>String</string>
7336 <key>Value</key> 7854 <key>Value</key>
7337 <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string> 7855 <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
7338 </map> 7856 </map>
7339 <key>UIImgBtnLeftInUUID</key> 7857 <key>UIImgBtnLeftInUUID</key>
7340 <map> 7858 <map>
7341 <key>Comment</key> 7859 <key>Comment</key>
7342 <string /> 7860 <string />
7343 <key>Persist</key> 7861 <key>Persist</key>
7344 <integer>0</integer> 7862 <integer>0</integer>
7345 <key>Type</key> 7863 <key>Type</key>
7346 <string>String</string> 7864 <string>String</string>
7347 <key>Value</key> 7865 <key>Value</key>
7348 <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string> 7866 <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
7349 </map> 7867 </map>
7350 <key>UIImgBtnLeftOutUUID</key> 7868 <key>UIImgBtnLeftOutUUID</key>
7351 <map> 7869 <map>
7352 <key>Comment</key> 7870 <key>Comment</key>
7353 <string /> 7871 <string />
7354 <key>Persist</key> 7872 <key>Persist</key>
7355 <integer>0</integer> 7873 <integer>0</integer>
7356 <key>Type</key> 7874 <key>Type</key>
7357 <string>String</string> 7875 <string>String</string>
7358 <key>Value</key> 7876 <key>Value</key>
7359 <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string> 7877 <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
7360 </map> 7878 </map>
7361 <key>UIImgBtnMinimizeActiveUUID</key> 7879 <key>UIImgBtnMinimizeActiveUUID</key>
7362 <map> 7880 <map>
7363 <key>Comment</key> 7881 <key>Comment</key>
7364 <string /> 7882 <string />
7365 <key>Persist</key> 7883 <key>Persist</key>
7366 <integer>0</integer> 7884 <integer>0</integer>
7367 <key>Type</key> 7885 <key>Type</key>
7368 <string>String</string> 7886 <string>String</string>
7369 <key>Value</key> 7887 <key>Value</key>
7370 <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string> 7888 <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
7371 </map> 7889 </map>
7372 <key>UIImgBtnMinimizeInactiveUUID</key> 7890 <key>UIImgBtnMinimizeInactiveUUID</key>
7373 <map> 7891 <map>
7374 <key>Comment</key> 7892 <key>Comment</key>
7375 <string /> 7893 <string />
7376 <key>Persist</key> 7894 <key>Persist</key>
7377 <integer>0</integer> 7895 <integer>0</integer>
7378 <key>Type</key> 7896 <key>Type</key>
7379 <string>String</string> 7897 <string>String</string>
7380 <key>Value</key> 7898 <key>Value</key>
7381 <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string> 7899 <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
7382 </map> 7900 </map>
7383 <key>UIImgBtnMinimizePressedUUID</key> 7901 <key>UIImgBtnMinimizePressedUUID</key>
7384 <map> 7902 <map>
7385 <key>Comment</key> 7903 <key>Comment</key>
7386 <string /> 7904 <string />
7387 <key>Persist</key> 7905 <key>Persist</key>
7388 <integer>0</integer> 7906 <integer>0</integer>
7389 <key>Type</key> 7907 <key>Type</key>
7390 <string>String</string> 7908 <string>String</string>
7391 <key>Value</key> 7909 <key>Value</key>
7392 <string>39801651-26cb-4926-af57-7af9352c273c</string> 7910 <string>39801651-26cb-4926-af57-7af9352c273c</string>
7393 </map> 7911 </map>
7394 <key>UIImgBtnMoveDownInUUID</key> 7912 <key>UIImgBtnMoveDownInUUID</key>
7395 <map> 7913 <map>
7396 <key>Comment</key> 7914 <key>Comment</key>
7397 <string /> 7915 <string />
7398 <key>Persist</key> 7916 <key>Persist</key>
7399 <integer>0</integer> 7917 <integer>0</integer>
7400 <key>Type</key> 7918 <key>Type</key>
7401 <string>String</string> 7919 <string>String</string>
7402 <key>Value</key> 7920 <key>Value</key>
7403 <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string> 7921 <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
7404 </map> 7922 </map>
7405 <key>UIImgBtnMoveDownOutUUID</key> 7923 <key>UIImgBtnMoveDownOutUUID</key>
7406 <map> 7924 <map>
7407 <key>Comment</key> 7925 <key>Comment</key>
7408 <string /> 7926 <string />
7409 <key>Persist</key> 7927 <key>Persist</key>
7410 <integer>0</integer> 7928 <integer>0</integer>
7411 <key>Type</key> 7929 <key>Type</key>
7412 <string>String</string> 7930 <string>String</string>
7413 <key>Value</key> 7931 <key>Value</key>
7414 <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string> 7932 <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
7415 </map> 7933 </map>
7416 <key>UIImgBtnMoveUpInUUID</key> 7934 <key>UIImgBtnMoveUpInUUID</key>
7417 <map> 7935 <map>
7418 <key>Comment</key> 7936 <key>Comment</key>
7419 <string /> 7937 <string />
7420 <key>Persist</key> 7938 <key>Persist</key>
7421 <integer>0</integer> 7939 <integer>0</integer>
7422 <key>Type</key> 7940 <key>Type</key>
7423 <string>String</string> 7941 <string>String</string>
7424 <key>Value</key> 7942 <key>Value</key>
7425 <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string> 7943 <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
7426 </map> 7944 </map>
7427 <key>UIImgBtnMoveUpOutUUID</key> 7945 <key>UIImgBtnMoveUpOutUUID</key>
7428 <map> 7946 <map>
7429 <key>Comment</key> 7947 <key>Comment</key>
7430 <string /> 7948 <string />
7431 <key>Persist</key> 7949 <key>Persist</key>
7432 <integer>0</integer> 7950 <integer>0</integer>
7433 <key>Type</key> 7951 <key>Type</key>
7434 <string>String</string> 7952 <string>String</string>
7435 <key>Value</key> 7953 <key>Value</key>
7436 <string>f887146d-829f-4e39-9211-cf872b78f97c</string> 7954 <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
7437 </map> 7955 </map>
7438 <key>UIImgBtnPanDownInUUID</key> 7956 <key>UIImgBtnPanDownInUUID</key>
7439 <map> 7957 <map>
7440 <key>Comment</key> 7958 <key>Comment</key>
7441 <string /> 7959 <string />
7442 <key>Persist</key> 7960 <key>Persist</key>
7443 <integer>0</integer> 7961 <integer>0</integer>
7444 <key>Type</key> 7962 <key>Type</key>
7445 <string>String</string> 7963 <string>String</string>
7446 <key>Value</key> 7964 <key>Value</key>
7447 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7965 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7448 </map> 7966 </map>
7449 <key>UIImgBtnPanDownOutUUID</key> 7967 <key>UIImgBtnPanDownOutUUID</key>
7450 <map> 7968 <map>
7451 <key>Comment</key> 7969 <key>Comment</key>
7452 <string /> 7970 <string />
7453 <key>Persist</key> 7971 <key>Persist</key>
7454 <integer>0</integer> 7972 <integer>0</integer>
7455 <key>Type</key> 7973 <key>Type</key>
7456 <string>String</string> 7974 <string>String</string>
7457 <key>Value</key> 7975 <key>Value</key>
7458 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7976 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7459 </map> 7977 </map>
7460 <key>UIImgBtnPanLeftInUUID</key> 7978 <key>UIImgBtnPanLeftInUUID</key>
7461 <map> 7979 <map>
7462 <key>Comment</key> 7980 <key>Comment</key>
7463 <string /> 7981 <string />
7464 <key>Persist</key> 7982 <key>Persist</key>
7465 <integer>0</integer> 7983 <integer>0</integer>
7466 <key>Type</key> 7984 <key>Type</key>
7467 <string>String</string> 7985 <string>String</string>
7468 <key>Value</key> 7986 <key>Value</key>
7469 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7987 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7470 </map> 7988 </map>
7471 <key>UIImgBtnPanLeftOutUUID</key> 7989 <key>UIImgBtnPanLeftOutUUID</key>
7472 <map> 7990 <map>
7473 <key>Comment</key> 7991 <key>Comment</key>
7474 <string /> 7992 <string />
7475 <key>Persist</key> 7993 <key>Persist</key>
7476 <integer>0</integer> 7994 <integer>0</integer>
7477 <key>Type</key> 7995 <key>Type</key>
7478 <string>String</string> 7996 <string>String</string>
7479 <key>Value</key> 7997 <key>Value</key>
7480 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7998 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7481 </map> 7999 </map>
7482 <key>UIImgBtnPanRightInUUID</key> 8000 <key>UIImgBtnPanRightInUUID</key>
7483 <map> 8001 <map>
7484 <key>Comment</key> 8002 <key>Comment</key>
7485 <string /> 8003 <string />
7486 <key>Persist</key> 8004 <key>Persist</key>
7487 <integer>0</integer> 8005 <integer>0</integer>
7488 <key>Type</key> 8006 <key>Type</key>
7489 <string>String</string> 8007 <string>String</string>
7490 <key>Value</key> 8008 <key>Value</key>
7491 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 8009 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7492 </map> 8010 </map>
7493 <key>UIImgBtnPanRightOutUUID</key> 8011 <key>UIImgBtnPanRightOutUUID</key>
7494 <map> 8012 <map>
7495 <key>Comment</key> 8013 <key>Comment</key>
7496 <string /> 8014 <string />
7497 <key>Persist</key> 8015 <key>Persist</key>
7498 <integer>0</integer> 8016 <integer>0</integer>
7499 <key>Type</key> 8017 <key>Type</key>
7500 <string>String</string> 8018 <string>String</string>
7501 <key>Value</key> 8019 <key>Value</key>
7502 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 8020 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7503 </map> 8021 </map>
7504 <key>UIImgBtnPanUpInUUID</key> 8022 <key>UIImgBtnPanUpInUUID</key>
7505 <map> 8023 <map>
7506 <key>Comment</key> 8024 <key>Comment</key>
7507 <string /> 8025 <string />
7508 <key>Persist</key> 8026 <key>Persist</key>
7509 <integer>0</integer> 8027 <integer>0</integer>
7510 <key>Type</key> 8028 <key>Type</key>
7511 <string>String</string> 8029 <string>String</string>
7512 <key>Value</key> 8030 <key>Value</key>
7513 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 8031 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7514 </map> 8032 </map>
7515 <key>UIImgBtnPanUpOutUUID</key> 8033 <key>UIImgBtnPanUpOutUUID</key>
7516 <map> 8034 <map>
7517 <key>Comment</key> 8035 <key>Comment</key>
7518 <string /> 8036 <string />
7519 <key>Persist</key> 8037 <key>Persist</key>
7520 <integer>0</integer> 8038 <integer>0</integer>
7521 <key>Type</key> 8039 <key>Type</key>
7522 <string>String</string> 8040 <string>String</string>
7523 <key>Value</key> 8041 <key>Value</key>
7524 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 8042 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7525 </map> 8043 </map>
7526 <key>UIImgBtnRestoreActiveUUID</key> 8044 <key>UIImgBtnRestoreActiveUUID</key>
7527 <map> 8045 <map>
7528 <key>Comment</key> 8046 <key>Comment</key>
7529 <string /> 8047 <string />
7530 <key>Persist</key> 8048 <key>Persist</key>
7531 <integer>0</integer> 8049 <integer>0</integer>
7532 <key>Type</key> 8050 <key>Type</key>
7533 <string>String</string> 8051 <string>String</string>
7534 <key>Value</key> 8052 <key>Value</key>
7535 <string>111b39de-8928-4690-b7b2-e17d5c960277</string> 8053 <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
7536 </map> 8054 </map>
7537 <key>UIImgBtnRestoreInactiveUUID</key> 8055 <key>UIImgBtnRestoreInactiveUUID</key>
7538 <map> 8056 <map>
7539 <key>Comment</key> 8057 <key>Comment</key>
7540 <string /> 8058 <string />
7541 <key>Persist</key> 8059 <key>Persist</key>
7542 <integer>0</integer> 8060 <integer>0</integer>
7543 <key>Type</key> 8061 <key>Type</key>
7544 <string>String</string> 8062 <string>String</string>
7545 <key>Value</key> 8063 <key>Value</key>
7546 <string>0eafa471-70af-4882-b8c1-40a310929744</string> 8064 <string>0eafa471-70af-4882-b8c1-40a310929744</string>
7547 </map> 8065 </map>
7548 <key>UIImgBtnRestorePressedUUID</key> 8066 <key>UIImgBtnRestorePressedUUID</key>
7549 <map> 8067 <map>
7550 <key>Comment</key> 8068 <key>Comment</key>
7551 <string /> 8069 <string />
7552 <key>Persist</key> 8070 <key>Persist</key>
7553 <integer>0</integer> 8071 <integer>0</integer>
7554 <key>Type</key> 8072 <key>Type</key>
7555 <string>String</string> 8073 <string>String</string>
7556 <key>Value</key> 8074 <key>Value</key>
7557 <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string> 8075 <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
7558 </map> 8076 </map>
7559 <key>UIImgBtnRightInUUID</key> 8077 <key>UIImgBtnRightInUUID</key>
7560 <map> 8078 <map>
7561 <key>Comment</key> 8079 <key>Comment</key>
7562 <string /> 8080 <string />
7563 <key>Persist</key> 8081 <key>Persist</key>
7564 <integer>0</integer> 8082 <integer>0</integer>
7565 <key>Type</key> 8083 <key>Type</key>
7566 <string>String</string> 8084 <string>String</string>
7567 <key>Value</key> 8085 <key>Value</key>
7568 <string>5e616d0d-4335-476f-9977-560bccd009da</string> 8086 <string>5e616d0d-4335-476f-9977-560bccd009da</string>
7569 </map> 8087 </map>
7570 <key>UIImgBtnRightOutUUID</key> 8088 <key>UIImgBtnRightOutUUID</key>
7571 <map> 8089 <map>
7572 <key>Comment</key> 8090 <key>Comment</key>
7573 <string /> 8091 <string />
7574 <key>Persist</key> 8092 <key>Persist</key>
7575 <integer>0</integer> 8093 <integer>0</integer>
7576 <key>Type</key> 8094 <key>Type</key>
7577 <string>String</string> 8095 <string>String</string>
7578 <key>Value</key> 8096 <key>Value</key>
7579 <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string> 8097 <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
7580 </map> 8098 </map>
7581 <key>UIImgBtnScrollDownInUUID</key> 8099 <key>UIImgBtnScrollDownInUUID</key>
7582 <map> 8100 <map>
7583 <key>Comment</key> 8101 <key>Comment</key>
7584 <string /> 8102 <string />
7585 <key>Persist</key> 8103 <key>Persist</key>
7586 <integer>0</integer> 8104 <integer>0</integer>
7587 <key>Type</key> 8105 <key>Type</key>
7588 <string>String</string> 8106 <string>String</string>
7589 <key>Value</key> 8107 <key>Value</key>
7590 <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string> 8108 <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
7591 </map> 8109 </map>
7592 <key>UIImgBtnScrollDownOutUUID</key> 8110 <key>UIImgBtnScrollDownOutUUID</key>
7593 <map> 8111 <map>
7594 <key>Comment</key> 8112 <key>Comment</key>
7595 <string /> 8113 <string />
7596 <key>Persist</key> 8114 <key>Persist</key>
7597 <integer>0</integer> 8115 <integer>0</integer>
7598 <key>Type</key> 8116 <key>Type</key>
7599 <string>String</string> 8117 <string>String</string>
7600 <key>Value</key> 8118 <key>Value</key>
7601 <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string> 8119 <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
7602 </map> 8120 </map>
7603 <key>UIImgBtnScrollLeftInUUID</key> 8121 <key>UIImgBtnScrollLeftInUUID</key>
7604 <map> 8122 <map>
7605 <key>Comment</key> 8123 <key>Comment</key>
7606 <string /> 8124 <string />
7607 <key>Persist</key> 8125 <key>Persist</key>
7608 <integer>0</integer> 8126 <integer>0</integer>
7609 <key>Type</key> 8127 <key>Type</key>
7610 <string>String</string> 8128 <string>String</string>
7611 <key>Value</key> 8129 <key>Value</key>
7612 <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string> 8130 <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
7613 </map> 8131 </map>
7614 <key>UIImgBtnScrollLeftOutUUID</key> 8132 <key>UIImgBtnScrollLeftOutUUID</key>
7615 <map> 8133 <map>
7616 <key>Comment</key> 8134 <key>Comment</key>
7617 <string /> 8135 <string />
7618 <key>Persist</key> 8136 <key>Persist</key>
7619 <integer>0</integer> 8137 <integer>0</integer>
7620 <key>Type</key> 8138 <key>Type</key>
7621 <string>String</string> 8139 <string>String</string>
7622 <key>Value</key> 8140 <key>Value</key>
7623 <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string> 8141 <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
7624 </map> 8142 </map>
7625 <key>UIImgBtnScrollRightInUUID</key> 8143 <key>UIImgBtnScrollRightInUUID</key>
7626 <map> 8144 <map>
7627 <key>Comment</key> 8145 <key>Comment</key>
7628 <string /> 8146 <string />
7629 <key>Persist</key> 8147 <key>Persist</key>
7630 <integer>0</integer> 8148 <integer>0</integer>
7631 <key>Type</key> 8149 <key>Type</key>
7632 <string>String</string> 8150 <string>String</string>
7633 <key>Value</key> 8151 <key>Value</key>
7634 <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string> 8152 <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
7635 </map> 8153 </map>
7636 <key>UIImgBtnScrollRightOutUUID</key> 8154 <key>UIImgBtnScrollRightOutUUID</key>
7637 <map> 8155 <map>
7638 <key>Comment</key> 8156 <key>Comment</key>
7639 <string /> 8157 <string />
7640 <key>Persist</key> 8158 <key>Persist</key>
7641 <integer>0</integer> 8159 <integer>0</integer>
7642 <key>Type</key> 8160 <key>Type</key>
7643 <string>String</string> 8161 <string>String</string>
7644 <key>Value</key> 8162 <key>Value</key>
7645 <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string> 8163 <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
7646 </map> 8164 </map>
7647 <key>UIImgBtnScrollUpInUUID</key> 8165 <key>UIImgBtnScrollUpInUUID</key>
7648 <map> 8166 <map>
7649 <key>Comment</key> 8167 <key>Comment</key>
7650 <string /> 8168 <string />
7651 <key>Persist</key> 8169 <key>Persist</key>
7652 <integer>0</integer> 8170 <integer>0</integer>
7653 <key>Type</key> 8171 <key>Type</key>
7654 <string>String</string> 8172 <string>String</string>
7655 <key>Value</key> 8173 <key>Value</key>
7656 <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string> 8174 <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
7657 </map> 8175 </map>
7658 <key>UIImgBtnScrollUpOutUUID</key> 8176 <key>UIImgBtnScrollUpOutUUID</key>
7659 <map> 8177 <map>
7660 <key>Comment</key> 8178 <key>Comment</key>
7661 <string /> 8179 <string />
7662 <key>Persist</key> 8180 <key>Persist</key>
7663 <integer>0</integer> 8181 <integer>0</integer>
7664 <key>Type</key> 8182 <key>Type</key>
7665 <string>String</string> 8183 <string>String</string>
7666 <key>Value</key> 8184 <key>Value</key>
7667 <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string> 8185 <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
7668 </map> 8186 </map>
7669 <key>UIImgBtnSlideLeftInUUID</key> 8187 <key>UIImgBtnSlideLeftInUUID</key>
7670 <map> 8188 <map>
7671 <key>Comment</key> 8189 <key>Comment</key>
7672 <string /> 8190 <string />
7673 <key>Persist</key> 8191 <key>Persist</key>
7674 <integer>0</integer> 8192 <integer>0</integer>
7675 <key>Type</key> 8193 <key>Type</key>
7676 <string>String</string> 8194 <string>String</string>
7677 <key>Value</key> 8195 <key>Value</key>
7678 <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string> 8196 <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
7679 </map> 8197 </map>
7680 <key>UIImgBtnSlideLeftOutUUID</key> 8198 <key>UIImgBtnSlideLeftOutUUID</key>
7681 <map> 8199 <map>
7682 <key>Comment</key> 8200 <key>Comment</key>
7683 <string /> 8201 <string />
7684 <key>Persist</key> 8202 <key>Persist</key>
7685 <integer>0</integer> 8203 <integer>0</integer>
7686 <key>Type</key> 8204 <key>Type</key>
7687 <string>String</string> 8205 <string>String</string>
7688 <key>Value</key> 8206 <key>Value</key>
7689 <string>82476321-0374-4c26-9567-521535ab4cd7</string> 8207 <string>82476321-0374-4c26-9567-521535ab4cd7</string>
7690 </map> 8208 </map>
7691 <key>UIImgBtnSlideRightInUUID</key> 8209 <key>UIImgBtnSlideRightInUUID</key>
7692 <map> 8210 <map>
7693 <key>Comment</key> 8211 <key>Comment</key>
7694 <string /> 8212 <string />
7695 <key>Persist</key> 8213 <key>Persist</key>
7696 <integer>0</integer> 8214 <integer>0</integer>
7697 <key>Type</key> 8215 <key>Type</key>
7698 <string>String</string> 8216 <string>String</string>
7699 <key>Value</key> 8217 <key>Value</key>
7700 <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string> 8218 <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
7701 </map> 8219 </map>
7702 <key>UIImgBtnSlideRightOutUUID</key> 8220 <key>UIImgBtnSlideRightOutUUID</key>
7703 <map> 8221 <map>
7704 <key>Comment</key> 8222 <key>Comment</key>
7705 <string /> 8223 <string />
7706 <key>Persist</key> 8224 <key>Persist</key>
7707 <integer>0</integer> 8225 <integer>0</integer>
7708 <key>Type</key> 8226 <key>Type</key>
7709 <string>String</string> 8227 <string>String</string>
7710 <key>Value</key> 8228 <key>Value</key>
7711 <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string> 8229 <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
7712 </map> 8230 </map>
7713 <key>UIImgBtnSpinDownInUUID</key> 8231 <key>UIImgBtnSpinDownInUUID</key>
7714 <map> 8232 <map>
7715 <key>Comment</key> 8233 <key>Comment</key>
7716 <string /> 8234 <string />
7717 <key>Persist</key> 8235 <key>Persist</key>
7718 <integer>0</integer> 8236 <integer>0</integer>
7719 <key>Type</key> 8237 <key>Type</key>
7720 <string>String</string> 8238 <string>String</string>
7721 <key>Value</key> 8239 <key>Value</key>
7722 <string>a985ac71-052f-48e6-9c33-d931c813ac92</string> 8240 <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
7723 </map> 8241 </map>
7724 <key>UIImgBtnSpinDownOutUUID</key> 8242 <key>UIImgBtnSpinDownOutUUID</key>
7725 <map> 8243 <map>
7726 <key>Comment</key> 8244 <key>Comment</key>
7727 <string /> 8245 <string />
7728 <key>Persist</key> 8246 <key>Persist</key>
7729 <integer>0</integer> 8247 <integer>0</integer>
7730 <key>Type</key> 8248 <key>Type</key>
7731 <string>String</string> 8249 <string>String</string>
7732 <key>Value</key> 8250 <key>Value</key>
7733 <string>b6d240dd-5602-426f-b606-bbb49a30726d</string> 8251 <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
7734 </map> 8252 </map>
7735 <key>UIImgBtnSpinUpInUUID</key> 8253 <key>UIImgBtnSpinUpInUUID</key>
7736 <map> 8254 <map>
7737 <key>Comment</key> 8255 <key>Comment</key>
7738 <string /> 8256 <string />
7739 <key>Persist</key> 8257 <key>Persist</key>
7740 <integer>0</integer> 8258 <integer>0</integer>
7741 <key>Type</key> 8259 <key>Type</key>
7742 <string>String</string> 8260 <string>String</string>
7743 <key>Value</key> 8261 <key>Value</key>
7744 <string>c8450082-96a0-4319-8090-d3ff900b4954</string> 8262 <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
7745 </map> 8263 </map>
7746 <key>UIImgBtnSpinUpOutUUID</key> 8264 <key>UIImgBtnSpinUpOutUUID</key>
7747 <map> 8265 <map>
7748 <key>Comment</key> 8266 <key>Comment</key>
7749 <string /> 8267 <string />
7750 <key>Persist</key> 8268 <key>Persist</key>
7751 <integer>0</integer> 8269 <integer>0</integer>
7752 <key>Type</key> 8270 <key>Type</key>
7753 <string>String</string> 8271 <string>String</string>
7754 <key>Value</key> 8272 <key>Value</key>
7755 <string>56576e6e-6710-4e66-89f9-471b59122794</string> 8273 <string>56576e6e-6710-4e66-89f9-471b59122794</string>
7756 </map> 8274 </map>
7757 <key>UIImgBtnTabBottomInUUID</key> 8275 <key>UIImgBtnTabBottomInUUID</key>
7758 <map> 8276 <map>
7759 <key>Comment</key> 8277 <key>Comment</key>
7760 <string /> 8278 <string />
7761 <key>Persist</key> 8279 <key>Persist</key>
7762 <integer>0</integer> 8280 <integer>0</integer>
7763 <key>Type</key> 8281 <key>Type</key>
7764 <string>String</string> 8282 <string>String</string>
7765 <key>Value</key> 8283 <key>Value</key>
7766 <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string> 8284 <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
7767 </map> 8285 </map>
7768 <key>UIImgBtnTabBottomOutUUID</key> 8286 <key>UIImgBtnTabBottomOutUUID</key>
7769 <map> 8287 <map>
7770 <key>Comment</key> 8288 <key>Comment</key>
7771 <string /> 8289 <string />
7772 <key>Persist</key> 8290 <key>Persist</key>
7773 <integer>0</integer> 8291 <integer>0</integer>
7774 <key>Type</key> 8292 <key>Type</key>
7775 <string>String</string> 8293 <string>String</string>
7776 <key>Value</key> 8294 <key>Value</key>
7777 <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string> 8295 <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
7778 </map> 8296 </map>
7779 <key>UIImgBtnTabBottomPartialInUUID</key> 8297 <key>UIImgBtnTabBottomPartialInUUID</key>
7780 <map> 8298 <map>
7781 <key>Comment</key> 8299 <key>Comment</key>
7782 <string /> 8300 <string />
7783 <key>Persist</key> 8301 <key>Persist</key>
7784 <integer>0</integer> 8302 <integer>0</integer>
7785 <key>Type</key> 8303 <key>Type</key>
7786 <string>String</string> 8304 <string>String</string>
7787 <key>Value</key> 8305 <key>Value</key>
7788 <string>eb0b0904-8c91-4f24-b500-1180b91140de</string> 8306 <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
7789 </map> 8307 </map>
7790 <key>UIImgBtnTabBottomPartialOutUUID</key> 8308 <key>UIImgBtnTabBottomPartialOutUUID</key>
7791 <map> 8309 <map>
7792 <key>Comment</key> 8310 <key>Comment</key>
7793 <string /> 8311 <string />
7794 <key>Persist</key> 8312 <key>Persist</key>
7795 <integer>0</integer> 8313 <integer>0</integer>
7796 <key>Type</key> 8314 <key>Type</key>
7797 <string>String</string> 8315 <string>String</string>
7798 <key>Value</key> 8316 <key>Value</key>
7799 <string>8dca716c-b29c-403a-9886-91c028357d6e</string> 8317 <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
7800 </map> 8318 </map>
7801 <key>UIImgBtnTabTopInUUID</key> 8319 <key>UIImgBtnTabTopInUUID</key>
7802 <map> 8320 <map>
7803 <key>Comment</key> 8321 <key>Comment</key>
7804 <string /> 8322 <string />
7805 <key>Persist</key> 8323 <key>Persist</key>
7806 <integer>0</integer> 8324 <integer>0</integer>
7807 <key>Type</key> 8325 <key>Type</key>
7808 <string>String</string> 8326 <string>String</string>
7809 <key>Value</key> 8327 <key>Value</key>
7810 <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string> 8328 <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
7811 </map> 8329 </map>
7812 <key>UIImgBtnTabTopOutUUID</key> 8330 <key>UIImgBtnTabTopOutUUID</key>
7813 <map> 8331 <map>
7814 <key>Comment</key> 8332 <key>Comment</key>
7815 <string /> 8333 <string />
7816 <key>Persist</key> 8334 <key>Persist</key>
7817 <integer>0</integer> 8335 <integer>0</integer>
7818 <key>Type</key> 8336 <key>Type</key>
7819 <string>String</string> 8337 <string>String</string>
7820 <key>Value</key> 8338 <key>Value</key>
7821 <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string> 8339 <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
7822 </map> 8340 </map>
7823 <key>UIImgBtnTabTopPartialInUUID</key> 8341 <key>UIImgBtnTabTopPartialInUUID</key>
7824 <map> 8342 <map>
7825 <key>Comment</key> 8343 <key>Comment</key>
7826 <string /> 8344 <string />
7827 <key>Persist</key> 8345 <key>Persist</key>
7828 <integer>0</integer> 8346 <integer>0</integer>
7829 <key>Type</key> 8347 <key>Type</key>
7830 <string>String</string> 8348 <string>String</string>
7831 <key>Value</key> 8349 <key>Value</key>
7832 <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string> 8350 <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
7833 </map> 8351 </map>
7834 <key>UIImgBtnTabTopPartialOutUUID</key> 8352 <key>UIImgBtnTabTopPartialOutUUID</key>
7835 <map> 8353 <map>
7836 <key>Comment</key> 8354 <key>Comment</key>
7837 <string /> 8355 <string />
7838 <key>Persist</key> 8356 <key>Persist</key>
7839 <integer>0</integer> 8357 <integer>0</integer>
7840 <key>Type</key> 8358 <key>Type</key>
7841 <string>String</string> 8359 <string>String</string>
7842 <key>Value</key> 8360 <key>Value</key>
7843 <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string> 8361 <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
7844 </map> 8362 </map>
7845 <key>UIImgBtnTearOffActiveUUID</key> 8363 <key>UIImgBtnTearOffActiveUUID</key>
7846 <map> 8364 <map>
7847 <key>Comment</key> 8365 <key>Comment</key>
7848 <string /> 8366 <string />
7849 <key>Persist</key> 8367 <key>Persist</key>
7850 <integer>0</integer> 8368 <integer>0</integer>
7851 <key>Type</key> 8369 <key>Type</key>
7852 <string>String</string> 8370 <string>String</string>
7853 <key>Value</key> 8371 <key>Value</key>
7854 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> 8372 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7855 </map> 8373 </map>
7856 <key>UIImgBtnTearOffInactiveUUID</key> 8374 <key>UIImgBtnTearOffInactiveUUID</key>
7857 <map> 8375 <map>
7858 <key>Comment</key> 8376 <key>Comment</key>
7859 <string /> 8377 <string />
7860 <key>Persist</key> 8378 <key>Persist</key>
7861 <integer>0</integer> 8379 <integer>0</integer>
7862 <key>Type</key> 8380 <key>Type</key>
7863 <string>String</string> 8381 <string>String</string>
7864 <key>Value</key> 8382 <key>Value</key>
7865 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> 8383 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7866 </map> 8384 </map>
7867 <key>UIImgBtnTearOffPressedUUID</key> 8385 <key>UIImgBtnTearOffPressedUUID</key>
7868 <map> 8386 <map>
7869 <key>Comment</key> 8387 <key>Comment</key>
7870 <string /> 8388 <string />
7871 <key>Persist</key> 8389 <key>Persist</key>
7872 <integer>0</integer> 8390 <integer>0</integer>
7873 <key>Type</key> 8391 <key>Type</key>
7874 <string>String</string> 8392 <string>String</string>
7875 <key>Value</key> 8393 <key>Value</key>
7876 <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string> 8394 <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
7877 </map> 8395 </map>
7878 <key>UIImgCheckboxActiveSelectedUUID</key> 8396 <key>UIImgCheckboxActiveSelectedUUID</key>
7879 <map> 8397 <map>
7880 <key>Comment</key> 8398 <key>Comment</key>
7881 <string /> 8399 <string />
7882 <key>Persist</key> 8400 <key>Persist</key>
7883 <integer>0</integer> 8401 <integer>0</integer>
7884 <key>Type</key> 8402 <key>Type</key>
7885 <string>String</string> 8403 <string>String</string>
7886 <key>Value</key> 8404 <key>Value</key>
7887 <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string> 8405 <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
7888 </map> 8406 </map>
7889 <key>UIImgCheckboxActiveUUID</key> 8407 <key>UIImgCheckboxActiveUUID</key>
7890 <map> 8408 <map>
7891 <key>Comment</key> 8409 <key>Comment</key>
7892 <string /> 8410 <string />
7893 <key>Persist</key> 8411 <key>Persist</key>
7894 <integer>0</integer> 8412 <integer>0</integer>
7895 <key>Type</key> 8413 <key>Type</key>
7896 <string>String</string> 8414 <string>String</string>
7897 <key>Value</key> 8415 <key>Value</key>
7898 <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string> 8416 <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
7899 </map> 8417 </map>
7900 <key>UIImgCheckboxInactiveSelectedUUID</key> 8418 <key>UIImgCheckboxInactiveSelectedUUID</key>
7901 <map> 8419 <map>
7902 <key>Comment</key> 8420 <key>Comment</key>
7903 <string /> 8421 <string />
7904 <key>Persist</key> 8422 <key>Persist</key>
7905 <integer>0</integer> 8423 <integer>0</integer>
7906 <key>Type</key> 8424 <key>Type</key>
7907 <string>String</string> 8425 <string>String</string>
7908 <key>Value</key> 8426 <key>Value</key>
7909 <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string> 8427 <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
7910 </map> 8428 </map>
7911 <key>UIImgCheckboxInactiveUUID</key> 8429 <key>UIImgCheckboxInactiveUUID</key>
7912 <map> 8430 <map>
7913 <key>Comment</key> 8431 <key>Comment</key>
7914 <string /> 8432 <string />
7915 <key>Persist</key> 8433 <key>Persist</key>
7916 <integer>0</integer> 8434 <integer>0</integer>
7917 <key>Type</key> 8435 <key>Type</key>
7918 <string>String</string> 8436 <string>String</string>
7919 <key>Value</key> 8437 <key>Value</key>
7920 <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string> 8438 <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
7921 </map> 8439 </map>
7922 <key>UIImgCreateSelectedUUID</key> 8440 <key>UIImgCreateSelectedUUID</key>
7923 <map> 8441 <map>
7924 <key>Comment</key> 8442 <key>Comment</key>
7925 <string /> 8443 <string />
7926 <key>Persist</key> 8444 <key>Persist</key>
7927 <integer>0</integer> 8445 <integer>0</integer>
7928 <key>Type</key> 8446 <key>Type</key>
7929 <string>String</string> 8447 <string>String</string>
7930 <key>Value</key> 8448 <key>Value</key>
7931 <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string> 8449 <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
7932 </map> 8450 </map>
7933 <key>UIImgCreateUUID</key> 8451 <key>UIImgCreateUUID</key>
7934 <map> 8452 <map>
7935 <key>Comment</key> 8453 <key>Comment</key>
7936 <string /> 8454 <string />
7937 <key>Persist</key> 8455 <key>Persist</key>
7938 <integer>0</integer> 8456 <integer>0</integer>
7939 <key>Type</key> 8457 <key>Type</key>
7940 <string>String</string> 8458 <string>String</string>
7941 <key>Value</key> 8459 <key>Value</key>
7942 <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string> 8460 <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
7943 </map> 8461 </map>
7944 <key>UIImgCrosshairsUUID</key> 8462 <key>UIImgCrosshairsUUID</key>
7945 <map> 8463 <map>
7946 <key>Comment</key> 8464 <key>Comment</key>
7947 <string>Image to use for crosshair display (UUID texture reference)</string> 8465 <string>Image to use for crosshair display (UUID texture reference)</string>
7948 <key>Persist</key> 8466 <key>Persist</key>
7949 <integer>1</integer> 8467 <integer>1</integer>
7950 <key>Type</key> 8468 <key>Type</key>
7951 <string>String</string> 8469 <string>String</string>
7952 <key>Value</key> 8470 <key>Value</key>
7953 <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string> 8471 <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
7954 </map> 8472 </map>
7955 <key>UIImgDefaultEyesUUID</key> 8473 <key>UIImgDefaultEyesUUID</key>
7956 <map> 8474 <map>
7957 <key>Comment</key> 8475 <key>Comment</key>
7958 <string /> 8476 <string />
7959 <key>Persist</key> 8477 <key>Persist</key>
7960 <integer>0</integer> 8478 <integer>0</integer>
7961 <key>Type</key> 8479 <key>Type</key>
7962 <string>String</string> 8480 <string>String</string>
7963 <key>Value</key> 8481 <key>Value</key>
7964 <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string> 8482 <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
7965 </map> 8483 </map>
7966 <key>UIImgDefaultGlovesUUID</key> 8484 <key>UIImgDefaultGlovesUUID</key>
7967 <map> 8485 <map>
7968 <key>Comment</key> 8486 <key>Comment</key>
7969 <string /> 8487 <string />
7970 <key>Persist</key> 8488 <key>Persist</key>
7971 <integer>0</integer> 8489 <integer>0</integer>
7972 <key>Type</key> 8490 <key>Type</key>
7973 <string>String</string> 8491 <string>String</string>
7974 <key>Value</key> 8492 <key>Value</key>
7975 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8493 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7976 </map> 8494 </map>
7977 <key>UIImgDefaultHairUUID</key> 8495 <key>UIImgDefaultHairUUID</key>
7978 <map> 8496 <map>
7979 <key>Comment</key> 8497 <key>Comment</key>
7980 <string /> 8498 <string />
7981 <key>Persist</key> 8499 <key>Persist</key>
7982 <integer>0</integer> 8500 <integer>0</integer>
7983 <key>Type</key> 8501 <key>Type</key>
7984 <string>String</string> 8502 <string>String</string>
7985 <key>Value</key> 8503 <key>Value</key>
7986 <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string> 8504 <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
7987 </map> 8505 </map>
7988 <key>UIImgDefaultJacketUUID</key> 8506 <key>UIImgDefaultJacketUUID</key>
7989 <map> 8507 <map>
7990 <key>Comment</key> 8508 <key>Comment</key>
7991 <string /> 8509 <string />
7992 <key>Persist</key> 8510 <key>Persist</key>
7993 <integer>0</integer> 8511 <integer>0</integer>
7994 <key>Type</key> 8512 <key>Type</key>
7995 <string>String</string> 8513 <string>String</string>
7996 <key>Value</key> 8514 <key>Value</key>
7997 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8515 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7998 </map> 8516 </map>
7999 <key>UIImgDefaultPantsUUID</key> 8517 <key>UIImgDefaultPantsUUID</key>
8000 <map> 8518 <map>
8001 <key>Comment</key> 8519 <key>Comment</key>
8002 <string /> 8520 <string />
8003 <key>Persist</key> 8521 <key>Persist</key>
8004 <integer>0</integer> 8522 <integer>0</integer>
8005 <key>Type</key> 8523 <key>Type</key>
8006 <string>String</string> 8524 <string>String</string>
8007 <key>Value</key> 8525 <key>Value</key>
8008 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8526 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8009 </map> 8527 </map>
8010 <key>UIImgDefaultShirtUUID</key> 8528 <key>UIImgDefaultShirtUUID</key>
8011 <map> 8529 <map>
8012 <key>Comment</key> 8530 <key>Comment</key>
8013 <string /> 8531 <string />
8014 <key>Persist</key> 8532 <key>Persist</key>
8015 <integer>0</integer> 8533 <integer>0</integer>
8016 <key>Type</key> 8534 <key>Type</key>
8017 <string>String</string> 8535 <string>String</string>
8018 <key>Value</key> 8536 <key>Value</key>
8019 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8537 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8020 </map> 8538 </map>
8021 <key>UIImgDefaultShoesUUID</key> 8539 <key>UIImgDefaultShoesUUID</key>
8022 <map> 8540 <map>
8023 <key>Comment</key> 8541 <key>Comment</key>
8024 <string /> 8542 <string />
8025 <key>Persist</key> 8543 <key>Persist</key>
8026 <integer>0</integer> 8544 <integer>0</integer>
8027 <key>Type</key> 8545 <key>Type</key>
8028 <string>String</string> 8546 <string>String</string>
8029 <key>Value</key> 8547 <key>Value</key>
8030 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8548 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8031 </map> 8549 </map>
8032 <key>UIImgDefaultSkirtUUID</key> 8550 <key>UIImgDefaultSkirtUUID</key>
8033 <map> 8551 <map>
8034 <key>Comment</key> 8552 <key>Comment</key>
8035 <string /> 8553 <string />
8036 <key>Persist</key> 8554 <key>Persist</key>
8037 <integer>0</integer> 8555 <integer>0</integer>
8038 <key>Type</key> 8556 <key>Type</key>
8039 <string>String</string> 8557 <string>String</string>
8040 <key>Value</key> 8558 <key>Value</key>
8041 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8559 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8042 </map> 8560 </map>
8043 <key>UIImgDefaultSocksUUID</key> 8561 <key>UIImgDefaultSocksUUID</key>
8044 <map> 8562 <map>
8045 <key>Comment</key> 8563 <key>Comment</key>
8046 <string /> 8564 <string />
8047 <key>Persist</key> 8565 <key>Persist</key>
8048 <integer>0</integer> 8566 <integer>0</integer>
8049 <key>Type</key> 8567 <key>Type</key>
8050 <string>String</string> 8568 <string>String</string>
8051 <key>Value</key> 8569 <key>Value</key>
8052 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8570 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8053 </map> 8571 </map>
8054 <key>UIImgDefaultUnderwearUUID</key> 8572 <key>UIImgDefaultUnderwearUUID</key>
8055 <map> 8573 <map>
8056 <key>Comment</key> 8574 <key>Comment</key>
8057 <string /> 8575 <string />
8058 <key>Persist</key> 8576 <key>Persist</key>
8059 <integer>0</integer> 8577 <integer>0</integer>
8060 <key>Type</key> 8578 <key>Type</key>
8061 <string>String</string> 8579 <string>String</string>
8062 <key>Value</key> 8580 <key>Value</key>
8063 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8581 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8064 </map> 8582 </map>
8065 <key>UIImgDirectionArrowUUID</key> 8583 <key>UIImgDirectionArrowUUID</key>
8066 <map> 8584 <map>
8067 <key>Comment</key> 8585 <key>Comment</key>
8068 <string /> 8586 <string />
8069 <key>Persist</key> 8587 <key>Persist</key>
8070 <integer>0</integer> 8588 <integer>0</integer>
8071 <key>Type</key> 8589 <key>Type</key>
8072 <string>String</string> 8590 <string>String</string>
8073 <key>Value</key> 8591 <key>Value</key>
8074 <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string> 8592 <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
8075 </map> 8593 </map>
8076 <key>UIImgFaceSelectedUUID</key> 8594 <key>UIImgFaceSelectedUUID</key>
8077 <map> 8595 <map>
8078 <key>Comment</key> 8596 <key>Comment</key>
8079 <string /> 8597 <string />
8080 <key>Persist</key> 8598 <key>Persist</key>
8081 <integer>0</integer> 8599 <integer>0</integer>
8082 <key>Type</key> 8600 <key>Type</key>
8083 <string>String</string> 8601 <string>String</string>
8084 <key>Value</key> 8602 <key>Value</key>
8085 <string>b4870163-6208-42a9-9801-93133bf9a6cd</string> 8603 <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
8086 </map> 8604 </map>
8087 <key>UIImgFaceUUID</key> 8605 <key>UIImgFaceUUID</key>
8088 <map> 8606 <map>
8089 <key>Comment</key> 8607 <key>Comment</key>
8090 <string /> 8608 <string />
8091 <key>Persist</key> 8609 <key>Persist</key>
8092 <integer>0</integer> 8610 <integer>0</integer>
8093 <key>Type</key> 8611 <key>Type</key>
8094 <string>String</string> 8612 <string>String</string>
8095 <key>Value</key> 8613 <key>Value</key>
8096 <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string> 8614 <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
8097 </map> 8615 </map>
8098 <key>UIImgFocusSelectedUUID</key> 8616 <key>UIImgFocusSelectedUUID</key>
8099 <map> 8617 <map>
8100 <key>Comment</key> 8618 <key>Comment</key>
8101 <string /> 8619 <string />
8102 <key>Persist</key> 8620 <key>Persist</key>
8103 <integer>0</integer> 8621 <integer>0</integer>
8104 <key>Type</key> 8622 <key>Type</key>
8105 <string>String</string> 8623 <string>String</string>
8106 <key>Value</key> 8624 <key>Value</key>
8107 <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string> 8625 <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
8108 </map> 8626 </map>
8109 <key>UIImgFocusUUID</key> 8627 <key>UIImgFocusUUID</key>
8110 <map> 8628 <map>
8111 <key>Comment</key> 8629 <key>Comment</key>
8112 <string /> 8630 <string />
8113 <key>Persist</key> 8631 <key>Persist</key>
8114 <integer>0</integer> 8632 <integer>0</integer>
8115 <key>Type</key> 8633 <key>Type</key>
8116 <string>String</string> 8634 <string>String</string>
8117 <key>Value</key> 8635 <key>Value</key>
8118 <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string> 8636 <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
8119 </map> 8637 </map>
8120 <key>UIImgGrabSelectedUUID</key> 8638 <key>UIImgGrabSelectedUUID</key>
8121 <map> 8639 <map>
8122 <key>Comment</key> 8640 <key>Comment</key>
8123 <string /> 8641 <string />
8124 <key>Persist</key> 8642 <key>Persist</key>
8125 <integer>0</integer> 8643 <integer>0</integer>
8126 <key>Type</key> 8644 <key>Type</key>
8127 <string>String</string> 8645 <string>String</string>
8128 <key>Value</key> 8646 <key>Value</key>
8129 <string>c1e21504-f136-451d-b8e9-929037812f1d</string> 8647 <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
8130 </map> 8648 </map>
8131 <key>UIImgGrabUUID</key> 8649 <key>UIImgGrabUUID</key>
8132 <map> 8650 <map>
8133 <key>Comment</key> 8651 <key>Comment</key>
8134 <string /> 8652 <string />
8135 <key>Persist</key> 8653 <key>Persist</key>
8136 <integer>0</integer> 8654 <integer>0</integer>
8137 <key>Type</key> 8655 <key>Type</key>
8138 <string>String</string> 8656 <string>String</string>
8139 <key>Value</key> 8657 <key>Value</key>
8140 <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string> 8658 <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
8141 </map> 8659 </map>
8142 <key>UIImgMoveSelectedUUID</key> 8660 <key>UIImgMoveSelectedUUID</key>
8143 <map> 8661 <map>
8144 <key>Comment</key> 8662 <key>Comment</key>
8145 <string /> 8663 <string />
8146 <key>Persist</key> 8664 <key>Persist</key>
8147 <integer>0</integer> 8665 <integer>0</integer>
8148 <key>Type</key> 8666 <key>Type</key>
8149 <string>String</string> 8667 <string>String</string>
8150 <key>Value</key> 8668 <key>Value</key>
8151 <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string> 8669 <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
8152 </map> 8670 </map>
8153 <key>UIImgMoveUUID</key> 8671 <key>UIImgMoveUUID</key>
8154 <map> 8672 <map>
8155 <key>Comment</key> 8673 <key>Comment</key>
8156 <string /> 8674 <string />
8157 <key>Persist</key> 8675 <key>Persist</key>
8158 <integer>0</integer> 8676 <integer>0</integer>
8159 <key>Type</key> 8677 <key>Type</key>
8160 <string>String</string> 8678 <string>String</string>
8161 <key>Value</key> 8679 <key>Value</key>
8162 <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string> 8680 <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
8163 </map> 8681 </map>
8164 <key>UIImgRadioActiveSelectedUUID</key> 8682 <key>UIImgRadioActiveSelectedUUID</key>
8165 <map> 8683 <map>
8166 <key>Comment</key> 8684 <key>Comment</key>
8167 <string /> 8685 <string />
8168 <key>Persist</key> 8686 <key>Persist</key>
8169 <integer>0</integer> 8687 <integer>0</integer>
8170 <key>Type</key> 8688 <key>Type</key>
8171 <string>String</string> 8689 <string>String</string>
8172 <key>Value</key> 8690 <key>Value</key>
8173 <string>52f09e07-5816-4052-953c-94c6c10479b7</string> 8691 <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
8174 </map> 8692 </map>
8175 <key>UIImgRadioActiveUUID</key> 8693 <key>UIImgRadioActiveUUID</key>
8176 <map> 8694 <map>
8177 <key>Comment</key> 8695 <key>Comment</key>
8178 <string /> 8696 <string />
8179 <key>Persist</key> 8697 <key>Persist</key>
8180 <integer>0</integer> 8698 <integer>0</integer>
8181 <key>Type</key> 8699 <key>Type</key>
8182 <string>String</string> 8700 <string>String</string>
8183 <key>Value</key> 8701 <key>Value</key>
8184 <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string> 8702 <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
8185 </map> 8703 </map>
8186 <key>UIImgRadioInactiveSelectedUUID</key> 8704 <key>UIImgRadioInactiveSelectedUUID</key>
8187 <map> 8705 <map>
8188 <key>Comment</key> 8706 <key>Comment</key>
8189 <string /> 8707 <string />
8190 <key>Persist</key> 8708 <key>Persist</key>
8191 <integer>0</integer> 8709 <integer>0</integer>
8192 <key>Type</key> 8710 <key>Type</key>
8193 <string>String</string> 8711 <string>String</string>
8194 <key>Value</key> 8712 <key>Value</key>
8195 <string>1975db39-aa29-4251-aea0-409ac09d414d</string> 8713 <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
8196 </map> 8714 </map>
8197 <key>UIImgRadioInactiveUUID</key> 8715 <key>UIImgRadioInactiveUUID</key>
8198 <map> 8716 <map>
8199 <key>Comment</key> 8717 <key>Comment</key>
8200 <string /> 8718 <string />
8201 <key>Persist</key> 8719 <key>Persist</key>
8202 <integer>0</integer> 8720 <integer>0</integer>
8203 <key>Type</key> 8721 <key>Type</key>
8204 <string>String</string> 8722 <string>String</string>
8205 <key>Value</key> 8723 <key>Value</key>
8206 <string>90688481-67ff-4af0-be69-4aa084bcad1e</string> 8724 <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
8207 </map> 8725 </map>
8208 <key>UIImgResizeBottomRightUUID</key> 8726 <key>UIImgResizeBottomRightUUID</key>
8209 <map> 8727 <map>
8210 <key>Comment</key> 8728 <key>Comment</key>
8211 <string /> 8729 <string />
8212 <key>Persist</key> 8730 <key>Persist</key>
8213 <integer>0</integer> 8731 <integer>0</integer>
8214 <key>Type</key> 8732 <key>Type</key>
8215 <string>String</string> 8733 <string>String</string>
8216 <key>Value</key> 8734 <key>Value</key>
8217 <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string> 8735 <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
8218 </map> 8736 </map>
8219 <key>UIImgRotateSelectedUUID</key> 8737 <key>UIImgRotateSelectedUUID</key>
8220 <map> 8738 <map>
8221 <key>Comment</key> 8739 <key>Comment</key>
8222 <string /> 8740 <string />
8223 <key>Persist</key> 8741 <key>Persist</key>
8224 <integer>0</integer> 8742 <integer>0</integer>
8225 <key>Type</key> 8743 <key>Type</key>
8226 <string>String</string> 8744 <string>String</string>
8227 <key>Value</key> 8745 <key>Value</key>
8228 <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string> 8746 <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
8229 </map> 8747 </map>
8230 <key>UIImgRotateUUID</key> 8748 <key>UIImgRotateUUID</key>
8231 <map> 8749 <map>
8232 <key>Comment</key> 8750 <key>Comment</key>
8233 <string /> 8751 <string />
8234 <key>Persist</key> 8752 <key>Persist</key>
8235 <integer>0</integer> 8753 <integer>0</integer>
8236 <key>Type</key> 8754 <key>Type</key>
8237 <string>String</string> 8755 <string>String</string>
8238 <key>Value</key> 8756 <key>Value</key>
8239 <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string> 8757 <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
8240 </map> 8758 </map>
8241 <key>UIImgScaleSelectedUUID</key> 8759 <key>UIImgScaleSelectedUUID</key>
8242 <map> 8760 <map>
8243 <key>Comment</key> 8761 <key>Comment</key>
8244 <string /> 8762 <string />
8245 <key>Persist</key> 8763 <key>Persist</key>
8246 <integer>0</integer> 8764 <integer>0</integer>
8247 <key>Type</key> 8765 <key>Type</key>
8248 <string>String</string> 8766 <string>String</string>
8249 <key>Value</key> 8767 <key>Value</key>
8250 <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string> 8768 <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
8251 </map> 8769 </map>
8252 <key>UIImgScaleUUID</key> 8770 <key>UIImgScaleUUID</key>
8253 <map> 8771 <map>
8254 <key>Comment</key> 8772 <key>Comment</key>
8255 <string /> 8773 <string />
8256 <key>Persist</key> 8774 <key>Persist</key>
8257 <integer>0</integer> 8775 <integer>0</integer>
8258 <key>Type</key> 8776 <key>Type</key>
8259 <string>String</string> 8777 <string>String</string>
8260 <key>Value</key> 8778 <key>Value</key>
8261 <string>88a90fef-b448-4883-9344-ecf378a60433</string> 8779 <string>88a90fef-b448-4883-9344-ecf378a60433</string>
8262 </map> 8780 </map>
8263 <key>UIImgWhiteUUID</key> 8781 <key>UIImgWhiteUUID</key>
8264 <map> 8782 <map>
8265 <key>Comment</key> 8783 <key>Comment</key>
8266 <string /> 8784 <string />
8267 <key>Persist</key> 8785 <key>Persist</key>
8268 <integer>0</integer> 8786 <integer>0</integer>
8269 <key>Type</key> 8787 <key>Type</key>
8270 <string>String</string> 8788 <string>String</string>
8271 <key>Value</key> 8789 <key>Value</key>
8272 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8790 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8273 </map> 8791 </map>
8274 <key>UIScaleFactor</key> 8792 <key>UIScaleFactor</key>
8275 <map> 8793 <map>
8276 <key>Comment</key> 8794 <key>Comment</key>
8277 <string>Size of UI relative to default layout on 1024x768 screen</string> 8795 <string>Size of UI relative to default layout on 1024x768 screen</string>
8278 <key>Persist</key> 8796 <key>Persist</key>
8279 <integer>1</integer> 8797 <integer>1</integer>
8280 <key>Type</key> 8798 <key>Type</key>
8281 <string>F32</string> 8799 <string>F32</string>
8282 <key>Value</key> 8800 <key>Value</key>
8283 <real>1</real> 8801 <real>1.0</real>
8284 </map> 8802 </map>
8285 <key>UISndAlert</key> 8803 <key>UISndAlert</key>
8286 <map> 8804 <map>
8287 <key>Comment</key> 8805 <key>Comment</key>
8288 <string>Sound file for alerts (uuid for sound asset)</string> 8806 <string>Sound file for alerts (uuid for sound asset)</string>
8289 <key>Persist</key> 8807 <key>Persist</key>
8290 <integer>1</integer> 8808 <integer>1</integer>
8291 <key>Type</key> 8809 <key>Type</key>
8292 <string>String</string> 8810 <string>String</string>
8293 <key>Value</key> 8811 <key>Value</key>
8294 <string>ed124764-705d-d497-167a-182cd9fa2e6c</string> 8812 <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
8295 </map> 8813 </map>
8296 <key>UISndBadKeystroke</key> 8814 <key>UISndBadKeystroke</key>
8297 <map> 8815 <map>
8298 <key>Comment</key> 8816 <key>Comment</key>
8299 <string>Sound file for invalid keystroke (uuid for sound asset)</string> 8817 <string>Sound file for invalid keystroke (uuid for sound asset)</string>
8300 <key>Persist</key> 8818 <key>Persist</key>
8301 <integer>1</integer> 8819 <integer>1</integer>
8302 <key>Type</key> 8820 <key>Type</key>
8303 <string>String</string> 8821 <string>String</string>
8304 <key>Value</key> 8822 <key>Value</key>
8305 <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string> 8823 <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
8306 </map> 8824 </map>
8307 <key>UISndClick</key> 8825 <key>UISndClick</key>
8308 <map> 8826 <map>
8309 <key>Comment</key> 8827 <key>Comment</key>
8310 <string>Sound file for mouse click (uuid for sound asset)</string> 8828 <string>Sound file for mouse click (uuid for sound asset)</string>
8311 <key>Persist</key> 8829 <key>Persist</key>
8312 <integer>1</integer> 8830 <integer>1</integer>
8313 <key>Type</key> 8831 <key>Type</key>
8314 <string>String</string> 8832 <string>String</string>
8315 <key>Value</key> 8833 <key>Value</key>
8316 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> 8834 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8317 </map> 8835 </map>
8318 <key>UISndClickRelease</key> 8836 <key>UISndClickRelease</key>
8319 <map> 8837 <map>
8320 <key>Comment</key> 8838 <key>Comment</key>
8321 <string>Sound file for mouse button release (uuid for sound asset)</string> 8839 <string>Sound file for mouse button release (uuid for sound asset)</string>
8322 <key>Persist</key> 8840 <key>Persist</key>
8323 <integer>1</integer> 8841 <integer>1</integer>
8324 <key>Type</key> 8842 <key>Type</key>
8325 <string>String</string> 8843 <string>String</string>
8326 <key>Value</key> 8844 <key>Value</key>
8327 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> 8845 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8328 </map> 8846 </map>
8329 <key>UISndDebugSpamToggle</key> 8847 <key>UISndDebugSpamToggle</key>
8330 <map> 8848 <map>
8331 <key>Comment</key> 8849 <key>Comment</key>
8332 <string>Log UI sound effects as they are played</string> 8850 <string>Log UI sound effects as they are played</string>
8333 <key>Persist</key> 8851 <key>Persist</key>
8334 <integer>1</integer> 8852 <integer>1</integer>
8335 <key>Type</key> 8853 <key>Type</key>
8336 <string>Boolean</string> 8854 <string>Boolean</string>
8337 <key>Value</key> 8855 <key>Value</key>
8338 <integer>0</integer> 8856 <integer>0</integer>
8339 </map> 8857 </map>
8340 <key>UISndHealthReductionF</key> 8858 <key>UISndHealthReductionF</key>
8341 <map> 8859 <map>
8342 <key>Comment</key> 8860 <key>Comment</key>
8343 <string>Sound file for female pain (uuid for sound asset)</string> 8861 <string>Sound file for female pain (uuid for sound asset)</string>
8344 <key>Persist</key> 8862 <key>Persist</key>
8345 <integer>1</integer> 8863 <integer>1</integer>
8346 <key>Type</key> 8864 <key>Type</key>
8347 <string>String</string> 8865 <string>String</string>
8348 <key>Value</key> 8866 <key>Value</key>
8349 <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string> 8867 <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
8350 </map> 8868 </map>
8351 <key>UISndHealthReductionM</key> 8869 <key>UISndHealthReductionM</key>
8352 <map> 8870 <map>
8353 <key>Comment</key> 8871 <key>Comment</key>
8354 <string>Sound file for male pain (uuid for sound asset)</string> 8872 <string>Sound file for male pain (uuid for sound asset)</string>
8355 <key>Persist</key> 8873 <key>Persist</key>
8356 <integer>1</integer> 8874 <integer>1</integer>
8357 <key>Type</key> 8875 <key>Type</key>
8358 <string>String</string> 8876 <string>String</string>
8359 <key>Value</key> 8877 <key>Value</key>
8360 <string>e057c244-5768-1056-c37e-1537454eeb62</string> 8878 <string>e057c244-5768-1056-c37e-1537454eeb62</string>
8361 </map> 8879 </map>
8362 <key>UISndHealthReductionThreshold</key> 8880 <key>UISndHealthReductionThreshold</key>
8363 <map> 8881 <map>
8364 <key>Comment</key> 8882 <key>Comment</key>
8365 <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string> 8883 <string>Amount of health reduction required to trigger "pain" sound</string>
8366 <key>Persist</key> 8884 <key>Persist</key>
8367 <integer>1</integer> 8885 <integer>1</integer>
8368 <key>Type</key> 8886 <key>Type</key>
8369 <string>F32</string> 8887 <string>F32</string>
8370 <key>Value</key> 8888 <key>Value</key>
8371 <real>10</real> 8889 <real>10.0</real>
8372 </map> 8890 </map>
8373 <key>UISndInvalidOp</key> 8891 <key>UISndInvalidOp</key>
8374 <map> 8892 <map>
8375 <key>Comment</key> 8893 <key>Comment</key>
8376 <string>Sound file for invalid operations (uuid for sound asset)</string> 8894 <string>Sound file for invalid operations (uuid for sound asset)</string>
8377 <key>Persist</key> 8895 <key>Persist</key>
8378 <integer>1</integer> 8896 <integer>1</integer>
8379 <key>Type</key> 8897 <key>Type</key>
8380 <string>String</string> 8898 <string>String</string>
8381 <key>Value</key> 8899 <key>Value</key>
8382 <string>4174f859-0d3d-c517-c424-72923dc21f65</string> 8900 <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
8383 </map> 8901 </map>
8384 <key>UISndMoneyChangeDown</key> 8902 <key>UISndMoneyChangeDown</key>
8385 <map> 8903 <map>
8386 <key>Comment</key> 8904 <key>Comment</key>
8387 <string>Sound file for L$ balance increase (uuid for sound asset)</string> 8905 <string>Sound file for L$ balance increase (uuid for sound asset)</string>
8388 <key>Persist</key> 8906 <key>Persist</key>
8389 <integer>1</integer> 8907 <integer>1</integer>
8390 <key>Type</key> 8908 <key>Type</key>
8391 <string>String</string> 8909 <string>String</string>
8392 <key>Value</key> 8910 <key>Value</key>
8393 <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string> 8911 <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
8394 </map> 8912 </map>
8395 <key>UISndMoneyChangeThreshold</key> 8913 <key>UISndMoneyChangeThreshold</key>
8396 <map> 8914 <map>
8397 <key>Comment</key> 8915 <key>Comment</key>
8398 <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string> 8916 <string>Amount of change in L$ balance required to trigger "money" sound</string>
8399 <key>Persist</key> 8917 <key>Persist</key>
8400 <integer>1</integer> 8918 <integer>1</integer>
8401 <key>Type</key> 8919 <key>Type</key>
8402 <string>F32</string> 8920 <string>F32</string>
8403 <key>Value</key> 8921 <key>Value</key>
8404 <real>50</real> 8922 <real>50.0</real>
8405 </map> 8923 </map>
8406 <key>UISndMoneyChangeUp</key> 8924 <key>UISndMoneyChangeUp</key>
8407 <map> 8925 <map>
8408 <key>Comment</key> 8926 <key>Comment</key>
8409 <string>Sound file for L$ balance decrease(uuid for sound asset)</string> 8927 <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
8410 <key>Persist</key> 8928 <key>Persist</key>
8411 <integer>1</integer> 8929 <integer>1</integer>
8412 <key>Type</key> 8930 <key>Type</key>
8413 <string>String</string> 8931 <string>String</string>
8414 <key>Value</key> 8932 <key>Value</key>
8415 <string>77a018af-098e-c037-51a6-178f05877c6f</string> 8933 <string>77a018af-098e-c037-51a6-178f05877c6f</string>
8416 </map> 8934 </map>
8417 <key>UISndNewIncomingIMSession</key> 8935 <key>UISndNewIncomingIMSession</key>
8418 <map> 8936 <map>
8419 <key>Comment</key> 8937 <key>Comment</key>
8420 <string>Sound file for new instant message session(uuid for sound asset)</string> 8938 <string>Sound file for new instant message session(uuid for sound asset)</string>
8421 <key>Persist</key> 8939 <key>Persist</key>
8422 <integer>1</integer> 8940 <integer>1</integer>
8423 <key>Type</key> 8941 <key>Type</key>
8424 <string>String</string> 8942 <string>String</string>
8425 <key>Value</key> 8943 <key>Value</key>
8426 <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string> 8944 <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
8427 </map> 8945 </map>
8428 <key>UISndObjectCreate</key> 8946 <key>UISndObjectCreate</key>
8429 <map> 8947 <map>
8430 <key>Comment</key> 8948 <key>Comment</key>
8431 <string>Sound file for object creation (uuid for sound asset)</string> 8949 <string>Sound file for object creation (uuid for sound asset)</string>
8432 <key>Persist</key> 8950 <key>Persist</key>
8433 <integer>1</integer> 8951 <integer>1</integer>
8434 <key>Type</key> 8952 <key>Type</key>
8435 <string>String</string> 8953 <string>String</string>
8436 <key>Value</key> 8954 <key>Value</key>
8437 <string>f4a0660f-5446-dea2-80b7-6482a082803c</string> 8955 <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
8438 </map> 8956 </map>
8439 <key>UISndObjectDelete</key> 8957 <key>UISndObjectDelete</key>
8440 <map> 8958 <map>
8441 <key>Comment</key> 8959 <key>Comment</key>
8442 <string>Sound file for object deletion (uuid for sound asset)</string> 8960 <string>Sound file for object deletion (uuid for sound asset)</string>
8443 <key>Persist</key> 8961 <key>Persist</key>
8444 <integer>1</integer> 8962 <integer>1</integer>
8445 <key>Type</key> 8963 <key>Type</key>
8446 <string>String</string> 8964 <string>String</string>
8447 <key>Value</key> 8965 <key>Value</key>
8448 <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string> 8966 <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
8449 </map> 8967 </map>
8450 <key>UISndObjectRezIn</key> 8968 <key>UISndObjectRezIn</key>
8451 <map> 8969 <map>
8452 <key>Comment</key> 8970 <key>Comment</key>
8453 <string>Sound file for rezzing objects (uuid for sound asset)</string> 8971 <string>Sound file for rezzing objects (uuid for sound asset)</string>
8454 <key>Persist</key> 8972 <key>Persist</key>
8455 <integer>1</integer> 8973 <integer>1</integer>
8456 <key>Type</key> 8974 <key>Type</key>
8457 <string>String</string> 8975 <string>String</string>
8458 <key>Value</key> 8976 <key>Value</key>
8459 <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string> 8977 <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
8460 </map> 8978 </map>
8461 <key>UISndObjectRezOut</key> 8979 <key>UISndObjectRezOut</key>
8462 <map> 8980 <map>
8463 <key>Comment</key> 8981 <key>Comment</key>
8464 <string>Sound file for derezzing objects (uuid for sound asset)</string> 8982 <string>Sound file for derezzing objects (uuid for sound asset)</string>
8465 <key>Persist</key> 8983 <key>Persist</key>
8466 <integer>1</integer> 8984 <integer>1</integer>
8467 <key>Type</key> 8985 <key>Type</key>
8468 <string>String</string> 8986 <string>String</string>
8469 <key>Value</key> 8987 <key>Value</key>
8470 <string>00000000-0000-0000-0000-000000000000</string> 8988 <string>00000000-0000-0000-0000-000000000000</string>
8471 </map> 8989 </map>
8472 <key>UISndPieMenuAppear</key> 8990 <key>UISndPieMenuAppear</key>
8473 <map> 8991 <map>
8474 <key>Comment</key> 8992 <key>Comment</key>
8475 <string>Sound file for opening pie menu (uuid for sound asset)</string> 8993 <string>Sound file for opening pie menu (uuid for sound asset)</string>
8476 <key>Persist</key> 8994 <key>Persist</key>
8477 <integer>1</integer> 8995 <integer>1</integer>
8478 <key>Type</key> 8996 <key>Type</key>
8479 <string>String</string> 8997 <string>String</string>
8480 <key>Value</key> 8998 <key>Value</key>
8481 <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string> 8999 <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
8482 </map> 9000 </map>
8483 <key>UISndPieMenuHide</key> 9001 <key>UISndPieMenuHide</key>
8484 <map> 9002 <map>
8485 <key>Comment</key> 9003 <key>Comment</key>
8486 <string>Sound file for closing pie menu (uuid for sound asset)</string> 9004 <string>Sound file for closing pie menu (uuid for sound asset)</string>
8487 <key>Persist</key> 9005 <key>Persist</key>
8488 <integer>1</integer> 9006 <integer>1</integer>
8489 <key>Type</key> 9007 <key>Type</key>
8490 <string>String</string> 9008 <string>String</string>
8491 <key>Value</key> 9009 <key>Value</key>
8492 <string>00000000-0000-0000-0000-000000000000</string> 9010 <string>00000000-0000-0000-0000-000000000000</string>
8493 </map> 9011 </map>
8494 <key>UISndPieMenuSliceHighlight0</key> 9012 <key>UISndPieMenuSliceHighlight0</key>
8495 <map> 9013 <map>
8496 <key>Comment</key> 9014 <key>Comment</key>
8497 <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string> 9015 <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
8498 <key>Persist</key> 9016 <key>Persist</key>
8499 <integer>1</integer> 9017 <integer>1</integer>
8500 <key>Type</key> 9018 <key>Type</key>
8501 <string>String</string> 9019 <string>String</string>
8502 <key>Value</key> 9020 <key>Value</key>
8503 <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string> 9021 <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
8504 </map> 9022 </map>
8505 <key>UISndPieMenuSliceHighlight1</key> 9023 <key>UISndPieMenuSliceHighlight1</key>
8506 <map> 9024 <map>
8507 <key>Comment</key> 9025 <key>Comment</key>
8508 <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string> 9026 <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
8509 <key>Persist</key> 9027 <key>Persist</key>
8510 <integer>1</integer> 9028 <integer>1</integer>
8511 <key>Type</key> 9029 <key>Type</key>
8512 <string>String</string> 9030 <string>String</string>
8513 <key>Value</key> 9031 <key>Value</key>
8514 <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string> 9032 <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
8515 </map> 9033 </map>
8516 <key>UISndPieMenuSliceHighlight2</key> 9034 <key>UISndPieMenuSliceHighlight2</key>
8517 <map> 9035 <map>
8518 <key>Comment</key> 9036 <key>Comment</key>
8519 <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string> 9037 <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
8520 <key>Persist</key> 9038 <key>Persist</key>
8521 <integer>1</integer> 9039 <integer>1</integer>
8522 <key>Type</key> 9040 <key>Type</key>
8523 <string>String</string> 9041 <string>String</string>
8524 <key>Value</key> 9042 <key>Value</key>
8525 <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string> 9043 <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
8526 </map> 9044 </map>
8527 <key>UISndPieMenuSliceHighlight3</key> 9045 <key>UISndPieMenuSliceHighlight3</key>
8528 <map> 9046 <map>
8529 <key>Comment</key> 9047 <key>Comment</key>
8530 <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string> 9048 <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
8531 <key>Persist</key> 9049 <key>Persist</key>
8532 <integer>1</integer> 9050 <integer>1</integer>
8533 <key>Type</key> 9051 <key>Type</key>
8534 <string>String</string> 9052 <string>String</string>
8535 <key>Value</key> 9053 <key>Value</key>
8536 <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string> 9054 <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
8537 </map> 9055 </map>
8538 <key>UISndPieMenuSliceHighlight4</key> 9056 <key>UISndPieMenuSliceHighlight4</key>
8539 <map> 9057 <map>
8540 <key>Comment</key> 9058 <key>Comment</key>
8541 <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string> 9059 <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
8542 <key>Persist</key> 9060 <key>Persist</key>
8543 <integer>1</integer> 9061 <integer>1</integer>
8544 <key>Type</key> 9062 <key>Type</key>
8545 <string>String</string> 9063 <string>String</string>
8546 <key>Value</key> 9064 <key>Value</key>
8547 <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string> 9065 <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
8548 </map> 9066 </map>
8549 <key>UISndPieMenuSliceHighlight5</key> 9067 <key>UISndPieMenuSliceHighlight5</key>
8550 <map> 9068 <map>
8551 <key>Comment</key> 9069 <key>Comment</key>
8552 <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string> 9070 <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
8553 <key>Persist</key> 9071 <key>Persist</key>
8554 <integer>1</integer> 9072 <integer>1</integer>
8555 <key>Type</key> 9073 <key>Type</key>
8556 <string>String</string> 9074 <string>String</string>
8557 <key>Value</key> 9075 <key>Value</key>
8558 <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string> 9076 <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
8559 </map> 9077 </map>
8560 <key>UISndPieMenuSliceHighlight6</key> 9078 <key>UISndPieMenuSliceHighlight6</key>
8561 <map> 9079 <map>
8562 <key>Comment</key> 9080 <key>Comment</key>
8563 <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string> 9081 <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
8564 <key>Persist</key> 9082 <key>Persist</key>
8565 <integer>1</integer> 9083 <integer>1</integer>
8566 <key>Type</key> 9084 <key>Type</key>
8567 <string>String</string> 9085 <string>String</string>
8568 <key>Value</key> 9086 <key>Value</key>
8569 <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string> 9087 <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
8570 </map> 9088 </map>
8571 <key>UISndPieMenuSliceHighlight7</key> 9089 <key>UISndPieMenuSliceHighlight7</key>
8572 <map> 9090 <map>
8573 <key>Comment</key> 9091 <key>Comment</key>
8574 <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string> 9092 <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
8575 <key>Persist</key> 9093 <key>Persist</key>
8576 <integer>1</integer> 9094 <integer>1</integer>
8577 <key>Type</key> 9095 <key>Type</key>
8578 <string>String</string> 9096 <string>String</string>
8579 <key>Value</key> 9097 <key>Value</key>
8580 <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string> 9098 <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
8581 </map> 9099 </map>
8582 <key>UISndSnapshot</key> 9100 <key>UISndSnapshot</key>
8583 <map> 9101 <map>
8584 <key>Comment</key> 9102 <key>Comment</key>
8585 <string>Sound file for taking a snapshot (uuid for sound asset)</string> 9103 <string>Sound file for taking a snapshot (uuid for sound asset)</string>
8586 <key>Persist</key> 9104 <key>Persist</key>
8587 <integer>1</integer> 9105 <integer>1</integer>
8588 <key>Type</key> 9106 <key>Type</key>
8589 <string>String</string> 9107 <string>String</string>
8590 <key>Value</key> 9108 <key>Value</key>
8591 <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string> 9109 <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
8592 </map> 9110 </map>
8593 <key>UISndStartIM</key> 9111 <key>UISndStartIM</key>
8594 <map> 9112 <map>
8595 <key>Comment</key> 9113 <key>Comment</key>
8596 <string>Sound file for starting a new IM session (uuid for sound asset)</string> 9114 <string>Sound file for starting a new IM session (uuid for sound asset)</string>
8597 <key>Persist</key> 9115 <key>Persist</key>
8598 <integer>1</integer> 9116 <integer>1</integer>
8599 <key>Type</key> 9117 <key>Type</key>
8600 <string>String</string> 9118 <string>String</string>
8601 <key>Value</key> 9119 <key>Value</key>
8602 <string>c825dfbc-9827-7e02-6507-3713d18916c1</string> 9120 <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
8603 </map> 9121 </map>
8604 <key>UISndTeleportOut</key> 9122 <key>UISndTeleportOut</key>
8605 <map> 9123 <map>
8606 <key>Comment</key> 9124 <key>Comment</key>
8607 <string>Sound file for teleporting (uuid for sound asset)</string> 9125 <string>Sound file for teleporting (uuid for sound asset)</string>
8608 <key>Persist</key> 9126 <key>Persist</key>
8609 <integer>1</integer> 9127 <integer>1</integer>
8610 <key>Type</key> 9128 <key>Type</key>
8611 <string>String</string> 9129 <string>String</string>
8612 <key>Value</key> 9130 <key>Value</key>
8613 <string>d7a9a565-a013-2a69-797d-5332baa1a947</string> 9131 <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
8614 </map> 9132 </map>
8615 <key>UISndTyping</key> 9133 <key>UISndTyping</key>
8616 <map> 9134 <map>
8617 <key>Comment</key> 9135 <key>Comment</key>
8618 <string>Sound file for starting to type a chat message (uuid for sound asset)</string> 9136 <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
8619 <key>Persist</key> 9137 <key>Persist</key>
8620 <integer>1</integer> 9138 <integer>1</integer>
8621 <key>Type</key> 9139 <key>Type</key>
8622 <string>String</string> 9140 <string>String</string>
8623 <key>Value</key> 9141 <key>Value</key>
8624 <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string> 9142 <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
8625 </map> 9143 </map>
8626 <key>UISndWindowClose</key> 9144 <key>UISndWindowClose</key>
8627 <map> 9145 <map>
8628 <key>Comment</key> 9146 <key>Comment</key>
8629 <string>Sound file for closing a window (uuid for sound asset)</string> 9147 <string>Sound file for closing a window (uuid for sound asset)</string>
8630 <key>Persist</key> 9148 <key>Persist</key>
8631 <integer>1</integer> 9149 <integer>1</integer>
8632 <key>Type</key> 9150 <key>Type</key>
8633 <string>String</string> 9151 <string>String</string>
8634 <key>Value</key> 9152 <key>Value</key>
8635 <string>2c346eda-b60c-ab33-1119-b8941916a499</string> 9153 <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
8636 </map> 9154 </map>
8637 <key>UISndWindowOpen</key> 9155 <key>UISndWindowOpen</key>
8638 <map> 9156 <map>
8639 <key>Comment</key> 9157 <key>Comment</key>
8640 <string>Sound file for opening a window (uuid for sound asset)</string> 9158 <string>Sound file for opening a window (uuid for sound asset)</string>
8641 <key>Persist</key> 9159 <key>Persist</key>
8642 <integer>1</integer> 9160 <integer>1</integer>
8643 <key>Type</key> 9161 <key>Type</key>
8644 <string>String</string> 9162 <string>String</string>
8645 <key>Value</key> 9163 <key>Value</key>
8646 <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string> 9164 <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
8647 </map> 9165 </map>
8648 <key>UseAltKeyForMenus</key> 9166 <key>UseAltKeyForMenus</key>
8649 <map> 9167 <map>
8650 <key>Comment</key> 9168 <key>Comment</key>
8651 <string>Access menus via keyboard by tapping Alt</string> 9169 <string>Access menus via keyboard by tapping Alt</string>
8652 <key>Persist</key> 9170 <key>Persist</key>
8653 <integer>1</integer> 9171 <integer>1</integer>
8654 <key>Type</key> 9172 <key>Type</key>
8655 <string>Boolean</string> 9173 <string>Boolean</string>
8656 <key>Value</key> 9174 <key>Value</key>
8657 <integer>0</integer> 9175 <integer>0</integer>
8658 </map> 9176 </map>
8659 <key>UseChatBubbles</key> 9177 <key>UseChatBubbles</key>
8660 <map> 9178 <map>
8661 <key>Comment</key> 9179 <key>Comment</key>
8662 <string>Show chat above avatars head in chat bubbles</string> 9180 <string>Show chat above avatars head in chat bubbles</string>
8663 <key>Persist</key> 9181 <key>Persist</key>
8664 <integer>1</integer> 9182 <integer>1</integer>
8665 <key>Type</key> 9183 <key>Type</key>
8666 <string>Boolean</string> 9184 <string>Boolean</string>
8667 <key>Value</key> 9185 <key>Value</key>
8668 <integer>0</integer> 9186 <integer>0</integer>
8669 </map> 9187 </map>
8670 <key>UseDebugLogin</key> 9188 <key>UseDebugLogin</key>
8671 <map> 9189 <map>
8672 <key>Comment</key> 9190 <key>Comment</key>
8673 <string>Provides extra control over which grid to connect to</string> 9191 <string>Provides extra control over which grid to connect to</string>
8674 <key>Persist</key> 9192 <key>Persist</key>
8675 <integer>1</integer> 9193 <integer>1</integer>
8676 <key>Type</key> 9194 <key>Type</key>
8677 <string>Boolean</string> 9195 <string>Boolean</string>
8678 <key>Value</key> 9196 <key>Value</key>
8679 <integer>0</integer> 9197 <integer>0</integer>
8680 </map> 9198 </map>
8681 <key>UseDebugMenus</key> 9199 <key>UseDebugMenus</key>
8682 <map> 9200 <map>
8683 <key>Comment</key> 9201 <key>Comment</key>
8684 <string>Turns on &quot;Debug&quot; menu</string> 9202 <string>Turns on "Debug" menu</string>
8685 <key>Persist</key> 9203 <key>Persist</key>
8686 <integer>1</integer> 9204 <integer>1</integer>
8687 <key>Type</key> 9205 <key>Type</key>
8688 <string>Boolean</string> 9206 <string>Boolean</string>
8689 <key>Value</key> 9207 <key>Value</key>
8690 <integer>0</integer> 9208 <integer>0</integer>
8691 </map> 9209 </map>
8692 <key>UseDefaultColorPicker</key> 9210 <key>UseDefaultColorPicker</key>
8693 <map> 9211 <map>
8694 <key>Comment</key> 9212 <key>Comment</key>
8695 <string>Use color picker supplied by operating system</string> 9213 <string>Use color picker supplied by operating system</string>
8696 <key>Persist</key> 9214 <key>Persist</key>
8697 <integer>1</integer> 9215 <integer>1</integer>
8698 <key>Type</key> 9216 <key>Type</key>
8699 <string>Boolean</string> 9217 <string>Boolean</string>
8700 <key>Value</key> 9218 <key>Value</key>
8701 <integer>0</integer> 9219 <integer>0</integer>
8702 </map> 9220 </map>
8703 <key>UseEnergy</key> 9221 <key>UseEnergy</key>
8704 <map> 9222 <map>
8705 <key>Comment</key> 9223 <key>Comment</key>
8706 <string /> 9224 <string />
8707 <key>Persist</key> 9225 <key>Persist</key>
8708 <integer>0</integer> 9226 <integer>0</integer>
8709 <key>Type</key> 9227 <key>Type</key>
8710 <string>Boolean</string> 9228 <string>Boolean</string>
8711 <key>Value</key> 9229 <key>Value</key>
8712 <integer>1</integer> 9230 <integer>1</integer>
8713 </map> 9231 </map>
8714 <key>UseExternalBrowser</key> 9232 <key>UseExternalBrowser</key>
8715 <map> 9233 <map>
8716 <key>Comment</key> 9234 <key>Comment</key>
8717 <string>Use default browser when opening web pages instead of in-world browser.</string> 9235 <string>Use default browser when opening web pages instead of in-world browser.</string>
8718 <key>Persist</key> 9236 <key>Persist</key>
8719 <integer>1</integer> 9237 <integer>1</integer>
8720 <key>Type</key> 9238 <key>Type</key>
8721 <string>Boolean</string> 9239 <string>Boolean</string>
8722 <key>Value</key> 9240 <key>Value</key>
8723 <integer>0</integer> 9241 <integer>0</integer>
8724 </map> 9242 </map>
8725 <key>UseFreezeFrame</key> 9243 <key>UseFreezeFrame</key>
8726 <map> 9244 <map>
8727 <key>Comment</key> 9245 <key>Comment</key>
8728 <string>Freeze time when taking snapshots.</string> 9246 <string>Freeze time when taking snapshots.</string>
8729 <key>Persist</key> 9247 <key>Persist</key>
8730 <integer>1</integer> 9248 <integer>1</integer>
8731 <key>Type</key> 9249 <key>Type</key>
8732 <string>Boolean</string> 9250 <string>Boolean</string>
8733 <key>Value</key> 9251 <key>Value</key>
8734 <integer>0</integer> 9252 <integer>0</integer>
8735 </map> 9253 </map>
8736 <key>UseOcclusion</key> 9254 <key>UseOcclusion</key>
8737 <map> 9255 <map>
8738 <key>Comment</key> 9256 <key>Comment</key>
8739 <string>Enable object culling based on occlusion (coverage) by other objects</string> 9257 <string>Enable object culling based on occlusion (coverage) by other objects</string>
8740 <key>Persist</key> 9258 <key>Persist</key>
8741 <integer>1</integer> 9259 <integer>1</integer>
8742 <key>Type</key> 9260 <key>Type</key>
8743 <string>Boolean</string> 9261 <string>Boolean</string>
8744 <key>Value</key> 9262 <key>Value</key>
8745 <integer>1</integer> 9263 <integer>1</integer>
8746 </map> 9264 </map>
9265 <key>UseStartScreen</key>
9266 <map>
9267 <key>Comment</key>
9268 <string>Whether to load a start screen image or not.</string>
9269 <key>Persist</key>
9270 <integer>1</integer>
9271 <key>Type</key>
9272 <string>Boolean</string>
9273 <key>Value</key>
9274 <integer>1</integer>
9275 </map>
8747 <key>UseWebPagesOnPrims</key> 9276 <key>UseWebPagesOnPrims</key>
8748 <map> 9277 <map>
8749 <key>Comment</key> 9278 <key>Comment</key>
8750 <string>[NOT USED]</string> 9279 <string>[NOT USED]</string>
8751 <key>Persist</key> 9280 <key>Persist</key>
8752 <integer>1</integer> 9281 <integer>1</integer>
8753 <key>Type</key> 9282 <key>Type</key>
8754 <string>Boolean</string> 9283 <string>Boolean</string>
8755 <key>Value</key> 9284 <key>Value</key>
8756 <integer>0</integer> 9285 <integer>0</integer>
8757 </map> 9286 </map>
8758 <key>UserConnectionPort</key> 9287 <key>UserConnectionPort</key>
8759 <map> 9288 <map>
8760 <key>Comment</key> 9289 <key>Comment</key>
8761 <string>Port that this client transmits on.</string> 9290 <string>Port that this client transmits on.</string>
8762 <key>Persist</key> 9291 <key>Persist</key>
8763 <integer>1</integer> 9292 <integer>1</integer>
8764 <key>Type</key> 9293 <key>Type</key>
8765 <string>U32</string> 9294 <string>U32</string>
8766 <key>Value</key> 9295 <key>Value</key>
8767 <integer>0</integer> 9296 <integer>0</integer>
8768 </map> 9297 </map>
8769 <key>UserLogFile</key> 9298 <key>UserLogFile</key>
8770 <map> 9299 <map>
8771 <key>Comment</key> 9300 <key>Comment</key>
8772 <string>User specified log file name.</string> 9301 <string>User specified log file name.</string>
8773 <key>Persist</key> 9302 <key>Persist</key>
8774 <integer>1</integer> 9303 <integer>1</integer>
8775 <key>Type</key> 9304 <key>Type</key>
8776 <string>String</string> 9305 <string>String</string>
8777 <key>Value</key> 9306 <key>Value</key>
8778 <string /> 9307 <string />
8779 </map> 9308 </map>
8780 <key>UserLoginInfo</key> 9309 <key>UserLoginInfo</key>
8781 <map> 9310 <map>
8782 <key>Comment</key> 9311 <key>Comment</key>
8783 <string>Users loging data.</string> 9312 <string>Users loging data.</string>
8784 <key>Persist</key> 9313 <key>Persist</key>
8785 <integer>1</integer> 9314 <integer>1</integer>
8786 <key>Type</key> 9315 <key>Type</key>
8787 <string>LLSD</string> 9316 <string>LLSD</string>
8788 <key>Value</key> 9317 <key>Value</key>
8789 <map /> 9318 <map>
8790 </map> 9319 </map>
8791 <key>UseStartScreen</key> 9320 </map>
8792 <map>
8793 <key>Comment</key>
8794 <string>Whether to load a start screen image or not.</string>
8795 <key>Persist</key>
8796 <integer>1</integer>
8797 <key>Type</key>
8798 <string>Boolean</string>
8799 <key>Value</key>
8800 <integer>1</integer>
8801 </map>
8802 <key>VFSOldSize</key> 9321 <key>VFSOldSize</key>
8803 <map> 9322 <map>
8804 <key>Comment</key> 9323 <key>Comment</key>
8805 <string>[DO NOT MODIFY] Controls resizing of local file cache</string> 9324 <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
8806 <key>Persist</key> 9325 <key>Persist</key>
8807 <integer>1</integer> 9326 <integer>1</integer>
8808 <key>Type</key> 9327 <key>Type</key>
8809 <string>U32</string> 9328 <string>U32</string>
8810 <key>Value</key> 9329 <key>Value</key>
8811 <integer>0</integer> 9330 <integer>0</integer>
8812 </map> 9331 </map>
8813 <key>VFSSalt</key> 9332 <key>VFSSalt</key>
8814 <map> 9333 <map>
8815 <key>Comment</key> 9334 <key>Comment</key>
8816 <string>[DO NOT MODIFY] Controls local file caching behavior</string> 9335 <string>[DO NOT MODIFY] Controls local file caching behavior</string>
8817 <key>Persist</key> 9336 <key>Persist</key>
8818 <integer>1</integer> 9337 <integer>1</integer>
8819 <key>Type</key> 9338 <key>Type</key>
8820 <string>U32</string> 9339 <string>U32</string>
8821 <key>Value</key> 9340 <key>Value</key>
8822 <integer>1</integer> 9341 <integer>1</integer>
8823 </map> 9342 </map>
8824 <key>VectorizeEnable</key> 9343 <key>VectorizeEnable</key>
8825 <map> 9344 <map>
8826 <key>Comment</key> 9345 <key>Comment</key>
8827 <string>Enable general vector operations and data alignment.</string> 9346 <string>Enable general vector operations and data alignment.</string>
8828 <key>Persist</key> 9347 <key>Persist</key>
8829 <integer>1</integer> 9348 <integer>1</integer>
8830 <key>Type</key> 9349 <key>Type</key>
8831 <string>Boolean</string> 9350 <string>Boolean</string>
8832 <key>Value</key> 9351 <key>Value</key>
8833 <integer>0</integer> 9352 <integer>0</integer>
8834 </map> 9353 </map>
8835 <key>VectorizePerfTest</key> 9354 <key>VectorizePerfTest</key>
8836 <map> 9355 <map>
8837 <key>Comment</key> 9356 <key>Comment</key>
8838 <string>Test SSE/vectorization performance and choose fastest version.</string> 9357 <string>Test SSE/vectorization performance and choose fastest version.</string>
8839 <key>Persist</key> 9358 <key>Persist</key>
8840 <integer>1</integer> 9359 <integer>1</integer>
8841 <key>Type</key> 9360 <key>Type</key>
8842 <string>Boolean</string> 9361 <string>Boolean</string>
8843 <key>Value</key> 9362 <key>Value</key>
8844 <integer>1</integer> 9363 <integer>1</integer>
8845 </map> 9364 </map>
8846 <key>VectorizeProcessor</key> 9365 <key>VectorizeProcessor</key>
8847 <map> 9366 <map>
8848 <key>Comment</key> 9367 <key>Comment</key>
8849 <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string> 9368 <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
8850 <key>Persist</key> 9369 <key>Persist</key>
8851 <integer>0</integer> 9370 <integer>0</integer>
8852 <key>Type</key> 9371 <key>Type</key>
8853 <string>U32</string> 9372 <string>U32</string>
8854 <key>Value</key> 9373 <key>Value</key>
8855 <integer>0</integer> 9374 <integer>0</integer>
8856 </map> 9375 </map>
8857 <key>VectorizeSkin</key> 9376 <key>VectorizeSkin</key>
8858 <map> 9377 <map>
8859 <key>Comment</key> 9378 <key>Comment</key>
8860 <string>Enable vector operations for avatar skinning.</string> 9379 <string>Enable vector operations for avatar skinning.</string>
8861 <key>Persist</key> 9380 <key>Persist</key>
8862 <integer>1</integer> 9381 <integer>1</integer>
8863 <key>Type</key> 9382 <key>Type</key>
8864 <string>Boolean</string> 9383 <string>Boolean</string>
8865 <key>Value</key> 9384 <key>Value</key>
8866 <integer>1</integer> 9385 <integer>1</integer>
8867 </map> 9386 </map>
8868 <key>VelocityInterpolate</key> 9387 <key>VelocityInterpolate</key>
8869 <map> 9388 <map>
8870 <key>Comment</key> 9389 <key>Comment</key>
8871 <string>Extrapolate object motion from last packet based on received velocity</string> 9390 <string>Extrapolate object motion from last packet based on received velocity</string>
8872 <key>Persist</key> 9391 <key>Persist</key>
8873 <integer>1</integer> 9392 <integer>1</integer>
8874 <key>Type</key> 9393 <key>Type</key>
8875 <string>Boolean</string> 9394 <string>Boolean</string>
8876 <key>Value</key> 9395 <key>Value</key>
8877 <integer>1</integer> 9396 <integer>1</integer>
8878 </map> 9397 </map>
8879 <key>VerboseLogs</key> 9398 <key>VerboseLogs</key>
8880 <map> 9399 <map>
8881 <key>Comment</key> 9400 <key>Comment</key>
8882 <string>Display source file and line number for each log item for debugging purposes</string> 9401 <string>Display source file and line number for each log item for debugging purposes</string>
8883 <key>Persist</key> 9402 <key>Persist</key>
8884 <integer>1</integer> 9403 <integer>1</integer>
8885 <key>Type</key> 9404 <key>Type</key>
8886 <string>Boolean</string> 9405 <string>Boolean</string>
8887 <key>Value</key> 9406 <key>Value</key>
8888 <integer>0</integer> 9407 <integer>0</integer>
8889 </map> 9408 </map>
8890 <key>VersionChannelName</key> 9409 <key>VersionChannelName</key>
8891 <map> 9410 <map>
8892 <key>Comment</key> 9411 <key>Comment</key>
8893 <string>Versioning Channel Name.</string> 9412 <string>Versioning Channel Name.</string>
8894 <key>Persist</key> 9413 <key>Persist</key>
8895 <integer>1</integer> 9414 <integer>1</integer>
8896 <key>Type</key> 9415 <key>Type</key>
8897 <string>String</string> 9416 <string>String</string>
8898 <key>Value</key> 9417 <key>Value</key>
8899 <string>Second Life Release</string> 9418 <string>Second Life Release</string>
8900 </map> 9419 </map>
8901 <key>VertexShaderEnable</key> 9420 <key>VertexShaderEnable</key>
8902 <map> 9421 <map>
8903 <key>Comment</key> 9422 <key>Comment</key>
8904 <string>Enable/disable all GLSL shaders (debug)</string> 9423 <string>Enable/disable all GLSL shaders (debug)</string>
8905 <key>Persist</key> 9424 <key>Persist</key>
8906 <integer>1</integer> 9425 <integer>1</integer>
8907 <key>Type</key> 9426 <key>Type</key>
8908 <string>Boolean</string> 9427 <string>Boolean</string>
8909 <key>Value</key> 9428 <key>Value</key>
8910 <integer>0</integer> 9429 <integer>0</integer>
8911 </map> 9430 </map>
8912 <key>VivoxDebugLevel</key> 9431 <key>VivoxDebugLevel</key>
8913 <map> 9432 <map>
8914 <key>Comment</key> 9433 <key>Comment</key>
8915 <string>Logging level to use when launching the vivox daemon</string> 9434 <string>Logging level to use when launching the vivox daemon</string>
8916 <key>Persist</key> 9435 <key>Persist</key>
8917 <integer>1</integer> 9436 <integer>1</integer>
8918 <key>Type</key> 9437 <key>Type</key>
8919 <string>String</string> 9438 <string>String</string>
8920 <key>Value</key> 9439 <key>Value</key>
8921 <string>-1</string> 9440 <string>-1</string>
8922 </map> 9441 </map>
8923 <key>VivoxDebugServerName</key> 9442 <key>VivoxDebugServerName</key>
8924 <map> 9443 <map>
8925 <key>Comment</key> 9444 <key>Comment</key>
8926 <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string> 9445 <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
8927 <key>Persist</key> 9446 <key>Persist</key>
8928 <integer>1</integer> 9447 <integer>1</integer>
8929 <key>Type</key> 9448 <key>Type</key>
8930 <string>String</string> 9449 <string>String</string>
8931 <key>Value</key> 9450 <key>Value</key>
8932 <string>bhd.vivox.com</string> 9451 <string>bhd.vivox.com</string>
8933 </map> 9452 </map>
8934 <key>VoiceCallsFriendsOnly</key> 9453 <key>VoiceCallsFriendsOnly</key>
8935 <map> 9454 <map>
8936 <key>Comment</key> 9455 <key>Comment</key>
8937 <string>Only accept voice calls from residents on your friends list</string> 9456 <string>Only accept voice calls from residents on your friends list</string>
8938 <key>Persist</key> 9457 <key>Persist</key>
8939 <integer>1</integer> 9458 <integer>1</integer>
8940 <key>Type</key> 9459 <key>Type</key>
8941 <string>Boolean</string> 9460 <string>Boolean</string>
8942 <key>Value</key> 9461 <key>Value</key>
8943 <integer>0</integer> 9462 <integer>0</integer>
8944 </map> 9463 </map>
8945 <key>VoiceEarLocation</key> 9464 <key>VoiceEarLocation</key>
8946 <map> 9465 <map>
8947 <key>Comment</key> 9466 <key>Comment</key>
8948 <string>Location of the virtual ear for voice</string> 9467 <string>Location of the virtual ear for voice</string>
8949 <key>Persist</key> 9468 <key>Persist</key>
8950 <integer>1</integer> 9469 <integer>1</integer>
8951 <key>Type</key> 9470 <key>Type</key>
8952 <string>S32</string> 9471 <string>S32</string>
8953 <key>Value</key> 9472 <key>Value</key>
8954 <integer>0</integer> 9473 <integer>0</integer>
8955 </map> 9474 </map>
8956 <key>VoiceHost</key> 9475 <key>VoiceHost</key>
8957 <map> 9476 <map>
8958 <key>Comment</key> 9477 <key>Comment</key>
8959 <string>Client SLVoice host to connect to</string> 9478 <string>Client SLVoice host to connect to</string>
8960 <key>Persist</key> 9479 <key>Persist</key>
8961 <integer>1</integer> 9480 <integer>1</integer>
8962 <key>Type</key> 9481 <key>Type</key>
8963 <string>String</string> 9482 <string>String</string>
8964 <key>Value</key> 9483 <key>Value</key>
8965 <string>127.0.0.1</string> 9484 <string>127.0.0.1</string>
8966 </map> 9485 </map>
8967 <key>VoiceImageLevel0</key> 9486 <key>VoiceImageLevel0</key>
8968 <map> 9487 <map>
8969 <key>Comment</key> 9488 <key>Comment</key>
8970 <string>Texture UUID for voice image level 0</string> 9489 <string>Texture UUID for voice image level 0</string>
8971 <key>Persist</key> 9490 <key>Persist</key>
8972 <integer>1</integer> 9491 <integer>1</integer>
8973 <key>Type</key> 9492 <key>Type</key>
8974 <string>String</string> 9493 <string>String</string>
8975 <key>Value</key> 9494 <key>Value</key>
8976 <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string> 9495 <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
8977 </map> 9496 </map>
8978 <key>VoiceImageLevel1</key> 9497 <key>VoiceImageLevel1</key>
8979 <map> 9498 <map>
8980 <key>Comment</key> 9499 <key>Comment</key>
8981 <string>Texture UUID for voice image level 1</string> 9500 <string>Texture UUID for voice image level 1</string>
8982 <key>Persist</key> 9501 <key>Persist</key>
8983 <integer>1</integer> 9502 <integer>1</integer>
8984 <key>Type</key> 9503 <key>Type</key>
8985 <string>String</string> 9504 <string>String</string>
8986 <key>Value</key> 9505 <key>Value</key>
8987 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9506 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8988 </map> 9507 </map>
8989 <key>VoiceImageLevel2</key> 9508 <key>VoiceImageLevel2</key>
8990 <map> 9509 <map>
8991 <key>Comment</key> 9510 <key>Comment</key>
8992 <string>Texture UUID for voice image level 2</string> 9511 <string>Texture UUID for voice image level 2</string>
8993 <key>Persist</key> 9512 <key>Persist</key>
8994 <integer>1</integer> 9513 <integer>1</integer>
8995 <key>Type</key> 9514 <key>Type</key>
8996 <string>String</string> 9515 <string>String</string>
8997 <key>Value</key> 9516 <key>Value</key>
8998 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9517 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8999 </map> 9518 </map>
9000 <key>VoiceImageLevel3</key> 9519 <key>VoiceImageLevel3</key>
9001 <map> 9520 <map>
9002 <key>Comment</key> 9521 <key>Comment</key>
9003 <string>Texture UUID for voice image level 3</string> 9522 <string>Texture UUID for voice image level 3</string>
9004 <key>Persist</key> 9523 <key>Persist</key>
9005 <integer>1</integer> 9524 <integer>1</integer>
9006 <key>Type</key> 9525 <key>Type</key>
9007 <string>String</string> 9526 <string>String</string>
9008 <key>Value</key> 9527 <key>Value</key>
9009 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9528 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9010 </map> 9529 </map>
9011 <key>VoiceImageLevel4</key> 9530 <key>VoiceImageLevel4</key>
9012 <map> 9531 <map>
9013 <key>Comment</key> 9532 <key>Comment</key>
9014 <string>Texture UUID for voice image level 4</string> 9533 <string>Texture UUID for voice image level 4</string>
9015 <key>Persist</key> 9534 <key>Persist</key>
9016 <integer>1</integer> 9535 <integer>1</integer>
9017 <key>Type</key> 9536 <key>Type</key>
9018 <string>String</string> 9537 <string>String</string>
9019 <key>Value</key> 9538 <key>Value</key>
9020 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9539 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9021 </map> 9540 </map>
9022 <key>VoiceImageLevel5</key> 9541 <key>VoiceImageLevel5</key>
9023 <map> 9542 <map>
9024 <key>Comment</key> 9543 <key>Comment</key>
9025 <string>Texture UUID for voice image level 5</string> 9544 <string>Texture UUID for voice image level 5</string>
9026 <key>Persist</key> 9545 <key>Persist</key>
9027 <integer>1</integer> 9546 <integer>1</integer>
9028 <key>Type</key> 9547 <key>Type</key>
9029 <string>String</string> 9548 <string>String</string>
9030 <key>Value</key> 9549 <key>Value</key>
9031 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9550 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9032 </map> 9551 </map>
9033 <key>VoiceImageLevel6</key> 9552 <key>VoiceImageLevel6</key>
9034 <map> 9553 <map>
9035 <key>Comment</key> 9554 <key>Comment</key>
9036 <string>Texture UUID for voice image level 6</string> 9555 <string>Texture UUID for voice image level 6</string>
9037 <key>Persist</key> 9556 <key>Persist</key>
9038 <integer>1</integer> 9557 <integer>1</integer>
9039 <key>Type</key> 9558 <key>Type</key>
9040 <string>String</string> 9559 <string>String</string>
9041 <key>Value</key> 9560 <key>Value</key>
9042 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9561 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9043 </map> 9562 </map>
9044 <key>VoiceInputAudioDevice</key> 9563 <key>VoiceInputAudioDevice</key>
9045 <map> 9564 <map>
9046 <key>Comment</key> 9565 <key>Comment</key>
9047 <string>Audio input device to use for voice</string> 9566 <string>Audio input device to use for voice</string>
9048 <key>Persist</key> 9567 <key>Persist</key>
9049 <integer>1</integer> 9568 <integer>1</integer>
9050 <key>Type</key> 9569 <key>Type</key>
9051 <string>String</string> 9570 <string>String</string>
9052 <key>Value</key> 9571 <key>Value</key>
9053 <string>Default</string> 9572 <string>Default</string>
9054 </map> 9573 </map>
9055 <key>VoiceOutputAudioDevice</key> 9574 <key>VoiceOutputAudioDevice</key>
9056 <map> 9575 <map>
9057 <key>Comment</key> 9576 <key>Comment</key>
9058 <string>Audio output device to use for voice</string> 9577 <string>Audio output device to use for voice</string>
9059 <key>Persist</key> 9578 <key>Persist</key>
9060 <integer>1</integer> 9579 <integer>1</integer>
9061 <key>Type</key> 9580 <key>Type</key>
9062 <string>String</string> 9581 <string>String</string>
9063 <key>Value</key> 9582 <key>Value</key>
9064 <string>Default</string> 9583 <string>Default</string>
9065 </map> 9584 </map>
9066 <key>VoicePort</key> 9585 <key>VoicePort</key>
9067 <map> 9586 <map>
9068 <key>Comment</key> 9587 <key>Comment</key>
9069 <string>Client SLVoice port to connect to</string> 9588 <string>Client SLVoice port to connect to</string>
9070 <key>Persist</key> 9589 <key>Persist</key>
9071 <integer>1</integer> 9590 <integer>1</integer>
9072 <key>Type</key> 9591 <key>Type</key>
9073 <string>U32</string> 9592 <string>U32</string>
9074 <key>Value</key> 9593 <key>Value</key>
9075 <integer>44124</integer> 9594 <integer>44124</integer>
9076 </map> 9595 </map>
9596 <key>WLSkyDetail</key>
9597 <map>
9598 <key>Comment</key>
9599 <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
9600 <key>Persist</key>
9601 <integer>1</integer>
9602 <key>Type</key>
9603 <string>U32</string>
9604 <key>Value</key>
9605 <integer>64</integer>
9606 </map>
9077 <key>WarnAboutBadPCI</key> 9607 <key>WarnAboutBadPCI</key>
9078 <map> 9608 <map>
9079 <key>Comment</key> 9609 <key>Comment</key>
9080 <string>Enables AboutBadPCI warning dialog</string> 9610 <string>Enables AboutBadPCI warning dialog</string>
9081 <key>Persist</key> 9611 <key>Persist</key>
9082 <integer>1</integer> 9612 <integer>1</integer>
9083 <key>Type</key> 9613 <key>Type</key>
9084 <string>Boolean</string> 9614 <string>Boolean</string>
9085 <key>Value</key> 9615 <key>Value</key>
9086 <integer>1</integer> 9616 <integer>1</integer>
9087 </map> 9617 </map>
9088 <key>WarnAboutDirectX9</key> 9618 <key>WarnAboutDirectX9</key>
9089 <map> 9619 <map>
9090 <key>Comment</key> 9620 <key>Comment</key>
9091 <string>Enables AboutDirectX9 warning dialog</string> 9621 <string>Enables AboutDirectX9 warning dialog</string>
9092 <key>Persist</key> 9622 <key>Persist</key>
9093 <integer>1</integer> 9623 <integer>1</integer>
9094 <key>Type</key> 9624 <key>Type</key>
9095 <string>Boolean</string> 9625 <string>Boolean</string>
9096 <key>Value</key> 9626 <key>Value</key>
9097 <integer>1</integer> 9627 <integer>1</integer>
9098 </map> 9628 </map>
9099 <key>WarnAboutOldGraphicsDriver</key> 9629 <key>WarnAboutOldGraphicsDriver</key>
9100 <map> 9630 <map>
9101 <key>Comment</key> 9631 <key>Comment</key>
9102 <string>Enables AboutOldGraphicsDriver warning dialog</string> 9632 <string>Enables AboutOldGraphicsDriver warning dialog</string>
9103 <key>Persist</key> 9633 <key>Persist</key>
9104 <integer>1</integer> 9634 <integer>1</integer>
9105 <key>Type</key> 9635 <key>Type</key>
9106 <string>Boolean</string> 9636 <string>Boolean</string>
9107 <key>Value</key> 9637 <key>Value</key>
9108 <integer>1</integer> 9638 <integer>1</integer>
9109 </map> 9639 </map>
9110 <key>WarnAboutPCIGraphics</key> 9640 <key>WarnAboutPCIGraphics</key>
9111 <map> 9641 <map>
9112 <key>Comment</key> 9642 <key>Comment</key>
9113 <string>Enables AboutPCIGraphics warning dialog</string> 9643 <string>Enables AboutPCIGraphics warning dialog</string>
9114 <key>Persist</key> 9644 <key>Persist</key>
9115 <integer>1</integer> 9645 <integer>1</integer>
9116 <key>Type</key> 9646 <key>Type</key>
9117 <string>Boolean</string> 9647 <string>Boolean</string>
9118 <key>Value</key> 9648 <key>Value</key>
9119 <integer>1</integer> 9649 <integer>1</integer>
9120 </map> 9650 </map>
9121 <key>WarnBrowserLaunch</key> 9651 <key>WarnBrowserLaunch</key>
9122 <map> 9652 <map>
9123 <key>Comment</key> 9653 <key>Comment</key>
9124 <string>Enables BrowserLaunch warning dialog</string> 9654 <string>Enables BrowserLaunch warning dialog</string>
9125 <key>Persist</key> 9655 <key>Persist</key>
9126 <integer>1</integer> 9656 <integer>1</integer>
9127 <key>Type</key> 9657 <key>Type</key>
9128 <string>Boolean</string> 9658 <string>Boolean</string>
9129 <key>Value</key> 9659 <key>Value</key>
9130 <integer>1</integer> 9660 <integer>1</integer>
9131 </map> 9661 </map>
9132 <key>WarnDeedObject</key> 9662 <key>WarnDeedObject</key>
9133 <map> 9663 <map>
9134 <key>Comment</key> 9664 <key>Comment</key>
9135 <string>Enables DeedObject warning dialog</string> 9665 <string>Enables DeedObject warning dialog</string>
9136 <key>Persist</key> 9666 <key>Persist</key>
9137 <integer>1</integer> 9667 <integer>1</integer>
9138 <key>Type</key> 9668 <key>Type</key>
9139 <string>Boolean</string> 9669 <string>Boolean</string>
9140 <key>Value</key> 9670 <key>Value</key>
9141 <integer>1</integer> 9671 <integer>1</integer>
9142 </map> 9672 </map>
9143 <key>WarnFirstAppearance</key> 9673 <key>WarnFirstAppearance</key>
9144 <map> 9674 <map>
9145 <key>Comment</key> 9675 <key>Comment</key>
9146 <string>Enables FirstAppearance warning dialog</string> 9676 <string>Enables FirstAppearance warning dialog</string>
9147 <key>Persist</key> 9677 <key>Persist</key>
9148 <integer>1</integer> 9678 <integer>1</integer>
9149 <key>Type</key> 9679 <key>Type</key>
9150 <string>Boolean</string> 9680 <string>Boolean</string>
9151 <key>Value</key> 9681 <key>Value</key>
9152 <integer>1</integer> 9682 <integer>1</integer>
9153 </map> 9683 </map>
9154 <key>WarnFirstMedia</key>
9155 <map>
9156 <key>Comment</key>
9157 <string>Enables FirstMedia warning dialog</string>
9158 <key>Persist</key>
9159 <integer>1</integer>
9160 <key>Type</key>
9161 <string>Boolean</string>
9162 <key>Value</key>
9163 <integer>1</integer>
9164 </map>
9165 <key>WarnFirstAttach</key> 9684 <key>WarnFirstAttach</key>
9166 <map> 9685 <map>
9167 <key>Comment</key> 9686 <key>Comment</key>
9168 <string>Enables FirstAttach warning dialog</string> 9687 <string>Enables FirstAttach warning dialog</string>
9169 <key>Persist</key> 9688 <key>Persist</key>
9170 <integer>1</integer> 9689 <integer>1</integer>
9171 <key>Type</key> 9690 <key>Type</key>
9172 <string>Boolean</string> 9691 <string>Boolean</string>
9173 <key>Value</key> 9692 <key>Value</key>
9174 <integer>1</integer> 9693 <integer>1</integer>
9175 </map> 9694 </map>
9176 <key>WarnFirstBalanceDecrease</key> 9695 <key>WarnFirstBalanceDecrease</key>
9177 <map> 9696 <map>
9178 <key>Comment</key> 9697 <key>Comment</key>
9179 <string>Enables FirstBalanceDecrease warning dialog</string> 9698 <string>Enables FirstBalanceDecrease warning dialog</string>
9180 <key>Persist</key> 9699 <key>Persist</key>
9181 <integer>1</integer> 9700 <integer>1</integer>
9182 <key>Type</key> 9701 <key>Type</key>
9183 <string>Boolean</string> 9702 <string>Boolean</string>
9184 <key>Value</key> 9703 <key>Value</key>
9185 <integer>1</integer> 9704 <integer>1</integer>
9186 </map> 9705 </map>
9187 <key>WarnFirstBalanceIncrease</key> 9706 <key>WarnFirstBalanceIncrease</key>
9188 <map> 9707 <map>
9189 <key>Comment</key> 9708 <key>Comment</key>
9190 <string>Enables FirstBalanceIncrease warning dialog</string> 9709 <string>Enables FirstBalanceIncrease warning dialog</string>
9191 <key>Persist</key> 9710 <key>Persist</key>
9192 <integer>1</integer> 9711 <integer>1</integer>
9193 <key>Type</key> 9712 <key>Type</key>
9194 <string>Boolean</string> 9713 <string>Boolean</string>
9195 <key>Value</key> 9714 <key>Value</key>
9196 <integer>1</integer> 9715 <integer>1</integer>
9197 </map> 9716 </map>
9198 <key>WarnFirstBuild</key> 9717 <key>WarnFirstBuild</key>
9199 <map> 9718 <map>
9200 <key>Comment</key> 9719 <key>Comment</key>
9201 <string>Enables FirstBuild warning dialog</string> 9720 <string>Enables FirstBuild warning dialog</string>
9202 <key>Persist</key> 9721 <key>Persist</key>
9203 <integer>1</integer> 9722 <integer>1</integer>
9204 <key>Type</key> 9723 <key>Type</key>
9205 <string>Boolean</string> 9724 <string>Boolean</string>
9206 <key>Value</key> 9725 <key>Value</key>
9207 <integer>1</integer> 9726 <integer>1</integer>
9208 </map> 9727 </map>
9209 <key>WarnFirstDebugMenus</key> 9728 <key>WarnFirstDebugMenus</key>
9210 <map> 9729 <map>
9211 <key>Comment</key> 9730 <key>Comment</key>
9212 <string>Enables FirstDebugMenus warning dialog</string> 9731 <string>Enables FirstDebugMenus warning dialog</string>
9213 <key>Persist</key> 9732 <key>Persist</key>
9214 <integer>1</integer> 9733 <integer>1</integer>
9215 <key>Type</key> 9734 <key>Type</key>
9216 <string>Boolean</string> 9735 <string>Boolean</string>
9217 <key>Value</key> 9736 <key>Value</key>
9218 <integer>1</integer> 9737 <integer>1</integer>
9219 </map> 9738 </map>
9220 <key>WarnFirstFlexible</key> 9739 <key>WarnFirstFlexible</key>
9221 <map> 9740 <map>
9222 <key>Comment</key> 9741 <key>Comment</key>
9223 <string>Enables FirstFlexible warning dialog</string> 9742 <string>Enables FirstFlexible warning dialog</string>
9224 <key>Persist</key> 9743 <key>Persist</key>
9225 <integer>1</integer> 9744 <integer>1</integer>
9226 <key>Type</key> 9745 <key>Type</key>
9227 <string>Boolean</string> 9746 <string>Boolean</string>
9228 <key>Value</key> 9747 <key>Value</key>
9229 <integer>1</integer> 9748 <integer>1</integer>
9230 </map> 9749 </map>
9231 <key>WarnFirstGoTo</key> 9750 <key>WarnFirstGoTo</key>
9232 <map> 9751 <map>
9233 <key>Comment</key> 9752 <key>Comment</key>
9234 <string>Enables FirstGoTo warning dialog</string> 9753 <string>Enables FirstGoTo warning dialog</string>
9235 <key>Persist</key> 9754 <key>Persist</key>
9236 <integer>1</integer> 9755 <integer>1</integer>
9237 <key>Type</key> 9756 <key>Type</key>
9238 <string>Boolean</string> 9757 <string>Boolean</string>
9239 <key>Value</key> 9758 <key>Value</key>
9240 <integer>1</integer> 9759 <integer>1</integer>
9241 </map> 9760 </map>
9242 <key>WarnFirstInventory</key> 9761 <key>WarnFirstInventory</key>
9243 <map> 9762 <map>
9244 <key>Comment</key> 9763 <key>Comment</key>
9245 <string>Enables FirstInventory warning dialog</string> 9764 <string>Enables FirstInventory warning dialog</string>
9246 <key>Persist</key> 9765 <key>Persist</key>
9247 <integer>1</integer> 9766 <integer>1</integer>
9248 <key>Type</key> 9767 <key>Type</key>
9249 <string>Boolean</string> 9768 <string>Boolean</string>
9250 <key>Value</key> 9769 <key>Value</key>
9251 <integer>1</integer> 9770 <integer>1</integer>
9252 </map> 9771 </map>
9253 <key>WarnFirstLeftClickNoHit</key> 9772 <key>WarnFirstLeftClickNoHit</key>
9254 <map> 9773 <map>
9255 <key>Comment</key> 9774 <key>Comment</key>
9256 <string>Enables FirstLeftClickNoHit warning dialog</string> 9775 <string>Enables FirstLeftClickNoHit warning dialog</string>
9257 <key>Persist</key> 9776 <key>Persist</key>
9258 <integer>1</integer> 9777 <integer>1</integer>
9259 <key>Type</key> 9778 <key>Type</key>
9260 <string>Boolean</string> 9779 <string>Boolean</string>
9261 <key>Value</key> 9780 <key>Value</key>
9262 <integer>1</integer> 9781 <integer>1</integer>
9263 </map> 9782 </map>
9264 <key>WarnFirstMap</key> 9783 <key>WarnFirstMap</key>
9265 <map> 9784 <map>
9266 <key>Comment</key> 9785 <key>Comment</key>
9267 <string>Enables FirstMap warning dialog</string> 9786 <string>Enables FirstMap warning dialog</string>
9268 <key>Persist</key> 9787 <key>Persist</key>
9269 <integer>1</integer> 9788 <integer>1</integer>
9270 <key>Type</key> 9789 <key>Type</key>
9271 <string>Boolean</string> 9790 <string>Boolean</string>
9272 <key>Value</key> 9791 <key>Value</key>
9273 <integer>1</integer> 9792 <integer>1</integer>
9274 </map> 9793 </map>
9275 <key>WarnFirstMedia</key> 9794 <key>WarnFirstMedia</key>
9276 <map> 9795 <map>
9277 <key>Comment</key> 9796 <key>Comment</key>
9278 <string>Enables FirstMedia warning dialog</string> 9797 <string>Enables FirstMedia warning dialog</string>
9279 <key>Persist</key> 9798 <key>Persist</key>
9280 <integer>1</integer> 9799 <integer>1</integer>
9281 <key>Type</key> 9800 <key>Type</key>
9282 <string>Boolean</string> 9801 <string>Boolean</string>
9283 <key>Value</key> 9802 <key>Value</key>
9284 <integer>1</integer> 9803 <integer>1</integer>
9285 </map> 9804 </map>
9286 <key>WarnFirstOverrideKeys</key> 9805 <key>WarnFirstOverrideKeys</key>
9287 <map> 9806 <map>
9288 <key>Comment</key> 9807 <key>Comment</key>
9289 <string>Enables FirstOverrideKeys warning dialog</string> 9808 <string>Enables FirstOverrideKeys warning dialog</string>
9290 <key>Persist</key> 9809 <key>Persist</key>
9291 <integer>1</integer> 9810 <integer>1</integer>
9292 <key>Type</key> 9811 <key>Type</key>
9293 <string>Boolean</string> 9812 <string>Boolean</string>
9294 <key>Value</key> 9813 <key>Value</key>
9295 <integer>1</integer> 9814 <integer>1</integer>
9296 </map> 9815 </map>
9297 <key>WarnFirstSandbox</key> 9816 <key>WarnFirstSandbox</key>
9298 <map> 9817 <map>
9299 <key>Comment</key> 9818 <key>Comment</key>
9300 <string>Enables FirstSandbox warning dialog</string> 9819 <string>Enables FirstSandbox warning dialog</string>
9301 <key>Persist</key> 9820 <key>Persist</key>
9302 <integer>1</integer> 9821 <integer>1</integer>
9303 <key>Type</key> 9822 <key>Type</key>
9304 <string>Boolean</string> 9823 <string>Boolean</string>
9305 <key>Value</key> 9824 <key>Value</key>
9306 <integer>1</integer> 9825 <integer>1</integer>
9307 </map> 9826 </map>
9308 <key>WarnFirstSculptedPrim</key> 9827 <key>WarnFirstSculptedPrim</key>
9309 <map> 9828 <map>
9310 <key>Comment</key> 9829 <key>Comment</key>
9311 <string>Enables FirstSculptedPrim warning dialog</string> 9830 <string>Enables FirstSculptedPrim warning dialog</string>
9312 <key>Persist</key> 9831 <key>Persist</key>
9313 <integer>1</integer> 9832 <integer>1</integer>
9314 <key>Type</key> 9833 <key>Type</key>
9315 <string>Boolean</string> 9834 <string>Boolean</string>
9316 <key>Value</key> 9835 <key>Value</key>
9317 <integer>1</integer> 9836 <integer>1</integer>
9318 </map> 9837 </map>
9319 <key>WarnFirstSit</key> 9838 <key>WarnFirstSit</key>
9320 <map> 9839 <map>
9321 <key>Comment</key> 9840 <key>Comment</key>
9322 <string>Enables FirstSit warning dialog</string> 9841 <string>Enables FirstSit warning dialog</string>
9323 <key>Persist</key> 9842 <key>Persist</key>
9324 <integer>1</integer> 9843 <integer>1</integer>
9325 <key>Type</key> 9844 <key>Type</key>
9326 <string>Boolean</string> 9845 <string>Boolean</string>
9327 <key>Value</key> 9846 <key>Value</key>
9328 <integer>1</integer> 9847 <integer>1</integer>
9329 </map> 9848 </map>
9330 <key>WarnFirstStreamingMusic</key> 9849 <key>WarnFirstStreamingMusic</key>
9331 <map> 9850 <map>
9332 <key>Comment</key> 9851 <key>Comment</key>
9333 <string>Enables FirstStreamingMusic warning dialog</string> 9852 <string>Enables FirstStreamingMusic warning dialog</string>
9334 <key>Persist</key> 9853 <key>Persist</key>
9335 <integer>1</integer> 9854 <integer>1</integer>
9336 <key>Type</key> 9855 <key>Type</key>
9337 <string>Boolean</string> 9856 <string>Boolean</string>
9338 <key>Value</key> 9857 <key>Value</key>
9339 <integer>1</integer> 9858 <integer>1</integer>
9340 </map> 9859 </map>
9341 <key>WarnFirstStreamingVideo</key> 9860 <key>WarnFirstStreamingVideo</key>
9342 <map> 9861 <map>
9343 <key>Comment</key> 9862 <key>Comment</key>
9344 <string>Enables FirstStreamingVideo warning dialog</string> 9863 <string>Enables FirstStreamingVideo warning dialog</string>
9345 <key>Persist</key> 9864 <key>Persist</key>
9346 <integer>1</integer> 9865 <integer>1</integer>
9347 <key>Type</key> 9866 <key>Type</key>
9348 <string>Boolean</string> 9867 <string>Boolean</string>
9349 <key>Value</key> 9868 <key>Value</key>
9350 <integer>1</integer> 9869 <integer>1</integer>
9351 </map> 9870 </map>
9352 <key>WarnFirstTeleport</key> 9871 <key>WarnFirstTeleport</key>
9353 <map> 9872 <map>
9354 <key>Comment</key> 9873 <key>Comment</key>
9355 <string>Enables FirstTeleport warning dialog</string> 9874 <string>Enables FirstTeleport warning dialog</string>
9356 <key>Persist</key> 9875 <key>Persist</key>
9357 <integer>1</integer> 9876 <integer>1</integer>
9358 <key>Type</key> 9877 <key>Type</key>
9359 <string>Boolean</string> 9878 <string>Boolean</string>
9360 <key>Value</key> 9879 <key>Value</key>
9361 <integer>1</integer> 9880 <integer>1</integer>
9362 </map> 9881 </map>
9363 <key>WarnFirstVoice</key> 9882 <key>WarnFirstVoice</key>
9364 <map> 9883 <map>
9365 <key>Comment</key> 9884 <key>Comment</key>
9366 <string>Enables FirstVoice warning dialog</string> 9885 <string>Enables FirstVoice warning dialog</string>
9367 <key>Persist</key> 9886 <key>Persist</key>
9368 <integer>1</integer> 9887 <integer>1</integer>
9369 <key>Type</key> 9888 <key>Type</key>
9370 <string>Boolean</string> 9889 <string>Boolean</string>
9371 <key>Value</key> 9890 <key>Value</key>
9372 <integer>1</integer> 9891 <integer>1</integer>
9373 </map> 9892 </map>
9374 <key>WarnNewClassified</key> 9893 <key>WarnNewClassified</key>
9375 <map> 9894 <map>
9376 <key>Comment</key> 9895 <key>Comment</key>
9377 <string>Enables NewClassified warning dialog</string> 9896 <string>Enables NewClassified warning dialog</string>
9378 <key>Persist</key> 9897 <key>Persist</key>
9379 <integer>1</integer> 9898 <integer>1</integer>
9380 <key>Type</key> 9899 <key>Type</key>
9381 <string>Boolean</string> 9900 <string>Boolean</string>
9382 <key>Value</key> 9901 <key>Value</key>
9383 <integer>1</integer> 9902 <integer>1</integer>
9384 </map> 9903 </map>
9385 <key>WarnQuickTimeInstalled</key> 9904 <key>WarnQuickTimeInstalled</key>
9386 <map> 9905 <map>
9387 <key>Comment</key> 9906 <key>Comment</key>
9388 <string>Enables QuickTimeInstalled warning dialog</string> 9907 <string>Enables QuickTimeInstalled warning dialog</string>
9389 <key>Persist</key> 9908 <key>Persist</key>
9390 <integer>1</integer> 9909 <integer>1</integer>
9391 <key>Type</key> 9910 <key>Type</key>
9392 <string>Boolean</string> 9911 <string>Boolean</string>
9393 <key>Value</key> 9912 <key>Value</key>
9394 <integer>1</integer> 9913 <integer>1</integer>
9395 </map> 9914 </map>
9396 <key>WarnReturnToOwner</key> 9915 <key>WarnReturnToOwner</key>
9397 <map> 9916 <map>
9398 <key>Comment</key> 9917 <key>Comment</key>
9399 <string>Enables ReturnToOwner warning dialog</string> 9918 <string>Enables ReturnToOwner warning dialog</string>
9400 <key>Persist</key> 9919 <key>Persist</key>
9401 <integer>1</integer> 9920 <integer>1</integer>
9402 <key>Type</key> 9921 <key>Type</key>
9403 <string>Boolean</string> 9922 <string>Boolean</string>
9404 <key>Value</key> 9923 <key>Value</key>
9405 <integer>1</integer> 9924 <integer>1</integer>
9406 </map> 9925 </map>
9407 <key>WindLightUseAtmosShaders</key> 9926 <key>WatchdogEnabled</key>
9408 <map> 9927 <map>
9409 <key>Comment</key> 9928 <key>Comment</key>
9410 <string>Whether to enable or disable WindLight atmospheric shaders.</string> 9929 <string>Controls whether the thread watchdog timer is activated.</string>
9411 <key>Persist</key> 9930 <key>Persist</key>
9412 <integer>1</integer> 9931 <integer>1</integer>
9413 <key>Type</key> 9932 <key>Type</key>
9414 <string>Boolean</string> 9933 <string>Boolean</string>
9415 <key>Value</key> 9934 <key>Value</key>
9416 <integer>1</integer> 9935 <integer>1</integer>
9417 </map> 9936 </map>
9937 <key>WaterEditPresets</key>
9938 <map>
9939 <key>Comment</key>
9940 <string>Whether to be able to edit the water defaults or not</string>
9941 <key>Persist</key>
9942 <integer>1</integer>
9943 <key>Type</key>
9944 <string>Boolean</string>
9945 <key>Value</key>
9946 <integer>0</integer>
9947 </map>
9948 <key>WaterGLFogDensityScale</key>
9949 <map>
9950 <key>Comment</key>
9951 <string>Maps shader water fog density to gl fog density</string>
9952 <key>Persist</key>
9953 <integer>1</integer>
9954 <key>Type</key>
9955 <string>F32</string>
9956 <key>Value</key>
9957 <real>0.02</real>
9958 </map>
9959 <key>WaterGLFogDepthFloor</key>
9960 <map>
9961 <key>Comment</key>
9962 <string>Controls how dark water gl fog can get</string>
9963 <key>Persist</key>
9964 <integer>1</integer>
9965 <key>Type</key>
9966 <string>F32</string>
9967 <key>Value</key>
9968 <real>0.25</real>
9969 </map>
9970 <key>WaterGLFogDepthScale</key>
9971 <map>
9972 <key>Comment</key>
9973 <string>Controls how quickly gl fog gets dark under water</string>
9974 <key>Persist</key>
9975 <integer>1</integer>
9976 <key>Type</key>
9977 <string>F32</string>
9978 <key>Value</key>
9979 <real>50.0</real>
9980 </map>
9981 <key>WindLightUseAtmosShaders</key>
9982 <map>
9983 <key>Comment</key>
9984 <string>Whether to enable or disable WindLight atmospheric shaders.</string>
9985 <key>Persist</key>
9986 <integer>1</integer>
9987 <key>Type</key>
9988 <string>Boolean</string>
9989 <key>Value</key>
9990 <integer>1</integer>
9991 </map>
9418 <key>WindowHeight</key> 9992 <key>WindowHeight</key>
9419 <map> 9993 <map>
9420 <key>Comment</key> 9994 <key>Comment</key>
9421 <string>SL viewer window height</string> 9995 <string>SL viewer window height</string>
9422 <key>Persist</key> 9996 <key>Persist</key>
9423 <integer>1</integer> 9997 <integer>1</integer>
9424 <key>Type</key> 9998 <key>Type</key>
9425 <string>S32</string> 9999 <string>S32</string>
9426 <key>Value</key> 10000 <key>Value</key>
9427 <integer>700</integer> 10001 <integer>700</integer>
9428 </map> 10002 </map>
9429 <key>WindowMaximized</key> 10003 <key>WindowMaximized</key>
9430 <map> 10004 <map>
9431 <key>Comment</key> 10005 <key>Comment</key>
9432 <string>SL viewer window maximized on login</string> 10006 <string>SL viewer window maximized on login</string>
9433 <key>Persist</key> 10007 <key>Persist</key>
9434 <integer>1</integer> 10008 <integer>1</integer>
9435 <key>Type</key> 10009 <key>Type</key>
9436 <string>Boolean</string> 10010 <string>Boolean</string>
9437 <key>Value</key> 10011 <key>Value</key>
9438 <integer>1</integer> 10012 <integer>1</integer>
9439 </map> 10013 </map>
9440 <key>WindowWidth</key> 10014 <key>WindowWidth</key>
9441 <map> 10015 <map>
9442 <key>Comment</key> 10016 <key>Comment</key>
9443 <string>SL viewer window width</string> 10017 <string>SL viewer window width</string>
9444 <key>Persist</key> 10018 <key>Persist</key>
9445 <integer>1</integer> 10019 <integer>1</integer>
9446 <key>Type</key> 10020 <key>Type</key>
9447 <string>S32</string> 10021 <string>S32</string>
9448 <key>Value</key> 10022 <key>Value</key>
9449 <integer>1000</integer> 10023 <integer>1000</integer>
9450 </map> 10024 </map>
9451 <key>WindowX</key> 10025 <key>WindowX</key>
9452 <map> 10026 <map>
9453 <key>Comment</key> 10027 <key>Comment</key>
9454 <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> 10028 <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9455 <key>Persist</key> 10029 <key>Persist</key>
9456 <integer>1</integer> 10030 <integer>1</integer>
9457 <key>Type</key> 10031 <key>Type</key>
9458 <string>S32</string> 10032 <string>S32</string>
9459 <key>Value</key> 10033 <key>Value</key>
9460 <integer>10</integer> 10034 <integer>10</integer>
9461 </map> 10035 </map>
9462 <key>WindowY</key> 10036 <key>WindowY</key>
9463 <map> 10037 <map>
9464 <key>Comment</key> 10038 <key>Comment</key>
9465 <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> 10039 <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9466 <key>Persist</key> 10040 <key>Persist</key>
9467 <integer>1</integer> 10041 <integer>1</integer>
9468 <key>Type</key> 10042 <key>Type</key>
9469 <string>S32</string> 10043 <string>S32</string>
9470 <key>Value</key> 10044 <key>Value</key>
9471 <integer>10</integer> 10045 <integer>10</integer>
9472 </map> 10046 </map>
9473 <key>WLSkyDetail</key>
9474 <map>
9475 <key>Comment</key>
9476 <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
9477 <key>Persist</key>
9478 <integer>1</integer>
9479 <key>Type</key>
9480 <string>U32</string>
9481 <key>Value</key>
9482 <integer>64</integer>
9483 </map>
9484 <key>XferThrottle</key> 10047 <key>XferThrottle</key>
9485 <map> 10048 <map>
9486 <key>Comment</key> 10049 <key>Comment</key>
9487 <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string> 10050 <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
9488 <key>Persist</key> 10051 <key>Persist</key>
9489 <integer>1</integer> 10052 <integer>1</integer>
9490 <key>Type</key> 10053 <key>Type</key>
9491 <string>F32</string> 10054 <string>F32</string>
9492 <key>Value</key> 10055 <key>Value</key>
9493 <real>150000</real> 10056 <real>150000.0</real>
9494 </map> 10057 </map>
9495 <key>YawFromMousePosition</key> 10058 <key>YawFromMousePosition</key>
9496 <map> 10059 <map>
9497 <key>Comment</key> 10060 <key>Comment</key>
9498 <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string> 10061 <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
9499 <key>Persist</key> 10062 <key>Persist</key>
9500 <integer>1</integer> 10063 <integer>1</integer>
9501 <key>Type</key> 10064 <key>Type</key>
9502 <string>F32</string> 10065 <string>F32</string>
9503 <key>Value</key> 10066 <key>Value</key>
9504 <real>90</real> 10067 <real>90.0</real>
9505 </map> 10068 </map>
9506 <key>YieldTime</key> 10069 <key>YieldTime</key>
9507 <map> 10070 <map>
9508 <key>Comment</key> 10071 <key>Comment</key>
9509 <string>Yield some time to the local host.</string> 10072 <string>Yield some time to the local host.</string>
9510 <key>Persist</key> 10073 <key>Persist</key>
9511 <integer>1</integer> 10074 <integer>1</integer>
9512 <key>Type</key> 10075 <key>Type</key>
9513 <string>S32</string> 10076 <string>S32</string>
9514 <key>Value</key> 10077 <key>Value</key>
9515 <integer>-1</integer> 10078 <integer>-1</integer>
9516 </map> 10079 </map>
10080 <key>ZoomDirect</key>
10081 <map>
10082 <key>Comment</key>
10083 <string>Map Joystick zoom axis directly to camera zoom.</string>
10084 <key>Persist</key>
10085 <integer>1</integer>
10086 <key>Type</key>
10087 <string>Boolean</string>
10088 <key>Value</key>
10089 <integer>0</integer>
10090 </map>
9517 <key>ZoomTime</key> 10091 <key>ZoomTime</key>
9518 <map> 10092 <map>
9519 <key>Comment</key> 10093 <key>Comment</key>
9520 <string>Time of transition between different camera modes (seconds)</string> 10094 <string>Time of transition between different camera modes (seconds)</string>
9521 <key>Persist</key> 10095 <key>Persist</key>
9522 <integer>1</integer> 10096 <integer>1</integer>
9523 <key>Type</key> 10097 <key>Type</key>
9524 <string>F32</string> 10098 <string>F32</string>
9525 <key>Value</key> 10099 <key>Value</key>
9526 <real>0.4000000059604644775390625</real> 10100 <real>0.40000000596</real>
9527 </map> 10101 </map>
9528 <key>llOwnerSayChatColor</key> 10102 <key>llOwnerSayChatColor</key>
9529 <map> 10103 <map>
9530 <key>Comment</key> 10104 <key>Comment</key>
9531 <string>Color of chat messages from objects only visible to the owner</string> 10105 <string>Color of chat messages from objects only visible to the owner</string>
9532 <key>Persist</key> 10106 <key>Persist</key>
9533 <integer>1</integer> 10107 <integer>1</integer>
9534 <key>Type</key> 10108 <key>Type</key>
9535 <string>Color4</string> 10109 <string>Color4</string>
9536 <key>Value</key> 10110 <key>Value</key>
9537 <array> 10111 <array>
9538 <real>0.9900000095367431640625</real> 10112 <real>0.990000009537</real>
9539 <real>0.9900000095367431640625</real> 10113 <real>0.990000009537</real>
9540 <real>0.689999997615814208984375</real> 10114 <real>0.689999997616</real>
9541 <real>1</real> 10115 <real>1.0</real>
9542 </array> 10116 </array>
9543 </map> 10117 </map>
9544 <key>ParcelMediaAutoPlayEnable</key>
9545 <map>
9546 <key>Comment</key>
9547 <string>Auto play parcel media when available</string>
9548 <key>Persist</key>
9549 <integer>1</integer>
9550 <key>Type</key>
9551 <string>Boolean</string>
9552 <key>Value</key>
9553 <integer>0</integer>
9554 </map>
9555 <key>particlesbeacon</key> 10118 <key>particlesbeacon</key>
9556 <map> 10119 <map>
9557 <key>Comment</key> 10120 <key>Comment</key>
9558 <string>Beacon / Highlight particle generators</string> 10121 <string>Beacon / Highlight particle generators</string>
9559 <key>Persist</key> 10122 <key>Persist</key>
9560 <integer>1</integer> 10123 <integer>1</integer>
9561 <key>Type</key> 10124 <key>Type</key>
9562 <string>Boolean</string> 10125 <string>Boolean</string>
9563 <key>Value</key> 10126 <key>Value</key>
9564 <integer>0</integer> 10127 <integer>0</integer>
9565 </map> 10128 </map>
9566 <key>physicalbeacon</key> 10129 <key>physicalbeacon</key>
9567 <map> 10130 <map>
9568 <key>Comment</key> 10131 <key>Comment</key>
9569 <string>Beacon / Highlight physical objects</string> 10132 <string>Beacon / Highlight physical objects</string>
9570 <key>Persist</key> 10133 <key>Persist</key>
9571 <integer>1</integer> 10134 <integer>1</integer>
9572 <key>Type</key> 10135 <key>Type</key>
9573 <string>Boolean</string> 10136 <string>Boolean</string>
9574 <key>Value</key> 10137 <key>Value</key>
9575 <integer>1</integer> 10138 <integer>1</integer>
9576 </map> 10139 </map>
9577 <key>renderbeacons</key> 10140 <key>renderbeacons</key>
9578 <map> 10141 <map>
9579 <key>Comment</key> 10142 <key>Comment</key>
9580 <string>Beacon / Highlight particle generators</string> 10143 <string>Beacon / Highlight particle generators</string>
9581 <key>Persist</key> 10144 <key>Persist</key>
9582 <integer>1</integer> 10145 <integer>1</integer>
9583 <key>Type</key> 10146 <key>Type</key>
9584 <string>Boolean</string> 10147 <string>Boolean</string>
9585 <key>Value</key> 10148 <key>Value</key>
9586 <integer>0</integer> 10149 <integer>0</integer>
9587 </map> 10150 </map>
9588 <key>renderhighlights</key> 10151 <key>renderhighlights</key>
9589 <map> 10152 <map>
9590 <key>Comment</key> 10153 <key>Comment</key>
9591 <string>Beacon / Highlight scripted objects with touch function</string> 10154 <string>Beacon / Highlight scripted objects with touch function</string>
9592 <key>Persist</key> 10155 <key>Persist</key>
9593 <integer>1</integer> 10156 <integer>1</integer>
9594 <key>Type</key> 10157 <key>Type</key>
9595 <string>Boolean</string> 10158 <string>Boolean</string>
9596 <key>Value</key> 10159 <key>Value</key>
9597 <integer>1</integer> 10160 <integer>1</integer>
9598 </map> 10161 </map>
9599 <key>scriptsbeacon</key> 10162 <key>scriptsbeacon</key>
9600 <map> 10163 <map>
9601 <key>Comment</key> 10164 <key>Comment</key>
9602 <string>Beacon / Highlight scripted objects</string> 10165 <string>Beacon / Highlight scripted objects</string>
9603 <key>Persist</key> 10166 <key>Persist</key>
9604 <integer>1</integer> 10167 <integer>1</integer>
9605 <key>Type</key> 10168 <key>Type</key>
9606 <string>Boolean</string> 10169 <string>Boolean</string>
9607 <key>Value</key> 10170 <key>Value</key>
9608 <integer>0</integer> 10171 <integer>0</integer>
9609 </map> 10172 </map>
9610 <key>scripttouchbeacon</key> 10173 <key>scripttouchbeacon</key>
9611 <map> 10174 <map>
9612 <key>Comment</key> 10175 <key>Comment</key>
9613 <string>Beacon / Highlight scripted objects with touch function</string> 10176 <string>Beacon / Highlight scripted objects with touch function</string>
9614 <key>Persist</key> 10177 <key>Persist</key>
9615 <integer>1</integer> 10178 <integer>1</integer>
9616 <key>Type</key> 10179 <key>Type</key>
9617 <string>Boolean</string> 10180 <string>Boolean</string>
9618 <key>Value</key> 10181 <key>Value</key>
9619 <integer>1</integer> 10182 <integer>1</integer>
9620 </map> 10183 </map>
9621 <key>soundsbeacon</key> 10184 <key>soundsbeacon</key>
9622 <map> 10185 <map>
9623 <key>Comment</key> 10186 <key>Comment</key>
9624 <string>Beacon / Highlight sound generators</string> 10187 <string>Beacon / Highlight sound generators</string>
9625 <key>Persist</key> 10188 <key>Persist</key>
9626 <integer>1</integer> 10189 <integer>1</integer>
9627 <key>Type</key> 10190 <key>Type</key>
9628 <string>Boolean</string> 10191 <string>Boolean</string>
9629 <key>Value</key> 10192 <key>Value</key>
9630 <integer>0</integer> 10193 <integer>0</integer>
9631 </map>
9632 <key>SkyEditPresets</key>
9633 <map>
9634 <key>Comment</key>
9635 <string>Whether to be able to edit the sky defaults or not</string>
9636 <key>Persist</key>
9637 <integer>1</integer>
9638 <key>Type</key>
9639 <string>Boolean</string>
9640 <key>Value</key>
9641 <integer>0</integer>
9642 </map>
9643 <key>WaterGLFogDepthFloor</key>
9644 <map>
9645 <key>Comment</key>
9646 <string>Controls how dark water gl fog can get</string>
9647 <key>Persist</key>
9648 <integer>1</integer>
9649 <key>Type</key>
9650 <string>F32</string>
9651 <key>Value</key>
9652 <real>0.25</real>
9653 </map>
9654 <key>WaterGLFogDepthScale</key>
9655 <map>
9656 <key>Comment</key>
9657 <string>Controls how quickly gl fog gets dark under water</string>
9658 <key>Persist</key>
9659 <integer>1</integer>
9660 <key>Type</key>
9661 <string>F32</string>
9662 <key>Value</key>
9663 <real>50.0</real>
9664 </map>
9665 <key>WaterGLFogDensityScale</key>
9666 <map>
9667 <key>Comment</key>
9668 <string>Maps shader water fog density to gl fog density</string>
9669 <key>Persist</key>
9670 <integer>1</integer>
9671 <key>Type</key>
9672 <string>F32</string>
9673 <key>Value</key>
9674 <real>0.02</real>
9675 </map>
9676 <key>EnableRippleWater</key>
9677 <map>
9678 <key>Comment</key>
9679 <string>Whether to use ripple water shader or not</string>
9680 <key>Persist</key>
9681 <integer>1</integer>
9682 <key>Type</key>
9683 <string>Boolean</string>
9684 <key>Value</key>
9685 <integer>1</integer>
9686 </map>
9687 <key>WaterEditPresets</key>
9688 <map>
9689 <key>Comment</key>
9690 <string>Whether to be able to edit the water defaults or not</string>
9691 <key>Persist</key>
9692 <integer>1</integer>
9693 <key>Type</key>
9694 <string>Boolean</string>
9695 <key>Value</key>
9696 <integer>0</integer>
9697 </map>
9698 <key>FloaterEnvRect</key>
9699 <map>
9700 <key>Comment</key>
9701 <string>Rectangle for Environment Editor</string>
9702 <key>Persist</key>
9703 <integer>1</integer>
9704 <key>Type</key>
9705 <string>Rect</string>
9706 <key>Value</key>
9707 <array>
9708 <integer>50</integer>
9709 <integer>150</integer>
9710 <integer>650</integer>
9711 <integer>0</integer>
9712 </array>
9713 </map>
9714 <key>FloaterAdvancedSkyRect</key>
9715 <map>
9716 <key>Comment</key>
9717 <string>Rectangle for Advanced Sky Editor</string>
9718 <key>Persist</key>
9719 <integer>1</integer>
9720 <key>Type</key>
9721 <string>Rect</string>
9722 <key>Value</key>
9723 <array>
9724 <integer>50</integer>
9725 <integer>220</integer>
9726 <integer>450</integer>
9727 <integer>0</integer>
9728 </array>
9729 </map>
9730 <key>FloaterDayCycleRect</key>
9731 <map>
9732 <key>Comment</key>
9733 <string>Rectangle for Day Cycle Editor</string>
9734 <key>Persist</key>
9735 <integer>1</integer>
9736 <key>Type</key>
9737 <string>Rect</string>
9738 <key>Value</key>
9739 <array>
9740 <integer>50</integer>
9741 <integer>450</integer>
9742 <integer>300</integer>
9743 <integer>0</integer>
9744 </array>
9745 </map>
9746 <key>FloaterAdvancedWaterRect</key>
9747 <map>
9748 <key>Comment</key>
9749 <string>Rectangle for Advanced Water Editor</string>
9750 <key>Persist</key>
9751 <integer>1</integer>
9752 <key>Type</key>
9753 <string>Rect</string>
9754 <key>Value</key>
9755 <array>
9756 <integer>50</integer>
9757 <integer>220</integer>
9758 <integer>450</integer>
9759 <integer>0</integer>
9760 </array>
9761 </map>
9762 <key>RenderFastAlpha</key>
9763 <map>
9764 <key>Comment</key>
9765 <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
9766 <key>Persist</key>
9767 <integer>1</integer>
9768 <key>Type</key>
9769 <string>Boolean</string>
9770 <key>Value</key>
9771 <integer>0</integer>
9772 </map>
9773 <key>RenderDeferred</key>
9774 <map>
9775 <key>Comment</key>
9776 <string>Use deferred rendering pipeline.</string>
9777 <key>Persist</key>
9778 <integer>1</integer>
9779 <key>Type</key>
9780 <string>Boolean</string>
9781 <key>Value</key>
9782 <integer>0</integer>
9783 </map>
9784 <key>RenderFSAASamples</key>
9785 <map>
9786 <key>Comment</key>
9787 <string>Number of samples to use for FSAA (0 = no AA).</string>
9788 <key>Persist</key>
9789 <integer>1</integer>
9790 <key>Type</key>
9791 <string>U32</string>
9792 <key>Value</key>
9793 <integer>0</integer>
9794 </map>
9795 <key>RenderTextureMemoryMultiple</key>
9796 <map>
9797 <key>Comment</key>
9798 <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
9799 <key>Persist</key>
9800 <integer>1</integer>
9801 <key>Type</key>
9802 <string>F32</string>
9803 <key>Value</key>
9804 <real>1.0</real>
9805 </map>
9806 <key>Disregard128DefaultDrawDistance</key>
9807 <map>
9808 <key>Comment</key>
9809 <string>Whether to use the auto default to 128 draw distance</string>
9810 <key>Persist</key>
9811 <integer>1</integer>
9812 <key>Type</key>
9813 <string>Boolean</string>
9814 <key>Value</key>
9815 <real>1</real>
9816 </map>
9817 <key>Disregard96DefaultDrawDistance</key>
9818 <map>
9819 <key>Comment</key>
9820 <string>Whether to use the auto default to 96 draw distance</string>
9821 <key>Persist</key>
9822 <integer>1</integer>
9823 <key>Type</key>
9824 <string>Boolean</string>
9825 <key>Value</key>
9826 <real>1</real>
9827 </map>
9828
9829 <key>AvatarAxisDeadZone0</key>
9830 <map>
9831 <key>Comment</key>
9832 <string>Avatar axis 0 dead zone.</string>
9833 <key>Persist</key>
9834 <integer>1</integer>
9835 <key>Type</key>
9836 <string>F32</string>
9837 <key>Value</key>
9838 <real>0.1</real>
9839 </map>
9840 <key>AvatarAxisDeadZone1</key>
9841 <map>
9842 <key>Comment</key>
9843 <string>Avatar axis 1 dead zone.</string>
9844 <key>Persist</key>
9845 <integer>1</integer>
9846 <key>Type</key>
9847 <string>F32</string>
9848 <key>Value</key>
9849 <real>0.1</real>
9850 </map>
9851 <key>AvatarAxisDeadZone2</key>
9852 <map>
9853 <key>Comment</key>
9854 <string>Avatar axis 2 dead zone.</string>
9855 <key>Persist</key>
9856 <integer>1</integer>
9857 <key>Type</key>
9858 <string>F32</string>
9859 <key>Value</key>
9860 <real>0.1</real>
9861 </map>
9862 <key>AvatarAxisDeadZone3</key>
9863 <map>
9864 <key>Comment</key>
9865 <string>Avatar axis 3 dead zone.</string>
9866 <key>Persist</key>
9867 <integer>1</integer>
9868 <key>Type</key>
9869 <string>F32</string>
9870 <key>Value</key>
9871 <real>0.1</real>
9872 </map>
9873 <key>AvatarAxisDeadZone4</key>
9874 <map>
9875 <key>Comment</key>
9876 <string>Avatar axis 4 dead zone.</string>
9877 <key>Persist</key>
9878 <integer>1</integer>
9879 <key>Type</key>
9880 <string>F32</string>
9881 <key>Value</key>
9882 <real>0.1</real>
9883 </map>
9884 <key>AvatarAxisDeadZone5</key>
9885 <map>
9886 <key>Comment</key>
9887 <string>Avatar axis 5 dead zone.</string>
9888 <key>Persist</key>
9889 <integer>1</integer>
9890 <key>Type</key>
9891 <string>F32</string>
9892 <key>Value</key>
9893 <real>0.1</real>
9894 </map>
9895 <key>AvatarAxisScale0</key>
9896 <map>
9897 <key>Comment</key>
9898 <string>Avatar axis 0 scaler.</string>
9899 <key>Persist</key>
9900 <integer>1</integer>
9901 <key>Type</key>
9902 <string>F32</string>
9903 <key>Value</key>
9904 <real>1</real>
9905 </map>
9906 <key>AvatarAxisScale1</key>
9907 <map>
9908 <key>Comment</key>
9909 <string>Avatar axis 1 scaler.</string>
9910 <key>Persist</key>
9911 <integer>1</integer>
9912 <key>Type</key>
9913 <string>F32</string>
9914 <key>Value</key>
9915 <real>1</real>
9916 </map>
9917 <key>AvatarAxisScale2</key>
9918 <map>
9919 <key>Comment</key>
9920 <string>Avatar axis 2 scaler.</string>
9921 <key>Persist</key>
9922 <integer>1</integer>
9923 <key>Type</key>
9924 <string>F32</string>
9925 <key>Value</key>
9926 <real>1</real>
9927 </map>
9928 <key>AvatarAxisScale3</key>
9929 <map>
9930 <key>Comment</key>
9931 <string>Avatar axis 3 scaler.</string>
9932 <key>Persist</key>
9933 <integer>1</integer>
9934 <key>Type</key>
9935 <string>F32</string>
9936 <key>Value</key>
9937 <real>1</real>
9938 </map>
9939 <key>AvatarAxisScale4</key>
9940 <map>
9941 <key>Comment</key>
9942 <string>Avatar axis 4 scaler.</string>
9943 <key>Persist</key>
9944 <integer>1</integer>
9945 <key>Type</key>
9946 <string>F32</string>
9947 <key>Value</key>
9948 <real>1</real>
9949 </map>
9950 <key>AvatarAxisScale5</key>
9951 <map>
9952 <key>Comment</key>
9953 <string>Avatar axis 5 scaler.</string>
9954 <key>Persist</key>
9955 <integer>1</integer>
9956 <key>Type</key>
9957 <string>F32</string>
9958 <key>Value</key>
9959 <real>1</real>
9960 </map>
9961 <key>AvatarFeathering</key>
9962 <map>
9963 <key>Comment</key>
9964 <string>Avatar feathering (less is softer)</string>
9965 <key>Persist</key>
9966 <integer>1</integer>
9967 <key>Type</key>
9968 <string>F32</string>
9969 <key>Value</key>
9970 <real>16</real>
9971 </map>
9972
9973 <key>BuildAxisDeadZone0</key>
9974 <map>
9975 <key>Comment</key>
9976 <string>Build axis 0 dead zone.</string>
9977 <key>Persist</key>
9978 <integer>1</integer>
9979 <key>Type</key>
9980 <string>F32</string>
9981 <key>Value</key>
9982 <real>0.1</real>
9983 </map>
9984 <key>BuildAxisDeadZone1</key>
9985 <map>
9986 <key>Comment</key>
9987 <string>Build axis 1 dead zone.</string>
9988 <key>Persist</key>
9989 <integer>1</integer>
9990 <key>Type</key>
9991 <string>F32</string>
9992 <key>Value</key>
9993 <real>0.1</real>
9994 </map>
9995 <key>BuildAxisDeadZone2</key>
9996 <map>
9997 <key>Comment</key>
9998 <string>Build axis 2 dead zone.</string>
9999 <key>Persist</key>
10000 <integer>1</integer>
10001 <key>Type</key>
10002 <string>F32</string>
10003 <key>Value</key>
10004 <real>0.1</real>
10005 </map>
10006 <key>BuildAxisDeadZone3</key>
10007 <map>
10008 <key>Comment</key>
10009 <string>Build axis 3 dead zone.</string>
10010 <key>Persist</key>
10011 <integer>1</integer>
10012 <key>Type</key>
10013 <string>F32</string>
10014 <key>Value</key>
10015 <real>0.1</real>
10016 </map>
10017 <key>BuildAxisDeadZone4</key>
10018 <map>
10019 <key>Comment</key>
10020 <string>Build axis 4 dead zone.</string>
10021 <key>Persist</key>
10022 <integer>1</integer>
10023 <key>Type</key>
10024 <string>F32</string>
10025 <key>Value</key>
10026 <real>0.1</real>
10027 </map>
10028 <key>BuildAxisDeadZone5</key>
10029 <map>
10030 <key>Comment</key>
10031 <string>Build axis 5 dead zone.</string>
10032 <key>Persist</key>
10033 <integer>1</integer>
10034 <key>Type</key>
10035 <string>F32</string>
10036 <key>Value</key>
10037 <real>0.1</real>
10038 </map>
10039 <key>BuildAxisScale0</key>
10040 <map>
10041 <key>Comment</key>
10042 <string>Build axis 0 scaler.</string>
10043 <key>Persist</key>
10044 <integer>1</integer>
10045 <key>Type</key>
10046 <string>F32</string>
10047 <key>Value</key>
10048 <real>1</real>
10049 </map>
10050 <key>BuildAxisScale1</key>
10051 <map>
10052 <key>Comment</key>
10053 <string>Build axis 1 scaler.</string>
10054 <key>Persist</key>
10055 <integer>1</integer>
10056 <key>Type</key>
10057 <string>F32</string>
10058 <key>Value</key>
10059 <real>1</real>
10060 </map>
10061 <key>BuildAxisScale2</key>
10062 <map>
10063 <key>Comment</key>
10064 <string>Build axis 2 scaler.</string>
10065 <key>Persist</key>
10066 <integer>1</integer>
10067 <key>Type</key>
10068 <string>F32</string>
10069 <key>Value</key>
10070 <real>1</real>
10071 </map>
10072 <key>BuildAxisScale3</key>
10073 <map>
10074 <key>Comment</key>
10075 <string>Build axis 3 scaler.</string>
10076 <key>Persist</key>
10077 <integer>1</integer>
10078 <key>Type</key>
10079 <string>F32</string>
10080 <key>Value</key>
10081 <real>1</real>
10082 </map>
10083 <key>BuildAxisScale4</key>
10084 <map>
10085 <key>Comment</key>
10086 <string>Build axis 4 scaler.</string>
10087 <key>Persist</key>
10088 <integer>1</integer>
10089 <key>Type</key>
10090 <string>F32</string>
10091 <key>Value</key>
10092 <real>1</real>
10093 </map>
10094 <key>BuildAxisScale5</key>
10095 <map>
10096 <key>Comment</key>
10097 <string>Build axis 5 scaler.</string>
10098 <key>Persist</key>
10099 <integer>1</integer>
10100 <key>Type</key>
10101 <string>F32</string>
10102 <key>Value</key>
10103 <real>1</real>
10104 </map>
10105 <key>BuildFeathering</key>
10106 <map>
10107 <key>Comment</key>
10108 <string>Build feathering (less is softer)</string>
10109 <key>Persist</key>
10110 <integer>1</integer>
10111 <key>Type</key>
10112 <string>F32</string>
10113 <key>Value</key>
10114 <real>16</real>
10115 </map>
10116
10117 </map> 10194 </map>
10195 </map>
10118</llsd> 10196</llsd>
diff --git a/linden/indra/newview/app_settings/skinned_avatar.vp b/linden/indra/newview/app_settings/skinned_avatar.vp
deleted file mode 100644
index a4adbd5..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar.vp
+++ /dev/null
@@ -1,146 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM embossScale = program.env[63];
7PARAM proj[4] = { state.matrix.projection };
8PARAM modelAmbient = state.lightmodel.ambient;
9PARAM materialDiffuse = state.material.diffuse;
10PARAM lightDir0 = state.light[0].position;
11PARAM diffuseCol0 = state.light[0].diffuse;
12PARAM lightDir1 = state.light[1].position;
13PARAM diffuseCol1 = state.light[1].diffuse;
14PARAM lightPos2 = state.light[2].position;
15PARAM diffuseCol2 = state.light[2].diffuse;
16PARAM lightPos3 = state.light[3].position;
17PARAM diffuseCol3 = state.light[3].diffuse;
18
19# Per vertex inputs
20ATTRIB iPos = vertex.position;
21ATTRIB iNormal = vertex.normal;
22ATTRIB iTex0 = vertex.texcoord[0];
23ATTRIB iTex1 = vertex.texcoord[1];
24ATTRIB iWeight = vertex.attrib[1];
25ATTRIB iBinormal = vertex.attrib[6];
26
27# Temporaries
28TEMP blendBinorm; # result of skinned binormal
29TEMP blendTangent; # result of skinned tangent
30TEMP blendMat;
31TEMP blendPos; # skinned vertex pos
32TEMP dots; # dot product for lighting calculations
33TEMP blendNorm; # skinned normal
34TEMP colorAcc; # color accumulator
35
36ALIAS scaledWeight = colorAcc;
37ALIAS divisor = blendMat; # divisor for normalization process
38ALIAS lightDir = blendBinorm;
39
40ADDRESS address;
41
42# Outputs
43OUTPUT oPos = result.position; #position
44OUTPUT oCol0 = result.color; #primary color
45OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
46OUTPUT oTex1 = result.texcoord[1]; #texture coordinate set 1
47OUTPUT oFog = result.fogcoord; #output fog coord
48
49#fix input blending weight
50ARL address.x, iWeight.x;
51FRC scaledWeight.x, iWeight;
52
53#Output position and normal
54MUL dots, mat[address.x + 1], {1,1,1,1};
55SUB blendMat, dots, mat[address.x + 0];
56MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0];
57DP4 blendPos.x, blendMat, iPos;
58DP3 blendNorm.x, blendMat, iNormal;
59DP3 blendBinorm.x, blendMat, iBinormal;
60
61MUL dots, mat[address.x + 16], {1,1,1,1};
62SUB blendMat, dots, mat[address.x + 15];
63MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15];
64DP4 blendPos.y, blendMat, iPos;
65DP3 blendNorm.y, blendMat, iNormal;
66DP3 blendBinorm.y, blendMat, iBinormal;
67
68MUL dots, mat[address.x + 31], {1,1,1,1};
69SUB blendMat, dots, mat[address.x + 30];
70MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30];
71DP4 blendPos.z, blendMat, iPos;
72DP3 blendNorm.z, blendMat, iNormal;
73DP3 blendBinorm.z, blendMat, iBinormal;
74MOV blendPos.w, {0, 0, 0, 1};
75
76#renormalize normal
77#add "normal spread" effect
78ADD blendNorm, blendNorm, {0, 0, -0.4, 0};
79DP3 divisor.w, blendNorm, blendNorm;
80RSQ divisor.xyz, divisor.w;
81MUL blendNorm.xyz, blendNorm, divisor;
82
83#renormalize binormal
84DP3 divisor.w, blendBinorm, blendBinorm;
85RSQ divisor.xyz, divisor.w;
86MUL blendBinorm.xyz, blendBinorm, divisor;
87
88#Projection
89DP4 oPos.x, proj[0], blendPos;
90DP4 oPos.y, proj[1], blendPos;
91DP4 oPos.z, proj[2], blendPos;
92DP4 oPos.w, proj[3], blendPos;
93
94#tangent = binormal X normal
95XPD blendTangent, blendNorm, blendBinorm;
96
97#oTex1 = iTex0 + LLVector2( lightDir0 * tangent, lightDir0 * binormal );
98DP3 blendTangent.x, lightDir0, blendTangent;
99DP3 blendTangent.y, lightDir0, blendBinorm;
100MAD oTex1, embossScale.x, blendTangent, iTex0;
101
102#Light 0
103DP3 colorAcc.xyz, blendNorm, lightDir0;
104MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
105MAX colorAcc, colorAcc, {0, 0, 0, 0};
106
107# Accumulate color contributions.
108MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient;
109MOV colorAcc.w, {0, 0, 0, 1.0};
110
111#Light 1
112DP3 dots.x, blendNorm, lightDir1;
113
114#Light 2
115SUB lightDir, lightPos2, blendPos;
116DP3 divisor.w, lightDir, lightDir;
117RSQ divisor.xyz, divisor.w;
118MUL lightDir.xyz, lightDir, divisor;
119
120DP3 dots.y, blendNorm, lightDir;
121
122#Light 3
123SUB lightDir, lightPos3, blendPos;
124DP3 divisor.w, lightDir, lightDir;
125RSQ divisor.xyz, divisor.w;
126MUL lightDir.xyz, lightDir, divisor;
127
128DP3 dots.z, blendNorm, lightDir;
129
130# Apply Lights
131MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
132MAX dots, dots, {0,0,0,0};
133MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc;
134MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc;
135MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc;
136
137#Output color
138MUL oCol0, materialDiffuse, colorAcc;
139
140#Output tex coordinate
141MOV oTex0, iTex0;
142
143#Output fog
144MOV oFog.x, blendPos.z;
145
146END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp
deleted file mode 100644
index 5c45118..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp
+++ /dev/null
@@ -1,179 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5#PARAM gGravity = program.env[62];
6
7PARAM gMat[45] = { program.env[0..44] };
8PARAM gWindDir = program.env[60]; # wind direction with strength stored in w
9PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase
10PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients
11PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2}
12PARAM gProjection[4] = { state.matrix.projection };
13PARAM gModelAmbient = state.lightmodel.ambient;
14PARAM gMaterialDiffuse = state.material.diffuse;
15PARAM gLightDir0 = state.light[0].position;
16PARAM gDiffuseCol0 = state.light[0].diffuse;
17PARAM gLightDir1 = state.light[1].position;
18PARAM gDiffuseCol1 = state.light[1].diffuse;
19PARAM gLightPos2 = state.light[2].position;
20PARAM gDiffuseCol2 = state.light[2].diffuse;
21PARAM gLightPos3 = state.light[3].position;
22PARAM gDiffuseCol3 = state.light[3].diffuse;
23
24# Per vertex inputs
25ATTRIB iPos = vertex.position;
26ATTRIB iNormal = vertex.normal;
27ATTRIB iTex0 = vertex.texcoord;
28ATTRIB iWeight = vertex.attrib[1];
29ATTRIB iClothing = vertex.attrib[4];
30
31# Temporaries
32TEMP blendedPos; # weighted sum of tpos0 and tpos1
33TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1
34TEMP temp0;
35TEMP temp1; # another general purpose temp
36TEMP temp2;
37TEMP windEffect; # amount of displacement from wind
38TEMP blendMatX;
39TEMP blendMatY;
40TEMP blendMatZ;
41
42ALIAS colorAcc = temp0;
43ALIAS sinWave = temp0;
44ALIAS offsetPos = temp1;
45ALIAS dots = temp1; # dot product for lighting calculations
46ALIAS posDelta = windEffect; # movement of vertex according to joint angle
47ALIAS pivot_pos = windEffect;
48ALIAS scaledWeight = temp0;
49ALIAS divisor = temp2;
50ALIAS lightDir = windEffect;
51
52ADDRESS address;
53
54# Outputs
55OUTPUT oPos = result.position; # position
56OUTPUT oCol0 = result.color; # primary color
57OUTPUT oTex0 = result.texcoord; # texture coordinate set 0
58OUTPUT oFog = result.fogcoord; # output fog coordinates
59
60#fix input blending weight
61ARL address.x, iWeight.x;
62FRC scaledWeight.x, iWeight;
63
64# Blend joint matrices
65MUL blendMatX, gMat[address.x + 1], {1,1,1,1};
66SUB blendMatX, blendMatX, gMat[address.x + 0];
67MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0];
68DP3 blendNorm.x, blendMatX, iNormal;
69
70MUL blendMatY, gMat[address.x + 16], {1,1,1,1};
71SUB blendMatY, blendMatY, gMat[address.x + 15];
72MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15];
73DP3 blendNorm.y, blendMatY, iNormal;
74
75MUL blendMatZ, gMat[address.x + 31], {1,1,1,1};
76SUB blendMatZ, blendMatZ, gMat[address.x + 30];
77MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30];
78DP3 blendNorm.z, blendMatZ, iNormal;
79
80#wind
81DP3 windEffect, blendNorm, gWindDir;
82MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input
83
84#reduce to period of 2 PI
85MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1]
86EXP temp0, temp1.x; # find mod(x, 1)
87MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
88
89# offset to [-PI, PI]
90ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592};
91
92#calculate sinusoid
93MUL temp1, windEffect, windEffect; # x^2
94MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5!
95MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3!
96MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1
97MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1)
98
99# sinWave.x holds sin(norm . wind_direction)+
100MUL sinWave.xyz, sinWave, gWindDir.w; # multiply by wind strength in gWindDir.w [-wind, wind]
101SUB sinWave.xyz, sinWave, {0.2, 0.2, 0.2, 0.2};
102MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage
103
104DP3 temp2.x, iClothing, iClothing;
105MAX temp2.x, temp2, {0, 0, 0, 0.2};
106MUL temp2.x, temp2.x, {3, 0, 0, 0};
107MUL sinWave.x, sinWave, temp2;
108
109#add pseudo-specular effect
110ADD blendNorm, blendNorm, {0, 0, -0.5, 0};
111
112#renormalize normal
113DP3 divisor.w, blendNorm, blendNorm;
114RSQ divisor.xyz, divisor.w;
115MUL blendNorm.xyz, blendNorm, divisor;
116
117#Output position
118DP4 blendedPos.x, blendMatX, iPos;
119DP4 blendedPos.y, blendMatY, iPos;
120DP4 blendedPos.z, blendMatZ, iPos;
121
122MUL offsetPos, gWindDir, sinWave.x; # multiply wind effect times clothing displacement
123MAD blendedPos, {-1.0, -1.0, -1.0, 0.0}, offsetPos, blendedPos; # add to offset vertex position, and zero out effect from w
124
125MOV blendedPos.w, {0, 0, 0, 1};
126
127#Projection
128DP4 oPos.x, gProjection[0], blendedPos; # projection matrix
129DP4 oPos.y, gProjection[1], blendedPos;
130DP4 oPos.z, gProjection[2], blendedPos;
131DP4 oPos.w, gProjection[3], blendedPos;
132
133#Light 0
134DP3 dots.x, blendNorm, gLightDir0;
135MAD dots.x, dots.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
136MAX dots, dots, {0, 0, 0, 0};
137
138# Accumulate color contributions.
139MAD temp2, dots.x, gDiffuseCol0, gModelAmbient;
140MOV colorAcc.xyz, temp2;
141
142#Light 1
143DP3 dots.x, blendNorm, gLightDir1;
144
145#Light 2
146SUB lightDir, gLightPos2, blendedPos;
147DP3 divisor.w, lightDir, lightDir;
148RSQ divisor.xyz, divisor.w;
149MUL lightDir.xyz, lightDir, divisor;
150
151DP3 dots.y, blendNorm, lightDir;
152
153#Light 3
154SUB lightDir, gLightPos3, blendedPos;
155DP3 divisor.w, lightDir, lightDir;
156RSQ divisor.xyz, divisor.w;
157MUL lightDir.xyz, lightDir, divisor;
158
159DP3 dots.z, blendNorm, lightDir;
160
161#Apply lights
162MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
163MAX dots, dots, {0, 0, 0, 0};
164MAD colorAcc.xyz, dots.x, gDiffuseCol1, colorAcc;
165MAD colorAcc.xyz, dots.y, gDiffuseCol2, colorAcc;
166MAD colorAcc.xyz, dots.z, gDiffuseCol3, colorAcc;
167
168#Output fog
169# This causes issues on ATI when fog is disabled
170MOV oFog.x, blendedPos.z;
171
172#Output color
173MOV colorAcc.w, {0, 0, 0, 1.0};
174MUL oCol0, gMaterialDiffuse, colorAcc;
175
176#Output tex coordinate
177MOV oTex0, iTex0;
178
179END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp b/linden/indra/newview/app_settings/skinned_avatar_nobump.vp
deleted file mode 100644
index 1874e54..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp
+++ /dev/null
@@ -1,128 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM proj[4] = { state.matrix.projection };
7PARAM modelAmbient = state.lightmodel.ambient;
8PARAM materialDiffuse = state.material.diffuse;
9PARAM lightDir0 = state.light[0].position;
10PARAM diffuseCol0 = state.light[0].diffuse;
11PARAM lightDir1 = state.light[1].position;
12PARAM diffuseCol1 = state.light[1].diffuse;
13PARAM lightPos2 = state.light[2].position;
14PARAM diffuseCol2 = state.light[2].diffuse;
15PARAM lightPos3 = state.light[3].position;
16PARAM diffuseCol3 = state.light[3].diffuse;
17
18# Per vertex inputs
19ATTRIB iPos = vertex.position;
20ATTRIB iNormal = vertex.normal;
21ATTRIB iTex0 = vertex.texcoord[0];
22ATTRIB iWeight = vertex.attrib[1];
23
24# Temporaries
25TEMP blendMat;
26TEMP blendPos; # skinned vertex pos
27TEMP dots; # dot product for lighting calculations
28TEMP blendNorm; # skinned normal
29TEMP colorAcc; # color accumulator
30TEMP lightDir;
31
32
33ALIAS scaledWeight = colorAcc;
34ALIAS divisor = blendMat; # divisor for normalization process
35
36ADDRESS address;
37
38# Outputs
39OUTPUT oPos = result.position; #position
40OUTPUT oCol0 = result.color; #primary color
41OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
42OUTPUT oFog = result.fogcoord; #output fog coord
43
44#fix input blending weight
45ARL address.x, iWeight.x;
46FRC scaledWeight.x, iWeight;
47
48#Output position and normal
49MUL dots, mat[address.x + 1], {1,1,1,1};
50SUB blendMat, dots, mat[address.x + 0];
51MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0];
52DP4 blendPos.x, blendMat, iPos;
53DP3 blendNorm.x, blendMat, iNormal;
54
55MUL dots, mat[address.x + 16], {1,1,1,1};
56SUB blendMat, dots, mat[address.x + 15];
57MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15];
58DP4 blendPos.y, blendMat, iPos;
59DP3 blendNorm.y, blendMat, iNormal;
60
61
62MUL dots, mat[address.x + 31], {1,1,1,1};
63SUB blendMat, dots, mat[address.x + 30];
64MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30];
65DP4 blendPos.z, blendMat, iPos;
66DP3 blendNorm.z, blendMat, iNormal;
67MOV blendPos.w, {0, 0, 0, 1};
68
69#renormalize normal
70#add "backlighting" effect
71ADD blendNorm, blendNorm, {0, 0, -0.2, 0};
72DP3 divisor.w, blendNorm, blendNorm;
73RSQ divisor.xyz, divisor.w;
74MUL blendNorm.xyz, blendNorm, divisor;
75
76
77#Projection
78DP4 oPos.x, proj[0], blendPos;
79DP4 oPos.y, proj[1], blendPos;
80DP4 oPos.z, proj[2], blendPos;
81DP4 oPos.w, proj[3], blendPos;
82
83
84#Light 0
85DP3 colorAcc.xyz, blendNorm, lightDir0;
86MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
87MAX colorAcc, colorAcc, {0, 0, 0, 0};
88
89# Accumulate color contributions.
90MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient;
91MOV colorAcc.w, {0, 0, 0, 1.0};
92
93#Light 1
94DP3 dots.x, blendNorm, lightDir1;
95
96#Light 2
97SUB lightDir, lightPos2, blendPos;
98DP3 divisor.w, lightDir, lightDir;
99RSQ divisor.xyz, divisor.w;
100MUL lightDir.xyz, lightDir, divisor;
101
102DP3 dots.y, blendNorm, lightDir;
103
104#Light 3
105SUB lightDir, lightPos3, blendPos;
106DP3 divisor.w, lightDir, lightDir;
107RSQ divisor.xyz, divisor.w;
108MUL lightDir.xyz, lightDir, divisor;
109
110DP3 dots.z, blendNorm, lightDir;
111
112#Apply lights
113MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
114MAX dots, dots, {0, 0, 0, 0};
115MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc;
116MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc;
117MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc;
118
119#Output color
120MUL oCol0, materialDiffuse, colorAcc;
121
122#Output tex coordinate
123MOV oTex0, iTex0;
124
125#Output fog
126MOV oFog.x, blendPos.z;
127
128END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_select.vp b/linden/indra/newview/app_settings/skinned_avatar_select.vp
deleted file mode 100644
index 28506b0..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_select.vp
+++ /dev/null
@@ -1,60 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM proj[4] = { state.matrix.projection };
7PARAM materialDiffuse = state.material.diffuse;
8
9# Per vertex inputs
10ATTRIB iPos = vertex.position;
11ATTRIB iTex0 = vertex.texcoord[0];
12ATTRIB iWeight = vertex.attrib[1];
13
14# Temporaries
15TEMP blendMat;
16TEMP blendPos; # skinned vertex pos
17TEMP childPos;
18TEMP parentPos;
19TEMP dots; # dot product for lighting calculations
20TEMP scaledWeight;
21
22ALIAS divisor = blendMat; # divisor for normalization process
23
24ADDRESS address;
25
26# Outputs
27OUTPUT oPos = result.position; #position
28OUTPUT oCol0 = result.color; #primary color
29OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
30
31#fix input blending weight
32ARL address.x, iWeight.x;
33FRC scaledWeight.x, iWeight;
34
35#Output position and normal
36DP4 parentPos.x, mat[address.x + 0], iPos;
37DP4 parentPos.y, mat[address.x + 15], iPos;
38DP4 parentPos.z, mat[address.x + 30], iPos;
39
40DP4 childPos.x, mat[address.x + 1], iPos;
41DP4 childPos.y, mat[address.x + 16], iPos;
42DP4 childPos.z, mat[address.x + 31], iPos;
43
44SUB blendPos, childPos, parentPos;
45MAD blendPos, scaledWeight.x, blendPos, parentPos;
46MOV blendPos.w, {0, 0, 0, 1};
47
48#Projection
49DP4 oPos.x, proj[0], blendPos;
50DP4 oPos.y, proj[1], blendPos;
51DP4 oPos.z, proj[2], blendPos;
52DP4 oPos.w, proj[3], blendPos;
53
54#Output color
55MOV oCol0, materialDiffuse;
56
57#Output tex coordinate
58MOV oTex0, iTex0;
59
60END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_wind.vp
deleted file mode 100644
index 5f40086..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_wind.vp
+++ /dev/null
@@ -1,211 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM gMat[45] = { program.env[0..44] };
6PARAM gEmbossScale = program.env[63];
7PARAM gWindDir = program.env[60]; # wind direction with strength stored in w
8PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase
9PARAM gGravity = program.env[62];
10PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients
11PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2}
12PARAM gProj[4] = { state.matrix.projection };
13PARAM gModelAmbient = state.lightmodel.ambient;
14PARAM gMaterialDiffuse = state.material.diffuse;
15PARAM gLightDir0 = state.light[0].position;
16PARAM gDiffuseCol0 = state.light[0].diffuse;
17PARAM gLightDir1 = state.light[1].position;
18PARAM gDiffuseCol1 = state.light[1].diffuse;
19PARAM gLightPos2 = state.light[2].position;
20PARAM gDiffuseCol2 = state.light[2].diffuse;
21PARAM gLightPos3 = state.light[3].position;
22PARAM gDiffuseCol3 = state.light[3].diffuse;
23
24# Per vertex inputs
25ATTRIB iPos = vertex.position;
26ATTRIB iNormal = vertex.normal;
27ATTRIB iTex0 = vertex.texcoord[0];
28ATTRIB iTex1 = vertex.texcoord[1];
29ATTRIB iWeight = vertex.attrib[1];
30ATTRIB iClothing = vertex.attrib[4];
31ATTRIB iBinormal = vertex.attrib[6];
32
33# Temporaries
34TEMP blendMatX;
35TEMP blendMatY;
36TEMP blendMatZ;
37TEMP blendPos; # weighted sum of tpos0 and tpos1
38TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1
39TEMP blendBinorm; # result of skinned binormal
40TEMP temp0;
41TEMP temp1; # another general purpose temp
42TEMP temp2;
43
44ALIAS blendTangent = temp2; # result of skinned tangent
45
46ALIAS colorAcc = temp0;
47ALIAS offsetPos = temp1;
48ALIAS dots = temp1; # dot product for lighting calculations
49ALIAS scaledWeight = temp0; # vertex weight as decoded from input weight
50ALIAS divisor = temp2;
51ALIAS sinWave = temp0;
52ALIAS windEffect = temp2;
53ALIAS lightDir = blendMatX;
54
55ADDRESS address;
56
57# Outputs
58OUTPUT oPos = result.position; # position
59OUTPUT oCol0 = result.color; # primary color
60OUTPUT oTex0 = result.texcoord[0]; # texture coordinate set 0
61OUTPUT oTex1 = result.texcoord[1]; # texture coordinate set 1
62OUTPUT oFog = result.fogcoord; # output fog coordinates
63
64#fix input blending weight
65ARL address.x, iWeight.x;
66FRC scaledWeight.x, iWeight;
67
68# Blend joint matrices
69MUL blendMatX, gMat[address.x + 1], {1,1,1,1};
70SUB blendMatX, blendMatX, gMat[address.x + 0];
71MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0];
72DP3 blendNorm.x, blendMatX, iNormal;
73DP3 blendBinorm.x, blendMatX, iBinormal;
74
75MUL blendMatY, gMat[address.x + 16], {1,1,1,1};
76SUB blendMatY, blendMatY, gMat[address.x + 15];
77MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15];
78DP3 blendNorm.y, blendMatY, iNormal;
79DP3 blendBinorm.y, blendMatY, iBinormal;
80
81MUL blendMatZ, gMat[address.x + 31], {1,1,1,1};
82SUB blendMatZ, blendMatZ, gMat[address.x + 30];
83MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30];
84DP3 blendNorm.z, blendMatZ, iNormal;
85DP3 blendBinorm.z, blendMatZ, iBinormal;
86
87#wind
88DP3 windEffect, blendNorm, gWindDir;
89DP3 blendPos.x, blendMatZ, iPos;
90MAD windEffect.xyz, blendPos.x, {0.015, 0.015, 0.015, 0}, windEffect;
91MAD windEffect.w, windEffect, {0, 0, 0, 2}, {0, 0, 0, 1}; # move wind offset value to [-1, 3]
92MUL windEffect.w, windEffect, gWindDir; # modulate wind strength
93MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input
94
95#reduce to period of 2 PI
96MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1]
97EXP temp0, temp1.x; # find mod(x, 1)
98MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
99ADD temp1.z, temp1.z, -gPiConstants.w; # shift normal oscillation by PI/2
100EXP temp0, temp1.z; # find mod(x, 1)
101
102MUL windEffect.z, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
103
104# offset to [-PI, PI]
105ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592};
106
107#calculate sinusoid
108MUL temp1, windEffect, windEffect; # x^2
109MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5!
110MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3!
111MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1
112MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1)
113
114# sinWave.x holds sin(norm . wind_direction) with primary frequency
115# sinWave.y holds sin(norm . wind_direction) with secondary frequency
116# sinWave.z hold cos(norm . wind_direction) with primary frequency
117MAD sinWave.xyz, sinWave, gWindDir.w, windEffect.w; # multiply by wind strength in gWindDir.w [-wind, wind]
118 # add normal facing bias offset [-wind,wind] -> [-wind - .25, wind + 1]
119DP3 temp1, blendNorm, gGravity; # how much is this normal facing in direction of gGravity?
120MIN temp1, temp1, {0.2, 0, 0, 0}; # clamp [-1, 1] to [-1, 0.2]
121MUL temp1, temp1, {1.5, 0, 0, 0}; # scale from [-1,0.2] to [-1.5, 0.3]
122ADD sinWave.x, sinWave, temp1; # add gGravity effect to sinwave (only primary frequency)
123MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage
124#MAD temp2, {1,1,1,1}, iClothing.w, {-1,-1,-1,-1};
125#ADD sinWave, sinWave, temp2;
126MAX sinWave.xyz, sinWave, {-1, -1, -1, -1}; # clamp to underlying body shape
127MUL offsetPos, iClothing, sinWave.x; # multiply wind effect times clothing displacement
128MAD temp2, gWindDir, sinWave.z, blendNorm; # calculate normal offset due to wind oscillation
129MAD offsetPos, {1.0, 1.0, 1.0, 0.0}, offsetPos, iPos; # add to offset vertex position, and zero out effect from w
130MAD blendNorm, temp2, {2, 2, 2, 2}, blendNorm; # add sin wave effect on normals (exaggerated)
131
132#add "backlighting" effect
133SUB colorAcc, {1, 1, 1, 1}, iClothing;
134MAD blendNorm, colorAcc.w, {0, 0, -0.2, 0}, blendNorm;
135
136#renormalize normal (again)
137DP3 divisor.w, blendNorm, blendNorm;
138RSQ divisor.xyz, divisor.w;
139MUL blendNorm.xyz, blendNorm, divisor;
140
141#project binormal to normal plane to ensure orthogonality
142DP3 temp2, blendNorm, blendBinorm;
143SUB blendBinorm, blendBinorm, temp2;
144
145#renormalize binormal
146DP3 divisor.w, blendBinorm, blendBinorm;
147RSQ divisor.xyz, divisor.w;
148MUL blendBinorm.xyz, blendBinorm, divisor;
149
150#tangent = binormal X normal
151XPD blendTangent, blendNorm, blendBinorm;
152
153#oTex1 = iTex0 + LLVector2( gLightDir0 * tangent, gLightDir0 * binormal );
154DP3 blendTangent.x, gLightDir0, blendTangent;
155DP3 blendTangent.y, gLightDir0, blendBinorm;
156MAD oTex1, gEmbossScale.x, blendTangent, iTex0;
157
158#Output position
159DP4 blendPos.x, blendMatX, offsetPos;
160DP4 blendPos.y, blendMatY, offsetPos;
161DP4 blendPos.z, blendMatZ, offsetPos;
162MOV blendPos.w, {0, 0, 0, 1};
163
164#Projection
165DP4 oPos.x, gProj[0], blendPos;
166DP4 oPos.y, gProj[1], blendPos;
167DP4 oPos.z, gProj[2], blendPos;
168DP4 oPos.w, gProj[3], blendPos;
169
170#Light 0
171DP3 colorAcc.x, blendNorm, gLightDir0;
172MAD colorAcc.x, colorAcc.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
173MAX colorAcc, colorAcc, {0, 0, 0, 0};
174
175# Accumulate color contributions.
176MAD colorAcc.xyz, colorAcc.x, gDiffuseCol0, gModelAmbient;
177
178#Light 1
179DP3 dots.x, blendNorm, gLightDir1;
180
181#Light 2
182SUB lightDir, gLightPos2, blendPos;
183DP3 divisor.w, lightDir, lightDir;
184RSQ divisor.xyz, divisor.w;
185MUL lightDir, lightDir, divisor;
186DP3 dots.y, blendNorm, lightDir;
187
188#Light 3
189SUB lightDir, gLightPos3, blendPos;
190DP3 divisor.w, lightDir, lightDir;
191RSQ divisor.xyz, divisor.w;
192MUL lightDir, lightDir, divisor;
193DP3 dots.z, blendNorm, lightDir;
194
195MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
196MAX dots, dots, {0, 0, 0, 0};
197MAD colorAcc, dots.x, gDiffuseCol1, colorAcc;
198MAD colorAcc, dots.y, gDiffuseCol2, colorAcc;
199MAD colorAcc, dots.z, gDiffuseCol3, colorAcc;
200
201#Output color
202MOV colorAcc.w, {0, 0, 0, 1.0};
203MUL oCol0, gMaterialDiffuse, colorAcc;
204
205#Output tex coordinate
206MOV oTex0, iTex0;
207
208#Output fog
209MOV oFog.x, blendPos.z;
210
211END
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index f2603d8..15062ae 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -1,6 +1,7 @@
1newview/llagent.cpp 1newview/llagent.cpp
2newview/llagentdata.cpp 2newview/llagentdata.cpp
3newview/llagentpilot.cpp 3newview/llagentpilot.cpp
4newview/llanimstatelabels.cpp
4newview/llappviewer.cpp 5newview/llappviewer.cpp
5newview/llappviewerlinux.cpp 6newview/llappviewerlinux.cpp
6newview/llassetuploadresponders.cpp 7newview/llassetuploadresponders.cpp
@@ -251,6 +252,7 @@ newview/llstatbar.cpp
251newview/llstatgraph.cpp 252newview/llstatgraph.cpp
252newview/llstatusbar.cpp 253newview/llstatusbar.cpp
253newview/llstatview.cpp 254newview/llstatview.cpp
255newview/llstylemap.cpp
254newview/llsurface.cpp 256newview/llsurface.cpp
255newview/llsurfacepatch.cpp 257newview/llsurfacepatch.cpp
256newview/lltexlayer.cpp 258newview/lltexlayer.cpp
@@ -279,6 +281,7 @@ newview/lltoolselectland.cpp
279newview/lltoolselectrect.cpp 281newview/lltoolselectrect.cpp
280newview/lltoolview.cpp 282newview/lltoolview.cpp
281newview/lltracker.cpp 283newview/lltracker.cpp
284newview/lltrans.cpp
282newview/lluploaddialog.cpp 285newview/lluploaddialog.cpp
283newview/llurl.cpp 286newview/llurl.cpp
284newview/llurldispatcher.cpp 287newview/llurldispatcher.cpp
@@ -348,6 +351,7 @@ newview/llvotree.cpp
348newview/llvovolume.cpp 351newview/llvovolume.cpp
349newview/llvowater.cpp 352newview/llvowater.cpp
350newview/llvowlsky.cpp 353newview/llvowlsky.cpp
354newview/llwatchdog.cpp
351newview/llwaterparammanager.cpp 355newview/llwaterparammanager.cpp
352newview/llwaterparamset.cpp 356newview/llwaterparamset.cpp
353newview/llwearable.cpp 357newview/llwearable.cpp
diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi
index 8db336f..836780d 100644
--- a/linden/indra/newview/installers/windows/installer_template.nsi
+++ b/linden/indra/newview/installers/windows/installer_template.nsi
@@ -87,7 +87,6 @@ SetShellVarContext all ; install for all users (if you change this, change it
87 87
88; Start with some default values. 88; Start with some default values.
89StrCpy $INSTFLAGS "${INSTFLAGS}" 89StrCpy $INSTFLAGS "${INSTFLAGS}"
90StrCpy $INSTFLAGS "$INSTFLAGS $LANGFLAGS"
91StrCpy $INSTPROG "${INSTNAME}" 90StrCpy $INSTPROG "${INSTNAME}"
92StrCpy $INSTEXE "${INSTEXE}" 91StrCpy $INSTEXE "${INSTEXE}"
93StrCpy $INSTSHORTCUT "${SHORTCUT}" 92StrCpy $INSTSHORTCUT "${SHORTCUT}"
@@ -933,26 +932,6 @@ Function .onInit
933 932
934 ; save language in registry 933 ; save language in registry
935 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE 934 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
936
937 ; generate language ID that will be used as a command line arg
938 StrCmp $LANGUAGE "1042" 0 +3
939 StrCpy $LANGFLAGS " --set SystemLanguage ko"
940 Goto EndOfFunc
941
942 StrCmp $LANGUAGE "1041" 0 +3
943 StrCpy $LANGFLAGS " --set SystemLanguage ja"
944 Goto EndOfFunc
945
946 StrCmp $LANGUAGE "1031" 0 +3
947 StrCpy $LANGFLAGS " --set SystemLanguage de"
948 Goto EndOfFunc
949
950 StrCmp $LANGUAGE "1033" 0 +3
951 StrCpy $LANGFLAGS " --set SystemLanguage en-us"
952 Goto EndOfFunc
953
954 EndOfFunc:
955
956FunctionEnd 935FunctionEnd
957 936
958;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 937;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt
index 87087be..179cb9e 100644
--- a/linden/indra/newview/linux_tools/client-readme.txt
+++ b/linden/indra/newview/linux_tools/client-readme.txt
@@ -12,7 +12,7 @@ Life itself - please see <http://www.secondlife.com/whatis/>.
125. Troubleshooting 125. Troubleshooting
13 5.1. 'Error creating window.' 13 5.1. 'Error creating window.'
14 5.2. System hangs 14 5.2. System hangs
15 5.3. 'Shiny' and client performance 15 5.3. Blank window after minimizing it
16 5.4. Audio 16 5.4. Audio
17 5.5. 'Alt' key for camera controls doesn't work 17 5.5. 'Alt' key for camera controls doesn't work
18 5.6. In-world movie playback 18 5.6. In-world movie playback
@@ -98,16 +98,6 @@ you wish.
98These are the most commonly-encountered known issues which are specific to 98These are the most commonly-encountered known issues which are specific to
99the Beta release of the Linux client. 99the Beta release of the Linux client.
100 100
101* VISUAL EFFECTS AND PERFORMANCE - many Linux graphics drivers are not as
102 robust as their counterparts for other operating systems, so some advanced
103 Second Life graphical features have been DISABLED by default to aid
104 stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to
105 turn these on to possibly enhance your experience.
106
107* MISC - The following features are not currently fully implemented on the
108 Linux client and are therefore known not to work properly:
109 * Full Unicode font rendering
110
111* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client 101* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client
112 is in 'windowed' mode, not 'fullscreen' mode. 102 is in 'windowed' mode, not 'fullscreen' mode.
113 103
@@ -156,29 +146,21 @@ SOLUTION:- As a last resort, you can disable most of Second Life's advanced
156 graphics features by editing the 'secondlife' script and removing the '#' 146 graphics features by editing the 'secondlife' script and removing the '#'
157 from the line which reads '#export LL_GL_NOEXT=x' 147 from the line which reads '#export LL_GL_NOEXT=x'
158 148
159PROBLEM 3:- Performance or graphical quality are not as high as I expect. 149PROBLEM 3:- After I minimize the Second Life window, it's just blank when
160PROBLEM:- 'SHINY' doesn't work. 150 it comes back.
161PROBLEM:- I can't turn on Anisotropic Filtering, Ripple Water, or AGP. 151SOLUTION:- Some Linux desktop 'Visual Effects' features are incompatible
162SOLUTION:- Some graphics performance features in Second Life are disabled 152 with Second Life. One reported solution is to use your desktop
163 by default for the Linux version due to stability issues with some common 153 configuration program to disable such effects. For example, on Ubuntu 7.10,
164 Linux graphic drivers. You can re-enable these features at the slight 154 use the desktop toolbar menu to select System -> Preferences -> Appearance,
165 risk of decreasing system stability. To do so: 155 then change 'Visual Effects' to 'None'.
166 * Edit the 'secondlife' script. Comment-out these lines by putting a '#' 156
167 in front of them: 'export LL_GL_BASICEXT=x', 'export LL_GL_NOEXT=x', 157PROBLEM 4:- Music and sound effects are silent or very stuttery.
168 'export LL_GL_BLACKLIST=abcdefghijklmno'. 158SOLUTION:- The most common solution is to ensure that you have the 'esd'
169 * Now start Second Life. Some advanced performance features will now be 159 program (part of the 'esound' package) installed and running before you
170 automatically used, and some new options in Preferences will now be 160 start Second Life. Users of Ubuntu (and some other) Linux systems can
171 available to you; there is no guarantee, however, that they will 161 simply run the following to install and configure 'esound':
172 positively affect performance! 162 sudo apt-get install esound
173SOLUTION:- If you are not running an official Second Life client obtained from 163 For others, simply running 'esd&' from a command-line should get it running.
174 secondlife.com, you should consider doing so as you may find its
175 performance to be superior to third-party versions.
176
177PROBLEM 4:- Sound effects seem to 'lag' a fraction of a second behind
178 actions.
179SOLUTION:- You may uncomment the 'LL_BAD_ESD' line in the 'secondlife' script
180 to get more responsive audio. However, if you do this then you may
181 encounter audio issues or a hang during login, so beware.
182 164
183PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just 165PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just
184 moves the Second Life window. 166 moves the Second Life window.
diff --git a/linden/indra/newview/linux_tools/unicode.ttf b/linden/indra/newview/linux_tools/unicode.ttf
deleted file mode 120000
index 91e6150..0000000
--- a/linden/indra/newview/linux_tools/unicode.ttf
+++ /dev/null
@@ -1 +0,0 @@
1/usr/share/fonts/truetype/kochi/kochi-gothic.ttf \ No newline at end of file
diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh
index 1b7d6b8..eaa2f61 100755
--- a/linden/indra/newview/linux_tools/wrapper.sh
+++ b/linden/indra/newview/linux_tools/wrapper.sh
@@ -43,7 +43,7 @@
43## in the bin directory will be stripped: you should replace it with 43## in the bin directory will be stripped: you should replace it with
44## an unstripped binary before you run. 44## an unstripped binary before you run.
45#export LL_WRAPPER='gdb --args' 45#export LL_WRAPPER='gdb --args'
46#export LL_WRAPPER='valgrind --smc-check=all --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' 46#export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp'
47 47
48## - Avoids an often-buggy X feature that doesn't really benefit us anyway. 48## - Avoids an often-buggy X feature that doesn't really benefit us anyway.
49export SDL_VIDEO_X11_DGAMOUSE=0 49export SDL_VIDEO_X11_DGAMOUSE=0
@@ -104,7 +104,7 @@ if [ -n "$LL_RUN_ERR" ]; then
104 if [ "$LL_RUN_ERR" = "runerr" ]; then 104 if [ "$LL_RUN_ERR" = "runerr" ]; then
105 # generic error running the binary 105 # generic error running the binary
106 echo '*** Unclean shutdown. ***' 106 echo '*** Unclean shutdown. ***'
107 if [ "`arch`" = "x86_64" ]; then 107 if [ "`uname -m`" = "x86_64" ]; then
108 echo 108 echo
109 cat << EOFMARKER 109 cat << EOFMARKER
110You are running the Second Life Viewer on a x86_64 platform. The 110You are running the Second Life Viewer on a x86_64 platform. The
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 397a11e..1d3c5d4 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -5823,6 +5823,7 @@ void LLAgent::teleportViaLure(const LLUUID& lure_id, BOOL godlike)
5823 msg->addUUIDFast(_PREHASH_AgentID, getID()); 5823 msg->addUUIDFast(_PREHASH_AgentID, getID());
5824 msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); 5824 msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
5825 msg->addUUIDFast(_PREHASH_LureID, lure_id); 5825 msg->addUUIDFast(_PREHASH_LureID, lure_id);
5826 // teleport_flags is a legacy field, now derived sim-side:
5826 msg->addU32("TeleportFlags", teleport_flags); 5827 msg->addU32("TeleportFlags", teleport_flags);
5827 sendReliableMessage(); 5828 sendReliableMessage();
5828 } 5829 }
diff --git a/linden/indra/llwindow/llwindowlinux.cpp b/linden/indra/newview/llanimstatelabels.cpp
index 6c026e4..c51740f 100644
--- a/linden/indra/llwindow/llwindowlinux.cpp
+++ b/linden/indra/newview/llanimstatelabels.cpp
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llwindowlinux.cpp 2 * @file llanimationstatenames.cpp
3 * @brief Platform-dependent implementation of llwindow 3 * @brief Names for built-in animation states
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -29,33 +29,11 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_LINUX 32#include "llviewerprecompiledheaders.h"
33#include "llanimstatelabels.h"
34#include "lltrans.h"
33 35
34#include "linden_common.h" 36std::string LLAnimStateLabels::getStateLabel( const char *animName )
35#include "indra_constants.h"
36
37#include "llwindowlinux.h"
38#include "llgl.h"
39#include "llglheaders.h"
40
41//
42// LLWindowLinux
43//
44LLWindowLinux::LLWindowLinux(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
45 U32 flags, BOOL fullscreen, BOOL clearBg,
46 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
47 : LLWindow(fullscreen, flags)
48{
49 llerrs << "Linux window not yet supported" << llendl;
50}
51
52
53LLWindowLinux::~LLWindowLinux()
54{ 37{
38 return LLTrans::getString("anim_" + LLString(animName) );
55} 39}
56
57void LLWindowLinux::swapBuffers()
58{
59}
60
61#endif // LL_LINUX
diff --git a/linden/indra/llrender/llvertexprogramgl.h b/linden/indra/newview/llanimstatelabels.h
index f9190f9..db1c1d8 100644
--- a/linden/indra/llrender/llvertexprogramgl.h
+++ b/linden/indra/newview/llanimstatelabels.h
@@ -1,10 +1,11 @@
1/** 1/**
2 * @file llvertexprogramgl.h 2 * @file llanimstatelabels.h
3 * @brief LLVertexProgramGL base class 3 * @brief Declaration of LLVOAvatar class which is a derivation fo
4 * LLViewerObject
4 * 5 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$ 6 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 7 *
7 * Copyright (c) 2003-2008, Linden Research, Inc. 8 * Copyright (c) 2001-2008, Linden Research, Inc.
8 * 9 *
9 * Second Life Viewer Source Code 10 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 11 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -29,27 +30,13 @@
29 * $/LicenseInfo$ 30 * $/LicenseInfo$
30 */ 31 */
31 32
32#ifndef LL_LLVERTEXPROGRAMGL_H 33#ifndef LL_LLANIMSTATELABELS_H
33#define LL_LLVERTEXPROGRAMGL_H 34#define LL_LLANIMSTATELABELS_H
34 35
35// This file contains the definition of LLVertexProgramGL, 36class LLAnimStateLabels
36// for purposes of running vertex programs on GL hardware.
37
38#include "llgl.h"
39
40class LLVertexProgramGL
41{ 37{
42public: 38public:
43 LLVertexProgramGL(); 39 static std::string getStateLabel( const char *animName );
44 ~LLVertexProgramGL();
45
46 void bind();
47 void unbind();
48
49 BOOL load(const char * filename);
50
51private:
52 LLGLuint mVertexProgramID;
53}; 40};
54 41
55#endif // LL_LLVERTEXPROGRAMGL_H 42#endif // LL_ANIMSTATELABELS_H
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 4a9a158..c6f4cdd 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -64,7 +64,7 @@
64#include "llurldispatcher.h" 64#include "llurldispatcher.h"
65#include "llurlhistory.h" 65#include "llurlhistory.h"
66#include "llfirstuse.h" 66#include "llfirstuse.h"
67#include "llglimmediate.h" 67#include "llrender.h"
68 68
69#include "llweb.h" 69#include "llweb.h"
70#include "llsecondlifeurls.h" 70#include "llsecondlifeurls.h"
@@ -102,6 +102,7 @@
102#include "audioengine.h" 102#include "audioengine.h"
103#include "llviewermenu.h" 103#include "llviewermenu.h"
104#include "llselectmgr.h" 104#include "llselectmgr.h"
105#include "lltrans.h"
105#include "lltracker.h" 106#include "lltracker.h"
106#include "llviewerparcelmgr.h" 107#include "llviewerparcelmgr.h"
107#include "llworldmapview.h" 108#include "llworldmapview.h"
@@ -121,6 +122,7 @@
121#include "llhudeffecttrail.h" 122#include "llhudeffecttrail.h"
122#include "llvectorperfoptions.h" 123#include "llvectorperfoptions.h"
123#include "llurlsimstring.h" 124#include "llurlsimstring.h"
125#include "llwatchdog.h"
124 126
125// Included so that constants/settings might be initialized 127// Included so that constants/settings might be initialized
126// in save_settings_to_globals() 128// in save_settings_to_globals()
@@ -160,6 +162,13 @@
160 162
161#include "llcommandlineparser.h" 163#include "llcommandlineparser.h"
162 164
165// annoying detail to determine whether font prefs are over-ridden
166#if LL_LINUX
167# define LL_DYNAMIC_FONT_DISCOVERY 1
168#else
169# define LL_DYNAMIC_FONT_DISCOVERY 0
170#endif
171
163// *FIX: These extern globals should be cleaned up. 172// *FIX: These extern globals should be cleaned up.
164// The globals either represent state/config/resource-storage of either 173// The globals either represent state/config/resource-storage of either
165// this app, or another 'component' of the viewer. App globals should be 174// this app, or another 'component' of the viewer. App globals should be
@@ -183,24 +192,6 @@
183// viewer.cpp - these are only used in viewer, should be easily moved. 192// viewer.cpp - these are only used in viewer, should be easily moved.
184extern void disable_win_error_reporting(); 193extern void disable_win_error_reporting();
185 194
186//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac
187#if LL_RELEASE_FOR_DOWNLOAD
188// Default userserver for production builds is agni
189#ifndef APPLE_PREVIEW
190static EGridInfo GridDefaultChoice = GRID_INFO_AGNI;
191#else
192static EGridInfo GridDefaultChoice = GRID_INFO_ADITI;
193#endif
194#else
195// Default userserver for development builds is none
196static EGridInfo GridDefaultChoice = GRID_INFO_NONE;
197#endif
198
199#if LL_WINDOWS
200extern void create_console();
201#endif
202
203
204#if LL_DARWIN 195#if LL_DARWIN
205#include <Carbon/Carbon.h> 196#include <Carbon/Carbon.h>
206extern void init_apple_menu(const char* product); 197extern void init_apple_menu(const char* product);
@@ -214,6 +205,7 @@ extern OSStatus DisplayReleaseNotes(void);
214 205
215extern BOOL gRandomizeFramerate; 206extern BOOL gRandomizeFramerate;
216extern BOOL gPeriodicSlowFrame; 207extern BOOL gPeriodicSlowFrame;
208extern BOOL gDebugGL;
217 209
218//////////////////////////////////////////////////////////// 210////////////////////////////////////////////////////////////
219// All from the last globals push... 211// All from the last globals push...
@@ -413,7 +405,8 @@ static void settings_modify()
413 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors"); 405 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
414 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); 406 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
415 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4] 407 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4]
416 gGL.setClever(gSavedSettings.getBOOL("RenderUseCleverUI")); 408 gDebugGL = gSavedSettings.getBOOL("RenderDebugGL");
409 gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
417 410
418#if LL_VECTORIZE 411#if LL_VECTORIZE
419 if (gSysCPU.hasAltivec()) 412 if (gSysCPU.hasAltivec())
@@ -453,73 +446,35 @@ static void settings_modify()
453 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); 446 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk"));
454} 447}
455 448
456void initGridChoice() 449void LLAppViewer::initGridChoice()
457{ 450{
458 LLString gridChoice = gSavedSettings.getString("GridChoice"); 451 // Load up the initial grid choice from:
459 if(!gridChoice.empty()) 452 // - hard coded defaults...
460 // Used to show first chunk of each argument passed in the 453 // - command line settings...
461 // window title. 454 // - if dev build, persisted settings...
462 {
463 // find the grid choice from the user setting.
464 int gridIndex = GRID_INFO_NONE;
465 for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
466 {
467 if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
468 {
469 gGridChoice = (EGridInfo)gridIndex;
470
471 if(GRID_INFO_LOCAL == gGridChoice)
472 {
473 gGridName = LOOPBACK_ADDRESS_STRING;
474 break;
475 }
476 else
477 {
478 gGridName = gGridInfo[gGridChoice].mName;
479 break;
480 }
481 }
482 }
483
484 if(GRID_INFO_OTHER == gridIndex)
485 {
486 // *FIX:MEP Can and should we validate that this is an IP address?
487 gGridChoice = (EGridInfo)gridIndex;
488 gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
489
490 }
491 }
492 455
456 // Set the "grid choice", this is specified by command line.
457 std::string grid_choice = gSavedSettings.getString("CmdLineGridChoice");
458 LLViewerLogin::getInstance()->setGridChoice(grid_choice);
493 459
494#if !LL_RELEASE_FOR_DOWNLOAD 460#if !LL_RELEASE_FOR_DOWNLOAD
495 if (gGridChoice == GRID_INFO_NONE) 461 // Development version: load last server choice by default
462 // ignored is the command line grid choice has been set
463 if(grid_choice.empty())
496 { 464 {
497 // Development version: load last server choice by default (overridden by cmd line args) 465 S32 server = gSavedSettings.getS32("ServerChoice");
498 S32 server = gSavedSettings.getS32("ServerChoice"); 466 server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
499 if (server != 0) 467 if(server == GRID_INFO_OTHER)
500 gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
501 if (server == GRID_INFO_OTHER)
502 { 468 {
503 LLString custom_server = gSavedSettings.getString("CustomServer"); 469 LLString custom_server = gSavedSettings.getString("CustomServer");
504 if (custom_server.empty()) 470 LLViewerLogin::getInstance()->setGridChoice(custom_server);
505 { 471 }
506 gGridName = "none"; 472 else if(server != 0)
507 } 473 {
508 else 474 LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server);
509 {
510 gGridName = custom_server.c_str();
511 }
512 } 475 }
513
514 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
515 } 476 }
516#endif 477#endif
517
518 if (gGridChoice == GRID_INFO_NONE)
519 {
520 gGridChoice = GridDefaultChoice;
521 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
522 }
523} 478}
524 479
525bool send_url_to_other_instance(const std::string& url) 480bool send_url_to_other_instance(const std::string& url)
@@ -583,23 +538,22 @@ LLAppViewer::LLAppViewer() :
583 } 538 }
584 539
585 sInstance = this; 540 sInstance = this;
541
542 // Initialize the mainloop timeout.
543 mMainloopTimeout = new LLWatchdogTimeout();
586} 544}
587 545
588LLAppViewer::~LLAppViewer() 546LLAppViewer::~LLAppViewer()
589{ 547{
548 // Initialize the mainloop timeout.
549 delete mMainloopTimeout;
550
590 // If we got to this destructor somehow, the app didn't hang. 551 // If we got to this destructor somehow, the app didn't hang.
591 removeMarkerFile(); 552 removeMarkerFile();
592} 553}
593 554
594bool LLAppViewer::init() 555bool LLAppViewer::init()
595{ 556{
596 // *NOTE:Mani - LLCurl::initClass is not thread safe.
597 // Called before threads are created.
598 LLCurl::initClass();
599
600 initThreads();
601
602
603 // 557 //
604 // Start of the application 558 // Start of the application
605 // 559 //
@@ -612,7 +566,6 @@ bool LLAppViewer::init()
612 // that touches files should really go through the lldir API 566 // that touches files should really go through the lldir API
613 gDirUtilp->initAppDirs("SecondLife"); 567 gDirUtilp->initAppDirs("SecondLife");
614 568
615
616 initLogging(); 569 initLogging();
617 570
618 // 571 //
@@ -621,6 +574,12 @@ bool LLAppViewer::init()
621 if (!initConfiguration()) 574 if (!initConfiguration())
622 return false; 575 return false;
623 576
577 // *NOTE:Mani - LLCurl::initClass is not thread safe.
578 // Called before threads are created.
579 LLCurl::initClass();
580
581 initThreads();
582
624 writeSystemInfo(); 583 writeSystemInfo();
625 584
626 // Build a string representing the current version number. 585 // Build a string representing the current version number.
@@ -640,7 +599,7 @@ bool LLAppViewer::init()
640 // 599 //
641 // Various introspection concerning the libs we're using. 600 // Various introspection concerning the libs we're using.
642 // 601 //
643 llinfos << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << llendl; 602 LL_DEBUGS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
644 603
645 // Get the single value from the crash settings file, if it exists 604 // Get the single value from the crash settings file, if it exists
646 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); 605 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -683,15 +642,15 @@ bool LLAppViewer::init()
683 642
684 // Load art UUID information, don't require these strings to be declared in code. 643 // Load art UUID information, don't require these strings to be declared in code.
685 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml"); 644 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");
686 llinfos << "Loading base colors from " << colors_base_filename << llendl; 645 LL_DEBUGS("InitInfo") << "Loading base colors from " << colors_base_filename << LL_ENDL;
687 gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U); 646 gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
688 647
689 // Load overrides from user colors file 648 // Load overrides from user colors file
690 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml"); 649 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");
691 llinfos << "Loading user colors from " << user_colors_filename << llendl; 650 LL_DEBUGS("InitInfo") << "Loading user colors from " << user_colors_filename << LL_ENDL;
692 if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0) 651 if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
693 { 652 {
694 llinfos << "Cannot load user colors from " << user_colors_filename << llendl; 653 LL_DEBUGS("InitInfo") << "Cannot load user colors from " << user_colors_filename << LL_ENDL;
695 } 654 }
696 655
697 // Widget construction depends on LLUI being initialized 656 // Widget construction depends on LLUI being initialized
@@ -782,7 +741,7 @@ bool LLAppViewer::init()
782 #endif 741 #endif
783 742
784 gGLManager.getGLInfo(gDebugInfo); 743 gGLManager.getGLInfo(gDebugInfo);
785 llinfos << gGLManager.getGLInfoString() << llendl; 744 gGLManager.printGLInfoString();
786 745
787 //load key settings 746 //load key settings
788 bind_keyboard_functions(); 747 bind_keyboard_functions();
@@ -790,7 +749,7 @@ bool LLAppViewer::init()
790 // Load Default bindings 749 // Load Default bindings
791 if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini").c_str())) 750 if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini").c_str()))
792 { 751 {
793 llerrs << "Unable to open keys.ini" << llendl; 752 LL_ERRS("InitInfo") << "Unable to open keys.ini" << LL_ENDL;
794 } 753 }
795 // Load Custom bindings (override defaults) 754 // Load Custom bindings (override defaults)
796 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str()); 755 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str());
@@ -865,20 +824,16 @@ bool LLAppViewer::init()
865 gSimFrames = (F32)gFrameCount; 824 gSimFrames = (F32)gFrameCount;
866 825
867 LLViewerJoystick::getInstance()->init(false); 826 LLViewerJoystick::getInstance()->init(false);
868 if (LLViewerJoystick::getInstance()->isLikeSpaceNavigator()) 827
869 {
870 if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator")
871 {
872 LLFloaterJoystick::setSNDefaults();
873 gSavedSettings.setString("JoystickInitialized", "SpaceNavigator");
874 }
875 }
876
877 return true; 828 return true;
878} 829}
879 830
880bool LLAppViewer::mainLoop() 831bool LLAppViewer::mainLoop()
881{ 832{
833 mMainloopTimeout = new LLWatchdogTimeout();
834 // *FIX:Mani - Make this a setting, once new settings exist in this branch.
835 mMainloopTimeout->setTimeout(5);
836
882 //------------------------------------------- 837 //-------------------------------------------
883 // Run main loop until time to quit 838 // Run main loop until time to quit
884 //------------------------------------------- 839 //-------------------------------------------
@@ -910,7 +865,7 @@ bool LLAppViewer::mainLoop()
910 { 865 {
911 LLFastTimer t2(LLFastTimer::FTM_MESSAGES); 866 LLFastTimer t2(LLFastTimer::FTM_MESSAGES);
912 #if LL_WINDOWS 867 #if LL_WINDOWS
913 if (!LLWinDebug::setupExceptionHandler()) 868 if (!LLWinDebug::checkExceptionHandler())
914 { 869 {
915 llwarns << " Someone took over my exception handler (post messagehandling)!" << llendl; 870 llwarns << " Someone took over my exception handler (post messagehandling)!" << llendl;
916 } 871 }
@@ -1059,6 +1014,8 @@ bool LLAppViewer::mainLoop()
1059 } 1014 }
1060 //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. 1015 //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering.
1061 //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. 1016 //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering.
1017
1018 mMainloopTimeout->ping();
1062 } 1019 }
1063 1020
1064 } 1021 }
@@ -1083,6 +1040,8 @@ bool LLAppViewer::mainLoop()
1083 1040
1084 delete gServicePump; 1041 delete gServicePump;
1085 1042
1043 mMainloopTimeout->stop();
1044
1086 llinfos << "Exiting main_loop" << llendflush; 1045 llinfos << "Exiting main_loop" << llendflush;
1087 1046
1088 return true; 1047 return true;
@@ -1346,7 +1305,9 @@ bool LLAppViewer::cleanup()
1346 gStaticVFS = NULL; 1305 gStaticVFS = NULL;
1347 delete gVFS; 1306 delete gVFS;
1348 gVFS = NULL; 1307 gVFS = NULL;
1349 1308
1309 LLWatchdog::getInstance()->cleanup();
1310
1350 end_messaging_system(); 1311 end_messaging_system();
1351 1312
1352 // *NOTE:Mani - The following call is not thread safe. 1313 // *NOTE:Mani - The following call is not thread safe.
@@ -1380,6 +1341,14 @@ bool LLAppViewer::initThreads()
1380#else 1341#else
1381 static const bool enable_threads = true; 1342 static const bool enable_threads = true;
1382#endif 1343#endif
1344
1345 const S32 NEVER_SUBMIT_REPORT = 2;
1346 if(TRUE == gSavedSettings.getBOOL("WatchdogEnabled")
1347 && (gCrashSettings.getS32("CrashSubmitBehavior") != NEVER_SUBMIT_REPORT))
1348 {
1349 LLWatchdog::getInstance()->init();
1350 }
1351
1383 LLVFSThread::initClass(enable_threads && true); 1352 LLVFSThread::initClass(enable_threads && true);
1384 LLLFSThread::initClass(enable_threads && true); 1353 LLLFSThread::initClass(enable_threads && true);
1385 1354
@@ -1434,7 +1403,7 @@ bool LLAppViewer::initLogging()
1434} 1403}
1435 1404
1436void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index) 1405void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
1437{ 1406{
1438 for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr) 1407 for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr)
1439 { 1408 {
1440 LLString settings_name = (*itr).first; 1409 LLString settings_name = (*itr).first;
@@ -1487,7 +1456,7 @@ std::string LLAppViewer::getSettingsFileName(const std::string& file)
1487} 1456}
1488 1457
1489bool LLAppViewer::initConfiguration() 1458bool LLAppViewer::initConfiguration()
1490{ 1459{
1491 //Set up internal pointers 1460 //Set up internal pointers
1492 gSettings[sGlobalSettingsName] = &gSavedSettings; 1461 gSettings[sGlobalSettingsName] = &gSavedSettings;
1493 gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings; 1462 gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings;
@@ -1523,30 +1492,17 @@ bool LLAppViewer::initConfiguration()
1523 1492
1524 gSavedSettings.setString("VersionChannelName", LL_CHANNEL); 1493 gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
1525 1494
1526#ifndef LL_RELEASE_FOR_DOWNLOAD 1495#ifndef LL_RELEASE_FOR_DOWNLOAD
1527 gSavedSettings.setBOOL("ShowConsoleWindow", TRUE); 1496 gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
1528 gSavedSettings.setBOOL("AllowMultipleViewers", TRUE); 1497 gSavedSettings.setBOOL("AllowMultipleViewers", TRUE);
1529#endif 1498#endif
1530 1499
1531#if LL_WINDOWS 1500#if !LL_DYNAMIC_FONT_DISCOVERY
1532 // Lists Japanese, Korean, and Chinese sanserif fonts available in 1501 // static font discovery - user settings can override.
1533 // Windows XP and Vista, as well as "Arial Unicode MS".
1534 gSavedSettings.setString("FontSansSerifFallback", 1502 gSavedSettings.setString("FontSansSerifFallback",
1535 "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf"); 1503 LLWindow::getFontListSans());
1536#elif LL_DARWIN
1537 // This is a fairly complete Japanese font that ships with Mac OS X.
1538 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
1539 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
1540 gSavedSettings.setString("FontSansSerifFallback",
1541 "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf");
1542#else
1543 // 'unicode.ttf' doesn't exist, but hopefully an international
1544 // user can take the hint and drop in their favourite local font.
1545 gSavedSettings.setString("FontSansSerifFallback",
1546 "unicode.ttf");
1547#endif 1504#endif
1548 1505
1549
1550 // These are warnings that appear on the first experience of that condition. 1506 // These are warnings that appear on the first experience of that condition.
1551 // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse 1507 // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
1552 // for disable/reset ability 1508 // for disable/reset ability
@@ -1590,7 +1546,16 @@ bool LLAppViewer::initConfiguration()
1590 // Do this *before* loading the settings file 1546 // Do this *before* loading the settings file
1591 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE); 1547 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
1592 1548
1593 // - read command line settings 1549#if LL_DYNAMIC_FONT_DISCOVERY
1550 // Linux does *dynamic* font discovery which is preferable to
1551 // whatever got written-out into the config file last time. This
1552 // does remove the ability of the user to hand-define the fallbacks
1553 // though, so from a config-management point of view this is hacky.
1554 gSavedSettings.setString("FontSansSerifFallback",
1555 LLWindow::getFontListSans());
1556#endif
1557
1558 // - read command line settings.
1594 LLControlGroupCLP clp; 1559 LLControlGroupCLP clp;
1595 std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, 1560 std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
1596 "cmd_line.xml"); 1561 "cmd_line.xml");
@@ -1769,18 +1734,6 @@ bool LLAppViewer::initConfiguration()
1769 } 1734 }
1770 } 1735 }
1771 1736
1772 const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI");
1773 if(loginuri && LLString::null != loginuri->getValue().asString())
1774 {
1775 addLoginURI(loginuri->getValue().asString());
1776 }
1777
1778 const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI");
1779 if(helperuri && LLString::null != helperuri->getValue().asString())
1780 {
1781 setHelperURI(helperuri->getValue().asString());
1782 }
1783
1784 const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder"); 1737 const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder");
1785 if(skinfolder && LLString::null != skinfolder->getValue().asString()) 1738 if(skinfolder && LLString::null != skinfolder->getValue().asString())
1786 { 1739 {
@@ -2025,7 +1978,7 @@ bool LLAppViewer::initConfiguration()
2025 1978
2026bool LLAppViewer::initWindow() 1979bool LLAppViewer::initWindow()
2027{ 1980{
2028 llinfos << "Initializing window..." << llendl; 1981 LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;
2029 1982
2030 // store setting in a global for easy access and modification 1983 // store setting in a global for easy access and modification
2031 gNoRender = gSavedSettings.getBOOL("DisableRendering"); 1984 gNoRender = gSavedSettings.getBOOL("DisableRendering");
@@ -2085,6 +2038,7 @@ bool LLAppViewer::initWindow()
2085 2038
2086 LLAlertDialog::parseAlerts("alerts.xml"); 2039 LLAlertDialog::parseAlerts("alerts.xml");
2087 LLNotifyBox::parseNotify("notify.xml"); 2040 LLNotifyBox::parseNotify("notify.xml");
2041 LLTrans::parseStrings("strings.xml");
2088 2042
2089 // Show watch cursor 2043 // Show watch cursor
2090 gViewerWindow->setCursor(UI_CURSOR_WAIT); 2044 gViewerWindow->setCursor(UI_CURSOR_WAIT);
@@ -2160,10 +2114,6 @@ void LLAppViewer::cleanupSavedSettings()
2160 { 2114 {
2161 gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance); 2115 gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance);
2162 } 2116 }
2163
2164 // *REMOVE: This is now done via LLAppViewer::setCrashBehavior()
2165 // Left vestigially in case I borked it.
2166 // gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, gCrashBehavior);
2167} 2117}
2168 2118
2169void LLAppViewer::removeCacheFiles(const char* file_mask) 2119void LLAppViewer::removeCacheFiles(const char* file_mask)
@@ -2194,22 +2144,22 @@ void LLAppViewer::writeSystemInfo()
2194 gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple(); 2144 gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple();
2195 2145
2196 // Dump some debugging info 2146 // Dump some debugging info
2197 llinfos << gSecondLife 2147 LL_INFOS("SystemInfo") << gSecondLife
2198 << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH 2148 << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH
2199 << llendl; 2149 << LL_ENDL;
2200 2150
2201 // Dump the local time and time zone 2151 // Dump the local time and time zone
2202 time_t now; 2152 time_t now;
2203 time(&now); 2153 time(&now);
2204 char tbuffer[256]; /* Flawfinder: ignore */ 2154 char tbuffer[256]; /* Flawfinder: ignore */
2205 strftime(tbuffer, 256, "%Y-%m-%dT%H:%M:%S %Z", localtime(&now)); 2155 strftime(tbuffer, 256, "%Y-%m-%dT%H:%M:%S %Z", localtime(&now));
2206 llinfos << "Local time: " << tbuffer << llendl; 2156 LL_INFOS("SystemInfo") << "Local time: " << tbuffer << LL_ENDL;
2207 2157
2208 // query some system information 2158 // query some system information
2209 llinfos << "CPU info:\n" << gSysCPU << llendl; 2159 LL_INFOS("SystemInfo") << "CPU info:\n" << gSysCPU << LL_ENDL;
2210 llinfos << "Memory info:\n" << gSysMemory << llendl; 2160 LL_INFOS("SystemInfo") << "Memory info:\n" << gSysMemory << LL_ENDL;
2211 llinfos << "OS: " << getOSInfo().getOSStringSimple() << llendl; 2161 LL_INFOS("SystemInfo") << "OS: " << getOSInfo().getOSStringSimple() << LL_ENDL;
2212 llinfos << "OS info: " << getOSInfo() << llendl; 2162 LL_INFOS("SystemInfo") << "OS info: " << getOSInfo() << LL_ENDL;
2213} 2163}
2214 2164
2215void LLAppViewer::handleSyncViewerCrash() 2165void LLAppViewer::handleSyncViewerCrash()
@@ -2221,6 +2171,8 @@ void LLAppViewer::handleSyncViewerCrash()
2221 2171
2222void LLAppViewer::handleViewerCrash() 2172void LLAppViewer::handleViewerCrash()
2223{ 2173{
2174 llinfos << "Handle viewer crash entry." << llendl;
2175
2224 LLAppViewer* pApp = LLAppViewer::instance(); 2176 LLAppViewer* pApp = LLAppViewer::instance();
2225 if (pApp->beingDebugged()) 2177 if (pApp->beingDebugged())
2226 { 2178 {
@@ -2287,11 +2239,11 @@ void LLAppViewer::handleViewerCrash()
2287 apr_file_t* crash_file = ll_apr_file_open(crash_file_name, LL_APR_W); 2239 apr_file_t* crash_file = ll_apr_file_open(crash_file_name, LL_APR_W);
2288 if (crash_file) 2240 if (crash_file)
2289 { 2241 {
2290 llinfos << "Created crash marker file " << crash_file_name << llendl; 2242 LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
2291 } 2243 }
2292 else 2244 else
2293 { 2245 {
2294 llwarns << "Cannot create error marker file " << crash_file_name << llendl; 2246 LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_file_name << LL_ENDL;
2295 } 2247 }
2296 apr_file_close(crash_file); 2248 apr_file_close(crash_file);
2297 } 2249 }
@@ -2303,6 +2255,7 @@ void LLAppViewer::handleViewerCrash()
2303 llofstream file(filename.c_str(), llofstream::binary); 2255 llofstream file(filename.c_str(), llofstream::binary);
2304 if(file.good()) 2256 if(file.good())
2305 { 2257 {
2258 llinfos << "Handle viewer crash generating stats log." << llendl;
2306 gMessageSystem->summarizeLogs(file); 2259 gMessageSystem->summarizeLogs(file);
2307 file.close(); 2260 file.close();
2308 } 2261 }
@@ -2318,6 +2271,7 @@ void LLAppViewer::handleViewerCrash()
2318 2271
2319 // Close the debug file 2272 // Close the debug file
2320 pApp->closeDebug(); 2273 pApp->closeDebug();
2274
2321 LLError::logToFile(""); 2275 LLError::logToFile("");
2322 2276
2323 // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked 2277 // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked
@@ -2348,7 +2302,7 @@ bool LLAppViewer::anotherInstanceRunning()
2348 // If the file is currently locked, that means another process is already running. 2302 // If the file is currently locked, that means another process is already running.
2349 2303
2350 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME); 2304 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
2351 llinfos << "Checking marker file for lock..." << llendl; 2305 LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
2352 2306
2353 //Freeze case checks 2307 //Freeze case checks
2354 apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB); 2308 apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB);
@@ -2360,19 +2314,19 @@ bool LLAppViewer::anotherInstanceRunning()
2360 if (fMarker == NULL) 2314 if (fMarker == NULL)
2361 { 2315 {
2362 // Another instance is running. Skip the rest of these operations. 2316 // Another instance is running. Skip the rest of these operations.
2363 llinfos << "Marker file is locked." << llendl; 2317 LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
2364 return TRUE; 2318 return TRUE;
2365 } 2319 }
2366 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) 2320 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
2367 { 2321 {
2368 apr_file_close(fMarker); 2322 apr_file_close(fMarker);
2369 llinfos << "Marker file is locked." << llendl; 2323 LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
2370 return TRUE; 2324 return TRUE;
2371 } 2325 }
2372 // No other instances; we'll lock this file now & delete on quit. 2326 // No other instances; we'll lock this file now & delete on quit.
2373 apr_file_close(fMarker); 2327 apr_file_close(fMarker);
2374 } 2328 }
2375 llinfos << "Marker file isn't locked." << llendl; 2329 LL_DEBUGS("MarkerFile") << "Marker file isn't locked." << LL_ENDL;
2376 return FALSE; 2330 return FALSE;
2377} 2331}
2378 2332
@@ -2383,7 +2337,7 @@ void LLAppViewer::initMarkerFile()
2383 //There are marker files for two different types of crashes 2337 //There are marker files for two different types of crashes
2384 2338
2385 mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME); 2339 mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME);
2386 llinfos << "Checking marker file for lock..." << llendl; 2340 LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
2387 2341
2388 //We've got 4 things to test for here 2342 //We've got 4 things to test for here
2389 // - Other Process Running (SecondLife.exec_marker present, locked) 2343 // - Other Process Running (SecondLife.exec_marker present, locked)
@@ -2401,7 +2355,7 @@ void LLAppViewer::initMarkerFile()
2401 if(fMarker != NULL) 2355 if(fMarker != NULL)
2402 { 2356 {
2403 apr_file_close(fMarker); 2357 apr_file_close(fMarker);
2404 llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; 2358 LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << LL_ENDL;
2405 gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; 2359 gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
2406 } 2360 }
2407 fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB); 2361 fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB);
@@ -2416,7 +2370,7 @@ void LLAppViewer::initMarkerFile()
2416 if(fMarker != NULL) 2370 if(fMarker != NULL)
2417 { 2371 {
2418 apr_file_close(fMarker); 2372 apr_file_close(fMarker);
2419 llinfos << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << llendl; 2373 LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << LL_ENDL;
2420 if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; 2374 if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
2421 else gLastExecEvent = LAST_EXEC_OTHER_CRASH; 2375 else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
2422 } 2376 }
@@ -2436,34 +2390,33 @@ void LLAppViewer::initMarkerFile()
2436 { 2390 {
2437 apr_file_close(fMarker); 2391 apr_file_close(fMarker);
2438 gLastExecEvent = LAST_EXEC_FROZE; 2392 gLastExecEvent = LAST_EXEC_FROZE;
2439 llinfos << "Exec marker found: program froze on previous execution" << llendl; 2393 LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
2440 } 2394 }
2441 2395
2442 // Create the marker file for this execution & lock it 2396 // Create the marker file for this execution & lock it
2443 mMarkerFile = ll_apr_file_open(mMarkerFileName, LL_APR_W); 2397 mMarkerFile = ll_apr_file_open(mMarkerFileName, LL_APR_W);
2444 if (mMarkerFile) 2398 if (mMarkerFile)
2445 { 2399 {
2446 llinfos << "Marker file created." << llendl; 2400 LL_DEBUGS("MarkerFile") << "Marker file created." << LL_ENDL;
2447 } 2401 }
2448 else 2402 else
2449 { 2403 {
2450 llinfos << "Failed to create marker file." << llendl; 2404 LL_INFOS("MarkerFile") << "Failed to create marker file." << LL_ENDL;
2451 return; 2405 return;
2452 } 2406 }
2453 if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) 2407 if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS)
2454 { 2408 {
2455 apr_file_close(mMarkerFile); 2409 apr_file_close(mMarkerFile);
2456 llinfos << "Marker file cannot be locked." << llendl; 2410 LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;
2457 return; 2411 return;
2458 } 2412 }
2459 2413
2460 llinfos << "Marker file locked." << llendl; 2414 LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL;
2461 llinfos << "Exiting initMarkerFile()." << llendl;
2462} 2415}
2463 2416
2464void LLAppViewer::removeMarkerFile(bool leave_logout_marker) 2417void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
2465{ 2418{
2466 llinfos << "removeMarkerFile()" << llendl; 2419 LL_DEBUGS("MarkerFile") << "removeMarkerFile()" << LL_ENDL;
2467 if (mMarkerFile != NULL) 2420 if (mMarkerFile != NULL)
2468 { 2421 {
2469 ll_apr_file_remove( mMarkerFileName ); 2422 ll_apr_file_remove( mMarkerFileName );
@@ -2588,7 +2541,7 @@ bool LLAppViewer::initCache()
2588 2541
2589 if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation"))) 2542 if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation")))
2590 { 2543 {
2591 llwarns << "Unable to set cache location" << llendl; 2544 LL_WARNS("AppCache") << "Unable to set cache location" << LL_ENDL;
2592 gSavedSettings.setString("CacheLocation", ""); 2545 gSavedSettings.setString("CacheLocation", "");
2593 } 2546 }
2594 2547
@@ -2625,7 +2578,7 @@ bool LLAppViewer::initCache()
2625 { 2578 {
2626 gSavedSettings.setU32("VFSOldSize", vfs_size_u32/MB); 2579 gSavedSettings.setU32("VFSOldSize", vfs_size_u32/MB);
2627 } 2580 }
2628 llinfos << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << llendl; 2581 LL_INFOS("AppCache") << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << LL_ENDL;
2629 2582
2630 // This has to happen BEFORE starting the vfs 2583 // This has to happen BEFORE starting the vfs
2631 //time_t ltime; 2584 //time_t ltime;
@@ -2689,8 +2642,7 @@ bool LLAppViewer::initCache()
2689 { 2642 {
2690 sscanf(found_file.c_str() + start_pos, "%d", &old_salt); 2643 sscanf(found_file.c_str() + start_pos, "%d", &old_salt);
2691 } 2644 }
2692 llinfos << "Default vfs data file not present, found " << old_vfs_data_file << llendl; 2645 LL_DEBUGS("AppCache") << "Default vfs data file not present, found: " << old_vfs_data_file << " Old salt: " << old_salt << llendl;
2693 llinfos << "Old salt: " << old_salt << llendl;
2694 } 2646 }
2695 } 2647 }
2696 2648
@@ -2702,8 +2654,8 @@ bool LLAppViewer::initCache()
2702 if (stat_result) 2654 if (stat_result)
2703 { 2655 {
2704 // We've got a bad/missing index file, nukem! 2656 // We've got a bad/missing index file, nukem!
2705 llwarns << "Bad or missing vfx index file " << old_vfs_index_file << llendl; 2657 LL_WARNS("AppCache") << "Bad or missing vfx index file " << old_vfs_index_file << LL_ENDL;
2706 llwarns << "Removing old vfs data file " << old_vfs_data_file << llendl; 2658 LL_WARNS("AppCache") << "Removing old vfs data file " << old_vfs_data_file << LL_ENDL;
2707 LLFile::remove(old_vfs_data_file); 2659 LLFile::remove(old_vfs_data_file);
2708 LLFile::remove(old_vfs_index_file); 2660 LLFile::remove(old_vfs_index_file);
2709 2661
@@ -2740,7 +2692,7 @@ bool LLAppViewer::initCache()
2740 2692
2741 if (resize_vfs) 2693 if (resize_vfs)
2742 { 2694 {
2743 llinfos << "Removing old vfs and re-sizing" << llendl; 2695 LL_DEBUGS("AppCache") << "Removing old vfs and re-sizing" << LL_ENDL;
2744 2696
2745 LLFile::remove(old_vfs_data_file); 2697 LLFile::remove(old_vfs_data_file);
2746 LLFile::remove(old_vfs_index_file); 2698 LLFile::remove(old_vfs_index_file);
@@ -2748,8 +2700,8 @@ bool LLAppViewer::initCache()
2748 else if (old_salt != new_salt) 2700 else if (old_salt != new_salt)
2749 { 2701 {
2750 // move the vfs files to a new name before opening 2702 // move the vfs files to a new name before opening
2751 llinfos << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << llendl; 2703 LL_DEBUGS("AppCache") << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << LL_ENDL;
2752 llinfos << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << llendl; 2704 LL_DEBUGS("AppCache") << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << LL_ENDL;
2753 LLFile::rename(old_vfs_data_file, new_vfs_data_file); 2705 LLFile::rename(old_vfs_data_file, new_vfs_data_file);
2754 LLFile::rename(old_vfs_index_file, new_vfs_index_file); 2706 LLFile::rename(old_vfs_index_file, new_vfs_index_file);
2755 } 2707 }
@@ -2763,7 +2715,7 @@ bool LLAppViewer::initCache()
2763 { 2715 {
2764 // Try again with fresh files 2716 // Try again with fresh files
2765 // (The constructor deletes corrupt files when it finds them.) 2717 // (The constructor deletes corrupt files when it finds them.)
2766 llwarns << "VFS corrupt, deleted. Making new VFS." << llendl; 2718 LL_WARNS("AppCache") << "VFS corrupt, deleted. Making new VFS." << LL_ENDL;
2767 delete gVFS; 2719 delete gVFS;
2768 gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); 2720 gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false);
2769 } 2721 }
@@ -2784,9 +2736,8 @@ bool LLAppViewer::initCache()
2784 2736
2785void LLAppViewer::purgeCache() 2737void LLAppViewer::purgeCache()
2786{ 2738{
2787 llinfos << "Purging Texture Cache..." << llendl; 2739 LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << llendl;
2788 LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE); 2740 LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE);
2789 llinfos << "Purging Cache..." << llendl;
2790 std::string mask = gDirUtilp->getDirDelimiter() + "*.*"; 2741 std::string mask = gDirUtilp->getDirDelimiter() + "*.*";
2791 gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"").c_str(),mask); 2742 gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"").c_str(),mask);
2792} 2743}
@@ -2801,61 +2752,6 @@ const LLString& LLAppViewer::getWindowTitle() const
2801 return gWindowTitle; 2752 return gWindowTitle;
2802} 2753}
2803 2754
2804void LLAppViewer::resetURIs() const
2805{
2806 // Clear URIs when picking a new server
2807 gLoginURIs.clear();
2808 gHelperURI.clear();
2809}
2810
2811const std::vector<std::string>& LLAppViewer::getLoginURIs() const
2812{
2813 if (gLoginURIs.empty())
2814 {
2815 // not specified on the command line, use value from table
2816 gLoginURIs.push_back(gGridInfo[gGridChoice].mLoginURI);
2817 }
2818 return gLoginURIs;
2819}
2820
2821const std::string& LLAppViewer::getHelperURI() const
2822{
2823 if (gHelperURI.empty())
2824 {
2825 // not specified on the command line, use value from table
2826 gHelperURI = gGridInfo[gGridChoice].mHelperURI;
2827 }
2828 return gHelperURI;
2829}
2830
2831void LLAppViewer::addLoginURI(const std::string& uri)
2832{
2833 // *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting.
2834 // Update gGridChoice to reflect the loginURI setting.
2835 gLoginURIs.push_back(uri);
2836
2837 const std::string& top_uri = getLoginURIs()[0];
2838 int i = 0;
2839 for(; i < GRID_INFO_COUNT; ++i)
2840 {
2841 if(top_uri == gGridInfo[i].mLoginURI)
2842 {
2843 gGridChoice = (EGridInfo)i;
2844 break;
2845 }
2846 }
2847
2848 if(GRID_INFO_COUNT == i)
2849 {
2850 gGridChoice = GRID_INFO_OTHER;
2851 }
2852}
2853
2854void LLAppViewer::setHelperURI(const std::string& uri)
2855{
2856 gHelperURI = uri;
2857}
2858
2859// Callback from a dialog indicating user was logged out. 2755// Callback from a dialog indicating user was logged out.
2860void finish_disconnect(S32 option, void* userdata) 2756void finish_disconnect(S32 option, void* userdata)
2861{ 2757{
@@ -2916,7 +2812,7 @@ void LLAppViewer::badNetworkHandler()
2916 2812
2917#if LL_WINDOWS 2813#if LL_WINDOWS
2918 // Generates the minidump. 2814 // Generates the minidump.
2919 LLWinDebug::handleException(NULL); 2815 LLWinDebug::generateCrashStacks(NULL);
2920#endif 2816#endif
2921 LLAppViewer::handleSyncViewerCrash(); 2817 LLAppViewer::handleSyncViewerCrash();
2922 LLAppViewer::handleViewerCrash(); 2818 LLAppViewer::handleViewerCrash();
@@ -2972,7 +2868,7 @@ void LLAppViewer::loadNameCache()
2972 2868
2973 // Try to load from the legacy format. This should go away after a 2869 // Try to load from the legacy format. This should go away after a
2974 // while. Phoenix 2008-01-30 2870 // while. Phoenix 2008-01-30
2975 FILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore 2871 LLFILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore
2976 if (name_cache_fp) 2872 if (name_cache_fp)
2977 { 2873 {
2978 gCacheName->importFile(name_cache_fp); 2874 gCacheName->importFile(name_cache_fp);
@@ -2993,15 +2889,6 @@ void LLAppViewer::saveNameCache()
2993 } 2889 }
2994} 2890}
2995 2891
2996bool LLAppViewer::isInProductionGrid()
2997{
2998 // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
2999 // but it seems that loginURI trumps that.
3000 const std::string& loginURI = getLoginURIs()[0];
3001 return (loginURI == gGridInfo[GRID_INFO_AGNI].mLoginURI);
3002}
3003
3004
3005/*! @brief This class is an LLFrameTimer that can be created with 2892/*! @brief This class is an LLFrameTimer that can be created with
3006 an elapsed time that starts counting up from the given value 2893 an elapsed time that starts counting up from the given value
3007 rather than 0.0. 2894 rather than 0.0.
@@ -3694,3 +3581,19 @@ void LLAppViewer::forceErrorSoftwareException()
3694 // *FIX: Any way to insure it won't be handled? 3581 // *FIX: Any way to insure it won't be handled?
3695 throw; 3582 throw;
3696} 3583}
3584
3585void LLAppViewer::startMainloopTimeout(F32 secs)
3586{
3587 if(secs < 0.0f)
3588 {
3589 secs = gSavedSettings.getF32("MainloopTimeoutDefault");
3590 }
3591
3592 mMainloopTimeout->setTimeout(secs);
3593 mMainloopTimeout->start();
3594}
3595
3596void LLAppViewer::stopMainloopTimeout()
3597{
3598 mMainloopTimeout->stop();
3599}
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h
index b3f3681..160f2c8 100644
--- a/linden/indra/newview/llappviewer.h
+++ b/linden/indra/newview/llappviewer.h
@@ -35,7 +35,7 @@
35class LLTextureCache; 35class LLTextureCache;
36class LLWorkerThread; 36class LLWorkerThread;
37class LLTextureFetch; 37class LLTextureFetch;
38 38class LLWatchdogTimeout;
39class LLCommandLineParser; 39class LLCommandLineParser;
40 40
41class LLAppViewer : public LLApp 41class LLAppViewer : public LLApp
@@ -96,13 +96,6 @@ public:
96 const LLString& getSecondLifeTitle() const; // The Second Life title. 96 const LLString& getSecondLifeTitle() const; // The Second Life title.
97 const LLString& getWindowTitle() const; // The window display name. 97 const LLString& getWindowTitle() const; // The window display name.
98 98
99 // Helpers for URIs
100 void addLoginURI(const std::string& uri);
101 void setHelperURI(const std::string& uri);
102 const std::vector<std::string>& getLoginURIs() const;
103 const std::string& getHelperURI() const;
104 void resetURIs() const;
105
106 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user. 99 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
107 void badNetworkHandler(); // Cause a crash state due to bad network packet. 100 void badNetworkHandler(); // Cause a crash state due to bad network packet.
108 101
@@ -112,8 +105,6 @@ public:
112 void loadNameCache(); 105 void loadNameCache();
113 void saveNameCache(); 106 void saveNameCache();
114 107
115 bool isInProductionGrid();
116
117 void removeMarkerFile(bool leave_logout_marker = false); 108 void removeMarkerFile(bool leave_logout_marker = false);
118 109
119 // LLAppViewer testing helpers. 110 // LLAppViewer testing helpers.
@@ -137,6 +128,11 @@ public:
137 128
138 std::string getSettingsFileName(const std::string& file); 129 std::string getSettingsFileName(const std::string& file);
139 130
131 // For thread debugging.
132 // llstartup needs to control this.
133 // llworld, send_agent_pause() also controls this.
134 void startMainloopTimeout(F32 secs = -1.0f);
135 void stopMainloopTimeout();
140 136
141protected: 137protected:
142 virtual bool initWindow(); // Initialize the viewer's window. 138 virtual bool initWindow(); // Initialize the viewer's window.
@@ -154,6 +150,7 @@ private:
154 150
155 bool initThreads(); // Initialize viewer threads, return false on failure. 151 bool initThreads(); // Initialize viewer threads, return false on failure.
156 bool initConfiguration(); // Initialize settings from the command line/config file. 152 bool initConfiguration(); // Initialize settings from the command line/config file.
153 void initGridChoice();
157 154
158 bool initCache(); // Initialize local client cache. 155 bool initCache(); // Initialize local client cache.
159 void purgeCache(); // Clear the local cache. 156 void purgeCache(); // Clear the local cache.
@@ -207,6 +204,8 @@ private:
207 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. 204 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
208 S32 mYieldTime; 205 S32 mYieldTime;
209 LLSD mSettingsFileList; 206 LLSD mSettingsFileList;
207
208 LLWatchdogTimeout* mMainloopTimeout;
210}; 209};
211 210
212// consts from viewer.h 211// consts from viewer.h
diff --git a/linden/indra/newview/llappviewerlinux.cpp b/linden/indra/newview/llappviewerlinux.cpp
index 084df9b..e41c505 100644
--- a/linden/indra/newview/llappviewerlinux.cpp
+++ b/linden/indra/newview/llappviewerlinux.cpp
@@ -37,7 +37,9 @@
37 37
38#include "llmemtype.h" 38#include "llmemtype.h"
39#include "llviewernetwork.h" 39#include "llviewernetwork.h"
40#include "llviewercontrol.h"
40#include "llmd5.h" 41#include "llmd5.h"
42#include "llfindlocale.h"
41 43
42#include <exception> 44#include <exception>
43 45
@@ -129,7 +131,7 @@ static inline BOOL do_basic_glibc_backtrace()
129 131
130 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 132 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
131 llinfos << "Opening stack trace file " << strace_filename << llendl; 133 llinfos << "Opening stack trace file " << strace_filename << llendl;
132 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); 134 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w");
133 if (!StraceFile) 135 if (!StraceFile)
134 { 136 {
135 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 137 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -160,7 +162,7 @@ static inline BOOL do_basic_glibc_backtrace()
160 162
161 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 163 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
162 llinfos << "Opening stack trace file " << strace_filename << llendl; 164 llinfos << "Opening stack trace file " << strace_filename << llendl;
163 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore 165 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore
164 if (!StraceFile) 166 if (!StraceFile)
165 { 167 {
166 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 168 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -198,7 +200,7 @@ static inline BOOL do_elfio_glibc_backtrace()
198 200
199 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 201 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
200 llinfos << "Opening stack trace file " << strace_filename << llendl; 202 llinfos << "Opening stack trace file " << strace_filename << llendl;
201 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore 203 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore
202 if (!StraceFile) 204 if (!StraceFile)
203 { 205 {
204 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 206 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -346,7 +348,7 @@ void LLAppViewerLinux::handleCrashReporting()
346 {(char*)cmd.c_str(), 348 {(char*)cmd.c_str(),
347 ask_dialog, 349 ask_dialog,
348 (char*)"-user", 350 (char*)"-user",
349 (char*)gGridName.c_str(), 351 (char*)LLViewerLogin::getInstance()->getGridLabel().c_str(),
350 (char*)"-name", 352 (char*)"-name",
351 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(), 353 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),
352 NULL}; 354 NULL};
@@ -432,7 +434,27 @@ bool LLAppViewerLinux::initLogging()
432 434
433bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp) 435bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
434{ 436{
435 clp.parseCommandLine(gArgC, gArgV); 437 if (!clp.parseCommandLine(gArgC, gArgV))
438 {
439 return false;
440 }
441
442 // Find the system language.
443 FL_Locale *locale = NULL;
444 FL_Success success = FL_FindLocale(&locale, FL_MESSAGES);
445 if (success != 0)
446 {
447 if (success >= 2 && locale->lang) // confident!
448 {
449 LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
450 if(c)
451 {
452 c->setValue(std::string(locale->lang), false);
453 }
454 }
455 FL_FreeLocale(&locale);
456 }
457
436 return true; 458 return true;
437} 459}
438 460
diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp
index c128634..96b6b24 100644
--- a/linden/indra/newview/llappviewermacosx.cpp
+++ b/linden/indra/newview/llappviewermacosx.cpp
@@ -47,7 +47,7 @@
47#include "llfloaterworldmap.h" 47#include "llfloaterworldmap.h"
48#include "llurldispatcher.h" 48#include "llurldispatcher.h"
49#include <Carbon/Carbon.h> 49#include <Carbon/Carbon.h>
50 50#include "lldir.h"
51namespace 51namespace
52{ 52{
53 // The command line args stored. 53 // The command line args stored.
@@ -197,12 +197,13 @@ void LLAppViewerMacOSX::handleCrashReporting()
197{ 197{
198 // Macintosh 198 // Macintosh
199 LLString command_str; 199 LLString command_str;
200 command_str = "open crashreporter.app"; 200 command_str += "open crashreporter.app";
201
202 clear_signals();
203 llinfos << "Launching crash reporter using: '" << command_str << "'" << llendl;
201 system(command_str.c_str()); /* Flawfinder: ignore */ 204 system(command_str.c_str()); /* Flawfinder: ignore */
202 205 llinfos << "returned from crash reporter... dying" << llendl;
203 // Sometimes signals don't seem to quit the viewer. 206 _exit(1);
204 // Make sure we exit so as to not totally confuse the user.
205 exit(1);
206} 207}
207 208
208std::string LLAppViewerMacOSX::generateSerialNumber() 209std::string LLAppViewerMacOSX::generateSerialNumber()
diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp
index a2d89a3..59883e5 100644
--- a/linden/indra/newview/llappviewerwin32.cpp
+++ b/linden/indra/newview/llappviewerwin32.cpp
@@ -54,9 +54,23 @@
54 54
55#include "llviewernetwork.h" 55#include "llviewernetwork.h"
56#include "llmd5.h" 56#include "llmd5.h"
57#include "llfindlocale.h"
57 58
58#include "llcommandlineparser.h" 59#include "llcommandlineparser.h"
59 60
61//*FIX:Mani - This hack is to fix a linker issue with libndofdev.lib
62// The lib was compiled under VS2005 - in VS2003 we need to remap assert
63#ifdef LL_DEBUG
64 #if (_MSC_VER < 1400)
65 extern "C" {
66 void _wassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Line)
67 {
68 llerrs << _Message << llendl;
69 }
70 }
71 #endif
72#endif
73
60LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop) 74LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
61{ 75{
62 // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. 76 // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
@@ -78,7 +92,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti
78 // Generate a minidump if we can. 92 // Generate a minidump if we can.
79 // Before we wake the error thread... 93 // Before we wake the error thread...
80 // Which will start the crash reporting. 94 // Which will start the crash reporting.
81 LLWinDebug::handleException(exception_infop); 95 LLWinDebug::generateCrashStacks(exception_infop);
82 96
83 // Flag status to error, so thread_error starts its work 97 // Flag status to error, so thread_error starts its work
84 LLApp::setError(); 98 LLApp::setError();
@@ -118,27 +132,11 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
118 132
119 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine); 133 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
120 134
121 // *FIX:Mani This method is poorly named, since the exception 135 LLWinDebug::initExceptionHandler(viewer_windows_exception_handler);
122 // is now handled by LLApp.
123 bool ok = LLWinDebug::setupExceptionHandler();
124 136
125 // Actually here's the exception setup.
126 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
127 prev_filter = SetUnhandledExceptionFilter(viewer_windows_exception_handler);
128 if (!prev_filter)
129 {
130 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl;
131 ok = FALSE;
132 }
133 if (prev_filter != LLWinDebug::handleException)
134 {
135 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl;
136 ok = FALSE;
137 }
138
139 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); 137 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
140 138
141 ok = viewer_app_ptr->init(); 139 bool ok = viewer_app_ptr->init();
142 if(!ok) 140 if(!ok)
143 { 141 {
144 llwarns << "Application init failed." << llendl; 142 llwarns << "Application init failed." << llendl;
@@ -326,14 +324,14 @@ bool LLAppViewerWin32::initHardwareTest()
326 324
327 LLSplashScreen::update("Detecting hardware..."); 325 LLSplashScreen::update("Detecting hardware...");
328 326
329 llinfos << "Attempting to poll DirectX for hardware info" << llendl; 327 LL_DEBUGS("AppInit") << "Attempting to poll DirectX for hardware info" << LL_ENDL;
330 gDXHardware.setWriteDebugFunc(write_debug_dx); 328 gDXHardware.setWriteDebugFunc(write_debug_dx);
331 BOOL probe_ok = gDXHardware.getInfo(vram_only); 329 BOOL probe_ok = gDXHardware.getInfo(vram_only);
332 330
333 if (!probe_ok 331 if (!probe_ok
334 && gSavedSettings.getWarning("AboutDirectX9")) 332 && gSavedSettings.getWarning("AboutDirectX9"))
335 { 333 {
336 llinfos << "DirectX probe failed, alerting user." << llendl; 334 LL_WARNS("AppInit") << "DirectX probe failed, alerting user." << LL_ENDL;
337 335
338 // Warn them that runnin without DirectX 9 will 336 // Warn them that runnin without DirectX 9 will
339 // not allow us to tell them about driver issues 337 // not allow us to tell them about driver issues
@@ -354,13 +352,13 @@ bool LLAppViewerWin32::initHardwareTest()
354 OSMB_YESNO); 352 OSMB_YESNO);
355 if (OSBTN_NO== button) 353 if (OSBTN_NO== button)
356 { 354 {
357 llinfos << "User quitting after failed DirectX 9 detection" << llendl; 355 LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL;
358 LLWeb::loadURLExternal(DIRECTX_9_URL); 356 LLWeb::loadURLExternal(DIRECTX_9_URL);
359 return false; 357 return false;
360 } 358 }
361 gSavedSettings.setWarning("AboutDirectX9", FALSE); 359 gSavedSettings.setWarning("AboutDirectX9", FALSE);
362 } 360 }
363 llinfos << "Done polling DirectX for hardware info" << llendl; 361 LL_DEBUGS("AppInit") << "Done polling DirectX for hardware info" << LL_ENDL;
364 362
365 // Only probe once after installation 363 // Only probe once after installation
366 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE); 364 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE);
@@ -372,20 +370,41 @@ bool LLAppViewerWin32::initHardwareTest()
372 LLSplashScreen::update(splash_msg.str().c_str()); 370 LLSplashScreen::update(splash_msg.str().c_str());
373 } 371 }
374 372
375 if (!LLWinDebug::setupExceptionHandler()) 373 if (!LLWinDebug::checkExceptionHandler())
376 { 374 {
377 llwarns << " Someone took over my exception handler (post hardware probe)!" << llendl; 375 LL_WARNS("AppInit") << " Someone took over my exception handler (post hardware probe)!" << LL_ENDL;
378 } 376 }
379 377
380 gGLManager.mVRAM = gDXHardware.getVRAM(); 378 gGLManager.mVRAM = gDXHardware.getVRAM();
381 llinfos << "Detected VRAM: " << gGLManager.mVRAM << llendl; 379 LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL;
382 380
383 return true; 381 return true;
384} 382}
385 383
386bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp) 384bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp)
387{ 385{
388 return clp.parseCommandLineString(mCmdLine); 386 if (!clp.parseCommandLineString(mCmdLine))
387 {
388 return false;
389 }
390
391 // Find the system language.
392 FL_Locale *locale = NULL;
393 FL_Success success = FL_FindLocale(&locale, FL_MESSAGES);
394 if (success != 0)
395 {
396 if (success >= 2 && locale->lang) // confident!
397 {
398 LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
399 if(c)
400 {
401 c->setValue(std::string(locale->lang), false);
402 }
403 }
404 FL_FreeLocale(&locale);
405 }
406
407 return true;
389} 408}
390 409
391void LLAppViewerWin32::handleSyncCrashTrace() 410void LLAppViewerWin32::handleSyncCrashTrace()
@@ -401,7 +420,7 @@ void LLAppViewerWin32::handleCrashReporting()
401 exe_path += "win_crash_logger.exe"; 420 exe_path += "win_crash_logger.exe";
402 421
403 std::string arg_string = "-user "; 422 std::string arg_string = "-user ";
404 arg_string += gGridName; 423 arg_string += LLViewerLogin::getInstance()->getGridLabel();
405 424
406 switch(getCrashBehavior()) 425 switch(getCrashBehavior())
407 { 426 {
diff --git a/linden/indra/newview/llbox.cpp b/linden/indra/newview/llbox.cpp
index 984d15b..1e6d282 100644
--- a/linden/indra/newview/llbox.cpp
+++ b/linden/indra/newview/llbox.cpp
@@ -34,7 +34,7 @@
34#include "llbox.h" 34#include "llbox.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llglheaders.h" 38#include "llglheaders.h"
39 39
40LLBox gBox; 40LLBox gBox;
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index d1834a6..bbbdb93 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -144,6 +144,7 @@ BOOL LLChatBar::postBuild()
144 mInputEditor->setRevertOnEsc( FALSE ); 144 mInputEditor->setRevertOnEsc( FALSE );
145 mInputEditor->setIgnoreTab(TRUE); 145 mInputEditor->setIgnoreTab(TRUE);
146 mInputEditor->setPassDelete(TRUE); 146 mInputEditor->setPassDelete(TRUE);
147 mInputEditor->setReplaceNewlinesWithSpaces(FALSE);
147 148
148 mInputEditor->setMaxTextLength(1023); 149 mInputEditor->setMaxTextLength(1023);
149 mInputEditor->setEnableLineHistory(TRUE); 150 mInputEditor->setEnableLineHistory(TRUE);
diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp
index 3f18d39..64db86c 100644
--- a/linden/indra/newview/llcolorswatch.cpp
+++ b/linden/indra/newview/llcolorswatch.cpp
@@ -39,7 +39,7 @@
39 39
40// Project includes 40// Project includes
41#include "llui.h" 41#include "llui.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "lluiconstants.h" 43#include "lluiconstants.h"
44#include "llviewerwindow.h" 44#include "llviewerwindow.h"
45#include "llviewercontrol.h" 45#include "llviewercontrol.h"
diff --git a/linden/indra/newview/llcommandlineparser.cpp b/linden/indra/newview/llcommandlineparser.cpp
index 8123632..45f33dc 100644
--- a/linden/indra/newview/llcommandlineparser.cpp
+++ b/linden/indra/newview/llcommandlineparser.cpp
@@ -291,12 +291,15 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
291 } 291 }
292 catch(LLCLPLastOption&) 292 catch(LLCLPLastOption&)
293 { 293 {
294 // Continue without parsing. 294 // This exception means a token was read after an option
295 std::string msg = "Found tokens past last option. Ignoring."; 295 // that must be the last option was reached (see url and slurl options)
296 llwarns << msg << llendl; 296
297 mErrorMsg = msg; 297 // boost::po will have stored a malformed option.
298 // boost::po will have stored a mal-formed option.
299 // All such options will be removed below. 298 // All such options will be removed below.
299 // The last option read, the last_option option, and its value
300 // are put into the error message.
301 std::string last_option;
302 std::string last_value;
300 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();) 303 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
301 { 304 {
302 po::variables_map::iterator tempI = i++; 305 po::variables_map::iterator tempI = i++;
@@ -304,7 +307,27 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
304 { 307 {
305 gVariableMap.erase(tempI); 308 gVariableMap.erase(tempI);
306 } 309 }
310 else
311 {
312 last_option = tempI->first;
313 LLCommandLineParser::token_vector_t* tv =
314 boost::any_cast<LLCommandLineParser::token_vector_t>(&(tempI->second.value()));
315 if(!tv->empty())
316 {
317 last_value = (*tv)[tv->size()-1];
318 }
319 }
307 } 320 }
321
322 // Continue without parsing.
323 std::ostringstream msg;
324 msg << "Caught Error: Found options after last option: "
325 << last_option << " "
326 << last_value;
327
328 llwarns << msg.str() << llendl;
329 mErrorMsg = msg.str();
330 return false;
308 } 331 }
309 return true; 332 return true;
310} 333}
diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp
index aeaa189..45d8e1c 100644
--- a/linden/indra/newview/llcompilequeue.cpp
+++ b/linden/indra/newview/llcompilequeue.cpp
@@ -386,7 +386,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
386 asset_id.toString(uuid_str); 386 asset_id.toString(uuid_str);
387 snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */ 387 snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
388 388
389 FILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ 389 LLFILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
390 if (fp) 390 if (fp)
391 { 391 {
392 const S32 buf_size = 65536; 392 const S32 buf_size = 65536;
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index 517e06f..08ef124 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -262,34 +262,38 @@ void LLConsole::addQueuedLines()
262 if (!wline.empty() && mFont != NULL) 262 if (!wline.empty() && mFont != NULL)
263 { 263 {
264 // Wrap lines that are longer than the view is wide. 264 // Wrap lines that are longer than the view is wide.
265 S32 offset = 0; 265 S32 line_start_offset = 0;
266 while( offset < (S32)wline.length() ) 266 while( line_start_offset < (S32)wline.length() )
267 { 267 {
268 S32 skip_chars; // skip '\n' 268 // Find the next '\n', if any
269 // Figure out if a word-wrapped line fits here. 269 LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), line_start_offset);
270 LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), offset); 270 if (LLWString::npos == line_end)
271 if (line_end != LLWString::npos)
272 {
273 skip_chars = 1; // skip '\n'
274 }
275 else
276 { 271 {
272 // no more '\n's, try to use the whole line
277 line_end = wline.size(); 273 line_end = wline.size();
278 skip_chars = 0;
279 } 274 }
280 U32 drawable = mFont->maxDrawableChars(wline.c_str()+offset, (F32)getRect().getWidth(), line_end-offset, TRUE); 275 // Find how many characters will reasonably fit in the allowed width
276 U32 drawable = mFont->maxDrawableChars(wline.c_str()+line_start_offset, (F32)getRect().getWidth(), line_end-line_start_offset, TRUE);
281 if (drawable != 0) 277 if (drawable != 0)
282 { 278 {
283 LLFixedBuffer::addLine(wline.substr(offset, drawable)); 279 LLFixedBuffer::addLine(wline.substr(line_start_offset, drawable));
284 mAddTimes[mAddTimes.size()-1] = line_info.add_time; 280 mAddTimes[mAddTimes.size()-1] = line_info.add_time;
281
282 // move the line_start_offset by the number of characters we were able to draw, up to an implicit or explicit line-break.
283 line_start_offset += drawable;
285 } 284 }
286 else 285 else
287 { 286 {
288 // force a blank line 287 // no drawable characters - force a blank line and try the next character.
289 LLFixedBuffer::addLine(" "); 288 LLFixedBuffer::addLine(" ");
289 line_start_offset++;
290 } 290 }
291 mColors.push_back(color); 291 mColors.push_back(color);
292 offset += (drawable + skip_chars); 292 // if this was an *explicit* line-break or the end of the text, then increment the offset for the start of the next line (if any).
293 if (line_start_offset == line_end)
294 {
295 line_start_offset++;
296 }
293 } 297 }
294 } 298 }
295 } 299 }
diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp
index 31937ba..f79fd0f 100644
--- a/linden/indra/newview/llcubemap.cpp
+++ b/linden/indra/newview/llcubemap.cpp
@@ -38,6 +38,8 @@
38#include "v4coloru.h" 38#include "v4coloru.h"
39#include "v3math.h" 39#include "v3math.h"
40 40
41#include "llrender.h"
42
41#include "llviewercamera.h" 43#include "llviewercamera.h"
42#include "llviewerimage.h" 44#include "llviewerimage.h"
43#include "llviewerimagelist.h" 45#include "llviewerimagelist.h"
@@ -95,9 +97,7 @@ void LLCubeMap::initGL()
95 mImages[i]->createGLTexture(0, mRawImages[i], texname); 97 mImages[i]->createGLTexture(0, mRawImages[i], texname);
96 98
97 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texname); 99 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texname);
98 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 100 mImages[i]->setClampCubemap (TRUE, TRUE, TRUE);
99 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
100 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
101 stop_glerror(); 101 stop_glerror();
102 } 102 }
103 } 103 }
@@ -187,16 +187,15 @@ void LLCubeMap::bind()
187 // We assume that if they have cube mapping, they have multitexturing. 187 // We assume that if they have cube mapping, they have multitexturing.
188 if (mTextureStage > 0) 188 if (mTextureStage > 0)
189 { 189 {
190 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 190 gGL.getTexUnit(mTextureStage)->activate();
191 } 191 }
192 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 192 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
193 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName()); 193 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName());
194 194
195 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 195 mImages[0]->setMipFilterNearest (FALSE, FALSE);
196 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, (use_cube_mipmaps? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
197 if (mTextureStage > 0) 196 if (mTextureStage > 0)
198 { 197 {
199 glActiveTextureARB(GL_TEXTURE0_ARB); 198 gGL.getTexUnit(0)->activate();
200 } 199 }
201 } 200 }
202 else 201 else
@@ -221,14 +220,14 @@ void LLCubeMap::enableTexture(S32 stage)
221 { 220 {
222 if (stage > 0) 221 if (stage > 0)
223 { 222 {
224 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 223 gGL.getTexUnit(stage)->activate();
225 } 224 }
226 225
227 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 226 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
228 227
229 if (stage > 0) 228 if (stage > 0)
230 { 229 {
231 glActiveTextureARB(GL_TEXTURE0_ARB); 230 gGL.getTexUnit(0)->activate();
232 } 231 }
233 } 232 }
234} 233}
@@ -240,7 +239,7 @@ void LLCubeMap::enableTextureCoords(S32 stage)
240 { 239 {
241 if (stage > 0) 240 if (stage > 0)
242 { 241 {
243 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 242 gGL.getTexUnit(stage)->activate();
244 } 243 }
245 244
246 glEnable(GL_TEXTURE_GEN_R); 245 glEnable(GL_TEXTURE_GEN_R);
@@ -253,7 +252,7 @@ void LLCubeMap::enableTextureCoords(S32 stage)
253 252
254 if (stage > 0) 253 if (stage > 0)
255 { 254 {
256 glActiveTextureARB(GL_TEXTURE0_ARB); 255 gGL.getTexUnit(0)->activate();
257 } 256 }
258 } 257 }
259} 258}
@@ -272,13 +271,13 @@ void LLCubeMap::disableTexture(void)
272 { 271 {
273 if (mTextureStage > 0) 272 if (mTextureStage > 0)
274 { 273 {
275 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 274 gGL.getTexUnit(mTextureStage)->activate();
276 } 275 }
277 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); 276 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
278 glDisable(GL_TEXTURE_CUBE_MAP_ARB); 277 glDisable(GL_TEXTURE_CUBE_MAP_ARB);
279 if (mTextureStage > 0) 278 if (mTextureStage > 0)
280 { 279 {
281 glActiveTextureARB(GL_TEXTURE0_ARB); 280 gGL.getTexUnit(0)->activate();
282 } 281 }
283 } 282 }
284} 283}
@@ -289,14 +288,14 @@ void LLCubeMap::disableTextureCoords(void)
289 { 288 {
290 if (mTextureCoordStage > 0) 289 if (mTextureCoordStage > 0)
291 { 290 {
292 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureCoordStage); 291 gGL.getTexUnit(mTextureCoordStage)->activate();
293 } 292 }
294 glDisable(GL_TEXTURE_GEN_S); 293 glDisable(GL_TEXTURE_GEN_S);
295 glDisable(GL_TEXTURE_GEN_T); 294 glDisable(GL_TEXTURE_GEN_T);
296 glDisable(GL_TEXTURE_GEN_R); 295 glDisable(GL_TEXTURE_GEN_R);
297 if (mTextureCoordStage > 0) 296 if (mTextureCoordStage > 0)
298 { 297 {
299 glActiveTextureARB(GL_TEXTURE0_ARB); 298 gGL.getTexUnit(0)->activate();
300 } 299 }
301 } 300 }
302} 301}
@@ -307,7 +306,7 @@ void LLCubeMap::setMatrix(S32 stage)
307 306
308 if (stage > 0) 307 if (stage > 0)
309 { 308 {
310 glActiveTextureARB(GL_TEXTURE0_ARB+stage); 309 gGL.getTexUnit(stage)->activate();
311 } 310 }
312 311
313 LLVector3 x(LLVector3d(gGLModelView+0)); 312 LLVector3 x(LLVector3d(gGLModelView+0));
@@ -326,7 +325,7 @@ void LLCubeMap::setMatrix(S32 stage)
326 325
327 if (stage > 0) 326 if (stage > 0)
328 { 327 {
329 glActiveTextureARB(GL_TEXTURE0_ARB); 328 gGL.getTexUnit(0)->activate();
330 } 329 }
331} 330}
332 331
@@ -334,7 +333,7 @@ void LLCubeMap::restoreMatrix()
334{ 333{
335 if (mMatrixStage > 0) 334 if (mMatrixStage > 0)
336 { 335 {
337 glActiveTextureARB(GL_TEXTURE0_ARB+mMatrixStage); 336 gGL.getTexUnit(mMatrixStage)->activate();
338 } 337 }
339 glMatrixMode(GL_TEXTURE); 338 glMatrixMode(GL_TEXTURE);
340 glPopMatrix(); 339 glPopMatrix();
@@ -342,10 +341,17 @@ void LLCubeMap::restoreMatrix()
342 341
343 if (mMatrixStage > 0) 342 if (mMatrixStage > 0)
344 { 343 {
345 glActiveTextureARB(GL_TEXTURE0_ARB); 344 gGL.getTexUnit(0)->activate();
346 } 345 }
347} 346}
348 347
348void LLCubeMap::setReflection (void)
349{
350 glBindTexture (GL_TEXTURE_CUBE_MAP_ARB, getGLName());
351 mImages[0]->setMipFilterNearest (FALSE, FALSE);
352 mImages[0]->setClampCubemap (TRUE, TRUE);
353}
354
349LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const 355LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const
350{ 356{
351 LLVector3 dir; 357 LLVector3 dir;
diff --git a/linden/indra/newview/llcubemap.h b/linden/indra/newview/llcubemap.h
index a4d9106..0b8cf29 100644
--- a/linden/indra/newview/llcubemap.h
+++ b/linden/indra/newview/llcubemap.h
@@ -60,6 +60,7 @@ public:
60 void disableTextureCoords(void); 60 void disableTextureCoords(void);
61 void setMatrix(S32 stage); 61 void setMatrix(S32 stage);
62 void restoreMatrix(); 62 void restoreMatrix();
63 void setReflection (void);
63 64
64 void finishPaint(); 65 void finishPaint();
65 66
diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp
index 8964054..74f6c71 100644
--- a/linden/indra/newview/llcurrencyuimanager.cpp
+++ b/linden/indra/newview/llcurrencyuimanager.cpp
@@ -44,7 +44,7 @@
44#include "lllineeditor.h" 44#include "lllineeditor.h"
45#include "llviewchildren.h" 45#include "llviewchildren.h"
46#include "llxmlrpctransaction.h" 46#include "llxmlrpctransaction.h"
47#include "llappviewer.h" 47#include "llviewernetwork.h"
48 48
49 49
50const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0; 50const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0;
@@ -238,7 +238,7 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
238 static std::string transactionURI; 238 static std::string transactionURI;
239 if (transactionURI.empty()) 239 if (transactionURI.empty())
240 { 240 {
241 transactionURI = LLAppViewer::instance()->getHelperURI() + "currency.php"; 241 transactionURI = LLViewerLogin::getInstance()->getHelperURI() + "currency.php";
242 } 242 }
243 243
244 delete mTransaction; 244 delete mTransaction;
@@ -526,3 +526,4 @@ std::string LLCurrencyUIManager::errorURI()
526} 526}
527 527
528 528
529
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index d2b2a99..ba7d6b9 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -418,7 +418,7 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
418 418
419 if (mParent.notNull() && mParent->isActive() && warning_enabled) 419 if (mParent.notNull() && mParent->isActive() && warning_enabled)
420 { 420 {
421 llwarns << "Drawable becamse static with active parent!" << llendl; 421 LL_WARNS_ONCE("Drawable") << "Drawable becomes static with active parent!" << LL_ENDL;
422 } 422 }
423 423
424 S32 child_count = mVObjp->mChildList.size(); 424 S32 child_count = mVObjp->mChildList.size();
@@ -1170,11 +1170,13 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
1170 LLSpatialGroup* group = av->getSpatialGroup(); 1170 LLSpatialGroup* group = av->getSpatialGroup();
1171 1171
1172 BOOL impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor(); 1172 BOOL impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor();
1173 1173 BOOL loaded = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isFullyLoaded();
1174
1174 if (!group || 1175 if (!group ||
1175 av->getSpatialGroup()->mDistance > LLVOAvatar::sRenderDistance || 1176 av->getSpatialGroup()->mDistance > LLVOAvatar::sRenderDistance ||
1176 LLDrawable::getCurrentFrame() - av->mVisible > 1 || 1177 LLDrawable::getCurrentFrame() - av->mVisible > 1 ||
1177 impostor) 1178 impostor ||
1179 !loaded)
1178 { 1180 {
1179 return; 1181 return;
1180 } 1182 }
diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp
index c579c68..9d8bd0a 100644
--- a/linden/indra/newview/lldrawpool.cpp
+++ b/linden/indra/newview/lldrawpool.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "lldrawpool.h" 34#include "lldrawpool.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36#include "llfasttimer.h" 36#include "llfasttimer.h"
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38 38
diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp
index 95f8502..ca8f3b4 100644
--- a/linden/indra/newview/lldrawpoolalpha.cpp
+++ b/linden/indra/newview/lldrawpoolalpha.cpp
@@ -37,6 +37,7 @@
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38#include "llcriticaldamp.h" 38#include "llcriticaldamp.h"
39#include "llfasttimer.h" 39#include "llfasttimer.h"
40#include "llrender.h"
40 41
41#include "llcubemap.h" 42#include "llcubemap.h"
42#include "llsky.h" 43#include "llsky.h"
@@ -93,7 +94,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
93 { 94 {
94 // Start out with no shaders. 95 // Start out with no shaders.
95 current_shader = target_shader = NULL; 96 current_shader = target_shader = NULL;
96 glUseProgramObjectARB(0); 97 LLGLSLShader::bindNoShader();
97 } 98 }
98 gPipeline.enableLightsDynamic(); 99 gPipeline.enableLightsDynamic();
99} 100}
@@ -105,7 +106,7 @@ void LLDrawPoolAlpha::endRenderPass( S32 pass )
105 106
106 if(gPipeline.canUseWindLightShaders()) 107 if(gPipeline.canUseWindLightShaders())
107 { 108 {
108 glUseProgramObjectARB(0); 109 LLGLSLShader::bindNoShader();
109 } 110 }
110} 111}
111 112
@@ -123,7 +124,7 @@ void LLDrawPoolAlpha::render(S32 pass)
123 { 124 {
124 if(gPipeline.canUseWindLightShaders()) 125 if(gPipeline.canUseWindLightShaders())
125 { 126 {
126 glUseProgramObjectARB(0); 127 LLGLSLShader::bindNoShader();
127 } 128 }
128 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); 129 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
129 glColor4f(1,0,0,1); 130 glColor4f(1,0,0,1);
@@ -207,18 +208,17 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
207 { 208 {
208 return; 209 return;
209 } 210 }
210 // *TODO - Uhhh, we should always be doing some type of alpha rejection. These should probably both be 0.01f 211 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
211 glAlphaFunc(GL_GREATER, 0.f);
212 } 212 }
213 else 213 else
214 { 214 {
215 if (LLPipeline::sImpostorRender) 215 if (LLPipeline::sImpostorRender)
216 { 216 {
217 glAlphaFunc(GL_GREATER, 0.5f); 217 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
218 } 218 }
219 else 219 else
220 { 220 {
221 glAlphaFunc(GL_GREATER, 0.01f); 221 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
222 } 222 }
223 } 223 }
224 224
@@ -230,7 +230,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
230 230
231 if (texture && params.mTexture.notNull()) 231 if (texture && params.mTexture.notNull())
232 { 232 {
233 glActiveTextureARB(GL_TEXTURE0_ARB); 233 gGL.getTexUnit(0)->activate();
234 params.mTexture->bind(); 234 params.mTexture->bind();
235 params.mTexture->addTextureStats(params.mVSize); 235 params.mTexture->addTextureStats(params.mVSize);
236 if (params.mTextureMatrix) 236 if (params.mTextureMatrix)
@@ -283,7 +283,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
283 } 283 }
284 else if (!use_shaders && current_shader != NULL) 284 else if (!use_shaders && current_shader != NULL)
285 { 285 {
286 glUseProgramObjectARB(0); 286 LLGLSLShader::bindNoShader();
287 current_shader = NULL; 287 current_shader = NULL;
288 } 288 }
289 289
diff --git a/linden/indra/newview/lldrawpoolalpha.h b/linden/indra/newview/lldrawpoolalpha.h
index 4318045..b717398 100644
--- a/linden/indra/newview/lldrawpoolalpha.h
+++ b/linden/indra/newview/lldrawpoolalpha.h
@@ -68,13 +68,10 @@ public:
68 static BOOL sShowDebugAlpha; 68 static BOOL sShowDebugAlpha;
69 69
70private: 70private:
71 S32 mDiffuse;
72 LLGLSLShader* current_shader; 71 LLGLSLShader* current_shader;
73 LLGLSLShader* target_shader; 72 LLGLSLShader* target_shader;
74 LLGLSLShader* simple_shader; 73 LLGLSLShader* simple_shader;
75 LLGLSLShader* simple_lod_shader;
76 LLGLSLShader* fullbright_shader; 74 LLGLSLShader* fullbright_shader;
77 LLGLSLShader* fullbright_lod_shader;
78}; 75};
79 76
80class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha 77class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index 6cfd131..fe5d4cd 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "lldrawpoolavatar.h" 34#include "lldrawpoolavatar.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36 36
37#include "llvoavatar.h" 37#include "llvoavatar.h"
38#include "m3math.h" 38#include "m3math.h"
@@ -299,7 +299,7 @@ void LLDrawPoolAvatar::beginSkinned()
299 } 299 }
300 300
301 sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP); 301 sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP);
302 glActiveTextureARB(GL_TEXTURE0_ARB); 302 gGL.getTexUnit(0)->activate();
303 } 303 }
304 else 304 else
305 { 305 {
@@ -319,7 +319,7 @@ void LLDrawPoolAvatar::endSkinned()
319 { 319 {
320 sRenderingSkinned = FALSE; 320 sRenderingSkinned = FALSE;
321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP); 321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
322 glActiveTextureARB(GL_TEXTURE0_ARB); 322 gGL.getTexUnit(0)->activate();
323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
324 if (sShaderLevel >= SHADER_LEVEL_BUMP) 324 if (sShaderLevel >= SHADER_LEVEL_BUMP)
325 { 325 {
@@ -343,7 +343,7 @@ void LLDrawPoolAvatar::endSkinned()
343 } 343 }
344 } 344 }
345 345
346 glActiveTextureARB(GL_TEXTURE0_ARB); 346 gGL.getTexUnit(0)->activate();
347} 347}
348 348
349 349
@@ -395,6 +395,31 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
395 return; 395 return;
396 } 396 }
397 397
398 if (!single_avatar && !avatarp->isFullyLoaded())
399 {
400
401 /* // debug code to draw a cube in place of avatar
402 LLGLSNoTexture gls_no_texture;
403 LLVector3 pos = avatarp->getPositionAgent();
404
405 gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f);
406 gGL.begin(GL_LINES);
407 {
408 gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
409 gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
410 gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV);
411 gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV);
412 gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV);
413 gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV);
414 }
415 gGL.end();
416 */
417
418
419 // don't render please
420 return;
421 }
422
398 BOOL impostor = avatarp->isImpostor() && !single_avatar; 423 BOOL impostor = avatarp->isImpostor() && !single_avatar;
399 424
400 if (impostor && pass != 0) 425 if (impostor && pass != 0)
@@ -574,22 +599,12 @@ void LLDrawPoolAvatar::renderForSelect()
574 BOOL impostor = avatarp->isImpostor(); 599 BOOL impostor = avatarp->isImpostor();
575 if (impostor) 600 if (impostor)
576 { 601 {
577 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 602 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
578 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 603 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
579 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
580
581 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
582 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
583
584 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
585 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
586
587 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
588 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
589 604
590 avatarp->renderImpostor(color); 605 avatarp->renderImpostor(color);
591 606
592 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 607 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
593 return; 608 return;
594 } 609 }
595 610
@@ -598,8 +613,8 @@ void LLDrawPoolAvatar::renderForSelect()
598 { 613 {
599 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX]; 614 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
600 } 615 }
601 glAlphaFunc(GL_GEQUAL, 0.2f); 616 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
602 gGL.blendFunc(GL_ONE, GL_ZERO); 617 gGL.setSceneBlendType(LLRender::BT_REPLACE);
603 618
604 glColor4ubv(color.mV); 619 glColor4ubv(color.mV);
605 620
@@ -620,11 +635,11 @@ void LLDrawPoolAvatar::renderForSelect()
620 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 635 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
621 } 636 }
622 637
623 glAlphaFunc(GL_GREATER, 0.01f); 638 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
624 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 639 gGL.setSceneBlendType(LLRender::BT_ALPHA);
625 640
626 // restore texture mode 641 // restore texture mode
627 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 642 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
628} 643}
629 644
630//----------------------------------------------------------------------------- 645//-----------------------------------------------------------------------------
diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp
index 7e8b9d6..303b8d5 100644
--- a/linden/indra/newview/lldrawpoolbump.cpp
+++ b/linden/indra/newview/lldrawpoolbump.cpp
@@ -41,7 +41,7 @@
41#include "m4math.h" 41#include "m4math.h"
42#include "v4math.h" 42#include "v4math.h"
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46#include "llagent.h" 46#include "llagent.h"
47#include "llcubemap.h" 47#include "llcubemap.h"
@@ -100,7 +100,7 @@ void LLStandardBumpmap::restoreGL()
100 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness"); // BE_DARKNESS 100 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness"); // BE_DARKNESS
101 101
102 std::string file_name = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "std_bump.ini" ); 102 std::string file_name = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "std_bump.ini" );
103 FILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/ 103 LLFILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/
104 if( !file ) 104 if( !file )
105 { 105 {
106 llwarns << "Could not open std_bump <" << file_name << ">" << llendl; 106 llwarns << "Could not open std_bump <" << file_name << ">" << llendl;
@@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible)
371 cube_map->setMatrix(0); 371 cube_map->setMatrix(0);
372 cube_map->bind(); 372 cube_map->bind();
373 373
374 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 374 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
375 375 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA);
376 //use RGB from texture
377 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
378 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
379 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
380
381 // use alpha from color
382 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
383 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR);
384 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
385 } 376 }
386 } 377 }
387} 378}
@@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible)
443 } 434 }
444 435
445 shader->unbind(); 436 shader->unbind();
446 glActiveTextureARB(GL_TEXTURE0_ARB); 437 gGL.getTexUnit(0)->activate();
447 glEnable(GL_TEXTURE_2D); 438 glEnable(GL_TEXTURE_2D);
448 } 439 }
449 440 if (cube_channel >= 0)
450 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 441 {
442 gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT);
443 }
451 } 444 }
452 445
453 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 446 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
454 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 447 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
455 448
456 diffuse_channel = -1; 449 diffuse_channel = -1;
457 cube_channel = 0; 450 cube_channel = 0;
@@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny()
540 { 533 {
541 shader->disableTexture(LLShaderMgr::DIFFUSE_MAP); 534 shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);
542 } 535 }
543 glActiveTextureARB(GL_TEXTURE0_ARB); 536 gGL.getTexUnit(0)->activate();
544 glEnable(GL_TEXTURE_2D); 537 glEnable(GL_TEXTURE_2D);
545 538
546 shader->unbind(); 539 shader->unbind();
547 540
548 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 541 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
549 } 542 }
550 543
551 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 544 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
552 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 545 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
553 546
554 diffuse_channel = -1; 547 diffuse_channel = -1;
555 cube_channel = 0; 548 cube_channel = 0;
@@ -650,37 +643,18 @@ void LLDrawPoolBump::beginBump()
650 643
651 // TEXTURE UNIT 0 644 // TEXTURE UNIT 0
652 // Output.rgb = texture at texture coord 0 645 // Output.rgb = texture at texture coord 0
653 glActiveTextureARB(GL_TEXTURE0_ARB); 646 gGL.getTexUnit(0)->activate();
654
655 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
656 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
657
658 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
659 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA);
660 647
661 // Don't care about alpha output 648 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
662 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 649 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
663 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
664 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
665 650
666 // TEXTURE UNIT 1 651 // TEXTURE UNIT 1
667 glActiveTextureARB(GL_TEXTURE1_ARB); 652 gGL.getTexUnit(1)->activate();
668 653
669 glEnable(GL_TEXTURE_2D); // Texture unit 1 654 glEnable(GL_TEXTURE_2D); // Texture unit 1
670 655
671 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 656 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
672 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); 657 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
673
674 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
675 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
676
677 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
678 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
679
680 // Don't care about alpha output
681 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
682 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
683 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
684 658
685 // src = tex0 + (1 - tex1) - 0.5 659 // src = tex0 + (1 - tex1) - 0.5
686 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 660 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
@@ -692,9 +666,8 @@ void LLDrawPoolBump::beginBump()
692 // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] 666 // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
693 // = (1 + bump0 - bump1) * dst.rgb 667 // = (1 + bump0 - bump1) * dst.rgb
694 // = dst.rgb + dst.rgb * (bump0 - bump1) 668 // = dst.rgb + dst.rgb * (bump0 - bump1)
695 gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR); 669 gGL.setSceneBlendType(LLRender::BT_MULT_X2);
696// gGL.blendFunc(GL_ONE, GL_ZERO); // temp 670 gGL.getTexUnit(0)->activate();
697 glActiveTextureARB(GL_TEXTURE0_ARB);
698 stop_glerror(); 671 stop_glerror();
699 672
700 LLViewerImage::unbindTexture(1, GL_TEXTURE_2D); 673 LLViewerImage::unbindTexture(1, GL_TEXTURE_2D);
@@ -728,15 +701,15 @@ void LLDrawPoolBump::endBump()
728 } 701 }
729 702
730 // Disable texture unit 1 703 // Disable texture unit 1
731 glActiveTextureARB(GL_TEXTURE1_ARB); 704 gGL.getTexUnit(1)->activate();
732 glDisable(GL_TEXTURE_2D); // Texture unit 1 705 glDisable(GL_TEXTURE_2D); // Texture unit 1
733 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 706 gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
734 707
735 // Disable texture unit 0 708 // Disable texture unit 0
736 glActiveTextureARB(GL_TEXTURE0_ARB); 709 gGL.getTexUnit(0)->activate();
737 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 710 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
738 711
739 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 712 gGL.setSceneBlendType(LLRender::BT_ALPHA);
740} 713}
741 714
742//////////////////////////////////////////////////////////////// 715////////////////////////////////////////////////////////////////
@@ -1101,16 +1074,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
1101 { 1074 {
1102 if (mShiny) 1075 if (mShiny)
1103 { 1076 {
1104 glActiveTextureARB(GL_TEXTURE0_ARB); 1077 gGL.getTexUnit(0)->activate();
1105 glMatrixMode(GL_TEXTURE); 1078 glMatrixMode(GL_TEXTURE);
1106 } 1079 }
1107 else 1080 else
1108 { 1081 {
1109 glActiveTextureARB(GL_TEXTURE1_ARB); 1082 gGL.getTexUnit(1)->activate();
1110 glMatrixMode(GL_TEXTURE); 1083 glMatrixMode(GL_TEXTURE);
1111 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); 1084 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
1112 gPipeline.mTextureMatrixOps++; 1085 gPipeline.mTextureMatrixOps++;
1113 glActiveTextureARB(GL_TEXTURE0_ARB); 1086 gGL.getTexUnit(0)->activate();
1114 } 1087 }
1115 1088
1116 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); 1089 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
@@ -1153,13 +1126,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
1153 { 1126 {
1154 if (mShiny) 1127 if (mShiny)
1155 { 1128 {
1156 glActiveTextureARB(GL_TEXTURE0_ARB); 1129 gGL.getTexUnit(0)->activate();
1157 } 1130 }
1158 else 1131 else
1159 { 1132 {
1160 glActiveTextureARB(GL_TEXTURE1_ARB); 1133 gGL.getTexUnit(1)->activate();
1161 glLoadIdentity(); 1134 glLoadIdentity();
1162 glActiveTextureARB(GL_TEXTURE0_ARB); 1135 gGL.getTexUnit(0)->activate();
1163 } 1136 }
1164 glLoadIdentity(); 1137 glLoadIdentity();
1165 glMatrixMode(GL_MODELVIEW); 1138 glMatrixMode(GL_MODELVIEW);
@@ -1172,9 +1145,9 @@ void LLDrawPoolInvisible::render(S32 pass)
1172 1145
1173 U32 invisi_mask = LLVertexBuffer::MAP_VERTEX; 1146 U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
1174 glStencilMask(0); 1147 glStencilMask(0);
1175 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1148 gGL.setColorMask(false, false);
1176 pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE); 1149 pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
1177 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1150 gGL.setColorMask(true, false);
1178 glStencilMask(0xFFFFFFFF); 1151 glStencilMask(0xFFFFFFFF);
1179 1152
1180 if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) 1153 if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
diff --git a/linden/indra/newview/lldrawpoolsimple.cpp b/linden/indra/newview/lldrawpoolsimple.cpp
index 330ac57..d580e97 100644
--- a/linden/indra/newview/lldrawpoolsimple.cpp
+++ b/linden/indra/newview/lldrawpoolsimple.cpp
@@ -41,7 +41,7 @@
41#include "pipeline.h" 41#include "pipeline.h"
42#include "llspatialpartition.h" 42#include "llspatialpartition.h"
43#include "llglslshader.h" 43#include "llglslshader.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46 46
47static LLGLSLShader* simple_shader = NULL; 47static LLGLSLShader* simple_shader = NULL;
@@ -52,7 +52,7 @@ void LLDrawPoolGlow::render(S32 pass)
52 LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW); 52 LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW);
53 LLGLEnable blend(GL_BLEND); 53 LLGLEnable blend(GL_BLEND);
54 LLGLDisable test(GL_ALPHA_TEST); 54 LLGLDisable test(GL_ALPHA_TEST);
55 gGL.blendFunc(GL_ONE, GL_ONE); 55 gGL.setSceneBlendType(LLRender::BT_ADD);
56 56
57 U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT); 57 U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
58 58
@@ -66,11 +66,11 @@ void LLDrawPoolGlow::render(S32 pass)
66 } 66 }
67 67
68 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 68 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
69 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 69 gGL.setColorMask(false, true);
70 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); 70 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
71 71
72 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 72 gGL.setColorMask(true, false);
73 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 73 gGL.setSceneBlendType(LLRender::BT_ALPHA);
74 74
75 if (shader_level > 0 && fullbright_shader) 75 if (shader_level > 0 && fullbright_shader)
76 { 76 {
@@ -120,7 +120,7 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass)
120 // don't use shaders! 120 // don't use shaders!
121 if (gGLManager.mHasShaderObjects) 121 if (gGLManager.mHasShaderObjects)
122 { 122 {
123 glUseProgramObjectARB(0); 123 LLGLSLShader::bindNoShader();
124 } 124 }
125 } 125 }
126} 126}
@@ -140,7 +140,7 @@ void LLDrawPoolSimple::render(S32 pass)
140{ 140{
141 LLGLDisable blend(GL_BLEND); 141 LLGLDisable blend(GL_BLEND);
142 LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects()); 142 LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects());
143 glAlphaFunc(GL_GREATER, 0.5f); 143 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
144 144
145 { //render simple 145 { //render simple
146 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE); 146 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
@@ -152,7 +152,7 @@ void LLDrawPoolSimple::render(S32 pass)
152 LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS); 152 LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS);
153 LLGLEnable test(GL_ALPHA_TEST); 153 LLGLEnable test(GL_ALPHA_TEST);
154 LLGLEnable blend(GL_BLEND); 154 LLGLEnable blend(GL_BLEND);
155 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 155 gGL.setSceneBlendType(LLRender::BT_ALPHA);
156 //render grass 156 //render grass
157 LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask()); 157 LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
158 } 158 }
@@ -172,6 +172,6 @@ void LLDrawPoolSimple::render(S32 pass)
172 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); 172 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
173 } 173 }
174 174
175 glAlphaFunc(GL_GREATER, 0.01f); 175 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
176} 176}
177 177
diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp
index e06bb6d..8c63b83 100644
--- a/linden/indra/newview/lldrawpoolsky.cpp
+++ b/linden/indra/newview/lldrawpoolsky.cpp
@@ -90,7 +90,7 @@ void LLDrawPoolSky::render(S32 pass)
90 { 90 {
91 // Ironically, we must support shader objects to be 91 // Ironically, we must support shader objects to be
92 // able to use this call. 92 // able to use this call.
93 glUseProgramObjectARB(0); 93 LLGLSLShader::bindNoShader();
94 } 94 }
95 mShader = NULL; 95 mShader = NULL;
96 } 96 }
diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp
index fdb27f9..2cd2fdb 100644
--- a/linden/indra/newview/lldrawpoolterrain.cpp
+++ b/linden/indra/newview/lldrawpoolterrain.cpp
@@ -52,7 +52,7 @@
52#include "llworld.h" 52#include "llworld.h"
53#include "pipeline.h" 53#include "pipeline.h"
54#include "llglslshader.h" 54#include "llglslshader.h"
55#include "llglimmediate.h" 55#include "llrender.h"
56 56
57const F32 DETAIL_SCALE = 1.f/16.f; 57const F32 DETAIL_SCALE = 1.f/16.f;
58int DebugDetailMap = 0; 58int DebugDetailMap = 0;
@@ -69,14 +69,16 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
69 sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); 69 sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
70 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); 70 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
71 mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga", 71 mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga",
72 TRUE, TRUE, GL_ALPHA8, GL_ALPHA, 72 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
73 LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); 73 LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
74
74 mAlphaRampImagep->bind(0); 75 mAlphaRampImagep->bind(0);
75 mAlphaRampImagep->setClamp(TRUE, TRUE); 76 mAlphaRampImagep->setClamp(TRUE, TRUE);
76 77
77 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c", 78 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
78 TRUE, TRUE, GL_ALPHA8, GL_ALPHA, 79 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
79 LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); 80 LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
81
80 m2DAlphaRampImagep->bind(0); 82 m2DAlphaRampImagep->bind(0);
81 m2DAlphaRampImagep->setClamp(TRUE, TRUE); 83 m2DAlphaRampImagep->setClamp(TRUE, TRUE);
82 84
@@ -239,7 +241,7 @@ void LLDrawPoolTerrain::renderFullShader()
239 // 241 //
240 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0); 242 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
241 LLViewerImage::bindTexture(detail_texture0p,detail0); 243 LLViewerImage::bindTexture(detail_texture0p,detail0);
242 glActiveTextureARB(GL_TEXTURE0_ARB); 244 gGL.getTexUnit(0)->activate();
243 245
244 glEnable(GL_TEXTURE_GEN_S); 246 glEnable(GL_TEXTURE_GEN_S);
245 glEnable(GL_TEXTURE_GEN_T); 247 glEnable(GL_TEXTURE_GEN_T);
@@ -259,7 +261,7 @@ void LLDrawPoolTerrain::renderFullShader()
259 LLViewerImage::bindTexture(detail_texture1p,detail1); 261 LLViewerImage::bindTexture(detail_texture1p,detail1);
260 262
261 /// ALPHA TEXTURE COORDS 0: 263 /// ALPHA TEXTURE COORDS 0:
262 glActiveTextureARB(GL_TEXTURE1_ARB); 264 gGL.getTexUnit(1)->activate();
263 glMatrixMode(GL_TEXTURE); 265 glMatrixMode(GL_TEXTURE);
264 glLoadIdentity(); 266 glLoadIdentity();
265 glMatrixMode(GL_MODELVIEW); 267 glMatrixMode(GL_MODELVIEW);
@@ -271,7 +273,7 @@ void LLDrawPoolTerrain::renderFullShader()
271 glEnable(GL_TEXTURE_2D); 273 glEnable(GL_TEXTURE_2D);
272 274
273 /// ALPHA TEXTURE COORDS 1: 275 /// ALPHA TEXTURE COORDS 1:
274 glActiveTextureARB(GL_TEXTURE2_ARB); 276 gGL.getTexUnit(2)->activate();
275 glMatrixMode(GL_TEXTURE); 277 glMatrixMode(GL_TEXTURE);
276 glLoadIdentity(); 278 glLoadIdentity();
277 glTranslatef(-2.f, 0.f, 0.f); 279 glTranslatef(-2.f, 0.f, 0.f);
@@ -284,7 +286,7 @@ void LLDrawPoolTerrain::renderFullShader()
284 LLViewerImage::bindTexture(detail_texture3p,detail3); 286 LLViewerImage::bindTexture(detail_texture3p,detail3);
285 287
286 /// ALPHA TEXTURE COORDS 2: 288 /// ALPHA TEXTURE COORDS 2:
287 glActiveTextureARB(GL_TEXTURE3_ARB); 289 gGL.getTexUnit(3)->activate();
288 glMatrixMode(GL_TEXTURE); 290 glMatrixMode(GL_TEXTURE);
289 glLoadIdentity(); 291 glLoadIdentity();
290 glTranslatef(-1.f, 0.f, 0.f); 292 glTranslatef(-1.f, 0.f, 0.f);
@@ -307,7 +309,7 @@ void LLDrawPoolTerrain::renderFullShader()
307 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3); 309 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
308 310
309 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D); 311 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
310 glActiveTextureARB(GL_TEXTURE4_ARB); 312 gGL.getTexUnit(4)->activate();
311 glDisable(GL_TEXTURE_2D); // Texture unit 4 313 glDisable(GL_TEXTURE_2D); // Texture unit 4
312 glDisable(GL_TEXTURE_GEN_S); 314 glDisable(GL_TEXTURE_GEN_S);
313 glDisable(GL_TEXTURE_GEN_T); 315 glDisable(GL_TEXTURE_GEN_T);
@@ -316,7 +318,7 @@ void LLDrawPoolTerrain::renderFullShader()
316 glMatrixMode(GL_MODELVIEW); 318 glMatrixMode(GL_MODELVIEW);
317 319
318 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D); 320 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
319 glActiveTextureARB(GL_TEXTURE3_ARB); 321 gGL.getTexUnit(3)->activate();
320 glDisable(GL_TEXTURE_2D); 322 glDisable(GL_TEXTURE_2D);
321 glDisable(GL_TEXTURE_GEN_S); 323 glDisable(GL_TEXTURE_GEN_S);
322 glDisable(GL_TEXTURE_GEN_T); 324 glDisable(GL_TEXTURE_GEN_T);
@@ -325,7 +327,7 @@ void LLDrawPoolTerrain::renderFullShader()
325 glMatrixMode(GL_MODELVIEW); 327 glMatrixMode(GL_MODELVIEW);
326 328
327 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D); 329 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
328 glActiveTextureARB(GL_TEXTURE2_ARB); 330 gGL.getTexUnit(2)->activate();
329 glDisable(GL_TEXTURE_2D); 331 glDisable(GL_TEXTURE_2D);
330 glDisable(GL_TEXTURE_GEN_S); 332 glDisable(GL_TEXTURE_GEN_S);
331 glDisable(GL_TEXTURE_GEN_T); 333 glDisable(GL_TEXTURE_GEN_T);
@@ -334,7 +336,7 @@ void LLDrawPoolTerrain::renderFullShader()
334 glMatrixMode(GL_MODELVIEW); 336 glMatrixMode(GL_MODELVIEW);
335 337
336 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D); 338 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
337 glActiveTextureARB(GL_TEXTURE1_ARB); 339 gGL.getTexUnit(1)->activate();
338 glDisable(GL_TEXTURE_2D); 340 glDisable(GL_TEXTURE_2D);
339 glDisable(GL_TEXTURE_GEN_S); 341 glDisable(GL_TEXTURE_GEN_S);
340 glDisable(GL_TEXTURE_GEN_T); 342 glDisable(GL_TEXTURE_GEN_T);
@@ -346,7 +348,7 @@ void LLDrawPoolTerrain::renderFullShader()
346 // Restore Texture Unit 0 defaults 348 // Restore Texture Unit 0 defaults
347 349
348 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D); 350 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
349 glActiveTextureARB(GL_TEXTURE0_ARB); 351 gGL.getTexUnit(0)->activate();
350 glEnable(GL_TEXTURE_2D); 352 glEnable(GL_TEXTURE_2D);
351 glDisable(GL_TEXTURE_GEN_S); 353 glDisable(GL_TEXTURE_GEN_S);
352 glDisable(GL_TEXTURE_GEN_T); 354 glDisable(GL_TEXTURE_GEN_T);
@@ -357,7 +359,7 @@ void LLDrawPoolTerrain::renderFullShader()
357 359
358void LLDrawPoolTerrain::renderFull4TU() 360void LLDrawPoolTerrain::renderFull4TU()
359{ 361{
360 glEnableClientState(GL_VERTEX_ARRAY); 362 glEnableClientState(GL_VERTEX_ARRAY);
361 glEnableClientState(GL_NORMAL_ARRAY); 363 glEnableClientState(GL_NORMAL_ARRAY);
362 364
363 // Hack! Get the region that this draw pool is rendering from! 365 // Hack! Get the region that this draw pool is rendering from!
@@ -377,7 +379,7 @@ void LLDrawPoolTerrain::renderFull4TU()
377 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); 379 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
378 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); 380 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
379 381
380 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); 382 gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
381 383
382 //---------------------------------------------------------------------------- 384 //----------------------------------------------------------------------------
383 // Pass 1/1 385 // Pass 1/1
@@ -385,11 +387,10 @@ void LLDrawPoolTerrain::renderFull4TU()
385 // 387 //
386 // Stage 0: detail texture 0 388 // Stage 0: detail texture 0
387 // 389 //
388 glActiveTextureARB(GL_TEXTURE0_ARB); 390 gGL.getTexUnit(0)->activate();
389 LLViewerImage::bindTexture(detail_texture0p,0); 391 LLViewerImage::bindTexture(detail_texture0p,0);
390 glClientActiveTextureARB(GL_TEXTURE0_ARB); 392 glClientActiveTextureARB(GL_TEXTURE0_ARB);
391 393
392 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
393 glEnable(GL_TEXTURE_GEN_S); 394 glEnable(GL_TEXTURE_GEN_S);
394 glEnable(GL_TEXTURE_GEN_T); 395 glEnable(GL_TEXTURE_GEN_T);
395 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 396 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -398,36 +399,27 @@ void LLDrawPoolTerrain::renderFull4TU()
398 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 399 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
399 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 400 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
400 401
401 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 402 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
402 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
403
404 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
405 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
406 403
407 // 404 //
408 // Stage 1: Generate alpha ramp for detail0/detail1 transition 405 // Stage 1: Generate alpha ramp for detail0/detail1 transition
409 // 406 //
407
410 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 408 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
411 glActiveTextureARB(GL_TEXTURE1_ARB); 409 gGL.getTexUnit(1)->activate();
412 glEnable(GL_TEXTURE_2D); // Texture unit 1 410 glEnable(GL_TEXTURE_2D); // Texture unit 1
413 glClientActiveTextureARB(GL_TEXTURE1_ARB); 411 glClientActiveTextureARB(GL_TEXTURE1_ARB);
414 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 412 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
415 413
416 // Care about alpha only 414 // Care about alpha only
417 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 415 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
418 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 416 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
419 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
420
421 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
422 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
423 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
424 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
425 417
426 // 418 //
427 // Stage 2: Interpolate detail1 with existing based on ramp 419 // Stage 2: Interpolate detail1 with existing based on ramp
428 // 420 //
429 LLViewerImage::bindTexture(detail_texture1p,2); 421 LLViewerImage::bindTexture(detail_texture1p,2);
430 glActiveTextureARB(GL_TEXTURE2_ARB); 422 gGL.getTexUnit(2)->activate();
431 glEnable(GL_TEXTURE_2D); // Texture unit 2 423 glEnable(GL_TEXTURE_2D); // Texture unit 2
432 glClientActiveTextureARB(GL_TEXTURE2_ARB); 424 glClientActiveTextureARB(GL_TEXTURE2_ARB);
433 425
@@ -439,34 +431,22 @@ void LLDrawPoolTerrain::renderFull4TU()
439 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 431 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
440 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 432 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
441 433
442 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 434 gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_TEX_COLOR);
443 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
444
445 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
446 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
447 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
448 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
449 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
450 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
451 435
452 // 436 //
453 // Stage 3: Modulate with primary (vertex) color for lighting 437 // Stage 3: Modulate with primary (vertex) color for lighting
454 // 438 //
455 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture 439 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
456 glActiveTextureARB(GL_TEXTURE3_ARB); 440 gGL.getTexUnit(3)->activate();
457 glEnable(GL_TEXTURE_2D); // Texture unit 3 441 glEnable(GL_TEXTURE_2D); // Texture unit 3
458 glClientActiveTextureARB(GL_TEXTURE3_ARB); 442 glClientActiveTextureARB(GL_TEXTURE3_ARB);
459 443
460 // Set alpha texture and do lighting modulation 444 // Set alpha texture and do lighting modulation
461 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 445 gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
462 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
463 446
464 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); 447 gGL.getTexUnit(0)->activate();
465 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); 448 glClientActiveTextureARB(GL_TEXTURE0_ARB);
466 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
467 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
468 449
469 glActiveTextureARB(GL_TEXTURE0_ARB);
470 // GL_BLEND disabled by default 450 // GL_BLEND disabled by default
471 drawLoop(); 451 drawLoop();
472 452
@@ -475,7 +455,7 @@ void LLDrawPoolTerrain::renderFull4TU()
475 455
476 // Stage 0: Write detail3 into base 456 // Stage 0: Write detail3 into base
477 // 457 //
478 glActiveTextureARB(GL_TEXTURE0_ARB); 458 gGL.getTexUnit(0)->activate();
479 LLViewerImage::bindTexture(detail_texture3p,0); 459 LLViewerImage::bindTexture(detail_texture3p,0);
480 glClientActiveTextureARB(GL_TEXTURE0_ARB); 460 glClientActiveTextureARB(GL_TEXTURE0_ARB);
481 461
@@ -487,18 +467,13 @@ void LLDrawPoolTerrain::renderFull4TU()
487 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 467 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
488 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 468 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
489 469
490 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 470 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
491 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
492
493 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
494 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
495
496 471
497 // 472 //
498 // Stage 1: Generate alpha ramp for detail2/detail3 transition 473 // Stage 1: Generate alpha ramp for detail2/detail3 transition
499 // 474 //
500 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 475 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
501 glActiveTextureARB(GL_TEXTURE1_ARB); 476 gGL.getTexUnit(1)->activate();
502 glEnable(GL_TEXTURE_2D); // Texture unit 1 477 glEnable(GL_TEXTURE_2D); // Texture unit 1
503 glClientActiveTextureARB(GL_TEXTURE1_ARB); 478 glClientActiveTextureARB(GL_TEXTURE1_ARB);
504 479
@@ -510,25 +485,20 @@ void LLDrawPoolTerrain::renderFull4TU()
510 glTranslatef(-2.f, 0.f, 0.f); 485 glTranslatef(-2.f, 0.f, 0.f);
511 486
512 // Care about alpha only 487 // Care about alpha only
513 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 488 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
514 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 489 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
515 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
516
517 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
518 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
519 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
520 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
521 490
522 491
523 // 492 //
524 // Stage 2: Interpolate detail2 with existing based on ramp 493 // Stage 2: Interpolate detail2 with existing based on ramp
525 // 494 //
526 LLViewerImage::bindTexture(detail_texture2p,2); 495 LLViewerImage::bindTexture(detail_texture2p,2);
527 glActiveTextureARB(GL_TEXTURE2_ARB); 496 gGL.getTexUnit(2)->activate();
528 glEnable(GL_TEXTURE_2D); // Texture unit 2 497 glEnable(GL_TEXTURE_2D); // Texture unit 2
529 glClientActiveTextureARB(GL_TEXTURE2_ARB);
530 498
499 glClientActiveTextureARB(GL_TEXTURE2_ARB);
531 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 500 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
501
532 glEnable(GL_TEXTURE_GEN_S); 502 glEnable(GL_TEXTURE_GEN_S);
533 glEnable(GL_TEXTURE_GEN_T); 503 glEnable(GL_TEXTURE_GEN_T);
534 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 504 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -536,26 +506,16 @@ void LLDrawPoolTerrain::renderFull4TU()
536 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 506 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
537 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 507 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
538 508
539 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 509 gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
540 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
541
542 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
543 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
544 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
545 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
546 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
547 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
548
549 510
550 // 511 //
551 // Stage 3: Generate alpha ramp for detail1/detail2 transition 512 // Stage 3: Generate alpha ramp for detail1/detail2 transition
552 // 513 //
553 LLViewerImage::bindTexture(m2DAlphaRampImagep,3); 514 LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
554 glActiveTextureARB(GL_TEXTURE3_ARB); 515 gGL.getTexUnit(3)->activate();
555
556 glEnable(GL_TEXTURE_2D); // Texture unit 3 516 glEnable(GL_TEXTURE_2D); // Texture unit 3
557 glClientActiveTextureARB(GL_TEXTURE3_ARB);
558 517
518 glClientActiveTextureARB(GL_TEXTURE3_ARB);
559 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 519 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
560 520
561 // Set the texture matrix 521 // Set the texture matrix
@@ -564,38 +524,34 @@ void LLDrawPoolTerrain::renderFull4TU()
564 glTranslatef(-1.f, 0.f, 0.f); 524 glTranslatef(-1.f, 0.f, 0.f);
565 525
566 // Set alpha texture and do lighting modulation 526 // Set alpha texture and do lighting modulation
567 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 527 gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
568 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 528 gGL.getTexUnit(3)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
569 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 529
570 530 gGL.getTexUnit(0)->activate();
571 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); 531 glClientActiveTextureARB(GL_TEXTURE0_ARB);
572 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
573 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
574 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
575 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
576 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
577
578 glActiveTextureARB(GL_TEXTURE0_ARB);
579 { 532 {
580 LLGLEnable blend(GL_BLEND); 533 LLGLEnable blend(GL_BLEND);
581 drawLoop(); 534 drawLoop();
582 } 535 }
583 536
537 LLVertexBuffer::unbind();
584 // Disable multitexture 538 // Disable multitexture
585 LLImageGL::unbindTexture(3, GL_TEXTURE_2D); 539 LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
586 glActiveTextureARB(GL_TEXTURE3_ARB); 540 gGL.getTexUnit(3)->activate();
587 glClientActiveTextureARB(GL_TEXTURE3_ARB); 541 glClientActiveTextureARB(GL_TEXTURE3_ARB);
588 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 542 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
589 glDisable(GL_TEXTURE_2D); // Texture unit 3 543 glDisable(GL_TEXTURE_2D); // Texture unit 3
544
590 glMatrixMode(GL_TEXTURE); 545 glMatrixMode(GL_TEXTURE);
591 glLoadIdentity(); 546 glLoadIdentity();
592 glMatrixMode(GL_MODELVIEW); 547 glMatrixMode(GL_MODELVIEW);
593 548
594 LLImageGL::unbindTexture(2, GL_TEXTURE_2D); 549 LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
595 glActiveTextureARB(GL_TEXTURE2_ARB); 550 gGL.getTexUnit(2)->activate();
596 glClientActiveTextureARB(GL_TEXTURE2_ARB); 551 glClientActiveTextureARB(GL_TEXTURE2_ARB);
597 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 552 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
598 glDisable(GL_TEXTURE_2D); // Texture unit 2 553 glDisable(GL_TEXTURE_2D); // Texture unit 2
554
599 glDisable(GL_TEXTURE_GEN_S); 555 glDisable(GL_TEXTURE_GEN_S);
600 glDisable(GL_TEXTURE_GEN_T); 556 glDisable(GL_TEXTURE_GEN_T);
601 glMatrixMode(GL_TEXTURE); 557 glMatrixMode(GL_TEXTURE);
@@ -603,33 +559,34 @@ void LLDrawPoolTerrain::renderFull4TU()
603 glMatrixMode(GL_MODELVIEW); 559 glMatrixMode(GL_MODELVIEW);
604 560
605 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 561 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
606 glActiveTextureARB(GL_TEXTURE1_ARB); 562 gGL.getTexUnit(1)->activate();
607 glClientActiveTextureARB(GL_TEXTURE1_ARB); 563 glClientActiveTextureARB(GL_TEXTURE1_ARB);
608 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 564 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
609 glDisable(GL_TEXTURE_2D); // Texture unit 1 565 glDisable(GL_TEXTURE_2D); // Texture unit 1
566
610 glMatrixMode(GL_TEXTURE); 567 glMatrixMode(GL_TEXTURE);
611 glLoadIdentity(); 568 glLoadIdentity();
612 glMatrixMode(GL_MODELVIEW); 569 glMatrixMode(GL_MODELVIEW);
613 570
614 // Restore blend state 571 // Restore blend state
615 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 572 gGL.setSceneBlendType(LLRender::BT_ALPHA);
616 573
617 //---------------------------------------------------------------------------- 574 //----------------------------------------------------------------------------
618 // Restore Texture Unit 0 defaults 575 // Restore Texture Unit 0 defaults
619 576
620 glActiveTextureARB(GL_TEXTURE0_ARB); 577 gGL.getTexUnit(0)->activate();
621 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 578 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
622 glClientActiveTextureARB(GL_TEXTURE0_ARB); 579 glClientActiveTextureARB(GL_TEXTURE0_ARB);
623 glActiveTextureARB(GL_TEXTURE0_ARB); 580 gGL.getTexUnit(0)->activate();
581 glDisableClientState(GL_NORMAL_ARRAY);
582
624 glDisable(GL_TEXTURE_GEN_S); 583 glDisable(GL_TEXTURE_GEN_S);
625 glDisable(GL_TEXTURE_GEN_T); 584 glDisable(GL_TEXTURE_GEN_T);
626 glMatrixMode(GL_TEXTURE); 585 glMatrixMode(GL_TEXTURE);
627 glLoadIdentity(); 586 glLoadIdentity();
628 glMatrixMode(GL_MODELVIEW); 587 glMatrixMode(GL_MODELVIEW);
629 588
630 // Restore non Texture Unit specific defaults 589 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
631 glDisableClientState(GL_NORMAL_ARRAY);
632 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
633} 590}
634 591
635void LLDrawPoolTerrain::renderFull2TU() 592void LLDrawPoolTerrain::renderFull2TU()
@@ -651,7 +608,7 @@ void LLDrawPoolTerrain::renderFull2TU()
651 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); 608 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
652 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); 609 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
653 610
654 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); 611 gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
655 612
656 //---------------------------------------------------------------------------- 613 //----------------------------------------------------------------------------
657 // Pass 1/4 614 // Pass 1/4
@@ -668,13 +625,7 @@ void LLDrawPoolTerrain::renderFull2TU()
668 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 625 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
669 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 626 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
670 627
671 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 628 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
672 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
673
674 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
675 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
676 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
677 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
678 629
679 drawLoop(); 630 drawLoop();
680 631
@@ -690,22 +641,17 @@ void LLDrawPoolTerrain::renderFull2TU()
690 glDisable(GL_TEXTURE_GEN_T); 641 glDisable(GL_TEXTURE_GEN_T);
691 642
692 // Care about alpha only 643 // Care about alpha only
693 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 644 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
694 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 645 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
695 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
696
697 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
698 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
699 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
700 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
701 646
702 647
703 // 648 //
704 // Stage 1: Write detail1 649 // Stage 1: Write detail1
705 // 650 //
706 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1 651 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
707 glActiveTextureARB(GL_TEXTURE1_ARB); 652 gGL.getTexUnit(1)->activate();
708 glEnable(GL_TEXTURE_2D); // Texture unit 1 653 glEnable(GL_TEXTURE_2D); // Texture unit 1
654
709 glEnable(GL_TEXTURE_GEN_S); 655 glEnable(GL_TEXTURE_GEN_S);
710 glEnable(GL_TEXTURE_GEN_T); 656 glEnable(GL_TEXTURE_GEN_T);
711 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 657 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -713,18 +659,10 @@ void LLDrawPoolTerrain::renderFull2TU()
713 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 659 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
714 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 660 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
715 661
716 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 662 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
717 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 663 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
718 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
719 664
720 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 665 gGL.getTexUnit(0)->activate();
721 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
722 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
723 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
724 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
725 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
726
727 glActiveTextureARB(GL_TEXTURE0_ARB);
728 { 666 {
729 LLGLEnable blend(GL_BLEND); 667 LLGLEnable blend(GL_BLEND);
730 drawLoop(); 668 drawLoop();
@@ -736,26 +674,21 @@ void LLDrawPoolTerrain::renderFull2TU()
736 // Stage 0: Generate alpha ramp for detail1/detail2 transition 674 // Stage 0: Generate alpha ramp for detail1/detail2 transition
737 // 675 //
738 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 676 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
677
739 // Set the texture matrix 678 // Set the texture matrix
740 glMatrixMode(GL_TEXTURE); 679 glMatrixMode(GL_TEXTURE);
741 glLoadIdentity(); 680 glLoadIdentity();
742 glTranslatef(-1.f, 0.f, 0.f); 681 glTranslatef(-1.f, 0.f, 0.f);
743 682
744 // Care about alpha only 683 // Care about alpha only
745 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 684 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
746 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 685 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
747 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
748
749 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
750 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
751 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
752 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
753 686
754 // 687 //
755 // Stage 1: Write detail2 688 // Stage 1: Write detail2
756 // 689 //
757
758 LLViewerImage::bindTexture(detail_texture2p,1); 690 LLViewerImage::bindTexture(detail_texture2p,1);
691 gGL.getTexUnit(1)->activate();
759 glEnable(GL_TEXTURE_2D); // Texture unit 1 692 glEnable(GL_TEXTURE_2D); // Texture unit 1
760 693
761 glEnable(GL_TEXTURE_GEN_S); 694 glEnable(GL_TEXTURE_GEN_S);
@@ -765,16 +698,8 @@ void LLDrawPoolTerrain::renderFull2TU()
765 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 698 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
766 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 699 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
767 700
768 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 701 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
769 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 702 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
770 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
771
772 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
773 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
774 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
775 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
776 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
777 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
778 703
779 { 704 {
780 LLGLEnable blend(GL_BLEND); 705 LLGLEnable blend(GL_BLEND);
@@ -787,27 +712,22 @@ void LLDrawPoolTerrain::renderFull2TU()
787 // 712 //
788 // Stage 0: Generate alpha ramp for detail2/detail3 transition 713 // Stage 0: Generate alpha ramp for detail2/detail3 transition
789 // 714 //
790 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 715 gGL.getTexUnit(0)->activate();
716 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
791 // Set the texture matrix 717 // Set the texture matrix
792 glMatrixMode(GL_TEXTURE); 718 glMatrixMode(GL_TEXTURE);
793 glLoadIdentity(); 719 glLoadIdentity();
794 glTranslatef(-2.f, 0.f, 0.f); 720 glTranslatef(-2.f, 0.f, 0.f);
795 721
796 // Care about alpha only 722 // Care about alpha only
797 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 723 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
798 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 724 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
799 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
800
801 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
802 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
803 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
804 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
805 725
806 // Stage 1: Write detail3 726 // Stage 1: Write detail3
807
808 LLViewerImage::bindTexture(detail_texture3p,1); 727 LLViewerImage::bindTexture(detail_texture3p,1);
809 glActiveTextureARB(GL_TEXTURE1_ARB); 728 gGL.getTexUnit(1)->activate();
810 glEnable(GL_TEXTURE_2D); // Texture unit 1 729 glEnable(GL_TEXTURE_2D); // Texture unit 1
730
811 glEnable(GL_TEXTURE_GEN_S); 731 glEnable(GL_TEXTURE_GEN_S);
812 glEnable(GL_TEXTURE_GEN_T); 732 glEnable(GL_TEXTURE_GEN_T);
813 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 733 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -815,30 +735,24 @@ void LLDrawPoolTerrain::renderFull2TU()
815 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 735 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
816 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 736 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
817 737
818 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 738 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
819 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 739 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
820 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
821 740
822 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 741 gGL.getTexUnit(0)->activate();
823 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
824 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
825 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
826 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
827 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
828
829 glActiveTextureARB(GL_TEXTURE0_ARB);
830 { 742 {
831 LLGLEnable blend(GL_BLEND); 743 LLGLEnable blend(GL_BLEND);
832 drawLoop(); 744 drawLoop();
833 } 745 }
834 746
835 // Restore blend state 747 // Restore blend state
836 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 748 gGL.setSceneBlendType(LLRender::BT_ALPHA);
837 749
838 // Disable multitexture 750 // Disable multitexture
751
839 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 752 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
840 glActiveTextureARB(GL_TEXTURE1_ARB); 753 gGL.getTexUnit(1)->activate();
841 glDisable(GL_TEXTURE_2D); // Texture unit 1 754 glDisable(GL_TEXTURE_2D); // Texture unit 1
755
842 glDisable(GL_TEXTURE_GEN_S); 756 glDisable(GL_TEXTURE_GEN_S);
843 glDisable(GL_TEXTURE_GEN_T); 757 glDisable(GL_TEXTURE_GEN_T);
844 glMatrixMode(GL_TEXTURE); 758 glMatrixMode(GL_TEXTURE);
@@ -848,18 +762,16 @@ void LLDrawPoolTerrain::renderFull2TU()
848 //---------------------------------------------------------------------------- 762 //----------------------------------------------------------------------------
849 // Restore Texture Unit 0 defaults 763 // Restore Texture Unit 0 defaults
850 764
851 glActiveTextureARB(GL_TEXTURE0_ARB); 765 gGL.getTexUnit(0)->activate();
852 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 766 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
853 767
854 glActiveTextureARB(GL_TEXTURE0_ARB); 768 gGL.getTexUnit(0)->activate();
855 glDisable(GL_TEXTURE_GEN_S); 769 glDisable(GL_TEXTURE_GEN_S);
856 glDisable(GL_TEXTURE_GEN_T); 770 glDisable(GL_TEXTURE_GEN_T);
857 glMatrixMode(GL_TEXTURE); 771 glMatrixMode(GL_TEXTURE);
858 glLoadIdentity(); 772 glLoadIdentity();
859 glMatrixMode(GL_MODELVIEW); 773 glMatrixMode(GL_MODELVIEW);
860 774 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
861 // Restore non Texture Unit specific defaults
862 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
863} 775}
864 776
865 777
@@ -874,7 +786,7 @@ void LLDrawPoolTerrain::renderSimple()
874 mTexturep->addTextureStats(1024.f*1024.f); 786 mTexturep->addTextureStats(1024.f*1024.f);
875 mTexturep->bind(0); 787 mTexturep->bind(0);
876 788
877 glActiveTextureARB(GL_TEXTURE0_ARB); 789 gGL.getTexUnit(0)->activate();
878 glEnable(GL_TEXTURE_2D); // Texture unit 2 790 glEnable(GL_TEXTURE_2D); // Texture unit 2
879 791
880 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent(); 792 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
@@ -889,13 +801,7 @@ void LLDrawPoolTerrain::renderSimple()
889 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 801 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
890 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 802 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
891 803
892 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 804 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
893 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
894
895 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
896 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
897 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
898 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
899 805
900 drawLoop(); 806 drawLoop();
901 807
@@ -903,15 +809,13 @@ void LLDrawPoolTerrain::renderSimple()
903 // Restore Texture Unit 0 defaults 809 // Restore Texture Unit 0 defaults
904 810
905 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 811 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
906 glActiveTextureARB(GL_TEXTURE0_ARB); 812 gGL.getTexUnit(0)->activate();
907 glDisable(GL_TEXTURE_GEN_S); 813 glDisable(GL_TEXTURE_GEN_S);
908 glDisable(GL_TEXTURE_GEN_T); 814 glDisable(GL_TEXTURE_GEN_T);
909 glMatrixMode(GL_TEXTURE); 815 glMatrixMode(GL_TEXTURE);
910 glLoadIdentity(); 816 glLoadIdentity();
911 glMatrixMode(GL_MODELVIEW); 817 glMatrixMode(GL_MODELVIEW);
912 818 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
913 // Restore non Texture Unit specific defaults
914 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
915} 819}
916 820
917//============================================================================ 821//============================================================================
diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp
index fd0a83c..285b313 100644
--- a/linden/indra/newview/lldrawpooltree.cpp
+++ b/linden/indra/newview/lldrawpooltree.cpp
@@ -41,7 +41,7 @@
41#include "pipeline.h" 41#include "pipeline.h"
42#include "llviewercamera.h" 42#include "llviewercamera.h"
43#include "llglslshader.h" 43#include "llglslshader.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46S32 LLDrawPoolTree::sDiffTex = 0; 46S32 LLDrawPoolTree::sDiffTex = 0;
47static LLGLSLShader* shader = NULL; 47static LLGLSLShader* shader = NULL;
@@ -67,7 +67,7 @@ void LLDrawPoolTree::prerender()
67void LLDrawPoolTree::beginRenderPass(S32 pass) 67void LLDrawPoolTree::beginRenderPass(S32 pass)
68{ 68{
69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
70 glAlphaFunc(GL_GREATER, 0.5f); 70 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
71 71
72 if (LLPipeline::sUnderWaterRender) 72 if (LLPipeline::sUnderWaterRender)
73 { 73 {
@@ -106,7 +106,7 @@ void LLDrawPoolTree::render(S32 pass)
106void LLDrawPoolTree::endRenderPass(S32 pass) 106void LLDrawPoolTree::endRenderPass(S32 pass)
107{ 107{
108 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 108 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
109 glAlphaFunc(GL_GREATER, 0.01f); 109 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
110 110
111 if (gPipeline.canUseWindLightShadersOnObjects()) 111 if (gPipeline.canUseWindLightShadersOnObjects())
112 { 112 {
@@ -125,28 +125,18 @@ void LLDrawPoolTree::renderForSelect()
125 125
126 LLGLSObjectSelectAlpha gls_alpha; 126 LLGLSObjectSelectAlpha gls_alpha;
127 127
128 gGL.blendFunc(GL_ONE, GL_ZERO); 128 gGL.setSceneBlendType(LLRender::BT_REPLACE);
129 glAlphaFunc(GL_GREATER, 0.5f); 129 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
130 130
131 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 131 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
132 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 132 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
133 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
134
135 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
136 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
137
138 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
139 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
140
141 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
142 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
143 133
144 renderTree(TRUE); 134 renderTree(TRUE);
145 135
146 glAlphaFunc(GL_GREATER, 0.01f); 136 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
147 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 137 gGL.setSceneBlendType(LLRender::BT_ALPHA);
148 138
149 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 139 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
150} 140}
151 141
152void LLDrawPoolTree::renderTree(BOOL selecting) 142void LLDrawPoolTree::renderTree(BOOL selecting)
diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp
index 231d0e1..3a98235 100644
--- a/linden/indra/newview/lldrawpoolwater.cpp
+++ b/linden/indra/newview/lldrawpoolwater.cpp
@@ -37,6 +37,7 @@
37#include "lldir.h" 37#include "lldir.h"
38#include "llerror.h" 38#include "llerror.h"
39#include "m3math.h" 39#include "m3math.h"
40#include "llrender.h"
40 41
41#include "llagent.h" // for gAgent for getRegion for getWaterHeight 42#include "llagent.h" // for gAgent for getRegion for getWaterHeight
42#include "llcubemap.h" 43#include "llcubemap.h"
@@ -166,7 +167,7 @@ void LLDrawPoolWater::render(S32 pass)
166 // Set up second pass first 167 // Set up second pass first
167 mWaterImagep->addTextureStats(1024.f*1024.f); 168 mWaterImagep->addTextureStats(1024.f*1024.f);
168 mWaterImagep->bind(1); 169 mWaterImagep->bind(1);
169 glActiveTextureARB(GL_TEXTURE1_ARB); 170 gGL.getTexUnit(1)->activate();
170 171
171 glEnable(GL_TEXTURE_2D); // Texture unit 1 172 glEnable(GL_TEXTURE_2D); // Texture unit 1
172 173
@@ -198,18 +199,10 @@ void LLDrawPoolWater::render(S32 pass)
198 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0); 199 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
199 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1); 200 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
200 201
201 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 202 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
202 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 203 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
203 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
204 204
205 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); 205 gGL.getTexUnit(0)->activate();
206 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
207 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
208 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
209 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
210 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
211
212 glActiveTextureARB(GL_TEXTURE0_ARB);
213 206
214 glClearStencil(1); 207 glClearStencil(1);
215 glClear(GL_STENCIL_BUFFER_BIT); 208 glClear(GL_STENCIL_BUFFER_BIT);
@@ -230,14 +223,14 @@ void LLDrawPoolWater::render(S32 pass)
230 } 223 }
231 224
232 // Now, disable texture coord generation on texture state 1 225 // Now, disable texture coord generation on texture state 1
233 glActiveTextureARB(GL_TEXTURE1_ARB); 226 gGL.getTexUnit(1)->activate();
234 glDisable(GL_TEXTURE_2D); // Texture unit 1 227 glDisable(GL_TEXTURE_2D); // Texture unit 1
235 glDisable(GL_TEXTURE_GEN_S); //texture unit 1 228 glDisable(GL_TEXTURE_GEN_S); //texture unit 1
236 glDisable(GL_TEXTURE_GEN_T); //texture unit 1 229 glDisable(GL_TEXTURE_GEN_T); //texture unit 1
237 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 230 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
238 231
239 // Disable texture coordinate and color arrays 232 // Disable texture coordinate and color arrays
240 glActiveTextureARB(GL_TEXTURE0_ARB); 233 gGL.getTexUnit(0)->activate();
241 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 234 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
242 235
243 stop_glerror(); 236 stop_glerror();
@@ -258,7 +251,7 @@ void LLDrawPoolWater::render(S32 pass)
258 glMatrixMode(GL_MODELVIEW); 251 glMatrixMode(GL_MODELVIEW);
259 LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot); 252 LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot);
260 253
261 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 254 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
262 255
263 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); 256 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
264 iter != mDrawFace.end(); iter++) 257 iter != mDrawFace.end(); iter++)
@@ -276,7 +269,7 @@ void LLDrawPoolWater::render(S32 pass)
276 } 269 }
277 } 270 }
278 271
279 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 272 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
280 273
281 if (gSky.mVOSkyp->getCubeMap()) 274 if (gSky.mVOSkyp->getCubeMap())
282 { 275 {
@@ -298,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass)
298 renderReflection(refl_face); 291 renderReflection(refl_face);
299 } 292 }
300 293
301 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 294 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
302} 295}
303 296
304void LLDrawPoolWater::renderReflection(LLFace* face) 297void LLDrawPoolWater::renderReflection(LLFace* face)
@@ -331,7 +324,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
331 324
332void LLDrawPoolWater::shade() 325void LLDrawPoolWater::shade()
333{ 326{
334 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 327 gGL.setColorMask(true, true);
335 328
336 LLVOSky *voskyp = gSky.mVOSkyp; 329 LLVOSky *voskyp = gSky.mVOSkyp;
337 330
@@ -396,9 +389,9 @@ void LLDrawPoolWater::shade()
396 389
397 if (reftex > -1) 390 if (reftex > -1)
398 { 391 {
399 glActiveTextureARB(GL_TEXTURE0_ARB+reftex); 392 gGL.getTexUnit(reftex)->activate();
400 gPipeline.mWaterRef.bindTexture(); 393 gPipeline.mWaterRef.bindTexture();
401 glActiveTextureARB(GL_TEXTURE0_ARB); 394 gGL.getTexUnit(0)->activate();
402 } 395 }
403 396
404 //bind normal map 397 //bind normal map
@@ -414,14 +407,8 @@ void LLDrawPoolWater::shade()
414 407
415 mWaterNormp->addTextureStats(1024.f*1024.f); 408 mWaterNormp->addTextureStats(1024.f*1024.f);
416 mWaterNormp->bind(bumpTex); 409 mWaterNormp->bind(bumpTex);
417 if (!gSavedSettings.getBOOL("RenderWaterMipNormal")) 410 mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(),
418 { 411 !gSavedSettings.getBOOL("RenderWaterMipNormal"));
419 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
420 }
421 else
422 {
423 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
424 }
425 412
426 S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX); 413 S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX);
427 stop_glerror(); 414 stop_glerror();
@@ -548,9 +535,9 @@ void LLDrawPoolWater::shade()
548 shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH); 535 shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH);
549 shader->unbind(); 536 shader->unbind();
550 537
551 glActiveTextureARB(GL_TEXTURE0_ARB); 538 gGL.getTexUnit(0)->activate();
552 glEnable(GL_TEXTURE_2D); 539 glEnable(GL_TEXTURE_2D);
553 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 540 gGL.setColorMask(true, false);
554 541
555} 542}
556 543
diff --git a/linden/indra/newview/lldrawpoolwlsky.cpp b/linden/indra/newview/lldrawpoolwlsky.cpp
index e10cd0a..01e1af0 100644
--- a/linden/indra/newview/lldrawpoolwlsky.cpp
+++ b/linden/indra/newview/lldrawpoolwlsky.cpp
@@ -44,7 +44,7 @@
44#include "llagent.h" 44#include "llagent.h"
45#include "llviewerregion.h" 45#include "llviewerregion.h"
46#include "llface.h" 46#include "llface.h"
47#include "llglimmediate.h" 47#include "llrender.h"
48 48
49LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL; 49LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL;
50 50
@@ -153,7 +153,7 @@ void LLDrawPoolWLSky::renderStars(void) const
153{ 153{
154 LLGLSPipelineSkyBox gls_sky; 154 LLGLSPipelineSkyBox gls_sky;
155 LLGLEnable blend(GL_BLEND); 155 LLGLEnable blend(GL_BLEND);
156 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 156 gGL.setSceneBlendType(LLRender::BT_ALPHA);
157 157
158 // *NOTE: have to have bound the cloud noise texture already since register 158 // *NOTE: have to have bound the cloud noise texture already since register
159 // combiners blending below requires something to be bound 159 // combiners blending below requires something to be bound
@@ -176,16 +176,8 @@ void LLDrawPoolWLSky::renderStars(void) const
176 176
177 // gl_FragColor.rgb = gl_Color.rgb; 177 // gl_FragColor.rgb = gl_Color.rgb;
178 // gl_FragColor.a = gl_Color.a * star_alpha.a; 178 // gl_FragColor.a = gl_Color.a * star_alpha.a;
179 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 179 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
180 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 180 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_PREV_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
181 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
182 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
183 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
184 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
185 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
186 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_CONSTANT);
187 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
188 glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 2.0f);
189 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV); 181 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
190 182
191 gSky.mVOWLSkyp->drawStars(); 183 gSky.mVOWLSkyp->drawStars();
@@ -193,8 +185,7 @@ void LLDrawPoolWLSky::renderStars(void) const
193 glPointSize(1.f); 185 glPointSize(1.f);
194 186
195 // and disable the combiner states 187 // and disable the combiner states
196 glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0f); 188 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
197 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
198} 189}
199 190
200void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const 191void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
@@ -208,7 +199,7 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
208 199
209 LLGLEnable blend(GL_BLEND); 200 LLGLEnable blend(GL_BLEND);
210 LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 201 LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
211 glAlphaFunc(GL_GREATER, 0.01f); 202 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
212 203
213 sCloudNoiseTexture->bind(); 204 sCloudNoiseTexture->bind();
214 shader->bind(); 205 shader->bind();
diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp
index ce7f1ec..f77187d 100644
--- a/linden/indra/newview/lldynamictexture.cpp
+++ b/linden/indra/newview/lldynamictexture.cpp
@@ -40,7 +40,7 @@
40#include "llviewerimage.h" 40#include "llviewerimage.h"
41#include "llvertexbuffer.h" 41#include "llvertexbuffer.h"
42#include "llviewerdisplay.h" 42#include "llviewerdisplay.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44 44
45void render_ui_and_swap_if_needed(); 45void render_ui_and_swap_if_needed();
46 46
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 4a5e532..3e0c5b2 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -42,7 +42,7 @@
42 42
43#include "lldrawpoolbump.h" 43#include "lldrawpoolbump.h"
44#include "llgl.h" 44#include "llgl.h"
45#include "llglimmediate.h" 45#include "llrender.h"
46#include "lllightconstants.h" 46#include "lllightconstants.h"
47#include "llsky.h" 47#include "llsky.h"
48#include "llviewercamera.h" 48#include "llviewercamera.h"
@@ -468,6 +468,7 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
468 if (pass == 0) 468 if (pass == 0)
469 { 469 {
470 LLViewerImage::bindTexture(red_blue_imagep); 470 LLViewerImage::bindTexture(red_blue_imagep);
471 red_blue_imagep->setMipFilterNearest (TRUE, TRUE);
471 } 472 }
472 else // pass == 1 473 else // pass == 1
473 { 474 {
@@ -476,9 +477,8 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
476 glMatrixMode(GL_TEXTURE); 477 glMatrixMode(GL_TEXTURE);
477 glPushMatrix(); 478 glPushMatrix();
478 glScalef(256.f, 256.f, 1.f); 479 glScalef(256.f, 256.f, 1.f);
480 green_imagep->setMipFilterNearest (TRUE, TRUE);
479 } 481 }
480 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
481 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
482 482
483 483
484 if (!isState(GLOBAL)) 484 if (!isState(GLOBAL))
diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h
index f04d221..533851c 100644
--- a/linden/indra/newview/llface.h
+++ b/linden/indra/newview/llface.h
@@ -34,6 +34,7 @@
34 34
35#include "llstrider.h" 35#include "llstrider.h"
36 36
37#include "llrender.h"
37#include "v2math.h" 38#include "v2math.h"
38#include "v3math.h" 39#include "v3math.h"
39#include "v4math.h" 40#include "v4math.h"
diff --git a/linden/indra/newview/llfasttimerview.cpp b/linden/indra/newview/llfasttimerview.cpp
index 047016f..d594dc5 100644
--- a/linden/indra/newview/llfasttimerview.cpp
+++ b/linden/indra/newview/llfasttimerview.cpp
@@ -37,7 +37,7 @@
37#include "llrect.h" 37#include "llrect.h"
38#include "llerror.h" 38#include "llerror.h"
39#include "llgl.h" 39#include "llgl.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "llfontgl.h" 42#include "llfontgl.h"
43 43
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp
index 9f79c18..69e7bcc 100644
--- a/linden/indra/newview/llfeaturemanager.cpp
+++ b/linden/indra/newview/llfeaturemanager.cpp
@@ -95,7 +95,7 @@ void LLFeatureList::addFeature(const char *name, const BOOL available, const F32
95{ 95{
96 if (mFeatures.count(name)) 96 if (mFeatures.count(name))
97 { 97 {
98 llwarns << "LLFeatureList::Attempting to add preexisting feature " << name << llendl; 98 LL_WARNS("RenderInit") << "LLFeatureList::Attempting to add preexisting feature " << name << LL_ENDL;
99 } 99 }
100 100
101 LLFeatureInfo fi(name, available, level); 101 LLFeatureInfo fi(name, available, level);
@@ -109,7 +109,7 @@ BOOL LLFeatureList::isFeatureAvailable(const char *name)
109 return mFeatures[name].mAvailable; 109 return mFeatures[name].mAvailable;
110 } 110 }
111 111
112 llwarns << "Feature " << name << " not on feature list!" << llendl; 112 LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
113 113
114 // changing this to TRUE so you have to explicitly disable 114 // changing this to TRUE so you have to explicitly disable
115 // something for it to be disabled 115 // something for it to be disabled
@@ -123,7 +123,7 @@ F32 LLFeatureList::getRecommendedValue(const char *name)
123 return mFeatures[name].mRecommendedLevel; 123 return mFeatures[name].mRecommendedLevel;
124 } 124 }
125 125
126 llwarns << "Feature " << name << " not on feature list or not available!" << llendl; 126 LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
127 return 0; 127 return 0;
128} 128}
129 129
@@ -146,46 +146,46 @@ BOOL LLFeatureList::maskList(LLFeatureList &mask)
146 // 146 //
147 if (!mFeatures.count(mask_fi.mName)) 147 if (!mFeatures.count(mask_fi.mName))
148 { 148 {
149 llwarns << "Feature " << mask_fi.mName << " in mask not in top level!" << llendl; 149 LL_WARNS("RenderInit") << "Feature " << mask_fi.mName << " in mask not in top level!" << LL_ENDL;
150 continue; 150 continue;
151 } 151 }
152 152
153 LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName]; 153 LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName];
154 if (mask_fi.mAvailable && !cur_fi.mAvailable) 154 if (mask_fi.mAvailable && !cur_fi.mAvailable)
155 { 155 {
156 llwarns << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << llendl; 156 LL_WARNS("RenderInit") << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << LL_ENDL;
157 continue; 157 continue;
158 } 158 }
159 cur_fi.mAvailable = mask_fi.mAvailable; 159 cur_fi.mAvailable = mask_fi.mAvailable;
160 cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel); 160 cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel);
161#ifndef LL_RELEASE_FOR_DOWNLOAD 161 LL_DEBUGS("RenderInit") << "Feature mask " << mask.mName
162 llinfos << "Feature mask " << mask.mName
163 << " Feature " << mask_fi.mName 162 << " Feature " << mask_fi.mName
164 << " Mask: " << mask_fi.mRecommendedLevel 163 << " Mask: " << mask_fi.mRecommendedLevel
165 << " Now: " << cur_fi.mRecommendedLevel << llendl; 164 << " Now: " << cur_fi.mRecommendedLevel << LL_ENDL;
166#endif
167 } 165 }
168 166
169#if 0 && !LL_RELEASE_FOR_DOWNLOAD 167 LL_DEBUGS("RenderInit") << "After applying mask " << mask.mName << std::endl;
170 llinfos << "After applying mask " << mask.mName << llendl; 168 // Will conditionally call dump only if the above message will be logged, thanks
171 dump(); 169 // to it being wrapped by the LL_DEBUGS and LL_ENDL macros.
172#endif 170 dump();
171 LL_CONT << LL_ENDL;
172
173 return TRUE; 173 return TRUE;
174} 174}
175 175
176void LLFeatureList::dump() 176void LLFeatureList::dump()
177{ 177{
178 llinfos << "Feature list: " << mName << llendl; 178 LL_DEBUGS("RenderInit") << "Feature list: " << mName << LL_ENDL;
179 llinfos << "--------------" << llendl; 179 LL_DEBUGS("RenderInit") << "--------------" << LL_ENDL;
180 180
181 LLFeatureInfo fi; 181 LLFeatureInfo fi;
182 feature_map_t::iterator feature_it; 182 feature_map_t::iterator feature_it;
183 for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it) 183 for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it)
184 { 184 {
185 fi = feature_it->second; 185 fi = feature_it->second;
186 llinfos << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << llendl; 186 LL_DEBUGS("RenderInit") << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << LL_ENDL;
187 } 187 }
188 llinfos << llendl; 188 LL_DEBUGS("RenderInit") << LL_ENDL;
189} 189}
190 190
191LLFeatureList *LLFeatureManager::findMask(const char *name) 191LLFeatureList *LLFeatureManager::findMask(const char *name)
@@ -203,10 +203,10 @@ BOOL LLFeatureManager::maskFeatures(const char *name)
203 LLFeatureList *maskp = findMask(name); 203 LLFeatureList *maskp = findMask(name);
204 if (!maskp) 204 if (!maskp)
205 { 205 {
206// llwarns << "Unknown feature mask " << name << llendl; 206 LL_DEBUGS("RenderInit") << "Unknown feature mask " << name << LL_ENDL;
207 return FALSE; 207 return FALSE;
208 } 208 }
209 llinfos << "Applying Feature Mask: " << name << llendl; 209 LL_DEBUGS("RenderInit") << "Applying Feature Mask: " << name << LL_ENDL;
210 return maskList(*maskp); 210 return maskList(*maskp);
211} 211}
212 212
@@ -236,7 +236,7 @@ BOOL LLFeatureManager::loadFeatureTables()
236 236
237 if (!file) 237 if (!file)
238 { 238 {
239 llwarns << "Unable to open feature table!" << llendl; 239 LL_WARNS("RenderInit") << "Unable to open feature table!" << LL_ENDL;
240 return FALSE; 240 return FALSE;
241 } 241 }
242 242
@@ -245,7 +245,7 @@ BOOL LLFeatureManager::loadFeatureTables()
245 file >> version; 245 file >> version;
246 if (strcmp(name, "version")) 246 if (strcmp(name, "version"))
247 { 247 {
248 llwarns << data_path << " does not appear to be a valid feature table!" << llendl; 248 LL_WARNS("RenderInit") << data_path << " does not appear to be a valid feature table!" << LL_ENDL;
249 return FALSE; 249 return FALSE;
250 } 250 }
251 251
@@ -285,7 +285,7 @@ BOOL LLFeatureManager::loadFeatureTables()
285 file >> name; 285 file >> name;
286 if (mMaskList.count(name)) 286 if (mMaskList.count(name))
287 { 287 {
288 llerrs << "Overriding mask " << name << ", this is invalid!" << llendl; 288 LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
289 } 289 }
290 290
291 flp = new LLFeatureList(name); 291 flp = new LLFeatureList(name);
@@ -295,7 +295,7 @@ BOOL LLFeatureManager::loadFeatureTables()
295 { 295 {
296 if (!flp) 296 if (!flp)
297 { 297 {
298 llerrs << "Specified parameter before <list> keyword!" << llendl; 298 LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
299 } 299 }
300 S32 available; 300 S32 available;
301 F32 recommended; 301 F32 recommended;
@@ -327,7 +327,7 @@ void LLFeatureManager::loadGPUClass()
327 327
328 if (!file) 328 if (!file)
329 { 329 {
330 llwarns << "Unable to open GPU table: " << data_path << "!" << llendl; 330 LL_WARNS("RenderInit") << "Unable to open GPU table: " << data_path << "!" << LL_ENDL;
331 return; 331 return;
332 } 332 }
333 333
@@ -398,7 +398,7 @@ void LLFeatureManager::loadGPUClass()
398 { 398 {
399 // if we found it, stop! 399 // if we found it, stop!
400 file.close(); 400 file.close();
401 llinfos << "GPU is " << label << llendl; 401 LL_INFOS("RenderInit") << "GPU is " << label << llendl;
402 mGPUString = label; 402 mGPUString = label;
403 mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10); 403 mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10);
404 mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10); 404 mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10);
@@ -408,7 +408,7 @@ void LLFeatureManager::loadGPUClass()
408 } 408 }
409 file.close(); 409 file.close();
410 410
411 llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl; 411 LL_WARNS("RenderInit") << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << LL_ENDL;
412} 412}
413 413
414void LLFeatureManager::cleanupFeatureTables() 414void LLFeatureManager::cleanupFeatureTables()
@@ -546,7 +546,7 @@ void LLFeatureManager::applyBaseMasks()
546 LLFeatureList* maskp = findMask("all"); 546 LLFeatureList* maskp = findMask("all");
547 if(maskp == NULL) 547 if(maskp == NULL)
548 { 548 {
549 llwarns << "AHH! No \"all\" in feature table!" << llendl; 549 LL_WARNS("RenderInit") << "AHH! No \"all\" in feature table!" << LL_ENDL;
550 return; 550 return;
551 } 551 }
552 552
@@ -563,12 +563,12 @@ void LLFeatureManager::applyBaseMasks()
563 "Class3" 563 "Class3"
564 }; 564 };
565 565
566 llinfos << "Setting GPU Class to " << class_table[mGPUClass] << llendl; 566 LL_INFOS("RenderInit") << "Setting GPU Class to " << class_table[mGPUClass] << LL_ENDL;
567 maskFeatures(class_table[mGPUClass]); 567 maskFeatures(class_table[mGPUClass]);
568 } 568 }
569 else 569 else
570 { 570 {
571 llinfos << "Setting GPU Class to Unknown" << llendl; 571 LL_INFOS("RenderInit") << "Setting GPU Class to Unknown" << LL_ENDL;
572 maskFeatures("Unknown"); 572 maskFeatures("Unknown");
573 } 573 }
574 574
diff --git a/linden/indra/newview/llfeaturemanager.h b/linden/indra/newview/llfeaturemanager.h
index b45046b..79ea958 100644
--- a/linden/indra/newview/llfeaturemanager.h
+++ b/linden/indra/newview/llfeaturemanager.h
@@ -76,7 +76,7 @@ public:
76 void setFeatureAvailable(const char *name, const BOOL available); 76 void setFeatureAvailable(const char *name, const BOOL available);
77 void setRecommendedLevel(const char *name, const F32 level); 77 void setRecommendedLevel(const char *name, const F32 level);
78 78
79 BOOL loadFeatureList(FILE *fp); 79 BOOL loadFeatureList(LLFILE *fp);
80 80
81 BOOL maskList(LLFeatureList &mask); 81 BOOL maskList(LLFeatureList &mask);
82 82
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 890cfd2..82729e9 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -46,7 +46,7 @@
46#include "llcombobox.h" 46#include "llcombobox.h"
47#include "lldrawable.h" 47#include "lldrawable.h"
48#include "lldrawpoolavatar.h" 48#include "lldrawpoolavatar.h"
49#include "llglimmediate.h" 49#include "llrender.h"
50#include "llface.h" 50#include "llface.h"
51#include "llkeyframemotion.h" 51#include "llkeyframemotion.h"
52#include "lllineeditor.h" 52#include "lllineeditor.h"
@@ -1135,6 +1135,7 @@ BOOL LLPreviewAnimation::render()
1135 if (avatarp->mDrawable.notNull()) 1135 if (avatarp->mDrawable.notNull())
1136 { 1136 {
1137 LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); 1137 LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool();
1138 avatarp->dirtyMesh();
1138 avatarPoolp->renderAvatars(avatarp); // renders only one avatar 1139 avatarPoolp->renderAvatars(avatarp); // renders only one avatar
1139 } 1140 }
1140 1141
diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp
index 7affff6..4a40abb 100644
--- a/linden/indra/newview/llfloaterauction.cpp
+++ b/linden/indra/newview/llfloaterauction.cpp
@@ -53,7 +53,7 @@
53#include "llviewerdisplay.h" 53#include "llviewerdisplay.h"
54#include "llviewercontrol.h" 54#include "llviewercontrol.h"
55#include "llui.h" 55#include "llui.h"
56#include "llglimmediate.h" 56#include "llrender.h"
57 57
58///---------------------------------------------------------------------------- 58///----------------------------------------------------------------------------
59/// Local function declarations, constants, enums, and typedefs 59/// Local function declarations, constants, enums, and typedefs
@@ -186,7 +186,10 @@ void LLFloaterAuction::onClickSnapshot(void* data)
186 self->mTransactionID.generate(); 186 self->mTransactionID.generate();
187 self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID()); 187 self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID());
188 188
189 gViewerWindow->playSnapshotAnimAndSound(); 189 if(!gSavedSettings.getBOOL("QuietSnapshotsToDisk"))
190 {
191 gViewerWindow->playSnapshotAnimAndSound();
192 }
190 llinfos << "Writing TGA..." << llendl; 193 llinfos << "Writing TGA..." << llendl;
191 194
192 LLPointer<LLImageTGA> tga = new LLImageTGA; 195 LLPointer<LLImageTGA> tga = new LLImageTGA;
diff --git a/linden/indra/newview/llfloaterbuyland.cpp b/linden/indra/newview/llfloaterbuyland.cpp
index ee78eaa..b596339 100644
--- a/linden/indra/newview/llfloaterbuyland.cpp
+++ b/linden/indra/newview/llfloaterbuyland.cpp
@@ -62,7 +62,7 @@
62#include "llwindow.h" 62#include "llwindow.h"
63#include "llworld.h" 63#include "llworld.h"
64#include "llxmlrpctransaction.h" 64#include "llxmlrpctransaction.h"
65#include "llappviewer.h" 65#include "llviewernetwork.h"
66#include "roles_constants.h" 66#include "roles_constants.h"
67 67
68// NOTE: This is duplicated in lldatamoney.cpp ... 68// NOTE: This is duplicated in lldatamoney.cpp ...
@@ -841,7 +841,7 @@ void LLFloaterBuyLandUI::startTransaction(TransactionType type,
841 static std::string transaction_uri; 841 static std::string transaction_uri;
842 if (transaction_uri.empty()) 842 if (transaction_uri.empty())
843 { 843 {
844 transaction_uri = LLAppViewer::instance()->getHelperURI() + "landtool.php"; 844 transaction_uri = LLViewerLogin::getInstance()->getHelperURI() + "landtool.php";
845 } 845 }
846 846
847 const char* method; 847 const char* method;
@@ -1363,3 +1363,4 @@ void LLFloaterBuyLandUI::onClickErrorWeb(void* data)
1363} 1363}
1364 1364
1365 1365
1366
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 0394cd1..d05b231 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -72,6 +72,7 @@
72#include "lltexteditor.h" 72#include "lltexteditor.h"
73#include "llfloaterhtml.h" 73#include "llfloaterhtml.h"
74#include "llweb.h" 74#include "llweb.h"
75#include "llstylemap.h"
75 76
76// Used for LCD display 77// Used for LCD display
77extern void AddNewIMToLCD(const LLString &newLine); 78extern void AddNewIMToLCD(const LLString &newLine);
@@ -188,14 +189,26 @@ void LLFloaterChat::updateConsoleVisibility()
188 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater? 189 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater?
189} 190}
190 191
191void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const LLColor4& color) 192void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LLColor4& color)
192{ 193{
194 LLString line = chat.mText;
193 bool prepend_newline = true; 195 bool prepend_newline = true;
194 if (gSavedSettings.getBOOL("ChatShowTimestamps")) 196 if (gSavedSettings.getBOOL("ChatShowTimestamps"))
195 { 197 {
196 edit->appendTime(prepend_newline); 198 edit->appendTime(prepend_newline);
197 prepend_newline = false; 199 prepend_newline = false;
198 } 200 }
201
202 // If the msg is not from an agent (not yourself though),
203 // extract out the sender name and replace it with the hotlinked name.
204 if (chat.mSourceType == CHAT_SOURCE_AGENT &&
205 chat.mFromID != LLUUID::null &&
206 (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0))
207 {
208 line = line.substr(chat.mFromName.length());
209 const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID);
210 edit->appendStyledText(chat.mFromName, false, false, &sourceStyle);
211 }
199 edit->appendColoredText(line, false, prepend_newline, color); 212 edit->appendColoredText(line, false, prepend_newline, color);
200} 213}
201 214
@@ -243,14 +256,14 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
243 256
244 if (!chat.mMuted) 257 if (!chat.mMuted)
245 { 258 {
246 add_timestamped_line(history_editor, chat.mText, color); 259 add_timestamped_line(history_editor, chat, color);
247 add_timestamped_line(history_editor_with_mute, chat.mText, color); 260 add_timestamped_line(history_editor_with_mute, chat, color);
248 } 261 }
249 else 262 else
250 { 263 {
251 // desaturate muted chat 264 // desaturate muted chat
252 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); 265 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
253 add_timestamped_line(history_editor_with_mute, chat.mText, color); 266 add_timestamped_line(history_editor_with_mute, chat, color);
254 } 267 }
255 268
256 // add objects as transient speakers that can be muted 269 // add objects as transient speakers that can be muted
diff --git a/linden/indra/newview/llfloatercolorpicker.cpp b/linden/indra/newview/llfloatercolorpicker.cpp
index e72cb1a..7bf9da3 100644
--- a/linden/indra/newview/llfloatercolorpicker.cpp
+++ b/linden/indra/newview/llfloatercolorpicker.cpp
@@ -39,7 +39,7 @@
39#include "llfontgl.h" 39#include "llfontgl.h"
40#include "llsys.h" 40#include "llsys.h"
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "v3dmath.h" 43#include "v3dmath.h"
44#include "lldir.h" 44#include "lldir.h"
45#include "llui.h" 45#include "llui.h"
diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp
index 42a3bae..f1ee946 100644
--- a/linden/indra/newview/llfloaterdirectory.cpp
+++ b/linden/indra/newview/llfloaterdirectory.cpp
@@ -79,7 +79,6 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
79 mFindAllPanel = NULL; 79 mFindAllPanel = NULL;
80 mClassifiedPanel = NULL; 80 mClassifiedPanel = NULL;
81 mEventsPanel = NULL; 81 mEventsPanel = NULL;
82 mPopularPanel = NULL;
83 mLandPanel = NULL; 82 mLandPanel = NULL;
84 83
85 mPanelAvatarp = NULL; 84 mPanelAvatarp = NULL;
@@ -96,12 +95,11 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
96 factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this); 95 factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this);
97 factory_map["classified_panel"] = LLCallbackMap(createClassified, this); 96 factory_map["classified_panel"] = LLCallbackMap(createClassified, this);
98 factory_map["events_panel"] = LLCallbackMap(createEvents, this); 97 factory_map["events_panel"] = LLCallbackMap(createEvents, this);
99 factory_map["popular_panel"] = LLCallbackMap(createPopular, this); 98 factory_map["showcase_panel"] = LLCallbackMap(createShowcase, this);
100 factory_map["places_panel"] = LLCallbackMap(createPlaces, this); 99 factory_map["places_panel"] = LLCallbackMap(createPlaces, this);
101 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this); 100 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this);
102 factory_map["people_panel"] = LLCallbackMap(createPeople, this); 101 factory_map["people_panel"] = LLCallbackMap(createPeople, this);
103 factory_map["groups_panel"] = LLCallbackMap(createGroups, this); 102 factory_map["groups_panel"] = LLCallbackMap(createGroups, this);
104 factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this);
105 103
106 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this); 104 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this);
107 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this); 105 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this);
@@ -120,15 +118,14 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
120 mPanelAvatarp->selectTab(0); 118 mPanelAvatarp->selectTab(0);
121 } 119 }
122 120
123 childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChangedFindAll, this); 121 childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChanged, this);
124 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this); 122 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this);
125 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this); 123 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this);
126 childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this); 124 childSetTabChangeCallback("Directory Tabs", "showcase_panel", onTabChanged, this);
127 childSetTabChangeCallback("Directory Tabs", "places_panel", onTabChanged, this); 125 childSetTabChangeCallback("Directory Tabs", "places_panel", onTabChanged, this);
128 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this); 126 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this);
129 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this); 127 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this);
130 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this); 128 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this);
131 childSetTabChangeCallback("Directory Tabs", "find_all_old_panel", onTabChanged, this);
132} 129}
133 130
134LLFloaterDirectory::~LLFloaterDirectory() 131LLFloaterDirectory::~LLFloaterDirectory()
@@ -175,11 +172,10 @@ void* LLFloaterDirectory::createEvents(void* userdata)
175} 172}
176 173
177// static 174// static
178void* LLFloaterDirectory::createPopular(void* userdata) 175void* LLFloaterDirectory::createShowcase(void* userdata)
179{ 176{
180 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 177 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
181 self->mPopularPanel = new LLPanelDirPopular("popular_panel", self); 178 return new LLPanelDirPopular("showcase_panel", self);
182 return self->mPopularPanel;
183} 179}
184 180
185// static 181// static
@@ -209,14 +205,7 @@ void* LLFloaterDirectory::createPeople(void* userdata)
209void* LLFloaterDirectory::createGroups(void* userdata) 205void* LLFloaterDirectory::createGroups(void* userdata)
210{ 206{
211 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 207 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
212 return new LLPanelDirGroups("groups_panel", self); 208 return new LLPanelDirGroups("people_groups", self);
213}
214
215// static
216void *LLFloaterDirectory::createFindAllOld(void* userdata)
217{
218 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
219 return new LLPanelDirFindAllOld("find_all_old_panel", self);
220} 209}
221 210
222// static 211// static
@@ -339,17 +328,6 @@ void LLFloaterDirectory::showEvents(S32 event_id)
339} 328}
340 329
341// static 330// static
342void LLFloaterDirectory::showPopular(const LLUUID& parcel_id)
343{
344 showPanel("popular_panel");
345
346 if (sInstance->mPopularPanel)
347 {
348 sInstance->mPopularPanel->selectByUUID(parcel_id);
349 }
350}
351
352// static
353void LLFloaterDirectory::showLandForSale(const LLUUID& parcel_id) 331void LLFloaterDirectory::showLandForSale(const LLUUID& parcel_id)
354{ 332{
355 showPanel("land_sales_panel"); 333 showPanel("land_sales_panel");
@@ -498,17 +476,6 @@ void LLFloaterDirectory::onTabChanged(void* data, bool from_click)
498 } 476 }
499} 477}
500 478
501// static
502void LLFloaterDirectory::onTabChangedFindAll(void* data, bool from_click)
503{
504 LLFloaterDirectory* self = (LLFloaterDirectory*)data;
505 if (!self) return;
506
507 self->hideAllDetailPanels();
508 LLPanelDirFindAllInterface::focus(self->mFindAllPanel);
509 onTabChanged(data, from_click);
510}
511
512void LLFloaterDirectory::hideAllDetailPanels() 479void LLFloaterDirectory::hideAllDetailPanels()
513{ 480{
514 if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE); 481 if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE);
diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h
index 7aa956a..6915aea 100644
--- a/linden/indra/newview/llfloaterdirectory.h
+++ b/linden/indra/newview/llfloaterdirectory.h
@@ -73,7 +73,6 @@ public:
73 static void showFindAll(const std::string& search_text); 73 static void showFindAll(const std::string& search_text);
74 static void showClassified(const LLUUID& classified_id); 74 static void showClassified(const LLUUID& classified_id);
75 static void showEvents(S32 event_id); 75 static void showEvents(S32 event_id);
76 static void showPopular(const LLUUID& parcel_id);
77 static void showLandForSale(const LLUUID& parcel_id); 76 static void showLandForSale(const LLUUID& parcel_id);
78 static void showGroups(); 77 static void showGroups();
79 static void refreshGroup(const LLUUID& group_id); 78 static void refreshGroup(const LLUUID& group_id);
@@ -82,7 +81,6 @@ public:
82 static void toggleEvents(void*); 81 static void toggleEvents(void*);
83 static void toggleFind(void*); 82 static void toggleFind(void*);
84 static void onTabChanged(void*, bool); 83 static void onTabChanged(void*, bool);
85 static void onTabChangedFindAll(void*, bool);
86 84
87 void hideAllDetailPanels(); 85 void hideAllDetailPanels();
88 86
@@ -97,18 +95,16 @@ private:
97 LLPanelDirFindAll* mFindAllPanel; 95 LLPanelDirFindAll* mFindAllPanel;
98 LLPanelDirClassified* mClassifiedPanel; 96 LLPanelDirClassified* mClassifiedPanel;
99 LLPanelDirEvents* mEventsPanel; 97 LLPanelDirEvents* mEventsPanel;
100 LLPanelDirPopular* mPopularPanel;
101 LLPanelDirLand* mLandPanel; 98 LLPanelDirLand* mLandPanel;
102 99
103 static void* createFindAll(void* userdata); 100 static void* createFindAll(void* userdata);
104 static void* createClassified(void* userdata); 101 static void* createClassified(void* userdata);
105 static void* createEvents(void* userdata); 102 static void* createEvents(void* userdata);
106 static void* createPopular(void* userdata); 103 static void* createShowcase(void* userdata);
107 static void* createPlaces(void* userdata); 104 static void* createPlaces(void* userdata);
108 static void* createLand(void* userdata); 105 static void* createLand(void* userdata);
109 static void* createPeople(void* userdata); 106 static void* createPeople(void* userdata);
110 static void* createGroups(void* userdata); 107 static void* createGroups(void* userdata);
111 static void* createFindAllOld(void* userdata);
112 108
113 static void* createClassifiedDetail(void* userdata); 109 static void* createClassifiedDetail(void* userdata);
114 static void* createAvatarDetail(void* userdata); 110 static void* createAvatarDetail(void* userdata);
diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp
index 1c303b9..c657988 100644
--- a/linden/indra/newview/llfloatergroupinfo.cpp
+++ b/linden/indra/newview/llfloatergroupinfo.cpp
@@ -37,7 +37,7 @@
37 37
38#include "llagent.h" 38#include "llagent.h"
39#include "llcommandhandler.h" 39#include "llcommandhandler.h"
40#include "llcommandhandler.h" 40#include "llfloaterchatterbox.h"
41#include "llpanelgroup.h" 41#include "llpanelgroup.h"
42#include "llviewermessage.h" // for inventory_offer_callback 42#include "llviewermessage.h" // for inventory_offer_callback
43//#include "llviewerwindow.h" 43//#include "llviewerwindow.h"
@@ -59,11 +59,35 @@ public:
59 LLGroupHandler() : LLCommandHandler("group", false) { } 59 LLGroupHandler() : LLCommandHandler("group", false) { }
60 bool handle(const LLSD& tokens, const LLSD& queryMap) 60 bool handle(const LLSD& tokens, const LLSD& queryMap)
61 { 61 {
62 if (tokens.size() < 1)
63 {
64 return false;
65 }
66
67 if (tokens[0].asString() == "create")
68 {
69 LLFloaterGroupInfo::showCreateGroup(NULL);
70 return true;
71 }
72
62 if (tokens.size() < 2) 73 if (tokens.size() < 2)
63 { 74 {
64 return false; 75 return false;
65 } 76 }
66 77
78 if (tokens[0].asString() == "list")
79 {
80 if (tokens[1].asString() == "show")
81 {
82 // CP_TODO: get the value we pass in via the XUI name
83 // of the tab instead of using a literal like this
84 LLFloaterMyFriends::showInstance( 1 );
85
86 return true;
87 }
88 return false;
89 }
90
67 LLUUID group_id; 91 LLUUID group_id;
68 if (!group_id.set(tokens[0], FALSE)) 92 if (!group_id.set(tokens[0], FALSE))
69 { 93 {
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp
index 7f32b24..c9ccf1a 100644
--- a/linden/indra/newview/llfloatergroups.cpp
+++ b/linden/indra/newview/llfloatergroups.cpp
@@ -466,7 +466,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow
466 LLSD element; 466 LLSD element;
467 element["id"] = LLUUID::null; 467 element["id"] = LLUUID::null;
468 element["columns"][0]["column"] = "name"; 468 element["columns"][0]["column"] = "name";
469 element["columns"][0]["value"] = "none"; 469 element["columns"][0]["value"] = "none"; // *TODO: Translate
470 element["columns"][0]["font"] = "SANSSERIF"; 470 element["columns"][0]["font"] = "SANSSERIF";
471 element["columns"][0]["font-style"] = style; 471 element["columns"][0]["font-style"] = style;
472 472
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index a228587..ccd7737 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -43,7 +43,7 @@
43#include "llcombobox.h" 43#include "llcombobox.h"
44#include "lldrawable.h" 44#include "lldrawable.h"
45#include "lldrawpoolavatar.h" 45#include "lldrawpoolavatar.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47#include "llface.h" 47#include "llface.h"
48#include "lltextbox.h" 48#include "lltextbox.h"
49#include "lltoolmgr.h" 49#include "lltoolmgr.h"
diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp
index 0d2cd5f..48232cb 100644
--- a/linden/indra/newview/llfloaterproperties.cpp
+++ b/linden/indra/newview/llfloaterproperties.cpp
@@ -65,11 +65,21 @@
65// helper class to watch the inventory. 65// helper class to watch the inventory.
66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 67
68class LLPropertiesObserver : public LLInventoryObserver, public LLSingleton<LLPropertiesObserver> 68// Ugh. This can't be a singleton because it needs to remove itself
69// from the inventory observer list when destroyed, which could
70// happen after gInventory has already been destroyed if a singleton.
71// Instead, do our own ref counting and create / destroy it as needed
72class LLPropertiesObserver : public LLInventoryObserver
69{ 73{
70public: 74public:
71 LLPropertiesObserver() {} 75 LLPropertiesObserver()
72 virtual ~LLPropertiesObserver() {} 76 {
77 gInventory.addObserver(this);
78 }
79 virtual ~LLPropertiesObserver()
80 {
81 gInventory.removeObserver(this);
82 }
73 virtual void changed(U32 mask); 83 virtual void changed(U32 mask);
74}; 84};
75 85
@@ -88,7 +98,10 @@ void LLPropertiesObserver::changed(U32 mask)
88/// Class LLFloaterProperties 98/// Class LLFloaterProperties
89///---------------------------------------------------------------------------- 99///----------------------------------------------------------------------------
90 100
101// static
91LLFloaterProperties::instance_map LLFloaterProperties::sInstances; 102LLFloaterProperties::instance_map LLFloaterProperties::sInstances;
103LLPropertiesObserver* LLFloaterProperties::sPropertiesObserver = NULL;
104S32 LLFloaterProperties::sPropertiesObserverCount = 0;
92 105
93// static 106// static
94LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id, 107LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id,
@@ -145,12 +158,12 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect&
145{ 158{
146 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml"); 159 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
147 160
148 // hack to make sure these floaters are observing the inventory. 161 if (!sPropertiesObserver)
149 if(!gInventory.containsObserver(LLPropertiesObserver::getInstance()))
150 { 162 {
151 // Note: this is where gPropertiesObserver used to be constructed. 163 sPropertiesObserver = new LLPropertiesObserver;
152 gInventory.addObserver(LLPropertiesObserver::getInstance());
153 } 164 }
165 sPropertiesObserverCount++;
166
154 // add the object to the static structure 167 // add the object to the static structure
155 LLUUID key = mItemID ^ mObjectID; 168 LLUUID key = mItemID ^ mObjectID;
156 sInstances.insert(instance_map::value_type(key, this)); 169 sInstances.insert(instance_map::value_type(key, this));
@@ -193,6 +206,12 @@ LLFloaterProperties::~LLFloaterProperties()
193 { 206 {
194 sInstances.erase(it); 207 sInstances.erase(it);
195 } 208 }
209 sPropertiesObserverCount--;
210 if (!sPropertiesObserverCount)
211 {
212 delete sPropertiesObserver;
213 sPropertiesObserver = NULL;
214 }
196} 215}
197 216
198void LLFloaterProperties::refresh() 217void LLFloaterProperties::refresh()
@@ -422,7 +441,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
422 441
423 perm_string = "G"; 442 perm_string = "G";
424 perm_string += overwrite_group ? "*: " : ": "; 443 perm_string += overwrite_group ? "*: " : ": ";
425 perm_string += perm_string += mask_to_string(group_mask); 444 perm_string += mask_to_string(group_mask);
426 childSetText("GroupMaskDebug",perm_string); 445 childSetText("GroupMaskDebug",perm_string);
427 childSetVisible("GroupMaskDebug",TRUE); 446 childSetVisible("GroupMaskDebug",TRUE);
428 447
diff --git a/linden/indra/newview/llfloaterproperties.h b/linden/indra/newview/llfloaterproperties.h
index d4461fd..a459616 100644
--- a/linden/indra/newview/llfloaterproperties.h
+++ b/linden/indra/newview/llfloaterproperties.h
@@ -47,6 +47,8 @@ class LLLineEditor;
47class LLRadioGroup; 47class LLRadioGroup;
48class LLTextBox; 48class LLTextBox;
49 49
50class LLPropertiesObserver;
51
50class LLFloaterProperties : public LLFloater 52class LLFloaterProperties : public LLFloater
51{ 53{
52public: 54public:
@@ -94,6 +96,8 @@ protected:
94 96
95 typedef std::map<LLUUID, LLFloaterProperties*, lluuid_less> instance_map; 97 typedef std::map<LLUUID, LLFloaterProperties*, lluuid_less> instance_map;
96 static instance_map sInstances; 98 static instance_map sInstances;
99 static LLPropertiesObserver* sPropertiesObserver;
100 static S32 sPropertiesObserverCount;
97}; 101};
98 102
99class LLMultiProperties : public LLMultiFloater 103class LLMultiProperties : public LLMultiFloater
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index 12834b3..7b3b8e2 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -80,6 +80,8 @@
80const S32 TERRAIN_TEXTURE_COUNT = 4; 80const S32 TERRAIN_TEXTURE_COUNT = 4;
81const S32 CORNER_COUNT = 4; 81const S32 CORNER_COUNT = 4;
82 82
83extern LLString gLastVersionChannel;
84
83 85
84///---------------------------------------------------------------------------- 86///----------------------------------------------------------------------------
85/// Local class declaration 87/// Local class declaration
@@ -317,6 +319,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
317 // GENERAL PANEL 319 // GENERAL PANEL
318 panel = tab->getChild<LLPanel>("General"); 320 panel = tab->getChild<LLPanel>("General");
319 panel->childSetValue("region_text", LLSD(sim_name)); 321 panel->childSetValue("region_text", LLSD(sim_name));
322 panel->childSetValue("version_channel_text", gLastVersionChannel);
320 323
321 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); 324 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
322 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); 325 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE );
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp
index 0c1b9ee..9c43f35 100644
--- a/linden/indra/newview/llfloaterreporter.cpp
+++ b/linden/indra/newview/llfloaterreporter.cpp
@@ -81,7 +81,7 @@
81#include "llselectmgr.h" 81#include "llselectmgr.h"
82#include "llviewerbuild.h" 82#include "llviewerbuild.h"
83#include "lluictrlfactory.h" 83#include "lluictrlfactory.h"
84#include "llappviewer.h" 84#include "llviewernetwork.h"
85 85
86#include "llassetuploadresponders.h" 86#include "llassetuploadresponders.h"
87 87
@@ -656,7 +656,7 @@ LLSD LLFloaterReporter::gatherReport()
656 mCopyrightWarningSeen = FALSE; 656 mCopyrightWarningSeen = FALSE;
657 657
658 std::ostringstream summary; 658 std::ostringstream summary;
659 if (!LLAppViewer::instance()->isInProductionGrid()) 659 if (!LLViewerLogin::getInstance()->isInProductionGrid())
660 { 660 {
661 summary << "Preview "; 661 summary << "Preview ";
662 } 662 }
diff --git a/linden/indra/newview/llfloaterreporter.h b/linden/indra/newview/llfloaterreporter.h
index 9696b34..5e8f735 100644
--- a/linden/indra/newview/llfloaterreporter.h
+++ b/linden/indra/newview/llfloaterreporter.h
@@ -49,6 +49,8 @@ struct LLResourceData;
49// these flags are used to label info requests to the server 49// these flags are used to label info requests to the server
50const U32 BUG_REPORT_REQUEST = 0x01 << 0; 50const U32 BUG_REPORT_REQUEST = 0x01 << 0;
51const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1; 51const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1;
52const U32 OBJECT_PAY_REQUEST = 0x01 << 2;
53
52 54
53// ************************************************************ 55// ************************************************************
54// THESE ENUMS ARE IN THE DATABASE!!! 56// THESE ENUMS ARE IN THE DATABASE!!!
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp
index c36c54d..f3ad4a7 100644
--- a/linden/indra/newview/llfloatersnapshot.cpp
+++ b/linden/indra/newview/llfloatersnapshot.cpp
@@ -36,7 +36,7 @@
36#include "llfontgl.h" 36#include "llfontgl.h"
37#include "llsys.h" 37#include "llsys.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v3dmath.h" 40#include "v3dmath.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "lldir.h" 42#include "lldir.h"
@@ -183,6 +183,7 @@ protected:
183 LLQuaternion mCameraRot; 183 LLQuaternion mCameraRot;
184 BOOL mSnapshotActive; 184 BOOL mSnapshotActive;
185 LLViewerWindow::ESnapshotType mSnapshotBufferType; 185 LLViewerWindow::ESnapshotType mSnapshotBufferType;
186 bool mSnapshotSoundPlayed;
186 187
187public: 188public:
188 static std::set<LLSnapshotLivePreview*> sList; 189 static std::set<LLSnapshotLivePreview*> sList;
@@ -208,7 +209,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
208 mCameraPos(LLViewerCamera::getInstance()->getOrigin()), 209 mCameraPos(LLViewerCamera::getInstance()->getOrigin()),
209 mCameraRot(LLViewerCamera::getInstance()->getQuaternion()), 210 mCameraRot(LLViewerCamera::getInstance()->getQuaternion()),
210 mSnapshotActive(FALSE), 211 mSnapshotActive(FALSE),
211 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR) 212 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR),
213 mSnapshotSoundPlayed(false)
212{ 214{
213 mSnapshotDelayTimer.setTimerExpirySec(0.0f); 215 mSnapshotDelayTimer.setTimerExpirySec(0.0f);
214 mSnapshotDelayTimer.start(); 216 mSnapshotDelayTimer.start();
@@ -764,6 +766,19 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
764 { 766 {
765 previewp->mRawImageEncoded->resize(previewp->mRawImage->getWidth(), previewp->mRawImage->getHeight(), previewp->mRawImage->getComponents()); 767 previewp->mRawImageEncoded->resize(previewp->mRawImage->getWidth(), previewp->mRawImage->getHeight(), previewp->mRawImage->getComponents());
766 768
769 if (!gSavedSettings.getBOOL("QuietSnapshotsToDisk"))
770 {
771 // Always play the sound once, on window open.
772 // Don't keep playing if automatic
773 // updates are enabled. It's too invasive. JC
774 if (!previewp->mSnapshotSoundPlayed
775 || !gSavedSettings.getBOOL("AutoSnapshot") )
776 {
777 gViewerWindow->playSnapshotAnimAndSound();
778 previewp->mSnapshotSoundPlayed = true;
779 }
780 }
781
767 if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD) 782 if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD)
768 { 783 {
769 // *FIX: just resize and reuse existing jpeg? 784 // *FIX: just resize and reuse existing jpeg?
@@ -923,7 +938,9 @@ BOOL LLSnapshotLivePreview::saveLocal()
923class LLFloaterSnapshot::Impl 938class LLFloaterSnapshot::Impl
924{ 939{
925public: 940public:
926 Impl() : mLastToolset(NULL) 941 Impl()
942 : mAvatarPauseHandles(),
943 mLastToolset(NULL)
927 { 944 {
928 } 945 }
929 ~Impl() 946 ~Impl()
@@ -1054,7 +1071,13 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
1054 previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); 1071 previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
1055 } 1072 }
1056 1073
1057 if (floaterp->childGetValue("freeze_frame_check").asBoolean()) 1074 bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean();
1075 // For now, auto-snapshot only works in freeze frame mode.
1076 // This can be changed in the future by taking the FreezeTime check
1077 // out of the onIdle() camera movement detection. JC
1078 floaterp->childSetEnabled("auto_snapshot_check", use_freeze_frame);
1079
1080 if (use_freeze_frame)
1058 { 1081 {
1059 // stop all mouse events at fullscreen preview layer 1082 // stop all mouse events at fullscreen preview layer
1060 floaterp->getParent()->setMouseOpaque(TRUE); 1083 floaterp->getParent()->setMouseOpaque(TRUE);
@@ -1089,6 +1112,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
1089 } 1112 }
1090 else // turning off freeze frame mode 1113 else // turning off freeze frame mode
1091 { 1114 {
1115 // Force off auto-snapshot, see comment above about onIdle. JC
1116 gSavedSettings.setBOOL("AutoSnapshot", FALSE);
1117
1092 floaterp->getParent()->setMouseOpaque(FALSE); 1118 floaterp->getParent()->setMouseOpaque(FALSE);
1093 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height); 1119 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
1094 if (previewp) 1120 if (previewp)
@@ -1287,12 +1313,6 @@ void LLFloaterSnapshot::Impl::onClickKeep(void* data)
1287 if (gSavedSettings.getBOOL("CloseSnapshotOnKeep")) 1313 if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
1288 { 1314 {
1289 view->close(); 1315 view->close();
1290 // only plays sound and anim when keeping a snapshot, and closing the snapshot UI,
1291 // and only if the save succeeded (i.e. was not canceled)
1292 if (succeeded)
1293 {
1294 gViewerWindow->playSnapshotAnimAndSound();
1295 }
1296 } 1316 }
1297 else 1317 else
1298 { 1318 {
@@ -1674,13 +1694,13 @@ void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32
1674 LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ; 1694 LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ;
1675 if(sctrl) 1695 if(sctrl)
1676 { 1696 {
1677 sctrl->setValue(width) ; 1697 sctrl->forceSetValue(width) ;
1678 } 1698 }
1679 1699
1680 sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ; 1700 sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ;
1681 if(sctrl) 1701 if(sctrl)
1682 { 1702 {
1683 sctrl->setValue(height) ; 1703 sctrl->forceSetValue(height) ;
1684 } 1704 }
1685 1705
1686 gSavedSettings.setS32("LastSnapshotWidth", width); 1706 gSavedSettings.setS32("LastSnapshotWidth", width);
@@ -1707,8 +1727,30 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
1707 1727
1708 if (w != curw || h != curh) 1728 if (w != curw || h != curh)
1709 { 1729 {
1730 BOOL update_ = FALSE ;
1731 //if to upload a snapshot, process spinner input in a special way.
1732 if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType"))
1733 {
1734 S32 spinner_increment = (S32)((LLSpinCtrl*)ctrl)->getIncrement() ;
1735 S32 dw = w - curw ;
1736 S32 dh = h - curh ;
1737 dw = (dw == spinner_increment) ? 1 : ((dw == -spinner_increment) ? -1 : 0) ;
1738 dh = (dh == spinner_increment) ? 1 : ((dh == -spinner_increment) ? -1 : 0) ;
1739
1740 if(dw)
1741 {
1742 w = (dw > 0) ? curw << dw : curw >> -dw ;
1743 update_ = TRUE ;
1744 }
1745 if(dh)
1746 {
1747 h = (dh > 0) ? curh << dh : curh >> -dh ;
1748 update_ = TRUE ;
1749 }
1750 }
1751
1710 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ; 1752 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ;
1711 if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize())) 1753 if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()) || update_)
1712 { 1754 {
1713 resetSnapshotSizeOnUI(view, w, h) ; 1755 resetSnapshotSizeOnUI(view, w, h) ;
1714 } 1756 }
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index 97a8db3..97150e3 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -194,12 +194,16 @@ BOOL LLFloaterTools::postBuild()
194 mBtnLand = getChild<LLButton>("button land" ); 194 mBtnLand = getChild<LLButton>("button land" );
195 childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance()); 195 childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance());
196 mTextStatus = getChild<LLTextBox>("text status"); 196 mTextStatus = getChild<LLTextBox>("text status");
197 mRadioZoom = getChild<LLCheckBoxCtrl>("radio zoom"); 197
198 childSetCommitCallback("slider zoom",commit_slider_zoom,this); 198 childSetCommitCallback("slider zoom",commit_slider_zoom,this);
199
200 mRadioZoom = getChild<LLCheckBoxCtrl>("radio zoom");
201 childSetCommitCallback("radio zoom",commit_radio_zoom,this);
199 mRadioOrbit = getChild<LLCheckBoxCtrl>("radio orbit"); 202 mRadioOrbit = getChild<LLCheckBoxCtrl>("radio orbit");
200 childSetCommitCallback("radio orbit",commit_radio_orbit,this); 203 childSetCommitCallback("radio orbit",commit_radio_orbit,this);
201 mRadioPan = getChild<LLCheckBoxCtrl>("radio pan"); 204 mRadioPan = getChild<LLCheckBoxCtrl>("radio pan");
202 childSetCommitCallback("radio pan",commit_radio_pan,this); 205 childSetCommitCallback("radio pan",commit_radio_pan,this);
206
203 mRadioMove = getChild<LLCheckBoxCtrl>("radio move"); 207 mRadioMove = getChild<LLCheckBoxCtrl>("radio move");
204 childSetCommitCallback("radio move",click_popup_grab_drag,this); 208 childSetCommitCallback("radio move",click_popup_grab_drag,this);
205 mRadioLift = getChild<LLCheckBoxCtrl>("radio lift"); 209 mRadioLift = getChild<LLCheckBoxCtrl>("radio lift");
@@ -492,6 +496,7 @@ void LLFloaterTools::dirty()
492// floater is closed. 496// floater is closed.
493void LLFloaterTools::resetToolState() 497void LLFloaterTools::resetToolState()
494{ 498{
499 gCameraBtnZoom = TRUE;
495 gCameraBtnOrbit = FALSE; 500 gCameraBtnOrbit = FALSE;
496 gCameraBtnPan = FALSE; 501 gCameraBtnPan = FALSE;
497 502
@@ -524,7 +529,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
524 mRadioOrbit ->setVisible( focus_visible ); 529 mRadioOrbit ->setVisible( focus_visible );
525 mRadioPan ->setVisible( focus_visible ); 530 mRadioPan ->setVisible( focus_visible );
526 childSetVisible("slider zoom", focus_visible); 531 childSetVisible("slider zoom", focus_visible);
527 532 childSetEnabled("slider zoom", gCameraBtnZoom);
533
528 mRadioZoom ->set( !gCameraBtnOrbit && 534 mRadioZoom ->set( !gCameraBtnOrbit &&
529 !gCameraBtnPan && 535 !gCameraBtnPan &&
530 !(mask == MASK_ORBIT) && 536 !(mask == MASK_ORBIT) &&
@@ -867,18 +873,21 @@ void click_popup_grab_spin(LLUICtrl*, void*)
867 873
868void commit_radio_zoom(LLUICtrl *, void*) 874void commit_radio_zoom(LLUICtrl *, void*)
869{ 875{
876 gCameraBtnZoom = TRUE;
870 gCameraBtnOrbit = FALSE; 877 gCameraBtnOrbit = FALSE;
871 gCameraBtnPan = FALSE; 878 gCameraBtnPan = FALSE;
872} 879}
873 880
874void commit_radio_orbit(LLUICtrl *, void*) 881void commit_radio_orbit(LLUICtrl *, void*)
875{ 882{
883 gCameraBtnZoom = FALSE;
876 gCameraBtnOrbit = TRUE; 884 gCameraBtnOrbit = TRUE;
877 gCameraBtnPan = FALSE; 885 gCameraBtnPan = FALSE;
878} 886}
879 887
880void commit_radio_pan(LLUICtrl *, void*) 888void commit_radio_pan(LLUICtrl *, void*)
881{ 889{
890 gCameraBtnZoom = FALSE;
882 gCameraBtnOrbit = FALSE; 891 gCameraBtnOrbit = FALSE;
883 gCameraBtnPan = TRUE; 892 gCameraBtnPan = TRUE;
884} 893}
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 49ca5e4..b543e31 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -40,7 +40,7 @@
40#include "llfocusmgr.h" 40#include "llfocusmgr.h"
41#include "llfontgl.h" 41#include "llfontgl.h"
42#include "llgl.h" 42#include "llgl.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44#include "llinventory.h" 44#include "llinventory.h"
45 45
46#include "llcallbacklist.h" 46#include "llcallbacklist.h"
@@ -3144,6 +3144,10 @@ void LLFolderView::draw()
3144 { 3144 {
3145 closeAutoOpenedFolders(); 3145 closeAutoOpenedFolders();
3146 } 3146 }
3147 if(gViewerWindow->hasKeyboardFocus(this) && !getVisible())
3148 {
3149 gViewerWindow->setKeyboardFocus( NULL );
3150 }
3147 3151
3148 // while dragging, update selection rendering to reflect single/multi drag status 3152 // while dragging, update selection rendering to reflect single/multi drag status
3149 if (LLToolDragAndDrop::getInstance()->hasMouseCapture()) 3153 if (LLToolDragAndDrop::getInstance()->hasMouseCapture())
diff --git a/linden/indra/newview/llframestats.cpp b/linden/indra/newview/llframestats.cpp
index f67c3b8..c7519c9 100644
--- a/linden/indra/newview/llframestats.cpp
+++ b/linden/indra/newview/llframestats.cpp
@@ -184,7 +184,7 @@ void LLFrameStats::dump()
184 184
185 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ 185 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
186 snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */ 186 snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */
187 FILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */ 187 LLFILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */
188 if (!fp) 188 if (!fp)
189 { 189 {
190 llinfos << "Couldn't open file for dumping frame stats!" << llendl; 190 llinfos << "Couldn't open file for dumping frame stats!" << llendl;
diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp
index 41b1c1e..016acd5 100644
--- a/linden/indra/newview/llgivemoney.cpp
+++ b/linden/indra/newview/llgivemoney.cpp
@@ -40,6 +40,8 @@
40#include "llresmgr.h" 40#include "llresmgr.h"
41#include "lltextbox.h" 41#include "lltextbox.h"
42#include "lllineeditor.h" 42#include "lllineeditor.h"
43#include "llmutelist.h"
44#include "llfloaterreporter.h"
43#include "llviewerobject.h" 45#include "llviewerobject.h"
44#include "llviewerobjectlist.h" 46#include "llviewerobjectlist.h"
45#include "llviewerregion.h" 47#include "llviewerregion.h"
@@ -474,6 +476,17 @@ void LLFloaterPay::give(S32 amount)
474 if(dest_object->isAvatar()) tx_type = TRANS_GIFT; 476 if(dest_object->isAvatar()) tx_type = TRANS_GIFT;
475 mCallback(mTargetUUID, region, amount, FALSE, tx_type, object_name); 477 mCallback(mTargetUUID, region, amount, FALSE, tx_type, object_name);
476 mObjectSelection = NULL; 478 mObjectSelection = NULL;
479
480 // request the object owner in order to check if the owner needs to be unmuted
481 LLMessageSystem* msg = gMessageSystem;
482 msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
483 msg->nextBlockFast(_PREHASH_AgentData);
484 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
485 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
486 msg->nextBlockFast(_PREHASH_ObjectData);
487 msg->addU32Fast(_PREHASH_RequestFlags, OBJECT_PAY_REQUEST );
488 msg->addUUIDFast(_PREHASH_ObjectID, mTargetUUID);
489 msg->sendReliable( region->getHost() );
477 } 490 }
478 } 491 }
479 } 492 }
@@ -481,6 +494,9 @@ void LLFloaterPay::give(S32 amount)
481 { 494 {
482 // just transfer the L$ 495 // just transfer the L$
483 mCallback(mTargetUUID, gAgent.getRegion(), amount, mTargetIsGroup, TRANS_GIFT, LLString::null); 496 mCallback(mTargetUUID, gAgent.getRegion(), amount, mTargetIsGroup, TRANS_GIFT, LLString::null);
497
498 // check if the payee needs to be unmuted
499 LLMuteList::getInstance()->autoRemove(mTargetUUID, LLMuteList::AR_MONEY);
484 } 500 }
485 } 501 }
486} 502}
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index 4ea38aa..30c76c9 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -39,7 +39,7 @@
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
40 40
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llparcel.h" 44#include "llparcel.h"
45#include "llui.h" 45#include "llui.h"
diff --git a/linden/indra/newview/llglslshader.cpp b/linden/indra/newview/llglslshader.cpp
index 5c8f156..afbafde 100644
--- a/linden/indra/newview/llglslshader.cpp
+++ b/linden/indra/newview/llglslshader.cpp
@@ -34,6 +34,7 @@
34#include "llfeaturemanager.h" 34#include "llfeaturemanager.h"
35#include "llglslshader.h" 35#include "llglslshader.h"
36 36
37#include "llfile.h"
37#include "llviewerwindow.h" 38#include "llviewerwindow.h"
38#include "llviewercontrol.h" 39#include "llviewercontrol.h"
39#include "pipeline.h" 40#include "pipeline.h"
@@ -42,16 +43,16 @@
42#include "llwaterparammanager.h" 43#include "llwaterparammanager.h"
43#include "llsky.h" 44#include "llsky.h"
44#include "llvosky.h" 45#include "llvosky.h"
45#include "llglimmediate.h" 46#include "llrender.h"
46 47
47#if LL_DARWIN 48#if LL_DARWIN
48#include "OpenGL/OpenGL.h" 49#include "OpenGL/OpenGL.h"
49#endif 50#endif
50 51
51#ifdef LL_RELEASE_FOR_DOWNLOAD 52#ifdef LL_RELEASE_FOR_DOWNLOAD
52#define UNIFORM_ERRS llwarns 53#define UNIFORM_ERRS LL_WARNS_ONCE("Shader")
53#else 54#else
54#define UNIFORM_ERRS llerrs 55#define UNIFORM_ERRS LL_ERRS("Shader")
55#endif 56#endif
56 57
57// Lots of STL stuff in here, using namespace std to keep things more readable 58// Lots of STL stuff in here, using namespace std to keep things more readable
@@ -60,20 +61,6 @@ using std::pair;
60using std::make_pair; 61using std::make_pair;
61using std::string; 62using std::string;
62 63
63/*
64//utility shader objects (not shader programs)
65GLhandleARB gSumLightsVertex;
66GLhandleARB gLightVertex;
67GLhandleARB gLightFuncVertex;
68GLhandleARB gLightFragment;
69GLhandleARB gWaterFogFragment;
70
71//utility WindLight shader objects (not shader programs)
72GLhandleARB gWindLightVertex;
73GLhandleARB gWindLightFragment;
74GLhandleARB gGammaFragment;
75*/
76
77LLVector4 gShinyOrigin; 64LLVector4 gShinyOrigin;
78 65
79//object shaders 66//object shaders
@@ -506,11 +493,11 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
506 LLString log = get_object_log(ret); 493 LLString log = get_object_log(ret);
507 if (warns) 494 if (warns)
508 { 495 {
509 llwarns << log << llendl; 496 LL_WARNS("ShaderLoading") << log << LL_ENDL;
510 } 497 }
511 else 498 else
512 { 499 {
513 llinfos << log << llendl; 500 LL_DEBUGS("ShaderLoading") << log << LL_ENDL;
514 } 501 }
515} 502}
516 503
@@ -520,10 +507,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
520 error = glGetError(); 507 error = glGetError();
521 if (error != GL_NO_ERROR) 508 if (error != GL_NO_ERROR)
522 { 509 {
523 llwarns << "GL ERROR entering loadShaderFile(): " << error << llendl; 510 LL_WARNS("ShaderLoading") << "GL ERROR entering loadShaderFile(): " << error << LL_ENDL;
524 } 511 }
525 512
526 llinfos << "Loading shader file: " << filename << " class " << shader_level << llendl; 513 LL_DEBUGS("ShaderLoading") << "Loading shader file: " << filename << " class " << shader_level << LL_ENDL;
527 514
528 if (filename.empty()) 515 if (filename.empty())
529 { 516 {
@@ -532,7 +519,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
532 519
533 520
534 //read in from file 521 //read in from file
535 FILE* file = NULL; 522 LLFILE* file = NULL;
536 523
537 S32 try_gpu_class = shader_level; 524 S32 try_gpu_class = shader_level;
538 S32 gpu_class; 525 S32 gpu_class;
@@ -544,20 +531,18 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
544 fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class"); 531 fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
545 fname << gpu_class << "/" << filename; 532 fname << gpu_class << "/" << filename;
546 533
547 llinfos << "Looking in " << fname.str().c_str() << llendl; 534 LL_DEBUGS("ShaderLoading") << "Looking in " << fname.str().c_str() << LL_ENDL;
548 file = fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */ 535 file = LLFile::fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */
549 if (file) 536 if (file)
550 { 537 {
551#if !LL_RELEASE_FOR_DOWNLOAD 538 LL_INFOS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL;
552 llinfos << "Found shader file: " << fname.str() << llendl;
553#endif
554 break; // done 539 break; // done
555 } 540 }
556 } 541 }
557 542
558 if (file == NULL) 543 if (file == NULL)
559 { 544 {
560 llinfos << "GLSL Shader file not found: " << filename << llendl; 545 LL_WARNS("ShaderLoading") << "GLSL Shader file not found: " << filename << LL_ENDL;
561 return 0; 546 return 0;
562 } 547 }
563 548
@@ -580,7 +565,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
580 error = glGetError(); 565 error = glGetError();
581 if (error != GL_NO_ERROR) 566 if (error != GL_NO_ERROR)
582 { 567 {
583 llwarns << "GL ERROR in glCreateShaderObjectARB: " << error << llendl; 568 LL_WARNS("ShaderLoading") << "GL ERROR in glCreateShaderObjectARB: " << error << LL_ENDL;
584 } 569 }
585 else 570 else
586 { 571 {
@@ -589,7 +574,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
589 error = glGetError(); 574 error = glGetError();
590 if (error != GL_NO_ERROR) 575 if (error != GL_NO_ERROR)
591 { 576 {
592 llwarns << "GL ERROR in glShaderSourceARB: " << error << llendl; 577 LL_WARNS("ShaderLoading") << "GL ERROR in glShaderSourceARB: " << error << LL_ENDL;
593 } 578 }
594 else 579 else
595 { 580 {
@@ -598,7 +583,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
598 error = glGetError(); 583 error = glGetError();
599 if (error != GL_NO_ERROR) 584 if (error != GL_NO_ERROR)
600 { 585 {
601 llwarns << "GL ERROR in glCompileShaderARB: " << error << llendl; 586 LL_WARNS("ShaderLoading") << "GL ERROR in glCompileShaderARB: " << error << LL_ENDL;
602 } 587 }
603 } 588 }
604 } 589 }
@@ -616,7 +601,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
616 if (error != GL_NO_ERROR || success == GL_FALSE) 601 if (error != GL_NO_ERROR || success == GL_FALSE)
617 { 602 {
618 //an error occured, print log 603 //an error occured, print log
619 llwarns << "GLSL Compilation Error: (" << error << ") in " << filename << llendl; 604 LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
620 dumpObjectLog(ret); 605 dumpObjectLog(ret);
621 ret = 0; 606 ret = 0;
622 } 607 }
@@ -641,7 +626,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
641 shader_level--; 626 shader_level--;
642 return loadShaderFile(filename,shader_level,type); 627 return loadShaderFile(filename,shader_level,type);
643 } 628 }
644 llwarns << "Failed to load " << filename << llendl; 629 LL_WARNS("ShaderLoading") << "Failed to load " << filename << LL_ENDL;
645 } 630 }
646 return ret; 631 return ret;
647} 632}
@@ -655,7 +640,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
655 if (!suppress_errors && success == GL_FALSE) 640 if (!suppress_errors && success == GL_FALSE)
656 { 641 {
657 //an error occured, print log 642 //an error occured, print log
658 llwarns << "GLSL Linker Error:" << llendl; 643 LL_WARNS("ShaderLoading") << "GLSL Linker Error:" << LL_ENDL;
659 } 644 }
660 645
661// NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer, 646// NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer,
@@ -675,7 +660,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
675 CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing); 660 CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing);
676 if (!fragmentGPUProcessing || !vertexGPUProcessing) 661 if (!fragmentGPUProcessing || !vertexGPUProcessing)
677 { 662 {
678 llwarns << "GLSL Linker: Running in Software:" << llendl; 663 LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL;
679 success = GL_FALSE; 664 success = GL_FALSE;
680 suppress_errors = FALSE; 665 suppress_errors = FALSE;
681 } 666 }
@@ -685,7 +670,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
685 LLString::toLower(log); 670 LLString::toLower(log);
686 if (log.find("software") != LLString::npos) 671 if (log.find("software") != LLString::npos)
687 { 672 {
688 llwarns << "GLSL Linker: Running in Software:" << llendl; 673 LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL;
689 success = GL_FALSE; 674 success = GL_FALSE;
690 suppress_errors = FALSE; 675 suppress_errors = FALSE;
691 } 676 }
@@ -706,7 +691,7 @@ BOOL LLShaderMgr::validateProgramObject(GLhandleARB obj)
706 glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success); 691 glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success);
707 if (success == GL_FALSE) 692 if (success == GL_FALSE)
708 { 693 {
709 llwarns << "GLSL program not valid: " << llendl; 694 LL_WARNS("ShaderLoading") << "GLSL program not valid: " << LL_ENDL;
710 dumpObjectLog(obj); 695 dumpObjectLog(obj);
711 } 696 }
712 else 697 else
@@ -757,7 +742,7 @@ void LLShaderMgr::setShaders()
757 gPipeline.setLightingDetail(-1); 742 gPipeline.setLightingDetail(-1);
758 743
759 // Shaders 744 // Shaders
760 llinfos << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << llendl; 745 LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL;
761 for (S32 i = 0; i < SHADER_COUNT; i++) 746 for (S32 i = 0; i < SHADER_COUNT; i++)
762 { 747 {
763 sVertexShaderLevel[i] = 0; 748 sVertexShaderLevel[i] = 0;
@@ -1625,7 +1610,7 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
1625 for ( ; fileIter != mShaderFiles.end(); fileIter++ ) 1610 for ( ; fileIter != mShaderFiles.end(); fileIter++ )
1626 { 1611 {
1627 GLhandleARB shaderhandle = LLShaderMgr::loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second); 1612 GLhandleARB shaderhandle = LLShaderMgr::loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second);
1628 lldebugs << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << llendl; 1613 LL_DEBUGS("ShaderLoading") << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << LL_ENDL;
1629 if (mShaderLevel > 0) 1614 if (mShaderLevel > 0)
1630 { 1615 {
1631 attachObject(shaderhandle); 1616 attachObject(shaderhandle);
@@ -1647,12 +1632,12 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
1647 } 1632 }
1648 if( !success ) 1633 if( !success )
1649 { 1634 {
1650 llwarns << "Failed to link shader: " << mName << llendl; 1635 LL_WARNS("ShaderLoading") << "Failed to link shader: " << mName << LL_ENDL;
1651 1636
1652 // Try again using a lower shader level; 1637 // Try again using a lower shader level;
1653 if (mShaderLevel > 0) 1638 if (mShaderLevel > 0)
1654 { 1639 {
1655 llwarns << "Failed to link using shader level " << mShaderLevel << ". Trying again using shader level " << (mShaderLevel - 1) << "." << llendl; 1640 LL_WARNS("ShaderLoading") << "Failed to link using shader level " << mShaderLevel << " trying again using shader level " << (mShaderLevel - 1) << LL_ENDL;
1656 mShaderLevel--; 1641 mShaderLevel--;
1657 return createShader(attributes,uniforms); 1642 return createShader(attributes,uniforms);
1658 } 1643 }
@@ -1671,7 +1656,7 @@ BOOL LLGLSLShader::attachObject(std::string object)
1671 } 1656 }
1672 else 1657 else
1673 { 1658 {
1674 llwarns << "Attempting to attach shader object that hasn't been compiled: " << object << llendl; 1659 LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
1675 return FALSE; 1660 return FALSE;
1676 } 1661 }
1677} 1662}
@@ -1686,7 +1671,7 @@ void LLGLSLShader::attachObject(GLhandleARB object)
1686 } 1671 }
1687 else 1672 else
1688 { 1673 {
1689 llwarns << "Attempting to attach non existing shader object. " << llendl; 1674 LL_WARNS("ShaderLoading") << "Attempting to attach non existing shader object. " << LL_ENDL;
1690 } 1675 }
1691} 1676}
1692 1677
@@ -1718,7 +1703,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
1718 if (index != -1) 1703 if (index != -1)
1719 { 1704 {
1720 mAttribute[i] = index; 1705 mAttribute[i] = index;
1721 // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; 1706 LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL;
1722 } 1707 }
1723 } 1708 }
1724 if (attributes != NULL) 1709 if (attributes != NULL)
@@ -1730,7 +1715,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
1730 if (index != -1) 1715 if (index != -1)
1731 { 1716 {
1732 mAttribute[LLShaderMgr::sReservedAttribs.size() + i] = index; 1717 mAttribute[LLShaderMgr::sReservedAttribs.size() + i] = index;
1733 // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; 1718 LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL;
1734 } 1719 }
1735 } 1720 }
1736 } 1721 }
@@ -1759,9 +1744,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)
1759 if (location != -1) 1744 if (location != -1)
1760 { 1745 {
1761 mUniformMap[name] = location; 1746 mUniformMap[name] = location;
1762#if 0 // !LL_RELEASE_FOR_DOWNLOAD 1747 LL_DEBUGS("ShaderLoading") << "Uniform " << name << " is at location " << location << LL_ENDL;
1763 llinfos << "Uniform " << name << " is at location " << location << llendl;
1764#endif
1765 1748
1766 //find the index of this uniform 1749 //find the index of this uniform
1767 for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniforms.size(); i++) 1750 for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniforms.size(); i++)
@@ -1798,7 +1781,7 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)
1798 if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB) 1781 if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB)
1799 { //this here is a texture 1782 { //this here is a texture
1800 glUniform1iARB(location, mActiveTextureChannels); 1783 glUniform1iARB(location, mActiveTextureChannels);
1801 llinfos << "Assigned to texture channel " << mActiveTextureChannels << llendl; 1784 LL_DEBUGS("ShaderLoading") << "Assigned to texture channel " << mActiveTextureChannels << LL_ENDL;
1802 return mActiveTextureChannels++; 1785 return mActiveTextureChannels++;
1803 } 1786 }
1804 return -1; 1787 return -1;
@@ -1866,17 +1849,22 @@ void LLGLSLShader::unbind()
1866 } 1849 }
1867} 1850}
1868 1851
1852void LLGLSLShader::bindNoShader(void)
1853{
1854 glUseProgramObjectARB(0);
1855}
1856
1869S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode) 1857S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode)
1870{ 1858{
1871 if (uniform < 0 || uniform >= (S32)mTexture.size()) 1859 if (uniform < 0 || uniform >= (S32)mTexture.size())
1872 { 1860 {
1873 UNIFORM_ERRS << "LLGLSLShader::enableTexture: uniform out of range: " << uniform << llendl; 1861 UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
1874 return -1; 1862 return -1;
1875 } 1863 }
1876 S32 index = mTexture[uniform]; 1864 S32 index = mTexture[uniform];
1877 if (index != -1) 1865 if (index != -1)
1878 { 1866 {
1879 glActiveTextureARB(GL_TEXTURE0_ARB+index); 1867 gGL.getTexUnit(index)->activate();
1880 glEnable(mode); 1868 glEnable(mode);
1881 } 1869 }
1882 return index; 1870 return index;
@@ -1886,13 +1874,13 @@ S32 LLGLSLShader::disableTexture(S32 uniform, S32 mode)
1886{ 1874{
1887 if (uniform < 0 || uniform >= (S32)mTexture.size()) 1875 if (uniform < 0 || uniform >= (S32)mTexture.size())
1888 { 1876 {
1889 UNIFORM_ERRS << "LLGLSLShader::disableTexture: uniform out of range: " << uniform << llendl; 1877 UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
1890 return -1; 1878 return -1;
1891 } 1879 }
1892 S32 index = mTexture[uniform]; 1880 S32 index = mTexture[uniform];
1893 if (index != -1) 1881 if (index != -1)
1894 { 1882 {
1895 glActiveTextureARB(GL_TEXTURE0_ARB+index); 1883 gGL.getTexUnit(index)->activate();
1896 glDisable(mode); 1884 glDisable(mode);
1897 } 1885 }
1898 return index; 1886 return index;
@@ -1904,7 +1892,7 @@ void LLGLSLShader::uniform1f(U32 index, GLfloat x)
1904 { 1892 {
1905 if (mUniform.size() <= index) 1893 if (mUniform.size() <= index)
1906 { 1894 {
1907 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1895 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1908 return; 1896 return;
1909 } 1897 }
1910 1898
@@ -1926,7 +1914,7 @@ void LLGLSLShader::uniform2f(U32 index, GLfloat x, GLfloat y)
1926 { 1914 {
1927 if (mUniform.size() <= index) 1915 if (mUniform.size() <= index)
1928 { 1916 {
1929 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1917 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1930 return; 1918 return;
1931 } 1919 }
1932 1920
@@ -1949,7 +1937,7 @@ void LLGLSLShader::uniform3f(U32 index, GLfloat x, GLfloat y, GLfloat z)
1949 { 1937 {
1950 if (mUniform.size() <= index) 1938 if (mUniform.size() <= index)
1951 { 1939 {
1952 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1940 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1953 return; 1941 return;
1954 } 1942 }
1955 1943
@@ -1972,7 +1960,7 @@ void LLGLSLShader::uniform4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat
1972 { 1960 {
1973 if (mUniform.size() <= index) 1961 if (mUniform.size() <= index)
1974 { 1962 {
1975 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1963 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1976 return; 1964 return;
1977 } 1965 }
1978 1966
@@ -1995,7 +1983,7 @@ void LLGLSLShader::uniform1fv(U32 index, U32 count, const GLfloat* v)
1995 { 1983 {
1996 if (mUniform.size() <= index) 1984 if (mUniform.size() <= index)
1997 { 1985 {
1998 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1986 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1999 return; 1987 return;
2000 } 1988 }
2001 1989
@@ -2018,7 +2006,7 @@ void LLGLSLShader::uniform2fv(U32 index, U32 count, const GLfloat* v)
2018 { 2006 {
2019 if (mUniform.size() <= index) 2007 if (mUniform.size() <= index)
2020 { 2008 {
2021 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2009 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2022 return; 2010 return;
2023 } 2011 }
2024 2012
@@ -2041,7 +2029,7 @@ void LLGLSLShader::uniform3fv(U32 index, U32 count, const GLfloat* v)
2041 { 2029 {
2042 if (mUniform.size() <= index) 2030 if (mUniform.size() <= index)
2043 { 2031 {
2044 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2032 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2045 return; 2033 return;
2046 } 2034 }
2047 2035
@@ -2064,7 +2052,7 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
2064 { 2052 {
2065 if (mUniform.size() <= index) 2053 if (mUniform.size() <= index)
2066 { 2054 {
2067 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2055 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2068 return; 2056 return;
2069 } 2057 }
2070 2058
@@ -2087,7 +2075,7 @@ void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, c
2087 { 2075 {
2088 if (mUniform.size() <= index) 2076 if (mUniform.size() <= index)
2089 { 2077 {
2090 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2078 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2091 return; 2079 return;
2092 } 2080 }
2093 2081
@@ -2104,7 +2092,7 @@ void LLGLSLShader::uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, c
2104 { 2092 {
2105 if (mUniform.size() <= index) 2093 if (mUniform.size() <= index)
2106 { 2094 {
2107 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2095 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2108 return; 2096 return;
2109 } 2097 }
2110 2098
@@ -2121,7 +2109,7 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c
2121 { 2109 {
2122 if (mUniform.size() <= index) 2110 if (mUniform.size() <= index)
2123 { 2111 {
2124 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2112 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2125 return; 2113 return;
2126 } 2114 }
2127 2115
diff --git a/linden/indra/newview/llglslshader.h b/linden/indra/newview/llglslshader.h
index f3f83da..e517b94 100644
--- a/linden/indra/newview/llglslshader.h
+++ b/linden/indra/newview/llglslshader.h
@@ -118,6 +118,9 @@ public:
118 void bind(); 118 void bind();
119 void unbind(); 119 void unbind();
120 120
121 // Unbinds any previously bound shader by explicitly binding no shader.
122 static void bindNoShader(void);
123
121 GLhandleARB mProgramObject; 124 GLhandleARB mProgramObject;
122 std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel 125 std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel
123 std::vector<GLint> mUniform; //lookup table of uniform enum to uniform location 126 std::vector<GLint> mUniform; //lookup table of uniform enum to uniform location
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index 5b6c3ca..d760e8b 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -217,8 +217,8 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
217 LLFontGL::sSansSerif, 217 LLFontGL::sSansSerif,
218 FALSE); 218 FALSE);
219 219
220 LLStyle headerstyle(true,LLColor4::black,"SansSerifBig"); 220 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig"));
221 LLStyle datestyle(true,LLColor4::black,"serif"); 221 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif"));
222 222
223 text->appendStyledText(subject,false,false,&headerstyle); 223 text->appendStyledText(subject,false,false,&headerstyle);
224 text->appendStyledText(time_buf,false,false,&datestyle); 224 text->appendStyledText(time_buf,false,false,&datestyle);
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index 6cc3873..082f413 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -38,7 +38,7 @@
38#include "llfontgl.h" 38#include "llfontgl.h"
39#include "message.h" 39#include "message.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "llfontgl.h" 42#include "llfontgl.h"
43#include "llparcel.h" 43#include "llparcel.h"
44#include "lldbstrings.h" 44#include "lldbstrings.h"
@@ -52,6 +52,7 @@
52#include "llpermissions.h" 52#include "llpermissions.h"
53#include "llresmgr.h" 53#include "llresmgr.h"
54#include "llselectmgr.h" 54#include "llselectmgr.h"
55#include "lltrans.h"
55#include "lltoolmgr.h" 56#include "lltoolmgr.h"
56#include "lltoolpie.h" 57#include "lltoolpie.h"
57#include "lltoolselectland.h" 58#include "lltoolselectland.h"
@@ -254,7 +255,7 @@ void LLHoverView::updateText()
254 } 255 }
255 else 256 else
256 { 257 {
257 line.append("Person"); 258 line.append(LLTrans::getString("TooltipPerson"));
258 } 259 }
259 mText.push_back(line); 260 mText.push_back(line);
260 } 261 }
@@ -275,7 +276,7 @@ void LLHoverView::updateText()
275 line.clear(); 276 line.clear();
276 if (nodep->mName.empty()) 277 if (nodep->mName.empty())
277 { 278 {
278 line.append("(no name)"); 279 line.append(LLTrans::getString("TooltipNoName"));
279 } 280 }
280 else 281 else
281 { 282 {
@@ -291,7 +292,7 @@ void LLHoverView::updateText()
291 292
292 // Line: "Owner: James Linden" 293 // Line: "Owner: James Linden"
293 line.clear(); 294 line.clear();
294 line.append("Owner: "); 295 line.append(LLTrans::getString("TooltipOwner") + " ");
295 296
296 if (nodep->mValid) 297 if (nodep->mValid)
297 { 298 {
@@ -302,7 +303,7 @@ void LLHoverView::updateText()
302 owner = nodep->mPermissions->getOwner(); 303 owner = nodep->mPermissions->getOwner();
303 if (LLUUID::null == owner) 304 if (LLUUID::null == owner)
304 { 305 {
305 line.append("Public"); 306 line.append(LLTrans::getString("TooltipPublic"));
306 } 307 }
307 else if(gCacheName->getFullName(owner, name)) 308 else if(gCacheName->getFullName(owner, name))
308 { 309 {
@@ -310,7 +311,7 @@ void LLHoverView::updateText()
310 } 311 }
311 else 312 else
312 { 313 {
313 line.append("Retrieving..."); 314 line.append(LLTrans::getString("RetrievingData"));
314 } 315 }
315 } 316 }
316 else 317 else
@@ -320,17 +321,17 @@ void LLHoverView::updateText()
320 if (gCacheName->getGroupName(owner, name)) 321 if (gCacheName->getGroupName(owner, name))
321 { 322 {
322 line.append(name); 323 line.append(name);
323 line.append("(Group)"); 324 line.append(LLTrans::getString("TooltipIsGroup"));
324 } 325 }
325 else 326 else
326 { 327 {
327 line.append("Retrieving..."); 328 line.append(LLTrans::getString("RetrievingData"));
328 } 329 }
329 } 330 }
330 } 331 }
331 else 332 else
332 { 333 {
333 line.append("Retrieving..."); 334 line.append(LLTrans::getString("RetrievingData"));
334 } 335 }
335 mText.push_back(line); 336 mText.push_back(line);
336 337
@@ -350,47 +351,48 @@ void LLHoverView::updateText()
350 line.clear(); 351 line.clear();
351 if (object->flagScripted()) 352 if (object->flagScripted())
352 { 353 {
353 line.append("Script "); 354
355 line.append(LLTrans::getString("TooltipFlagScript") + " ");
354 } 356 }
355 357
356 if (object->usePhysics()) 358 if (object->usePhysics())
357 { 359 {
358 line.append("Physics "); 360 line.append(LLTrans::getString("TooltipFlagPhysics") + " ");
359 } 361 }
360 362
361 if (object->flagHandleTouch() || (parent && parent->flagHandleTouch()) ) 363 if (object->flagHandleTouch() || (parent && parent->flagHandleTouch()) )
362 { 364 {
363 line.append("Touch "); 365 line.append(LLTrans::getString("TooltipFlagTouch") + " ");
364 suppressObjectHoverDisplay = FALSE; // Show tip 366 suppressObjectHoverDisplay = FALSE; // Show tip
365 } 367 }
366 368
367 if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) ) 369 if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) )
368 { 370 {
369 line.append("L$ "); 371 line.append(LLTrans::getString("TooltipFlagL$") + " ");
370 suppressObjectHoverDisplay = FALSE; // Show tip 372 suppressObjectHoverDisplay = FALSE; // Show tip
371 } 373 }
372 374
373 if (object->flagAllowInventoryAdd()) 375 if (object->flagAllowInventoryAdd())
374 { 376 {
375 line.append("Drop Inventory "); 377 line.append(LLTrans::getString("TooltipFlagDropInventory") + " ");
376 suppressObjectHoverDisplay = FALSE; // Show tip 378 suppressObjectHoverDisplay = FALSE; // Show tip
377 } 379 }
378 380
379 if (object->flagPhantom()) 381 if (object->flagPhantom())
380 { 382 {
381 line.append("Phantom "); 383 line.append(LLTrans::getString("TooltipFlagPhantom") + " ");
382 } 384 }
383 385
384 if (object->flagTemporary()) 386 if (object->flagTemporary())
385 { 387 {
386 line.append("Temporary "); 388 line.append(LLTrans::getString("TooltipFlagTemporary") + " ");
387 } 389 }
388 390
389 if (object->usePhysics() || 391 if (object->usePhysics() ||
390 object->flagHandleTouch() || 392 object->flagHandleTouch() ||
391 (parent && parent->flagHandleTouch()) ) 393 (parent && parent->flagHandleTouch()) )
392 { 394 {
393 line.append("(Right-click for menu) "); 395 line.append(LLTrans::getString("TooltipFlagRightClickMenu") + " ");
394 } 396 }
395 mText.push_back(line); 397 mText.push_back(line);
396 } 398 }
@@ -406,12 +408,14 @@ void LLHoverView::updateText()
406 nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY); 408 nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY);
407 if (for_copy) 409 if (for_copy)
408 { 410 {
409 line.append("Free to copy"); 411 line.append(LLTrans::getString("TooltipFreeToCopy"));
410 suppressObjectHoverDisplay = FALSE; // Show tip 412 suppressObjectHoverDisplay = FALSE; // Show tip
411 } 413 }
412 else if (for_sale) 414 else if (for_sale)
413 { 415 {
414 line.append(llformat("For Sale: L$%d", nodep->mSaleInfo.getSalePrice())); 416 LLString::format_map_t args;
417 args["[AMOUNT]"] = nodep->mSaleInfo.getSalePrice();
418 line.append(LLTrans::getString("TooltipForSaleL$", args));
415 suppressObjectHoverDisplay = FALSE; // Show tip 419 suppressObjectHoverDisplay = FALSE; // Show tip
416 } 420 }
417 else 421 else
@@ -422,7 +426,9 @@ void LLHoverView::updateText()
422 } 426 }
423 else 427 else
424 { 428 {
425 line.append("For Sale: Retrieving..."); 429 LLString::format_map_t args;
430 args["[MESSAGE]"] = LLTrans::getString("RetrievingData");
431 line.append(LLTrans::getString("TooltipForSaleMsg", args));
426 } 432 }
427 mText.push_back(line); 433 mText.push_back(line);
428 } 434 }
@@ -459,7 +465,7 @@ void LLHoverView::updateText()
459 465
460 // Line: "Land" 466 // Line: "Land"
461 line.clear(); 467 line.clear();
462 line.append("Land: "); 468 line.append(LLTrans::getString("TooltipLand"));
463 if (hover_parcel) 469 if (hover_parcel)
464 { 470 {
465 line.append(hover_parcel->getName()); 471 line.append(hover_parcel->getName());
@@ -468,25 +474,25 @@ void LLHoverView::updateText()
468 474
469 // Line: "Owner: James Linden" 475 // Line: "Owner: James Linden"
470 line.clear(); 476 line.clear();
471 line.append("Owner: "); 477 line.append(LLTrans::getString("TooltipOwner") + " ");
472 478
473 if ( hover_parcel ) 479 if ( hover_parcel )
474 { 480 {
475 std::string name; 481 std::string name;
476 if (LLUUID::null == owner) 482 if (LLUUID::null == owner)
477 { 483 {
478 line.append("Public"); 484 line.append(LLTrans::getString("TooltipPublic"));
479 } 485 }
480 else if (hover_parcel->getIsGroupOwned()) 486 else if (hover_parcel->getIsGroupOwned())
481 { 487 {
482 if (gCacheName->getGroupName(owner, name)) 488 if (gCacheName->getGroupName(owner, name))
483 { 489 {
484 line.append(name); 490 line.append(name);
485 line.append("(Group)"); 491 line.append(LLTrans::getString("TooltipIsGroup"));
486 } 492 }
487 else 493 else
488 { 494 {
489 line.append("Retrieving..."); 495 line.append(LLTrans::getString("RetrievingData"));
490 } 496 }
491 } 497 }
492 else if(gCacheName->getFullName(owner, name)) 498 else if(gCacheName->getFullName(owner, name))
@@ -495,12 +501,12 @@ void LLHoverView::updateText()
495 } 501 }
496 else 502 else
497 { 503 {
498 line.append("Retrieving..."); 504 line.append(LLTrans::getString("RetrievingData"));
499 } 505 }
500 } 506 }
501 else 507 else
502 { 508 {
503 line.append("Retrieving..."); 509 line.append(LLTrans::getString("RetrievingData"));
504 } 510 }
505 mText.push_back(line); 511 mText.push_back(line);
506 512
@@ -519,27 +525,26 @@ void LLHoverView::updateText()
519 { 525 {
520 if ( hover_parcel->getAllowGroupModify() ) 526 if ( hover_parcel->getAllowGroupModify() )
521 { 527 {
522 line.append("Group Build"); 528 line.append(LLTrans::getString("TooltipFlagGroupBuild"));
523 } 529 }
524 else 530 else
525 { 531 {
526 line.append("No Build"); 532 line.append(LLTrans::getString("TooltipFlagNoBuild"));
527 } 533 }
528
529 words++; 534 words++;
530 } 535 }
531 536
532 if ( !hover_parcel->getAllowTerraform() ) 537 if ( !hover_parcel->getAllowTerraform() )
533 { 538 {
534 if (words) line.append(", "); 539 if (words) line.append(", ");
535 line.append("No Edit"); 540 line.append(LLTrans::getString("TooltipFlagNoEdit"));
536 words++; 541 words++;
537 } 542 }
538 543
539 if ( hover_parcel->getAllowDamage() ) 544 if ( hover_parcel->getAllowDamage() )
540 { 545 {
541 if (words) line.append(", "); 546 if (words) line.append(", ");
542 line.append("Not Safe"); 547 line.append(LLTrans::getString("TooltipFlagNotSafe"));
543 words++; 548 words++;
544 } 549 }
545 550
@@ -547,7 +552,7 @@ void LLHoverView::updateText()
547 if ( !hover_parcel->getAllowFly() ) 552 if ( !hover_parcel->getAllowFly() )
548 { 553 {
549 if (words) line.append(", "); 554 if (words) line.append(", ");
550 line.append("No Fly"); 555 line.append(LLTrans::getString("TooltipFlagNoFly"));
551 words++; 556 words++;
552 } 557 }
553 558
@@ -556,11 +561,11 @@ void LLHoverView::updateText()
556 if (words) line.append(", "); 561 if (words) line.append(", ");
557 if ( hover_parcel->getAllowGroupScripts() ) 562 if ( hover_parcel->getAllowGroupScripts() )
558 { 563 {
559 line.append("Group Scripts"); 564 line.append(LLTrans::getString("TooltipFlagGroupScripts"));
560 } 565 }
561 else 566 else
562 { 567 {
563 line.append("No Scripts"); 568 line.append(LLTrans::getString("TooltipFlagNoScripts"));
564 } 569 }
565 570
566 words++; 571 words++;
@@ -583,7 +588,9 @@ void LLHoverView::updateText()
583 */ 588 */
584 if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE)) 589 if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE))
585 { 590 {
586 line = llformat("For Sale: L$%d", hover_parcel->getSalePrice() ); 591 LLString::format_map_t args;
592 args["[AMOUNT]"] = hover_parcel->getSalePrice();
593 line = LLTrans::getString("TooltipForSaleL$", args);
587 mText.push_back(line); 594 mText.push_back(line);
588 } 595 }
589 } 596 }
diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp
index 92e7fdf..88ad5d6 100644
--- a/linden/indra/newview/llhudeffectlookat.cpp
+++ b/linden/indra/newview/llhudeffectlookat.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llhudeffectlookat.h" 34#include "llhudeffectlookat.h"
35 35
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38#include "message.h" 38#include "message.h"
39#include "llagent.h" 39#include "llagent.h"
diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp
index d42eeb5..8cd1023 100644
--- a/linden/indra/newview/llhudeffectpointat.cpp
+++ b/linden/indra/newview/llhudeffectpointat.cpp
@@ -34,7 +34,7 @@
34#include "llhudeffectpointat.h" 34#include "llhudeffectpointat.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38 38
39#include "llagent.h" 39#include "llagent.h"
40#include "lldrawable.h" 40#include "lldrawable.h"
diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp
index 010e85f..85cc996 100644
--- a/linden/indra/newview/llhudicon.cpp
+++ b/linden/indra/newview/llhudicon.cpp
@@ -34,7 +34,7 @@
34#include "llhudicon.h" 34#include "llhudicon.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38 38
39#include "llviewerobject.h" 39#include "llviewerobject.h"
40#include "lldrawable.h" 40#include "lldrawable.h"
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp
index f8eddc7..26df22a 100644
--- a/linden/indra/newview/llhudtext.cpp
+++ b/linden/indra/newview/llhudtext.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llhudtext.h" 34#include "llhudtext.h"
35 35
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38#include "llagent.h" 38#include "llagent.h"
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
@@ -308,7 +308,6 @@ void LLHUDText::renderText(BOOL for_select)
308 } 308 }
309 LLUI::popMatrix(); 309 LLUI::popMatrix();
310 310
311
312 LLImageGL::unbindTexture(0); 311 LLImageGL::unbindTexture(0);
313 LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE); 312 LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
314 313
@@ -375,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select)
375 374
376 // Render label 375 // Render label
377 { 376 {
378 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 377 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
379 378
380 for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin(); 379 for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
381 segment_iter != mLabelSegments.end(); ++segment_iter ) 380 segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 3cb9dfb..2e3682d 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -48,16 +48,19 @@
48#include "llchat.h" 48#include "llchat.h"
49#include "llconsole.h" 49#include "llconsole.h"
50#include "llfloater.h" 50#include "llfloater.h"
51#include "llfloatergroupinfo.h"
52#include "llimview.h"
51#include "llinventory.h" 53#include "llinventory.h"
52#include "llinventorymodel.h" 54#include "llinventorymodel.h"
53#include "llinventoryview.h" 55#include "llinventoryview.h"
56#include "llfloateractivespeakers.h"
54#include "llfloateravatarinfo.h" 57#include "llfloateravatarinfo.h"
55#include "llfloaterchat.h" 58#include "llfloaterchat.h"
56#include "llkeyboard.h" 59#include "llkeyboard.h"
57#include "lllineeditor.h" 60#include "lllineeditor.h"
61#include "llnotify.h"
58#include "llresmgr.h" 62#include "llresmgr.h"
59#include "lltabcontainer.h" 63#include "lltabcontainer.h"
60#include "llimview.h"
61#include "llviewertexteditor.h" 64#include "llviewertexteditor.h"
62#include "llviewermessage.h" 65#include "llviewermessage.h"
63#include "llviewerstats.h" 66#include "llviewerstats.h"
@@ -68,11 +71,8 @@
68#include "llfloaterhtml.h" 71#include "llfloaterhtml.h"
69#include "llweb.h" 72#include "llweb.h"
70#include "llhttpclient.h" 73#include "llhttpclient.h"
71#include "llfloateractivespeakers.h" // LLSpeakerMgr
72#include "llfloatergroupinfo.h"
73#include "llsdutil.h"
74#include "llnotify.h"
75#include "llmutelist.h" 74#include "llmutelist.h"
75#include "llstylemap.h"
76 76
77// 77//
78// Constants 78// Constants
@@ -1454,24 +1454,20 @@ BOOL LLFloaterIMPanel::inviteToSession(const LLDynamicArray<LLUUID>& ids)
1454 return TRUE; 1454 return TRUE;
1455} 1455}
1456 1456
1457void LLFloaterIMPanel::addHistoryLine(const LLUUID& source, const std::string &utf8msg, const LLColor4& color, bool log_to_file) 1457void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file, const LLUUID& source, const char *name)
1458{ 1458{
1459 // start tab flashing when receiving im for background session from user 1459 // start tab flashing when receiving im for background session from user
1460 LLMultiFloater* hostp = getHost(); 1460 if (source != LLUUID::null)
1461 if( !isInVisibleChain()
1462 && hostp
1463 && source != gAgent.getID())
1464 { 1461 {
1465 hostp->setFloaterFlashing(this, TRUE); 1462 LLMultiFloater* hostp = getHost();
1463 if( !isInVisibleChain()
1464 && hostp
1465 && source != gAgent.getID())
1466 {
1467 hostp->setFloaterFlashing(this, TRUE);
1468 }
1466 } 1469 }
1467 1470
1468 addHistoryLine(utf8msg, color, log_to_file);
1469 mSpeakers->speakerChatted(source);
1470 mSpeakers->setSpeakerTyping(source, FALSE);
1471}
1472
1473void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file)
1474{
1475 // Now we're adding the actual line of text, so erase the 1471 // Now we're adding the actual line of text, so erase the
1476 // "Foo is typing..." text segment, and the optional timestamp 1472 // "Foo is typing..." text segment, and the optional timestamp
1477 // if it was present. JC 1473 // if it was present. JC
@@ -1485,6 +1481,22 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1485 timestring = mHistoryEditor->appendTime(prepend_newline); 1481 timestring = mHistoryEditor->appendTime(prepend_newline);
1486 prepend_newline = false; 1482 prepend_newline = false;
1487 } 1483 }
1484
1485 // 'name' is a sender name that we want to hotlink so that clicking on it opens a profile.
1486 if (name != NULL) // If name exists, then add it to the front of the message.
1487 {
1488 // Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
1489 if (!strcmp(name,SYSTEM_FROM))
1490 {
1491 mHistoryEditor->appendColoredText(name,false,false,color);
1492 }
1493 else
1494 {
1495 // Convert the name to a hotlink and add to message.
1496 const LLStyleSP &source_style = LLStyleMap::instance().lookup(source);
1497 mHistoryEditor->appendStyledText(name, false, false, &source_style);
1498 }
1499 }
1488 mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color); 1500 mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
1489 1501
1490 if (log_to_file 1502 if (log_to_file
@@ -1492,9 +1504,9 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1492 { 1504 {
1493 LLString histstr; 1505 LLString histstr;
1494 if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp")) 1506 if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp"))
1495 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + utf8msg; 1507 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + LLString(name) + utf8msg;
1496 else 1508 else
1497 histstr = utf8msg; 1509 histstr = LLString(name) + utf8msg;
1498 1510
1499 LLLogChat::saveHistory(getTitle(),histstr); 1511 LLLogChat::saveHistory(getTitle(),histstr);
1500 } 1512 }
@@ -1503,6 +1515,12 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1503 { 1515 {
1504 mNumUnreadMessages++; 1516 mNumUnreadMessages++;
1505 } 1517 }
1518
1519 if (source != LLUUID::null)
1520 {
1521 mSpeakers->speakerChatted(source);
1522 mSpeakers->setSpeakerTyping(source, FALSE);
1523 }
1506} 1524}
1507 1525
1508 1526
@@ -1836,6 +1854,11 @@ void deliver_message(const std::string& utf8_text,
1836 (EInstantMessage)new_dialog, 1854 (EInstantMessage)new_dialog,
1837 im_session_id); 1855 im_session_id);
1838 gAgent.sendReliableMessage(); 1856 gAgent.sendReliableMessage();
1857
1858 if (LLMuteList::getInstance())
1859 {
1860 LLMuteList::getInstance()->autoRemove(other_participant_id, LLMuteList::AR_IM);
1861 }
1839} 1862}
1840 1863
1841void LLFloaterIMPanel::sendMsg() 1864void LLFloaterIMPanel::sendMsg()
@@ -1888,7 +1911,7 @@ void LLFloaterIMPanel::sendMsg()
1888 1911
1889 BOOL other_was_typing = mOtherTyping; 1912 BOOL other_was_typing = mOtherTyping;
1890 1913
1891 addHistoryLine(gAgent.getID(), history_echo, gSavedSettings.getColor("IMChatColor")); 1914 addHistoryLine(history_echo, gSavedSettings.getColor("IMChatColor"), true, gAgent.getID());
1892 1915
1893 if (other_was_typing) 1916 if (other_was_typing)
1894 { 1917 {
@@ -2189,4 +2212,3 @@ void LLFloaterIMPanel::onConfirmForceCloseError(S32 option, void* data)
2189} 2212}
2190 2213
2191 2214
2192
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index 16d4042..2ed866b 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -38,6 +38,7 @@
38#include "lldarray.h" 38#include "lldarray.h"
39#include "llinstantmessage.h" 39#include "llinstantmessage.h"
40#include "llvoiceclient.h" 40#include "llvoiceclient.h"
41#include "llstyle.h"
41 42
42class LLLineEditor; 43class LLLineEditor;
43class LLViewerTextEditor; 44class LLViewerTextEditor;
@@ -202,13 +203,12 @@ public:
202 // Return TRUE if successful, otherwise FALSE. 203 // Return TRUE if successful, otherwise FALSE.
203 BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids); 204 BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids);
204 205
205 void addHistoryLine(const LLUUID& source,
206 const std::string &utf8msg,
207 const LLColor4& color = LLColor4::white,
208 bool log_to_file = true);
209 void addHistoryLine(const std::string &utf8msg, 206 void addHistoryLine(const std::string &utf8msg,
210 const LLColor4& color = LLColor4::white, 207 const LLColor4& color = LLColor4::white,
211 bool log_to_file = true); 208 bool log_to_file = true,
209 const LLUUID& source = LLUUID::null,
210 const char *name = NULL);
211
212 void setInputFocus( BOOL b ); 212 void setInputFocus( BOOL b );
213 213
214 void selectAll(); 214 void selectAll();
@@ -357,6 +357,9 @@ private:
357 LLFrameTimer mLastKeystrokeTimer; 357 LLFrameTimer mLastKeystrokeTimer;
358 358
359 void disableWhileSessionStarting(); 359 void disableWhileSessionStarting();
360
361 typedef std::map<LLUUID, LLStyleSP> styleMap;
362 static styleMap mStyleMap;
360}; 363};
361 364
362 365
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index e451388..797c2a4 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -83,6 +83,7 @@ LLIMMgr* gIMMgr = NULL;
83// *FIXME: make these all either UIStrings or Strings 83// *FIXME: make these all either UIStrings or Strings
84static LLString sOnlyUserMessage; 84static LLString sOnlyUserMessage;
85static LLUIString sOfflineMessage; 85static LLUIString sOfflineMessage;
86static LLString sMutedMessage;
86static LLUIString sInviteMessage; 87static LLUIString sInviteMessage;
87 88
88std::map<std::string,LLString> LLFloaterIM::sEventStringsMap; 89std::map<std::string,LLString> LLFloaterIM::sEventStringsMap;
@@ -161,6 +162,7 @@ BOOL LLFloaterIM::postBuild()
161 sOfflineMessage = getUIString("offline_message"); 162 sOfflineMessage = getUIString("offline_message");
162 163
163 sInviteMessage = getUIString("invite_message"); 164 sInviteMessage = getUIString("invite_message");
165 sMutedMessage = childGetText("muted_message");
164 166
165 if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() ) 167 if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() )
166 { 168 {
@@ -400,10 +402,10 @@ void LLIMMgr::addMessage(
400 EInstantMessage dialog, 402 EInstantMessage dialog,
401 U32 parent_estate_id, 403 U32 parent_estate_id,
402 const LLUUID& region_id, 404 const LLUUID& region_id,
403 const LLVector3& position) 405 const LLVector3& position,
406 bool link_name) // If this is true, then we insert the name and link it to a profile
404{ 407{
405 LLUUID other_participant_id = target_id; 408 LLUUID other_participant_id = target_id;
406 bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM);
407 409
408 // don't process muted IMs 410 // don't process muted IMs
409 if (LLMuteList::getInstance()->isMuted( 411 if (LLMuteList::getInstance()->isMuted(
@@ -420,8 +422,6 @@ void LLIMMgr::addMessage(
420 other_participant_id = LLUUID::null; 422 other_participant_id = LLUUID::null;
421 } 423 }
422 424
423
424
425 LLFloaterIMPanel* floater; 425 LLFloaterIMPanel* floater;
426 LLUUID new_session_id = session_id; 426 LLUUID new_session_id = session_id;
427 if (new_session_id.isNull()) 427 if (new_session_id.isNull())
@@ -482,15 +482,17 @@ void LLIMMgr::addMessage(
482 } 482 }
483 483
484 // now add message to floater 484 // now add message to floater
485 if ( is_from_system ) // chat came from system 485 bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM);
486 const LLColor4& color = ( is_from_system ?
487 gSavedSettings.getColor4("SystemChatColor") :
488 gSavedSettings.getColor("IMChatColor"));
489 if ( !link_name )
486 { 490 {
487 floater->addHistoryLine( 491 floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally
488 msg,
489 gSavedSettings.getColor4("SystemChatColor"));
490 } 492 }
491 else 493 else
492 { 494 {
493 floater->addHistoryLine(other_participant_id, msg, gSavedSettings.getColor("IMChatColor")); 495 floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
494 } 496 }
495 497
496 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD()); 498 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD());
@@ -615,6 +617,8 @@ LLUUID LLIMMgr::addSession(
615 617
616 noteOfflineUsers(floater, ids); 618 noteOfflineUsers(floater, ids);
617 LLFloaterChatterBox::showInstance(session_id); 619 LLFloaterChatterBox::showInstance(session_id);
620 noteMutedUsers(floater, ids);
621 LLFloaterChatterBox::getInstance(LLSD())->showFloater(floater);
618 } 622 }
619 else 623 else
620 { 624 {
@@ -659,6 +663,7 @@ LLUUID LLIMMgr::addSession(
659 663
660 noteOfflineUsers(floater, ids); 664 noteOfflineUsers(floater, ids);
661 LLFloaterChatterBox::showInstance(session_id); 665 LLFloaterChatterBox::showInstance(session_id);
666 noteMutedUsers(floater, ids);
662 } 667 }
663 else 668 else
664 { 669 {
@@ -1232,6 +1237,31 @@ void LLIMMgr::noteOfflineUsers(
1232 } 1237 }
1233} 1238}
1234 1239
1240void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
1241 const LLDynamicArray<LLUUID>& ids)
1242{
1243 S32 count = ids.count();
1244 if(count > 0)
1245 {
1246 const LLRelationship* info = NULL;
1247 LLAvatarTracker& at = LLAvatarTracker::instance();
1248 for(S32 i = 0; i < count; ++i)
1249 {
1250 info = at.getBuddyInfo(ids.get(i));
1251 char first[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
1252 char last[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
1253 if(info && LLMuteList::getInstance() && LLMuteList::getInstance()->isMuted(ids.get(i))
1254 && gCacheName->getName(ids.get(i), first, last))
1255 {
1256 LLUIString muted = sMutedMessage;
1257 muted.setArg("[FIRST]", first);
1258 muted.setArg("[LAST]", last);
1259 floater->addHistoryLine(muted);
1260 }
1261 }
1262 }
1263}
1264
1235void LLIMMgr::processIMTypingStart(const LLIMInfo* im_info) 1265void LLIMMgr::processIMTypingStart(const LLIMInfo* im_info)
1236{ 1266{
1237 processIMTypingCore(im_info, TRUE); 1267 processIMTypingCore(im_info, TRUE);
@@ -1520,8 +1550,7 @@ public:
1520 snprintf( 1550 snprintf(
1521 buffer, 1551 buffer,
1522 sizeof(buffer), 1552 sizeof(buffer),
1523 "%s%s%s%s", 1553 "%s%s%s",
1524 name.c_str(),
1525 separator_string, 1554 separator_string,
1526 saved, 1555 saved,
1527 (message.c_str() + message_offset)); /*Flawfinder: ignore*/ 1556 (message.c_str() + message_offset)); /*Flawfinder: ignore*/
@@ -1540,7 +1569,8 @@ public:
1540 IM_SESSION_INVITE, 1569 IM_SESSION_INVITE,
1541 message_params["parent_estate_id"].asInteger(), 1570 message_params["parent_estate_id"].asInteger(),
1542 message_params["region_id"].asUUID(), 1571 message_params["region_id"].asUUID(),
1543 ll_vector3_from_sd(message_params["position"])); 1572 ll_vector3_from_sd(message_params["position"]),
1573 true);
1544 1574
1545 snprintf( 1575 snprintf(
1546 buffer, 1576 buffer,
@@ -1628,4 +1658,3 @@ LLHTTPRegistration<LLViewerChatterBoxInvitation>
1628 gHTTPRegistrationMessageChatterBoxInvitation( 1658 gHTTPRegistrationMessageChatterBoxInvitation(
1629 "/message/ChatterBoxInvitation"); 1659 "/message/ChatterBoxInvitation");
1630 1660
1631
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h
index 44cb992..b2621e8 100644
--- a/linden/indra/newview/llimview.h
+++ b/linden/indra/newview/llimview.h
@@ -65,7 +65,8 @@ public:
65 EInstantMessage dialog = IM_NOTHING_SPECIAL, 65 EInstantMessage dialog = IM_NOTHING_SPECIAL,
66 U32 parent_estate_id = 0, 66 U32 parent_estate_id = 0,
67 const LLUUID& region_id = LLUUID::null, 67 const LLUUID& region_id = LLUUID::null,
68 const LLVector3& position = LLVector3::zero); 68 const LLVector3& position = LLVector3::zero,
69 bool link_name = false);
69 70
70 void addSystemMessage(const LLUUID& session_id, const LLString& message_name, const LLString::format_map_t& args); 71 void addSystemMessage(const LLUUID& session_id, const LLString& message_name, const LLString::format_map_t& args);
71 72
@@ -192,6 +193,7 @@ private:
192 // reduce 'hello' messages to the linden employees unlucky enough 193 // reduce 'hello' messages to the linden employees unlucky enough
193 // to have their calling card in the default inventory. 194 // to have their calling card in the default inventory.
194 void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); 195 void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
196 void noteMutedUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
195 197
196 void processIMTypingCore(const LLIMInfo* im_info, BOOL typing); 198 void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
197 199
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index e76c427..91bdb8d 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -1810,7 +1810,7 @@ bool LLInventoryModel::loadSkeleton(
1810 const S32 NO_VERSION = LLViewerInventoryCategory::VERSION_UNKNOWN; 1810 const S32 NO_VERSION = LLViewerInventoryCategory::VERSION_UNKNOWN;
1811 std::string gzip_filename(inventory_filename); 1811 std::string gzip_filename(inventory_filename);
1812 gzip_filename.append(".gz"); 1812 gzip_filename.append(".gz");
1813 FILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/ 1813 LLFILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/
1814 bool remove_inventory_file = false; 1814 bool remove_inventory_file = false;
1815 if(fp) 1815 if(fp)
1816 { 1816 {
@@ -2344,7 +2344,7 @@ bool LLInventoryModel::loadFromFile(
2344 return false; 2344 return false;
2345 } 2345 }
2346 llinfos << "LLInventoryModel::loadFromFile(" << filename << ")" << llendl; 2346 llinfos << "LLInventoryModel::loadFromFile(" << filename << ")" << llendl;
2347 FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 2347 LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
2348 if(!file) 2348 if(!file)
2349 { 2349 {
2350 llinfos << "unable to load inventory from: " << filename << llendl; 2350 llinfos << "unable to load inventory from: " << filename << llendl;
@@ -2417,7 +2417,7 @@ bool LLInventoryModel::saveToFile(
2417 return false; 2417 return false;
2418 } 2418 }
2419 llinfos << "LLInventoryModel::saveToFile(" << filename << ")" << llendl; 2419 llinfos << "LLInventoryModel::saveToFile(" << filename << ")" << llendl;
2420 FILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ 2420 LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
2421 if(!file) 2421 if(!file)
2422 { 2422 {
2423 llwarns << "unable to save inventory to: " << filename << llendl; 2423 llwarns << "unable to save inventory to: " << filename << llendl;
@@ -3692,7 +3692,7 @@ BOOL decompress_file(const char* src_filename, const char* dst_filename)
3692 BOOL rv = FALSE; 3692 BOOL rv = FALSE;
3693 gzFile src = NULL; 3693 gzFile src = NULL;
3694 U8* buffer = NULL; 3694 U8* buffer = NULL;
3695 FILE* dst = NULL; 3695 LLFILE* dst = NULL;
3696 S32 bytes = 0; 3696 S32 bytes = 0;
3697 const S32 DECOMPRESS_BUFFER_SIZE = 32000; 3697 const S32 DECOMPRESS_BUFFER_SIZE = 32000;
3698 3698
diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp
index 1978b78..3957b0a 100644
--- a/linden/indra/newview/lljoystickbutton.cpp
+++ b/linden/indra/newview/lljoystickbutton.cpp
@@ -36,7 +36,7 @@
36// Library includes 36// Library includes
37#include "llcoord.h" 37#include "llcoord.h"
38#include "indra_constants.h" 38#include "indra_constants.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40 40
41// Project includes 41// Project includes
42#include "llui.h" 42#include "llui.h"
diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp
index 7be9781..38c4869 100644
--- a/linden/indra/newview/lllogchat.cpp
+++ b/linden/indra/newview/lllogchat.cpp
@@ -76,7 +76,7 @@ void LLLogChat::saveHistory(LLString filename, LLString line)
76 return; 76 return;
77 } 77 }
78 78
79 FILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/ 79 LLFILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/
80 if (!fp) 80 if (!fp)
81 { 81 {
82 llinfos << "Couldn't open chat history log!" << llendl; 82 llinfos << "Couldn't open chat history log!" << llendl;
@@ -96,7 +96,7 @@ void LLLogChat::loadHistory(LLString filename , void (*callback)(ELogLineType,LL
96 llerrs << "Filename is Empty!" << llendl; 96 llerrs << "Filename is Empty!" << llendl;
97 } 97 }
98 98
99 FILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/ 99 LLFILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/
100 if (!fptr) 100 if (!fptr)
101 { 101 {
102 //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); 102 //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string");
diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp
index e0621a3..5c19685 100644
--- a/linden/indra/newview/llmanip.cpp
+++ b/linden/indra/newview/llmanip.cpp
@@ -36,7 +36,7 @@
36#include "llmath.h" 36#include "llmath.h"
37#include "v3math.h" 37#include "v3math.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llprimitive.h" 40#include "llprimitive.h"
41#include "llview.h" 41#include "llview.h"
42#include "llviewerimagelist.h" 42#include "llviewerimagelist.h"
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index 43a22e5..b60e29a 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -36,7 +36,7 @@
36// library includes 36// library includes
37#include "llmath.h" 37#include "llmath.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v4color.h" 40#include "v4color.h"
41#include "llprimitive.h" 41#include "llprimitive.h"
42#include "llview.h" 42#include "llview.h"
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index bb26484..d5ab7a1 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -38,7 +38,7 @@
38#include "v3math.h" 38#include "v3math.h"
39#include "llquaternion.h" 39#include "llquaternion.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "v4color.h" 42#include "v4color.h"
43#include "llprimitive.h" 43#include "llprimitive.h"
44 44
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index ac41068..7dbb470 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -38,7 +38,7 @@
38#include "llmaniptranslate.h" 38#include "llmaniptranslate.h"
39 39
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llbbox.h" 44#include "llbbox.h"
@@ -1535,10 +1535,10 @@ void LLManipTranslate::renderSnapGuides()
1535 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER); 1535 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER);
1536 glBindTexture(GL_TEXTURE_2D, sGridTex); 1536 glBindTexture(GL_TEXTURE_2D, sGridTex);
1537 gGL.flush(); 1537 gGL.flush();
1538 gGL.blendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 1538 gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
1539 renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f); 1539 renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f);
1540 gGL.flush(); 1540 gGL.flush();
1541 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1541 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1542 } 1542 }
1543 1543
1544 { 1544 {
@@ -1649,7 +1649,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
1649 LLGLEnable stencil(GL_STENCIL_TEST); 1649 LLGLEnable stencil(GL_STENCIL_TEST);
1650 LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS); 1650 LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS);
1651 glStencilFunc(GL_ALWAYS, 0, stencil_mask); 1651 glStencilFunc(GL_ALWAYS, 0, stencil_mask);
1652 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1652 gGL.setColorMask(false, false);
1653 LLImageGL::unbindTexture(0); 1653 LLImageGL::unbindTexture(0);
1654 glColor4f(1,1,1,1); 1654 glColor4f(1,1,1,1);
1655 1655
@@ -1700,7 +1700,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
1700 LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS); 1700 LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
1701 } 1701 }
1702 1702
1703 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1703 gGL.setColorMask(true, false);
1704 } 1704 }
1705 gGL.color4f(1,1,1,1); 1705 gGL.color4f(1,1,1,1);
1706 1706
diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp
index a19328a..ca38a9c 100644
--- a/linden/indra/newview/llmemoryview.cpp
+++ b/linden/indra/newview/llmemoryview.cpp
@@ -58,7 +58,7 @@ mDelay(120)
58 58
59#ifdef MEM_DUMP_DATA 59#ifdef MEM_DUMP_DATA
60 // clear out file. 60 // clear out file.
61 FILE *dump = fopen("memusagedump.txt", "w"); 61 LLFILE *dump = LLFile::fopen("memusagedump.txt", "w");
62 fclose(dump); 62 fclose(dump);
63#endif 63#endif
64} 64}
@@ -262,7 +262,7 @@ void LLMemoryView::dumpData()
262 // reset timer 262 // reset timer
263 mDumpTimer.reset(); 263 mDumpTimer.reset();
264 // append dump info to text file 264 // append dump info to text file
265 FILE *dump = fopen("memusagedump.txt", "a"); 265 LLFILE *dump = LLFile::fopen("memusagedump.txt", "a");
266 266
267 if (dump) 267 if (dump)
268 { 268 {
diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp
index c411ffe..75c7cce 100644
--- a/linden/indra/newview/llmutelist.cpp
+++ b/linden/indra/newview/llmutelist.cpp
@@ -62,6 +62,12 @@
62#include "llviewergenericmessage.h" // for gGenericDispatcher 62#include "llviewergenericmessage.h" // for gGenericDispatcher
63#include "llviewerwindow.h" 63#include "llviewerwindow.h"
64#include "llworld.h" //for particle system banning 64#include "llworld.h" //for particle system banning
65#include "llchat.h"
66#include "llfloaterchat.h"
67#include "llimpanel.h"
68#include "llimview.h"
69#include "llnotify.h"
70#include "lluistring.h"
65#include "llviewerobject.h" 71#include "llviewerobject.h"
66#include "llviewerobjectlist.h" 72#include "llviewerobjectlist.h"
67 73
@@ -437,6 +443,78 @@ void LLMuteList::updateRemove(const LLMute& mute)
437 gAgent.sendReliableMessage(); 443 gAgent.sendReliableMessage();
438} 444}
439 445
446void notify_automute_callback(const LLUUID& agent_id, const char* first_name, const char* last_name, BOOL is_group, void* user_data)
447{
448 U32 temp_data = (U32)user_data;
449 LLMuteList::EAutoReason reason = (LLMuteList::EAutoReason)temp_data;
450 LLUIString auto_message;
451
452 switch (reason)
453 {
454 default:
455 case LLMuteList::AR_IM:
456 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByIM");
457 break;
458 case LLMuteList::AR_INVENTORY:
459 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByInventory");
460 break;
461 case LLMuteList::AR_MONEY:
462 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByMoney");
463 break;
464 }
465
466 auto_message.setArg("[FIRST]", first_name);
467 auto_message.setArg("[LAST]", last_name);
468
469 if (reason == LLMuteList::AR_IM)
470 {
471 LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id);
472 if (timp)
473 {
474 timp->addHistoryLine(auto_message.getString());
475 }
476 }
477
478 LLChat auto_chat(auto_message.getString());
479 LLFloaterChat::addChat(auto_chat, FALSE, FALSE);
480}
481
482
483BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name, const LLString& last_name)
484{
485 BOOL removed = FALSE;
486
487 if (isMuted(agent_id))
488 {
489 LLMute automute(agent_id, "", LLMute::AGENT);
490 removed = TRUE;
491 remove(automute);
492
493 if (first_name.empty() && last_name.empty())
494 {
495 char cache_first[DB_FIRST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
496 char cache_last[DB_LAST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
497 if (gCacheName->getName(agent_id, cache_first, cache_last))
498 {
499 // name in cache, call callback directly
500 notify_automute_callback(agent_id, cache_first, cache_last, FALSE, (void *)reason);
501 }
502 else
503 {
504 // not in cache, lookup name from cache
505 gCacheName->get(agent_id, FALSE, notify_automute_callback, (void *)reason);
506 }
507 }
508 else
509 {
510 // call callback directly
511 notify_automute_callback(agent_id, first_name.c_str(), last_name.c_str(), FALSE, (void *)reason);
512 }
513 }
514
515 return removed;
516}
517
440 518
441std::vector<LLMute> LLMuteList::getMutes() const 519std::vector<LLMute> LLMuteList::getMutes() const
442{ 520{
@@ -472,7 +550,7 @@ BOOL LLMuteList::loadFromFile(const LLString& filename)
472 return FALSE; 550 return FALSE;
473 } 551 }
474 552
475 FILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/ 553 LLFILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/
476 if (!fp) 554 if (!fp)
477 { 555 {
478 llwarns << "Couldn't open mute list " << filename << llendl; 556 llwarns << "Couldn't open mute list " << filename << llendl;
@@ -522,7 +600,7 @@ BOOL LLMuteList::saveToFile(const LLString& filename)
522 return FALSE; 600 return FALSE;
523 } 601 }
524 602
525 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/ 603 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/
526 if (!fp) 604 if (!fp)
527 { 605 {
528 llwarns << "Couldn't open mute list " << filename << llendl; 606 llwarns << "Couldn't open mute list " << filename << llendl;
diff --git a/linden/indra/newview/llmutelist.h b/linden/indra/newview/llmutelist.h
index e1a87c8..0a8c6aa 100644
--- a/linden/indra/newview/llmutelist.h
+++ b/linden/indra/newview/llmutelist.h
@@ -82,6 +82,15 @@ public:
82class LLMuteList : public LLSingleton<LLMuteList> 82class LLMuteList : public LLSingleton<LLMuteList>
83{ 83{
84public: 84public:
85 // reasons for auto-unmuting a resident
86 enum EAutoReason
87 {
88 AR_IM = 0, // agent IMed a muted resident
89 AR_MONEY = 1, // agent paid L$ to a muted resident
90 AR_INVENTORY = 2, // agent offered inventory to a muted resident
91 AR_COUNT // enum count
92 };
93
85 LLMuteList(); 94 LLMuteList();
86 ~LLMuteList(); 95 ~LLMuteList();
87 96
@@ -98,6 +107,7 @@ public:
98 107
99 // Remove both normal and legacy mutes, for any or all properties. 108 // Remove both normal and legacy mutes, for any or all properties.
100 BOOL remove(const LLMute& mute, U32 flags = 0); 109 BOOL remove(const LLMute& mute, U32 flags = 0);
110 BOOL autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name = "", const LLString& last_name = "");
101 111
102 // Name is required to test against legacy text-only mutes. 112 // Name is required to test against legacy text-only mutes.
103 BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const; 113 BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const;
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index b6e22d8..9629d06 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -38,7 +38,7 @@
38#include "llui.h" 38#include "llui.h"
39#include "llmath.h" // clampf() 39#include "llmath.h" // clampf()
40#include "llfocusmgr.h" 40#include "llfocusmgr.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llcallingcard.h" 44#include "llcallingcard.h"
@@ -299,7 +299,7 @@ void LLNetMap::draw()
299 gGL.end(); 299 gGL.end();
300 300
301 // Draw water 301 // Draw water
302 glAlphaFunc(GL_GREATER, ABOVE_WATERLINE_ALPHA / 255.f ); 302 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, ABOVE_WATERLINE_ALPHA / 255.f);
303 { 303 {
304 if (regionp->getLand().getWaterTexture()) 304 if (regionp->getLand().getWaterTexture())
305 { 305 {
@@ -316,7 +316,7 @@ void LLNetMap::draw()
316 gGL.end(); 316 gGL.end();
317 } 317 }
318 } 318 }
319 glAlphaFunc(GL_GREATER,0.01f); 319 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
320 } 320 }
321 321
322 322
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp
index 19695e8..17aff78 100644
--- a/linden/indra/newview/llnotify.cpp
+++ b/linden/indra/newview/llnotify.cpp
@@ -35,7 +35,7 @@
35 35
36#include "llchat.h" 36#include "llchat.h"
37#include "llfocusmgr.h" 37#include "llfocusmgr.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40#include "llbutton.h" 40#include "llbutton.h"
41#include "llfocusmgr.h" 41#include "llfocusmgr.h"
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index e5c1113..d430d17 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -37,7 +37,7 @@
37#include "lloverlaybar.h" 37#include "lloverlaybar.h"
38 38
39#include "audioengine.h" 39#include "audioengine.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llagent.h" 41#include "llagent.h"
42#include "llbutton.h" 42#include "llbutton.h"
43#include "llchatbar.h" 43#include "llchatbar.h"
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index 7908ccc..45ceeba 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -71,6 +71,9 @@
71#include "llappviewer.h" // abortQuit() 71#include "llappviewer.h" // abortQuit()
72 72
73const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$ 73const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$
74const S32 MATURE_CONTENT = 1;
75const S32 NON_MATURE_CONTENT = 2;
76const S32 DECLINE_TO_STATE = 0;
74 77
75//static 78//static
76std::list<LLPanelClassified*> LLPanelClassified::sAllPanels; 79std::list<LLPanelClassified*> LLPanelClassified::sAllPanels;
@@ -162,7 +165,7 @@ LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search)
162 mDescEditor(NULL), 165 mDescEditor(NULL),
163 mLocationEditor(NULL), 166 mLocationEditor(NULL),
164 mCategoryCombo(NULL), 167 mCategoryCombo(NULL),
165 mMatureCheck(NULL), 168 mMatureCombo(NULL),
166 mAutoRenewCheck(NULL), 169 mAutoRenewCheck(NULL),
167 mUpdateBtn(NULL), 170 mUpdateBtn(NULL),
168 mTeleportBtn(NULL), 171 mTeleportBtn(NULL),
@@ -276,13 +279,15 @@ BOOL LLPanelClassified::postBuild()
276 mCategoryCombo->setCommitCallback(onCommitAny); 279 mCategoryCombo->setCommitCallback(onCommitAny);
277 mCategoryCombo->setCallbackUserData(this); 280 mCategoryCombo->setCallbackUserData(this);
278 281
279 mMatureCheck = getChild<LLCheckBoxCtrl>( "classified_mature_check"); 282 mMatureCombo = getChild<LLComboBox>( "classified_mature_check");
280 mMatureCheck->setCommitCallback(onCommitAny); 283 mMatureCombo->setCurrentByIndex(0);
281 mMatureCheck->setCallbackUserData(this); 284 mMatureCombo->setCommitCallback(onCommitAny);
285 mMatureCombo->setCallbackUserData(this);
282 if (gAgent.isTeen()) 286 if (gAgent.isTeen())
283 { 287 {
284 // Teens don't get to set mature flag. JC 288 // Teens don't get to set mature flag. JC
285 mMatureCheck->setVisible(FALSE); 289 mMatureCombo->setVisible(FALSE);
290 mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
286 } 291 }
287 292
288 if (!mInFinder) 293 if (!mInFinder)
@@ -532,7 +537,7 @@ void LLPanelClassified::sendClassifiedInfoUpdate()
532 msg->addU32Fast(_PREHASH_ParentEstate, 0); 537 msg->addU32Fast(_PREHASH_ParentEstate, 0);
533 msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID()); 538 msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID());
534 msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal); 539 msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal);
535 BOOL mature = mMatureCheck->get(); 540 BOOL mature = mMatureCombo->getCurrentIndex() == MATURE_CONTENT;
536 BOOL auto_renew = FALSE; 541 BOOL auto_renew = FALSE;
537 if (mAutoRenewCheck) 542 if (mAutoRenewCheck)
538 { 543 {
@@ -656,7 +661,14 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
656 self->mLocationChanged = false; 661 self->mLocationChanged = false;
657 662
658 self->mCategoryCombo->setCurrentByIndex(category - 1); 663 self->mCategoryCombo->setCurrentByIndex(category - 1);
659 self->mMatureCheck->set(mature); 664 if(mature)
665 {
666 self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
667 }
668 else
669 {
670 self->mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
671 }
660 if (self->mAutoRenewCheck) 672 if (self->mAutoRenewCheck)
661 { 673 {
662 self->mAutoRenewCheck->set(auto_renew); 674 self->mAutoRenewCheck->set(auto_renew);
@@ -722,8 +734,8 @@ void LLPanelClassified::refresh()
722 mCategoryCombo->setEnabled(godlike); 734 mCategoryCombo->setEnabled(godlike);
723 mCategoryCombo->setVisible(godlike); 735 mCategoryCombo->setVisible(godlike);
724 736
725 mMatureCheck->setEnabled(godlike); 737 mMatureCombo->setEnabled(godlike);
726 mMatureCheck->setVisible(godlike); 738 mMatureCombo->setVisible(godlike);
727 739
728 // Jesse (who is the only one who uses this, as far as we can tell 740 // Jesse (who is the only one who uses this, as far as we can tell
729 // Says that he does not want a set location button - he has used it 741 // Says that he does not want a set location button - he has used it
@@ -742,7 +754,7 @@ void LLPanelClassified::refresh()
742 //mPriceEditor->setEnabled(is_self); 754 //mPriceEditor->setEnabled(is_self);
743 mCategoryCombo->setEnabled(is_self); 755 mCategoryCombo->setEnabled(is_self);
744 756
745 mMatureCheck->setEnabled(is_self); 757 mMatureCombo->setEnabled(is_self);
746 758
747 if (mAutoRenewCheck) 759 if (mAutoRenewCheck)
748 { 760 {
@@ -775,15 +787,60 @@ void LLPanelClassified::onClickUpdate(void* data)
775 return; 787 return;
776 }; 788 };
777 789
790 // If user has not set mature, do not allow publish
791 if(self->mMatureCombo->getCurrentIndex() == DECLINE_TO_STATE)
792 {
793 LLString::format_map_t args;
794 gViewerWindow->alertXml("SetClassifiedMature", &callbackConfirmMature, self);
795 return;
796 }
797
798 // Mature content flag is set, proceed
799 self->gotMature();
800}
801
802// static
803void LLPanelClassified::callbackConfirmMature(S32 option, void* data)
804{
805 LLPanelClassified* self = (LLPanelClassified*)data;
806 self->confirmMature(option);
807}
808
809// invoked from callbackConfirmMature
810void LLPanelClassified::confirmMature(S32 option)
811{
812 // 0 == Yes
813 // 1 == No
814 // 2 == Cancel
815 switch(option)
816 {
817 case 0:
818 mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
819 break;
820 case 1:
821 mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
822 break;
823 default:
824 return;
825 }
826
827 // If we got here it means they set a valid value
828 gotMature();
829}
830
831// Called after we have determined whether this classified has
832// mature content or not.
833void LLPanelClassified::gotMature()
834{
778 // if already paid for, just do the update 835 // if already paid for, just do the update
779 if (self->mPaidFor) 836 if (mPaidFor)
780 { 837 {
781 callbackConfirmPublish(0, self); 838 callbackConfirmPublish(0, this);
782 } 839 }
783 else 840 else
784 { 841 {
785 // Ask the user how much they want to pay 842 // Ask the user how much they want to pay
786 LLFloaterPriceForListing::show( callbackGotPriceForListing, self ); 843 LLFloaterPriceForListing::show( callbackGotPriceForListing, this );
787 } 844 }
788} 845}
789 846
@@ -830,8 +887,8 @@ void LLPanelClassified::resetDirty()
830 mLocationChanged = false; 887 mLocationChanged = false;
831 if (mCategoryCombo) 888 if (mCategoryCombo)
832 mCategoryCombo->resetDirty(); 889 mCategoryCombo->resetDirty();
833 if (mMatureCheck) 890 if (mMatureCombo)
834 mMatureCheck->resetDirty(); 891 mMatureCombo->resetDirty();
835 if (mAutoRenewCheck) 892 if (mAutoRenewCheck)
836 mAutoRenewCheck->resetDirty(); 893 mAutoRenewCheck->resetDirty();
837} 894}
@@ -948,7 +1005,7 @@ BOOL LLPanelClassified::checkDirty()
948 if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty(); 1005 if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty();
949 if ( mLocationChanged ) mDirty |= TRUE; 1006 if ( mLocationChanged ) mDirty |= TRUE;
950 if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty(); 1007 if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty();
951 if ( mMatureCheck ) mDirty |= mMatureCheck->isDirty(); 1008 if ( mMatureCombo ) mDirty |= mMatureCombo->isDirty();
952 if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty(); 1009 if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty();
953 1010
954 return mDirty; 1011 return mDirty;
diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h
index 78f8a90..e4c8f42 100644
--- a/linden/indra/newview/llpanelclassified.h
+++ b/linden/indra/newview/llpanelclassified.h
@@ -96,12 +96,17 @@ public:
96 void sendClassifiedInfoRequest(); 96 void sendClassifiedInfoRequest();
97 void sendClassifiedInfoUpdate(); 97 void sendClassifiedInfoUpdate();
98 void resetDirty(); 98 void resetDirty();
99 void confirmPublish(S32 option);
100 99
101 static void processClassifiedInfoReply(LLMessageSystem* msg, void**); 100 static void processClassifiedInfoReply(LLMessageSystem* msg, void**);
102 101
102 // Confirmation dialogs flow in this order
103 static void callbackConfirmMature(S32 option, void* data);
104 void confirmMature(S32 option);
105 void gotMature();
103 static void callbackGotPriceForListing(S32 option, LLString text, void* data); 106 static void callbackGotPriceForListing(S32 option, LLString text, void* data);
104 static void callbackConfirmPublish(S32 option, void* data); 107 static void callbackConfirmPublish(S32 option, void* data);
108 void confirmPublish(S32 option);
109
105 void sendClassifiedClickMessage(const char* type); 110 void sendClassifiedClickMessage(const char* type);
106 111
107protected: 112protected:
@@ -154,7 +159,7 @@ protected:
154 LLTextEditor* mDescEditor; 159 LLTextEditor* mDescEditor;
155 LLLineEditor* mLocationEditor; 160 LLLineEditor* mLocationEditor;
156 LLComboBox* mCategoryCombo; 161 LLComboBox* mCategoryCombo;
157 LLCheckBoxCtrl* mMatureCheck; 162 LLComboBox* mMatureCombo;
158 LLCheckBoxCtrl* mAutoRenewCheck; 163 LLCheckBoxCtrl* mAutoRenewCheck;
159 164
160 LLButton* mUpdateBtn; 165 LLButton* mUpdateBtn;
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index 0d359d7..4d82023 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -600,84 +600,6 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
600} 600}
601 601
602 602
603
604void LLPanelDirBrowser::processDirPopularReply(LLMessageSystem *msg, void**)
605{
606 LLUUID agent_id;
607 LLUUID query_id;
608 LLUUID parcel_id;
609 char name[MAX_STRING]; /*Flawfinder: ignore*/
610 F32 dwell;
611
612 msg->getUUID("AgentData", "AgentID", agent_id);
613 msg->getUUID("QueryData", "QueryID", query_id );
614
615 LLPanelDirBrowser* self;
616 self = gDirBrowserInstances.getIfThere(query_id);
617 if (!self)
618 {
619 // data from an old query
620 return;
621 }
622
623 self->mHaveSearchResults = TRUE;
624
625 LLCtrlListInterface *list = self->childGetListInterface("results");
626 if (!list) return;
627
628 if (!list->getCanSelect())
629 {
630 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
631 self->mResultsContents = LLSD();
632 }
633
634 S32 i;
635 S32 count = msg->getNumberOfBlocks("QueryReplies");
636 self->mResultsReceived += count;
637 for (i = 0; i < count; i++)
638 {
639 msg->getUUID( "QueryReplies", "ParcelID", parcel_id, i);
640 msg->getString( "QueryReplies", "Name", MAX_STRING, name, i);
641 msg->getF32( "QueryReplies", "Dwell", dwell, i);
642
643 if (parcel_id.isNull())
644 {
645 continue;
646 }
647
648 LLSD content;
649 content["type"] = POPULAR_CODE;
650 content["name"] = name;
651
652 LLSD row;
653 row["id"] = parcel_id;
654
655 row["columns"][0]["column"] = "icon";
656 row["columns"][0]["type"] = "icon";
657 row["columns"][0]["value"] = "icon_popular.tga";
658
659 row["columns"][1]["column"] = "name";
660 row["columns"][1]["value"] = name;
661 row["columns"][1]["font"] = "SANSSERIF";
662
663 LLString buffer = llformat("%.0f", dwell);
664 row["columns"][2]["column"] = "dwell";
665 row["columns"][2]["value"] = buffer;
666 row["columns"][2]["font"] = "SANSSERIFSMALL";
667
668 list->addElement(row);
669 self->mResultsContents[parcel_id.asString()] = content;
670 }
671
672 list->sortByColumn(self->mCurrentSortColumn, self->mCurrentSortAscending);
673 self->updateResultCount();
674
675 // Poke the result received timer
676 self->mLastResultTimer.reset();
677 self->mDidAutoSelect = FALSE;
678}
679
680
681void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**) 603void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
682{ 604{
683 LLUUID agent_id; 605 LLUUID agent_id;
diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h
index 1f0e879..46d1369 100644
--- a/linden/indra/newview/llpaneldirbrowser.h
+++ b/linden/indra/newview/llpaneldirbrowser.h
@@ -116,7 +116,6 @@ public:
116 static void processDirEventsReply(LLMessageSystem* msg, void**); 116 static void processDirEventsReply(LLMessageSystem* msg, void**);
117 static void processDirGroupsReply(LLMessageSystem* msg, void**); 117 static void processDirGroupsReply(LLMessageSystem* msg, void**);
118 static void processDirClassifiedReply(LLMessageSystem* msg, void**); 118 static void processDirClassifiedReply(LLMessageSystem* msg, void**);
119 static void processDirPopularReply(LLMessageSystem* msg, void**);
120 static void processDirLandReply(LLMessageSystem *msg, void**); 119 static void processDirLandReply(LLMessageSystem *msg, void**);
121 120
122 std::string filterShortWords( const std::string source_string, int shortest_word_length, bool& was_filtered ); 121 std::string filterShortWords( const std::string source_string, int shortest_word_length, bool& was_filtered );
diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp
index dcda770..9bf71d9 100644
--- a/linden/indra/newview/llpaneldirfind.cpp
+++ b/linden/indra/newview/llpaneldirfind.cpp
@@ -68,48 +68,31 @@
68//--------------------------------------------------------------------------- 68//---------------------------------------------------------------------------
69 69
70class LLPanelDirFindAll 70class LLPanelDirFindAll
71: public LLPanelDirBrowser, 71: public LLPanelDirFind
72 public LLWebBrowserCtrlObserver
73{ 72{
74public: 73public:
75 LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater); 74 LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater);
76 /*virtual*/ ~LLPanelDirFindAll();
77 75
78 /*virtual*/ BOOL postBuild(); 76 /*Virtual*/ void search(const std::string& search_text);
79 /*virtual*/ void draw();
80
81 void search(const std::string& search_text);
82 void focus();
83 void navigateToDefaultPage();
84
85private:
86 static void onClickBack( void* data );
87 static void onClickForward( void* data );
88 static void onClickHome( void* data );
89 static void onClickSearch( void* data );
90 static void onCommitSearch(LLUICtrl*, void* data);
91
92 static std::string getSearchURLSuffix(bool mature);
93
94 /*virtual*/ void onNavigateBegin( const EventType& eventIn );
95 /*virtual*/ void onNavigateComplete( const EventType& eventIn );
96 // Used to update progress indicator
97 /*virtual*/ void onLocationChange( const EventType& eventIn );
98 // Debugging info to console
99
100private:
101 LLWebBrowserCtrl* mWebBrowser;
102}; 77};
103 78
104
105LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater) 79LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater)
106: LLPanelDirBrowser(name, floater) 80: LLPanelDirFind(name, floater, "find_browser")
107 ,mWebBrowser(NULL) 81{
82}
83
84//---------------------------------------------------------------------------
85// LLPanelDirFind - Base class for all browser-based search tabs
86//---------------------------------------------------------------------------
87
88LLPanelDirFind::LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name)
89: LLPanelDirBrowser(name, floater),
90 mWebBrowser(NULL),
91 mBrowserName(browser_name)
108{ 92{
109 mMinSearchChars = 3;
110} 93}
111 94
112BOOL LLPanelDirFindAll::postBuild() 95BOOL LLPanelDirFind::postBuild()
113{ 96{
114 LLPanelDirBrowser::postBuild(); 97 LLPanelDirBrowser::postBuild();
115 98
@@ -121,11 +104,15 @@ BOOL LLPanelDirFindAll::postBuild()
121 104
122 if (gAgent.isTeen()) 105 if (gAgent.isTeen())
123 { 106 {
124 childSetVisible("mature_check", false); 107 // Showcase tab does not have mature checkbox
125 childSetValue("mature_check", false); 108 if (hasChild("mature_check"))
109 {
110 childSetVisible("mature_check", false);
111 childSetValue("mature_check", false);
112 }
126 } 113 }
127 114
128 mWebBrowser = getChild<LLWebBrowserCtrl>("find_browser"); 115 mWebBrowser = getChild<LLWebBrowserCtrl>(mBrowserName);
129 if (mWebBrowser) 116 if (mWebBrowser)
130 { 117 {
131 // new pages appear in same window as the results page now 118 // new pages appear in same window as the results page now
@@ -147,14 +134,14 @@ BOOL LLPanelDirFindAll::postBuild()
147 return TRUE; 134 return TRUE;
148} 135}
149 136
150LLPanelDirFindAll::~LLPanelDirFindAll() 137LLPanelDirFind::~LLPanelDirFind()
151{ 138{
152 if (mWebBrowser) 139 if (mWebBrowser)
153 mWebBrowser->remObserver(this); 140 mWebBrowser->remObserver(this);
154} 141}
155 142
156// virtual 143// virtual
157void LLPanelDirFindAll::draw() 144void LLPanelDirFind::draw()
158{ 145{
159 // enable/disable buttons depending on state 146 // enable/disable buttons depending on state
160 if ( mWebBrowser ) 147 if ( mWebBrowser )
@@ -169,46 +156,25 @@ void LLPanelDirFindAll::draw()
169 LLPanelDirBrowser::draw(); 156 LLPanelDirBrowser::draw();
170} 157}
171 158
159// When we show any browser-based view, we want to hide all
160// the right-side XUI detail panels.
161// virtual
162void LLPanelDirFind::onVisibilityChange(BOOL new_visibility)
163{
164 if (new_visibility)
165 {
166 mFloaterDirectory->hideAllDetailPanels();
167 }
168 LLPanel::onVisibilityChange(new_visibility);
169}
170
172void LLPanelDirFindAll::search(const std::string& search_text) 171void LLPanelDirFindAll::search(const std::string& search_text)
173{ 172{
174 if (!search_text.empty()) 173 if (!search_text.empty())
175 { 174 {
176 // Replace spaces with "+" for use by Google search appliance
177 // Yes, this actually works for double-spaces
178 // " foo bar" becomes "+foo++bar" and works fine. JC
179 std::string search_text_with_plus = search_text;
180 std::string::iterator it = search_text_with_plus.begin();
181 for ( ; it != search_text_with_plus.end(); ++it )
182 {
183 if ( std::isspace( *it ) )
184 {
185 *it = '+';
186 }
187 }
188
189 // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
190 // Note that "+" is one of them, so we can do "+" addition first.
191 const char* allowed =
192 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
193 "0123456789"
194 "-._~$+!*'()";
195 std::string query = LLURI::escape(search_text_with_plus, allowed);
196
197 std::string url = gSavedSettings.getString("SearchURLQuery");
198 std::string substring = "[QUERY]";
199 url.replace(url.find(substring), substring.length(), query);
200
201 // replace the collection name with the one selected from the combo box
202 std::string selected_collection = childGetValue( "Category" ).asString();
203 substring = "[COLLECTION]";
204 url.replace(url.find(substring), substring.length(), selected_collection);
205
206 // Add common parameters (mature, teen, location)
207 bool mature = childGetValue( "mature_check" ).asBoolean(); 175 bool mature = childGetValue( "mature_check" ).asBoolean();
208 url += getSearchURLSuffix(mature); 176 std::string selected_collection = childGetValue( "Category" ).asString();
209 177 std::string url = buildSearchURL(search_text, selected_collection, mature);
210 llinfos << "url " << url << llendl;
211
212 if (mWebBrowser) 178 if (mWebBrowser)
213 { 179 {
214 mWebBrowser->navigateTo(url); 180 mWebBrowser->navigateTo(url);
@@ -223,14 +189,14 @@ void LLPanelDirFindAll::search(const std::string& search_text)
223 childSetText("search_editor", search_text); 189 childSetText("search_editor", search_text);
224} 190}
225 191
226void LLPanelDirFindAll::focus() 192void LLPanelDirFind::focus()
227{ 193{
228 childSetFocus("search_editor"); 194 childSetFocus("search_editor");
229} 195}
230 196
231void LLPanelDirFindAll::navigateToDefaultPage() 197void LLPanelDirFind::navigateToDefaultPage()
232{ 198{
233 std::string start_url = gSavedSettings.getString("SearchURLDefault"); 199 std::string start_url = getString("default_search_page");
234 bool mature = childGetValue( "mature_check" ).asBoolean(); 200 bool mature = childGetValue( "mature_check" ).asBoolean();
235 start_url += getSearchURLSuffix( mature ); 201 start_url += getSearchURLSuffix( mature );
236 202
@@ -241,9 +207,49 @@ void LLPanelDirFindAll::navigateToDefaultPage()
241 mWebBrowser->navigateTo( start_url ); 207 mWebBrowser->navigateTo( start_url );
242 } 208 }
243} 209}
210// static
211std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in)
212{
213 std::string url = gSavedSettings.getString("SearchURLDefault");
214 if (!search_text.empty())
215 {
216 // Replace spaces with "+" for use by Google search appliance
217 // Yes, this actually works for double-spaces
218 // " foo bar" becomes "+foo++bar" and works fine. JC
219 std::string search_text_with_plus = search_text;
220 std::string::iterator it = search_text_with_plus.begin();
221 for ( ; it != search_text_with_plus.end(); ++it )
222 {
223 if ( std::isspace( *it ) )
224 {
225 *it = '+';
226 }
227 }
228
229 // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
230 // Note that "+" is one of them, so we can do "+" addition first.
231 const char* allowed =
232 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
233 "0123456789"
234 "-._~$+!*'()";
235 std::string query = LLURI::escape(search_text_with_plus, allowed);
236
237 url = gSavedSettings.getString("SearchURLQuery");
238 std::string substring = "[QUERY]";
239 url.replace(url.find(substring), substring.length(), query);
240
241 // replace the collection name with the one selected from the combo box
242 // std::string selected_collection = childGetValue( "Category" ).asString();
243 substring = "[COLLECTION]";
244 url.replace(url.find(substring), substring.length(), collection);
244 245
246 llinfos << "url " << url << llendl;
247 }
248 url += getSearchURLSuffix( mature_in );
249 return url;
250}
245// static 251// static
246std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in) 252std::string LLPanelDirFind::getSearchURLSuffix(bool mature_in)
247{ 253{
248 bool mature = mature_in; 254 bool mature = mature_in;
249 // Teens never get mature results. Explicitly override because 255 // Teens never get mature results. Explicitly override because
@@ -314,9 +320,9 @@ std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in)
314 320
315 321
316// static 322// static
317void LLPanelDirFindAll::onClickBack( void* data ) 323void LLPanelDirFind::onClickBack( void* data )
318{ 324{
319 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 325 LLPanelDirFind* self = ( LLPanelDirFind* )data;
320 if ( self->mWebBrowser ) 326 if ( self->mWebBrowser )
321 { 327 {
322 self->mWebBrowser->navigateBack(); 328 self->mWebBrowser->navigateBack();
@@ -324,9 +330,9 @@ void LLPanelDirFindAll::onClickBack( void* data )
324} 330}
325 331
326// static 332// static
327void LLPanelDirFindAll::onClickForward( void* data ) 333void LLPanelDirFind::onClickForward( void* data )
328{ 334{
329 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 335 LLPanelDirFind* self = ( LLPanelDirFind* )data;
330 if ( self->mWebBrowser ) 336 if ( self->mWebBrowser )
331 { 337 {
332 self->mWebBrowser->navigateForward(); 338 self->mWebBrowser->navigateForward();
@@ -334,9 +340,9 @@ void LLPanelDirFindAll::onClickForward( void* data )
334} 340}
335 341
336// static 342// static
337void LLPanelDirFindAll::onClickHome( void* data ) 343void LLPanelDirFind::onClickHome( void* data )
338{ 344{
339 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 345 LLPanelDirFind* self = ( LLPanelDirFind* )data;
340 if ( self->mWebBrowser ) 346 if ( self->mWebBrowser )
341 { 347 {
342 self->mWebBrowser->navigateHome(); 348 self->mWebBrowser->navigateHome();
@@ -344,32 +350,32 @@ void LLPanelDirFindAll::onClickHome( void* data )
344} 350}
345 351
346// static 352// static
347void LLPanelDirFindAll::onCommitSearch(LLUICtrl*, void* data) 353void LLPanelDirFind::onCommitSearch(LLUICtrl*, void* data)
348{ 354{
349 onClickSearch(data); 355 onClickSearch(data);
350} 356}
351 357
352// static 358// static
353void LLPanelDirFindAll::onClickSearch(void* data) 359void LLPanelDirFind::onClickSearch(void* data)
354{ 360{
355 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 361 LLPanelDirFind* self = ( LLPanelDirFind* )data;
356 LLString search_text = self->childGetText("search_editor"); 362 LLString search_text = self->childGetText("search_editor");
357 self->search(search_text); 363 self->search(search_text);
358 364
359 LLFloaterDirectory::sNewSearchCount++; 365 LLFloaterDirectory::sNewSearchCount++;
360} 366}
361 367
362void LLPanelDirFindAll::onNavigateBegin( const EventType& eventIn ) 368void LLPanelDirFind::onNavigateBegin( const EventType& eventIn )
363{ 369{
364 childSetText("status_text", getString("loading_text")); 370 childSetText("status_text", getString("loading_text"));
365} 371}
366 372
367void LLPanelDirFindAll::onNavigateComplete( const EventType& eventIn ) 373void LLPanelDirFind::onNavigateComplete( const EventType& eventIn )
368{ 374{
369 childSetText("status_text", getString("done_text")); 375 childSetText("status_text", getString("done_text"));
370} 376}
371 377
372void LLPanelDirFindAll::onLocationChange( const EventType& eventIn ) 378void LLPanelDirFind::onLocationChange( const EventType& eventIn )
373{ 379{
374 llinfos << eventIn.getStringValue() << llendl; 380 llinfos << eventIn.getStringValue() << llendl;
375} 381}
@@ -397,121 +403,3 @@ void LLPanelDirFindAllInterface::focus(LLPanelDirFindAll* panel)
397 panel->focus(); 403 panel->focus();
398} 404}
399 405
400//---------------------------------------------------------------------------
401// LLPanelDirFindAllOld - deprecated if new Google search works out. JC
402//---------------------------------------------------------------------------
403
404LLPanelDirFindAllOld::LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater)
405 : LLPanelDirBrowser(name, floater)
406{
407 mMinSearchChars = 3;
408}
409
410BOOL LLPanelDirFindAllOld::postBuild()
411{
412 LLPanelDirBrowser::postBuild();
413
414 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
415
416 childSetAction("Search", onClickSearch, this);
417 childDisable("Search");
418 setDefaultBtn( "Search" );
419
420 return TRUE;
421}
422
423LLPanelDirFindAllOld::~LLPanelDirFindAllOld()
424{
425 // Children all cleaned up by default view destructor.
426}
427
428// virtual
429void LLPanelDirFindAllOld::draw()
430{
431 // You only have a choice if you are mature
432 childSetVisible("incmature", !gAgent.isTeen());
433 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll"));
434
435 LLPanelDirBrowser::draw();
436}
437
438// static
439void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data)
440{
441 LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data;
442 self->setFocus(TRUE);
443}
444
445// static
446void LLPanelDirFindAllOld::onClickSearch(void *userdata)
447{
448 LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata;
449
450 if (self->childGetValue("name").asString().length() < self->mMinSearchChars)
451 {
452 return;
453 };
454
455 self->setupNewSearch();
456
457 // Figure out scope
458 U32 scope = 0x0;
459 scope |= DFQ_PEOPLE; // people (not just online = 0x01 | 0x02)
460 // places handled below
461 scope |= DFQ_EVENTS; // events
462 scope |= DFQ_GROUPS; // groups
463
464 BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") ||
465 gAgent.isTeen() ||
466 !self->childGetValue("incmature").asBoolean() );
467
468 if ( filter_mature )
469 {
470 scope |= DFQ_PG_SIMS_ONLY;
471 scope |= DFQ_PG_EVENTS_ONLY;
472 scope |= DFQ_FILTER_MATURE;
473 scope |= DFQ_PG_PARCELS_ONLY;
474 }
475
476 // send the message
477 LLMessageSystem *msg = gMessageSystem;
478 S32 start_row = 0;
479 sendDirFindQuery(msg, self->mSearchID, self->childGetValue("name").asString(), scope, start_row);
480
481 // Also look up classified ads. JC 12/2005
482 BOOL filter_auto_renew = FALSE;
483 U32 classified_flags = pack_classified_flags(filter_mature, filter_auto_renew);
484 msg->newMessage("DirClassifiedQuery");
485 msg->nextBlock("AgentData");
486 msg->addUUID("AgentID", gAgent.getID());
487 msg->addUUID("SessionID", gAgent.getSessionID());
488 msg->nextBlock("QueryData");
489 msg->addUUID("QueryID", self->mSearchID);
490 msg->addString("QueryText", self->childGetValue("name").asString());
491 msg->addU32("QueryFlags", classified_flags);
492 msg->addU32("Category", 0); // all categories
493 msg->addS32("QueryStart", 0);
494 gAgent.sendReliableMessage();
495
496 // Need to use separate find places query because places are
497 // sent using the more compact DirPlacesReply message.
498 U32 query_flags = DFQ_DWELL_SORT;
499 if ( filter_mature )
500 {
501 query_flags |= DFQ_PG_SIMS_ONLY;
502 query_flags |= DFQ_PG_PARCELS_ONLY; // FWIW, currently DFQ_PG_PARCELS_ONLY is only supported
503 query_flags |= DFQ_FILTER_MATURE;
504 }
505 msg->newMessage("DirPlacesQuery");
506 msg->nextBlock("AgentData");
507 msg->addUUID("AgentID", gAgent.getID() );
508 msg->addUUID("SessionID", gAgent.getSessionID());
509 msg->nextBlock("QueryData");
510 msg->addUUID("QueryID", self->mSearchID );
511 msg->addString("QueryText", self->childGetValue("name").asString());
512 msg->addU32("QueryFlags", query_flags );
513 msg->addS32("QueryStart", 0 ); // Always get the first 100 when using find ALL
514 msg->addS8("Category", LLParcel::C_ANY);
515 msg->addString("SimName", NULL);
516 gAgent.sendReliableMessage();
517}
diff --git a/linden/indra/newview/llpaneldirfind.h b/linden/indra/newview/llpaneldirfind.h
index fdf95d7..2359d62 100644
--- a/linden/indra/newview/llpaneldirfind.h
+++ b/linden/indra/newview/llpaneldirfind.h
@@ -33,34 +33,62 @@
33#define LL_LLPANELDIRFIND_H 33#define LL_LLPANELDIRFIND_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirbrowser.h"
36#include "llwebbrowserctrl.h"
36 37
37class LLUICtrl; 38class LLUICtrl;
38class LLLineEditor; 39class LLLineEditor;
39class LLPanelDirFindAll; 40class LLPanelDirFindAll;
40class LLFloaterDirectory; 41class LLFloaterDirectory;
42class LLWebBrowserCtrlObserver;
41 43
42class LLPanelDirFindAllInterface 44// This class in an abstract base class for all new style search widgets. It contains a pointer to a web browser control
45//
46class LLPanelDirFind
47: public LLPanelDirBrowser,
48 public LLWebBrowserCtrlObserver
43{ 49{
44public: 50public:
45 static LLPanelDirFindAll* create(LLFloaterDirectory* floater); 51 LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name);
46 static void search(LLPanelDirFindAll* panel, const std::string& search_text); 52 /*virtual*/ ~LLPanelDirFind();
47 static void focus(LLPanelDirFindAll* panel);
48};
49 53
54 /*virtual*/ void draw();
55 /*virtual*/ BOOL postBuild();
56 /*virtual*/ void onVisibilityChange(BOOL new_visibility);
50 57
51class LLPanelDirFindAllOld : public LLPanelDirBrowser 58 // Pure virtual. Must be implemented
52{ 59 virtual void search(const std::string& search_text) = 0;
53public:
54 LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater);
55 /*virtual*/ ~LLPanelDirFindAllOld();
56 60
57 /*virtual*/ BOOL postBuild(); 61 virtual void navigateToDefaultPage();
62 void focus();
58 63
59 /*virtual*/ void draw(); 64 static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in);
65 static std::string getSearchURLSuffix(bool mature_in);
60 66
61 static void onClickSearch(void *userdata); 67private:
62 static void onCommitScope(LLUICtrl* ctrl, void* data); 68 static void onClickBack( void* data );
63 static void onKeystrokeName(LLLineEditor* line, void* data); 69 static void onClickForward( void* data );
70 static void onClickHome( void* data );
71 static void onClickSearch( void* data );
72 static void onCommitSearch(LLUICtrl*, void* data);
73
74 /*virtual*/ void onNavigateBegin( const EventType& eventIn );
75 /*virtual*/ void onNavigateComplete( const EventType& eventIn );
76
77 // Used to update progress indicator
78 /*virtual*/ void onLocationChange( const EventType& eventIn );
79 // Debugging info to console
80
81protected:
82 LLWebBrowserCtrl* mWebBrowser;
83 std::string mBrowserName;
84};
85
86class LLPanelDirFindAllInterface
87{
88public:
89 static LLPanelDirFindAll* create(LLFloaterDirectory* floater);
90 static void search(LLPanelDirFindAll* panel, const std::string& search_text);
91 static void focus(LLPanelDirFindAll* panel);
64}; 92};
65 93
66#endif 94#endif
diff --git a/linden/indra/newview/llpaneldirgroups.cpp b/linden/indra/newview/llpaneldirgroups.cpp
index 0a0a14d..b765e99 100644
--- a/linden/indra/newview/llpaneldirgroups.cpp
+++ b/linden/indra/newview/llpaneldirgroups.cpp
@@ -33,101 +33,31 @@
33 33
34#include "llpaneldirgroups.h" 34#include "llpaneldirgroups.h"
35 35
36// linden library includes 36#include "llwebbrowserctrl.h"
37#include "llagent.h"
38//#include "llfontgl.h"
39#include "message.h"
40#include "llqueryflags.h"
41#include "llviewercontrol.h"
42#include "llviewerwindow.h"
43
44// viewer project includes
45 37
46LLPanelDirGroups::LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater) 38LLPanelDirGroups::LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater)
47 : LLPanelDirBrowser(name, floater) 39 : LLPanelDirFind(name, floater, "groups_browser")
48{
49 mMinSearchChars = 3;
50}
51
52
53BOOL LLPanelDirGroups::postBuild()
54{ 40{
55 LLPanelDirBrowser::postBuild();
56
57 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
58
59 childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
60 childDisable("Search");
61 setDefaultBtn( "Search" );
62
63 return TRUE;
64} 41}
65 42
66LLPanelDirGroups::~LLPanelDirGroups()
67{
68 // Children all cleaned up by default view destructor.
69}
70 43
71// virtual 44void LLPanelDirGroups::search(const std::string& search_text)
72void LLPanelDirGroups::draw()
73{ 45{
74 // You only have a choice if you are mature 46 if (!search_text.empty())
75 childSetVisible("incmature", !gAgent.isTeen());
76 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups"));
77
78 LLPanelDirBrowser::draw();
79}
80
81
82// virtual
83void LLPanelDirGroups::performQuery()
84{
85 std::string group_name = childGetValue("name").asString();
86 if (group_name.length() < mMinSearchChars)
87 { 47 {
88 return; 48 bool mature = childGetValue( "mature_check" ).asBoolean();
49 std::string selected_collection = "Groups";
50 std::string url = buildSearchURL(search_text, selected_collection, mature);
51 if (mWebBrowser)
52 {
53 mWebBrowser->navigateTo(url);
54 }
89 } 55 }
90 56 else
91 // "hi " is three chars but not a long-enough search
92 std::string query_string = group_name;
93 LLString::trim( query_string );
94 bool query_was_filtered = (query_string != group_name);
95
96 // possible we threw away all the short words in the query so check length
97 if ( query_string.length() < mMinSearchChars )
98 {
99 gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty");
100 return;
101 };
102
103 // if we filtered something out, display a popup
104 if ( query_was_filtered )
105 { 57 {
106 LLString::format_map_t args; 58 // empty search text
107 args["[FINALQUERY]"] = query_string; 59 navigateToDefaultPage();
108 gViewerWindow->alertXml("SeachFilteredOnShortWords", args);
109 };
110
111 setupNewSearch();
112
113 // groups
114 U32 scope = DFQ_GROUPS;
115
116 // Check group mature filter.
117 if ( !gSavedSettings.getBOOL("ShowMatureGroups")
118 || gAgent.isTeen() )
119 {
120 scope |= DFQ_FILTER_MATURE;
121 } 60 }
122 61
123 mCurrentSortColumn = "score"; 62 childSetText("search_editor", search_text);
124 mCurrentSortAscending = FALSE;
125
126 // send the message
127 sendDirFindQuery(
128 gMessageSystem,
129 mSearchID,
130 query_string,
131 scope,
132 mSearchStart);
133} 63}
diff --git a/linden/indra/newview/llpaneldirgroups.h b/linden/indra/newview/llpaneldirgroups.h
index 4d44143..03608e2 100644
--- a/linden/indra/newview/llpaneldirgroups.h
+++ b/linden/indra/newview/llpaneldirgroups.h
@@ -32,21 +32,14 @@
32#ifndef LLPANELDIRGROUPS_H 32#ifndef LLPANELDIRGROUPS_H
33#define LLPANELDIRGROUPS_H 33#define LLPANELDIRGROUPS_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37class LLPanelDirGroups : public LLPanelDirBrowser 37class LLPanelDirGroups : public LLPanelDirFind
38{ 38{
39public: 39public:
40 LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater); 40 LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater);
41 virtual ~LLPanelDirGroups();
42 41
43 /*virtual*/ void draw(); 42 /*virtual*/ void search(const std::string& search_text);
44
45 /*virtual*/ BOOL postBuild();
46
47 /*virtual*/ void performQuery();
48
49 static void onClickSearch(void *userdata);
50}; 43};
51 44
52#endif 45#endif
diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp
index 3e79ec0..3980fb4 100644
--- a/linden/indra/newview/llpaneldirplaces.cpp
+++ b/linden/indra/newview/llpaneldirplaces.cpp
@@ -33,161 +33,37 @@
33 33
34#include "llpaneldirplaces.h" 34#include "llpaneldirplaces.h"
35 35
36// linden library includes 36#include "llwebbrowserctrl.h"
37#include "llfontgl.h"
38#include "message.h"
39#include "lldir.h"
40#include "llparcel.h"
41#include "llregionflags.h"
42#include "llqueryflags.h"
43
44// viewer project includes
45#include "llagent.h"
46#include "llbutton.h"
47#include "llcheckboxctrl.h"
48#include "llcombobox.h"
49#include "llfloaterdirectory.h"
50#include "lllineeditor.h"
51#include "llviewerwindow.h"
52#include "llpaneldirbrowser.h"
53#include "lltextbox.h"
54#include "lluiconstants.h"
55#include "llviewercontrol.h"
56#include "llviewermessage.h"
57#include "llworldmap.h"
58 37
59LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater) 38LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater)
60 : LLPanelDirBrowser(name, floater) 39: LLPanelDirFind(name, floater, "places_browser")
61{
62 mMinSearchChars = 3;
63}
64
65BOOL LLPanelDirPlaces::postBuild()
66{
67 LLPanelDirBrowser::postBuild();
68
69 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
70
71 childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
72 childDisable("Search");
73
74 mCurrentSortColumn = "dwell";
75 mCurrentSortAscending = FALSE;
76
77 // Don't prepopulate the places list, as it hurts the database as of 2006-12-04. JC
78 // initialQuery();
79
80 return TRUE;
81}
82
83LLPanelDirPlaces::~LLPanelDirPlaces()
84{ 40{
85 // Children all cleaned up by default view destructor.
86} 41}
87 42
88 43
89// virtual 44void LLPanelDirPlaces::search(const std::string& search_text)
90void LLPanelDirPlaces::draw()
91{
92 // You only have a choice if you are mature
93 childSetVisible("incmature", !gAgent.isTeen());
94 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
95
96 LLPanelDirBrowser::draw();
97}
98
99// virtual
100void LLPanelDirPlaces::performQuery()
101{ 45{
102 LLString place_name = childGetValue("name").asString(); 46 if (!search_text.empty())
103 if (place_name.length() < mMinSearchChars)
104 { 47 {
105 return; 48 bool mature = childGetValue( "mature_check" ).asBoolean();
106 } 49 std::string selected_collection = "Places";
107 50 std::string url = buildSearchURL(search_text, selected_collection, mature);
108 // "hi " is three chars but not a long-enough search 51 if (mWebBrowser)
109 std::string query_string = place_name; 52 {
110 LLString::trim( query_string ); 53 mWebBrowser->navigateTo(url);
111 bool query_was_filtered = (query_string != place_name); 54 }
112
113 // possible we threw away all the short words in the query so check length
114 if ( query_string.length() < mMinSearchChars )
115 {
116 gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty");
117 return;
118 };
119
120 // if we filtered something out, display a popup
121 if ( query_was_filtered )
122 {
123 LLString::format_map_t args;
124 args["[FINALQUERY]"] = query_string;
125 gViewerWindow->alertXml("SeachFilteredOnShortWords", args);
126 };
127
128 LLString catstring = childGetValue("Category").asString();
129
130 // Because LLParcel::C_ANY is -1, must do special check
131 S32 category = 0;
132 if (catstring == "any")
133 {
134 category = LLParcel::C_ANY;
135 } 55 }
136 else 56 else
137 { 57 {
138 category = LLParcel::getCategoryFromString(catstring.c_str()); 58 // empty search text
59 navigateToDefaultPage();
139 } 60 }
140 61
141 BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims") 62 childSetText("search_editor", search_text);
142 || gAgent.isTeen();
143
144 queryCore(query_string, category, pg_only);
145} 63}
146 64
147void LLPanelDirPlaces::initialQuery() 65LLPanelDirPlaces::~LLPanelDirPlaces()
148{
149 // All Linden locations in PG/Mature sims, any name.
150 const BOOL pg_only = FALSE;
151 queryCore("", LLParcel::C_LINDEN, pg_only);
152}
153
154void LLPanelDirPlaces::queryCore(const LLString& name,
155 S32 category,
156 BOOL pg_only)
157{ 66{
158 setupNewSearch(); 67 // Children all cleaned up by default view destructor.
159
160 // send the message
161 U32 flags = 0x0;
162
163 if (pg_only)
164 {
165 flags |= DFQ_PG_PARCELS_ONLY;
166 }
167
168// JC: Sorting by dwell severely impacts the performance of the query.
169// Instead of sorting on the dataserver, we sort locally once the results
170// are received.
171// IW: Re-enabled dwell sort based on new 3-character minimum description
172// Hopefully we'll move to next-gen Find before this becomes a big problem
173
174 flags |= DFQ_DWELL_SORT;
175
176 LLMessageSystem* msg = gMessageSystem;
177
178 msg->newMessage("DirPlacesQuery");
179 msg->nextBlock("AgentData");
180 msg->addUUID("AgentID", gAgent.getID());
181 msg->addUUID("SessionID", gAgent.getSessionID());
182 msg->nextBlock("QueryData");
183 msg->addUUID("QueryID", getSearchID());
184 msg->addString("QueryText", name);
185 msg->addU32("QueryFlags", flags);
186 msg->addS8("Category", (S8)category);
187 // No longer support queries by region name, too many regions
188 // for combobox, no easy way to do autocomplete. JC
189 msg->addString("SimName", "");
190 msg->addS32Fast(_PREHASH_QueryStart,mSearchStart);
191 gAgent.sendReliableMessage();
192} 68}
193 69
diff --git a/linden/indra/newview/llpaneldirplaces.h b/linden/indra/newview/llpaneldirplaces.h
index 7bc2b08..4785f94 100644
--- a/linden/indra/newview/llpaneldirplaces.h
+++ b/linden/indra/newview/llpaneldirplaces.h
@@ -32,31 +32,17 @@
32#ifndef LL_LLPANELDIRPLACES_H 32#ifndef LL_LLPANELDIRPLACES_H
33#define LL_LLPANELDIRPLACES_H 33#define LL_LLPANELDIRPLACES_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37// UI class forward declarations 37// UI class forward declarations
38class LLLineEditor;
39 38
40class LLPanelDirPlaces : public LLPanelDirBrowser 39class LLPanelDirPlaces : public LLPanelDirFind
41{ 40{
42public: 41public:
43 LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater); 42 LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater);
44 virtual ~LLPanelDirPlaces(); 43 virtual ~LLPanelDirPlaces();
45 44
46 /*virtual*/ void draw(); 45 /*virtual*/ void search(const std::string& search_text);
47 46
48 virtual BOOL postBuild();
49
50 static void onClickSearch(void *userdata);
51 static void onKeystrokeName(LLLineEditor* line, void* data);
52
53 void performQuery();
54
55 // Initially fill in some data for the panel.
56 void initialQuery();
57
58private:
59 void queryCore(const LLString& name, S32 category, BOOL pg_only);
60}; 47};
61
62#endif 48#endif
diff --git a/linden/indra/newview/llpaneldirpopular.cpp b/linden/indra/newview/llpaneldirpopular.cpp
index 5a94275..7cfc5b5 100644
--- a/linden/indra/newview/llpaneldirpopular.cpp
+++ b/linden/indra/newview/llpaneldirpopular.cpp
@@ -33,102 +33,15 @@
33 33
34#include "llpaneldirpopular.h" 34#include "llpaneldirpopular.h"
35 35
36// linden library includes
37#include "llfontgl.h"
38#include "message.h"
39#include "llqueryflags.h"
40
41// viewer project includes
42#include "llagent.h"
43#include "llcheckboxctrl.h"
44#include "llviewercontrol.h"
45#include "lluiconstants.h"
46#include "lltextbox.h"
47
48LLPanelDirPopular::LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater) 36LLPanelDirPopular::LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater)
49 : LLPanelDirBrowser(name, floater), 37: LLPanelDirFind(name, floater, "showcase_browser")
50 mRequested(false)
51{
52}
53
54BOOL LLPanelDirPopular::postBuild()
55{
56 LLPanelDirBrowser::postBuild();
57
58 childSetCommitCallback("incpictures", onCommitAny, this);
59 childSetCommitCallback("incmature", onCommitAny, this);
60
61 mCurrentSortColumn = "dwell";
62 mCurrentSortAscending = FALSE;
63
64 // Don't request popular until first drawn. JC
65 // requestPopular();
66
67 return TRUE;
68}
69
70LLPanelDirPopular::~LLPanelDirPopular()
71{ 38{
72 // Children all cleaned up by default view destructor. 39 // *NOTE: This is now the "Showcase" section
73} 40}
74 41
75
76// virtual 42// virtual
77void LLPanelDirPopular::draw() 43void LLPanelDirPopular::search(const std::string& search_text)
78{
79 // You only have a choice if you are mature]
80 childSetVisible("incmature", !gAgent.isTeen());
81 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
82
83 LLPanelDirBrowser::draw();
84
85 if (!mRequested)
86 {
87 requestPopular();
88 mRequested = true;
89 }
90}
91
92
93void LLPanelDirPopular::requestPopular()
94{
95 LLMessageSystem* msg = gMessageSystem;
96 BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.isTeen();
97 BOOL pictures_only = childGetValue("incpictures").asBoolean();
98
99 U32 flags = 0x0;
100 if (pg_only)
101 {
102 flags |= DFQ_PG_SIMS_ONLY;
103 }
104 if (pictures_only)
105 {
106 flags |= DFQ_PICTURES_ONLY;
107 }
108
109 setupNewSearch();
110
111 msg->newMessage("DirPopularQuery");
112 msg->nextBlock("AgentData");
113 msg->addUUID("AgentID", gAgent.getID());
114 msg->addUUID("SessionID", gAgent.getSessionID());
115 msg->nextBlock("QueryData");
116 msg->addUUID("QueryID", getSearchID());
117 msg->addU32("QueryFlags", flags);
118 gAgent.sendReliableMessage();
119}
120
121
122// static
123void LLPanelDirPopular::onClickSearch(void* data)
124{
125 LLPanelDirPopular* self = (LLPanelDirPopular*)data;
126 self->requestPopular();
127}
128
129// static
130void LLPanelDirPopular::onCommitAny(LLUICtrl* ctrl, void* data)
131{ 44{
132 LLPanelDirPopular* self = (LLPanelDirPopular*)data; 45 // no-op, initial page is loaded during construction and there
133 self->requestPopular(); 46 // is no search interface, just browse
134} 47}
diff --git a/linden/indra/newview/llpaneldirpopular.h b/linden/indra/newview/llpaneldirpopular.h
index c3f5de3..5f28ba0 100644
--- a/linden/indra/newview/llpaneldirpopular.h
+++ b/linden/indra/newview/llpaneldirpopular.h
@@ -32,29 +32,14 @@
32#ifndef LL_LLPANELDIRPOPULAR_H 32#ifndef LL_LLPANELDIRPOPULAR_H
33#define LL_LLPANELDIRPOPULAR_H 33#define LL_LLPANELDIRPOPULAR_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37class LLUICtrl; 37class LLPanelDirPopular : public LLPanelDirFind
38
39class LLPanelDirPopular : public LLPanelDirBrowser
40{ 38{
41public: 39public:
42 LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater); 40 LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater);
43 virtual ~LLPanelDirPopular();
44
45 virtual void draw();
46
47 virtual BOOL postBuild();
48 41
49 void requestPopular(); 42 /*virtual*/ void search(const std::string& search_text);
50
51protected:
52 static void onClickSearch(void* data);
53 static void onCommitAny(LLUICtrl* ctrl, void* data);
54
55private:
56 bool mRequested;
57}; 43};
58 44
59
60#endif 45#endif
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index e5072c5..cc70f79 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -82,6 +82,8 @@
82// parent 82// parent
83#include "llfloaterpreference.h" 83#include "llfloaterpreference.h"
84 84
85#include <boost/regex.hpp>
86
85const F32 MAX_USER_FAR_CLIP = 512.f; 87const F32 MAX_USER_FAR_CLIP = 512.f;
86const F32 MIN_USER_FAR_CLIP = 64.f; 88const F32 MIN_USER_FAR_CLIP = 64.f;
87 89
@@ -164,6 +166,8 @@ BOOL LLPanelDisplay::postBuild()
164 } 166 }
165 } 167 }
166 168
169 initWindowSizeControls();
170
167 if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) 171 if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio"))
168 { 172 {
169 mAspectRatio = gViewerWindow->getDisplayAspectRatio(); 173 mAspectRatio = gViewerWindow->getDisplayAspectRatio();
@@ -319,6 +323,36 @@ BOOL LLPanelDisplay::postBuild()
319 return TRUE; 323 return TRUE;
320} 324}
321 325
326void LLPanelDisplay::initWindowSizeControls()
327{
328 // Window size
329 mWindowSizeLabel = getChild<LLTextBox>("WindowSizeLabel");
330 mCtrlWindowSize = getChild<LLComboBox>("windowsize combo");
331
332 // Look to see if current window size matches existing window sizes, if so then
333 // just set the selection value...
334 const U32 height = gViewerWindow->getWindowDisplayHeight();
335 const U32 width = gViewerWindow->getWindowDisplayWidth();
336 for (S32 i=0; i < mCtrlWindowSize->getItemCount(); i++)
337 {
338 U32 height_test = 0;
339 U32 width_test = 0;
340 mCtrlWindowSize->setCurrentByIndex(i);
341 if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width_test, height_test))
342 {
343 if ((height_test == height) && (width_test == width))
344 {
345 return;
346 }
347 }
348 }
349 // ...otherwise, add a new entry with the current window height/width.
350 LLUIString resolution_label = getUIString("resolution_format");
351 resolution_label.setArg("[RES_X]", llformat("%d", width));
352 resolution_label.setArg("[RES_Y]", llformat("%d", height));
353 mCtrlWindowSize->add(resolution_label, ADD_TOP);
354 mCtrlWindowSize->setCurrentByIndex(0);
355}
322 356
323LLPanelDisplay::~LLPanelDisplay() 357LLPanelDisplay::~LLPanelDisplay()
324{ 358{
@@ -327,6 +361,10 @@ LLPanelDisplay::~LLPanelDisplay()
327 { 361 {
328 mCtrlAspectRatio->setCurrentByIndex(i); 362 mCtrlAspectRatio->setCurrentByIndex(i);
329 } 363 }
364 for (S32 i = 0; i < mCtrlWindowSize->getItemCount(); i++)
365 {
366 mCtrlWindowSize->setCurrentByIndex(i);
367 }
330} 368}
331 369
332void LLPanelDisplay::refresh() 370void LLPanelDisplay::refresh()
@@ -392,6 +430,7 @@ void LLPanelDisplay::refreshEnabledState()
392 mAspectRatioLabel1->setVisible(isFullScreen); 430 mAspectRatioLabel1->setVisible(isFullScreen);
393 mCtrlAutoDetectAspect->setVisible(isFullScreen); 431 mCtrlAutoDetectAspect->setVisible(isFullScreen);
394 mFullScreenInfo->setVisible(!isFullScreen); 432 mFullScreenInfo->setVisible(!isFullScreen);
433 mWindowSizeLabel->setVisible(!isFullScreen);
395 434
396 // disable graphics settings and exit if it's not set to custom 435 // disable graphics settings and exit if it's not set to custom
397 if(!gSavedSettings.getBOOL("RenderCustomSettings")) 436 if(!gSavedSettings.getBOOL("RenderCustomSettings"))
@@ -656,6 +695,12 @@ void LLPanelDisplay::cancel()
656void LLPanelDisplay::apply() 695void LLPanelDisplay::apply()
657{ 696{
658 applyResolution(); 697 applyResolution();
698
699 // Only set window size if we're not in fullscreen mode
700 if (mCtrlWindowed->get())
701 {
702 applyWindowSize();
703 }
659} 704}
660 705
661void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) 706void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data)
@@ -712,7 +757,7 @@ void LLPanelDisplay::applyResolution()
712 if (mCtrlAspectRatio->getCurrentIndex() == -1) 757 if (mCtrlAspectRatio->getCurrentIndex() == -1)
713 { 758 {
714 strncpy(aspect_ratio_text, mCtrlAspectRatio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/ 759 strncpy(aspect_ratio_text, mCtrlAspectRatio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/
715 aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0'; 760 aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0';
716 char *element = strtok(aspect_ratio_text, ":/\\"); 761 char *element = strtok(aspect_ratio_text, ":/\\");
717 if (!element) 762 if (!element)
718 { 763 {
@@ -817,6 +862,36 @@ void LLPanelDisplay::applyResolution()
817 refresh(); 862 refresh();
818} 863}
819 864
865// Extract from strings of the form "<width> x <height>", e.g. "640 x 480".
866bool LLPanelDisplay::extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height)
867{
868 using namespace boost;
869 cmatch what;
870 const regex expression("([0-9]+) x ([0-9]+)");
871 if (regex_match(sInput, what, expression))
872 {
873 width = atoi(what[1].first);
874 height = atoi(what[2].first);
875 return true;
876 }
877
878 width = height = 0;
879 return false;
880}
881
882void LLPanelDisplay::applyWindowSize()
883{
884 if (mCtrlWindowSize->getVisible() && (mCtrlWindowSize->getCurrentIndex() != -1))
885 {
886 U32 width = 0;
887 U32 height = 0;
888 if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width,height))
889 {
890 LLViewerWindow::movieSize(width, height);
891 }
892 }
893}
894
820//static 895//static
821void LLPanelDisplay::onCommitWindowedMode(LLUICtrl* ctrl, void *data) 896void LLPanelDisplay::onCommitWindowedMode(LLUICtrl* ctrl, void *data)
822{ 897{
diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h
index cc39f93..e100a18 100644
--- a/linden/indra/newview/llpaneldisplay.h
+++ b/linden/indra/newview/llpaneldisplay.h
@@ -33,7 +33,7 @@
33#define LL_LLPANELDISPLAY_H 33#define LL_LLPANELDISPLAY_H
34 34
35#include "llpanel.h" 35#include "llpanel.h"
36 36#include "llwindow.h"
37#include "llcontrol.h" 37#include "llcontrol.h"
38 38
39class LLSlider; 39class LLSlider;
@@ -72,15 +72,21 @@ public:
72 void setHiddenGraphicsState(bool isHidden); 72 void setHiddenGraphicsState(bool isHidden);
73 void apply(); // Apply the changed values. 73 void apply(); // Apply the changed values.
74 void applyResolution(); 74 void applyResolution();
75 void applyWindowSize();
75 void cancel(); 76 void cancel();
76 77
77protected: 78protected:
79 void initWindowSizeControls();
80 bool extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height);
81
78 // aspect ratio sliders and boxes 82 // aspect ratio sliders and boxes
79 LLComboBox *mCtrlFullScreen; // Fullscreen resolution 83 LLComboBox *mCtrlFullScreen; // Fullscreen resolution
80 LLCheckBoxCtrl *mCtrlWindowed; // windowed mode
81 LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio 84 LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio
82 LLComboBox *mCtrlAspectRatio; // user provided aspect ratio 85 LLComboBox *mCtrlAspectRatio; // user provided aspect ratio
83 86
87 LLCheckBoxCtrl *mCtrlWindowed; // windowed mode
88 LLComboBox *mCtrlWindowSize; // window size for windowed mode
89
84 /// performance radio group 90 /// performance radio group
85 LLSliderCtrl *mCtrlSliderQuality; 91 LLSliderCtrl *mCtrlSliderQuality;
86 LLCheckBoxCtrl *mCtrlCustomSettings; 92 LLCheckBoxCtrl *mCtrlCustomSettings;
@@ -113,7 +119,8 @@ protected:
113 LLTextBox *mAspectRatioLabel1; 119 LLTextBox *mAspectRatioLabel1;
114 LLTextBox *mDisplayResLabel; 120 LLTextBox *mDisplayResLabel;
115 LLTextEditor *mFullScreenInfo; 121 LLTextEditor *mFullScreenInfo;
116 122 LLTextBox *mWindowSizeLabel;
123
117 LLTextBox *mShaderText; 124 LLTextBox *mShaderText;
118 LLTextBox *mReflectionText; 125 LLTextBox *mReflectionText;
119 LLTextBox *mAvatarText; 126 LLTextBox *mAvatarText;
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index 1709ad2..a7eac37 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -54,6 +54,11 @@
54#include "lltexturectrl.h" 54#include "lltexturectrl.h"
55#include "llviewerwindow.h" 55#include "llviewerwindow.h"
56 56
57// consts
58const S32 MATURE_CONTENT = 1;
59const S32 NON_MATURE_CONTENT = 2;
60const S32 DECLINE_TO_STATE = 0;
61
57// static 62// static
58void* LLPanelGroupGeneral::createTab(void* data) 63void* LLPanelGroupGeneral::createTab(void* data)
59{ 64{
@@ -76,7 +81,7 @@ LLPanelGroupGeneral::LLPanelGroupGeneral(const std::string& name,
76 mBtnJoinGroup(NULL), 81 mBtnJoinGroup(NULL),
77 mListVisibleMembers(NULL), 82 mListVisibleMembers(NULL),
78 mCtrlShowInGroupList(NULL), 83 mCtrlShowInGroupList(NULL),
79 mCtrlMature(NULL), 84 mComboMature(NULL),
80 mCtrlOpenEnrollment(NULL), 85 mCtrlOpenEnrollment(NULL),
81 mCtrlEnrollmentFee(NULL), 86 mCtrlEnrollmentFee(NULL),
82 mSpinEnrollmentFee(NULL), 87 mSpinEnrollmentFee(NULL),
@@ -156,14 +161,19 @@ BOOL LLPanelGroupGeneral::postBuild()
156 mCtrlShowInGroupList->setCallbackUserData(this); 161 mCtrlShowInGroupList->setCallbackUserData(this);
157 } 162 }
158 163
159 mCtrlMature = getChild<LLCheckBoxCtrl>("mature", recurse); 164 mComboMature = getChild<LLComboBox>("group_mature_check", recurse);
160 if (mCtrlMature) 165 if(mComboMature)
161 { 166 {
162 mCtrlMature->setCommitCallback(onCommitAny); 167 mComboMature->setCurrentByIndex(0);
163 mCtrlMature->setCallbackUserData(this); 168 mComboMature->setCommitCallback(onCommitAny);
164 mCtrlMature->setVisible( !gAgent.isTeen() ); 169 mComboMature->setCallbackUserData(this);
170 if (gAgent.isTeen())
171 {
172 // Teens don't get to set mature flag. JC
173 mComboMature->setVisible(FALSE);
174 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
175 }
165 } 176 }
166
167 mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", recurse); 177 mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", recurse);
168 if (mCtrlOpenEnrollment) 178 if (mCtrlOpenEnrollment)
169 { 179 {
@@ -231,7 +241,7 @@ BOOL LLPanelGroupGeneral::postBuild()
231 mEditCharter->setEnabled(TRUE); 241 mEditCharter->setEnabled(TRUE);
232 242
233 mCtrlShowInGroupList->setEnabled(TRUE); 243 mCtrlShowInGroupList->setEnabled(TRUE);
234 mCtrlMature->setEnabled(TRUE); 244 mComboMature->setEnabled(TRUE);
235 mCtrlOpenEnrollment->setEnabled(TRUE); 245 mCtrlOpenEnrollment->setEnabled(TRUE);
236 mCtrlEnrollmentFee->setEnabled(TRUE); 246 mCtrlEnrollmentFee->setEnabled(TRUE);
237 mSpinEnrollmentFee->setEnabled(TRUE); 247 mSpinEnrollmentFee->setEnabled(TRUE);
@@ -429,6 +439,16 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
429 if (has_power_in_group || mGroupID.isNull()) 439 if (has_power_in_group || mGroupID.isNull())
430 { 440 {
431 llinfos << "LLPanelGroupGeneral::apply" << llendl; 441 llinfos << "LLPanelGroupGeneral::apply" << llendl;
442
443 // Check to make sure mature has been set
444 if(mComboMature->getCurrentIndex() == DECLINE_TO_STATE)
445 {
446 LLString::format_map_t args;
447 gViewerWindow->alertXml("SetGroupMature", &callbackConfirmMatureApply,
448 new LLHandle<LLPanel>(getHandle()));
449 return false;
450 }
451
432 if (mGroupID.isNull()) 452 if (mGroupID.isNull())
433 { 453 {
434 // Validate the group name length. 454 // Validate the group name length.
@@ -446,13 +466,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
446 LLString::format_map_t args; 466 LLString::format_map_t args;
447 args["[MESSAGE]"] = mConfirmGroupCreateStr; 467 args["[MESSAGE]"] = mConfirmGroupCreateStr;
448 gViewerWindow->alertXml("GenericAlertYesCancel", args, 468 gViewerWindow->alertXml("GenericAlertYesCancel", args,
449 createGroupCallback,new LLHandle<LLPanel>(getHandle())); 469 createGroupCallback, new LLHandle<LLPanel>(getHandle()) );
450 470
451 return false; 471 return false;
452 } 472 }
453 473
454 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); 474 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
455
456 if (!gdatap) 475 if (!gdatap)
457 { 476 {
458 mesg = "No group data found for group "; 477 mesg = "No group data found for group ";
@@ -468,11 +487,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
468 { 487 {
469 if (mEditCharter) gdatap->mCharter = mEditCharter->getText(); 488 if (mEditCharter) gdatap->mCharter = mEditCharter->getText();
470 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); 489 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
471 if (mCtrlMature) 490 if (mComboMature)
472 { 491 {
473 if (!gAgent.isTeen()) 492 if (!gAgent.isTeen())
474 { 493 {
475 gdatap->mMaturePublish = mCtrlMature->get(); 494 gdatap->mMaturePublish =
495 mComboMature->getCurrentIndex() == MATURE_CONTENT;
476 } 496 }
477 else 497 else
478 { 498 {
@@ -523,6 +543,42 @@ void LLPanelGroupGeneral::cancel()
523 notifyObservers(); 543 notifyObservers();
524} 544}
525 545
546
547// static
548void LLPanelGroupGeneral::callbackConfirmMatureApply(S32 option, void* data)
549{
550 LLHandle<LLPanel>* handlep = (LLHandle<LLPanel>*)data;
551 LLPanelGroupGeneral* self = dynamic_cast<LLPanelGroupGeneral*>(handlep->get());
552 delete handlep;
553 if (self)
554 {
555 self->confirmMatureApply(option);
556 }
557}
558
559// invoked from callbackConfirmMature
560void LLPanelGroupGeneral::confirmMatureApply(S32 option)
561{
562 // 0 == Yes
563 // 1 == No
564 // 2 == Cancel
565 switch(option)
566 {
567 case 0:
568 mComboMature->setCurrentByIndex(MATURE_CONTENT);
569 break;
570 case 1:
571 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
572 break;
573 default:
574 return;
575 }
576
577 // If we got here it means they set a valid value
578 LLString mesg = "";
579 apply(mesg);
580}
581
526// static 582// static
527void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) 583void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
528{ 584{
@@ -547,7 +603,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
547 enrollment_fee, 603 enrollment_fee,
548 self->mCtrlOpenEnrollment->get(), 604 self->mCtrlOpenEnrollment->get(),
549 false, 605 false,
550 self->mCtrlMature->get()); 606 self->mComboMature->getCurrentIndex() == MATURE_CONTENT);
551 607
552 } 608 }
553 break; 609 break;
@@ -632,11 +688,18 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
632 mCtrlShowInGroupList->set(gdatap->mShowInList); 688 mCtrlShowInGroupList->set(gdatap->mShowInList);
633 mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident); 689 mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident);
634 } 690 }
635 if (mCtrlMature) 691 if (mComboMature)
636 { 692 {
637 mCtrlMature->set(gdatap->mMaturePublish); 693 if(gdatap->mMaturePublish)
638 mCtrlMature->setEnabled(mAllowEdit && can_change_ident); 694 {
639 mCtrlMature->setVisible( !gAgent.isTeen() ); 695 mComboMature->setCurrentByIndex(MATURE_CONTENT);
696 }
697 else
698 {
699 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
700 }
701 mComboMature->setEnabled(mAllowEdit && can_change_ident);
702 mComboMature->setVisible( !gAgent.isTeen() );
640 } 703 }
641 if (mCtrlOpenEnrollment) 704 if (mCtrlOpenEnrollment)
642 { 705 {
@@ -820,7 +883,7 @@ void LLPanelGroupGeneral::updateChanged()
820 mInsignia, 883 mInsignia,
821 mEditCharter, 884 mEditCharter,
822 mCtrlShowInGroupList, 885 mCtrlShowInGroupList,
823 mCtrlMature, 886 mComboMature,
824 mCtrlOpenEnrollment, 887 mCtrlOpenEnrollment,
825 mCtrlEnrollmentFee, 888 mCtrlEnrollmentFee,
826 mSpinEnrollmentFee, 889 mSpinEnrollmentFee,
diff --git a/linden/indra/newview/llpanelgroupgeneral.h b/linden/indra/newview/llpanelgroupgeneral.h
index daf7bfa..169fcff 100644
--- a/linden/indra/newview/llpanelgroupgeneral.h
+++ b/linden/indra/newview/llpanelgroupgeneral.h
@@ -58,6 +58,7 @@ public:
58 virtual bool apply(LLString& mesg); 58 virtual bool apply(LLString& mesg);
59 virtual void cancel(); 59 virtual void cancel();
60 static void createGroupCallback(S32 option, void* user_data); 60 static void createGroupCallback(S32 option, void* user_data);
61 static void callbackConfirmMatureApply(S32 option, void* data);
61 62
62 virtual void update(LLGroupChange gc); 63 virtual void update(LLGroupChange gc);
63 64
@@ -80,6 +81,7 @@ private:
80 81
81 void updateMembers(); 82 void updateMembers();
82 void updateChanged(); 83 void updateChanged();
84 void confirmMatureApply(S32 option);
83 85
84 BOOL mPendingMemberUpdate; 86 BOOL mPendingMemberUpdate;
85 BOOL mChanged; 87 BOOL mChanged;
@@ -101,7 +103,6 @@ private:
101 103
102 // Options (include any updates in updateChanged) 104 // Options (include any updates in updateChanged)
103 LLCheckBoxCtrl *mCtrlShowInGroupList; 105 LLCheckBoxCtrl *mCtrlShowInGroupList;
104 LLCheckBoxCtrl *mCtrlMature;
105 LLCheckBoxCtrl *mCtrlOpenEnrollment; 106 LLCheckBoxCtrl *mCtrlOpenEnrollment;
106 LLCheckBoxCtrl *mCtrlEnrollmentFee; 107 LLCheckBoxCtrl *mCtrlEnrollmentFee;
107 LLSpinCtrl *mSpinEnrollmentFee; 108 LLSpinCtrl *mSpinEnrollmentFee;
@@ -109,6 +110,7 @@ private:
109 LLCheckBoxCtrl *mCtrlListGroup; 110 LLCheckBoxCtrl *mCtrlListGroup;
110 LLTextBox *mActiveTitleLabel; 111 LLTextBox *mActiveTitleLabel;
111 LLComboBox *mComboActiveTitle; 112 LLComboBox *mComboActiveTitle;
113 LLComboBox *mComboMature;
112 114
113 LLGroupMgrGroupData::member_list_t::iterator mMemberProgress; 115 LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
114}; 116};
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 9fcd73d..334e9f4 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -133,83 +133,77 @@ void LLLoginHandler::parse(const LLSD& queryMap)
133 mFirstName = queryMap["first_name"].asString(); 133 mFirstName = queryMap["first_name"].asString();
134 mLastName = queryMap["last_name"].asString(); 134 mLastName = queryMap["last_name"].asString();
135 135
136 EGridInfo grid_choice = GRID_INFO_NONE;
136 if (queryMap["grid"].asString() == "aditi") 137 if (queryMap["grid"].asString() == "aditi")
137 { 138 {
138 gGridChoice = GRID_INFO_ADITI; 139 grid_choice = GRID_INFO_ADITI;
139 } 140 }
140 else if (queryMap["grid"].asString() == "agni") 141 else if (queryMap["grid"].asString() == "agni")
141 { 142 {
142 gGridChoice = GRID_INFO_AGNI; 143 grid_choice = GRID_INFO_AGNI;
143 } 144 }
144 else if (queryMap["grid"].asString() == "siva") 145 else if (queryMap["grid"].asString() == "siva")
145 { 146 {
146 gGridChoice = GRID_INFO_SIVA; 147 grid_choice = GRID_INFO_SIVA;
147 } 148 }
148 else if (queryMap["grid"].asString() == "durga") 149 else if (queryMap["grid"].asString() == "durga")
149 { 150 {
150 gGridChoice = GRID_INFO_DURGA; 151 grid_choice = GRID_INFO_DURGA;
151 } 152 }
152 else if (queryMap["grid"].asString() == "shakti") 153 else if (queryMap["grid"].asString() == "shakti")
153 { 154 {
154 gGridChoice = GRID_INFO_SHAKTI; 155 grid_choice = GRID_INFO_SHAKTI;
155 } 156 }
156 else if (queryMap["grid"].asString() == "soma") 157 else if (queryMap["grid"].asString() == "soma")
157 { 158 {
158 gGridChoice = GRID_INFO_SOMA; 159 grid_choice = GRID_INFO_SOMA;
159 } 160 }
160 else if (queryMap["grid"].asString() == "ganga") 161 else if (queryMap["grid"].asString() == "ganga")
161 { 162 {
162 gGridChoice = GRID_INFO_GANGA; 163 grid_choice = GRID_INFO_GANGA;
163 } 164 }
164 else if (queryMap["grid"].asString() == "vaak") 165 else if (queryMap["grid"].asString() == "vaak")
165 { 166 {
166 gGridChoice = GRID_INFO_VAAK; 167 grid_choice = GRID_INFO_VAAK;
167 } 168 }
168 else if (queryMap["grid"].asString() == "uma") 169 else if (queryMap["grid"].asString() == "uma")
169 { 170 {
170 gGridChoice = GRID_INFO_UMA; 171 grid_choice = GRID_INFO_UMA;
171 } 172 }
172 else if (queryMap["grid"].asString() == "mohini") 173 else if (queryMap["grid"].asString() == "mohini")
173 { 174 {
174 gGridChoice = GRID_INFO_MOHINI; 175 grid_choice = GRID_INFO_MOHINI;
175 } 176 }
176 else if (queryMap["grid"].asString() == "yami") 177 else if (queryMap["grid"].asString() == "yami")
177 { 178 {
178 gGridChoice = GRID_INFO_YAMI; 179 grid_choice = GRID_INFO_YAMI;
179 } 180 }
180 else if (queryMap["grid"].asString() == "nandi") 181 else if (queryMap["grid"].asString() == "nandi")
181 { 182 {
182 gGridChoice = GRID_INFO_NANDI; 183 grid_choice = GRID_INFO_NANDI;
183 } 184 }
184 else if (queryMap["grid"].asString() == "mitra") 185 else if (queryMap["grid"].asString() == "mitra")
185 { 186 {
186 gGridChoice = GRID_INFO_MITRA; 187 grid_choice = GRID_INFO_MITRA;
187 } 188 }
188 else if (queryMap["grid"].asString() == "radha") 189 else if (queryMap["grid"].asString() == "radha")
189 { 190 {
190 gGridChoice = GRID_INFO_RADHA; 191 grid_choice = GRID_INFO_RADHA;
191 } 192 }
192 else if (queryMap["grid"].asString() == "ravi") 193 else if (queryMap["grid"].asString() == "ravi")
193 { 194 {
194 gGridChoice = GRID_INFO_RAVI; 195 grid_choice = GRID_INFO_RAVI;
195 } 196 }
196 else if (queryMap["grid"].asString() == "aruna") 197 else if (queryMap["grid"].asString() == "aruna")
197 { 198 {
198 gGridChoice = GRID_INFO_ARUNA; 199 grid_choice = GRID_INFO_ARUNA;
199 } 200 }
200#if !LL_RELEASE_FOR_DOWNLOAD 201
201 if (gGridChoice > GRID_INFO_NONE && gGridChoice < GRID_INFO_LOCAL) 202 if(grid_choice != GRID_INFO_NONE)
202 { 203 {
203 gSavedSettings.setS32("ServerChoice", gGridChoice); 204 LLViewerLogin::getInstance()->setGridChoice(grid_choice);
204 } 205 }
205#endif 206
206
207 if (LLAppViewer::instance()->getLoginURIs().size() == 0)
208 {
209 gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */
210 LLAppViewer::instance()->resetURIs();
211 }
212
213 LLString startLocation = queryMap["location"].asString(); 207 LLString startLocation = queryMap["location"].asString();
214 208
215 if (startLocation == "specify") 209 if (startLocation == "specify")
@@ -794,7 +788,7 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name)
794 788
795 if ((S32)GRID_INFO_OTHER == domain_name) 789 if ((S32)GRID_INFO_OTHER == domain_name)
796 { 790 {
797 server = gGridName; 791 server = LLViewerLogin::getInstance()->getGridLabel();
798 } 792 }
799 } 793 }
800 else 794 else
@@ -942,20 +936,9 @@ void LLPanelLogin::loadLoginPage()
942 LLString grid; 936 LLString grid;
943 S32 grid_index; 937 S32 grid_index;
944 getServer( grid, grid_index ); 938 getServer( grid, grid_index );
945 if( grid_index != (S32)GRID_INFO_OTHER )
946 {
947 grid = gGridInfo[grid_index].mLabel;
948 }
949 939
950 if(gGridChoice != (EGridInfo)grid_index) 940 gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid());
951 { 941 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
952 LLAppViewer::instance()->resetURIs();
953 gGridChoice = (EGridInfo)grid_index;
954 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
955 gViewerWindow->setMenuBackgroundColor(false,
956 !LLAppViewer::instance()->isInProductionGrid());
957 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
958 }
959 942
960 char* curl_grid = curl_escape(grid.c_str(), 0); 943 char* curl_grid = curl_escape(grid.c_str(), 0);
961 oStr << "&grid=" << curl_grid; 944 oStr << "&grid=" << curl_grid;
@@ -1087,15 +1070,6 @@ void LLPanelLogin::onClickConnect(void *)
1087 if (!first.empty() && !last.empty()) 1070 if (!first.empty() && !last.empty())
1088 { 1071 {
1089 // has both first and last name typed 1072 // has both first and last name typed
1090
1091 // store off custom server entry, if currently selected
1092 LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
1093 S32 selected_server = combo->getValue();
1094 if (selected_server == GRID_INFO_NONE)
1095 {
1096 LLString custom_server = combo->getValue().asString();
1097 gSavedSettings.setString("CustomServer", custom_server);
1098 }
1099 sInstance->mCallback(0, sInstance->mCallbackData); 1073 sInstance->mCallback(0, sInstance->mCallbackData);
1100 } 1074 }
1101 else 1075 else
@@ -1180,6 +1154,26 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
1180// static 1154// static
1181void LLPanelLogin::onSelectServer(LLUICtrl*, void*) 1155void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
1182{ 1156{
1157 // The user twiddled with the grid choice ui.
1158 // apply the selection to the grid setting.
1159 LLString grid;
1160 S32 grid_index;
1161 getServer( grid, grid_index );
1162
1163 // This new seelction will override preset uris
1164 // from the command line.
1165 LLViewerLogin* vl = LLViewerLogin::getInstance();
1166 vl->resetURIs();
1167 if(grid_index != GRID_INFO_OTHER)
1168 {
1169 vl->setGridChoice((EGridInfo)grid_index);
1170 grid = vl->getGridLabel();
1171 }
1172 else
1173 {
1174 vl->setGridChoice(grid);
1175 }
1176
1183 // grid changed so show new splash screen (possibly) 1177 // grid changed so show new splash screen (possibly)
1184 loadLoginPage(); 1178 loadLoginPage();
1185} 1179}
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h
index 1100cd6..cdf567b 100644
--- a/linden/indra/newview/llpanellogin.h
+++ b/linden/indra/newview/llpanellogin.h
@@ -68,6 +68,7 @@ class LLPanelLogin:
68 public LLPanel, 68 public LLPanel,
69 public LLWebBrowserCtrlObserver 69 public LLWebBrowserCtrlObserver
70{ 70{
71 LOG_CLASS(LLPanelLogin);
71public: 72public:
72 LLPanelLogin(const LLRect &rect, BOOL show_server, 73 LLPanelLogin(const LLRect &rect, BOOL show_server,
73 void (*callback)(S32 option, void* user_data), 74 void (*callback)(S32 option, void* user_data),
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index ea742ba..0d50f38 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -327,6 +327,7 @@ void LLPanelPermissions::refresh()
327 327
328 // update group text field 328 // update group text field
329 childSetEnabled("Group:",true); 329 childSetEnabled("Group:",true);
330 childSetText("Group Name",LLString::null);
330 LLUUID group_id; 331 LLUUID group_id;
331 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); 332 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
332 if (groups_identical) 333 if (groups_identical)
@@ -337,6 +338,16 @@ void LLPanelPermissions::refresh()
337 mLabelGroupName->setEnabled(TRUE); 338 mLabelGroupName->setEnabled(TRUE);
338 } 339 }
339 } 340 }
341 else
342 {
343 if(mLabelGroupName)
344 {
345 mLabelGroupName->setNameID(LLUUID::null, TRUE);
346 mLabelGroupName->refresh(LLUUID::null, "", "", TRUE);
347 mLabelGroupName->setEnabled(FALSE);
348 }
349 }
350
340 childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID())); 351 childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID()));
341 352
342 // figure out the contents of the name, description, & category 353 // figure out the contents of the name, description, & category
@@ -854,7 +865,7 @@ void callback_deed_to_group(S32 option, void*)
854 { 865 {
855 LLUUID group_id; 866 LLUUID group_id;
856 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); 867 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
857 if(groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) 868 if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED)))
858 { 869 {
859 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); 870 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
860// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); 871// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
diff --git a/linden/indra/newview/llpolymesh.cpp b/linden/indra/newview/llpolymesh.cpp
index d74beeb..3884b31 100644
--- a/linden/indra/newview/llpolymesh.cpp
+++ b/linden/indra/newview/llpolymesh.cpp
@@ -271,7 +271,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const char *fileName )
271 llerrs << "Filename is Empty!" << llendl; 271 llerrs << "Filename is Empty!" << llendl;
272 return FALSE; 272 return FALSE;
273 } 273 }
274 FILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/ 274 LLFILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/
275 if (!fp) 275 if (!fp)
276 { 276 {
277 llerrs << "can't open: " << fileName << llendl; 277 llerrs << "can't open: " << fileName << llendl;
diff --git a/linden/indra/newview/llpolymorph.cpp b/linden/indra/newview/llpolymorph.cpp
index a83f5ab..11ca7af 100644
--- a/linden/indra/newview/llpolymorph.cpp
+++ b/linden/indra/newview/llpolymorph.cpp
@@ -83,7 +83,7 @@ LLPolyMorphData::~LLPolyMorphData()
83//----------------------------------------------------------------------------- 83//-----------------------------------------------------------------------------
84// loadBinary() 84// loadBinary()
85//----------------------------------------------------------------------------- 85//-----------------------------------------------------------------------------
86BOOL LLPolyMorphData::loadBinary(FILE *fp, LLPolyMeshSharedData *mesh) 86BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
87{ 87{
88 S32 numVertices; 88 S32 numVertices;
89 S32 numRead; 89 S32 numRead;
diff --git a/linden/indra/newview/llpolymorph.h b/linden/indra/newview/llpolymorph.h
index 5f7a034..0ad5b18 100644
--- a/linden/indra/newview/llpolymorph.h
+++ b/linden/indra/newview/llpolymorph.h
@@ -51,7 +51,7 @@ public:
51 LLPolyMorphData(char *morph_name); 51 LLPolyMorphData(char *morph_name);
52 ~LLPolyMorphData(); 52 ~LLPolyMorphData();
53 53
54 BOOL loadBinary(FILE* fp, LLPolyMeshSharedData *mesh); 54 BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
55 char* loadASCII(char* text, LLPolyMeshSharedData *mesh); 55 char* loadASCII(char* text, LLPolyMeshSharedData *mesh);
56 char* getName() { return mName; } 56 char* getName() { return mName; }
57 57
diff --git a/linden/indra/newview/llpostprocess.cpp b/linden/indra/newview/llpostprocess.cpp
index c72b8ae..7ee7100 100644
--- a/linden/indra/newview/llpostprocess.cpp
+++ b/linden/indra/newview/llpostprocess.cpp
@@ -35,7 +35,7 @@
35#include "llpostprocess.h" 35#include "llpostprocess.h"
36#include "llglslshader.h" 36#include "llglslshader.h"
37#include "llsdserialize.h" 37#include "llsdserialize.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40 40
41LLPostProcess * gPostProcess = NULL; 41LLPostProcess * gPostProcess = NULL;
@@ -59,7 +59,7 @@ LLPostProcess::LLPostProcess(void) :
59 screenW(1), screenH(1) 59 screenW(1), screenH(1)
60{ 60{
61 LLString pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME)); 61 LLString pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME));
62 llinfos << "Loading PostProcess Effects settings from " << pathName << llendl; 62 LL_DEBUGS2("AppInit", "Shaders") << "Loading PostProcess Effects settings from " << pathName << LL_ENDL;
63 63
64 llifstream effectsXML(pathName.c_str()); 64 llifstream effectsXML(pathName.c_str());
65 65
@@ -215,7 +215,7 @@ void LLPostProcess::applyColorFilterShader(void)
215{ 215{
216 gPostColorFilterProgram.bind(); 216 gPostColorFilterProgram.bind();
217 217
218 glActiveTextureARB(GL_TEXTURE0_ARB); 218 gGL.getTexUnit(0)->activate();
219 glEnable(GL_TEXTURE_RECTANGLE_ARB); 219 glEnable(GL_TEXTURE_RECTANGLE_ARB);
220 220
221 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); 221 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture);
@@ -234,7 +234,7 @@ void LLPostProcess::applyColorFilterShader(void)
234 glUniform3fARB(colorFilterUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); 234 glUniform3fARB(colorFilterUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B);
235 235
236 LLGLEnable blend(GL_BLEND); 236 LLGLEnable blend(GL_BLEND);
237 gGL.blendFunc(GL_ONE,GL_ZERO); 237 gGL.setSceneBlendType(LLRender::BT_REPLACE);
238 LLGLDepthTest depth(GL_FALSE); 238 LLGLDepthTest depth(GL_FALSE);
239 239
240 /// Draw a screen space quad 240 /// Draw a screen space quad
@@ -257,14 +257,14 @@ void LLPostProcess::applyNightVisionShader(void)
257{ 257{
258 gPostNightVisionProgram.bind(); 258 gPostNightVisionProgram.bind();
259 259
260 glActiveTextureARB(GL_TEXTURE0_ARB); 260 gGL.getTexUnit(0)->activate();
261 glEnable(GL_TEXTURE_RECTANGLE_ARB); 261 glEnable(GL_TEXTURE_RECTANGLE_ARB);
262 262
263 getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject); 263 getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject);
264 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); 264 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture);
265 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0); 265 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0);
266 266
267 glActiveTextureARB(GL_TEXTURE1_ARB); 267 gGL.getTexUnit(1)->activate();
268 glEnable(GL_TEXTURE_2D); 268 glEnable(GL_TEXTURE_2D);
269 269
270 glBindTexture(GL_TEXTURE_2D, noiseTexture); 270 glBindTexture(GL_TEXTURE_2D, noiseTexture);
@@ -280,13 +280,13 @@ void LLPostProcess::applyNightVisionShader(void)
280 glUniform3fARB(nightVisionUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); 280 glUniform3fARB(nightVisionUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B);
281 281
282 LLGLEnable blend(GL_BLEND); 282 LLGLEnable blend(GL_BLEND);
283 gGL.blendFunc(GL_ONE,GL_ZERO); 283 gGL.setSceneBlendType(LLRender::BT_REPLACE);
284 LLGLDepthTest depth(GL_FALSE); 284 LLGLDepthTest depth(GL_FALSE);
285 285
286 /// Draw a screen space quad 286 /// Draw a screen space quad
287 drawOrthoQuad(screenW, screenH, QUAD_NOISE); 287 drawOrthoQuad(screenW, screenH, QUAD_NOISE);
288 gPostNightVisionProgram.unbind(); 288 gPostNightVisionProgram.unbind();
289 glActiveTextureARB(GL_TEXTURE0_ARB); 289 gGL.getTexUnit(0)->activate();
290} 290}
291 291
292void LLPostProcess::createNightVisionShader(void) 292void LLPostProcess::createNightVisionShader(void)
@@ -352,7 +352,7 @@ void LLPostProcess::doEffects(void)
352 checkError(); 352 checkError();
353 applyShaders(); 353 applyShaders();
354 354
355 glUseProgramObjectARB(0); 355 LLGLSLShader::bindNoShader();
356 checkError(); 356 checkError();
357 357
358 /// Change to a perspective view 358 /// Change to a perspective view
@@ -565,74 +565,3 @@ void LLPostProcess::checkShaderError(GLhandleARB shader)
565 } 565 }
566 checkError(); // Check for OpenGL errors 566 checkError(); // Check for OpenGL errors
567} 567}
568
569void LLPostProcess::textureBlendReplace(void)
570{
571 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
572 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE );
573 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE );
574 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
575}
576
577void LLPostProcess::textureBlendAdd(void)
578{
579 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
580 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD );
581 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
582 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
583 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
584 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
585}
586
587void LLPostProcess::textureBlendAddSigned(void)
588{
589 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
590 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED );
591 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
592 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
593 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
594 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
595}
596
597void LLPostProcess::textureBlendSubtract(void)
598{
599 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
600 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT );
601 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
602 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
603 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
604 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
605}
606
607void LLPostProcess::textureBlendAlpha(void)
608{
609 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
610 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE );
611 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
612 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
613 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS );
614 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
615 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE);
616 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA );
617}
618
619void LLPostProcess::textureBlendMultiply(void)
620{
621 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
622 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE );
623 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
624 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
625 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
626 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
627}
628
629void LLPostProcess::textureBlendMultiplyX2(void)
630{
631 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
632 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE );
633 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
634 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
635 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
636 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
637 glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, 2 );
638}
diff --git a/linden/indra/newview/llpostprocess.h b/linden/indra/newview/llpostprocess.h
index 2e98fb3..738d0f0 100644
--- a/linden/indra/newview/llpostprocess.h
+++ b/linden/indra/newview/llpostprocess.h
@@ -260,13 +260,6 @@ private:
260 void viewOrthogonal(unsigned int width, unsigned int height); 260 void viewOrthogonal(unsigned int width, unsigned int height);
261 void changeOrthogonal(unsigned int width, unsigned int height); 261 void changeOrthogonal(unsigned int width, unsigned int height);
262 void viewPerspective(void); 262 void viewPerspective(void);
263 void textureBlendReplace(void);
264 void textureBlendAdd(void);
265 void textureBlendSubtract(void);
266 void textureBlendAddSigned(void);
267 void textureBlendAlpha(void);
268 void textureBlendMultiply(void);
269 void textureBlendMultiplyX2(void);
270}; 263};
271 264
272extern LLPostProcess * gPostProcess; 265extern LLPostProcess * gPostProcess;
diff --git a/linden/indra/newview/llpreviewgesture.cpp b/linden/indra/newview/llpreviewgesture.cpp
index 4ca6009..c53eab7 100644
--- a/linden/indra/newview/llpreviewgesture.cpp
+++ b/linden/indra/newview/llpreviewgesture.cpp
@@ -67,9 +67,10 @@
67#include "llviewerstats.h" 67#include "llviewerstats.h"
68#include "llviewerwindow.h" // busycount 68#include "llviewerwindow.h" // busycount
69#include "llappviewer.h" // gVFS 69#include "llappviewer.h" // gVFS
70 70#include "llanimstatelabels.h"
71#include "llresmgr.h" 71#include "llresmgr.h"
72 72
73
73// *TODO: Translate? 74// *TODO: Translate?
74const char NONE_LABEL[] = "---"; 75const char NONE_LABEL[] = "---";
75const char SHIFT_LABEL[] = "Shift"; 76const char SHIFT_LABEL[] = "Shift";
@@ -592,7 +593,7 @@ void LLPreviewGesture::addAnimations()
592 for (i = 0; i < gUserAnimStatesCount; ++i) 593 for (i = 0; i < gUserAnimStatesCount; ++i)
593 { 594 {
594 // Use the user-readable name 595 // Use the user-readable name
595 const char* label = gUserAnimStates[i].mLabel; 596 std::string label = LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName );
596 const LLUUID& id = gUserAnimStates[i].mID; 597 const LLUUID& id = gUserAnimStates[i].mID;
597 combo->add(label, id); 598 combo->add(label, id);
598 } 599 }
diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp
index 6acd6bf..9ef711d 100644
--- a/linden/indra/newview/llpreviewscript.cpp
+++ b/linden/indra/newview/llpreviewscript.cpp
@@ -1262,7 +1262,7 @@ void LLPreviewLSL::saveIfNeeded()
1262 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id.asString()); 1262 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id.asString());
1263 std::string filename = llformat("%s.lsl", filepath.c_str()); 1263 std::string filename = llformat("%s.lsl", filepath.c_str());
1264 1264
1265 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); 1265 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb");
1266 if(!fp) 1266 if(!fp)
1267 { 1267 {
1268 llwarns << "Unable to write to " << filename << llendl; 1268 llwarns << "Unable to write to " << filename << llendl;
@@ -1336,7 +1336,7 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename,
1336 //system(command); 1336 //system(command);
1337 1337
1338 // load the error file into the error scrolllist 1338 // load the error file into the error scrolllist
1339 FILE* fp = LLFile::fopen(err_filename.c_str(), "r"); 1339 LLFILE* fp = LLFile::fopen(err_filename.c_str(), "r");
1340 if(fp) 1340 if(fp)
1341 { 1341 {
1342 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 1342 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
@@ -1851,7 +1851,7 @@ void LLLiveLSLEditor::loadScriptText(const char* filename)
1851 llerrs << "Filename is Empty!" << llendl; 1851 llerrs << "Filename is Empty!" << llendl;
1852 return; 1852 return;
1853 } 1853 }
1854 FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 1854 LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
1855 if(file) 1855 if(file)
1856 { 1856 {
1857 // read in the whole file 1857 // read in the whole file
@@ -2063,7 +2063,7 @@ void LLLiveLSLEditor::saveIfNeeded()
2063 mItem->setTransactionID(tid); 2063 mItem->setTransactionID(tid);
2064 2064
2065 // write out the data, and store it in the asset database 2065 // write out the data, and store it in the asset database
2066 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); 2066 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb");
2067 if(!fp) 2067 if(!fp)
2068 { 2068 {
2069 llwarns << "Unable to write to " << filename << llendl; 2069 llwarns << "Unable to write to " << filename << llendl;
@@ -2136,7 +2136,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
2136 std::string dst_filename = llformat("%s.lso", filepath.c_str()); 2136 std::string dst_filename = llformat("%s.lso", filepath.c_str());
2137 std::string err_filename = llformat("%s.out", filepath.c_str()); 2137 std::string err_filename = llformat("%s.out", filepath.c_str());
2138 2138
2139 FILE *fp; 2139 LLFILE *fp;
2140 if(!lscript_compile(filename.c_str(), 2140 if(!lscript_compile(filename.c_str(),
2141 dst_filename.c_str(), 2141 dst_filename.c_str(),
2142 err_filename.c_str(), 2142 err_filename.c_str(),
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp
index b4f0704..d10cc8f 100644
--- a/linden/indra/newview/llprogressview.cpp
+++ b/linden/indra/newview/llprogressview.cpp
@@ -36,7 +36,7 @@
36#include "indra_constants.h" 36#include "indra_constants.h"
37#include "llmath.h" 37#include "llmath.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llui.h" 40#include "llui.h"
41#include "llfontgl.h" 41#include "llfontgl.h"
42#include "llimagegl.h" 42#include "llimagegl.h"
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 7d26f06..4488a46 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -39,7 +39,7 @@
39#include "lldbstrings.h" 39#include "lldbstrings.h"
40#include "lleconomy.h" 40#include "lleconomy.h"
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "llpermissions.h" 43#include "llpermissions.h"
44#include "llpermissionsflags.h" 44#include "llpermissionsflags.h"
45#include "llundo.h" 45#include "llundo.h"
@@ -62,6 +62,7 @@
62#include "llhudmanager.h" 62#include "llhudmanager.h"
63#include "llinventorymodel.h" 63#include "llinventorymodel.h"
64#include "llmenugl.h" 64#include "llmenugl.h"
65#include "llmutelist.h"
65#include "llstatusbar.h" 66#include "llstatusbar.h"
66#include "llsurface.h" 67#include "llsurface.h"
67#include "lltool.h" 68#include "lltool.h"
@@ -1037,19 +1038,21 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1037 1038
1038 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) 1039 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
1039 { 1040 {
1040 LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); 1041 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
1041 LLBBox bbox = mSavedSelectionBBox; 1042 LLBBox bbox = mSavedSelectionBBox;
1042 mGridOrigin = mSavedSelectionBBox.getCenterAgent(); 1043 mGridOrigin = mSavedSelectionBBox.getCenterAgent();
1043 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; 1044 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
1044 1045
1045 if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) 1046 // DEV-12570 Just taking the saved selection box rotation prevents
1047 // wild rotations of linked sets while in local grid mode
1048 //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
1046 { 1049 {
1047 mGridRotation = mSavedSelectionBBox.getRotation(); 1050 mGridRotation = mSavedSelectionBBox.getRotation();
1048 } 1051 }
1049 else //set to the root object 1052 /*else //set to the root object
1050 { 1053 {
1051 mGridRotation = root->getRenderRotation(); 1054 mGridRotation = root->getRenderRotation();
1052 } 1055 }*/
1053 } 1056 }
1054 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) 1057 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
1055 { 1058 {
@@ -2509,11 +2512,7 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id)
2509 } 2512 }
2510 } 2513 }
2511 } 2514 }
2512 if (first_id.isNull()) 2515
2513 {
2514 return FALSE;
2515 }
2516
2517 result_id = first_id; 2516 result_id = first_id;
2518 2517
2519 return identical; 2518 return identical;
@@ -4443,6 +4442,11 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
4443 reporterp->setPickedObjectProperties(name, fullname, owner_id); 4442 reporterp->setPickedObjectProperties(name, fullname, owner_id);
4444 } 4443 }
4445 } 4444 }
4445 else if (request_flags & OBJECT_PAY_REQUEST)
4446 {
4447 // check if the owner of the paid object is muted
4448 LLMuteList::getInstance()->autoRemove(owner_id, LLMuteList::AR_MONEY);
4449 }
4446 4450
4447 // Now look through all of the hovered nodes 4451 // Now look through all of the hovered nodes
4448 struct f : public LLSelectedNodeFunctor 4452 struct f : public LLSelectedNodeFunctor
@@ -4780,7 +4784,7 @@ void LLSelectMgr::updateSilhouettes()
4780 objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE); 4784 objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE);
4781 } 4785 }
4782 4786
4783 //glAlphaFunc(GL_GREATER, 0.01f); 4787 //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4784} 4788}
4785 4789
4786void LLSelectMgr::renderSilhouettes(BOOL for_hud) 4790void LLSelectMgr::renderSilhouettes(BOOL for_hud)
@@ -4792,7 +4796,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
4792 4796
4793 LLViewerImage::bindTexture(mSilhouetteImagep); 4797 LLViewerImage::bindTexture(mSilhouetteImagep);
4794 LLGLSPipelineSelection gls_select; 4798 LLGLSPipelineSelection gls_select;
4795 glAlphaFunc(GL_GREATER, 0.0f); 4799 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
4796 LLGLEnable blend(GL_BLEND); 4800 LLGLEnable blend(GL_BLEND);
4797 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 4801 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
4798 4802
@@ -4898,7 +4902,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
4898 } 4902 }
4899 4903
4900 mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D); 4904 mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
4901 glAlphaFunc(GL_GREATER, 0.01f); 4905 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4902} 4906}
4903 4907
4904void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point) 4908void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
@@ -5263,7 +5267,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5263 if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) 5267 if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
5264 { 5268 {
5265 gGL.flush(); 5269 gGL.flush();
5266 gGL.blendFunc(GL_SRC_COLOR, GL_ONE); 5270 gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
5267 LLGLEnable fog(GL_FOG); 5271 LLGLEnable fog(GL_FOG);
5268 glFogi(GL_FOG_MODE, GL_LINEAR); 5272 glFogi(GL_FOG_MODE, GL_LINEAR);
5269 float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); 5273 float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
@@ -5273,7 +5277,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5273 glFogfv(GL_FOG_COLOR, fogCol.mV); 5277 glFogfv(GL_FOG_COLOR, fogCol.mV);
5274 5278
5275 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); 5279 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
5276 glAlphaFunc(GL_GREATER, 0.01f); 5280 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
5277 gGL.begin(LLVertexBuffer::LINES); 5281 gGL.begin(LLVertexBuffer::LINES);
5278 { 5282 {
5279 S32 i = 0; 5283 S32 i = 0;
@@ -5294,7 +5298,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5294 } 5298 }
5295 5299
5296 gGL.flush(); 5300 gGL.flush();
5297 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 5301 gGL.setSceneBlendType(LLRender::BT_ALPHA);
5298 gGL.begin(LLVertexBuffer::TRIANGLES); 5302 gGL.begin(LLVertexBuffer::TRIANGLES);
5299 { 5303 {
5300 S32 i = 0; 5304 S32 i = 0;
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index cb115ff..520501e 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -43,7 +43,7 @@
43#include "llviewerregion.h" 43#include "llviewerregion.h"
44#include "llcamera.h" 44#include "llcamera.h"
45#include "pipeline.h" 45#include "pipeline.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47#include "lloctree.h" 47#include "lloctree.h"
48 48
49const F32 SG_OCCLUSION_FUDGE = 1.01f; 49const F32 SG_OCCLUSION_FUDGE = 1.01f;
@@ -2006,7 +2006,7 @@ void renderOctree(LLSpatialGroup* group)
2006 //render solid object bounding box, color 2006 //render solid object bounding box, color
2007 //coded by buffer usage and activity 2007 //coded by buffer usage and activity
2008 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 2008 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
2009 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 2009 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
2010 LLVector4 col; 2010 LLVector4 col;
2011 if (group->mBuilt > 0.f) 2011 if (group->mBuilt > 0.f)
2012 { 2012 {
@@ -2094,7 +2094,7 @@ void renderOctree(LLSpatialGroup* group)
2094 drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); 2094 drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f));
2095 2095
2096 glDepthMask(GL_TRUE); 2096 glDepthMask(GL_TRUE);
2097 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2097 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2098 2098
2099 if (group->mBuilt <= 0.f) 2099 if (group->mBuilt <= 0.f)
2100 { 2100 {
@@ -2122,7 +2122,7 @@ void renderOctree(LLSpatialGroup* group)
2122void renderVisibility(LLSpatialGroup* group, LLCamera* camera) 2122void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
2123{ 2123{
2124 LLGLEnable blend(GL_BLEND); 2124 LLGLEnable blend(GL_BLEND);
2125 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2125 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2126 LLGLEnable cull(GL_CULL_FACE); 2126 LLGLEnable cull(GL_CULL_FACE);
2127 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 2127 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
2128 2128
@@ -2498,7 +2498,7 @@ void LLSpatialPartition::renderDebug()
2498 2498
2499 LLGLDisable cullface(GL_CULL_FACE); 2499 LLGLDisable cullface(GL_CULL_FACE);
2500 LLGLEnable blend(GL_BLEND); 2500 LLGLEnable blend(GL_BLEND);
2501 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2501 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2502 LLImageGL::unbindTexture(0); 2502 LLImageGL::unbindTexture(0);
2503 gPipeline.disableLights(); 2503 gPipeline.disableLights();
2504 2504
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 914b993..52f4d1a 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -127,6 +127,7 @@
127#include "llsky.h" 127#include "llsky.h"
128#include "llsrv.h" 128#include "llsrv.h"
129#include "llstatview.h" 129#include "llstatview.h"
130#include "lltrans.h"
130#include "llsurface.h" 131#include "llsurface.h"
131#include "lltexturecache.h" 132#include "lltexturecache.h"
132#include "lltexturefetch.h" 133#include "lltexturefetch.h"
@@ -264,8 +265,8 @@ namespace
264 const char* message, const LLSD& body, 265 const char* message, const LLSD& body,
265 LLHTTPClient::ResponderPtr response) const 266 LLHTTPClient::ResponderPtr response) const
266 { 267 {
267 llwarns << " attemped to send " << message << " to " << host 268 LL_WARNS("AppInit") << " attemped to send " << message << " to " << host
268 << " with null sender" << llendl; 269 << " with null sender" << LL_ENDL;
269 } 270 }
270 }; 271 };
271} 272}
@@ -427,17 +428,17 @@ BOOL idle_startup()
427 428
428 if (ll_init_ares() == NULL) 429 if (ll_init_ares() == NULL)
429 { 430 {
430 llerrs << "Could not start address resolution system" << llendl; 431 LL_ERRS("AppInit") << "Could not start address resolution system" << LL_ENDL;
431 } 432 }
432 433
433 // 434 //
434 // Initialize messaging system 435 // Initialize messaging system
435 // 436 //
436 llinfos << "Initializing messaging system..." << llendl; 437 LL_DEBUGS("AppInit") << "Initializing messaging system..." << LL_ENDL;
437 438
438 std::string message_template_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"message_template.msg"); 439 std::string message_template_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"message_template.msg");
439 440
440 FILE* found_template = NULL; 441 LLFILE* found_template = NULL;
441 found_template = LLFile::fopen(message_template_path.c_str(), "r"); /* Flawfinder: ignore */ 442 found_template = LLFile::fopen(message_template_path.c_str(), "r"); /* Flawfinder: ignore */
442 if (found_template) 443 if (found_template)
443 { 444 {
@@ -495,7 +496,7 @@ BOOL idle_startup()
495 496
496 if (gSavedSettings.getBOOL("LogMessages")) 497 if (gSavedSettings.getBOOL("LogMessages"))
497 { 498 {
498 llinfos << "Message logging activated!" << llendl; 499 LL_DEBUGS("AppInit") << "Message logging activated!" << LL_ENDL;
499 msg->startLogging(); 500 msg->startLogging();
500 } 501 }
501 502
@@ -520,13 +521,13 @@ BOOL idle_startup()
520 F32 outBandwidth = gSavedSettings.getF32("OutBandwidth"); 521 F32 outBandwidth = gSavedSettings.getF32("OutBandwidth");
521 if (inBandwidth != 0.f) 522 if (inBandwidth != 0.f)
522 { 523 {
523 llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl; 524 LL_DEBUGS("AppInit") << "Setting packetring incoming bandwidth to " << inBandwidth << LL_ENDL;
524 msg->mPacketRing.setUseInThrottle(TRUE); 525 msg->mPacketRing.setUseInThrottle(TRUE);
525 msg->mPacketRing.setInBandwidth(inBandwidth); 526 msg->mPacketRing.setInBandwidth(inBandwidth);
526 } 527 }
527 if (outBandwidth != 0.f) 528 if (outBandwidth != 0.f)
528 { 529 {
529 llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl; 530 LL_DEBUGS("AppInit") << "Setting packetring outgoing bandwidth to " << outBandwidth << LL_ENDL;
530 msg->mPacketRing.setUseOutThrottle(TRUE); 531 msg->mPacketRing.setUseOutThrottle(TRUE);
531 msg->mPacketRing.setOutBandwidth(outBandwidth); 532 msg->mPacketRing.setOutBandwidth(outBandwidth);
532 } 533 }
@@ -557,7 +558,7 @@ BOOL idle_startup()
557 BOOL init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle); 558 BOOL init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle);
558 if(!init) 559 if(!init)
559 { 560 {
560 llwarns << "Unable to initialize audio engine" << llendl; 561 LL_WARNS("AppInit") << "Unable to initialize audio engine" << LL_ENDL;
561 } 562 }
562 gAudiop->setMuted(TRUE); 563 gAudiop->setMuted(TRUE);
563 } 564 }
@@ -565,7 +566,7 @@ BOOL idle_startup()
565 566
566 if (LLTimer::knownBadTimer()) 567 if (LLTimer::knownBadTimer())
567 { 568 {
568 llwarns << "Unreliable timers detected (may be bad PCI chipset)!!" << llendl; 569 LL_WARNS("AppInit") << "Unreliable timers detected (may be bad PCI chipset)!!" << LL_ENDL;
569 } 570 }
570 571
571 // 572 //
@@ -638,7 +639,7 @@ BOOL idle_startup()
638 //--------------------------------------------------------------------- 639 //---------------------------------------------------------------------
639 if (STATE_MEDIA_INIT == LLStartUp::getStartupState()) 640 if (STATE_MEDIA_INIT == LLStartUp::getStartupState())
640 { 641 {
641 llinfos << "Initializing Multimedia...." << llendl; 642 LL_DEBUGS("AppInit") << "Initializing Multimedia...." << LL_ENDL;
642 set_startup_status(0.03f, "Initializing Multimedia...", gAgent.mMOTD.c_str()); 643 set_startup_status(0.03f, "Initializing Multimedia...", gAgent.mMOTD.c_str());
643 display_startup(); 644 display_startup();
644 LLViewerMedia::initClass(); 645 LLViewerMedia::initClass();
@@ -656,7 +657,7 @@ BOOL idle_startup()
656 if (STATE_LOGIN_SHOW == LLStartUp::getStartupState()) 657 if (STATE_LOGIN_SHOW == LLStartUp::getStartupState())
657 { 658 {
658 659
659 llinfos << "Initializing Window" << llendl; 660 LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL;
660 661
661 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 662 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
662 // Push our window frontmost 663 // Push our window frontmost
@@ -667,11 +668,13 @@ BOOL idle_startup()
667 if (show_connect_box) 668 if (show_connect_box)
668 { 669 {
669 // Load all the name information out of the login view 670 // Load all the name information out of the login view
670 LLPanelLogin::getFields(firstname, lastname, password, remember_password); 671 // NOTE: Hits "Attempted getFields with no login view shown" warning, since we don't
672 // show the login view until login_show() is called below.
673 // LLPanelLogin::getFields(firstname, lastname, password, remember_password);
671 674
672 if (gNoRender) 675 if (gNoRender)
673 { 676 {
674 llerrs << "Need to autologin or use command line with norender!" << llendl; 677 LL_ERRS("AppInit") << "Need to autologin or use command line with norender!" << LL_ENDL;
675 } 678 }
676 // Make sure the process dialog doesn't hide things 679 // Make sure the process dialog doesn't hide things
677 gViewerWindow->setShowProgress(FALSE); 680 gViewerWindow->setShowProgress(FALSE);
@@ -764,7 +767,7 @@ BOOL idle_startup()
764 } 767 }
765 gSavedSettings.setBOOL("RememberPassword", remember_password); 768 gSavedSettings.setBOOL("RememberPassword", remember_password);
766 769
767 llinfos << "Attempting login as: " << firstname << " " << lastname << llendl; 770 LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << LL_ENDL;
768 gDebugInfo["LoginName"] = firstname + " " + lastname; 771 gDebugInfo["LoginName"] = firstname + " " + lastname;
769 } 772 }
770 773
@@ -812,22 +815,28 @@ BOOL idle_startup()
812 LLString server_label; 815 LLString server_label;
813 S32 domain_name_index; 816 S32 domain_name_index;
814 BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index ); 817 BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index );
815 gGridChoice = (EGridInfo) domain_name_index; 818 if((EGridInfo)domain_name_index == GRID_INFO_OTHER)
816 gSavedSettings.setS32("ServerChoice", gGridChoice);
817 if (gGridChoice == GRID_INFO_OTHER)
818 { 819 {
819 gGridName = server_label;/* Flawfinder: ignore */ 820 // Since the grid chosen was an 'other', set the choice by string.
821 LLViewerLogin::getInstance()->setGridChoice(server_label);
822 }
823 else
824 {
825 // Set the choice according to index.
826 LLViewerLogin::getInstance()->setGridChoice((EGridInfo)domain_name_index);
820 } 827 }
821 828
822 if ( user_picked_server ) 829 if ( user_picked_server )
823 { // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice 830 { // User picked a grid from the popup, so clear the
831 // stored uris and they will be re-generated from the GridChoice
824 sAuthUris.clear(); 832 sAuthUris.clear();
825 LLAppViewer::instance()->resetURIs(); 833 LLViewerLogin::getInstance()->resetURIs();
826 } 834 }
827 835
828 LLString location; 836 LLString location;
829 LLPanelLogin::getLocation( location ); 837 LLPanelLogin::getLocation( location );
830 LLURLSimString::setString( location ); 838 LLURLSimString::setString( location );
839
831 // END TODO 840 // END TODO
832 LLPanelLogin::close(); 841 LLPanelLogin::close();
833 } 842 }
@@ -884,7 +893,7 @@ BOOL idle_startup()
884 893
885 // Poke the VFS, which could potentially block for a while if 894 // Poke the VFS, which could potentially block for a while if
886 // Windows XP is acting up 895 // Windows XP is acting up
887 set_startup_status(0.07f, "Verifying cache files (can take 60-90 seconds)...", NULL); 896 set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache").c_str(), NULL);
888 display_startup(); 897 display_startup();
889 898
890 gVFS->pokeFiles(); 899 gVFS->pokeFiles();
@@ -907,10 +916,9 @@ BOOL idle_startup()
907 if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState()) 916 if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
908 { 917 {
909//#define LL_MINIMIAL_REQUESTED_OPTIONS 918//#define LL_MINIMIAL_REQUESTED_OPTIONS
910 gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel; 919 gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
911 920
912 // *Note: this is where gUserAuth used to be created. 921 // *Note: this is where gUserAuth used to be created.
913
914 requested_options.clear(); 922 requested_options.clear();
915 requested_options.push_back("inventory-root"); 923 requested_options.push_back("inventory-root");
916 requested_options.push_back("inventory-skeleton"); 924 requested_options.push_back("inventory-skeleton");
@@ -942,7 +950,8 @@ BOOL idle_startup()
942 gSavedSettings.setBOOL("UseDebugMenus", TRUE); 950 gSavedSettings.setBOOL("UseDebugMenus", TRUE);
943 requested_options.push_back("god-connect"); 951 requested_options.push_back("god-connect");
944 } 952 }
945 const std::vector<std::string>& uris = LLAppViewer::instance()->getLoginURIs(); 953 std::vector<std::string> uris;
954 LLViewerLogin::getInstance()->getLoginURIs(uris);
946 std::vector<std::string>::const_iterator iter, end; 955 std::vector<std::string>::const_iterator iter, end;
947 for (iter = uris.begin(), end = uris.end(); iter != end; ++iter) 956 for (iter = uris.begin(), end = uris.end(); iter != end; ++iter)
948 { 957 {
@@ -953,15 +962,16 @@ BOOL idle_startup()
953 } 962 }
954 sAuthUriNum = 0; 963 sAuthUriNum = 0;
955 auth_method = "login_to_simulator"; 964 auth_method = "login_to_simulator";
956 auth_desc = "Logging in. "; 965
957 auth_desc += LLAppViewer::instance()->getSecondLifeTitle(); 966 LLString::format_map_t args;
958 auth_desc += " may appear frozen. Please wait."; 967 args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle();
968 auth_desc = LLTrans::getString("LoginInProgress", args).c_str();
959 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); 969 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
960 } 970 }
961 971
962 if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState()) 972 if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState())
963 { 973 {
964 lldebugs << "STATE_LOGIN_AUTHENTICATE" << llendl; 974 LL_DEBUGS("AppInit") << "STATE_LOGIN_AUTHENTICATE" << LL_ENDL;
965 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str()); 975 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str());
966 progress += 0.02f; 976 progress += 0.02f;
967 display_startup(); 977 display_startup();
@@ -1021,7 +1031,7 @@ BOOL idle_startup()
1021 1031
1022 if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState()) 1032 if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState())
1023 { 1033 {
1024 //lldebugs << "STATE_LOGIN_NO_DATA_YET" << llendl; 1034 LL_DEBUGS("AppInit") << "STATE_LOGIN_NO_DATA_YET" << LL_ENDL;
1025 // If we get here we have gotten past the potential stall 1035 // If we get here we have gotten past the potential stall
1026 // in curl, so take "may appear frozen" out of progress bar. JC 1036 // in curl, so take "may appear frozen" out of progress bar. JC
1027 auth_desc = "Logging in..."; 1037 auth_desc = "Logging in...";
@@ -1035,7 +1045,7 @@ BOOL idle_startup()
1035 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); 1045 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1036 if(LLUserAuth::E_NO_RESPONSE_YET == error) 1046 if(LLUserAuth::E_NO_RESPONSE_YET == error)
1037 { 1047 {
1038 //llinfos << "waiting..." << llendl; 1048 LL_DEBUGS("AppInit") << "waiting..." << LL_ENDL;
1039 return do_normal_idle; 1049 return do_normal_idle;
1040 } 1050 }
1041 LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING ); 1051 LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING );
@@ -1046,7 +1056,7 @@ BOOL idle_startup()
1046 1056
1047 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState()) 1057 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState())
1048 { 1058 {
1049 lldebugs << "STATE_LOGIN_DOWNLOADING" << llendl; 1059 LL_DEBUGS("AppInit") << "STATE_LOGIN_DOWNLOADING" << LL_ENDL;
1050 // Process messages to keep from dropping circuit. 1060 // Process messages to keep from dropping circuit.
1051 LLMessageSystem* msg = gMessageSystem; 1061 LLMessageSystem* msg = gMessageSystem;
1052 while (msg->checkAllMessages(gFrameCount, gServicePump)) 1062 while (msg->checkAllMessages(gFrameCount, gServicePump))
@@ -1056,18 +1066,18 @@ BOOL idle_startup()
1056 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); 1066 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1057 if(LLUserAuth::E_DOWNLOADING == error) 1067 if(LLUserAuth::E_DOWNLOADING == error)
1058 { 1068 {
1059 //llinfos << "downloading..." << llendl; 1069 LL_DEBUGS("AppInit") << "downloading..." << LL_ENDL;
1060 return do_normal_idle; 1070 return do_normal_idle;
1061 } 1071 }
1062 LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE ); 1072 LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE );
1063 progress += 0.01f; 1073 progress += 0.01f;
1064 set_startup_status(progress, "Processing Response...", auth_message.c_str()); 1074 set_startup_status(progress, LLTrans::getString("LoginProcessingResponse").c_str(), auth_message.c_str());
1065 return do_normal_idle; 1075 return do_normal_idle;
1066 } 1076 }
1067 1077
1068 if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState()) 1078 if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState())
1069 { 1079 {
1070 lldebugs << "STATE_LOGIN_PROCESS_RESPONSE" << llendl; 1080 LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL;
1071 std::ostringstream emsg; 1081 std::ostringstream emsg;
1072 BOOL quit = FALSE; 1082 BOOL quit = FALSE;
1073 const char* login_response = NULL; 1083 const char* login_response = NULL;
@@ -1089,18 +1099,18 @@ BOOL idle_startup()
1089 } 1099 }
1090 else if(login_response && (0 == strcmp(login_response, "indeterminate"))) 1100 else if(login_response && (0 == strcmp(login_response, "indeterminate")))
1091 { 1101 {
1092 llinfos << "Indeterminate login..." << llendl; 1102 LL_INFOS("AppInit") << "Indeterminate login..." << LL_ENDL;
1093 sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url")); 1103 sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url"));
1094 sAuthUriNum = 0; 1104 sAuthUriNum = 0;
1095 auth_method = LLUserAuth::getInstance()->getResponse("next_method"); 1105 auth_method = LLUserAuth::getInstance()->getResponse("next_method");
1096 auth_message = LLUserAuth::getInstance()->getResponse("message"); 1106 auth_message = LLUserAuth::getInstance()->getResponse("message");
1097 if(auth_method.substr(0, 5) == "login") 1107 if(auth_method.substr(0, 5) == "login")
1098 { 1108 {
1099 auth_desc.assign("Authenticating..."); 1109 auth_desc.assign(LLTrans::getString("LoginAuthenticating").c_str());
1100 } 1110 }
1101 else 1111 else
1102 { 1112 {
1103 auth_desc.assign("Performing account maintenance..."); 1113 auth_desc.assign(LLTrans::getString("LoginMaintenance").c_str());
1104 } 1114 }
1105 // ignoring the duration & options array for now. 1115 // ignoring the duration & options array for now.
1106 // Go back to authenticate. 1116 // Go back to authenticate.
@@ -1136,7 +1146,7 @@ BOOL idle_startup()
1136 { 1146 {
1137 if (show_connect_box) 1147 if (show_connect_box)
1138 { 1148 {
1139 llinfos << "Need tos agreement" << llendl; 1149 LL_DEBUGS("AppInit") << "Need tos agreement" << LL_ENDL;
1140 LLStartUp::setStartupState( STATE_UPDATE_CHECK ); 1150 LLStartUp::setStartupState( STATE_UPDATE_CHECK );
1141 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS, 1151 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS,
1142 message_response); 1152 message_response);
@@ -1153,7 +1163,7 @@ BOOL idle_startup()
1153 { 1163 {
1154 if (show_connect_box) 1164 if (show_connect_box)
1155 { 1165 {
1156 llinfos << "Need critical message" << llendl; 1166 LL_DEBUGS("AppInit") << "Need critical message" << LL_ENDL;
1157 LLStartUp::setStartupState( STATE_UPDATE_CHECK ); 1167 LLStartUp::setStartupState( STATE_UPDATE_CHECK );
1158 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_CRITICAL_MESSAGE, 1168 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_CRITICAL_MESSAGE,
1159 message_response); 1169 message_response);
@@ -1188,7 +1198,7 @@ BOOL idle_startup()
1188 } 1198 }
1189 if(reason_response && (0 == strcmp(reason_response, "optional"))) 1199 if(reason_response && (0 == strcmp(reason_response, "optional")))
1190 { 1200 {
1191 llinfos << "Login got optional update" << llendl; 1201 LL_DEBUGS("AppInit") << "Login got optional update" << LL_ENDL;
1192 auth_message = LLUserAuth::getInstance()->getResponse("message"); 1202 auth_message = LLUserAuth::getInstance()->getResponse("message");
1193 if (show_connect_box) 1203 if (show_connect_box)
1194 { 1204 {
@@ -1213,9 +1223,9 @@ BOOL idle_startup()
1213 } else { 1223 } else {
1214 sAuthUriNum++; 1224 sAuthUriNum++;
1215 std::ostringstream s; 1225 std::ostringstream s;
1216 s << "Previous login attempt failed. Logging in, attempt " 1226 LLString::format_map_t args;
1217 << (sAuthUriNum + 1) << ". "; 1227 args["[NUMBER]"] = sAuthUriNum + 1;
1218 auth_desc = s.str(); 1228 auth_desc = LLTrans::getString("LoginAttempt", args).c_str();
1219 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); 1229 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
1220 return do_normal_idle; 1230 return do_normal_idle;
1221 } 1231 }
@@ -1451,8 +1461,8 @@ BOOL idle_startup()
1451 { 1461 {
1452 if (gNoRender) 1462 if (gNoRender)
1453 { 1463 {
1454 llinfos << "Bad login - missing return values" << llendl; 1464 LL_WARNS("AppInit") << "Bad login - missing return values" << LL_ENDL;
1455 llinfos << emsg << llendl; 1465 LL_WARNS("AppInit") << emsg << LL_ENDL;
1456 exit(0); 1466 exit(0);
1457 } 1467 }
1458 // Bounce back to the login screen. 1468 // Bounce back to the login screen.
@@ -1471,8 +1481,8 @@ BOOL idle_startup()
1471 { 1481 {
1472 if (gNoRender) 1482 if (gNoRender)
1473 { 1483 {
1474 llinfos << "Failed to login!" << llendl; 1484 LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL;
1475 llinfos << emsg << llendl; 1485 LL_WARNS("AppInit") << emsg << LL_ENDL;
1476 exit(0); 1486 exit(0);
1477 } 1487 }
1478 // Bounce back to the login screen. 1488 // Bounce back to the login screen.
@@ -1493,7 +1503,7 @@ BOOL idle_startup()
1493 //--------------------------------------------------------------------- 1503 //---------------------------------------------------------------------
1494 if (STATE_WORLD_INIT == LLStartUp::getStartupState()) 1504 if (STATE_WORLD_INIT == LLStartUp::getStartupState())
1495 { 1505 {
1496 set_startup_status(0.40f, "Initializing World...", gAgent.mMOTD.c_str()); 1506 set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld").c_str(), gAgent.mMOTD.c_str());
1497 display_startup(); 1507 display_startup();
1498 // We should have an agent id by this point. 1508 // We should have an agent id by this point.
1499 llassert(!(gAgentID == LLUUID::null)); 1509 llassert(!(gAgentID == LLUUID::null));
@@ -1541,11 +1551,11 @@ BOOL idle_startup()
1541 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim); 1551 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim);
1542 1552
1543 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle); 1553 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle);
1544 llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; 1554 LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL;
1545 1555
1546 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT ); 1556 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT );
1547 regionp->setSeedCapability(first_sim_seed_cap); 1557 regionp->setSeedCapability(first_sim_seed_cap);
1548 llinfos << "Waiting for seed grant ...." << llendl; 1558 LL_DEBUGS("AppInit") << "Waiting for seed grant ...." << LL_ENDL;
1549 1559
1550 // Set agent's initial region to be the one we just created. 1560 // Set agent's initial region to be the one we just created.
1551 gAgent.setRegion(regionp); 1561 gAgent.setRegion(regionp);
@@ -1613,7 +1623,7 @@ BOOL idle_startup()
1613 // 1623 //
1614 // Set message handlers 1624 // Set message handlers
1615 // 1625 //
1616 llinfos << "Initializing communications..." << llendl; 1626 LL_INFOS("AppInit") << "Initializing communications..." << LL_ENDL;
1617 1627
1618 // register callbacks for messages. . . do this after initial handshake to make sure that we don't catch any unwanted 1628 // register callbacks for messages. . . do this after initial handshake to make sure that we don't catch any unwanted
1619 register_viewer_callbacks(gMessageSystem); 1629 register_viewer_callbacks(gMessageSystem);
@@ -1662,7 +1672,7 @@ BOOL idle_startup()
1662 1672
1663 // Sets up the parameters for the first simulator 1673 // Sets up the parameters for the first simulator
1664 1674
1665 llinfos << "Initializing camera..." << llendl; 1675 LL_DEBUGS("AppInit") << "Initializing camera..." << LL_ENDL;
1666 gFrameTime = totalTime(); 1676 gFrameTime = totalTime();
1667 F32 last_time = gFrameTimeSeconds; 1677 F32 last_time = gFrameTimeSeconds;
1668 gFrameTimeSeconds = (S64)(gFrameTime - gStartTime)/SEC_TO_MICROSEC; 1678 gFrameTimeSeconds = (S64)(gFrameTime - gStartTime)/SEC_TO_MICROSEC;
@@ -1697,19 +1707,19 @@ BOOL idle_startup()
1697 // Initialize global class data needed for surfaces (i.e. textures) 1707 // Initialize global class data needed for surfaces (i.e. textures)
1698 if (!gNoRender) 1708 if (!gNoRender)
1699 { 1709 {
1700 llinfos << "Initializing sky..." << llendl; 1710 LL_DEBUGS("AppInit") << "Initializing sky..." << LL_ENDL;
1701 // Initialize all of the viewer object classes for the first time (doing things like texture fetches. 1711 // Initialize all of the viewer object classes for the first time (doing things like texture fetches.
1702 gSky.init(initial_sun_direction); 1712 gSky.init(initial_sun_direction);
1703 } 1713 }
1704 1714
1705 llinfos << "Decoding images..." << llendl; 1715 LL_DEBUGS("AppInit") << "Decoding images..." << LL_ENDL;
1706 // For all images pre-loaded into viewer cache, decode them. 1716 // For all images pre-loaded into viewer cache, decode them.
1707 // Need to do this AFTER we init the sky 1717 // Need to do this AFTER we init the sky
1708 const S32 DECODE_TIME_SEC = 2; 1718 const S32 DECODE_TIME_SEC = 2;
1709 for (int i = 0; i < DECODE_TIME_SEC; i++) 1719 for (int i = 0; i < DECODE_TIME_SEC; i++)
1710 { 1720 {
1711 F32 frac = (F32)i / (F32)DECODE_TIME_SEC; 1721 F32 frac = (F32)i / (F32)DECODE_TIME_SEC;
1712 set_startup_status(0.45f + frac*0.1f, "Decoding images...", gAgent.mMOTD.c_str()); 1722 set_startup_status(0.45f + frac*0.1f, LLTrans::getString("LoginDecodingImages").c_str(), gAgent.mMOTD.c_str());
1713 display_startup(); 1723 display_startup();
1714 gImageList.decodeAllImages(1.f); 1724 gImageList.decodeAllImages(1.f);
1715 } 1725 }
@@ -1720,14 +1730,14 @@ BOOL idle_startup()
1720 LLMessageSystem* msg = gMessageSystem; 1730 LLMessageSystem* msg = gMessageSystem;
1721 if (!msg->mOurCircuitCode) 1731 if (!msg->mOurCircuitCode)
1722 { 1732 {
1723 llwarns << "Attempting to connect to simulator with a zero circuit code!" << llendl; 1733 LL_WARNS("AppInit") << "Attempting to connect to simulator with a zero circuit code!" << LL_ENDL;
1724 } 1734 }
1725 1735
1726 gUseCircuitCallbackCalled = FALSE; 1736 gUseCircuitCallbackCalled = FALSE;
1727 1737
1728 msg->enableCircuit(first_sim, TRUE); 1738 msg->enableCircuit(first_sim, TRUE);
1729 // now, use the circuit info to tell simulator about us! 1739 // now, use the circuit info to tell simulator about us!
1730 llinfos << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << llendl; 1740 LL_INFOS("AppInit") << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << LL_ENDL;
1731 msg->newMessageFast(_PREHASH_UseCircuitCode); 1741 msg->newMessageFast(_PREHASH_UseCircuitCode);
1732 msg->nextBlockFast(_PREHASH_CircuitCode); 1742 msg->nextBlockFast(_PREHASH_CircuitCode);
1733 msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode); 1743 msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode);
@@ -1753,8 +1763,8 @@ BOOL idle_startup()
1753 //--------------------------------------------------------------------- 1763 //---------------------------------------------------------------------
1754 if(STATE_WORLD_WAIT == LLStartUp::getStartupState()) 1764 if(STATE_WORLD_WAIT == LLStartUp::getStartupState())
1755 { 1765 {
1756 //llinfos << "Waiting for simulator ack...." << llendl; 1766 LL_DEBUGS("AppInit") << "Waiting for simulator ack...." << LL_ENDL;
1757 set_startup_status(0.59f, "Waiting for region handshake...", gAgent.mMOTD.c_str()); 1767 set_startup_status(0.59f, LLTrans::getString("LoginWaitingForRegionHandshake").c_str(), gAgent.mMOTD.c_str());
1758 if(gGotUseCircuitCodeAck) 1768 if(gGotUseCircuitCodeAck)
1759 { 1769 {
1760 LLStartUp::setStartupState( STATE_AGENT_SEND ); 1770 LLStartUp::setStartupState( STATE_AGENT_SEND );
@@ -1772,8 +1782,8 @@ BOOL idle_startup()
1772 //--------------------------------------------------------------------- 1782 //---------------------------------------------------------------------
1773 if (STATE_AGENT_SEND == LLStartUp::getStartupState()) 1783 if (STATE_AGENT_SEND == LLStartUp::getStartupState())
1774 { 1784 {
1775 llinfos << "Connecting to region..." << llendl; 1785 LL_DEBUGS("AppInit") << "Connecting to region..." << LL_ENDL;
1776 set_startup_status(0.60f, "Connecting to region...", gAgent.mMOTD.c_str()); 1786 set_startup_status(0.60f, LLTrans::getString("LoginConnectingToRegion").c_str(), gAgent.mMOTD.c_str());
1777 // register with the message system so it knows we're 1787 // register with the message system so it knows we're
1778 // expecting this message 1788 // expecting this message
1779 LLMessageSystem* msg = gMessageSystem; 1789 LLMessageSystem* msg = gMessageSystem;
@@ -1824,8 +1834,8 @@ BOOL idle_startup()
1824 } 1834 }
1825 else 1835 else
1826 { 1836 {
1827 //llinfos << "Awaiting AvatarInitComplete, got " 1837 LL_DEBUGS("AppInit") << "Awaiting AvatarInitComplete, got "
1828 //<< msg->getMessageName() << llendl; 1838 << msg->getMessageName() << LL_ENDL;
1829 } 1839 }
1830 } 1840 }
1831 msg->processAcks(); 1841 msg->processAcks();
@@ -1877,7 +1887,7 @@ BOOL idle_startup()
1877 { 1887 {
1878 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner)) 1888 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner))
1879 { 1889 {
1880 llwarns << "Problem loading inventory-skel-lib" << llendl; 1890 LL_WARNS("AppInit") << "Problem loading inventory-skel-lib" << LL_ENDL;
1881 } 1891 }
1882 } 1892 }
1883 options.clear(); 1893 options.clear();
@@ -1885,8 +1895,7 @@ BOOL idle_startup()
1885 { 1895 {
1886 if(!gInventory.loadSkeleton(options, gAgent.getID())) 1896 if(!gInventory.loadSkeleton(options, gAgent.getID()))
1887 { 1897 {
1888 llwarns << "Problem loading inventory-skel-targets" 1898 LL_WARNS("AppInit") << "Problem loading inventory-skel-targets" << LL_ENDL;
1889 << llendl;
1890 } 1899 }
1891 } 1900 }
1892 1901
@@ -2038,17 +2047,17 @@ BOOL idle_startup()
2038 if (rate_bps > FASTER_RATE_BPS 2047 if (rate_bps > FASTER_RATE_BPS
2039 && rate_bps > max_bandwidth) 2048 && rate_bps > max_bandwidth)
2040 { 2049 {
2041 llinfos << "Fast network connection, increasing max bandwidth to " 2050 LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to "
2042 << FASTER_RATE_BPS/1024.f 2051 << FASTER_RATE_BPS/1024.f
2043 << " kbps" << llendl; 2052 << " kbps" << LL_ENDL;
2044 gViewerThrottle.setMaxBandwidth(FASTER_RATE_BPS / 1024.f); 2053 gViewerThrottle.setMaxBandwidth(FASTER_RATE_BPS / 1024.f);
2045 } 2054 }
2046 else if (rate_bps > FAST_RATE_BPS 2055 else if (rate_bps > FAST_RATE_BPS
2047 && rate_bps > max_bandwidth) 2056 && rate_bps > max_bandwidth)
2048 { 2057 {
2049 llinfos << "Fast network connection, increasing max bandwidth to " 2058 LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to "
2050 << FAST_RATE_BPS/1024.f 2059 << FAST_RATE_BPS/1024.f
2051 << " kbps" << llendl; 2060 << " kbps" << LL_ENDL;
2052 gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f); 2061 gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f);
2053 } 2062 }
2054 } 2063 }
@@ -2080,8 +2089,8 @@ BOOL idle_startup()
2080 LLUserAuth::options_t gesture_options; 2089 LLUserAuth::options_t gesture_options;
2081 if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options)) 2090 if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options))
2082 { 2091 {
2083 llinfos << "Gesture Manager loading " << gesture_options.size() 2092 LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
2084 << llendl; 2093 << LL_ENDL;
2085 std::vector<LLUUID> item_ids; 2094 std::vector<LLUUID> item_ids;
2086 LLUserAuth::options_t::iterator resp_it; 2095 LLUserAuth::options_t::iterator resp_it;
2087 for (resp_it = gesture_options.begin(); 2096 for (resp_it = gesture_options.begin();
@@ -2134,7 +2143,7 @@ BOOL idle_startup()
2134 msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound); 2143 msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound);
2135 msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change); 2144 msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change);
2136 2145
2137 llinfos << "Initialization complete" << llendl; 2146 LL_DEBUGS("AppInit") << "Initialization complete" << LL_ENDL;
2138 2147
2139 gRenderStartTime.reset(); 2148 gRenderStartTime.reset();
2140 gForegroundTime.reset(); 2149 gForegroundTime.reset();
@@ -2249,7 +2258,7 @@ BOOL idle_startup()
2249 { 2258 {
2250 update_texture_fetch(); 2259 update_texture_fetch();
2251 set_startup_status(0.f + 0.25f * wearables_time / MAX_WEARABLES_TIME, 2260 set_startup_status(0.f + 0.25f * wearables_time / MAX_WEARABLES_TIME,
2252 "Downloading clothing...", 2261 LLTrans::getString("LoginDownloadingClothing").c_str(),
2253 gAgent.mMOTD.c_str()); 2262 gAgent.mMOTD.c_str());
2254 } 2263 }
2255 return do_normal_idle; 2264 return do_normal_idle;
@@ -2271,7 +2280,7 @@ BOOL idle_startup()
2271 gViewerWindow->showCursor(); 2280 gViewerWindow->showCursor();
2272 gViewerWindow->getWindow()->resetBusyCount(); 2281 gViewerWindow->getWindow()->resetBusyCount();
2273 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 2282 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
2274 //llinfos << "Done releasing bitmap" << llendl; 2283 LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL;
2275 gViewerWindow->setShowProgress(FALSE); 2284 gViewerWindow->setShowProgress(FALSE);
2276 gViewerWindow->setProgressCancelButtonVisible(FALSE, ""); 2285 gViewerWindow->setProgressCancelButtonVisible(FALSE, "");
2277 2286
@@ -2293,7 +2302,7 @@ BOOL idle_startup()
2293 if (gSavedSettings.getBOOL("StatsAutoRun")) 2302 if (gSavedSettings.getBOOL("StatsAutoRun"))
2294 { 2303 {
2295 LLUUID id; 2304 LLUUID id;
2296 llinfos << "Starting automatic playback" << llendl; 2305 LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL;
2297 gAgentPilot.startPlayback(); 2306 gAgentPilot.startPlayback();
2298 } 2307 }
2299 2308
@@ -2309,9 +2318,9 @@ BOOL idle_startup()
2309 // Unmute audio if desired and setup volumes. 2318 // Unmute audio if desired and setup volumes.
2310 // This is a not-uncommon crash site, so surround it with 2319 // This is a not-uncommon crash site, so surround it with
2311 // llinfos output to aid diagnosis. 2320 // llinfos output to aid diagnosis.
2312 llinfos << "Doing first audio_update_volume..." << llendl; 2321 LL_INFOS("AppInit") << "Doing first audio_update_volume..." << LL_ENDL;
2313 audio_update_volume(); 2322 audio_update_volume();
2314 llinfos << "Done first audio_update_volume." << llendl; 2323 LL_INFOS("AppInit") << "Done first audio_update_volume." << LL_ENDL;
2315 2324
2316 // reset keyboard focus to sane state of pointing at world 2325 // reset keyboard focus to sane state of pointing at world
2317 gFocusMgr.setKeyboardFocus(NULL); 2326 gFocusMgr.setKeyboardFocus(NULL);
@@ -2320,10 +2329,12 @@ BOOL idle_startup()
2320 gDebugView->mFastTimerView->setVisible(TRUE); 2329 gDebugView->mFastTimerView->setVisible(TRUE);
2321#endif 2330#endif
2322 2331
2332 LLAppViewer::instance()->startMainloopTimeout();
2333
2323 return do_normal_idle; 2334 return do_normal_idle;
2324 } 2335 }
2325 2336
2326 llwarns << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << llendl; 2337 LL_WARNS("AppInit") << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << LL_ENDL;
2327 return do_normal_idle; 2338 return do_normal_idle;
2328} 2339}
2329 2340
@@ -2333,7 +2344,7 @@ BOOL idle_startup()
2333 2344
2334void login_show() 2345void login_show()
2335{ 2346{
2336 llinfos << "Initializing Login Screen" << llendl; 2347 LL_INFOS("AppInit") << "Initializing Login Screen" << LL_ENDL;
2337 2348
2338#ifdef LL_RELEASE_FOR_DOWNLOAD 2349#ifdef LL_RELEASE_FOR_DOWNLOAD
2339 BOOL bUseDebugLogin = gSavedSettings.getBOOL("UseDebugLogin"); 2350 BOOL bUseDebugLogin = gSavedSettings.getBOOL("UseDebugLogin");
@@ -2347,35 +2358,15 @@ void login_show()
2347 2358
2348 // UI textures have been previously loaded in doPreloadImages() 2359 // UI textures have been previously loaded in doPreloadImages()
2349 2360
2350 llinfos << "Setting Servers" << llendl; 2361 LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL;
2351 2362
2352 if( GRID_INFO_OTHER == gGridChoice ) 2363 LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel().c_str(), LLViewerLogin::getInstance()->getGridChoice());
2353 { 2364
2354 LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER ); 2365 LLViewerLogin* vl = LLViewerLogin::getInstance();
2355 } 2366 for(int grid_index = GRID_INFO_ADITI; grid_index < GRID_INFO_OTHER; ++grid_index)
2356 else
2357 { 2367 {
2358 LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice ); 2368 LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index).c_str(), grid_index);
2359 } 2369 }
2360
2361 // Arg! We hate loops!
2362 LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel, GRID_INFO_ADITI );
2363 LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI );
2364 LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel, GRID_INFO_ARUNA );
2365 LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel, GRID_INFO_DURGA );
2366 LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel, GRID_INFO_GANGA );
2367 LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel, GRID_INFO_MITRA );
2368 LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel, GRID_INFO_MOHINI );
2369 LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel, GRID_INFO_NANDI );
2370 LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel, GRID_INFO_RADHA );
2371 LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel, GRID_INFO_RAVI );
2372 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA );
2373 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel, GRID_INFO_SHAKTI );
2374 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA );
2375 LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel, GRID_INFO_UMA );
2376 LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK );
2377 LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI );
2378 LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel, GRID_INFO_LOCAL );
2379} 2370}
2380 2371
2381// Callback for when login screen is closed. Option 0 = connect, option 1 = quit. 2372// Callback for when login screen is closed. Option 0 = connect, option 1 = quit.
@@ -2416,7 +2407,7 @@ void login_callback(S32 option, void *userdata)
2416 } 2407 }
2417 else 2408 else
2418 { 2409 {
2419 llwarns << "Unknown login button clicked" << llendl; 2410 LL_WARNS("AppInit") << "Unknown login button clicked" << LL_ENDL;
2420 } 2411 }
2421} 2412}
2422 2413
@@ -2437,7 +2428,7 @@ LLString load_password_from_disk()
2437 2428
2438 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, 2429 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
2439 "password.dat"); 2430 "password.dat");
2440 FILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */ 2431 LLFILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */
2441 if (!fp) 2432 if (!fp)
2442 { 2433 {
2443 return hashed_password; 2434 return hashed_password;
@@ -2484,7 +2475,7 @@ void save_password_to_disk(const char* hashed_password)
2484 } 2475 }
2485 else 2476 else
2486 { 2477 {
2487 FILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */ 2478 LLFILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */
2488 if (!fp) 2479 if (!fp)
2489 { 2480 {
2490 return; 2481 return;
@@ -2501,7 +2492,7 @@ void save_password_to_disk(const char* hashed_password)
2501 2492
2502 if (fwrite(buffer, HASHED_LENGTH, 1, fp) != 1) 2493 if (fwrite(buffer, HASHED_LENGTH, 1, fp) != 1)
2503 { 2494 {
2504 llwarns << "Short write" << llendl; 2495 LL_WARNS("AppInit") << "Short write" << LL_ENDL;
2505 } 2496 }
2506 2497
2507 fclose(fp); 2498 fclose(fp);
@@ -2551,7 +2542,7 @@ void first_run_dialog_callback(S32 option, void* userdata)
2551{ 2542{
2552 if (0 == option) 2543 if (0 == option)
2553 { 2544 {
2554 llinfos << "First run dialog cancelling" << llendl; 2545 LL_DEBUGS("AppInit") << "First run dialog cancelling" << LL_ENDL;
2555 LLWeb::loadURL( CREATE_ACCOUNT_URL ); 2546 LLWeb::loadURL( CREATE_ACCOUNT_URL );
2556 } 2547 }
2557 2548
@@ -2584,7 +2575,7 @@ void login_alert_status(S32 option, void* user_data)
2584 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); 2575 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
2585 break; 2576 break;
2586 default: 2577 default:
2587 llwarns << "Missing case in login_alert_status switch" << llendl; 2578 LL_WARNS("AppInit") << "Missing case in login_alert_status switch" << LL_ENDL;
2588 } 2579 }
2589 2580
2590 LLPanelLogin::giveFocus(); 2581 LLPanelLogin::giveFocus();
@@ -2692,7 +2683,7 @@ void update_dialog_callback(S32 option, void *userdata)
2692#endif 2683#endif
2693 // *TODO change userserver to be grid on both viewer and sim, since 2684 // *TODO change userserver to be grid on both viewer and sim, since
2694 // userserver no longer exists. 2685 // userserver no longer exists.
2695 query_map["userserver"] = gGridName; 2686 query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
2696 query_map["channel"] = gSavedSettings.getString("VersionChannelName"); 2687 query_map["channel"] = gSavedSettings.getString("VersionChannelName");
2697 // *TODO constantize this guy 2688 // *TODO constantize this guy
2698 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); 2689 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
@@ -2702,7 +2693,7 @@ void update_dialog_callback(S32 option, void *userdata)
2702 if (update_exe_path.empty()) 2693 if (update_exe_path.empty())
2703 { 2694 {
2704 // We're hosed, bail 2695 // We're hosed, bail
2705 llwarns << "LLDir::getTempFilename() failed" << llendl; 2696 LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL;
2706 LLAppViewer::instance()->forceQuit(); 2697 LLAppViewer::instance()->forceQuit();
2707 return; 2698 return;
2708 } 2699 }
@@ -2713,14 +2704,14 @@ void update_dialog_callback(S32 option, void *userdata)
2713 updater_source += gDirUtilp->getDirDelimiter(); 2704 updater_source += gDirUtilp->getDirDelimiter();
2714 updater_source += "updater.exe"; 2705 updater_source += "updater.exe";
2715 2706
2716 llinfos << "Calling CopyFile source: " << updater_source.c_str() 2707 LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source.c_str()
2717 << " dest: " << update_exe_path 2708 << " dest: " << update_exe_path
2718 << llendl; 2709 << LL_ENDL;
2719 2710
2720 2711
2721 if (!CopyFileA(updater_source.c_str(), update_exe_path.c_str(), FALSE)) 2712 if (!CopyFileA(updater_source.c_str(), update_exe_path.c_str(), FALSE))
2722 { 2713 {
2723 llinfos << "Unable to copy the updater!" << llendl; 2714 LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL;
2724 LLAppViewer::instance()->forceQuit(); 2715 LLAppViewer::instance()->forceQuit();
2725 return; 2716 return;
2726 } 2717 }
@@ -2758,14 +2749,14 @@ void update_dialog_callback(S32 option, void *userdata)
2758 params << " -program \"" << program_name << "\""; 2749 params << " -program \"" << program_name << "\"";
2759 } 2750 }
2760 2751
2761 llinfos << "Calling updater: " << update_exe_path << " " << params.str() << llendl; 2752 LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << " " << params.str() << LL_ENDL;
2762 2753
2763 //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird. 2754 //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird.
2764 LLAppViewer::instance()->removeMarkerFile(); // In case updater fails 2755 LLAppViewer::instance()->removeMarkerFile(); // In case updater fails
2765 2756
2766 // Use spawn() to run asynchronously 2757 // Use spawn() to run asynchronously
2767 int retval = _spawnl(_P_NOWAIT, update_exe_path.c_str(), update_exe_path.c_str(), params.str().c_str(), NULL); 2758 int retval = _spawnl(_P_NOWAIT, update_exe_path.c_str(), update_exe_path.c_str(), params.str().c_str(), NULL);
2768 llinfos << "Spawn returned " << retval << llendl; 2759 LL_DEBUGS("AppInit") << "Spawn returned " << retval << LL_ENDL;
2769 2760
2770#elif LL_DARWIN 2761#elif LL_DARWIN
2771 // if a sim name was passed in via command line parameter (typically through a SLURL) 2762 // if a sim name was passed in via command line parameter (typically through a SLURL)
@@ -2783,11 +2774,8 @@ void update_dialog_callback(S32 option, void *userdata)
2783 update_exe_path += LLAppViewer::instance()->getSecondLifeTitle(); 2774 update_exe_path += LLAppViewer::instance()->getSecondLifeTitle();
2784 update_exe_path += "\" &"; 2775 update_exe_path += "\" &";
2785 2776
2786 llinfos << "Calling updater: " << update_exe_path << llendl; 2777 LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << LL_ENDL;
2787 2778
2788 // *REMOVE:Mani The following call is handled through ~LLAppViewer.
2789 // remove_marker_file(); // In case updater fails
2790
2791 // Run the auto-updater. 2779 // Run the auto-updater.
2792 system(update_exe_path.c_str()); /* Flawfinder: ignore */ 2780 system(update_exe_path.c_str()); /* Flawfinder: ignore */
2793 2781
@@ -2795,10 +2783,6 @@ void update_dialog_callback(S32 option, void *userdata)
2795 OSMessageBox("Automatic updating is not yet implemented for Linux.\n" 2783 OSMessageBox("Automatic updating is not yet implemented for Linux.\n"
2796 "Please download the latest version from www.secondlife.com.", 2784 "Please download the latest version from www.secondlife.com.",
2797 NULL, OSMB_OK); 2785 NULL, OSMB_OK);
2798
2799 // *REMOVE:Mani The following call is handled through ~LLAppViewer.
2800 // remove_marker_file();
2801
2802#endif 2786#endif
2803 LLAppViewer::instance()->forceQuit(); 2787 LLAppViewer::instance()->forceQuit();
2804} 2788}
@@ -2813,7 +2797,7 @@ void use_circuit_callback(void**, S32 result)
2813 if (result) 2797 if (result)
2814 { 2798 {
2815 // Make sure user knows something bad happened. JC 2799 // Make sure user knows something bad happened. JC
2816 llinfos << "Backing up to login screen!" << llendl; 2800 LL_WARNS("AppInit") << "Backing up to login screen!" << LL_ENDL;
2817 gViewerWindow->alertXml("LoginPacketNeverReceived", 2801 gViewerWindow->alertXml("LoginPacketNeverReceived",
2818 login_alert_status, NULL); 2802 login_alert_status, NULL);
2819 reset_login(); 2803 reset_login();
@@ -2981,7 +2965,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
2981 //msg->setHandlerFunc("DirPicksReply", LLPanelDirBrowser::processDirPicksReply); 2965 //msg->setHandlerFunc("DirPicksReply", LLPanelDirBrowser::processDirPicksReply);
2982 msg->setHandlerFunc("DirClassifiedReply", LLPanelDirBrowser::processDirClassifiedReply); 2966 msg->setHandlerFunc("DirClassifiedReply", LLPanelDirBrowser::processDirClassifiedReply);
2983 msg->setHandlerFunc("DirLandReply", LLPanelDirBrowser::processDirLandReply); 2967 msg->setHandlerFunc("DirLandReply", LLPanelDirBrowser::processDirLandReply);
2984 msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply); 2968 //msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply);
2985 2969
2986 msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply); 2970 msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply);
2987 2971
@@ -3660,10 +3644,10 @@ void init_start_screen(S32 location_id)
3660 if (gStartImageGL.notNull()) 3644 if (gStartImageGL.notNull())
3661 { 3645 {
3662 gStartImageGL = NULL; 3646 gStartImageGL = NULL;
3663 llinfos << "re-initializing start screen" << llendl; 3647 LL_INFOS("AppInit") << "re-initializing start screen" << LL_ENDL;
3664 } 3648 }
3665 3649
3666 llinfos << "Loading startup bitmap..." << llendl; 3650 LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
3667 3651
3668 LLString temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter(); 3652 LLString temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
3669 3653
@@ -3682,12 +3666,12 @@ void init_start_screen(S32 location_id)
3682 // driver bug 3666 // driver bug
3683 if(!gSavedSettings.getBOOL("UseStartScreen")) 3667 if(!gSavedSettings.getBOOL("UseStartScreen"))
3684 { 3668 {
3685 llinfos << "Bitmap load disabled" << llendl; 3669 LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL;
3686 return; 3670 return;
3687 } 3671 }
3688 else if(!start_image_bmp->load(temp_str) ) 3672 else if(!start_image_bmp->load(temp_str) )
3689 { 3673 {
3690 llinfos << "Bitmap load failed" << llendl; 3674 LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
3691 return; 3675 return;
3692 } 3676 }
3693 3677
@@ -3698,7 +3682,7 @@ void init_start_screen(S32 location_id)
3698 LLPointer<LLImageRaw> raw = new LLImageRaw; 3682 LLPointer<LLImageRaw> raw = new LLImageRaw;
3699 if (!start_image_bmp->decode(raw, 0.0f)) 3683 if (!start_image_bmp->decode(raw, 0.0f))
3700 { 3684 {
3701 llinfos << "Bitmap decode failed" << llendl; 3685 LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
3702 gStartImageGL = NULL; 3686 gStartImageGL = NULL;
3703 return; 3687 return;
3704 } 3688 }
@@ -3711,7 +3695,7 @@ void init_start_screen(S32 location_id)
3711// frees the bitmap 3695// frees the bitmap
3712void release_start_screen() 3696void release_start_screen()
3713{ 3697{
3714 //llinfos << "Releasing bitmap..." << llendl; 3698 LL_DEBUGS("AppInit") << "Releasing bitmap..." << LL_ENDL;
3715 gStartImageGL = NULL; 3699 gStartImageGL = NULL;
3716} 3700}
3717 3701
@@ -3719,7 +3703,7 @@ void release_start_screen()
3719// static 3703// static
3720void LLStartUp::setStartupState( S32 state ) 3704void LLStartUp::setStartupState( S32 state )
3721{ 3705{
3722 llinfos << "Startup state changing from " << gStartupState << " to " << state << llendl; 3706 LL_INFOS("AppInit") << "Startup state changing from " << gStartupState << " to " << state << LL_ENDL;
3723 gStartupState = state; 3707 gStartupState = state;
3724} 3708}
3725 3709
diff --git a/linden/indra/newview/llstatgraph.cpp b/linden/indra/newview/llstatgraph.cpp
index c9969a2..9f219e2 100644
--- a/linden/indra/newview/llstatgraph.cpp
+++ b/linden/indra/newview/llstatgraph.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llstatgraph.h" 34#include "llstatgraph.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36 36
37#include "llmath.h" 37#include "llmath.h"
38#include "llui.h" 38#include "llui.h"
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index c11d46d..42acdcc 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -429,26 +429,18 @@ void LLStatusBar::refresh()
429 childSetVisible("restrictpush", FALSE); 429 childSetVisible("restrictpush", FALSE);
430 } 430 }
431 431
432 BOOL voice_enabled = gVoiceClient->voiceEnabled();
433 BOOL have_voice = parcel && parcel->getVoiceEnabled(); 432 BOOL have_voice = parcel && parcel->getVoiceEnabled();
434 if (!voice_enabled) 433 if (have_voice)
435 { 434 {
436 childSetVisible("status_no_voice", FALSE); 435 childSetVisible("status_no_voice", FALSE);
437 } 436 }
438 else 437 else
439 { 438 {
440 if (have_voice) 439 childSetVisible("status_no_voice", TRUE);
441 { 440 childGetRect( "status_no_voice", buttonRect );
442 childSetVisible("status_no_voice", FALSE); 441 r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
443 } 442 childSetRect( "status_no_voice", r );
444 else if (!have_voice) 443 x += buttonRect.getWidth();
445 {
446 childSetVisible("status_no_voice", TRUE);
447 childGetRect( "status_no_voice", buttonRect );
448 r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
449 childSetRect( "status_no_voice", r );
450 x += buttonRect.getWidth();
451 }
452 } 444 }
453 445
454 BOOL canBuyLand = parcel 446 BOOL canBuyLand = parcel
diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp
new file mode 100644
index 0000000..a8c8bf7
--- /dev/null
+++ b/linden/indra/newview/llstylemap.cpp
@@ -0,0 +1,75 @@
1/**
2 * @file llstylemap.cpp
3 * @brief LLStyleMap class implementation
4 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 *
7 * Copyright (c) 2002-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "llviewerprecompiledheaders.h"
33
34#include "llstylemap.h"
35#include "llstring.h"
36#include "llui.h"
37#include "llviewercontrol.h"
38#include "llagent.h"
39
40LLStyleMap::LLStyleMap()
41{
42}
43
44LLStyleMap::~LLStyleMap()
45{
46}
47
48LLStyleMap &LLStyleMap::instance()
49{
50 static LLStyleMap mStyleMap;
51 return mStyleMap;
52}
53
54// This is similar to the [] accessor except that if the entry doesn't already exist,
55// then this will create the entry.
56const LLStyleSP &LLStyleMap::lookup(const LLUUID &source)
57{
58 // Find this style in the map or add it if not. This map holds links to residents' profiles.
59 if (find(source) == end())
60 {
61 LLStyleSP style(new LLStyle);
62 style->setVisible(true);
63 style->setFontName(LLString::null);
64 if (source != gAgent.getID() && source != LLUUID::null)
65 {
66 style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
67 LLString link = llformat("secondlife:///app/agent/%s/about",source.asString().c_str());
68 style->setLinkHREF(link);
69 }
70 else
71 style->setColor(LLColor4::white);
72 (*this)[source] = style;
73 }
74 return (*this)[source];
75}
diff --git a/linden/indra/llwindow/llwindowsolaris.cpp b/linden/indra/newview/llstylemap.h
index 54a77ae..2e9339c 100644
--- a/linden/indra/llwindow/llwindowsolaris.cpp
+++ b/linden/indra/newview/llstylemap.h
@@ -1,10 +1,10 @@
1/** 1/**
2 * @file fmodwrapper.cpp 2 * @file LLStyleMap.h
3 * @brief dummy source file for building a shared library to wrap libfmod.a 3 * @brief LLStyleMap class definition
4 * 4 *
5 * $LicenseInfo:firstyear=2005&license=viewergpl$ 5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2005-2008, Linden Research, Inc. 7 * Copyright (c) 2002-2008, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -29,33 +29,26 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_SOLARIS
33 32
34#include "linden_common.h" 33#ifndef LL_LLSTYLE_MAP_H
35#include "indra_constants.h" 34#define LL_LLSTYLE_MAP_H
36 35
37#include "llwindowsolaris.h" 36#include "llstyle.h"
38#include "llgl.h" 37#include "lluuid.h"
39#include "llglheaders.h"
40
41//
42// LLWindowSolaris
43//
44LLWindowSolaris::LLWindowSolaris(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
45 U32 flags, BOOL fullscreen, BOOL clearBg,
46 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
47 : LLWindow(fullscreen, flags)
48{
49 llerrs << "Solaris window not yet supported" << llendl;
50}
51 38
39// Lightweight class for holding and managing mappings between UUIDs and links.
40// Used (for example) to create clickable name links off of IM chat.
52 41
53LLWindowSolaris::~LLWindowSolaris() 42typedef std::map<LLUUID, LLStyleSP> style_map_t;
54{
55}
56 43
57void LLWindowSolaris::swapBuffers() 44class LLStyleMap : public style_map_t
58{ 45{
59} 46public:
60 47 LLStyleMap();
61#endif // LL_SOLARIS 48 ~LLStyleMap();
49 // Just like the [] accessor but it will add the entry in if it doesn't exist.
50 const LLStyleSP &lookup(const LLUUID &source);
51 static LLStyleMap &instance();
52};
53
54#endif // LL_LLSTYLE_MAP_H
diff --git a/linden/indra/newview/llsurfacepatch.cpp b/linden/indra/newview/llsurfacepatch.cpp
index 5b03c98..42aea9e 100644
--- a/linden/indra/newview/llsurfacepatch.cpp
+++ b/linden/indra/newview/llsurfacepatch.cpp
@@ -206,10 +206,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
206void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal, 206void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
207 LLVector2 *tex0, LLVector2 *tex1) 207 LLVector2 *tex0, LLVector2 *tex1)
208{ 208{
209 if (!mSurfacep || !mSurfacep->getRegion()) 209 if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
210 { 210 {
211 return; // failsafe 211 return; // failsafe
212 } 212 }
213 llassert_always(vertex && normal && tex0 && tex1);
213 214
214 U32 surface_stride = mSurfacep->getGridsPerEdge(); 215 U32 surface_stride = mSurfacep->getGridsPerEdge();
215 U32 point_offset = x + y*surface_stride; 216 U32 point_offset = x + y*surface_stride;
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 66d9a33..0e4c9c2 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -52,7 +52,7 @@
52#include "llxmltree.h" 52#include "llxmltree.h"
53#include "pipeline.h" 53#include "pipeline.h"
54#include "v4coloru.h" 54#include "v4coloru.h"
55#include "llglimmediate.h" 55#include "llrender.h"
56 56
57//#include "../tools/imdebug/imdebug.h" 57//#include "../tools/imdebug/imdebug.h"
58 58
@@ -239,6 +239,9 @@ BOOL LLTexLayerSetBuffer::render()
239{ 239{
240 U8* baked_bump_data = NULL; 240 U8* baked_bump_data = NULL;
241 241
242 // Default color mask for tex layer render
243 gGL.setColorMask(true, true);
244
242 // do we need to upload, and do we have sufficient data to create an uploadable composite? 245 // do we need to upload, and do we have sufficient data to create an uploadable composite?
243 // When do we upload the texture if gAgent.mNumPendingQueries is non-zero? 246 // When do we upload the texture if gAgent.mNumPendingQueries is non-zero?
244 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal()); 247 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
@@ -292,8 +295,8 @@ BOOL LLTexLayerSetBuffer::render()
292 } 295 }
293 296
294 // reset GL state 297 // reset GL state
295 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 298 gGL.setColorMask(true, true);
296 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 299 gGL.setSceneBlendType(LLRender::BT_ALPHA);
297 300
298 // we have valid texture data now 301 // we have valid texture data now
299 mInitialized = TRUE; 302 mInitialized = TRUE;
@@ -756,6 +759,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
756 759
757 LLGLSUIDefault gls_ui; 760 LLGLSUIDefault gls_ui;
758 LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE); 761 LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
762 gGL.setColorMask(true, true);
759 763
760 // composite color layers 764 // composite color layers
761 for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) 765 for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
@@ -774,8 +778,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
774 { 778 {
775 LLGLSNoAlphaTest gls_no_alpha_test; 779 LLGLSNoAlphaTest gls_no_alpha_test;
776 gGL.flush(); 780 gGL.flush();
777 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 781 gGL.setColorMask(false, true);
778 gGL.blendFunc( GL_ONE, GL_ZERO ); 782 gGL.setSceneBlendType(LLRender::BT_REPLACE);
779 783
780 { 784 {
781 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE ); 785 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE );
@@ -793,8 +797,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
793 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 797 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
794 798
795 gGL.flush(); 799 gGL.flush();
796 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 800 gGL.setColorMask(true, true);
797 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 801 gGL.setSceneBlendType(LLRender::BT_ALPHA);
798 } 802 }
799 else 803 else
800 if( getInfo()->mClearAlpha ) 804 if( getInfo()->mClearAlpha )
@@ -803,12 +807,12 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
803 LLGLSNoTextureNoAlphaTest gls_no_alpha; 807 LLGLSNoTextureNoAlphaTest gls_no_alpha;
804 gGL.color4f( 0.f, 0.f, 0.f, 1.f ); 808 gGL.color4f( 0.f, 0.f, 0.f, 1.f );
805 gGL.flush(); 809 gGL.flush();
806 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 810 gGL.setColorMask(false, true);
807 811
808 gl_rect_2d_simple( width, height ); 812 gl_rect_2d_simple( width, height );
809 813
810 gGL.flush(); 814 gGL.flush();
811 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 815 gGL.setColorMask(true, true);
812 } 816 }
813 stop_glerror(); 817 stop_glerror();
814 818
@@ -836,11 +840,11 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
836 // Set the alpha channel to one (clean up after previous blending) 840 // Set the alpha channel to one (clean up after previous blending)
837 LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha; 841 LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha;
838 gGL.color4f( 0.f, 0.f, 0.f, 1.f ); 842 gGL.color4f( 0.f, 0.f, 0.f, 1.f );
839 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 843 gGL.setColorMask(false, true);
840 844
841 gl_rect_2d_simple( width, height ); 845 gl_rect_2d_simple( width, height );
842 846
843 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 847 gGL.setColorMask(true, true);
844 stop_glerror(); 848 stop_glerror();
845 849
846 return success; 850 return success;
@@ -1330,7 +1334,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1330 renderAlphaMasks( x, y, width, height, &net_color ); 1334 renderAlphaMasks( x, y, width, height, &net_color );
1331 alpha_mask_specified = TRUE; 1335 alpha_mask_specified = TRUE;
1332 gGL.flush(); 1336 gGL.flush();
1333 gGL.blendFunc( GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA ); 1337 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
1334 } 1338 }
1335 1339
1336 gGL.color4fv( net_color.mV); 1340 gGL.color4fv( net_color.mV);
@@ -1338,7 +1342,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1338 if( getInfo()->mWriteAllChannels ) 1342 if( getInfo()->mWriteAllChannels )
1339 { 1343 {
1340 gGL.flush(); 1344 gGL.flush();
1341 gGL.blendFunc( GL_ONE, GL_ZERO ); 1345 gGL.setSceneBlendType(LLRender::BT_REPLACE);
1342 } 1346 }
1343 1347
1344 if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly ) 1348 if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly )
@@ -1401,7 +1405,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1401 { 1405 {
1402 // Restore standard blend func value 1406 // Restore standard blend func value
1403 gGL.flush(); 1407 gGL.flush();
1404 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 1408 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1405 stop_glerror(); 1409 stop_glerror();
1406 } 1410 }
1407 1411
@@ -1506,7 +1510,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1506 1510
1507 llassert( !mParamAlphaList.empty() ); 1511 llassert( !mParamAlphaList.empty() );
1508 1512
1509 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 1513 gGL.setColorMask(false, true);
1510 1514
1511 alpha_list_t::iterator iter = mParamAlphaList.begin(); 1515 alpha_list_t::iterator iter = mParamAlphaList.begin();
1512 LLTexLayerParamAlpha* first_param = *iter; 1516 LLTexLayerParamAlpha* first_param = *iter;
@@ -1518,7 +1522,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1518 1522
1519 // Clear the alpha 1523 // Clear the alpha
1520 gGL.flush(); 1524 gGL.flush();
1521 gGL.blendFunc( GL_ONE, GL_ZERO ); 1525 gGL.setSceneBlendType(LLRender::BT_REPLACE);
1522 1526
1523 gGL.color4f( 0.f, 0.f, 0.f, 0.f ); 1527 gGL.color4f( 0.f, 0.f, 0.f, 0.f );
1524 gl_rect_2d_simple( width, height ); 1528 gl_rect_2d_simple( width, height );
@@ -1536,7 +1540,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1536 1540
1537 // Approximates a min() function 1541 // Approximates a min() function
1538 gGL.flush(); 1542 gGL.flush();
1539 gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); 1543 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
1540 1544
1541 // Accumulate the alpha component of the texture 1545 // Accumulate the alpha component of the texture
1542 if( getInfo()->mLocalTexture != -1 ) 1546 if( getInfo()->mLocalTexture != -1 )
@@ -1601,7 +1605,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1601 1605
1602 LLGLSUIDefault gls_ui; 1606 LLGLSUIDefault gls_ui;
1603 1607
1604 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 1608 gGL.setColorMask(true, true);
1605 1609
1606 if (!mMorphMasksValid && !mMaskedMorphs.empty()) 1610 if (!mMorphMasksValid && !mMaskedMorphs.empty())
1607 { 1611 {
@@ -1963,11 +1967,11 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
1963 gGL.flush(); 1967 gGL.flush();
1964 if( getInfo()->mMultiplyBlend ) 1968 if( getInfo()->mMultiplyBlend )
1965 { 1969 {
1966 gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); // Multiplication: approximates a min() function 1970 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Multiplication: approximates a min() function
1967 } 1971 }
1968 else 1972 else
1969 { 1973 {
1970 gGL.blendFunc( GL_ONE, GL_ONE ); // Addition: approximates a max() function 1974 gGL.setSceneBlendType(LLRender::BT_ADD); // Addition: approximates a max() function
1971 } 1975 }
1972 1976
1973 if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid) 1977 if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid)
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index c31fbba..ab85b32 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -1023,8 +1023,8 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only)
1023 sCacheMaxTexturesSize = max_size; 1023 sCacheMaxTexturesSize = max_size;
1024 max_size -= sCacheMaxTexturesSize; 1024 max_size -= sCacheMaxTexturesSize;
1025 1025
1026 llinfos << "TEXTURE CACHE: Headers: " << sCacheMaxEntries 1026 LL_INFOS("TextureCache") << "Headers: " << sCacheMaxEntries
1027 << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << llendl; 1027 << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << LL_ENDL;
1028 1028
1029 setDirNames(location); 1029 setDirNames(location);
1030 1030
@@ -1161,7 +1161,7 @@ void LLTextureCache::purgeTextures(bool validate)
1161 S32 num_entries = filesize / sizeof(Entry); 1161 S32 num_entries = filesize / sizeof(Entry);
1162 if (num_entries * (S32)sizeof(Entry) != filesize) 1162 if (num_entries * (S32)sizeof(Entry) != filesize)
1163 { 1163 {
1164 llwarns << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << llendl; 1164 LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
1165 purgeAllTextures(false); 1165 purgeAllTextures(false);
1166 return; 1166 return;
1167 } 1167 }
@@ -1175,19 +1175,19 @@ void LLTextureCache::purgeTextures(bool validate)
1175 (U8*)entries, 0, num_entries*sizeof(Entry)); 1175 (U8*)entries, 0, num_entries*sizeof(Entry));
1176 if (bytes_read != filesize) 1176 if (bytes_read != filesize)
1177 { 1177 {
1178 llwarns << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << llendl; 1178 LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
1179 purgeAllTextures(false); 1179 purgeAllTextures(false);
1180 return; 1180 return;
1181 } 1181 }
1182 1182
1183 llinfos << "TEXTURE CACHE: Reading Entries..." << llendl; 1183 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL;
1184 1184
1185 std::map<LLUUID, S32> entry_idx_map; 1185 std::map<LLUUID, S32> entry_idx_map;
1186 S64 total_size = 0; 1186 S64 total_size = 0;
1187 for (S32 idx=0; idx<num_entries; idx++) 1187 for (S32 idx=0; idx<num_entries; idx++)
1188 { 1188 {
1189 const LLUUID& id = entries[idx].mID; 1189 const LLUUID& id = entries[idx].mID;
1190// llinfos << "Entry: " << id << " Size: " << entries[i].mSize << " Time: " << entries[i].mTime << llendl; 1190 LL_DEBUGS("TextureCache") << "Entry: " << id << " Size: " << entries[idx].mSize << " Time: " << entries[idx].mTime << LL_ENDL;
1191 std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id); 1191 std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id);
1192 if (iter != entry_idx_map.end()) 1192 if (iter != entry_idx_map.end())
1193 { 1193 {
@@ -1206,7 +1206,7 @@ void LLTextureCache::purgeTextures(bool validate)
1206 validate_idx = gSavedSettings.getU32("CacheValidateCounter"); 1206 validate_idx = gSavedSettings.getU32("CacheValidateCounter");
1207 U32 next_idx = (++validate_idx) % 256; 1207 U32 next_idx = (++validate_idx) % 256;
1208 gSavedSettings.setU32("CacheValidateCounter", next_idx); 1208 gSavedSettings.setU32("CacheValidateCounter", next_idx);
1209 llinfos << "TEXTURE CACHE: Validating: " << validate_idx << llendl; 1209 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL;
1210 } 1210 }
1211 1211
1212 S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10; 1212 S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10;
@@ -1230,12 +1230,12 @@ void LLTextureCache::purgeTextures(bool validate)
1230 S32 uuididx = entries[idx].mID.mData[0]; 1230 S32 uuididx = entries[idx].mID.mData[0];
1231 if (uuididx == validate_idx) 1231 if (uuididx == validate_idx)
1232 { 1232 {
1233// llinfos << "Validating: " << filename << "Size: " << entries[idx].mSize << llendl; 1233 LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL;
1234 S32 bodysize = ll_apr_file_size(filename, NULL); 1234 S32 bodysize = ll_apr_file_size(filename, NULL);
1235 if (bodysize != entries[idx].mSize) 1235 if (bodysize != entries[idx].mSize)
1236 { 1236 {
1237 llwarns << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize 1237 LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize
1238 << filename << llendl; 1238 << filename << LL_ENDL;
1239 purge_entry = true; 1239 purge_entry = true;
1240 } 1240 }
1241 } 1241 }
@@ -1243,7 +1243,7 @@ void LLTextureCache::purgeTextures(bool validate)
1243 if (purge_entry) 1243 if (purge_entry)
1244 { 1244 {
1245 purge_count++; 1245 purge_count++;
1246// llinfos << "PURGING: " << filename << llendl; 1246 LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
1247 ll_apr_file_remove(filename, NULL); 1247 ll_apr_file_remove(filename, NULL);
1248 total_size -= entries[idx].mSize; 1248 total_size -= entries[idx].mSize;
1249 entries[idx].mSize = 0; 1249 entries[idx].mSize = 0;
@@ -1259,7 +1259,7 @@ void LLTextureCache::purgeTextures(bool validate)
1259 } 1259 }
1260 num_entries = next_idx; 1260 num_entries = next_idx;
1261 1261
1262 llinfos << "TEXTURE CACHE: Writing Entries: " << num_entries << llendl; 1262 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL;
1263 1263
1264 ll_apr_file_remove(mTexturesDirEntriesFileName, NULL); 1264 ll_apr_file_remove(mTexturesDirEntriesFileName, NULL);
1265 ll_apr_file_write_ex(mTexturesDirEntriesFileName, NULL, 1265 ll_apr_file_write_ex(mTexturesDirEntriesFileName, NULL,
@@ -1276,7 +1276,7 @@ void LLTextureCache::purgeTextures(bool validate)
1276 1276
1277 delete[] entries; 1277 delete[] entries;
1278 1278
1279 llinfos << "TEXTURE CACHE:" 1279 LL_INFOS("TextureCache") << "TEXTURE CACHE:"
1280 << " PURGED: " << purge_count 1280 << " PURGED: " << purge_count
1281 << " ENTRIES: " << num_entries 1281 << " ENTRIES: " << num_entries
1282 << " CACHE SIZE: " << total_size / 1024*1024 << " MB" 1282 << " CACHE SIZE: " << total_size / 1024*1024 << " MB"
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index 2be75c7..9a02c5a 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -34,7 +34,7 @@
34 34
35#include "lltexturectrl.h" 35#include "lltexturectrl.h"
36 36
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llagent.h" 38#include "llagent.h"
39#include "llviewerimagelist.h" 39#include "llviewerimagelist.h"
40#include "llcheckboxctrl.h" 40#include "llcheckboxctrl.h"
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 9399ed3..2e4283b 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -1341,13 +1341,13 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
1341 } 1341 }
1342 1342
1343 S32 desired_size; 1343 S32 desired_size;
1344 if ((desired_discard == 0) && worker && worker->mFileSize) 1344 if (desired_discard == 0)
1345 { 1345 {
1346 // if we want the entire image, and we know its size, then get it all 1346 // if we want the entire image, and we know its size, then get it all
1347 // (calcDataSizeJ2C() below makes assumptions about how the image 1347 // (calcDataSizeJ2C() below makes assumptions about how the image
1348 // was compressed - this code ensures that when we request the entire image, 1348 // was compressed - this code ensures that when we request the entire image,
1349 // we really do get it.) 1349 // we really do get it.)
1350 desired_size = worker->mFileSize; 1350 desired_size = MAX_IMAGE_DATA_SIZE;
1351 } 1351 }
1352 else if (w*h*c > 0) 1352 else if (w*h*c > 0)
1353 { 1353 {
@@ -1358,17 +1358,11 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
1358 } 1358 }
1359 else 1359 else
1360 { 1360 {
1361 if (desired_discard == 0) 1361 desired_size = FIRST_PACKET_SIZE;
1362 { 1362 desired_discard = MAX_DISCARD_LEVEL;
1363 // If we want all of the image, request the maximum possible data
1364 desired_size = MAX_IMAGE_DATA_SIZE;
1365 }
1366 else
1367 {
1368 desired_size = FIRST_PACKET_SIZE;
1369 desired_discard = MAX_DISCARD_LEVEL;
1370 }
1371 } 1363 }
1364
1365
1372 if (worker) 1366 if (worker)
1373 { 1367 {
1374 if (worker->wasAborted()) 1368 if (worker->wasAborted())
diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp
index db2853e..a2b3d47 100644
--- a/linden/indra/newview/lltextureview.cpp
+++ b/linden/indra/newview/lltextureview.cpp
@@ -40,7 +40,7 @@
40#include "lllfsthread.h" 40#include "lllfsthread.h"
41#include "llui.h" 41#include "llui.h"
42#include "llimageworker.h" 42#include "llimageworker.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44 44
45#include "llhoverview.h" 45#include "llhoverview.h"
46#include "llselectmgr.h" 46#include "llselectmgr.h"
diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp
index 8d103ce..6612538 100644
--- a/linden/indra/newview/lltoolbar.cpp
+++ b/linden/indra/newview/lltoolbar.cpp
@@ -288,10 +288,15 @@ void LLToolBar::refresh()
288 288
289 // Clothing button updated inside LLFloaterClothing 289 // Clothing button updated inside LLFloaterClothing
290 290
291 childSetEnabled("fly_btn", gAgent.canFly() || gAgent.getFlying() ); 291 BOOL sitting = FALSE;
292 if (gAgent.getAvatarObject())
293 {
294 sitting = gAgent.getAvatarObject()->mIsSitting;
295 }
292 296
293 childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() ); 297 childSetEnabled("fly_btn", (gAgent.canFly() || gAgent.getFlying()) && !sitting );
294 298
299 childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() );
295 300
296 // Check to see if we're in build mode 301 // Check to see if we're in build mode
297 BOOL build_mode = LLToolMgr::getInstance()->inEdit(); 302 BOOL build_mode = LLToolMgr::getInstance()->inEdit();
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 319a5fd..9958d50 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -35,7 +35,7 @@
35#include "lltoolselectland.h" 35#include "lltoolselectland.h"
36 36
37#include "llgl.h" 37#include "llgl.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40#include "message.h" 40#include "message.h"
41 41
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index 67a2153..c492c7b 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -47,6 +47,7 @@
47#include "llhudmanager.h" 47#include "llhudmanager.h"
48#include "llinventorymodel.h" 48#include "llinventorymodel.h"
49#include "llinventoryview.h" 49#include "llinventoryview.h"
50#include "llmutelist.h"
50#include "llnotify.h" 51#include "llnotify.h"
51#include "llpreviewnotecard.h" 52#include "llpreviewnotecard.h"
52#include "llselectmgr.h" 53#include "llselectmgr.h"
@@ -1693,6 +1694,8 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
1693 effectp->setDuration(LL_HUD_DUR_SHORT); 1694 effectp->setDuration(LL_HUD_DUR_SHORT);
1694 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1695 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1695 gFloaterTools->dirty(); 1696 gFloaterTools->dirty();
1697
1698 LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
1696} 1699}
1697 1700
1698void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, 1701void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
@@ -1895,6 +1898,8 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
1895 effectp->setDuration(LL_HUD_DUR_SHORT); 1898 effectp->setDuration(LL_HUD_DUR_SHORT);
1896 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1899 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1897 gFloaterTools->dirty(); 1900 gFloaterTools->dirty();
1901
1902 LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
1898 } 1903 }
1899} 1904}
1900 1905
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index c526e6e..e5a3ed5 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -57,6 +57,7 @@
57#include "llmorphview.h" 57#include "llmorphview.h"
58 58
59// Globals 59// Globals
60BOOL gCameraBtnZoom = TRUE;
60BOOL gCameraBtnOrbit = FALSE; 61BOOL gCameraBtnOrbit = FALSE;
61BOOL gCameraBtnPan = FALSE; 62BOOL gCameraBtnPan = FALSE;
62 63
@@ -403,7 +404,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
403 } 404 }
404 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPan" << llendl; 405 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPan" << llendl;
405 } 406 }
406 else 407 else if (gCameraBtnZoom)
407 { 408 {
408 // Zoom tool 409 // Zoom tool
409 if (hasMouseCapture()) 410 if (hasMouseCapture())
diff --git a/linden/indra/newview/lltoolfocus.h b/linden/indra/newview/lltoolfocus.h
index 3f5b04c..e50ea5e 100644
--- a/linden/indra/newview/lltoolfocus.h
+++ b/linden/indra/newview/lltoolfocus.h
@@ -77,5 +77,6 @@ protected:
77 77
78extern BOOL gCameraBtnOrbit; 78extern BOOL gCameraBtnOrbit;
79extern BOOL gCameraBtnPan; 79extern BOOL gCameraBtnPan;
80extern BOOL gCameraBtnZoom;
80 81
81#endif 82#endif
diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp
index a18321a..2fbf4ae 100644
--- a/linden/indra/newview/lltoolmorph.cpp
+++ b/linden/indra/newview/lltoolmorph.cpp
@@ -33,7 +33,7 @@
33 33
34// File includes 34// File includes
35#include "lltoolmorph.h" 35#include "lltoolmorph.h"
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38// Library includes 38// Library includes
39#include "audioengine.h" 39#include "audioengine.h"
diff --git a/linden/indra/newview/lltoolselectrect.cpp b/linden/indra/newview/lltoolselectrect.cpp
index 11cdf4b..ceb0659 100644
--- a/linden/indra/newview/lltoolselectrect.cpp
+++ b/linden/indra/newview/lltoolselectrect.cpp
@@ -36,7 +36,7 @@
36 36
37// Library includes 37// Library includes
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "lldarray.h" 40#include "lldarray.h"
41 41
42// Viewer includes 42// Viewer includes
diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp
index 9e4bb09..b5854c8 100644
--- a/linden/indra/newview/lltracker.cpp
+++ b/linden/indra/newview/lltracker.cpp
@@ -36,7 +36,7 @@
36#include "lldarray.h" 36#include "lldarray.h"
37#include "llfontgl.h" 37#include "llfontgl.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llinventory.h" 40#include "llinventory.h"
41#include "llmemory.h" 41#include "llmemory.h"
42#include "llstring.h" 42#include "llstring.h"
diff --git a/linden/indra/newview/lltrans.cpp b/linden/indra/newview/lltrans.cpp
new file mode 100644
index 0000000..a848250
--- /dev/null
+++ b/linden/indra/newview/lltrans.cpp
@@ -0,0 +1,103 @@
1/**
2 * @file lltrans.cpp
3 * @brief LLTrans implementation
4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$
6 *
7 * Copyright (c) 2000-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32
33#include "llviewerprecompiledheaders.h"
34#include "lltrans.h"
35#include "llxmlnode.h"
36#include "lluictrlfactory.h"
37#include "llalertdialog.h"
38
39#include <map>
40
41LLTrans::template_map_t LLTrans::sStringTemplates;
42
43//static
44bool LLTrans::parseStrings(const LLString& xml_filename)
45{
46 LLXMLNodePtr root;
47 BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
48
49 if (!success || root.isNull() || !root->hasName( "strings" ))
50 {
51 llerrs << "Problem reading strings: " << xml_filename << llendl;
52 return false;
53 }
54
55 for (LLXMLNode* string = root->getFirstChild();
56 string != NULL; string = string->getNextSibling())
57 {
58 if (!string->hasName("string"))
59 {
60 continue;
61 }
62
63 LLString string_name;
64
65 if (! string->getAttributeString("name", string_name))
66 {
67 llwarns << "Unable to parse string with no name" << llendl;
68 continue;
69 }
70
71 LLTransTemplate xml_template(string_name, string->getTextContents());
72 sStringTemplates[xml_template.mName] = xml_template;
73 }
74
75 return true;
76}
77
78//static
79LLString LLTrans::getString(const LLString &xml_desc, const LLString::format_map_t& args)
80{
81 template_map_t::iterator iter = sStringTemplates.find(xml_desc);
82
83 if (iter != sStringTemplates.end())
84 {
85 LLString text = iter->second.mText;
86 LLString::format(text, args);
87
88 return text;
89 }
90 else
91 {
92 LLString::format_map_t args;
93 args["[STRING_NAME]"] = xml_desc;
94 llwarns << "Missing String: [" << xml_desc << "]" << llendl;
95 LLAlertDialog* dialogp = LLAlertDialog::showXml("MissingString", args);
96 if (dialogp == NULL)
97 {
98 llerrs << "Bad or missing alerts.xml!" << llendl;
99 }
100 return "";
101 }
102}
103
diff --git a/linden/indra/newview/lltrans.h b/linden/indra/newview/lltrans.h
new file mode 100644
index 0000000..eb159f2
--- /dev/null
+++ b/linden/indra/newview/lltrans.h
@@ -0,0 +1,92 @@
1/**
2 * @file lltrans.h
3 * @brief LLTrans definition
4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$
6 *
7 * Copyright (c) 2000-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_TRANS_H
33#define LL_TRANS_H
34
35#include <map>
36
37/**
38 * @brief String template loaded from strings.xml
39 */
40class LLTransTemplate
41{
42public:
43 LLTransTemplate(const LLString& name = "", const LLString& text = "") : mName(name), mText(text) {}
44
45 LLString mName;
46 LLString mText;
47};
48
49/**
50 * @brief Localized strings class
51 * This class is used to retrieve translations of strings used to build larger ones, as well as
52 * strings with a general usage that don't belong to any specific floater. For example,
53 * "Owner:", "Retrieving..." used in the place of a not yet known name, etc.
54 */
55class LLTrans
56{
57public:
58 LLTrans();
59
60 /**
61 * @brief Parses the xml file that holds the strings. Used once on startup
62 * @param xml_filename Filename to parse
63 * @returns true if the file was parsed successfully, true if something went wrong
64 */
65 static bool parseStrings(const LLString& xml_filename);
66
67 /**
68 * @brief Returns a translated string
69 * @param xml_desc String's description
70 * @param args A list of substrings to replace in the string
71 * @returns Translated string
72 */
73 static LLString getString(const LLString &xml_desc, const LLString::format_map_t& args);
74
75 /**
76 * @brief Returns a translated string
77 * @param xml_desc String's description
78 * @returns Translated string
79 */
80 static LLString getString(const LLString &xml_desc)
81 {
82 LLString::format_map_t empty;
83 return getString(xml_desc, empty);
84 }
85
86
87private:
88 typedef std::map<LLString, LLTransTemplate > template_map_t;
89 static template_map_t sStringTemplates;
90};
91
92#endif
diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp
index 9e040d2..6c8801a 100644
--- a/linden/indra/newview/lluserauth.cpp
+++ b/linden/indra/newview/lluserauth.cpp
@@ -103,14 +103,15 @@ void LLUserAuth::authenticate(
103 const std::string& hashed_mac, 103 const std::string& hashed_mac,
104 const std::string& hashed_volume_serial) 104 const std::string& hashed_volume_serial)
105{ 105{
106 llinfos << "Authenticating: " << firstname << " " << lastname << ", " 106 LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", "
107 << /*dpasswd.c_str() <<*/ llendl; 107 << /*dpasswd.c_str() <<*/ LL_ENDL;
108 std::ostringstream option_str; 108 std::ostringstream option_str;
109 option_str << "Options: "; 109 option_str << "Options: ";
110 std::ostream_iterator<const char*> appender(option_str, ", "); 110 std::ostream_iterator<const char*> appender(option_str, ", ");
111 std::copy(requested_options.begin(), requested_options.end(), appender); 111 std::copy(requested_options.begin(), requested_options.end(), appender);
112 option_str << "END"; 112 option_str << "END";
113 llinfos << option_str.str().c_str() << llendl; 113
114 LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL;
114 115
115 mAuthResponse = E_NO_RESPONSE_YET; 116 mAuthResponse = E_NO_RESPONSE_YET;
116 //mDownloadTimer.reset(); 117 //mDownloadTimer.reset();
@@ -163,7 +164,7 @@ void LLUserAuth::authenticate(
163 164
164 XMLRPC_RequestFree(request, 1); 165 XMLRPC_RequestFree(request, 1);
165 166
166 llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; 167 LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL;
167} 168}
168 169
169 170
@@ -188,14 +189,15 @@ void LLUserAuth::authenticate(
188{ 189{
189 std::string dpasswd("$1$"); 190 std::string dpasswd("$1$");
190 dpasswd.append(passwd); 191 dpasswd.append(passwd);
191 llinfos << "Authenticating: " << firstname << " " << lastname << ", " 192 LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", "
192 << /*dpasswd.c_str() <<*/ llendl; 193 << /*dpasswd.c_str() <<*/ LL_ENDL;
193 std::ostringstream option_str; 194 std::ostringstream option_str;
194 option_str << "Options: "; 195 option_str << "Options: ";
195 std::ostream_iterator<const char*> appender(option_str, ", "); 196 std::ostream_iterator<const char*> appender(option_str, ", ");
196 std::copy(requested_options.begin(), requested_options.end(), appender); 197 std::copy(requested_options.begin(), requested_options.end(), appender);
197 option_str << "END"; 198 option_str << "END";
198 llinfos << option_str.str().c_str() << llendl; 199
200 LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL;
199 201
200 mAuthResponse = E_NO_RESPONSE_YET; 202 mAuthResponse = E_NO_RESPONSE_YET;
201 //mDownloadTimer.reset(); 203 //mDownloadTimer.reset();
@@ -248,7 +250,7 @@ void LLUserAuth::authenticate(
248 250
249 XMLRPC_RequestFree(request, 1); 251 XMLRPC_RequestFree(request, 1);
250 252
251 llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; 253 LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL;
252} 254}
253 255
254 256
@@ -300,7 +302,7 @@ LLUserAuth::UserAuthcode LLUserAuth::authResponse()
300 break; 302 break;
301 } 303 }
302 304
303 llinfos << "Processed response: " << result << llendl; 305 LL_INFOS2("AppInit", "Authentication") << "Processed response: " << result << LL_ENDL;
304 306
305 delete mTransaction; 307 delete mTransaction;
306 mTransaction = NULL; 308 mTransaction = NULL;
diff --git a/linden/indra/newview/llviewerassetstorage.cpp b/linden/indra/newview/llviewerassetstorage.cpp
index d9d497a..ac4003b 100644
--- a/linden/indra/newview/llviewerassetstorage.cpp
+++ b/linden/indra/newview/llviewerassetstorage.cpp
@@ -202,7 +202,7 @@ if(!filename)
202 llinfos << "ASSET_ID: " << asset_id << llendl; 202 llinfos << "ASSET_ID: " << asset_id << llendl;
203 203
204 S32 size = 0; 204 S32 size = 0;
205 FILE* fp = LLFile::fopen(filename, "rb"); 205 LLFILE* fp = LLFile::fopen(filename, "rb");
206 if (fp) 206 if (fp)
207 { 207 {
208 fseek(fp, 0, SEEK_END); 208 fseek(fp, 0, SEEK_END);
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index 203f9c7..146d738 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -69,7 +69,7 @@
69#include "llappviewer.h" 69#include "llappviewer.h"
70#include "llvosurfacepatch.h" 70#include "llvosurfacepatch.h"
71#include "llvowlsky.h" 71#include "llvowlsky.h"
72#include "llglimmediate.h" 72#include "llrender.h"
73 73
74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
75BOOL gHackGodmode = FALSE; 75BOOL gHackGodmode = FALSE;
@@ -86,6 +86,7 @@ LLString gLastRunVersion;
86LLString gCurrentVersion; 86LLString gCurrentVersion;
87 87
88extern BOOL gResizeScreenTexture; 88extern BOOL gResizeScreenTexture;
89extern BOOL gDebugGL;
89 90
90//////////////////////////////////////////////////////////////////////////// 91////////////////////////////////////////////////////////////////////////////
91// Listeners 92// Listeners
@@ -357,9 +358,15 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
357 return true; 358 return true;
358} 359}
359 360
360static bool handleRenderUseCleverUIChanged(const LLSD& newvalue) 361static bool handleRenderDebugGLChanged(const LLSD& newvalue)
361{ 362{
362 gGL.setClever(newvalue.asBoolean()); 363 gDebugGL = newvalue.asBoolean();
364 return true;
365}
366
367static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
368{
369 gDebugPipeline = newvalue.asBoolean();
363 return true; 370 return true;
364} 371}
365 372
@@ -426,6 +433,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
426 gVoiceClient->setCaptureDevice(inputDevice); 433 gVoiceClient->setCaptureDevice(inputDevice);
427 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 434 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
428 gVoiceClient->setRenderDevice(outputDevice); 435 gVoiceClient->setRenderDevice(outputDevice);
436 gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled"));
429 } 437 }
430 return true; 438 return true;
431} 439}
@@ -463,7 +471,8 @@ void settings_setup_listeners()
463 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); 471 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
464 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1)); 472 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
465 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1)); 473 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
466 gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1)); 474 gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _1));
475 gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _1));
467 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1)); 476 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
468 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); 477 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
469 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1)); 478 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
@@ -555,5 +564,6 @@ void settings_setup_listeners()
555 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 564 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
556 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 565 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
557 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 566 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
567 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
558} 568}
559 569
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index cdffe33..47c9c32 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -34,7 +34,7 @@
34#include "llviewerdisplay.h" 34#include "llviewerdisplay.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llglheaders.h" 38#include "llglheaders.h"
39#include "llagent.h" 39#include "llagent.h"
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
@@ -99,6 +99,9 @@ BOOL gDisplaySwapBuffers = FALSE;
99BOOL gResizeScreenTexture = FALSE; 99BOOL gResizeScreenTexture = FALSE;
100BOOL gSnapshot = FALSE; 100BOOL gSnapshot = FALSE;
101 101
102U32 gRecentFrameCount = 0; // number of 'recent' frames
103LLFrameTimer gRecentTime;
104
102// Rendering stuff 105// Rendering stuff
103void pre_show_depth_buffer(); 106void pre_show_depth_buffer();
104void post_show_depth_buffer(); 107void post_show_depth_buffer();
@@ -125,27 +128,24 @@ void display_startup()
125 128
126 // Required for HTML update in login screen 129 // Required for HTML update in login screen
127 static S32 frame_count = 0; 130 static S32 frame_count = 0;
128#ifndef LL_RELEASE_FOR_DOWNLOAD 131
129 LLGLState::checkStates(); 132 LLGLState::checkStates();
130 LLGLState::checkTextureChannels(); 133 LLGLState::checkTextureChannels();
131#endif
132 134
133 if (frame_count++ > 1) // make sure we have rendered a frame first 135 if (frame_count++ > 1) // make sure we have rendered a frame first
134 { 136 {
135 LLDynamicTexture::updateAllInstances(); 137 LLDynamicTexture::updateAllInstances();
136 } 138 }
137 139
138#ifndef LL_RELEASE_FOR_DOWNLOAD
139 LLGLState::checkStates(); 140 LLGLState::checkStates();
140 LLGLState::checkTextureChannels(); 141 LLGLState::checkTextureChannels();
141#endif
142 142
143 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 143 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
144 LLGLSUIDefault gls_ui; 144 LLGLSUIDefault gls_ui;
145 gPipeline.disableLights(); 145 gPipeline.disableLights();
146 146
147 gViewerWindow->setup2DRender(); 147 gViewerWindow->setup2DRender();
148 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 148 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
149 149
150 gGL.color4f(1,1,1,1); 150 gGL.color4f(1,1,1,1);
151 gViewerWindow->draw(); 151 gViewerWindow->draw();
@@ -153,10 +153,8 @@ void display_startup()
153 153
154 LLVertexBuffer::unbind(); 154 LLVertexBuffer::unbind();
155 155
156#ifndef LL_RELEASE_FOR_DOWNLOAD
157 LLGLState::checkStates(); 156 LLGLState::checkStates();
158 LLGLState::checkTextureChannels(); 157 LLGLState::checkTextureChannels();
159#endif
160 158
161 gViewerWindow->mWindow->swapBuffers(); 159 gViewerWindow->mWindow->swapBuffers();
162 glClear(GL_DEPTH_BUFFER_BIT); 160 glClear(GL_DEPTH_BUFFER_BIT);
@@ -186,6 +184,18 @@ void display_update_camera()
186 LLWorld::getInstance()->setLandFarClip(final_far); 184 LLWorld::getInstance()->setLandFarClip(final_far);
187} 185}
188 186
187// Write some stats to llinfos
188void display_stats()
189{
190 F32 log_freq = gSavedSettings.getF32("FPSLogFrequency");
191 if (log_freq > 0.f && gRecentTime.getElapsedTimeF32() >= log_freq)
192 {
193 F32 fps = gRecentFrameCount / log_freq;
194 llinfos << llformat("FPS: %.02f", fps) << llendl;
195 gRecentFrameCount = 0;
196 gRecentTime.reset();
197 }
198}
189 199
190// Paint the display! 200// Paint the display!
191void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) 201void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
@@ -204,10 +214,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
204 214
205 LLVertexBuffer::unbind(); 215 LLVertexBuffer::unbind();
206 216
207#ifndef LL_RELEASE_FOR_DOWNLOAD
208 LLGLState::checkStates(); 217 LLGLState::checkStates();
209 LLGLState::checkTextureChannels(); 218 LLGLState::checkTextureChannels();
210#endif
211 219
212 gPipeline.disableLights(); 220 gPipeline.disableLights();
213 221
@@ -232,10 +240,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
232 gViewerWindow->performPick(); 240 gViewerWindow->performPick();
233 241
234 242
235#ifndef LL_RELEASE_FOR_DOWNLOAD
236 LLGLState::checkStates(); 243 LLGLState::checkStates();
237 LLGLState::checkTextureChannels(); 244 LLGLState::checkTextureChannels();
238#endif
239 245
240 ////////////////////////////////////////////////////////// 246 //////////////////////////////////////////////////////////
241 // 247 //
@@ -286,6 +292,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
286 292
287 gPipeline.mBackfaceCull = TRUE; 293 gPipeline.mBackfaceCull = TRUE;
288 gFrameCount++; 294 gFrameCount++;
295 gRecentFrameCount++;
289 if (gFocusMgr.getAppHasFocus()) 296 if (gFocusMgr.getAppHasFocus())
290 { 297 {
291 gForegroundFrameCount++; 298 gForegroundFrameCount++;
@@ -474,7 +481,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
474 LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES); 481 LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES);
475 if (LLDynamicTexture::updateAllInstances()) 482 if (LLDynamicTexture::updateAllInstances())
476 { 483 {
477 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 484 gGL.setColorMask(true, true);
478 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 485 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
479 } 486 }
480 } 487 }
@@ -559,7 +566,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
559 gPipeline.resizeScreenTexture(); 566 gPipeline.resizeScreenTexture();
560 } 567 }
561 568
562 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 569 gGL.setColorMask(true, true);
563 glClearColor(0,0,0,0); 570 glClearColor(0,0,0,0);
564 571
565 if (!for_snapshot) 572 if (!for_snapshot)
@@ -690,20 +697,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
690 697
691 if (to_texture) 698 if (to_texture)
692 { 699 {
693 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 700 gGL.setColorMask(true, true);
694 gPipeline.mScreen.bindTarget(); 701 gPipeline.mScreen.bindTarget();
695 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 702 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
696 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 703 gGL.setColorMask(true, false);
697 } 704 }
698 705
699 if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot()) 706 if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot())
700 && !gRestoreGL) 707 && !gRestoreGL)
701 { 708 {
702 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 709 gGL.setColorMask(true, false);
703 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE; 710 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
704 gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE); 711 gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
705 LLPipeline::sUnderWaterRender = FALSE; 712 LLPipeline::sUnderWaterRender = FALSE;
706 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 713 gGL.setColorMask(true, true);
707 714
708 //store this frame's modelview matrix for use 715 //store this frame's modelview matrix for use
709 //when rendering next frame's occlusion queries 716 //when rendering next frame's occlusion queries
@@ -741,6 +748,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
741 send_agent_resume(); 748 send_agent_resume();
742 LLPipeline::sRenderFrameTest = FALSE; 749 LLPipeline::sRenderFrameTest = FALSE;
743 } 750 }
751
752 display_stats();
744} 753}
745 754
746void render_hud_attachments() 755void render_hud_attachments()
@@ -880,9 +889,7 @@ BOOL setup_hud_matrices(BOOL for_select)
880 889
881void render_ui_and_swap() 890void render_ui_and_swap()
882{ 891{
883#ifndef LL_RELEASE_FOR_DOWNLOAD
884 LLGLState::checkStates(); 892 LLGLState::checkStates();
885#endif
886 893
887 glPushMatrix(); 894 glPushMatrix();
888 glLoadMatrixd(gGLLastModelView); 895 glLoadMatrixd(gGLLastModelView);
@@ -918,15 +925,11 @@ void render_ui_and_swap()
918 if (!gDisconnected) 925 if (!gDisconnected)
919 { 926 {
920 render_ui_3d(); 927 render_ui_3d();
921#ifndef LL_RELEASE_FOR_DOWNLOAD
922 LLGLState::checkStates(); 928 LLGLState::checkStates();
923#endif
924 } 929 }
925 930
926 render_ui_2d(); 931 render_ui_2d();
927#ifndef LL_RELEASE_FOR_DOWNLOAD
928 LLGLState::checkStates(); 932 LLGLState::checkStates();
929#endif
930 } 933 }
931 gGL.flush(); 934 gGL.flush();
932 935
@@ -1088,7 +1091,7 @@ void render_ui_2d()
1088 } 1091 }
1089 1092
1090 stop_glerror(); 1093 stop_glerror();
1091 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 1094 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
1092 1095
1093 // render outline for HUD 1096 // render outline for HUD
1094 if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f) 1097 if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f)
@@ -1115,7 +1118,6 @@ void render_ui_2d()
1115 LLFontGL::sCurOrigin.set(0, 0); 1118 LLFontGL::sCurOrigin.set(0, 0);
1116} 1119}
1117 1120
1118
1119void render_disconnected_background() 1121void render_disconnected_background()
1120{ 1122{
1121 gGL.color4f(1,1,1,1); 1123 gGL.color4f(1,1,1,1);
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index 88759af..a824b29 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -114,7 +114,7 @@ void LLViewerImageList::init()
114 114
115void LLViewerImageList::doPreloadImages() 115void LLViewerImageList::doPreloadImages()
116{ 116{
117 llinfos << "Preloading images..." << llendl; 117 LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;
118 118
119 // Set the "missing asset" image 119 // Set the "missing asset" image
120 LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga"); 120 LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga");
@@ -772,10 +772,10 @@ void LLViewerImageList::decodeAllImages(F32 max_time)
772 max_time = llmax(max_time, .001f); 772 max_time = llmax(max_time, .001f);
773 F32 create_time = updateImagesCreateTextures(max_time); 773 F32 create_time = updateImagesCreateTextures(max_time);
774 774
775 llinfos << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. " 775 LL_DEBUGS("ViewerImages") << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. "
776 << " fetch_pending " << fetch_pending 776 << " fetch_pending " << fetch_pending
777 << " create_time " << create_time 777 << " create_time " << create_time
778 << llendl; 778 << LL_ENDL;
779} 779}
780 780
781 781
diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp
index db005c7..d7c1778 100644
--- a/linden/indra/newview/llviewerinventory.cpp
+++ b/linden/indra/newview/llviewerinventory.cpp
@@ -254,7 +254,7 @@ void LLViewerInventoryItem::packMessage(LLMessageSystem* msg) const
254 msg->addU32Fast(_PREHASH_CRC, crc); 254 msg->addU32Fast(_PREHASH_CRC, crc);
255} 255}
256// virtual 256// virtual
257BOOL LLViewerInventoryItem::importFile(FILE* fp) 257BOOL LLViewerInventoryItem::importFile(LLFILE* fp)
258{ 258{
259 BOOL rv = LLInventoryItem::importFile(fp); 259 BOOL rv = LLInventoryItem::importFile(fp);
260 mIsComplete = TRUE; 260 mIsComplete = TRUE;
@@ -269,7 +269,7 @@ BOOL LLViewerInventoryItem::importLegacyStream(std::istream& input_stream)
269 return rv; 269 return rv;
270} 270}
271 271
272bool LLViewerInventoryItem::importFileLocal(FILE* fp) 272bool LLViewerInventoryItem::importFileLocal(LLFILE* fp)
273{ 273{
274 // TODO: convert all functions that return BOOL to return bool 274 // TODO: convert all functions that return BOOL to return bool
275 bool rv = (LLInventoryItem::importFile(fp) ? true : false); 275 bool rv = (LLInventoryItem::importFile(fp) ? true : false);
@@ -277,7 +277,7 @@ bool LLViewerInventoryItem::importFileLocal(FILE* fp)
277 return rv; 277 return rv;
278} 278}
279 279
280bool LLViewerInventoryItem::exportFileLocal(FILE* fp) const 280bool LLViewerInventoryItem::exportFileLocal(LLFILE* fp) const
281{ 281{
282 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 282 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
283 fprintf(fp, "\tinv_item\t0\n\t{\n"); 283 fprintf(fp, "\tinv_item\t0\n\t{\n");
@@ -469,7 +469,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
469 return false; 469 return false;
470} 470}
471 471
472bool LLViewerInventoryCategory::importFileLocal(FILE* fp) 472bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
473{ 473{
474 // *NOTE: This buffer size is hard coded into scanf() below. 474 // *NOTE: This buffer size is hard coded into scanf() below.
475 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 475 char buffer[MAX_STRING]; /* Flawfinder: ignore */
@@ -538,7 +538,7 @@ bool LLViewerInventoryCategory::importFileLocal(FILE* fp)
538 return true; 538 return true;
539} 539}
540 540
541bool LLViewerInventoryCategory::exportFileLocal(FILE* fp) const 541bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
542{ 542{
543 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 543 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
544 fprintf(fp, "\tinv_category\t0\n\t{\n"); 544 fprintf(fp, "\tinv_category\t0\n\t{\n");
diff --git a/linden/indra/newview/llviewerinventory.h b/linden/indra/newview/llviewerinventory.h
index 05dc19a..e80a042 100644
--- a/linden/indra/newview/llviewerinventory.h
+++ b/linden/indra/newview/llviewerinventory.h
@@ -100,13 +100,13 @@ public:
100 //virtual void packMessage(LLMessageSystem* msg) const; 100 //virtual void packMessage(LLMessageSystem* msg) const;
101 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); 101 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
102 virtual BOOL unpackMessage(LLSD item); 102 virtual BOOL unpackMessage(LLSD item);
103 virtual BOOL importFile(FILE* fp); 103 virtual BOOL importFile(LLFILE* fp);
104 virtual BOOL importLegacyStream(std::istream& input_stream); 104 virtual BOOL importLegacyStream(std::istream& input_stream);
105 105
106 // file handling on the viewer. These are not meant for anything 106 // file handling on the viewer. These are not meant for anything
107 // other than cacheing. 107 // other than cacheing.
108 bool exportFileLocal(FILE* fp) const; 108 bool exportFileLocal(LLFILE* fp) const;
109 bool importFileLocal(FILE* fp); 109 bool importFileLocal(LLFILE* fp);
110 110
111 // new methods 111 // new methods
112 BOOL isComplete() const { return mIsComplete; } 112 BOOL isComplete() const { return mIsComplete; }
@@ -182,8 +182,8 @@ public:
182 182
183 // file handling on the viewer. These are not meant for anything 183 // file handling on the viewer. These are not meant for anything
184 // other than cacheing. 184 // other than cacheing.
185 bool exportFileLocal(FILE* fp) const; 185 bool exportFileLocal(LLFILE* fp) const;
186 bool importFileLocal(FILE* fp); 186 bool importFileLocal(LLFILE* fp);
187 187
188protected: 188protected:
189 LLUUID mOwnerID; 189 LLUUID mOwnerID;
diff --git a/linden/indra/newview/llviewerjoint.cpp b/linden/indra/newview/llviewerjoint.cpp
index 71f9211..1be6e66 100644
--- a/linden/indra/newview/llviewerjoint.cpp
+++ b/linden/indra/newview/llviewerjoint.cpp
@@ -37,7 +37,7 @@
37#include "llviewerjoint.h" 37#include "llviewerjoint.h"
38 38
39#include "llgl.h" 39#include "llgl.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "llglheaders.h" 42#include "llglheaders.h"
43#include "llrendersphere.h" 43#include "llrendersphere.h"
@@ -272,12 +272,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
272 triangle_count += drawShape( pixelArea, first_pass); 272 triangle_count += drawShape( pixelArea, first_pass);
273 } 273 }
274 // second pass writes to z buffer only 274 // second pass writes to z buffer only
275 glColorMask(FALSE, FALSE, FALSE, FALSE); 275 gGL.setColorMask(false, false);
276 { 276 {
277 triangle_count += drawShape( pixelArea, FALSE ); 277 triangle_count += drawShape( pixelArea, FALSE );
278 } 278 }
279 // third past respects z buffer and writes color 279 // third past respects z buffer and writes color
280 glColorMask(TRUE, TRUE, TRUE, FALSE); 280 gGL.setColorMask(true, false);
281 { 281 {
282 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 282 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
283 triangle_count += drawShape( pixelArea, FALSE ); 283 triangle_count += drawShape( pixelArea, FALSE );
diff --git a/linden/indra/newview/llviewerjointattachment.cpp b/linden/indra/newview/llviewerjointattachment.cpp
index bbab71b..f5a5d8a 100644
--- a/linden/indra/newview/llviewerjointattachment.cpp
+++ b/linden/indra/newview/llviewerjointattachment.cpp
@@ -38,7 +38,7 @@
38#include "llviewercontrol.h" 38#include "llviewercontrol.h"
39#include "lldrawable.h" 39#include "lldrawable.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "llvoavatar.h" 42#include "llvoavatar.h"
43#include "llvolume.h" 43#include "llvolume.h"
44#include "pipeline.h" 44#include "pipeline.h"
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index 4a0f0b8..0dcf4ab 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -36,6 +36,7 @@
36 36
37#include "imageids.h" 37#include "imageids.h"
38#include "llfasttimer.h" 38#include "llfasttimer.h"
39#include "llrender.h"
39 40
40#include "llagent.h" 41#include "llagent.h"
41#include "llapr.h" 42#include "llapr.h"
@@ -545,17 +546,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
545 else 546 else
546 { 547 {
547 glColor4f(0.7f, 0.6f, 0.3f, 1.f); 548 glColor4f(0.7f, 0.6f, 0.3f, 1.f);
548 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 549 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
549 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
550
551 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
552 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
553
554 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
555 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
556
557 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE);
558 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
559 } 550 }
560 } 551 }
561 else if( mLayerSet ) 552 else if( mLayerSet )
@@ -573,12 +564,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
573 else 564 else
574 if ( mTexture.notNull() ) 565 if ( mTexture.notNull() )
575 { 566 {
576 mTexture->bind(); 567 if (!mTexture->getClampS() || !mTexture->getClampT())
577 if (!mTexture->getClampS()) { 568 {
578 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 569 mTexture->bind();
579 } 570 mTexture->overrideClamp (TRUE, TRUE);
580 if (!mTexture->getClampT()) {
581 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
582 } 571 }
583 } 572 }
584 else 573 else
@@ -590,15 +579,8 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
590 { 579 {
591 if (isTransparent()) 580 if (isTransparent())
592 { 581 {
593 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 582 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
594 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 583 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
595 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
596
597 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
598 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
599
600 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); // GL_TEXTURE_ENV_COLOR is set in renderPass1
601 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
602 } 584 }
603 else 585 else
604 { 586 {
@@ -639,16 +621,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
639 621
640 if (mTestImageName) 622 if (mTestImageName)
641 { 623 {
642 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 624 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
643 } 625 }
644 626
645 if (mTexture.notNull()) { 627 if (mTexture.notNull())
646 if (!mTexture->getClampS()) { 628 {
647 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 629 mTexture->bind();
648 } 630 mTexture->restoreClamp();
649 if (!mTexture->getClampT()) {
650 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
651 }
652 } 631 }
653 632
654 return triangle_count; 633 return triangle_count;
@@ -870,9 +849,9 @@ void LLViewerJointMesh::updateVectorize()
870 case 1: vp = "SSE"; break; 849 case 1: vp = "SSE"; break;
871 default: vp = "COMPILER DEFAULT"; break; 850 default: vp = "COMPILER DEFAULT"; break;
872 } 851 }
873 llinfos << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; 852 LL_INFOS("AppInit") << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << LL_ENDL ;
874 llinfos << "Vector Processor : " << vp << llendl ; 853 LL_INFOS("AppInit") << "Vector Processor : " << vp << LL_ENDL ;
875 llinfos << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; 854 LL_INFOS("AppInit") << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << LL_ENDL ;
876 if(vectorizeEnable && vectorizeSkin) 855 if(vectorizeEnable && vectorizeSkin)
877 { 856 {
878 switch(sVectorizeProcessor) 857 switch(sVectorizeProcessor)
diff --git a/linden/indra/newview/llviewerjoystick.cpp b/linden/indra/newview/llviewerjoystick.cpp
index e9690f8..cf9d8a1 100644
--- a/linden/indra/newview/llviewerjoystick.cpp
+++ b/linden/indra/newview/llviewerjoystick.cpp
@@ -228,8 +228,38 @@ void LLViewerJoystick::init(bool autoenable)
228 mDriverState = JDS_UNINITIALIZED; 228 mDriverState = JDS_UNINITIALIZED;
229 } 229 }
230 } 230 }
231
232 // Autoenable the joystick for recognized devices if nothing was connected previously
233 if (!autoenable)
234 {
235 autoenable = gSavedSettings.getString("JoystickInitialized").empty() ? true : false;
236 }
231 updateEnabled(autoenable); 237 updateEnabled(autoenable);
232 238
239 if (mDriverState == JDS_INITIALIZED)
240 {
241 // A Joystick device is plugged in
242 if (isLikeSpaceNavigator())
243 {
244 // It's a space navigator, we have defaults for it.
245 if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator")
246 {
247 // Only set the defaults if we haven't already (in case they were overridden)
248 setSNDefaults();
249 gSavedSettings.setString("JoystickInitialized", "SpaceNavigator");
250 }
251 }
252 else
253 {
254 // It's not a Space Navigator
255 gSavedSettings.setString("JoystickInitialized", "UnknownDevice");
256 }
257 }
258 else
259 {
260 // No device connected, don't change any settings
261 }
262
233 llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev=" 263 llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev="
234 << mNdofDev << "; libinit=" << libinit << llendl; 264 << mNdofDev << "; libinit=" << libinit << llendl;
235#endif 265#endif
diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp
index 0d927ae..c732ae5 100644
--- a/linden/indra/newview/llviewerkeyboard.cpp
+++ b/linden/indra/newview/llviewerkeyboard.cpp
@@ -738,7 +738,7 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c
738 738
739S32 LLViewerKeyboard::loadBindings(const char *filename) 739S32 LLViewerKeyboard::loadBindings(const char *filename)
740{ 740{
741 FILE *fp; 741 LLFILE *fp;
742 const S32 BUFFER_SIZE = 2048; 742 const S32 BUFFER_SIZE = 2048;
743 char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */ 743 char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */
744 // *NOTE: This buffer size is hard coded into scanf() below. 744 // *NOTE: This buffer size is hard coded into scanf() below.
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 2459133..00226dd 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -401,8 +401,8 @@ void handle_duplicate_in_place(void*);
401void handle_repeat_duplicate(void*); 401void handle_repeat_duplicate(void*);
402 402
403void handle_export(void*); 403void handle_export(void*);
404void handle_deed_object_to_group(void*); 404// void handle_deed_object_to_group(void*);
405BOOL enable_deed_object_to_group(void*); 405// BOOL enable_deed_object_to_group(void*);
406void handle_object_owner_self(void*); 406void handle_object_owner_self(void*);
407void handle_object_owner_permissive(void*); 407void handle_object_owner_permissive(void*);
408void handle_object_lock(void*); 408void handle_object_lock(void*);
@@ -515,7 +515,7 @@ public:
515 515
516 virtual void changed(U32 mask) 516 virtual void changed(U32 mask)
517 { 517 {
518 // JAMESDEBUG disabled for now - slows down client or causes crashes 518 // JC - Disabled for now - slows down client or causes crashes
519 // in inventory code. 519 // in inventory code.
520 // 520 //
521 // Also, this may not be faster than just rebuilding the menu each time. 521 // Also, this may not be faster than just rebuilding the menu each time.
@@ -700,7 +700,7 @@ void init_menus()
700 gPopupMenuView->setBackgroundColor( color ); 700 gPopupMenuView->setBackgroundColor( color );
701 701
702 // If we are not in production, use a different color to make it apparent. 702 // If we are not in production, use a different color to make it apparent.
703 if (LLAppViewer::instance()->isInProductionGrid()) 703 if (LLViewerLogin::getInstance()->isInProductionGrid())
704 { 704 {
705 color = gColors.getColor( "MenuBarBgColor" ); 705 color = gColors.getColor( "MenuBarBgColor" );
706 } 706 }
@@ -722,7 +722,7 @@ void init_menus()
722 gViewerWindow->getRootView()->addChild(gMenuHolder); 722 gViewerWindow->getRootView()->addChild(gMenuHolder);
723 723
724 gViewerWindow->setMenuBackgroundColor(false, 724 gViewerWindow->setMenuBackgroundColor(false,
725 LLAppViewer::instance()->isInProductionGrid()); 725 LLViewerLogin::getInstance()->isInProductionGrid());
726 726
727 // *TODO:Get the cost info from the server 727 // *TODO:Get the cost info from the server
728 const LLString upload_cost("10"); 728 const LLString upload_cost("10");
@@ -739,7 +739,7 @@ void init_menus()
739 // TomY TODO convert these two 739 // TomY TODO convert these two
740 LLMenuGL*menu; 740 LLMenuGL*menu;
741 741
742 // JAMESDEBUG - Maybe we don't want a global landmark menu 742 // JC - Maybe we don't want a global landmark menu
743 /* 743 /*
744 menu = new LLMenuGL(LANDMARK_MENU_NAME); 744 menu = new LLMenuGL(LANDMARK_MENU_NAME);
745 // Defer init_landmark_menu() until inventory observer reports that we actually 745 // Defer init_landmark_menu() until inventory observer reports that we actually
@@ -969,7 +969,7 @@ void init_client_menu(LLMenuGL* menu)
969 969
970 970
971#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 971#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
972 if (!LLAppViewer::instance()->isInProductionGrid()) 972 if (!LLViewerLogin::getInstance()->isInProductionGrid())
973 { 973 {
974 menu->append(new LLMenuItemCheckGL("Hacked Godmode", 974 menu->append(new LLMenuItemCheckGL("Hacked Godmode",
975 &handle_toggle_hacked_godmode, 975 &handle_toggle_hacked_godmode,
@@ -1064,7 +1064,7 @@ void init_client_menu(LLMenuGL* menu)
1064 1064
1065 menu->appendSeparator(); 1065 menu->appendSeparator();
1066 1066
1067 menu->append(new LLMenuItemCallGL("Compress Image...", 1067 menu->append(new LLMenuItemCallGL("Compress Images...",
1068 &handle_compress_image, NULL, NULL)); 1068 &handle_compress_image, NULL, NULL));
1069 1069
1070 menu->append(new LLMenuItemCheckGL("Limit Select Distance", 1070 menu->append(new LLMenuItemCheckGL("Limit Select Distance",
@@ -1096,7 +1096,9 @@ void init_client_menu(LLMenuGL* menu)
1096 { 1096 {
1097 LLMenuGL* sub = NULL; 1097 LLMenuGL* sub = NULL;
1098 sub = new LLMenuGL("Debugging"); 1098 sub = new LLMenuGL("Debugging");
1099#if LL_WINDOWS
1099 sub->append(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT)); 1100 sub->append(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT));
1101#endif
1100 sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror)); 1102 sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror));
1101 sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access)); 1103 sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access));
1102 sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop)); 1104 sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop));
@@ -1189,7 +1191,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
1189 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); 1191 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
1190 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1192 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
1191 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1193 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
1192 menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1194 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
1193 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 1195 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
1194 menu_toggle_control, NULL, menu_check_control, 1196 menu_toggle_control, NULL, menu_check_control,
1195 (void*)"DoubleClickAutoPilot")); 1197 (void*)"DoubleClickAutoPilot"));
@@ -1429,6 +1431,12 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1429 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT); 1431 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT);
1430 item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")); 1432 item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion"));
1431 menu->append(item); 1433 menu->append(item);
1434
1435 item = new LLMenuItemCheckGL("Debug GL", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugGL");
1436 menu->append(item);
1437
1438 item = new LLMenuItemCheckGL("Debug Pipeline", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugPipeline");
1439 menu->append(item);
1432 1440
1433 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha"); 1441 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha");
1434 menu->append(item); 1442 menu->append(item);
@@ -1490,6 +1498,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1490 1498
1491 menu->appendMenu(sub_menu); 1499 menu->appendMenu(sub_menu);
1492 1500
1501 menu->append(new LLMenuItemCheckGL("Enable Lip Sync (Beta)", menu_toggle_control, NULL, menu_check_control, (void*)"LipSyncEnabled"));
1493 menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun)); 1502 menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun));
1494 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL)); 1503 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL));
1495 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL)); 1504 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL));
@@ -1501,7 +1510,8 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1501 menu->append(new LLMenuItemToggleGL("Disable LOD", &LLViewerJoint::sDisableLOD)); 1510 menu->append(new LLMenuItemToggleGL("Disable LOD", &LLViewerJoint::sDisableLOD));
1502 menu->append(new LLMenuItemToggleGL("Debug Character Vis", &LLVOAvatar::sDebugInvisible)); 1511 menu->append(new LLMenuItemToggleGL("Debug Character Vis", &LLVOAvatar::sDebugInvisible));
1503 //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); 1512 //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints));
1504 menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); 1513 //diabling collision plane due to DEV-14477 -brad
1514 //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane));
1505 menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes)); 1515 menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes));
1506 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); 1516 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget));
1507 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation)); 1517 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation));
@@ -2753,7 +2763,7 @@ void set_god_level(U8 god_level)
2753 if(gViewerWindow) 2763 if(gViewerWindow)
2754 { 2764 {
2755 gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT, 2765 gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT,
2756 LLAppViewer::instance()->isInProductionGrid()); 2766 LLViewerLogin::getInstance()->isInProductionGrid());
2757 } 2767 }
2758 2768
2759 LLString::format_map_t args; 2769 LLString::format_map_t args;
@@ -3163,6 +3173,21 @@ class LLWorldFly : public view_listener_t
3163 } 3173 }
3164}; 3174};
3165 3175
3176class LLWorldEnableFly : public view_listener_t
3177{
3178 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3179 {
3180 BOOL sitting = FALSE;
3181 if (gAgent.getAvatarObject())
3182 {
3183 sitting = gAgent.getAvatarObject()->mIsSitting;
3184 }
3185 gMenuHolder->findControl(userdata["control"].asString())->setValue(!sitting);
3186 return true;
3187 }
3188};
3189
3190
3166void handle_agent_stop_moving(void*) 3191void handle_agent_stop_moving(void*)
3167{ 3192{
3168 // stop agent 3193 // stop agent
@@ -3476,6 +3501,7 @@ void handle_repeat_duplicate(void*)
3476 LLSelectMgr::getInstance()->repeatDuplicate(); 3501 LLSelectMgr::getInstance()->repeatDuplicate();
3477} 3502}
3478 3503
3504/* dead code 30-apr-2008
3479void handle_deed_object_to_group(void*) 3505void handle_deed_object_to_group(void*)
3480{ 3506{
3481 LLUUID group_id; 3507 LLUUID group_id;
@@ -3501,6 +3527,8 @@ BOOL enable_deed_object_to_group(void*)
3501 return FALSE; 3527 return FALSE;
3502} 3528}
3503 3529
3530*/
3531
3504 3532
3505/* 3533/*
3506 * No longer able to support viewer side manipulations in this way 3534 * No longer able to support viewer side manipulations in this way
@@ -4072,7 +4100,7 @@ BOOL enable_take()
4072 return TRUE; 4100 return TRUE;
4073#else 4101#else
4074# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4102# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4075 if (!LLAppViewer::instance()->isInProductionGrid() 4103 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4076 && gAgent.isGodlike()) 4104 && gAgent.isGodlike())
4077 { 4105 {
4078 return TRUE; 4106 return TRUE;
@@ -4629,7 +4657,7 @@ class LLObjectEnableDelete : public view_listener_t
4629 TRUE; 4657 TRUE;
4630#else 4658#else
4631# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4659# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4632 (!LLAppViewer::instance()->isInProductionGrid() 4660 (!LLViewerLogin::getInstance()->isInProductionGrid()
4633 && gAgent.isGodlike()) || 4661 && gAgent.isGodlike()) ||
4634# endif 4662# endif
4635 LLSelectMgr::getInstance()->canDoDelete(); 4663 LLSelectMgr::getInstance()->canDoDelete();
@@ -6487,7 +6515,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
6487 all_valid = true; 6515 all_valid = true;
6488#ifndef HACKED_GODLIKE_VIEWER 6516#ifndef HACKED_GODLIKE_VIEWER
6489# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 6517# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
6490 if (LLAppViewer::instance()->isInProductionGrid() 6518 if (LLViewerLogin::getInstance()->isInProductionGrid()
6491 || !gAgent.isGodlike()) 6519 || !gAgent.isGodlike())
6492# endif 6520# endif
6493 { 6521 {
@@ -6591,7 +6619,7 @@ BOOL enable_save_into_inventory(void*)
6591 return TRUE; 6619 return TRUE;
6592#else 6620#else
6593# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 6621# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
6594 if (!LLAppViewer::instance()->isInProductionGrid() 6622 if (!LLViewerLogin::getInstance()->isInProductionGrid()
6595 && gAgent.isGodlike()) 6623 && gAgent.isGodlike())
6596 { 6624 {
6597 return TRUE; 6625 return TRUE;
@@ -7766,6 +7794,7 @@ void initialize_menus()
7766 addMenu(new LLWorldChat(), "World.Chat"); 7794 addMenu(new LLWorldChat(), "World.Chat");
7767 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); 7795 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
7768 addMenu(new LLWorldFly(), "World.Fly"); 7796 addMenu(new LLWorldFly(), "World.Fly");
7797 addMenu(new LLWorldEnableFly(), "World.EnableFly");
7769 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); 7798 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark");
7770 addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); 7799 addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation");
7771 addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); 7800 addMenu(new LLWorldTeleportHome(), "World.TeleportHome");
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp
index ab77b53..b8a4f65 100644
--- a/linden/indra/newview/llviewermenufile.cpp
+++ b/linden/indra/newview/llviewermenufile.cpp
@@ -414,18 +414,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
414 } 414 }
415}; 415};
416 416
417class LLFileSetWindowSize : public view_listener_t
418{
419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
420 {
421 LLString size = userdata.asString();
422 S32 width, height;
423 sscanf(size.c_str(), "%d,%d", &width, &height);
424 LLViewerWindow::movieSize(width, height);
425 return true;
426 }
427};
428
429class LLFileQuit : public view_listener_t 417class LLFileQuit : public view_listener_t
430{ 418{
431 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -448,25 +436,31 @@ void handle_upload(void* data)
448void handle_compress_image(void*) 436void handle_compress_image(void*)
449{ 437{
450 LLFilePicker& picker = LLFilePicker::instance(); 438 LLFilePicker& picker = LLFilePicker::instance();
451 if (picker.getOpenFile(LLFilePicker::FFLOAD_IMAGE)) 439 if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
452 { 440 {
453 std::string infile(picker.getFirstFile()); 441 const char* input_file = picker.getFirstFile();
454 std::string outfile = infile + ".j2c"; 442 while (input_file)
443 {
444 std::string infile(input_file);
445 std::string outfile = infile + ".j2c";
455 446
456 llinfos << "Input: " << infile << llendl; 447 llinfos << "Input: " << infile << llendl;
457 llinfos << "Output: " << outfile << llendl; 448 llinfos << "Output: " << outfile << llendl;
458 449
459 BOOL success; 450 BOOL success;
460 451
461 success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA); 452 success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA);
462 453
463 if (success) 454 if (success)
464 { 455 {
465 llinfos << "Compression complete" << llendl; 456 llinfos << "Compression complete" << llendl;
466 } 457 }
467 else 458 else
468 { 459 {
469 llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl; 460 llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl;
461 }
462
463 input_file = picker.getNextFile();
470 } 464 }
471 } 465 }
472} 466}
@@ -603,7 +597,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
603 { 597 {
604 // This is a generic .lin resource file 598 // This is a generic .lin resource file
605 asset_type = LLAssetType::AT_OBJECT; 599 asset_type = LLAssetType::AT_OBJECT;
606 FILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */ 600 LLFILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */
607 if (in) 601 if (in)
608 { 602 {
609 // read in the file header 603 // read in the file header
@@ -688,7 +682,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
688 } 682 }
689 683
690 // copy the file's data segment into another file for uploading 684 // copy the file's data segment into another file for uploading
691 FILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */ 685 LLFILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */
692 if (out) 686 if (out)
693 { 687 {
694 while((read = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */ 688 while((read = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */
@@ -1024,7 +1018,6 @@ void init_menu_file()
1024 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); 1018 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture");
1025 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); 1019 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot");
1026 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); 1020 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk");
1027 (new LLFileSetWindowSize())->registerListener(gMenuHolder, "File.SetWindowSize");
1028 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); 1021 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit");
1029 1022
1030 (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); 1023 (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload");
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index a9adbcd..7cc833a 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -202,7 +202,7 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_
202{ 202{
203 if(0 == amount) return; 203 if(0 == amount) return;
204 amount = abs(amount); 204 amount = abs(amount);
205 llinfos << "give_money(" << uuid << "," << amount << ")"<< llendl; 205 LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
206 if(can_afford_transaction(amount)) 206 if(can_afford_transaction(amount))
207 { 207 {
208// gStatusBar->debitBalance(amount); 208// gStatusBar->debitBalance(amount);
@@ -242,7 +242,7 @@ void send_complete_agent_movement(const LLHost& sim_host)
242void process_logout_reply(LLMessageSystem* msg, void**) 242void process_logout_reply(LLMessageSystem* msg, void**)
243{ 243{
244 // The server has told us it's ok to quit. 244 // The server has told us it's ok to quit.
245 llinfos << "process_logout_reply" << llendl; 245 LL_DEBUGS("Messaging") << "process_logout_reply" << LL_ENDL;
246 246
247 LLUUID agent_id; 247 LLUUID agent_id;
248 msg->getUUID("AgentData", "AgentID", agent_id); 248 msg->getUUID("AgentData", "AgentID", agent_id);
@@ -250,7 +250,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
250 msg->getUUID("AgentData", "SessionID", session_id); 250 msg->getUUID("AgentData", "SessionID", session_id);
251 if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID())) 251 if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID()))
252 { 252 {
253 llwarns << "Bogus Logout Reply" << llendl; 253 LL_WARNS("Messaging") << "Bogus Logout Reply" << LL_ENDL;
254 } 254 }
255 255
256 LLInventoryModel::update_map_t parents; 256 LLInventoryModel::update_map_t parents;
@@ -268,7 +268,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
268 268
269 // We do not need to track the asset ids, just account for an 269 // We do not need to track the asset ids, just account for an
270 // updated inventory version. 270 // updated inventory version.
271 llinfos << "process_logout_reply itemID=" << item_id << llendl; 271 LL_INFOS("Messaging") << "process_logout_reply itemID=" << item_id << LL_ENDL;
272 LLInventoryItem* item = gInventory.getItem( item_id ); 272 LLInventoryItem* item = gInventory.getItem( item_id );
273 if( item ) 273 if( item )
274 { 274 {
@@ -277,7 +277,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
277 } 277 }
278 else 278 else
279 { 279 {
280 llinfos << "process_logout_reply item not found: " << item_id << llendl; 280 LL_INFOS("Messaging") << "process_logout_reply item not found: " << item_id << LL_ENDL;
281 } 281 }
282 } 282 }
283 LLAppViewer::instance()->forceQuit(); 283 LLAppViewer::instance()->forceQuit();
@@ -300,15 +300,15 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
300 size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data); 300 size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data);
301 if (0 == size) 301 if (0 == size)
302 { 302 {
303 llwarns << "Layer data has zero size." << llendl; 303 LL_WARNS("Messaging") << "Layer data has zero size." << LL_ENDL;
304 return; 304 return;
305 } 305 }
306 if (size < 0) 306 if (size < 0)
307 { 307 {
308 // getSizeFast() is probably trying to tell us about an error 308 // getSizeFast() is probably trying to tell us about an error
309 llwarns << "getSizeFast() returned negative result: " 309 LL_WARNS("Messaging") << "getSizeFast() returned negative result: "
310 << size 310 << size
311 << llendl; 311 << LL_ENDL;
312 return; 312 return;
313 } 313 }
314 U8 *datap = new U8[size]; 314 U8 *datap = new U8[size];
@@ -345,7 +345,7 @@ void export_complete()
345 gExporterRequestID.setNull(); 345 gExporterRequestID.setNull();
346 gExportDirectory = ""; 346 gExportDirectory = "";
347 347
348 FILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */ 348 LLFILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */
349 fseek(fXML, 0, SEEK_END); 349 fseek(fXML, 0, SEEK_END);
350 long length = ftell(fXML); 350 long length = ftell(fXML);
351 fseek(fXML, 0, SEEK_SET); 351 fseek(fXML, 0, SEEK_SET);
@@ -353,7 +353,7 @@ void export_complete()
353 size_t nread = fread(buffer, 1, length, fXML); 353 size_t nread = fread(buffer, 1, length, fXML);
354 if (nread < (size_t) length) 354 if (nread < (size_t) length)
355 { 355 {
356 llwarns << "Short read" << llendl; 356 LL_WARNS("Messaging") << "Short read" << LL_ENDL;
357 } 357 }
358 buffer[nread] = '\0'; 358 buffer[nread] = '\0';
359 fclose(fXML); 359 fclose(fXML);
@@ -375,12 +375,12 @@ void export_complete()
375 375
376 LLUUID image_uuid(image_uuid_str); 376 LLUUID image_uuid(image_uuid_str);
377 377
378 llinfos << "Found UUID: " << image_uuid << llendl; 378 LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL;
379 379
380 std::map<LLUUID, LLString>::iterator itor = gImageChecksums.find(image_uuid); 380 std::map<LLUUID, LLString>::iterator itor = gImageChecksums.find(image_uuid);
381 if (itor != gImageChecksums.end()) 381 if (itor != gImageChecksums.end())
382 { 382 {
383 llinfos << "Replacing with checksum: " << itor->second << llendl; 383 LL_INFOS("Messaging") << "Replacing with checksum: " << itor->second << LL_ENDL;
384 if (itor->second.c_str() != NULL) 384 if (itor->second.c_str() != NULL)
385 { 385 {
386 memcpy(&pos_check[10], itor->second.c_str(), 32); /* Flawfinder: ignore */ 386 memcpy(&pos_check[10], itor->second.c_str(), 32); /* Flawfinder: ignore */
@@ -390,10 +390,10 @@ void export_complete()
390 } 390 }
391 } 391 }
392 392
393 FILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */ 393 LLFILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */
394 if (fwrite(buffer, 1, length, fXMLOut) != length) 394 if (fwrite(buffer, 1, length, fXMLOut) != length)
395 { 395 {
396 llwarns << "Short write" << llendl; 396 LL_WARNS("Messaging") << "Short write" << LL_ENDL;
397 } 397 }
398 fclose(fXMLOut); 398 fclose(fXMLOut);
399 399
@@ -407,14 +407,14 @@ void exported_item_complete(const LLTSCode status, void *user_data)
407 407
408 if (status < LLTS_OK) 408 if (status < LLTS_OK)
409 { 409 {
410 llinfos << "Export failed!" << llendl; 410 LL_WARNS("Messaging") << "Export failed!" << LL_ENDL;
411 } 411 }
412 else 412 else
413 { 413 {
414 ++current_object_count; 414 ++current_object_count;
415 if (current_image_count == exported_image_count && current_object_count == exported_object_count) 415 if (current_image_count == exported_image_count && current_object_count == exported_object_count)
416 { 416 {
417 llinfos << "*** Export complete ***" << llendl; 417 LL_INFOS("Messaging") << "*** Export complete ***" << LL_ENDL;
418 418
419 export_complete(); 419 export_complete();
420 } 420 }
@@ -442,11 +442,11 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
442 442
443 if (status < LLTS_OK) 443 if (status < LLTS_OK)
444 { 444 {
445 llinfos << "Image download failed!" << llendl; 445 LL_WARNS("Messaging") << "Image download failed!" << LL_ENDL;
446 } 446 }
447 else 447 else
448 { 448 {
449 FILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ 449 LLFILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */
450 if (fIn) 450 if (fIn)
451 { 451 {
452 LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C; 452 LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C;
@@ -458,7 +458,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
458 U8 *buffer = ImageUtility->allocateData(length); 458 U8 *buffer = ImageUtility->allocateData(length);
459 if (fread(buffer, 1, length, fIn) != length) 459 if (fread(buffer, 1, length, fIn) != length)
460 { 460 {
461 llwarns << "Short read" << llendl; 461 LL_WARNS("Messaging") << "Short read" << LL_ENDL;
462 } 462 }
463 fclose(fIn); 463 fclose(fIn);
464 LLFile::remove(filename.c_str()); 464 LLFile::remove(filename.c_str());
@@ -481,14 +481,14 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
481 delete [] file_path; 481 delete [] file_path;
482 //S32 name_len = output_file.length(); 482 //S32 name_len = output_file.length();
483 //strcpy(&output_file[name_len-3], "tga"); 483 //strcpy(&output_file[name_len-3], "tga");
484 FILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */ 484 LLFILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */
485 char md5_hash_string[33]; /* Flawfinder: ignore */ 485 char md5_hash_string[33]; /* Flawfinder: ignore */
486 strcpy(md5_hash_string, "00000000000000000000000000000000"); /* Flawfinder: ignore */ 486 strcpy(md5_hash_string, "00000000000000000000000000000000"); /* Flawfinder: ignore */
487 if (fOut) 487 if (fOut)
488 { 488 {
489 if (fwrite(data, 1, data_size, fOut) != data_size) 489 if (fwrite(data, 1, data_size, fOut) != data_size)
490 { 490 {
491 llwarns << "Short write" << llendl; 491 LL_WARNS("Messaging") << "Short write" << LL_ENDL;
492 } 492 }
493 fseek(fOut, 0, SEEK_SET); 493 fseek(fOut, 0, SEEK_SET);
494 fclose(fOut); 494 fclose(fOut);
@@ -504,7 +504,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
504 ++current_image_count; 504 ++current_image_count;
505 if (current_image_count == exported_image_count && current_object_count == exported_object_count) 505 if (current_image_count == exported_image_count && current_object_count == exported_object_count)
506 { 506 {
507 llinfos << "*** Export textures complete ***" << llendl; 507 LL_INFOS("Messaging") << "*** Export textures complete ***" << LL_ENDL;
508 export_complete(); 508 export_complete();
509 } 509 }
510 else 510 else
@@ -533,7 +533,7 @@ void process_places_reply(LLMessageSystem* msg, void** data)
533 } 533 }
534 else 534 else
535 { 535 {
536 llwarns << "Got invalid PlacesReply message" << llendl; 536 LL_WARNS("Messaging") << "Got invalid PlacesReply message" << LL_ENDL;
537 } 537 }
538} 538}
539 539
@@ -705,7 +705,7 @@ public:
705 virtual ~LLDiscardAgentOffer() {} 705 virtual ~LLDiscardAgentOffer() {}
706 virtual void done() 706 virtual void done()
707 { 707 {
708 lldebugs << "LLDiscardAgentOffer::done()" << llendl; 708 LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
709 LLUUID trash_id; 709 LLUUID trash_id;
710 trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); 710 trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
711 bool notify = false; 711 bool notify = false;
@@ -729,9 +729,9 @@ public:
729 } 729 }
730 else 730 else
731 { 731 {
732 llwarns << "DiscardAgentOffer unable to find: " 732 LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: "
733 << (trash_id.isNull() ? "trash " : "") 733 << (trash_id.isNull() ? "trash " : "")
734 << (mObjectID.isNull() ? "object" : "") << llendl; 734 << (mObjectID.isNull() ? "object" : "") << LL_ENDL;
735 } 735 }
736 gInventory.removeObserver(this); 736 gInventory.removeObserver(this);
737 if(notify) 737 if(notify)
@@ -766,14 +766,14 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
766 766
767 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME)) 767 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME))
768 { 768 {
769 //llinfos << "Throttle Expired" << llendl; 769 LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL;
770 throttle_count=1; 770 throttle_count=1;
771 throttle_logged=false; 771 throttle_logged=false;
772 return true; 772 return true;
773 } 773 }
774 else //has not expired 774 else //has not expired
775 { 775 {
776 //llinfos << "Throttle Not Expired, Count: " << throttle_count << llendl; 776 LL_DEBUGS("Messaging") << "Throttle Not Expired, Count: " << throttle_count << LL_ENDL;
777 // When downloading the initial inventory we get a lot of new items 777 // When downloading the initial inventory we get a lot of new items
778 // coming in and can't tell that from spam. JC 778 // coming in and can't tell that from spam. JC
779 if (LLStartUp::getStartupState() >= STATE_STARTED 779 if (LLStartUp::getStartupState() >= STATE_STARTED
@@ -821,7 +821,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
821 item = gInventory.getItem(*it); 821 item = gInventory.getItem(*it);
822 if(!item) 822 if(!item)
823 { 823 {
824 llwarns << "Unable to show inventory item: " << *it << llendl; 824 LL_WARNS("Messaging") << "Unable to show inventory item: " << *it << LL_ENDL;
825 continue; 825 continue;
826 } 826 }
827 if(gInventory.isObjectDescendentOf(*it, trash_id)) 827 if(gInventory.isObjectDescendentOf(*it, trash_id))
@@ -880,7 +880,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
880 //don't dick with highlight while the user is working 880 //don't dick with highlight while the user is working
881 //if(inventory_has_focus && !user_is_away) 881 //if(inventory_has_focus && !user_is_away)
882 // break; 882 // break;
883 //llinfos << "Highlighting" << item->getUUID() << llendl; 883 LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID() << LL_ENDL;
884 //highlight item 884 //highlight item
885 885
886 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus(); 886 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus();
@@ -1041,8 +1041,8 @@ void inventory_offer_callback(S32 button, void* user_data)
1041 } 1041 }
1042 1042
1043 // we will want to open this item when it comes back. 1043 // we will want to open this item when it comes back.
1044 lldebugs << "Initializing an opener for tid: " << info->mTransactionID 1044 LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << info->mTransactionID
1045 << llendl; 1045 << LL_ENDL;
1046 switch (info->mIM) 1046 switch (info->mIM)
1047 { 1047 {
1048 case IM_INVENTORY_OFFERED: 1048 case IM_INVENTORY_OFFERED:
@@ -1075,7 +1075,7 @@ void inventory_offer_callback(S32 button, void* user_data)
1075 } 1075 }
1076 break; 1076 break;
1077 default: 1077 default:
1078 llwarns << "inventory_offer_callback: unknown offer type" << llendl; 1078 LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
1079 break; 1079 break;
1080 } // end switch (info->mIM) 1080 } // end switch (info->mIM)
1081 break; 1081 break;
@@ -1187,11 +1187,11 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1187 } 1187 }
1188 else 1188 else
1189 { 1189 {
1190 llwarns << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << llendl; 1190 LL_WARNS("Messaging") << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << LL_ENDL;
1191 args["[OBJECTTYPE]"] = ""; 1191 args["[OBJECTTYPE]"] = "";
1192 1192
1193 // This seems safest, rather than propagating bogosity 1193 // This seems safest, rather than propagating bogosity
1194 llwarns << "Forcing an inventory-decline for probably-bad asset type." << llendl; 1194 LL_WARNS("Messaging") << "Forcing an inventory-decline for probably-bad asset type." << LL_ENDL;
1195 inventory_offer_callback(IOR_DECLINE, info); 1195 inventory_offer_callback(IOR_DECLINE, info);
1196 return; 1196 return;
1197 } 1197 }
@@ -1278,10 +1278,6 @@ void lure_callback(S32 option, void* user_data)
1278 case 0: 1278 case 0:
1279 { 1279 {
1280 // accept 1280 // accept
1281 send_simple_im(info->mFromID,
1282 "",
1283 IM_LURE_ACCEPTED,
1284 info->mLureID);
1285 gAgent.teleportViaLure(info->mLureID, info->mGodlike); 1281 gAgent.teleportViaLure(info->mLureID, info->mGodlike);
1286 } 1282 }
1287 break; 1283 break;
@@ -1426,9 +1422,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1426 1422
1427 // now store incoming IM in chat history 1423 // now store incoming IM in chat history
1428 1424
1429 snprintf(buffer, sizeof(buffer), "%s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ 1425 snprintf(buffer, sizeof(buffer), "%s%s", separator_string, (message+message_offset)); /* Flawfinder: ignore */
1430 1426
1431 llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; 1427 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
1432 1428
1433 // add to IM panel, but do not bother the user 1429 // add to IM panel, but do not bother the user
1434 gIMMgr->addMessage( 1430 gIMMgr->addMessage(
@@ -1440,7 +1436,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1440 dialog, 1436 dialog,
1441 parent_estate_id, 1437 parent_estate_id,
1442 region_id, 1438 region_id,
1443 position); 1439 position,
1440 true);
1444 1441
1445 // pretend this is chat generated by self, so it does not show up on screen 1442 // pretend this is chat generated by self, so it does not show up on screen
1446 snprintf(buffer, sizeof(buffer), "IM: %s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ 1443 snprintf(buffer, sizeof(buffer), "IM: %s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */
@@ -1481,9 +1478,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1481 snprintf(saved, MAX_STRING, "(Saved %s) ", /* Flawfinder: ignore */ 1478 snprintf(saved, MAX_STRING, "(Saved %s) ", /* Flawfinder: ignore */
1482 formatted_time(timestamp, time_buf)); 1479 formatted_time(timestamp, time_buf));
1483 } 1480 }
1484 snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */ 1481 snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */
1485 1482
1486 llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; 1483 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
1487 1484
1488 if (!is_muted || is_linden) 1485 if (!is_muted || is_linden)
1489 { 1486 {
@@ -1496,7 +1493,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1496 dialog, 1493 dialog,
1497 parent_estate_id, 1494 parent_estate_id,
1498 region_id, 1495 region_id,
1499 position); 1496 position,
1497 true);
1500 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1498 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1501 1499
1502 chat.mText = buffer; 1500 chat.mText = buffer;
@@ -1540,7 +1538,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1540 case IM_GROUP_NOTICE: 1538 case IM_GROUP_NOTICE:
1541 case IM_GROUP_NOTICE_REQUESTED: 1539 case IM_GROUP_NOTICE_REQUESTED:
1542 { 1540 {
1543 llinfos << "Received IM_GROUP_NOTICE message." << llendl; 1541 LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
1544 // Read the binary bucket for more information. 1542 // Read the binary bucket for more information.
1545 struct notice_bucket_header_t 1543 struct notice_bucket_header_t
1546 { 1544 {
@@ -1559,7 +1557,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1559 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) 1557 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
1560 || (binary_bucket[binary_bucket_size - 1] != '\0') ) 1558 || (binary_bucket[binary_bucket_size - 1] != '\0') )
1561 { 1559 {
1562 llwarns << "Malformed group notice binary bucket" << llendl; 1560 LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
1563 break; 1561 break;
1564 } 1562 }
1565 1563
@@ -1625,7 +1623,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1625 } 1623 }
1626 else 1624 else
1627 { 1625 {
1628 llinfos << "Received IM_GROUP_INVITATION message." << llendl; 1626 LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
1629 // Read the binary bucket for more information. 1627 // Read the binary bucket for more information.
1630 struct invite_bucket_t 1628 struct invite_bucket_t
1631 { 1629 {
@@ -1636,7 +1634,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1636 // Make sure the binary bucket is the correct size. 1634 // Make sure the binary bucket is the correct size.
1637 if (binary_bucket_size != sizeof(invite_bucket_t)) 1635 if (binary_bucket_size != sizeof(invite_bucket_t))
1638 { 1636 {
1639 llwarns << "Malformed group invite binary bucket" << llendl; 1637 LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
1640 break; 1638 break;
1641 } 1639 }
1642 1640
@@ -1675,7 +1673,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1675 1673
1676 if (sizeof(offer_agent_bucket_t) != binary_bucket_size) 1674 if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
1677 { 1675 {
1678 llwarns << "Malformed inventory offer from agent" << llendl; 1676 LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL;
1679 break; 1677 break;
1680 } 1678 }
1681 bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; 1679 bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0];
@@ -1686,7 +1684,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1686 { 1684 {
1687 if (sizeof(S8) != binary_bucket_size) 1685 if (sizeof(S8) != binary_bucket_size)
1688 { 1686 {
1689 llwarns << "Malformed inventory offer from object" << llendl; 1687 LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL;
1690 break; 1688 break;
1691 } 1689 }
1692 info->mType = (LLAssetType::EType) binary_bucket[0]; 1690 info->mType = (LLAssetType::EType) binary_bucket[0];
@@ -1747,7 +1745,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1747 1745
1748 case IM_GROUP_ELECTION_DEPRECATED: 1746 case IM_GROUP_ELECTION_DEPRECATED:
1749 { 1747 {
1750 llwarns << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << llendl; 1748 LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
1751 } 1749 }
1752 break; 1750 break;
1753 1751
@@ -1776,7 +1774,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1776 "(Saved %s) ", 1774 "(Saved %s) ",
1777 formatted_time(timestamp, time_buf)); 1775 formatted_time(timestamp, time_buf));
1778 } 1776 }
1779 snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1777 snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1780 BOOL is_this_agent = FALSE; 1778 BOOL is_this_agent = FALSE;
1781 if(from_id == gAgentID) 1779 if(from_id == gAgentID)
1782 { 1780 {
@@ -1791,7 +1789,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1791 IM_SESSION_INVITE, 1789 IM_SESSION_INVITE,
1792 parent_estate_id, 1790 parent_estate_id,
1793 region_id, 1791 region_id,
1794 position); 1792 position,
1793 true);
1795 1794
1796 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1795 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1797 chat.mText = buffer; 1796 chat.mText = buffer;
@@ -1826,7 +1825,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1826 case IM_BUSY_AUTO_RESPONSE: 1825 case IM_BUSY_AUTO_RESPONSE:
1827 if (is_muted) 1826 if (is_muted)
1828 { 1827 {
1829 lldebugs << "Ignoring busy response from " << from_id << llendl; 1828 LL_DEBUGS("Messaging") << "Ignoring busy response from " << from_id << LL_ENDL;
1830 return; 1829 return;
1831 } 1830 }
1832 else 1831 else
@@ -1874,16 +1873,16 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1874 // URLs sent by scripts (i.e. llLoadURL) 1873 // URLs sent by scripts (i.e. llLoadURL)
1875 if (binary_bucket_size <= 0) 1874 if (binary_bucket_size <= 0)
1876 { 1875 {
1877 llwarns << "bad binary_bucket_size: " 1876 LL_WARNS("Messaging") << "bad binary_bucket_size: "
1878 << binary_bucket_size 1877 << binary_bucket_size
1879 << " - aborting function." << llendl; 1878 << " - aborting function." << LL_ENDL;
1880 return; 1879 return;
1881 } 1880 }
1882 1881
1883 char* url = new char[binary_bucket_size]; 1882 char* url = new char[binary_bucket_size];
1884 if (url == NULL) 1883 if (url == NULL)
1885 { 1884 {
1886 llerrs << "Memory Allocation failed" << llendl; 1885 LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL;
1887 return; 1886 return;
1888 } 1887 }
1889 1888
@@ -1944,8 +1943,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1944 break; 1943 break;
1945 1944
1946 default: 1945 default:
1947 llwarns << "Instant message calling for unknown dialog " 1946 LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
1948 << (S32)dialog << llendl; 1947 << (S32)dialog << LL_ENDL;
1949 break; 1948 break;
1950 } 1949 }
1951 1950
@@ -1960,6 +1959,8 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
1960{ 1959{
1961 if (gAgent.getBusy()) 1960 if (gAgent.getBusy())
1962 { 1961 {
1962 std::string my_name;
1963 gAgent.buildFullname(my_name);
1963 LLString response = gSavedPerAccountSettings.getText("BusyModeResponse"); 1964 LLString response = gSavedPerAccountSettings.getText("BusyModeResponse");
1964 pack_instant_message( 1965 pack_instant_message(
1965 gMessageSystem, 1966 gMessageSystem,
@@ -1967,10 +1968,10 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
1967 FALSE, 1968 FALSE,
1968 gAgent.getSessionID(), 1969 gAgent.getSessionID(),
1969 from_id, 1970 from_id,
1970 SYSTEM_FROM, 1971 my_name.c_str(),
1971 response.c_str(), 1972 response.c_str(),
1972 IM_ONLINE, 1973 IM_ONLINE,
1973 IM_CONSOLE_AND_CHAT_HISTORY); 1974 IM_BUSY_AUTO_RESPONSE);
1974 gAgent.sendReliableMessage(); 1975 gAgent.sendReliableMessage();
1975 } 1976 }
1976} 1977}
@@ -2071,7 +2072,7 @@ void callingcard_offer_callback(S32 option, void* user_data)
2071void process_offer_callingcard(LLMessageSystem* msg, void**) 2072void process_offer_callingcard(LLMessageSystem* msg, void**)
2072{ 2073{
2073 // someone has offered to form a friendship 2074 // someone has offered to form a friendship
2074 lldebugs << "callingcard offer" << llendl; 2075 LL_DEBUGS("Messaging") << "callingcard offer" << LL_ENDL;
2075 2076
2076 LLUUID source_id; 2077 LLUUID source_id;
2077 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id); 2078 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id);
@@ -2116,7 +2117,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
2116 } 2117 }
2117 else 2118 else
2118 { 2119 {
2119 llwarns << "Calling card offer from an unknown source." << llendl; 2120 LL_WARNS("Messaging") << "Calling card offer from an unknown source." << LL_ENDL;
2120 } 2121 }
2121 2122
2122 delete offerdata; // !=NULL if we didn't give ownership away 2123 delete offerdata; // !=NULL if we didn't give ownership away
@@ -2309,10 +2310,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2309 break; 2310 break;
2310 case CHAT_TYPE_START: 2311 case CHAT_TYPE_START:
2311 case CHAT_TYPE_STOP: 2312 case CHAT_TYPE_STOP:
2312 llwarns << "Got chat type start/stop in main chat processing." << llendl; 2313 LL_WARNS("Messaging") << "Got chat type start/stop in main chat processing." << LL_ENDL;
2313 break; 2314 break;
2314 default: 2315 default:
2315 llwarns << "Unknown type " << chat.mChatType << " in chat!" << llendl; 2316 LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL;
2316 verb = " say, "; 2317 verb = " say, ";
2317 break; 2318 break;
2318 } 2319 }
@@ -2405,7 +2406,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
2405 if((gAgent.getID() != agent_id) 2406 if((gAgent.getID() != agent_id)
2406 || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE)) 2407 || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE))
2407 { 2408 {
2408 llwarns << "Unexpected teleport progress message." << llendl; 2409 LL_WARNS("Messaging") << "Unexpected teleport progress message." << LL_ENDL;
2409 return; 2410 return;
2410 } 2411 }
2411 U32 teleport_flags = 0x0; 2412 U32 teleport_flags = 0x0;
@@ -2420,7 +2421,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
2420 } 2421 }
2421 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 2422 char buffer[MAX_STRING]; /* Flawfinder: ignore */
2422 msg->getString("Info", "Message", MAX_STRING, buffer); 2423 msg->getString("Info", "Message", MAX_STRING, buffer);
2423 lldebugs << "teleport progress: " << buffer << llendl; 2424 LL_DEBUGS("Messaging") << "teleport progress: " << buffer << LL_ENDL;
2424 2425
2425 //Sorta hacky...default to using simulator raw messages 2426 //Sorta hacky...default to using simulator raw messages
2426 //if we don't find the coresponding mapping in our progress mappings 2427 //if we don't find the coresponding mapping in our progress mappings
@@ -2544,12 +2545,12 @@ BOOL LLPostTeleportNotifiers::tick()
2544// We're going to pretend to be a new agent 2545// We're going to pretend to be a new agent
2545void process_teleport_finish(LLMessageSystem* msg, void**) 2546void process_teleport_finish(LLMessageSystem* msg, void**)
2546{ 2547{
2547 //llinfos << "Got teleport location message" << llendl; 2548 LL_DEBUGS("Messaging") << "Got teleport location message" << LL_ENDL;
2548 LLUUID agent_id; 2549 LLUUID agent_id;
2549 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); 2550 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
2550 if (agent_id != gAgent.getID()) 2551 if (agent_id != gAgent.getID())
2551 { 2552 {
2552 llwarns << "Got teleport notification for wrong agent!" << llendl; 2553 LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
2553 return; 2554 return;
2554 } 2555 }
2555 2556
@@ -2617,8 +2618,8 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2617*/ 2618*/
2618 2619
2619 // now, use the circuit info to tell simulator about us! 2620 // now, use the circuit info to tell simulator about us!
2620 llinfos << "process_teleport_finish() Enabling " 2621 LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
2621 << sim_host << " with code " << msg->mOurCircuitCode << llendl; 2622 << sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
2622 msg->newMessageFast(_PREHASH_UseCircuitCode); 2623 msg->newMessageFast(_PREHASH_UseCircuitCode);
2623 msg->nextBlockFast(_PREHASH_CircuitCode); 2624 msg->nextBlockFast(_PREHASH_CircuitCode);
2624 msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode()); 2625 msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode());
@@ -2679,12 +2680,12 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2679 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); 2680 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
2680 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) 2681 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
2681 { 2682 {
2682 llwarns << "Incorrect id in process_agent_movement_complete()" 2683 LL_WARNS("Messaging") << "Incorrect id in process_agent_movement_complete()"
2683 << llendl; 2684 << LL_ENDL;
2684 return; 2685 return;
2685 } 2686 }
2686 2687
2687 llinfos << "process_agent_movement_complete()" << llendl; 2688 LL_DEBUGS("Messaging") << "process_agent_movement_complete()" << LL_ENDL;
2688 2689
2689 // *TODO: check timestamp to make sure the movement compleation 2690 // *TODO: check timestamp to make sure the movement compleation
2690 // makes sense. 2691 // makes sense.
@@ -2703,7 +2704,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2703 { 2704 {
2704 // Could happen if you were immediately god-teleported away on login, 2705 // Could happen if you were immediately god-teleported away on login,
2705 // maybe other cases. Continue, but warn. JC 2706 // maybe other cases. Continue, but warn. JC
2706 llwarns << "agent_movement_complete() with NULL avatarp." << llendl; 2707 LL_WARNS("Messaging") << "agent_movement_complete() with NULL avatarp." << LL_ENDL;
2707 } 2708 }
2708 2709
2709 F32 x, y; 2710 F32 x, y;
@@ -2713,19 +2714,19 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2713 { 2714 {
2714 if (gAgent.getRegion()) 2715 if (gAgent.getRegion())
2715 { 2716 {
2716 llwarns << "current region " << gAgent.getRegion()->getOriginGlobal() << llendl; 2717 LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL;
2717 } 2718 }
2718 2719
2719 llwarns << "Agent being sent to invalid home region: " 2720 LL_WARNS("Messaging") << "Agent being sent to invalid home region: "
2720 << x << ":" << y 2721 << x << ":" << y
2721 << " current pos " << gAgent.getPositionGlobal() 2722 << " current pos " << gAgent.getPositionGlobal()
2722 << llendl; 2723 << LL_ENDL;
2723 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region."); 2724 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
2724 return; 2725 return;
2725 2726
2726 } 2727 }
2727 2728
2728 llinfos << "Changing home region to " << x << ":" << y << llendl; 2729 LL_INFOS("Messaging") << "Changing home region to " << x << ":" << y << LL_ENDL;
2729 2730
2730 // set our upstream host the new simulator and shuffle things as 2731 // set our upstream host the new simulator and shuffle things as
2731 // appropriate. 2732 // appropriate.
@@ -2845,11 +2846,11 @@ void process_crossed_region(LLMessageSystem* msg, void**)
2845 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); 2846 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
2846 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) 2847 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
2847 { 2848 {
2848 llwarns << "Incorrect id in process_crossed_region()" 2849 LL_WARNS("Messaging") << "Incorrect id in process_crossed_region()"
2849 << llendl; 2850 << LL_ENDL;
2850 return; 2851 return;
2851 } 2852 }
2852 llinfos << "process_crossed_region()" << llendl; 2853 LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
2853 2854
2854 U32 sim_ip; 2855 U32 sim_ip;
2855 msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip); 2856 msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
@@ -2977,24 +2978,24 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
2977/* 2978/*
2978 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) 2979 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
2979 { 2980 {
2980 //llinfos << "head rot " << head_rotation << llendl; 2981 //LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
2981 llinfos << "head_rot_chg = " << head_rot_chg << llendl; 2982 LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
2982 } 2983 }
2983 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) 2984 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD)
2984 { 2985 {
2985 llinfos << "cam rot " << cam_rot_chg.magVec() << llendl; 2986 LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL;
2986 } 2987 }
2987 if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD) 2988 if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD)
2988 { 2989 {
2989 llinfos << "cam center " << cam_center_chg.magVec() << llendl; 2990 LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL;
2990 } 2991 }
2991// if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD) 2992// if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD)
2992// { 2993// {
2993// llinfos << "drag delta " << drag_delta_chg.magVec() << llendl; 2994// LL_INFOS("Messaging") << "drag delta " << drag_delta_chg.magVec() << LL_ENDL;
2994// } 2995// }
2995 if (control_flag_change) 2996 if (control_flag_change)
2996 { 2997 {
2997 llinfos << "dcf = " << control_flag_change << llendl; 2998 LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
2998 } 2999 }
2999*/ 3000*/
3000 3001
@@ -3043,7 +3044,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3043 3044
3044// if (camera_pos_agent.mV[VY] > 255.f) 3045// if (camera_pos_agent.mV[VY] > 255.f)
3045// { 3046// {
3046// llinfos << "Sending camera center " << camera_pos_agent << llendl; 3047// LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL;
3047// } 3048// }
3048 3049
3049 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent); 3050 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
@@ -3058,12 +3059,12 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3058 { 3059 {
3059 if (control_flags & AGENT_CONTROL_LBUTTON_DOWN) 3060 if (control_flags & AGENT_CONTROL_LBUTTON_DOWN)
3060 { 3061 {
3061 llinfos << "AgentUpdate left button down" << llendl; 3062 LL_INFOS("Messaging") << "AgentUpdate left button down" << LL_ENDL;
3062 } 3063 }
3063 3064
3064 if (control_flags & AGENT_CONTROL_LBUTTON_UP) 3065 if (control_flags & AGENT_CONTROL_LBUTTON_UP)
3065 { 3066 {
3066 llinfos << "AgentUpdate left button up" << llendl; 3067 LL_INFOS("Messaging") << "AgentUpdate left button up" << LL_ENDL;
3067 } 3068 }
3068 } 3069 }
3069 3070
@@ -3078,7 +3079,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3078 gAgent.sendReliableMessage(); 3079 gAgent.sendReliableMessage();
3079 } 3080 }
3080 3081
3081 //llinfos << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << llendl; 3082// LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL;
3082 3083
3083 // Copy the old data 3084 // Copy the old data
3084 last_head_rot = head_rotation; 3085 last_head_rot = head_rotation;
@@ -3191,13 +3192,13 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
3191 gMessageSystem->getSenderPort()); 3192 gMessageSystem->getSenderPort());
3192 if (id == LLUUID::null) 3193 if (id == LLUUID::null)
3193 { 3194 {
3194 //llinfos << "Unknown kill for local " << local_id << llendl; 3195 LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL;
3195 gObjectList.mNumUnknownKills++; 3196 gObjectList.mNumUnknownKills++;
3196 continue; 3197 continue;
3197 } 3198 }
3198 else 3199 else
3199 { 3200 {
3200 //llinfos << "Kill message for local " << local_id << llendl; 3201 LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL;
3201 } 3202 }
3202 3203
3203 LLSelectMgr::getInstance()->removeObjectFromSelections(id); 3204 LLSelectMgr::getInstance()->removeObjectFromSelections(id);
@@ -3227,7 +3228,7 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
3227 } 3228 }
3228 else 3229 else
3229 { 3230 {
3230 llwarns << "Object in UUID lookup, but not on object list in kill!" << llendl; 3231 LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL;
3231 gObjectList.mNumUnknownKills++; 3232 gObjectList.mNumUnknownKills++;
3232 } 3233 }
3233 } 3234 }
@@ -3256,8 +3257,8 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
3256 3257
3257 LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec); 3258 LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
3258 3259
3259 //lldebugs << "time_synch() - " << sun_direction << ", " << sun_ang_velocity 3260 //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
3260 // << ", " << phase << llendl; 3261 // << ", " << phase << LL_ENDL;
3261 3262
3262 gSky.setSunPhase(phase); 3263 gSky.setSunPhase(phase);
3263 gSky.setSunTargetDirection(sun_direction, sun_ang_velocity); 3264 gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
@@ -3509,7 +3510,8 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
3509 LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value); 3510 LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value);
3510 break; 3511 break;
3511 default: 3512 default:
3512// llwarns << "Unknown stat id" << stat_id << llendl; 3513 // Used to be a commented out warning.
3514 LL_DEBUGS("Messaging") << "Unknown stat id" << stat_id << LL_ENDL;
3513 break; 3515 break;
3514 } 3516 }
3515 } 3517 }
@@ -3576,7 +3578,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
3576 if (!avatarp) 3578 if (!avatarp)
3577 { 3579 {
3578 // no agent by this ID...error? 3580 // no agent by this ID...error?
3579 llwarns << "Received animation state for unknown avatar" << uuid << llendl; 3581 LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL;
3580 return; 3582 return;
3581 } 3583 }
3582 3584
@@ -3594,7 +3596,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
3594 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i); 3596 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
3595 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i); 3597 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
3596 3598
3597 //llinfos << "Anim sequence ID: " << anim_sequence_id << llendl; 3599 LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL;
3598 3600
3599 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; 3601 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
3600 3602
@@ -3654,7 +3656,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
3654 } 3656 }
3655 else 3657 else
3656 { 3658 {
3657 llwarns << "avatar_appearance sent for unknown avatar " << uuid << llendl; 3659 LL_WARNS("Messaging") << "avatar_appearance sent for unknown avatar " << uuid << LL_ENDL;
3658 } 3660 }
3659} 3661}
3660 3662
@@ -3720,7 +3722,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
3720 } 3722 }
3721 else 3723 else
3722 { 3724 {
3723 llwarns << "Received sit approval for unknown object " << sitObjectID << llendl; 3725 LL_WARNS("Messaging") << "Received sit approval for unknown object " << sitObjectID << LL_ENDL;
3724 } 3726 }
3725} 3727}
3726 3728
@@ -3870,13 +3872,13 @@ void process_name_value(LLMessageSystem *mesgsys, void **user_data)
3870 for (i = 0; i < num_blocks; i++) 3872 for (i = 0; i < num_blocks; i++)
3871 { 3873 {
3872 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); 3874 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i);
3873 llinfos << "Added to object Name Value: " << temp_str << llendl; 3875 LL_INFOS("Messaging") << "Added to object Name Value: " << temp_str << LL_ENDL;
3874 object->addNVPair(temp_str); 3876 object->addNVPair(temp_str);
3875 } 3877 }
3876 } 3878 }
3877 else 3879 else
3878 { 3880 {
3879 llinfos << "Can't find object " << id << " to add name value pair" << llendl; 3881 LL_INFOS("Messaging") << "Can't find object " << id << " to add name value pair" << LL_ENDL;
3880 } 3882 }
3881} 3883}
3882 3884
@@ -3896,13 +3898,13 @@ void process_remove_name_value(LLMessageSystem *mesgsys, void **user_data)
3896 for (i = 0; i < num_blocks; i++) 3898 for (i = 0; i < num_blocks; i++)
3897 { 3899 {
3898 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); 3900 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i);
3899 llinfos << "Removed from object Name Value: " << temp_str << llendl; 3901 LL_INFOS("Messaging") << "Removed from object Name Value: " << temp_str << LL_ENDL;
3900 object->removeNVPair(temp_str); 3902 object->removeNVPair(temp_str);
3901 } 3903 }
3902 } 3904 }
3903 else 3905 else
3904 { 3906 {
3905 llinfos << "Can't find object " << id << " to remove name value pair" << llendl; 3907 LL_INFOS("Messaging") << "Can't find object " << id << " to remove name value pair" << LL_ENDL;
3906 } 3908 }
3907} 3909}
3908 3910
@@ -3982,8 +3984,8 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
3982 msg->getS32("MoneyData", "SquareMetersCredit", credit); 3984 msg->getS32("MoneyData", "SquareMetersCredit", credit);
3983 msg->getS32("MoneyData", "SquareMetersCommitted", committed); 3985 msg->getS32("MoneyData", "SquareMetersCommitted", committed);
3984 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, STD_STRING_BUF_SIZE, desc); 3986 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, STD_STRING_BUF_SIZE, desc);
3985 llinfos << "L$, credit, committed: " << balance << " " << credit << " " 3987 LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
3986 << committed << llendl; 3988 << committed << LL_ENDL;
3987 3989
3988 if (gStatusBar) 3990 if (gStatusBar)
3989 { 3991 {
@@ -4027,10 +4029,10 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
4027 const S32 POP_FRONT_SIZE = 12; 4029 const S32 POP_FRONT_SIZE = 12;
4028 if(recent.size() > MAX_LOOKBACK) 4030 if(recent.size() > MAX_LOOKBACK)
4029 { 4031 {
4030 lldebugs << "Removing oldest transaction records" << llendl; 4032 LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
4031 recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE); 4033 recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
4032 } 4034 }
4033 //lldebugs << "Pushing back transaction " << tid << llendl; 4035 //LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
4034 recent.push_back(tid); 4036 recent.push_back(tid);
4035 } 4037 }
4036} 4038}
@@ -4475,9 +4477,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4475 switch (question_throttle.noteAction(throttle_owner_name)) 4477 switch (question_throttle.noteAction(throttle_owner_name))
4476 { 4478 {
4477 case LLStringThrottle::THROTTLE_NEWLY_BLOCKED: 4479 case LLStringThrottle::THROTTLE_NEWLY_BLOCKED:
4478 llinfos << "process_script_question throttled" 4480 LL_INFOS("Messaging") << "process_script_question throttled"
4479 << " owner_name:" << owner_name 4481 << " owner_name:" << owner_name
4480 << llendl; 4482 << LL_ENDL;
4481 // Fall through 4483 // Fall through
4482 4484
4483 case LLStringThrottle::THROTTLE_BLOCKED: 4485 case LLStringThrottle::THROTTLE_BLOCKED:
@@ -4539,7 +4541,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4539 4541
4540void process_derez_container(LLMessageSystem *msg, void**) 4542void process_derez_container(LLMessageSystem *msg, void**)
4541{ 4543{
4542 llwarns << "call to deprecated process_derez_container" << llendl; 4544 LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL;
4543} 4545}
4544 4546
4545void container_inventory_arrived(LLViewerObject* object, 4547void container_inventory_arrived(LLViewerObject* object,
@@ -4547,7 +4549,7 @@ void container_inventory_arrived(LLViewerObject* object,
4547 S32 serial_num, 4549 S32 serial_num,
4548 void* data) 4550 void* data)
4549{ 4551{
4550 llinfos << "container_inventory_arrived()" << llendl; 4552 LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL;
4551 if( gAgent.cameraMouselook() ) 4553 if( gAgent.cameraMouselook() )
4552 { 4554 {
4553 gAgent.changeCameraToDefault(); 4555 gAgent.changeCameraToDefault();
@@ -4693,7 +4695,7 @@ void process_teleport_local(LLMessageSystem *msg,void**)
4693 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); 4695 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
4694 if (agent_id != gAgent.getID()) 4696 if (agent_id != gAgent.getID())
4695 { 4697 {
4696 llwarns << "Got teleport notification for wrong agent!" << llendl; 4698 LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
4697 return; 4699 return;
4698 } 4700 }
4699 4701
@@ -4923,8 +4925,8 @@ void process_user_info_reply(LLMessageSystem* msg, void**)
4923 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); 4925 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
4924 if(agent_id != gAgent.getID()) 4926 if(agent_id != gAgent.getID())
4925 { 4927 {
4926 llwarns << "process_user_info_reply - " 4928 LL_WARNS("Messaging") << "process_user_info_reply - "
4927 << "wrong agent id." << llendl; 4929 << "wrong agent id." << LL_ENDL;
4928 } 4930 }
4929 4931
4930 BOOL im_via_email; 4932 BOOL im_via_email;
@@ -5132,7 +5134,7 @@ void process_load_url(LLMessageSystem* msg, void**)
5132 if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) || 5134 if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) ||
5133 LLMuteList::getInstance()->isMuted(infop->mOwnerID)) 5135 LLMuteList::getInstance()->isMuted(infop->mOwnerID))
5134 { 5136 {
5135 llinfos<<"Ignoring load_url from muted object/owner."<<llendl; 5137 LL_INFOS("Messaging")<<"Ignoring load_url from muted object/owner."<<LL_ENDL;
5136 delete infop; 5138 delete infop;
5137 infop = NULL; 5139 infop = NULL;
5138 return; 5140 return;
@@ -5161,7 +5163,7 @@ void process_initiate_download(LLMessageSystem* msg, void**)
5161 msg->getUUID("AgentData", "AgentID", agent_id); 5163 msg->getUUID("AgentData", "AgentID", agent_id);
5162 if (agent_id != gAgent.getID()) 5164 if (agent_id != gAgent.getID())
5163 { 5165 {
5164 llwarns << "Initiate download for wrong agent" << llendl; 5166 LL_WARNS("Messaging") << "Initiate download for wrong agent" << LL_ENDL;
5165 return; 5167 return;
5166 } 5168 }
5167 5169
@@ -5192,10 +5194,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
5192 msg->getVector3("Data", "SimPosition", pos); 5194 msg->getVector3("Data", "SimPosition", pos);
5193 msg->getVector3("Data", "LookAt", look_at); 5195 msg->getVector3("Data", "LookAt", look_at);
5194 5196
5195 // gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]); 5197 gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
5196 // LLFloaterWorldMap::show(NULL, TRUE); 5198 LLFloaterWorldMap::show(NULL, TRUE);
5197 5199
5198 LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE); 5200 // remove above two lines and replace with below line
5201 // to re-enable parcel browser for llMapDestination()
5202 // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
5199 5203
5200} 5204}
5201 5205
@@ -5287,7 +5291,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5287 LLAssetType::EType type, 5291 LLAssetType::EType type,
5288 void* user_data, S32 status, LLExtStat ext_status) 5292 void* user_data, S32 status, LLExtStat ext_status)
5289{ 5293{
5290 llinfos << "onCovenantLoadComplete()" << llendl; 5294 LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL;
5291 std::string covenant_text; 5295 std::string covenant_text;
5292 if(0 == status) 5296 if(0 == status)
5293 { 5297 {
@@ -5298,7 +5302,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5298 char* buffer = new char[file_length+1]; 5302 char* buffer = new char[file_length+1];
5299 if (buffer == NULL) 5303 if (buffer == NULL)
5300 { 5304 {
5301 llerrs << "Memory Allocation failed" << llendl; 5305 LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL;
5302 return; 5306 return;
5303 } 5307 }
5304 5308
@@ -5315,7 +5319,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5315 file_length+1); 5319 file_length+1);
5316 if( !editor->importBuffer( buffer ) ) 5320 if( !editor->importBuffer( buffer ) )
5317 { 5321 {
5318 llwarns << "Problem importing estate covenant." << llendl; 5322 LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL;
5319 covenant_text = "Problem importing estate covenant."; 5323 covenant_text = "Problem importing estate covenant.";
5320 } 5324 }
5321 else 5325 else
@@ -5328,7 +5332,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5328 } 5332 }
5329 else 5333 else
5330 { 5334 {
5331 llwarns << "Problem importing estate covenant: Covenant file format error." << llendl; 5335 LL_WARNS("Messaging") << "Problem importing estate covenant: Covenant file format error." << LL_ENDL;
5332 covenant_text = "Problem importing estate covenant: Covenant file format error."; 5336 covenant_text = "Problem importing estate covenant: Covenant file format error.";
5333 } 5337 }
5334 } 5338 }
@@ -5350,7 +5354,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5350 covenant_text = "Unable to load estate covenant at this time."; 5354 covenant_text = "Unable to load estate covenant at this time.";
5351 } 5355 }
5352 5356
5353 llwarns << "Problem loading notecard: " << status << llendl; 5357 LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
5354 } 5358 }
5355 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid); 5359 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
5356 LLPanelLandCovenant::updateCovenantText(covenant_text); 5360 LLPanelLandCovenant::updateCovenantText(covenant_text);
@@ -5368,7 +5372,7 @@ void process_feature_disabled_message(LLMessageSystem* msg, void**)
5368 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID); 5372 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID);
5369 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID); 5373 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID);
5370 5374
5371 llwarns << "Blacklisted Feature Response:" << &messageText[0] << llendl; 5375 LL_WARNS("Messaging") << "Blacklisted Feature Response:" << &messageText[0] << LL_ENDL;
5372} 5376}
5373 5377
5374// ------------------------------------------------------------ 5378// ------------------------------------------------------------
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp
index d6e92c2..3224c00 100644
--- a/linden/indra/newview/llviewernetwork.cpp
+++ b/linden/indra/newview/llviewernetwork.cpp
@@ -33,8 +33,17 @@
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llviewernetwork.h" 35#include "llviewernetwork.h"
36#include "llviewercontrol.h"
36 37
37LLGridData gGridInfo[GRID_INFO_COUNT] = 38struct LLGridData
39{
40 const char* mLabel;
41 const char* mName;
42 const char* mLoginURI;
43 const char* mHelperURI;
44};
45
46static LLGridData gGridInfo[GRID_INFO_COUNT] =
38{ 47{
39 { "None", "", "", ""}, 48 { "None", "", "", ""},
40 { "Aditi", 49 { "Aditi",
@@ -111,8 +120,177 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
111 "" } 120 "" }
112}; 121};
113 122
114// Use this to figure out which domain name and login URI to use. 123#if LL_RELEASE_FOR_DOWNLOAD
124 // Default userserver for production builds is agni
125 const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI;
126#else
127 // Default userserver for development builds is none
128 const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_NONE;
129#endif
115 130
116EGridInfo gGridChoice = GRID_INFO_NONE;
117LLString gGridName; /* Flawfinder: ignore */
118unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 131unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
132
133LLViewerLogin::LLViewerLogin() :
134 mGridChoice(DEFAULT_GRID_CHOICE)
135{
136}
137
138void LLViewerLogin::setGridChoice(EGridInfo grid)
139{
140 if(grid < 0 || grid >= GRID_INFO_COUNT)
141 {
142 llerrs << "Invalid grid index specified." << llendl;
143 }
144
145 if(mGridChoice != grid)
146 {
147 mGridChoice = grid;
148 if(GRID_INFO_LOCAL == mGridChoice)
149 {
150 mGridName = LOOPBACK_ADDRESS_STRING;
151 }
152 else if(GRID_INFO_OTHER == mGridChoice)
153 {
154 // *FIX:Mani - could this possibly be valid?
155 mGridName = "other";
156 }
157 else
158 {
159 mGridName = gGridInfo[mGridChoice].mLabel;
160 }
161
162 gSavedSettings.setS32("ServerChoice", mGridChoice);
163 gSavedSettings.setString("CustomServer", "");
164 }
165}
166
167void LLViewerLogin::setGridChoice(const std::string& grid_name)
168{
169 // Set the grid choice based on a string.
170 // The string can be:
171 // - a grid label from the gGridInfo table
172 // - an ip address
173 if(!grid_name.empty())
174 {
175 // find the grid choice from the user setting.
176 int grid_index = GRID_INFO_NONE;
177 for(;grid_index < GRID_INFO_OTHER; ++grid_index)
178 {
179 if(0 == LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str()))
180 {
181 // Founding a matching label in the list...
182 setGridChoice((EGridInfo)grid_index);
183 break;
184 }
185 }
186
187 if(GRID_INFO_OTHER == grid_index)
188 {
189 // *FIX:MEP Can and should we validate that this is an IP address?
190 mGridChoice = GRID_INFO_OTHER;
191 mGridName = grid_name;
192 gSavedSettings.setS32("ServerChoice", mGridChoice);
193 gSavedSettings.setString("CustomServer", mGridName);
194 }
195 }
196}
197
198void LLViewerLogin::resetURIs()
199{
200 // Clear URIs when picking a new server
201 gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray());
202 gSavedSettings.setString("CmdLineHelperURI", "");
203}
204
205EGridInfo LLViewerLogin::getGridChoice() const
206{
207 return mGridChoice;
208}
209
210std::string LLViewerLogin::getGridLabel() const
211{
212 if(mGridChoice == GRID_INFO_NONE)
213 {
214 return "None";
215 }
216 else if(mGridChoice < GRID_INFO_OTHER)
217 {
218 return gGridInfo[mGridChoice].mLabel;
219 }
220
221 return mGridName;
222}
223
224std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const
225{
226 if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER)
227 {
228 return gGridInfo[grid_index].mLabel;
229 }
230 return gGridInfo[GRID_INFO_NONE].mLabel;
231}
232
233void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
234{
235 // return the login uri set on the command line.
236 LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI");
237 if(c)
238 {
239 LLSD v = c->getValue();
240 if(v.isArray())
241 {
242 for(LLSD::array_const_iterator itr = v.beginArray();
243 itr != v.endArray(); ++itr)
244 {
245 std::string uri = itr->asString();
246 if(!uri.empty())
247 {
248 uris.push_back(uri);
249 }
250 }
251 }
252 else
253 {
254 std::string uri = v.asString();
255 if(!uri.empty())
256 {
257 uris.push_back(uri);
258 }
259 }
260 }
261
262 // If there was no command line uri...
263 if(uris.empty())
264 {
265 // If its a known grid choice, get the uri from the table,
266 // else try the grid name.
267 if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
268 {
269 uris.push_back(gGridInfo[mGridChoice].mLoginURI);
270 }
271 else
272 {
273 uris.push_back(mGridName);
274 }
275 }
276}
277
278std::string LLViewerLogin::getHelperURI() const
279{
280 return gSavedSettings.getString("CmdLineHelperURI");
281}
282
283bool LLViewerLogin::isInProductionGrid()
284{
285 // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
286 // but it seems that loginURI trumps that.
287 std::vector<std::string> uris;
288 getLoginURIs(uris);
289 LLString::toLower(uris[0]);
290 if((uris[0].find("agni") != std::string::npos))
291 {
292 return true;
293 }
294
295 return false;
296}
diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h
index 176ce43..966034f 100644
--- a/linden/indra/newview/llviewernetwork.h
+++ b/linden/indra/newview/llviewernetwork.h
@@ -59,18 +59,44 @@ enum EGridInfo
59 GRID_INFO_COUNT 59 GRID_INFO_COUNT
60}; 60};
61 61
62 62/**
63struct LLGridData 63 * @brief A class to manage the viewer's login state.
64 *
65 **/
66class LLViewerLogin : public LLSingleton<LLViewerLogin>
64{ 67{
65 const char* mLabel; 68public:
66 const char* mName; 69 LLViewerLogin();
67 const char* mLoginURI; 70
68 const char* mHelperURI; 71 void setGridChoice(EGridInfo grid);
69}; 72 void setGridChoice(const std::string& grid_name);
73 void resetURIs();
74
75 /**
76 * @brief Get the enumeration of the grid choice.
77 * Should only return values > 0 && < GRID_INFO_COUNT
78 **/
79 EGridInfo getGridChoice() const;
70 80
71extern EGridInfo gGridChoice; 81 /**
72extern LLGridData gGridInfo[]; 82 * @brief Get a readable label for the grid choice.
73extern LLString gGridName; /* Flawfinder: ignore */ 83 * Returns the readable name for the grid choice.
84 * If the grid is 'other', returns something
85 * the string used to specifiy the grid.
86 **/
87 std::string getGridLabel() const;
88
89 std::string getKnownGridLabel(EGridInfo grid_index) const;
90
91 void getLoginURIs(std::vector<std::string>& uris) const;
92 std::string getHelperURI() const;
93
94 bool isInProductionGrid();
95
96private:
97 EGridInfo mGridChoice;
98 std::string mGridName;
99};
74 100
75const S32 MAC_ADDRESS_BYTES = 6; 101const S32 MAC_ADDRESS_BYTES = 6;
76extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 102extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index b0bd5ce..54114e4 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -94,7 +94,7 @@
94#include "llworld.h" 94#include "llworld.h"
95#include "llui.h" 95#include "llui.h"
96#include "pipeline.h" 96#include "pipeline.h"
97#include "llappviewer.h" 97#include "llviewernetwork.h"
98#include "llvowlsky.h" 98#include "llvowlsky.h"
99 99
100//#define DEBUG_UPDATE_TYPE 100//#define DEBUG_UPDATE_TYPE
@@ -4073,6 +4073,37 @@ BOOL LLViewerObject::isParticleSource() const
4073 return !mPartSourcep.isNull() && !mPartSourcep->isDead(); 4073 return !mPartSourcep.isNull() && !mPartSourcep->isDead();
4074} 4074}
4075 4075
4076void LLViewerObject::setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id)
4077{
4078 if (mPartSourcep)
4079 {
4080 deleteParticleSource();
4081 }
4082
4083 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::createPSS(this, particle_parameters);
4084 mPartSourcep = pss;
4085
4086 if (mPartSourcep)
4087 {
4088 mPartSourcep->setOwnerUUID(owner_id);
4089
4090 if (mPartSourcep->getImage()->getID() != mPartSourcep->mPartSysData.mPartImageID)
4091 {
4092 LLViewerImage* image;
4093 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null)
4094 {
4095 image = gImageList.getImageFromFile("pixiesmall.tga");
4096 }
4097 else
4098 {
4099 image = gImageList.getImage(mPartSourcep->mPartSysData.mPartImageID);
4100 }
4101 mPartSourcep->setImage(image);
4102 }
4103 }
4104 LLViewerPartSim::getInstance()->addPartSource(pss);
4105}
4106
4076void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& owner_id) 4107void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& owner_id)
4077{ 4108{
4078 if (!mPartSourcep.isNull() && mPartSourcep->isDead()) 4109 if (!mPartSourcep.isNull() && mPartSourcep->isDead())
@@ -4539,7 +4570,7 @@ BOOL LLViewerObject::permYouOwner() const
4539 return TRUE; 4570 return TRUE;
4540#else 4571#else
4541# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4572# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4542 if (!LLAppViewer::instance()->isInProductionGrid() 4573 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4543 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4574 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4544 { 4575 {
4545 return TRUE; 4576 return TRUE;
@@ -4576,7 +4607,7 @@ BOOL LLViewerObject::permOwnerModify() const
4576 return TRUE; 4607 return TRUE;
4577#else 4608#else
4578# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4609# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4579 if (!LLAppViewer::instance()->isInProductionGrid() 4610 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4580 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4611 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4581 { 4612 {
4582 return TRUE; 4613 return TRUE;
@@ -4600,7 +4631,7 @@ BOOL LLViewerObject::permModify() const
4600 return TRUE; 4631 return TRUE;
4601#else 4632#else
4602# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4633# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4603 if (!LLAppViewer::instance()->isInProductionGrid() 4634 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4604 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4635 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4605 { 4636 {
4606 return TRUE; 4637 return TRUE;
@@ -4624,7 +4655,7 @@ BOOL LLViewerObject::permCopy() const
4624 return TRUE; 4655 return TRUE;
4625#else 4656#else
4626# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4657# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4627 if (!LLAppViewer::instance()->isInProductionGrid() 4658 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4628 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4659 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4629 { 4660 {
4630 return TRUE; 4661 return TRUE;
@@ -4648,7 +4679,7 @@ BOOL LLViewerObject::permMove() const
4648 return TRUE; 4679 return TRUE;
4649#else 4680#else
4650# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4681# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4651 if (!LLAppViewer::instance()->isInProductionGrid() 4682 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4652 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4683 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4653 { 4684 {
4654 return TRUE; 4685 return TRUE;
@@ -4672,7 +4703,7 @@ BOOL LLViewerObject::permTransfer() const
4672 return TRUE; 4703 return TRUE;
4673#else 4704#else
4674# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4705# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4675 if (!LLAppViewer::instance()->isInProductionGrid() 4706 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4676 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4707 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4677 { 4708 {
4678 return TRUE; 4709 return TRUE;
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 316e8db..88e2a15 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -558,6 +558,7 @@ protected:
558 void unpackParticleSource(const S32 block_num, const LLUUID& owner_id); 558 void unpackParticleSource(const S32 block_num, const LLUUID& owner_id);
559 void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id); 559 void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id);
560 void deleteParticleSource(); 560 void deleteParticleSource();
561 void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id);
561 562
562private: 563private:
563 void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string 564 void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index 03567b0..bd8ed97 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -36,7 +36,7 @@
36#include "message.h" 36#include "message.h"
37#include "timing.h" 37#include "timing.h"
38#include "llfasttimer.h" 38#include "llfasttimer.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40 40
41#include "llviewercontrol.h" 41#include "llviewercontrol.h"
42#include "llface.h" 42#include "llface.h"
@@ -1212,6 +1212,7 @@ U32 LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, BOOL pick_parce
1212 // render pickable ui elements, like names, etc. 1212 // render pickable ui elements, like names, etc.
1213 LLHUDObject::renderAllForSelect(); 1213 LLHUDObject::renderAllForSelect();
1214 gGL.flush(); 1214 gGL.flush();
1215 LLVertexBuffer::unbind();
1215 1216
1216 gRenderForSelect = FALSE; 1217 gRenderForSelect = FALSE;
1217 1218
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index 187a553..c29f277 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -100,9 +100,17 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
100 // we have a player 100 // we have a player
101 if (parcel) 101 if (parcel)
102 { 102 {
103 if(!gAgent.getRegion())
104 {
105 sMediaRegionID = LLUUID() ;
106 stop() ;
107 return ;
108 }
109
103 // we're in a parcel 110 // we're in a parcel
104 bool new_parcel = false; 111 bool new_parcel = false;
105 S32 parcelid = parcel->getLocalID(); 112 S32 parcelid = parcel->getLocalID();
113
106 LLUUID regionid = gAgent.getRegion()->getRegionID(); 114 LLUUID regionid = gAgent.getRegion()->getRegionID();
107 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID) 115 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
108 { 116 {
diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp
index 7d0b2b4..b50ddb6 100644
--- a/linden/indra/newview/llviewerparceloverlay.cpp
+++ b/linden/indra/newview/llviewerparceloverlay.cpp
@@ -36,7 +36,7 @@
36// indra includes 36// indra includes
37#include "llparcel.h" 37#include "llparcel.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v4color.h" 40#include "v4color.h"
41#include "v2math.h" 41#include "v2math.h"
42 42
@@ -48,6 +48,8 @@
48#include "llagent.h" 48#include "llagent.h"
49#include "llviewercamera.h" 49#include "llviewercamera.h"
50#include "llviewerimagelist.h" 50#include "llviewerimagelist.h"
51#include "llselectmgr.h"
52#include "llfloatertools.h"
51#include "llglheaders.h" 53#include "llglheaders.h"
52 54
53const U8 OVERLAY_IMG_COMPONENTS = 4; 55const U8 OVERLAY_IMG_COMPONENTS = 4;
@@ -69,7 +71,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
69 mTexture = new LLImageGL(FALSE); 71 mTexture = new LLImageGL(FALSE);
70 mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS); 72 mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS);
71 mTexture->createGLTexture(0, mImageRaw); 73 mTexture->createGLTexture(0, mImageRaw);
72 glActiveTextureARB(GL_TEXTURE0_ARB); 74 gGL.getTexUnit(0)->activate();
73 mTexture->bind(0); 75 mTexture->bind(0);
74 mTexture->setClamp(TRUE, TRUE); 76 mTexture->setClamp(TRUE, TRUE);
75 mTexture->setMipFilterNearest(TRUE); 77 mTexture->setMipFilterNearest(TRUE);
@@ -839,31 +841,34 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
839 841
840 gGL.end(); 842 gGL.end();
841 843
842 LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER); 844 if (LLSelectMgr::sRenderHiddenSelections && gFloaterTools && gFloaterTools->getVisible())
843 845 {
844 colorp = mColorArray + BYTES_PER_COLOR * i; 846 LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER);
845 vertexp = mVertexArray + FLOATS_PER_VERTEX * i; 847
848 colorp = mColorArray + BYTES_PER_COLOR * i;
849 vertexp = mVertexArray + FLOATS_PER_VERTEX * i;
846 850
847 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); 851 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
848 852
849 for (j = 0; j < vertex_per_edge; j++) 853 for (j = 0; j < vertex_per_edge; j++)
850 { 854 {
851 U8 color[4]; 855 U8 color[4];
852 color[0] = colorp[0]; 856 color[0] = colorp[0];
853 color[1] = colorp[1]; 857 color[1] = colorp[1];
854 color[2] = colorp[2]; 858 color[2] = colorp[2];
855 color[3] = colorp[3]/4; 859 color[3] = colorp[3]/4;
856 860
857 gGL.color4ubv(color); 861 gGL.color4ubv(color);
858 gGL.vertex3fv(vertexp); 862 gGL.vertex3fv(vertexp);
859 863
860 colorp += BYTES_PER_COLOR; 864 colorp += BYTES_PER_COLOR;
861 vertexp += FLOATS_PER_VERTEX; 865 vertexp += FLOATS_PER_VERTEX;
862 } 866 }
863 867
864 drawn += vertex_per_edge; 868 drawn += vertex_per_edge;
865 869
866 gGL.end(); 870 gGL.end();
871 }
867 872
868 } 873 }
869 874
diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp
index 040d108..6c0596a 100644
--- a/linden/indra/newview/llviewerpartsource.cpp
+++ b/linden/indra/newview/llviewerpartsource.cpp
@@ -466,6 +466,25 @@ LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewer
466 } 466 }
467} 467}
468 468
469
470/* static */
471LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters)
472{
473 LLMemType mt(LLMemType::MTYPE_PARTICLES);
474
475 LLPointer<LLViewerPartSourceScript> new_pssp = new LLViewerPartSourceScript(source_objp);
476
477 new_pssp->mPartSysData = particle_parameters;
478
479 if (new_pssp->mPartSysData.mTargetUUID.notNull())
480 {
481 LLViewerObject *target_objp = gObjectList.findObject(new_pssp->mPartSysData.mTargetUUID);
482 new_pssp->setTargetObject(target_objp);
483 }
484 return new_pssp;
485}
486
487
469void LLViewerPartSourceScript::setImage(LLViewerImage *imagep) 488void LLViewerPartSourceScript::setImage(LLViewerImage *imagep)
470{ 489{
471 LLMemType mt(LLMemType::MTYPE_PARTICLES); 490 LLMemType mt(LLMemType::MTYPE_PARTICLES);
diff --git a/linden/indra/newview/llviewerpartsource.h b/linden/indra/newview/llviewerpartsource.h
index cda81a0..8b6fb2c 100644
--- a/linden/indra/newview/llviewerpartsource.h
+++ b/linden/indra/newview/llviewerpartsource.h
@@ -119,6 +119,7 @@ public:
119 // Returns a new particle source to attach to an object... 119 // Returns a new particle source to attach to an object...
120 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num); 120 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num);
121 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp); 121 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp);
122 static LLPointer<LLViewerPartSourceScript> createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters);
122 123
123 LLViewerImage *getImage() const { return mImagep; } 124 LLViewerImage *getImage() const { return mImagep; }
124 void setImage(LLViewerImage *imagep); 125 void setImage(LLViewerImage *imagep);
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index e8ed85f..e1590cc 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -214,7 +214,7 @@ void LLViewerRegion::loadCache()
214 U32(mHandle>>32)/REGION_WIDTH_UNITS, 214 U32(mHandle>>32)/REGION_WIDTH_UNITS,
215 U32(mHandle)/REGION_WIDTH_UNITS ); 215 U32(mHandle)/REGION_WIDTH_UNITS );
216 216
217 FILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ 217 LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */
218 if (!fp) 218 if (!fp)
219 { 219 {
220 // might not have a file, which is normal 220 // might not have a file, which is normal
@@ -303,7 +303,7 @@ void LLViewerRegion::saveCache()
303 U32(mHandle>>32)/REGION_WIDTH_UNITS, 303 U32(mHandle>>32)/REGION_WIDTH_UNITS,
304 U32(mHandle)/REGION_WIDTH_UNITS ); 304 U32(mHandle)/REGION_WIDTH_UNITS );
305 305
306 FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ 306 LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
307 if (!fp) 307 if (!fp)
308 { 308 {
309 llwarns << "Unable to write cache file " << filename << llendl; 309 llwarns << "Unable to write cache file " << filename << llendl;
@@ -1307,6 +1307,7 @@ void LLViewerRegion::unpackRegionHandshake()
1307 1307
1308class BaseCapabilitiesComplete : public LLHTTPClient::Responder 1308class BaseCapabilitiesComplete : public LLHTTPClient::Responder
1309{ 1309{
1310 LOG_CLASS(BaseCapabilitiesComplete);
1310public: 1311public:
1311 BaseCapabilitiesComplete(LLViewerRegion* region) 1312 BaseCapabilitiesComplete(LLViewerRegion* region)
1312 : mRegion(region) 1313 : mRegion(region)
@@ -1314,8 +1315,7 @@ public:
1314 1315
1315 void error(U32 statusNum, const std::string& reason) 1316 void error(U32 statusNum, const std::string& reason)
1316 { 1317 {
1317 llinfos << "BaseCapabilitiesComplete::error " 1318 LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
1318 << statusNum << ": " << reason << llendl;
1319 1319
1320 if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) 1320 if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
1321 { 1321 {
@@ -1329,8 +1329,8 @@ public:
1329 for(iter = content.beginMap(); iter != content.endMap(); ++iter) 1329 for(iter = content.beginMap(); iter != content.endMap(); ++iter)
1330 { 1330 {
1331 mRegion->setCapability(iter->first, iter->second); 1331 mRegion->setCapability(iter->first, iter->second);
1332 llinfos << "BaseCapabilitiesComplete::result got capability for " 1332 LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
1333 << iter->first << llendl; 1333 << iter->first << LL_ENDL;
1334 1334
1335 /* HACK we're waiting for the ServerReleaseNotes */ 1335 /* HACK we're waiting for the ServerReleaseNotes */
1336 if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage)) 1336 if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index 9f10bbf..52b6748 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -53,6 +53,7 @@
53#include "llfasttimerview.h" 53#include "llfasttimerview.h"
54#include "llviewerregion.h" 54#include "llviewerregion.h"
55#include "llfloaterhtml.h" 55#include "llfloaterhtml.h"
56#include "llviewerwindow.h" // *TODO: remove, only used for width/height
56#include "llworld.h" 57#include "llworld.h"
57#include "llfeaturemanager.h" 58#include "llfeaturemanager.h"
58#if LL_WINDOWS && LL_LCD_COMPILE 59#if LL_WINDOWS && LL_LCD_COMPILE
@@ -748,7 +749,12 @@ void send_stats()
748 // If the current revision is recent, ping the previous author before overriding 749 // If the current revision is recent, ping the previous author before overriding
749 LLSD &misc = body["stats"]["misc"]; 750 LLSD &misc = body["stats"]["misc"];
750 751
751 // misc["string_1"] = 752 // Screen size so the UI team can figure out how big the widgets
753 // appear and use a "typical" size for end user tests.
754
755 S32 window_width = gViewerWindow->getWindowDisplayWidth();
756 S32 window_height = gViewerWindow->getWindowDisplayHeight();
757 misc["string_1"] = llformat("%.dx%d", window_width, window_height);
752 // misc["string_2"] = 758 // misc["string_2"] =
753 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6 759 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
754 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 760 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 60ec187..e1c56a6 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -631,7 +631,7 @@ BOOL LLViewerTextEditor::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* stic
631 if( cur_segment ) 631 if( cur_segment )
632 { 632 {
633 BOOL has_tool_tip = FALSE; 633 BOOL has_tool_tip = FALSE;
634 if( cur_segment->getStyle().getIsEmbeddedItem() ) 634 if( cur_segment->getStyle()->getIsEmbeddedItem() )
635 { 635 {
636 LLWString wtip; 636 LLWString wtip;
637 has_tool_tip = getEmbeddedItemToolTipAtPos(cur_segment->getStart(), wtip); 637 has_tool_tip = getEmbeddedItemToolTipAtPos(cur_segment->getStart(), wtip);
@@ -851,14 +851,14 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
851 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 851 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
852 if( cur_segment ) 852 if( cur_segment )
853 { 853 {
854 if(cur_segment->getStyle().isLink()) 854 if(cur_segment->getStyle()->isLink())
855 { 855 {
856 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; 856 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
857 getWindow()->setCursor(UI_CURSOR_HAND); 857 getWindow()->setCursor(UI_CURSOR_HAND);
858 handled = TRUE; 858 handled = TRUE;
859 } 859 }
860 else 860 else
861 if(cur_segment->getStyle().getIsEmbeddedItem()) 861 if(cur_segment->getStyle()->getIsEmbeddedItem())
862 { 862 {
863 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl; 863 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
864 getWindow()->setCursor(UI_CURSOR_HAND); 864 getWindow()->setCursor(UI_CURSOR_HAND);
@@ -970,10 +970,10 @@ BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
970// const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 970// const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
971// if( cur_segment ) 971// if( cur_segment )
972// { 972// {
973// if(cur_segment->getStyle().isLink()) 973// if(cur_segment->getStyle()->isLink())
974// { 974// {
975// handled = TRUE; 975// handled = TRUE;
976// mHTML = cur_segment->getStyle().getLinkHREF(); 976// mHTML = cur_segment->getStyle()->getLinkHREF();
977// } 977// }
978// } 978// }
979// } 979// }
@@ -1008,7 +1008,7 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
1008 if( allowsEmbeddedItems() ) 1008 if( allowsEmbeddedItems() )
1009 { 1009 {
1010 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 1010 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
1011 if( cur_segment && cur_segment->getStyle().getIsEmbeddedItem() ) 1011 if( cur_segment && cur_segment->getStyle()->getIsEmbeddedItem() )
1012 { 1012 {
1013 if( openEmbeddedItemAtPos( cur_segment->getStart() ) ) 1013 if( openEmbeddedItemAtPos( cur_segment->getStart() ) )
1014 { 1014 {
@@ -1598,7 +1598,7 @@ LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlF
1598 text_editor->initFromXML(node, parent); 1598 text_editor->initFromXML(node, parent);
1599 1599
1600 // add text after all parameters have been set 1600 // add text after all parameters have been set
1601 text_editor->appendStyledText(text, FALSE, FALSE, NULL); 1601 text_editor->appendStyledText(text, FALSE, FALSE);
1602 1602
1603 return text_editor; 1603 return text_editor;
1604} 1604}
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp
index ceff856..54188cd 100644
--- a/linden/indra/newview/llviewerthrottle.cpp
+++ b/linden/indra/newview/llviewerthrottle.cpp
@@ -182,9 +182,9 @@ void LLViewerThrottleGroup::dump()
182 S32 i; 182 S32 i;
183 for (i = 0; i < TC_EOF; i++) 183 for (i = 0; i < TC_EOF; i++)
184 { 184 {
185 llinfos << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << llendl; 185 LL_DEBUGS("Throttle") << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << LL_ENDL;
186 } 186 }
187 llinfos << "Total: " << mThrottleTotal << llendl; 187 LL_DEBUGS("Throttle") << "Total: " << mThrottleTotal << LL_ENDL;
188} 188}
189 189
190class LLBPSListener : public LLSimpleListener 190class LLBPSListener : public LLSimpleListener
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 4c76b8b..9f091dc 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -43,7 +43,7 @@
43#include "llviewquery.h" 43#include "llviewquery.h"
44#include "llxmltree.h" 44#include "llxmltree.h"
45//#include "llviewercamera.h" 45//#include "llviewercamera.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47 47
48#include "llvoiceclient.h" // for push-to-talk button handling 48#include "llvoiceclient.h" // for push-to-talk button handling
49 49
@@ -182,6 +182,7 @@
182#include "llviewerdisplay.h" 182#include "llviewerdisplay.h"
183#include "llspatialpartition.h" 183#include "llspatialpartition.h"
184#include "llviewerjoystick.h" 184#include "llviewerjoystick.h"
185#include "llviewernetwork.h"
185 186
186#if LL_WINDOWS 187#if LL_WINDOWS
187#include "llwindebug.h" 188#include "llwindebug.h"
@@ -1529,9 +1530,9 @@ LLViewerWindow::LLViewerWindow(
1529 ignore_pixel_depth, 1530 ignore_pixel_depth,
1530 gSavedSettings.getU32("RenderFSAASamples")); 1531 gSavedSettings.getU32("RenderFSAASamples"));
1531#if LL_WINDOWS 1532#if LL_WINDOWS
1532 if (!LLWinDebug::setupExceptionHandler()) 1533 if (!LLWinDebug::checkExceptionHandler())
1533 { 1534 {
1534 llwarns << " Someone took over my exception handler (post createWindow)!" << llendl; 1535 LL_WARNS("Window") << " Someone took over my exception handler (post createWindow)!" << LL_ENDL;
1535 } 1536 }
1536#endif 1537#endif
1537 1538
@@ -1542,8 +1543,8 @@ LLViewerWindow::LLViewerWindow(
1542 llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information." 1543 llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
1543 << llendl; 1544 << llendl;
1544#else 1545#else
1545 llwarns << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" 1546 LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
1546 << llendl; 1547 << LL_ENDL;
1547#endif 1548#endif
1548 LLAppViewer::instance()->forceExit(1); 1549 LLAppViewer::instance()->forceExit(1);
1549 } 1550 }
@@ -1569,7 +1570,7 @@ LLViewerWindow::LLViewerWindow(
1569 // We want to set this stuff up BEFORE we initialize the pipeline, so we can turn off 1570 // We want to set this stuff up BEFORE we initialize the pipeline, so we can turn off
1570 // stuff like AGP if we think that it'll crash the viewer. 1571 // stuff like AGP if we think that it'll crash the viewer.
1571 // 1572 //
1572 llinfos << "Loading feature tables." << llendl; 1573 LL_DEBUGS("Window") << "Loading feature tables." << LL_ENDL;
1573 1574
1574 LLFeatureManager::getInstance()->init(); 1575 LLFeatureManager::getInstance()->init();
1575 1576
@@ -1638,7 +1639,7 @@ LLViewerWindow::LLViewerWindow(
1638 1639
1639void LLViewerWindow::initGLDefaults() 1640void LLViewerWindow::initGLDefaults()
1640{ 1641{
1641 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1642 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1642 glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); 1643 glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
1643 1644
1644 F32 ambient[4] = {0.f,0.f,0.f,0.f }; 1645 F32 ambient[4] = {0.f,0.f,0.f,0.f };
@@ -1656,7 +1657,7 @@ void LLViewerWindow::initGLDefaults()
1656 1657
1657 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); 1658 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
1658 1659
1659 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 1660 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
1660 1661
1661 glCullFace(GL_BACK); 1662 glCullFace(GL_BACK);
1662 1663
@@ -2198,7 +2199,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible )
2198 2199
2199 // ...and set the menu color appropriately. 2200 // ...and set the menu color appropriately.
2200 setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT, 2201 setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT,
2201 LLAppViewer::instance()->isInProductionGrid()); 2202 LLViewerLogin::getInstance()->isInProductionGrid());
2202 } 2203 }
2203 2204
2204 if ( gStatusBar ) 2205 if ( gStatusBar )
@@ -2213,15 +2214,15 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
2213 LLString::format_map_t args; 2214 LLString::format_map_t args;
2214 LLColor4 new_bg_color; 2215 LLColor4 new_bg_color;
2215 2216
2216 if(god_mode && LLAppViewer::instance()->isInProductionGrid()) 2217 if(god_mode && LLViewerLogin::getInstance()->isInProductionGrid())
2217 { 2218 {
2218 new_bg_color = gColors.getColor( "MenuBarGodBgColor" ); 2219 new_bg_color = gColors.getColor( "MenuBarGodBgColor" );
2219 } 2220 }
2220 else if(god_mode && !LLAppViewer::instance()->isInProductionGrid()) 2221 else if(god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
2221 { 2222 {
2222 new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" ); 2223 new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" );
2223 } 2224 }
2224 else if(!god_mode && !LLAppViewer::instance()->isInProductionGrid()) 2225 else if(!god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
2225 { 2226 {
2226 new_bg_color = gColors.getColor( "MenuNonProductionBgColor" ); 2227 new_bg_color = gColors.getColor( "MenuNonProductionBgColor" );
2227 } 2228 }
@@ -3538,7 +3539,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
3538 const LLVector2& display_scale = getDisplayScale(); 3539 const LLVector2& display_scale = getDisplayScale();
3539 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); 3540 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
3540 3541
3541 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 3542 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
3542 3543
3543 // make viewport big enough to handle antialiased frame buffers 3544 // make viewport big enough to handle antialiased frame buffers
3544 glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4); 3545 glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
@@ -4185,8 +4186,9 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
4185 if ( (size.mX != new_width + BORDERWIDTH) 4186 if ( (size.mX != new_width + BORDERWIDTH)
4186 ||(size.mY != new_height + BORDERHEIGHT)) 4187 ||(size.mY != new_height + BORDERHEIGHT))
4187 { 4188 {
4188 S32 x = gViewerWindow->getWindowWidth(); 4189 // use actual display dimensions, not virtual UI dimensions
4189 S32 y = gViewerWindow->getWindowHeight(); 4190 S32 x = gViewerWindow->getWindowDisplayWidth();
4191 S32 y = gViewerWindow->getWindowDisplayHeight();
4190 BORDERWIDTH = size.mX - x; 4192 BORDERWIDTH = size.mX - x;
4191 BORDERHEIGHT = size.mY- y; 4193 BORDERHEIGHT = size.mY- y;
4192 LLCoordScreen new_size(new_width + BORDERWIDTH, 4194 LLCoordScreen new_size(new_width + BORDERWIDTH,
@@ -4938,7 +4940,7 @@ void LLViewerWindow::restoreGL(const LLString& progress_message)
4938 } 4940 }
4939 llinfos << "...Restoring GL done" << llendl; 4941 llinfos << "...Restoring GL done" << llendl;
4940#if LL_WINDOWS 4942#if LL_WINDOWS
4941 if (SetUnhandledExceptionFilter(LLWinDebug::handleException) != LLWinDebug::handleException) 4943 if(!LLWinDebug::checkExceptionHandler())
4942 { 4944 {
4943 llwarns << " Someone took over my exception handler (post restoreGL)!" << llendl; 4945 llwarns << " Someone took over my exception handler (post restoreGL)!" << llendl;
4944 } 4946 }
@@ -4951,21 +4953,21 @@ void LLViewerWindow::initFonts(F32 zoom_factor)
4951{ 4953{
4952 LLFontGL::destroyGL(); 4954 LLFontGL::destroyGL();
4953 LLFontGL::initDefaultFonts( gSavedSettings.getF32("FontScreenDPI"), 4955 LLFontGL::initDefaultFonts( gSavedSettings.getF32("FontScreenDPI"),
4954 mDisplayScale.mV[VX] * zoom_factor, 4956 mDisplayScale.mV[VX] * zoom_factor,
4955 mDisplayScale.mV[VY] * zoom_factor, 4957 mDisplayScale.mV[VY] * zoom_factor,
4956 gSavedSettings.getString("FontMonospace"), 4958 gSavedSettings.getString("FontMonospace"),
4957 gSavedSettings.getF32("FontSizeMonospace"), 4959 gSavedSettings.getF32("FontSizeMonospace"),
4958 gSavedSettings.getString("FontSansSerif"), 4960 gSavedSettings.getString("FontSansSerif"),
4959 gSavedSettings.getString("FontSansSerifFallback"), 4961 gSavedSettings.getString("FontSansSerifFallback"),
4960 gSavedSettings.getF32("FontSansSerifFallbackScale"), 4962 gSavedSettings.getF32("FontSansSerifFallbackScale"),
4961 gSavedSettings.getF32("FontSizeSmall"), 4963 gSavedSettings.getF32("FontSizeSmall"),
4962 gSavedSettings.getF32("FontSizeMedium"), 4964 gSavedSettings.getF32("FontSizeMedium"),
4963 gSavedSettings.getF32("FontSizeLarge"), 4965 gSavedSettings.getF32("FontSizeLarge"),
4964 gSavedSettings.getF32("FontSizeHuge"), 4966 gSavedSettings.getF32("FontSizeHuge"),
4965 gSavedSettings.getString("FontSansSerifBold"), 4967 gSavedSettings.getString("FontSansSerifBold"),
4966 gSavedSettings.getF32("FontSizeMedium"), 4968 gSavedSettings.getF32("FontSizeMedium"),
4967 gDirUtilp->getAppRODataDir() 4969 gDirUtilp->getAppRODataDir()
4968 ); 4970 );
4969} 4971}
4970void LLViewerWindow::toggleFullscreen(BOOL show_progress) 4972void LLViewerWindow::toggleFullscreen(BOOL show_progress)
4971{ 4973{
@@ -5018,20 +5020,16 @@ BOOL LLViewerWindow::checkSettings()
5018 return FALSE; 5020 return FALSE;
5019 } 5021 }
5020 5022
5021#ifndef LL_RELEASE_FOR_DOWNLOAD
5022 LLGLState::checkStates(); 5023 LLGLState::checkStates();
5023 LLGLState::checkTextureChannels(); 5024 LLGLState::checkTextureChannels();
5024#endif
5025 changeDisplaySettings(TRUE, 5025 changeDisplaySettings(TRUE,
5026 LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"), 5026 LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"),
5027 gSavedSettings.getS32("FullScreenHeight")), 5027 gSavedSettings.getS32("FullScreenHeight")),
5028 gSavedSettings.getBOOL("DisableVerticalSync"), 5028 gSavedSettings.getBOOL("DisableVerticalSync"),
5029 mShowFullscreenProgress); 5029 mShowFullscreenProgress);
5030 5030
5031#ifndef LL_RELEASE_FOR_DOWNLOAD
5032 LLGLState::checkStates(); 5031 LLGLState::checkStates();
5033 LLGLState::checkTextureChannels(); 5032 LLGLState::checkTextureChannels();
5034#endif
5035 return TRUE; 5033 return TRUE;
5036 } 5034 }
5037 return FALSE; 5035 return FALSE;
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h
index a9f941c..da5fa4e 100644
--- a/linden/indra/newview/llviewerwindow.h
+++ b/linden/indra/newview/llviewerwindow.h
@@ -114,12 +114,18 @@ public:
114 // ACCESSORS 114 // ACCESSORS
115 // 115 //
116 LLView* getRootView() const { return mRootView; } 116 LLView* getRootView() const { return mRootView; }
117
118 // Window in raw pixels as seen on screen.
117 const LLRect& getWindowRect() const { return mWindowRect; }; 119 const LLRect& getWindowRect() const { return mWindowRect; };
120 S32 getWindowDisplayHeight() const;
121 S32 getWindowDisplayWidth() const;
122
123 // Window in scaled pixels (via UI scale), use this for
124 // UI elements checking size.
118 const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; }; 125 const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; };
119 S32 getWindowHeight() const; 126 S32 getWindowHeight() const;
120 S32 getWindowWidth() const; 127 S32 getWindowWidth() const;
121 S32 getWindowDisplayHeight() const; 128
122 S32 getWindowDisplayWidth() const;
123 LLWindow* getWindow() const { return mWindow; } 129 LLWindow* getWindow() const { return mWindow; }
124 void* getPlatformWindow() const { return mWindow->getPlatformWindow(); } 130 void* getPlatformWindow() const { return mWindow->getPlatformWindow(); }
125 void focusClient() const { return mWindow->focusClient(); }; 131 void focusClient() const { return mWindow->focusClient(); };
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 7de2f9c..6b5f066 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -37,7 +37,7 @@
37 37
38#include "llvoavatar.h" 38#include "llvoavatar.h"
39 39
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "audioengine.h" 41#include "audioengine.h"
42#include "imageids.h" 42#include "imageids.h"
43#include "indra_constants.h" 43#include "indra_constants.h"
@@ -95,7 +95,6 @@
95#include "llstatusbar.h" 95#include "llstatusbar.h"
96#include "lltargetingmotion.h" 96#include "lltargetingmotion.h"
97#include "lltexlayer.h" 97#include "lltexlayer.h"
98#include "lltoolbar.h"
99#include "lltoolgrab.h" // for needsRenderBeam 98#include "lltoolgrab.h" // for needsRenderBeam
100#include "lltoolmgr.h" // for needsRenderBeam 99#include "lltoolmgr.h" // for needsRenderBeam
101#include "lltoolmorph.h" 100#include "lltoolmorph.h"
@@ -117,20 +116,14 @@
117#include "llspatialpartition.h" 116#include "llspatialpartition.h"
118#include "llglslshader.h" 117#include "llglslshader.h"
119#include "llappviewer.h" 118#include "llappviewer.h"
120#include "lscript_byteformat.h" 119#include "llsky.h"
120#include "llanimstatelabels.h"
121 121
122//#include "vtune/vtuneapi.h" 122//#include "vtune/vtuneapi.h"
123 123
124//Ventrella 124#include "llgesturemgr.h" //needed to trigger the voice gesticulations
125#include "llgesturemgr.h" //needed to trigger the voice gestculations
126#include "llvoicevisualizer.h" 125#include "llvoicevisualizer.h"
127#include "llvoiceclient.h" 126#include "llvoiceclient.h"
128//end Ventrella
129
130// Direct imports, evil
131extern LLSky gSky;
132extern void set_avatar_character(void* charNameArg);
133extern BOOL gRenderForSelect;
134 127
135LLXmlTree LLVOAvatar::sXMLTree; 128LLXmlTree LLVOAvatar::sXMLTree;
136LLXmlTree LLVOAvatar::sSkeletonXMLTree; 129LLXmlTree LLVOAvatar::sSkeletonXMLTree;
@@ -686,7 +679,8 @@ LLVOAvatar::LLVOAvatar(
686 mTexHairColor( NULL ), 679 mTexHairColor( NULL ),
687 mTexEyeColor( NULL ), 680 mTexEyeColor( NULL ),
688 mNeedsSkin(FALSE), 681 mNeedsSkin(FALSE),
689 mUpdatePeriod(1) 682 mUpdatePeriod(1),
683 mFullyLoadedInitialized(FALSE)
690{ 684{
691 LLMemType mt(LLMemType::MTYPE_AVATAR); 685 LLMemType mt(LLMemType::MTYPE_AVATAR);
692 686
@@ -766,6 +760,10 @@ LLVOAvatar::LLVOAvatar(
766 mStepOnLand = TRUE; 760 mStepOnLand = TRUE;
767 mStepMaterial = 0; 761 mStepMaterial = 0;
768 762
763 mLipSyncActive = false;
764 mOohMorph = NULL;
765 mAahMorph = NULL;
766
769 //------------------------------------------------------------------------- 767 //-------------------------------------------------------------------------
770 // initialize joint, mesh and shape members 768 // initialize joint, mesh and shape members
771 //------------------------------------------------------------------------- 769 //-------------------------------------------------------------------------
@@ -950,10 +948,8 @@ LLVOAvatar::LLVOAvatar(
950 948
951 //VTPause(); // VTune 949 //VTPause(); // VTune
952 950
953 //Ventrella
954 mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) ); 951 mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) );
955 mCurrentGesticulationLevel = 0; 952 mCurrentGesticulationLevel = 0;
956 //END Ventrella
957} 953}
958 954
959//------------------------------------------------------------------------ 955//------------------------------------------------------------------------
@@ -1887,6 +1883,26 @@ void LLVOAvatar::buildCharacter()
1887 updateHeadOffset(); 1883 updateHeadOffset();
1888 1884
1889 //------------------------------------------------------------------------- 1885 //-------------------------------------------------------------------------
1886 // initialize lip sync morph pointers
1887 //-------------------------------------------------------------------------
1888 mOohMorph = getVisualParam( "Lipsync_Ooh" );
1889 mAahMorph = getVisualParam( "Lipsync_Aah" );
1890
1891 // If we don't have the Ooh morph, use the Kiss morph
1892 if (!mOohMorph)
1893 {
1894 llwarns << "Missing 'Ooh' morph for lipsync, using fallback." << llendl;
1895 mOohMorph = getVisualParam( "Express_Kiss" );
1896 }
1897
1898 // If we don't have the Aah morph, use the Open Mouth morph
1899 if (!mAahMorph)
1900 {
1901 llwarns << "Missing 'Aah' morph for lipsync, using fallback." << llendl;
1902 mAahMorph = getVisualParam( "Express_Open_Mouth" );
1903 }
1904
1905 //-------------------------------------------------------------------------
1890 // start default motions 1906 // start default motions
1891 //------------------------------------------------------------------------- 1907 //-------------------------------------------------------------------------
1892 startMotion( ANIM_AGENT_HEAD_ROT ); 1908 startMotion( ANIM_AGENT_HEAD_ROT );
@@ -2449,88 +2465,93 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2449 // animate the character 2465 // animate the character
2450 // store off last frame's root position to be consistent with camera position 2466 // store off last frame's root position to be consistent with camera position
2451 LLVector3 root_pos_last = mRoot.getWorldPosition(); 2467 LLVector3 root_pos_last = mRoot.getWorldPosition();
2452
2453 BOOL detailed_update = updateCharacter(agent); 2468 BOOL detailed_update = updateCharacter(agent);
2469 bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel();
2454 2470
2455 { 2471 // disable voice visualizer when in mouselook
2456 //Ventrella 2472 mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) );
2457 bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); 2473 if ( voiceEnabled )
2458 // disable voice visualizer when in mouselook 2474 {
2459 mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) ); 2475 //----------------------------------------------------------------
2460 if ( voiceEnabled ) 2476 // Only do gesture triggering for your own avatar, and only when you're in a proximal channel.
2461 { 2477 //----------------------------------------------------------------
2462 //---------------------------------------------------------------- 2478 if( mIsSelf )
2463 // Only do gesture triggering for your own avatar, and only when you're in a proximal channel. 2479 {
2464 //---------------------------------------------------------------- 2480 //----------------------------------------------------------------------------------------
2465 if( mIsSelf ) 2481 // The following takes the voice signal and uses that to trigger gesticulations.
2482 //----------------------------------------------------------------------------------------
2483 int lastGesticulationLevel = mCurrentGesticulationLevel;
2484 mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel();
2485
2486 //---------------------------------------------------------------------------------------------------
2487 // If "current gesticulation level" changes, we catch this, and trigger the new gesture
2488 //---------------------------------------------------------------------------------------------------
2489 if ( lastGesticulationLevel != mCurrentGesticulationLevel )
2466 { 2490 {
2467 //---------------------------------------------------------------------------------------- 2491 if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF )
2468 // The following takes the voice signal and uses that to trigger gesticulations.
2469 //----------------------------------------------------------------------------------------
2470 int lastGesticulationLevel = mCurrentGesticulationLevel;
2471 mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel();
2472
2473 //---------------------------------------------------------------------------------------------------
2474 // If "current gesticulation level" changes, we catch this, and trigger the new gesture
2475 //---------------------------------------------------------------------------------------------------
2476 if ( lastGesticulationLevel != mCurrentGesticulationLevel )
2477 {
2478 if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF )
2479 {
2480 LLString gestureString = "unInitialized";
2481 if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; }
2482 else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; }
2483 else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; }
2484 else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; }
2485
2486 // this is the call that Karl S. created for triggering gestures from within the code.
2487 gGestureManager.triggerAndReviseString( gestureString );
2488 }
2489 }
2490
2491 } //if( mIsSelf )
2492
2493 //-----------------------------------------------------------------------------------------------------------------
2494 // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer.
2495 // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol.
2496 //
2497 // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been
2498 // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking.
2499 //-----------------------------------------------------------------------------------------------------------------
2500 if ( gVoiceClient->getIsSpeaking( mID ) )
2501 {
2502 if ( ! mVoiceVisualizer->getCurrentlySpeaking() )
2503 { 2492 {
2504 mVoiceVisualizer->setStartSpeaking(); 2493 LLString gestureString = "unInitialized";
2494 if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; }
2495 else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; }
2496 else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; }
2497 else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; }
2505 2498
2506 //printf( "gAwayTimer.reset();\n" ); 2499 // this is the call that Karl S. created for triggering gestures from within the code.
2507 } 2500 gGestureManager.triggerAndReviseString( gestureString );
2508
2509 mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) );
2510
2511 if( mIsSelf )
2512 {
2513 gAgent.clearAFK();
2514 } 2501 }
2515 } 2502 }
2516 else 2503
2504 } //if( mIsSelf )
2505
2506 //-----------------------------------------------------------------------------------------------------------------
2507 // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer.
2508 // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol.
2509 //
2510 // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been
2511 // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking.
2512 //-----------------------------------------------------------------------------------------------------------------
2513 if ( gVoiceClient->getIsSpeaking( mID ) )
2514 {
2515 if ( ! mVoiceVisualizer->getCurrentlySpeaking() )
2516 {
2517 mVoiceVisualizer->setStartSpeaking();
2518
2519 //printf( "gAwayTimer.reset();\n" );
2520 }
2521
2522 mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) );
2523
2524 if( mIsSelf )
2525 {
2526 gAgent.clearAFK();
2527 }
2528 }
2529 else
2530 {
2531 if ( mVoiceVisualizer->getCurrentlySpeaking() )
2517 { 2532 {
2518 if ( mVoiceVisualizer->getCurrentlySpeaking() ) 2533 mVoiceVisualizer->setStopSpeaking();
2534
2535 if ( mLipSyncActive )
2519 { 2536 {
2520 mVoiceVisualizer->setStopSpeaking(); 2537 if( mOohMorph ) mOohMorph->setWeight(mOohMorph->getMinWeight(), FALSE);
2538 if( mAahMorph ) mAahMorph->setWeight(mAahMorph->getMinWeight(), FALSE);
2539
2540 mLipSyncActive = false;
2541 LLCharacter::updateVisualParams();
2542 dirtyMesh();
2521 } 2543 }
2522 } 2544 }
2523 2545 }
2524 //-------------------------------------------------------------------------------------------- 2546
2525 // here we get the approximate head position and set as sound source for the voice symbol 2547 //--------------------------------------------------------------------------------------------
2526 // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing) 2548 // here we get the approximate head position and set as sound source for the voice symbol
2527 //-------------------------------------------------------------------------------------------- 2549 // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing)
2528 LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] ); 2550 //--------------------------------------------------------------------------------------------
2529 mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset ); 2551 LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] );
2530 2552 mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset );
2531 }//if ( voiceEnabled ) 2553
2532 } 2554 }//if ( voiceEnabled )
2533 //End Ventrella
2534 2555
2535 if (LLVOAvatar::sJointDebug) 2556 if (LLVOAvatar::sJointDebug)
2536 { 2557 {
@@ -2704,6 +2725,76 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2704 dirtyMesh(); 2725 dirtyMesh();
2705 } 2726 }
2706 2727
2728 // Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync
2729 if ( voiceEnabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) )
2730 {
2731 F32 ooh_morph_amount = 0.0f;
2732 F32 aah_morph_amount = 0.0f;
2733
2734 mVoiceVisualizer->lipSyncOohAah( ooh_morph_amount, aah_morph_amount );
2735
2736 if( mOohMorph )
2737 {
2738 F32 ooh_weight = mOohMorph->getMinWeight()
2739 + ooh_morph_amount * (mOohMorph->getMaxWeight() - mOohMorph->getMinWeight());
2740
2741 mOohMorph->setWeight( ooh_weight, FALSE );
2742 }
2743
2744 if( mAahMorph )
2745 {
2746 F32 aah_weight = mAahMorph->getMinWeight()
2747 + aah_morph_amount * (mAahMorph->getMaxWeight() - mAahMorph->getMinWeight());
2748
2749 mAahMorph->setWeight( aah_weight, FALSE );
2750 }
2751
2752 mLipSyncActive = true;
2753 LLCharacter::updateVisualParams();
2754 dirtyMesh();
2755 }
2756
2757 // update visibility when avatar is partially loaded
2758 if (updateIsFullyLoaded()) // changed?
2759 {
2760 if (isFullyLoaded())
2761 {
2762 deleteParticleSource();
2763 }
2764 else
2765 {
2766 LLPartSysData particle_parameters;
2767
2768 // fancy particle cloud designed by Brent
2769 particle_parameters.mPartData.mMaxAge = 4.f;
2770 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2771 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2772 particle_parameters.mPartData.mStartScale.mV[VY] = 1.0f;
2773 particle_parameters.mPartData.mEndScale.mV[VX] = 0.02f;
2774 particle_parameters.mPartData.mEndScale.mV[VY] = 0.02f;
2775 particle_parameters.mPartData.mStartColor = LLColor4(1, 1, 1, 0.5f);
2776 particle_parameters.mPartData.mEndColor = LLColor4(1, 1, 1, 0.0f);
2777 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2778 LLViewerImage* cloud = gImageList.getImageFromFile("cloud-particle.j2c");
2779 particle_parameters.mPartImageID = cloud->getID();
2780 particle_parameters.mMaxAge = 0.f;
2781 particle_parameters.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE;
2782 particle_parameters.mInnerAngle = 3.14159f;
2783 particle_parameters.mOuterAngle = 0.f;
2784 particle_parameters.mBurstRate = 0.02f;
2785 particle_parameters.mBurstRadius = 0.0f;
2786 particle_parameters.mBurstPartCount = 1;
2787 particle_parameters.mBurstSpeedMin = 0.1f;
2788 particle_parameters.mBurstSpeedMax = 1.f;
2789 particle_parameters.mPartData.mFlags = ( LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK |
2790 LLPartData::LL_PART_EMISSIVE_MASK | // LLPartData::LL_PART_FOLLOW_SRC_MASK |
2791 LLPartData::LL_PART_TARGET_POS_MASK );
2792
2793 setParticleSource(particle_parameters, getID());
2794 }
2795 }
2796
2797
2707 // update wind effect 2798 // update wind effect
2708 if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH)) 2799 if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH))
2709 { 2800 {
@@ -3883,7 +3974,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3883 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) 3974 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
3884 { //LOD changed or new mesh created, allocate new vertex buffer if needed 3975 { //LOD changed or new mesh created, allocate new vertex buffer if needed
3885 updateMeshData(); 3976 updateMeshData();
3886 mDirtyMesh = FALSE; 3977 mDirtyMesh = FALSE;
3887 mNeedsSkin = TRUE; 3978 mNeedsSkin = TRUE;
3888 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); 3979 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
3889 } 3980 }
@@ -3957,7 +4048,10 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3957 } 4048 }
3958 4049
3959 // render collision normal 4050 // render collision normal
3960 if (sShowFootPlane && mDrawable.notNull()) 4051 // *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due
4052 // to DEV-14477. the code is left here to aid in tracking down the cause
4053 // of the crash in the future. -brad
4054 if (!gRenderForSelect && sShowFootPlane && mDrawable.notNull())
3961 { 4055 {
3962 LLVector3 slaved_pos = mDrawable->getPositionAgent(); 4056 LLVector3 slaved_pos = mDrawable->getPositionAgent();
3963 LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]); 4057 LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]);
@@ -3985,7 +4079,9 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3985 gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]); 4079 gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]);
3986 gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]); 4080 gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]);
3987 4081
3988 }gGL.end(); 4082 }
4083 gGL.end();
4084 gGL.flush();
3989 } 4085 }
3990 //-------------------------------------------------------------------- 4086 //--------------------------------------------------------------------
3991 // render all geomety attached to the skeleton 4087 // render all geomety attached to the skeleton
@@ -4027,23 +4123,23 @@ U32 LLVOAvatar::renderTransparent()
4027 BOOL first_pass = FALSE; 4123 BOOL first_pass = FALSE;
4028 if( isWearingWearableType( WT_SKIRT ) ) 4124 if( isWearingWearableType( WT_SKIRT ) )
4029 { 4125 {
4030 glAlphaFunc(GL_GREATER,0.25f); 4126 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f);
4031 num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE); 4127 num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE);
4032 first_pass = FALSE; 4128 first_pass = FALSE;
4033 glAlphaFunc(GL_GREATER,0.01f); 4129 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4034 } 4130 }
4035 4131
4036 if (!mIsSelf || gAgent.needsRenderHead()) 4132 if (!mIsSelf || gAgent.needsRenderHead())
4037 { 4133 {
4038 if (LLPipeline::sImpostorRender) 4134 if (LLPipeline::sImpostorRender)
4039 { 4135 {
4040 glAlphaFunc(GL_GREATER, 0.5f); 4136 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
4041 } 4137 }
4042 num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass); 4138 num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass);
4043 num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE); 4139 num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE);
4044 if (LLPipeline::sImpostorRender) 4140 if (LLPipeline::sImpostorRender)
4045 { 4141 {
4046 glAlphaFunc(GL_GREATER, 0.01f); 4142 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4047 } 4143 }
4048 } 4144 }
4049 4145
@@ -4136,7 +4232,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
4136 up *= mImpostorDim.mV[1]; 4232 up *= mImpostorDim.mV[1];
4137 4233
4138 LLGLEnable test(GL_ALPHA_TEST); 4234 LLGLEnable test(GL_ALPHA_TEST);
4139 glAlphaFunc(GL_GREATER, 0.f); 4235 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
4140 4236
4141 gGL.color4f(1,1,1,1); 4237 gGL.color4f(1,1,1,1);
4142 gGL.color4ubv(color.mV); 4238 gGL.color4ubv(color.mV);
@@ -6637,6 +6733,89 @@ BOOL LLVOAvatar::isVisible()
6637} 6733}
6638 6734
6639 6735
6736// call periodically to keep isFullyLoaded up to date.
6737// returns true if the value has changed.
6738BOOL LLVOAvatar::updateIsFullyLoaded()
6739{
6740 // a "heuristic" to determine if we have enough avatar data to render
6741 // (to avoid rendering a "Ruth" - DEV-3168)
6742
6743 BOOL loading = FALSE;
6744
6745 // do we have a shape?
6746 if (visualParamWeightsAreDefault())
6747 {
6748 loading = TRUE;
6749 }
6750
6751 // are our texture settings still default?
6752 if ((getTEImage( TEX_HAIR )->getID() == IMG_DEFAULT))
6753 {
6754 loading = TRUE;
6755 }
6756
6757 // special case to keep nudity off orientation island -
6758 // this is fragilely dependent on the compositing system,
6759 // which gets available textures in the following order:
6760 //
6761 // 1) use the baked texture
6762 // 2) use the layerset
6763 // 3) use the previously baked texture
6764 //
6765 // on orientation island case (3) can show naked skin.
6766 // so we test for that here:
6767 //
6768 // if we were previously unloaded, and we don't have enough
6769 // texture info for our shirt/pants, stay unloaded:
6770 if (!mPreviousFullyLoaded)
6771 {
6772 if ((!isLocalTextureDataAvailable(mLowerBodyLayerSet)) &&
6773 (getTEImage(TEX_LOWER_BAKED)->getID() == IMG_DEFAULT_AVATAR))
6774 {
6775 loading = TRUE;
6776 }
6777
6778 if ((!isLocalTextureDataAvailable(mUpperBodyLayerSet)) &&
6779 (getTEImage(TEX_UPPER_BAKED)->getID() == IMG_DEFAULT_AVATAR))
6780 {
6781 loading = TRUE;
6782 }
6783 }
6784
6785
6786 // we wait a little bit before giving the all clear,
6787 // to let textures settle down
6788 const F32 PAUSE = 1.f;
6789 if (loading)
6790 mFullyLoadedTimer.reset();
6791
6792 mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE);
6793
6794
6795 // did our loading state "change" from last call?
6796 const S32 UPDATE_RATE = 30;
6797 BOOL changed =
6798 ((mFullyLoaded != mPreviousFullyLoaded) || // if the value is different from the previous call
6799 (!mFullyLoadedInitialized) || // if we've never been called before
6800 (mFullyLoadedFrameCounter % UPDATE_RATE == 0)); // every now and then issue a change
6801
6802 mPreviousFullyLoaded = mFullyLoaded;
6803 mFullyLoadedInitialized = TRUE;
6804 mFullyLoadedFrameCounter++;
6805
6806 return changed;
6807}
6808
6809
6810BOOL LLVOAvatar::isFullyLoaded()
6811{
6812 if (gSavedSettings.getBOOL("RenderUnloadedAvatar"))
6813 return TRUE;
6814 else
6815 return mFullyLoaded;
6816}
6817
6818
6640//----------------------------------------------------------------------------- 6819//-----------------------------------------------------------------------------
6641// findMotion() 6820// findMotion()
6642//----------------------------------------------------------------------------- 6821//-----------------------------------------------------------------------------
@@ -8289,12 +8468,12 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
8289} 8468}
8290 8469
8291// static 8470// static
8292void LLVOAvatar::getAnimLabels( LLDynamicArray<const char*>* labels ) 8471void LLVOAvatar::getAnimLabels( LLDynamicArray<std::string>* labels )
8293{ 8472{
8294 S32 i; 8473 S32 i;
8295 for( i = 0; i < gUserAnimStatesCount; i++ ) 8474 for( i = 0; i < gUserAnimStatesCount; i++ )
8296 { 8475 {
8297 labels->put( gUserAnimStates[i].mLabel ); 8476 labels->put( LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ) );
8298 } 8477 }
8299 8478
8300 // Special case to trigger away (AFK) state 8479 // Special case to trigger away (AFK) state
@@ -8302,13 +8481,13 @@ void LLVOAvatar::getAnimLabels( LLDynamicArray<const char*>* labels )
8302} 8481}
8303 8482
8304// static 8483// static
8305void LLVOAvatar::getAnimNames( LLDynamicArray<const char*>* names ) 8484void LLVOAvatar::getAnimNames( LLDynamicArray<std::string>* names )
8306{ 8485{
8307 S32 i; 8486 S32 i;
8308 8487
8309 for( i = 0; i < gUserAnimStatesCount; i++ ) 8488 for( i = 0; i < gUserAnimStatesCount; i++ )
8310 { 8489 {
8311 names->put( gUserAnimStates[i].mName ); 8490 names->put( std::string(gUserAnimStates[i].mName) );
8312 } 8491 }
8313 8492
8314 // Special case to trigger away (AFK) state 8493 // Special case to trigger away (AFK) state
@@ -9507,7 +9686,7 @@ BOOL LLVOAvatar::updateLOD()
9507 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) 9686 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
9508 { //LOD changed or new mesh created, allocate new vertex buffer if needed 9687 { //LOD changed or new mesh created, allocate new vertex buffer if needed
9509 updateMeshData(); 9688 updateMeshData();
9510 mDirtyMesh = FALSE; 9689 mDirtyMesh = FALSE;
9511 mNeedsSkin = TRUE; 9690 mNeedsSkin = TRUE;
9512 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); 9691 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
9513 } 9692 }
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index bc68cf4..1df8275 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -413,8 +413,8 @@ public:
413 //-------------------------------------------------------------------- 413 //--------------------------------------------------------------------
414 BOOL allocateCollisionVolumes( U32 num ); 414 BOOL allocateCollisionVolumes( U32 num );
415 void resetHUDAttachments(); 415 void resetHUDAttachments();
416 static void getAnimLabels( LLDynamicArray<const char*>* labels ); 416 static void getAnimLabels( LLDynamicArray<std::string>* labels );
417 static void getAnimNames( LLDynamicArray<const char*>* names ); 417 static void getAnimNames( LLDynamicArray<std::string>* names );
418 418
419 static void onCustomizeStart(); 419 static void onCustomizeStart();
420 static void onCustomizeEnd(); 420 static void onCustomizeEnd();
@@ -832,6 +832,17 @@ public:
832 BOOL mAppearanceAnimating; 832 BOOL mAppearanceAnimating;
833 833
834 //-------------------------------------------------------------------- 834 //--------------------------------------------------------------------
835 // we're morphing for lip sync
836 //--------------------------------------------------------------------
837 bool mLipSyncActive;
838
839 //--------------------------------------------------------------------
840 // cached pointers morphs for lip sync
841 //--------------------------------------------------------------------
842 LLVisualParam *mOohMorph;
843 LLVisualParam *mAahMorph;
844
845 //--------------------------------------------------------------------
835 // static members 846 // static members
836 //-------------------------------------------------------------------- 847 //--------------------------------------------------------------------
837 static S32 sMaxVisible; 848 static S32 sMaxVisible;
@@ -957,7 +968,21 @@ protected:
957 968
958 static LLVOAvatarSkeletonInfo* sSkeletonInfo; 969 static LLVOAvatarSkeletonInfo* sSkeletonInfo;
959 static LLVOAvatarInfo* sAvatarInfo; 970 static LLVOAvatarInfo* sAvatarInfo;
971
960 972
973 //--------------------------------------------------------------------
974 // Handling partially loaded avatars (Ruth)
975 //--------------------------------------------------------------------
976public:
977 BOOL isFullyLoaded();
978 BOOL updateIsFullyLoaded();
979private:
980 BOOL mFullyLoaded;
981 BOOL mPreviousFullyLoaded;
982 BOOL mFullyLoadedInitialized;
983 S32 mFullyLoadedFrameCounter;
984 LLFrameTimer mFullyLoadedTimer;
985
961protected: 986protected:
962 987
963 BOOL loadSkeletonNode(); 988 BOOL loadSkeletonNode();
diff --git a/linden/indra/newview/llvocache.cpp b/linden/indra/newview/llvocache.cpp
index 39ee63f..45b7782 100644
--- a/linden/indra/newview/llvocache.cpp
+++ b/linden/indra/newview/llvocache.cpp
@@ -63,7 +63,7 @@ LLVOCacheEntry::LLVOCacheEntry()
63} 63}
64 64
65 65
66static inline void checkedRead(FILE *fp, void *data, size_t nbytes) 66static inline void checkedRead(LLFILE *fp, void *data, size_t nbytes)
67{ 67{
68 if (fread(data, 1, nbytes, fp) != nbytes) 68 if (fread(data, 1, nbytes, fp) != nbytes)
69 { 69 {
@@ -72,7 +72,7 @@ static inline void checkedRead(FILE *fp, void *data, size_t nbytes)
72 } 72 }
73} 73}
74 74
75LLVOCacheEntry::LLVOCacheEntry(FILE *fp) 75LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp)
76{ 76{
77 S32 size; 77 S32 size;
78 checkedRead(fp, &mLocalID, sizeof(U32)); 78 checkedRead(fp, &mLocalID, sizeof(U32));
@@ -153,7 +153,7 @@ void LLVOCacheEntry::dump() const
153 << llendl; 153 << llendl;
154} 154}
155 155
156static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes) 156static inline void checkedWrite(LLFILE *fp, const void *data, size_t nbytes)
157{ 157{
158 if (fwrite(data, 1, nbytes, fp) != nbytes) 158 if (fwrite(data, 1, nbytes, fp) != nbytes)
159 { 159 {
@@ -161,7 +161,7 @@ static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes)
161 } 161 }
162} 162}
163 163
164void LLVOCacheEntry::writeToFile(FILE *fp) const 164void LLVOCacheEntry::writeToFile(LLFILE *fp) const
165{ 165{
166 checkedWrite(fp, &mLocalID, sizeof(U32)); 166 checkedWrite(fp, &mLocalID, sizeof(U32));
167 checkedWrite(fp, &mCRC, sizeof(U32)); 167 checkedWrite(fp, &mCRC, sizeof(U32));
diff --git a/linden/indra/newview/llvocache.h b/linden/indra/newview/llvocache.h
index c994d4b..2432f22 100644
--- a/linden/indra/newview/llvocache.h
+++ b/linden/indra/newview/llvocache.h
@@ -45,7 +45,7 @@ class LLVOCacheEntry : public LLDLinked<LLVOCacheEntry>
45{ 45{
46public: 46public:
47 LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp); 47 LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp);
48 LLVOCacheEntry(FILE *fp); 48 LLVOCacheEntry(LLFILE *fp);
49 LLVOCacheEntry(); 49 LLVOCacheEntry();
50 ~LLVOCacheEntry(); 50 ~LLVOCacheEntry();
51 51
@@ -55,7 +55,7 @@ public:
55 S32 getCRCChangeCount() const { return mCRCChangeCount; } 55 S32 getCRCChangeCount() const { return mCRCChangeCount; }
56 56
57 void dump() const; 57 void dump() const;
58 void writeToFile(FILE *fp) const; 58 void writeToFile(LLFILE *fp) const;
59 void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp); 59 void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp);
60 LLDataPackerBinaryBuffer *getDP(U32 crc); 60 LLDataPackerBinaryBuffer *getDP(U32 crc);
61 void recordHit(); 61 void recordHit();
diff --git a/linden/indra/newview/llvograss.h b/linden/indra/newview/llvograss.h
index f5b0c5d..679f5dc 100644
--- a/linden/indra/newview/llvograss.h
+++ b/linden/indra/newview/llvograss.h
@@ -56,8 +56,8 @@ public:
56 U32 block_num, 56 U32 block_num,
57 const EObjectUpdateType update_type, 57 const EObjectUpdateType update_type,
58 LLDataPacker *dp); 58 LLDataPacker *dp);
59 static void import(FILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos); 59 static void import(LLFILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos);
60 /*virtual*/ void exportFile(FILE *file, const LLVector3 &position); 60 /*virtual*/ void exportFile(LLFILE *file, const LLVector3 &position);
61 61
62 void updateDrawable(BOOL force_damped); 62 void updateDrawable(BOOL force_damped);
63 63
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 738eeac..7f63aca 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -268,7 +268,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
268 } 268 }
269 else 269 else
270 { 270 {
271 llinfos << "parsing: " << mInput.substr(start, delim - start) << llendl; 271 LL_INFOS("Voice") << "parsing: " << mInput.substr(start, delim - start) << LL_ENDL;
272 } 272 }
273 } 273 }
274 274
@@ -287,12 +287,12 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
287 if(start != 0) 287 if(start != 0)
288 mInput = mInput.substr(start); 288 mInput = mInput.substr(start);
289 289
290// llinfos << "at end, mInput is: " << mInput << llendl; 290 LL_DEBUGS("Voice") << "at end, mInput is: " << mInput << LL_ENDL;
291 291
292 if(!gVoiceClient->mConnected) 292 if(!gVoiceClient->mConnected)
293 { 293 {
294 // If voice has been disabled, we just want to close the socket. This does so. 294 // If voice has been disabled, we just want to close the socket. This does so.
295 llinfos << "returning STATUS_STOP" << llendl; 295 LL_INFOS("Voice") << "returning STATUS_STOP" << LL_ENDL;
296 return STATUS_STOP; 296 return STATUS_STOP;
297 } 297 }
298 298
@@ -366,17 +366,17 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr)
366 } 366 }
367 } 367 }
368 } 368 }
369 //llinfos << tag << " (" << responseDepth << ")" << llendl; 369 LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL;
370 } 370 }
371 else 371 else
372 { 372 {
373 if (ignoringTags) 373 if (ignoringTags)
374 { 374 {
375 //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; 375 LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
376 } 376 }
377 else 377 else
378 { 378 {
379 //llinfos << tag << " (" << responseDepth << ")" << llendl; 379 LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL;
380 380
381 // Ignore the InputXml stuff so we don't get confused 381 // Ignore the InputXml stuff so we don't get confused
382 if (strcmp("InputXml", tag) == 0) 382 if (strcmp("InputXml", tag) == 0)
@@ -385,7 +385,7 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr)
385 ignoreDepth = responseDepth; 385 ignoreDepth = responseDepth;
386 accumulateText = false; 386 accumulateText = false;
387 387
388 //llinfos << "starting ignore, ignoreDepth is " << ignoreDepth << llendl; 388 LL_DEBUGS("Voice") << "starting ignore, ignoreDepth is " << ignoreDepth << LL_ENDL;
389 } 389 }
390 else if (strcmp("CaptureDevices", tag) == 0) 390 else if (strcmp("CaptureDevices", tag) == 0)
391 { 391 {
@@ -413,18 +413,18 @@ void LLVivoxProtocolParser::EndTag(const char *tag)
413 { 413 {
414 if (ignoreDepth == responseDepth) 414 if (ignoreDepth == responseDepth)
415 { 415 {
416 //llinfos << "end of ignore" << llendl; 416 LL_DEBUGS("Voice") << "end of ignore" << LL_ENDL;
417 ignoringTags = false; 417 ignoringTags = false;
418 } 418 }
419 else 419 else
420 { 420 {
421 //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; 421 LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
422 } 422 }
423 } 423 }
424 424
425 if (!ignoringTags) 425 if (!ignoringTags)
426 { 426 {
427 //llinfos << "processing tag " << tag << " (depth = " << responseDepth << ")" << llendl; 427 LL_DEBUGS("Voice") << "processing tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
428 428
429 // Closing a tag. Finalize the text we've accumulated and reset 429 // Closing a tag. Finalize the text we've accumulated and reset
430 if (strcmp("ReturnCode", tag) == 0) 430 if (strcmp("ReturnCode", tag) == 0)
@@ -531,7 +531,7 @@ void LLVivoxProtocolParser::CharData(const char *buffer, int length)
531 531
532void LLVivoxProtocolParser::processResponse(std::string tag) 532void LLVivoxProtocolParser::processResponse(std::string tag)
533{ 533{
534 //llinfos << tag << llendl; 534 LL_DEBUGS("Voice") << tag << LL_ENDL;
535 535
536 if (isEvent) 536 if (isEvent)
537 { 537 {
@@ -700,9 +700,9 @@ private:
700 700
701void LLVoiceClientCapResponder::error(U32 status, const std::string& reason) 701void LLVoiceClientCapResponder::error(U32 status, const std::string& reason)
702{ 702{
703 llwarns << "LLVoiceClientCapResponder::error(" 703 LL_WARNS("Voice") << "LLVoiceClientCapResponder::error("
704 << status << ": " << reason << ")" 704 << status << ": " << reason << ")"
705 << llendl; 705 << LL_ENDL;
706} 706}
707 707
708void LLVoiceClientCapResponder::result(const LLSD& content) 708void LLVoiceClientCapResponder::result(const LLSD& content)
@@ -710,8 +710,8 @@ void LLVoiceClientCapResponder::result(const LLSD& content)
710 LLSD::map_const_iterator iter; 710 LLSD::map_const_iterator iter;
711 for(iter = content.beginMap(); iter != content.endMap(); ++iter) 711 for(iter = content.beginMap(); iter != content.endMap(); ++iter)
712 { 712 {
713 llinfos << "LLVoiceClientCapResponder::result got " 713 LL_DEBUGS("Voice") << "LLVoiceClientCapResponder::result got "
714 << iter->first << llendl; 714 << iter->first << LL_ENDL;
715 } 715 }
716 716
717 if ( content.has("voice_credentials") ) 717 if ( content.has("voice_credentials") )
@@ -833,6 +833,7 @@ LLVoiceClient::LLVoiceClient()
833 setCaptureDevice(captureDevice); 833 setCaptureDevice(captureDevice);
834 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 834 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
835 setRenderDevice(renderDevice); 835 setRenderDevice(renderDevice);
836 mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
836 837
837 mTuningMode = false; 838 mTuningMode = false;
838 mTuningEnergy = 0.0f; 839 mTuningEnergy = 0.0f;
@@ -917,7 +918,7 @@ bool LLVoiceClient::writeString(const std::string &str)
917 apr_size_t size = (apr_size_t)str.size(); 918 apr_size_t size = (apr_size_t)str.size();
918 apr_size_t written = size; 919 apr_size_t written = size;
919 920
920// llinfos << "sending: " << str << llendl; 921 LL_DEBUGS("Voice") << "sending: " << str << LL_ENDL;
921 922
922 // MBW -- XXX -- check return code - sockets will fail (broken, etc.) 923 // MBW -- XXX -- check return code - sockets will fail (broken, etc.)
923 err = apr_socket_send( 924 err = apr_socket_send(
@@ -940,7 +941,7 @@ bool LLVoiceClient::writeString(const std::string &str)
940 { 941 {
941 // Assume any socket error means something bad. For now, just close the socket. 942 // Assume any socket error means something bad. For now, just close the socket.
942 char buf[MAX_STRING]; 943 char buf[MAX_STRING];
943 llwarns << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << llendl; 944 LL_WARNS("Voice") << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << LL_ENDL;
944 daemonDied(); 945 daemonDied();
945 } 946 }
946 } 947 }
@@ -964,7 +965,7 @@ void LLVoiceClient::connectorCreate()
964 965
965 if(savedLogLevel != "-1") 966 if(savedLogLevel != "-1")
966 { 967 {
967 llinfos << "creating connector with logging enabled" << llendl; 968 LL_DEBUGS("Voice") << "creating connector with logging enabled" << LL_ENDL;
968 loglevel = "10"; 969 loglevel = "10";
969 logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); 970 logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
970 } 971 }
@@ -1013,15 +1014,9 @@ void LLVoiceClient::userAuthorized(const std::string& firstName, const std::stri
1013 mAccountDisplayName += " "; 1014 mAccountDisplayName += " ";
1014 mAccountDisplayName += lastName; 1015 mAccountDisplayName += lastName;
1015 1016
1016 llinfos << "name \"" << mAccountDisplayName << "\" , ID " << agentID << llendl; 1017 LL_INFOS("Voice") << "name \"" << mAccountDisplayName << "\" , ID " << agentID << LL_ENDL;
1017 1018
1018 std::string gridname = gGridName; 1019 sConnectingToAgni = LLViewerLogin::getInstance()->isInProductionGrid();
1019 LLString::toLower(gridname);
1020 if((gGridChoice == GRID_INFO_AGNI) ||
1021 ((gGridChoice == GRID_INFO_OTHER) && (gridname.find("agni") != std::string::npos)))
1022 {
1023 sConnectingToAgni = true;
1024 }
1025 1020
1026 // MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert. 1021 // MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert.
1027 if(sConnectingToAgni) 1022 if(sConnectingToAgni)
@@ -1064,13 +1059,13 @@ void LLVoiceClient::login(
1064 if((getState() >= stateLoggingIn) && (getState() < stateLoggedOut)) 1059 if((getState() >= stateLoggingIn) && (getState() < stateLoggedOut))
1065 { 1060 {
1066 // Already logged in. This is an internal error. 1061 // Already logged in. This is an internal error.
1067 llerrs << "called from wrong state." << llendl; 1062 LL_ERRS("Voice") << "Can't login again. Called from wrong state." << LL_ENDL;
1068 } 1063 }
1069 else if ( accountName != mAccountName ) 1064 else if ( accountName != mAccountName )
1070 { 1065 {
1071 //TODO: error? 1066 //TODO: error?
1072 llinfos << "Wrong account name! " << accountName 1067 LL_WARNS("Voice") << "Wrong account name! " << accountName
1073 << " instead of " << mAccountName << llendl; 1068 << " instead of " << mAccountName << LL_ENDL;
1074 } 1069 }
1075 else 1070 else
1076 { 1071 {
@@ -1166,7 +1161,7 @@ const char *LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv
1166 1161
1167void LLVoiceClient::setState(state inState) 1162void LLVoiceClient::setState(state inState)
1168{ 1163{
1169 llinfos << "entering state " << state2string(inState) << llendl; 1164 LL_DEBUGS("Voice") << "entering state " << state2string(inState) << LL_ENDL;
1170 1165
1171 mState = inState; 1166 mState = inState;
1172} 1167}
@@ -1187,7 +1182,7 @@ void LLVoiceClient::stateMachine()
1187 if(!mConnected) 1182 if(!mConnected)
1188 { 1183 {
1189 // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill. 1184 // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill.
1190 llinfos << "Disabling voice before connection to daemon, terminating." << llendl; 1185 LL_INFOS("Voice") << "Disabling voice before connection to daemon, terminating." << LL_ENDL;
1191 killGateway(); 1186 killGateway();
1192 } 1187 }
1193 1188
@@ -1212,7 +1207,7 @@ void LLVoiceClient::stateMachine()
1212 std::string regionName = region->getName(); 1207 std::string regionName = region->getName();
1213 std::string capURI = region->getCapability("ParcelVoiceInfoRequest"); 1208 std::string capURI = region->getCapability("ParcelVoiceInfoRequest");
1214 1209
1215// llinfos << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << llendl; 1210 LL_DEBUGS("Voice") << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << LL_ENDL;
1216 1211
1217 // The region name starts out empty and gets filled in later. 1212 // The region name starts out empty and gets filled in later.
1218 // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes. 1213 // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
@@ -1276,7 +1271,7 @@ void LLVoiceClient::stateMachine()
1276 args += " -ll "; 1271 args += " -ll ";
1277 args += loglevel; 1272 args += loglevel;
1278 1273
1279// llinfos << "Args for SLVoice: " << args << llendl; 1274 LL_DEBUGS("Voice") << "Args for SLVoice: " << args << LL_ENDL;
1280 1275
1281#if LL_WINDOWS 1276#if LL_WINDOWS
1282 PROCESS_INFORMATION pinfo; 1277 PROCESS_INFORMATION pinfo;
@@ -1348,7 +1343,7 @@ void LLVoiceClient::stateMachine()
1348 } 1343 }
1349 else 1344 else
1350 { 1345 {
1351 llinfos << exe_path << "not found." << llendl 1346 LL_INFOS("Voice") << exe_path << "not found." << LL_ENDL
1352 } 1347 }
1353 } 1348 }
1354 else 1349 else
@@ -1375,7 +1370,7 @@ void LLVoiceClient::stateMachine()
1375 break; 1370 break;
1376 1371
1377 case stateDaemonLaunched: 1372 case stateDaemonLaunched:
1378// llinfos << "Connecting to vivox daemon" << llendl; 1373 LL_DEBUGS("Voice") << "Connecting to vivox daemon" << LL_ENDL;
1379 if(mUpdateTimer.hasExpired()) 1374 if(mUpdateTimer.hasExpired())
1380 { 1375 {
1381 mUpdateTimer.setTimerExpirySec(CONNECT_THROTTLE_SECONDS); 1376 mUpdateTimer.setTimerExpirySec(CONNECT_THROTTLE_SECONDS);
@@ -1532,7 +1527,7 @@ void LLVoiceClient::stateMachine()
1532 1527
1533 if(mTuningMicVolumeDirty) 1528 if(mTuningMicVolumeDirty)
1534 { 1529 {
1535 llinfos << "setting tuning mic level to " << mTuningMicVolume << llendl; 1530 LL_INFOS("Voice") << "setting tuning mic level to " << mTuningMicVolume << LL_ENDL;
1536 stream 1531 stream
1537 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetMicLevel.1\">" 1532 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetMicLevel.1\">"
1538 << "<Level>" << mTuningMicVolume << "</Level>" 1533 << "<Level>" << mTuningMicVolume << "</Level>"
@@ -1583,12 +1578,12 @@ void LLVoiceClient::stateMachine()
1583 1578
1584 if(mLoginRetryCount > MAX_LOGIN_RETRIES) 1579 if(mLoginRetryCount > MAX_LOGIN_RETRIES)
1585 { 1580 {
1586 llinfos << "too many login retries, giving up." << llendl; 1581 LL_WARNS("Voice") << "too many login retries, giving up." << LL_ENDL;
1587 setState(stateLoginFailed); 1582 setState(stateLoginFailed);
1588 } 1583 }
1589 else 1584 else
1590 { 1585 {
1591 llinfos << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << llendl; 1586 LL_INFOS("Voice") << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << LL_ENDL;
1592 mUpdateTimer.start(); 1587 mUpdateTimer.start();
1593 mUpdateTimer.setTimerExpirySec(LOGIN_RETRY_SECONDS); 1588 mUpdateTimer.setTimerExpirySec(LOGIN_RETRY_SECONDS);
1594 setState(stateLoginRetryWait); 1589 setState(stateLoginRetryWait);
@@ -1848,7 +1843,7 @@ void LLVoiceClient::stateMachine()
1848 1843
1849 case stateJoinSessionFailed: 1844 case stateJoinSessionFailed:
1850 // Transition to error state. Send out any notifications here. 1845 // Transition to error state. Send out any notifications here.
1851 llwarns << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << llendl; 1846 LL_WARNS("Voice") << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << LL_ENDL;
1852 notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN); 1847 notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN);
1853 setState(stateJoinSessionFailedWaiting); 1848 setState(stateJoinSessionFailedWaiting);
1854 break; 1849 break;
@@ -1868,8 +1863,7 @@ void LLVoiceClient::stateMachine()
1868 1863
1869 case stateMicTuningNoLogin: 1864 case stateMicTuningNoLogin:
1870 // *TODO: Implement me. 1865 // *TODO: Implement me.
1871 llwarns << "stateMicTuningNoLogin not handled" 1866 LL_WARNS("Voice") << "stateMicTuningNoLogin not handled" << LL_ENDL;
1872 << llendl;
1873 break; 1867 break;
1874 } 1868 }
1875 1869
@@ -1938,7 +1932,7 @@ void LLVoiceClient::channelGetListSendMessage()
1938 1932
1939void LLVoiceClient::sessionCreateSendMessage() 1933void LLVoiceClient::sessionCreateSendMessage()
1940{ 1934{
1941 llinfos << "requesting join: " << mNextSessionURI << llendl; 1935 LL_DEBUGS("Voice") << "requesting join: " << mNextSessionURI << LL_ENDL;
1942 1936
1943 mSessionURI = mNextSessionURI; 1937 mSessionURI = mNextSessionURI;
1944 mNonSpatialChannel = !mNextSessionSpatial; 1938 mNonSpatialChannel = !mNextSessionSpatial;
@@ -1978,7 +1972,7 @@ void LLVoiceClient::sessionCreateSendMessage()
1978 1972
1979void LLVoiceClient::sessionConnectSendMessage() 1973void LLVoiceClient::sessionConnectSendMessage()
1980{ 1974{
1981 llinfos << "connecting to session handle: " << mNextSessionHandle << llendl; 1975 LL_DEBUGS("Voice") << "connecting to session handle: " << mNextSessionHandle << LL_ENDL;
1982 1976
1983 mSessionHandle = mNextSessionHandle; 1977 mSessionHandle = mNextSessionHandle;
1984 mSessionURI = mNextP2PSessionURI; 1978 mSessionURI = mNextP2PSessionURI;
@@ -2007,7 +2001,7 @@ void LLVoiceClient::sessionTerminate()
2007 2001
2008void LLVoiceClient::sessionTerminateSendMessage() 2002void LLVoiceClient::sessionTerminateSendMessage()
2009{ 2003{
2010 llinfos << "leaving session: " << mSessionURI << llendl; 2004 LL_DEBUGS("Voice") << "leaving session: " << mSessionURI << LL_ENDL;
2011 2005
2012 switch(getState()) 2006 switch(getState())
2013 { 2007 {
@@ -2026,7 +2020,7 @@ void LLVoiceClient::sessionTerminateSendMessage()
2026 } 2020 }
2027 else 2021 else
2028 { 2022 {
2029 llwarns << "called with no session handle" << llendl; 2023 LL_WARNS("Voice") << "called with no session handle" << LL_ENDL;
2030 setState(stateSessionTerminated); 2024 setState(stateSessionTerminated);
2031 } 2025 }
2032 break; 2026 break;
@@ -2036,14 +2030,14 @@ void LLVoiceClient::sessionTerminateSendMessage()
2036 break; 2030 break;
2037 2031
2038 default: 2032 default:
2039 llwarns << "called from unknown state" << llendl; 2033 LL_WARNS("Voice") << "called from unknown state" << LL_ENDL;
2040 break; 2034 break;
2041 } 2035 }
2042} 2036}
2043 2037
2044void LLVoiceClient::sessionTerminateByHandle(std::string &sessionHandle) 2038void LLVoiceClient::sessionTerminateByHandle(std::string &sessionHandle)
2045{ 2039{
2046 llinfos << "Sending Session.Terminate with handle " << sessionHandle << llendl; 2040 LL_DEBUGS("Voice") << "Sending Session.Terminate with handle " << sessionHandle << LL_ENDL;
2047 2041
2048 std::ostringstream stream; 2042 std::ostringstream stream;
2049 stream 2043 stream
@@ -2078,14 +2072,14 @@ void LLVoiceClient::getRenderDevicesSendMessage()
2078void LLVoiceClient::clearCaptureDevices() 2072void LLVoiceClient::clearCaptureDevices()
2079{ 2073{
2080 // MBW -- XXX -- do something here 2074 // MBW -- XXX -- do something here
2081 llinfos << "called" << llendl; 2075 LL_DEBUGS("Voice") << "called" << LL_ENDL;
2082 mCaptureDevices.clear(); 2076 mCaptureDevices.clear();
2083} 2077}
2084 2078
2085void LLVoiceClient::addCaptureDevice(const std::string& name) 2079void LLVoiceClient::addCaptureDevice(const std::string& name)
2086{ 2080{
2087 // MBW -- XXX -- do something here 2081 // MBW -- XXX -- do something here
2088 llinfos << name << llendl; 2082 LL_DEBUGS("Voice") << name << LL_ENDL;
2089 2083
2090 mCaptureDevices.push_back(name); 2084 mCaptureDevices.push_back(name);
2091} 2085}
@@ -2118,14 +2112,14 @@ void LLVoiceClient::setCaptureDevice(const std::string& name)
2118void LLVoiceClient::clearRenderDevices() 2112void LLVoiceClient::clearRenderDevices()
2119{ 2113{
2120 // MBW -- XXX -- do something here 2114 // MBW -- XXX -- do something here
2121 llinfos << "called" << llendl; 2115 LL_DEBUGS("Voice") << "called" << LL_ENDL;
2122 mRenderDevices.clear(); 2116 mRenderDevices.clear();
2123} 2117}
2124 2118
2125void LLVoiceClient::addRenderDevice(const std::string& name) 2119void LLVoiceClient::addRenderDevice(const std::string& name)
2126{ 2120{
2127 // MBW -- XXX -- do something here 2121 // MBW -- XXX -- do something here
2128 llinfos << name << llendl; 2122 LL_DEBUGS("Voice") << name << LL_ENDL;
2129 mRenderDevices.push_back(name); 2123 mRenderDevices.push_back(name);
2130} 2124}
2131 2125
@@ -2209,7 +2203,7 @@ void LLVoiceClient::tuningRenderStopSendMessage()
2209 2203
2210void LLVoiceClient::tuningCaptureStartSendMessage(int duration) 2204void LLVoiceClient::tuningCaptureStartSendMessage(int duration)
2211{ 2205{
2212 llinfos << "sending CaptureAudioStart" << llendl; 2206 LL_DEBUGS("Voice") << "sending CaptureAudioStart" << LL_ENDL;
2213 2207
2214 std::ostringstream stream; 2208 std::ostringstream stream;
2215 stream 2209 stream
@@ -2222,7 +2216,7 @@ void LLVoiceClient::tuningCaptureStartSendMessage(int duration)
2222 2216
2223void LLVoiceClient::tuningCaptureStopSendMessage() 2217void LLVoiceClient::tuningCaptureStopSendMessage()
2224{ 2218{
2225 llinfos << "sending CaptureAudioStop" << llendl; 2219 LL_DEBUGS("Voice") << "sending CaptureAudioStop" << LL_ENDL;
2226 2220
2227 std::ostringstream stream; 2221 std::ostringstream stream;
2228 stream 2222 stream
@@ -2295,7 +2289,7 @@ void LLVoiceClient::refreshDeviceLists(bool clearCurrentList)
2295void LLVoiceClient::daemonDied() 2289void LLVoiceClient::daemonDied()
2296{ 2290{
2297 // The daemon died, so the connection is gone. Reset everything and start over. 2291 // The daemon died, so the connection is gone. Reset everything and start over.
2298 llwarns << "Connection to vivox daemon lost. Resetting state."<< llendl; 2292 LL_WARNS("Voice") << "Connection to vivox daemon lost. Resetting state."<< LL_ENDL;
2299 2293
2300 closeSocket(); 2294 closeSocket();
2301 removeAllParticipants(); 2295 removeAllParticipants();
@@ -2331,7 +2325,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2331 u = mAvatarRot.getUpRow(); 2325 u = mAvatarRot.getUpRow();
2332 a = mAvatarRot.getFwdRow(); 2326 a = mAvatarRot.getFwdRow();
2333 2327
2334// llinfos << "Sending speaker position " << mSpeakerPosition << llendl; 2328 LL_DEBUGS("Voice") << "Sending speaker position " << mAvatarPosition << LL_ENDL;
2335 2329
2336 stream 2330 stream
2337 << "<Position>" 2331 << "<Position>"
@@ -2394,7 +2388,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2394 u = earRot.getUpRow(); 2388 u = earRot.getUpRow();
2395 a = earRot.getFwdRow(); 2389 a = earRot.getFwdRow();
2396 2390
2397// llinfos << "Sending listener position " << mListenerPosition << llendl; 2391 LL_DEBUGS("Voice") << "Sending listener position " << earPosition << LL_ENDL;
2398 2392
2399 stream 2393 stream
2400 << "<Position>" 2394 << "<Position>"
@@ -2434,7 +2428,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2434 // NOTE that the state of "PTT" is the inverse of "local mute". 2428 // NOTE that the state of "PTT" is the inverse of "local mute".
2435 // (i.e. when PTT is true, we send a mute command with "false", and vice versa) 2429 // (i.e. when PTT is true, we send a mute command with "false", and vice versa)
2436 2430
2437// llinfos << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << llendl; 2431 LL_DEBUGS("Voice") << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << LL_ENDL;
2438 2432
2439 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalMic.1\">" 2433 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalMic.1\">"
2440 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2434 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2455,7 +2449,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2455 { 2449 {
2456 int volume = p->mOnMuteList?0:p->mUserVolume; 2450 int volume = p->mOnMuteList?0:p->mUserVolume;
2457 2451
2458 llinfos << "Setting volume for avatar " << p->mAvatarID << " to " << volume << llendl; 2452 LL_INFOS("Voice") << "Setting volume for avatar " << p->mAvatarID << " to " << volume << LL_ENDL;
2459 2453
2460 // Send a mute/unumte command for the user (actually "volume for me"). 2454 // Send a mute/unumte command for the user (actually "volume for me").
2461 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantVolumeForMe.1\">" 2455 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantVolumeForMe.1\">"
@@ -2472,7 +2466,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2472 if(mSpeakerMuteDirty) 2466 if(mSpeakerMuteDirty)
2473 { 2467 {
2474 const char *muteval = ((mSpeakerVolume == -100)?"true":"false"); 2468 const char *muteval = ((mSpeakerVolume == -100)?"true":"false");
2475 llinfos << "Setting speaker mute to " << muteval << llendl; 2469 LL_INFOS("Voice") << "Setting speaker mute to " << muteval << LL_ENDL;
2476 2470
2477 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalSpeaker.1\">" 2471 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalSpeaker.1\">"
2478 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2472 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2482,7 +2476,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2482 2476
2483 if(mSpeakerVolumeDirty) 2477 if(mSpeakerVolumeDirty)
2484 { 2478 {
2485 llinfos << "Setting speaker volume to " << mSpeakerVolume << llendl; 2479 LL_INFOS("Voice") << "Setting speaker volume to " << mSpeakerVolume << LL_ENDL;
2486 2480
2487 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalSpeakerVolume.1\">" 2481 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalSpeakerVolume.1\">"
2488 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2482 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2492,7 +2486,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2492 2486
2493 if(mMicVolumeDirty) 2487 if(mMicVolumeDirty)
2494 { 2488 {
2495 llinfos << "Setting mic volume to " << mMicVolume << llendl; 2489 LL_INFOS("Voice") << "Setting mic volume to " << mMicVolume << LL_ENDL;
2496 2490
2497 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalMicVolume.1\">" 2491 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalMicVolume.1\">"
2498 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2492 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2529,7 +2523,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2529 2523
2530void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream) 2524void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream)
2531{ 2525{
2532 llinfos << "Setting input device = \"" << mCaptureDevice << "\"" << llendl; 2526 LL_DEBUGS("Voice") << "Setting input device = \"" << mCaptureDevice << "\"" << LL_ENDL;
2533 2527
2534 stream 2528 stream
2535 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetCaptureDevice.1\">" 2529 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetCaptureDevice.1\">"
@@ -2540,7 +2534,7 @@ void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream)
2540 2534
2541void LLVoiceClient::buildSetRenderDevice(std::ostringstream &stream) 2535void LLVoiceClient::buildSetRenderDevice(std::ostringstream &stream)
2542{ 2536{
2543 llinfos << "Setting output device = \"" << mRenderDevice << "\"" << llendl; 2537 LL_DEBUGS("Voice") << "Setting output device = \"" << mRenderDevice << "\"" << LL_ENDL;
2544 2538
2545 stream 2539 stream
2546 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetRenderDevice.1\">" 2540 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetRenderDevice.1\">"
@@ -2556,7 +2550,7 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS
2556{ 2550{
2557 if(statusCode != 0) 2551 if(statusCode != 0)
2558 { 2552 {
2559 llwarns << "Connector.Create response failure: " << statusString << llendl; 2553 LL_WARNS("Voice") << "Connector.Create response failure: " << statusString << LL_ENDL;
2560 setState(stateConnectorFailed); 2554 setState(stateConnectorFailed);
2561 } 2555 }
2562 else 2556 else
@@ -2572,19 +2566,19 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS
2572 2566
2573void LLVoiceClient::loginResponse(int statusCode, std::string &statusString, std::string &accountHandle) 2567void LLVoiceClient::loginResponse(int statusCode, std::string &statusString, std::string &accountHandle)
2574{ 2568{
2575 llinfos << "Account.Login response (" << statusCode << "): " << statusString << llendl; 2569 LL_DEBUGS("Voice") << "Account.Login response (" << statusCode << "): " << statusString << LL_ENDL;
2576 2570
2577 // Status code of 20200 means "bad password". We may want to special-case that at some point. 2571 // Status code of 20200 means "bad password". We may want to special-case that at some point.
2578 2572
2579 if ( statusCode == 401 ) 2573 if ( statusCode == 401 )
2580 { 2574 {
2581 // Login failure which is probably caused by the delay after a user's password being updated. 2575 // Login failure which is probably caused by the delay after a user's password being updated.
2582 llinfos << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; 2576 LL_INFOS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL;
2583 setState(stateLoginRetry); 2577 setState(stateLoginRetry);
2584 } 2578 }
2585 else if(statusCode != 0) 2579 else if(statusCode != 0)
2586 { 2580 {
2587 llwarns << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; 2581 LL_WARNS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL;
2588 setState(stateLoginFailed); 2582 setState(stateLoginFailed);
2589 } 2583 }
2590 else 2584 else
@@ -2603,7 +2597,7 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt
2603{ 2597{
2604 if(statusCode != 0) 2598 if(statusCode != 0)
2605 { 2599 {
2606 llwarns << "Account.ChannelGetList response failure: " << statusString << llendl; 2600 LL_WARNS("Voice") << "Account.ChannelGetList response failure: " << statusString << LL_ENDL;
2607 switchChannel(); 2601 switchChannel();
2608 } 2602 }
2609 else 2603 else
@@ -2613,12 +2607,12 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt
2613 if(uri.empty()) 2607 if(uri.empty())
2614 { 2608 {
2615 // Lookup failed, can't join a channel for this area. 2609 // Lookup failed, can't join a channel for this area.
2616 llinfos << "failed to map channel name: " << mChannelName << llendl; 2610 LL_INFOS("Voice") << "failed to map channel name: " << mChannelName << LL_ENDL;
2617 } 2611 }
2618 else 2612 else
2619 { 2613 {
2620 // We have a sip URL for this area. 2614 // We have a sip URL for this area.
2621 llinfos << "mapped channel " << mChannelName << " to URI "<< uri << llendl; 2615 LL_INFOS("Voice") << "mapped channel " << mChannelName << " to URI "<< uri << LL_ENDL;
2622 } 2616 }
2623 2617
2624 // switchChannel with an empty uri string will do the right thing (leave channel and not rejoin) 2618 // switchChannel with an empty uri string will do the right thing (leave channel and not rejoin)
@@ -2630,13 +2624,13 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2630{ 2624{
2631 if(statusCode != 0) 2625 if(statusCode != 0)
2632 { 2626 {
2633 llwarns << "Session.Create response failure (" << statusCode << "): " << statusString << llendl; 2627 LL_WARNS("Voice") << "Session.Create response failure (" << statusCode << "): " << statusString << LL_ENDL;
2634// if(statusCode == 1015) 2628// if(statusCode == 1015)
2635// { 2629// {
2636// if(getState() == stateJoiningSession) 2630// if(getState() == stateJoiningSession)
2637// { 2631// {
2638// // this happened during a real join. Going to sessionTerminated should cause a retry in appropriate cases. 2632// // this happened during a real join. Going to sessionTerminated should cause a retry in appropriate cases.
2639// llwarns << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< llendl; 2633// LL_WARNS("Voice") << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< LL_ENDL;
2640// if(!sessionHandle.empty()) 2634// if(!sessionHandle.empty())
2641// { 2635// {
2642// // This session is bad. Terminate it. 2636// // This session is bad. Terminate it.
@@ -2658,7 +2652,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2658// else 2652// else
2659// { 2653// {
2660// // We didn't think we were in the middle of a join. Don't change state. 2654// // We didn't think we were in the middle of a join. Don't change state.
2661// llwarns << "Not in stateJoiningSession, ignoring" << llendl; 2655// LL_WARNS("Voice") << "Not in stateJoiningSession, ignoring" << LL_ENDL;
2662// } 2656// }
2663// } 2657// }
2664// else 2658// else
@@ -2670,7 +2664,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2670 } 2664 }
2671 else 2665 else
2672 { 2666 {
2673 llinfos << "Session.Create response received (success), session handle is " << sessionHandle << llendl; 2667 LL_DEBUGS("Voice") << "Session.Create response received (success), session handle is " << sessionHandle << LL_ENDL;
2674 if(getState() == stateJoiningSession) 2668 if(getState() == stateJoiningSession)
2675 { 2669 {
2676 // This is also grabbed in the SessionStateChangeEvent handler, but it might be useful to have it early... 2670 // This is also grabbed in the SessionStateChangeEvent handler, but it might be useful to have it early...
@@ -2688,10 +2682,10 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt
2688{ 2682{
2689 if(statusCode != 0) 2683 if(statusCode != 0)
2690 { 2684 {
2691 llwarns << "Session.Connect response failure (" << statusCode << "): " << statusString << llendl; 2685 LL_WARNS("Voice") << "Session.Connect response failure (" << statusCode << "): " << statusString << LL_ENDL;
2692// if(statusCode == 1015) 2686// if(statusCode == 1015)
2693// { 2687// {
2694// llwarns << "terminating existing session" << llendl; 2688// LL_WARNS("Voice") << "terminating existing session" << LL_ENDL;
2695// sessionTerminate(); 2689// sessionTerminate();
2696// } 2690// }
2697// else 2691// else
@@ -2703,7 +2697,7 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt
2703 } 2697 }
2704 else 2698 else
2705 { 2699 {
2706 llinfos << "Session.Connect response received (success)" << llendl; 2700 LL_DEBUGS("Voice") << "Session.Connect response received (success)" << LL_ENDL;
2707 } 2701 }
2708} 2702}
2709 2703
@@ -2711,7 +2705,7 @@ void LLVoiceClient::sessionTerminateResponse(int statusCode, std::string &status
2711{ 2705{
2712 if(statusCode != 0) 2706 if(statusCode != 0)
2713 { 2707 {
2714 llwarns << "Session.Terminate response failure: (" << statusCode << "): " << statusString << llendl; 2708 LL_WARNS("Voice") << "Session.Terminate response failure: (" << statusCode << "): " << statusString << LL_ENDL;
2715 if(getState() == stateLeavingSession) 2709 if(getState() == stateLeavingSession)
2716 { 2710 {
2717 // This is probably "(404): Server reporting Failure. Not a member of this conference." 2711 // This is probably "(404): Server reporting Failure. Not a member of this conference."
@@ -2726,7 +2720,7 @@ void LLVoiceClient::logoutResponse(int statusCode, std::string &statusString)
2726{ 2720{
2727 if(statusCode != 0) 2721 if(statusCode != 0)
2728 { 2722 {
2729 llwarns << "Account.Logout response failure: " << statusString << llendl; 2723 LL_WARNS("Voice") << "Account.Logout response failure: " << statusString << LL_ENDL;
2730 // MBW -- XXX -- Should this ever fail? do we care if it does? 2724 // MBW -- XXX -- Should this ever fail? do we care if it does?
2731 } 2725 }
2732 2726
@@ -2740,7 +2734,7 @@ void LLVoiceClient::connectorShutdownResponse(int statusCode, std::string &statu
2740{ 2734{
2741 if(statusCode != 0) 2735 if(statusCode != 0)
2742 { 2736 {
2743 llwarns << "Connector.InitiateShutdown response failure: " << statusString << llendl; 2737 LL_WARNS("Voice") << "Connector.InitiateShutdown response failure: " << statusString << LL_ENDL;
2744 // MBW -- XXX -- Should this ever fail? do we care if it does? 2738 // MBW -- XXX -- Should this ever fail? do we care if it does?
2745 } 2739 }
2746 2740
@@ -2764,7 +2758,7 @@ void LLVoiceClient::sessionStateChangeEvent(
2764 switch(state) 2758 switch(state)
2765 { 2759 {
2766 case 4: // I see this when joining the session 2760 case 4: // I see this when joining the session
2767 llinfos << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; 2761 LL_INFOS("Voice") << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL;
2768 2762
2769 // Session create succeeded, move forward. 2763 // Session create succeeded, move forward.
2770 mSessionStateEventHandle = sessionHandle; 2764 mSessionStateEventHandle = sessionHandle;
@@ -2777,23 +2771,23 @@ void LLVoiceClient::sessionStateChangeEvent(
2777 setState(stateSessionJoined); 2771 setState(stateSessionJoined);
2778 //RN: the uriString being returned by vivox here is actually your account uri, not the channel 2772 //RN: the uriString being returned by vivox here is actually your account uri, not the channel
2779 // you are attempting to join, so ignore it 2773 // you are attempting to join, so ignore it
2780 //llinfos << "received URI " << uriString << "(previously " << mSessionURI << ")" << llendl; 2774 //LL_DEBUGS("Voice") << "received URI " << uriString << "(previously " << mSessionURI << ")" << LL_ENDL;
2781 //mSessionURI = uriString; 2775 //mSessionURI = uriString;
2782 } 2776 }
2783 } 2777 }
2784 else if(sessionHandle == mNextSessionHandle) 2778 else if(sessionHandle == mNextSessionHandle)
2785 { 2779 {
2786// llinfos << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << llendl; 2780// LL_DEBUGS("Voice") << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << LL_ENDL;
2787 } 2781 }
2788 else 2782 else
2789 { 2783 {
2790 llwarns << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; 2784 LL_WARNS("Voice") << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL;
2791 // MBW -- XXX -- Should we send a Session.Terminate here? 2785 // MBW -- XXX -- Should we send a Session.Terminate here?
2792 } 2786 }
2793 2787
2794 break; 2788 break;
2795 case 5: // I see this when leaving the session 2789 case 5: // I see this when leaving the session
2796 llinfos << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; 2790 LL_INFOS("Voice") << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL;
2797 2791
2798 // Set the session handle to the empty string. If we get back to stateJoiningSession, we'll want to wait for the new session handle. 2792 // Set the session handle to the empty string. If we get back to stateJoiningSession, we'll want to wait for the new session handle.
2799 if(sessionHandle == mSessionHandle) 2793 if(sessionHandle == mSessionHandle)
@@ -2821,17 +2815,17 @@ void LLVoiceClient::sessionStateChangeEvent(
2821 case stateJoinSessionFailed: 2815 case stateJoinSessionFailed:
2822 case stateJoinSessionFailedWaiting: 2816 case stateJoinSessionFailedWaiting:
2823 // normal transition 2817 // normal transition
2824 llinfos << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; 2818 LL_INFOS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL;
2825 setState(stateSessionTerminated); 2819 setState(stateSessionTerminated);
2826 break; 2820 break;
2827 2821
2828 case stateSessionTerminated: 2822 case stateSessionTerminated:
2829 // this will happen sometimes -- there are cases where we send the terminate and then go straight to this state. 2823 // this will happen sometimes -- there are cases where we send the terminate and then go straight to this state.
2830 llwarns << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; 2824 LL_WARNS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL;
2831 break; 2825 break;
2832 2826
2833 default: 2827 default:
2834 llwarns << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << llendl; 2828 LL_WARNS("Voice") << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << LL_ENDL;
2835 setState(stateSessionTerminated); 2829 setState(stateSessionTerminated);
2836 break; 2830 break;
2837 } 2831 }
@@ -2842,14 +2836,14 @@ void LLVoiceClient::sessionStateChangeEvent(
2842 } 2836 }
2843 else 2837 else
2844 { 2838 {
2845 llinfos << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; 2839 LL_INFOS("Voice") << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL;
2846 } 2840 }
2847 2841
2848 mSessionStateEventHandle.clear(); 2842 mSessionStateEventHandle.clear();
2849 mSessionStateEventURI.clear(); 2843 mSessionStateEventURI.clear();
2850 break; 2844 break;
2851 default: 2845 default:
2852 llwarns << "unknown state: " << state << llendl; 2846 LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL;
2853 break; 2847 break;
2854 } 2848 }
2855} 2849}
@@ -2860,7 +2854,7 @@ void LLVoiceClient::loginStateChangeEvent(
2860 std::string &statusString, 2854 std::string &statusString,
2861 int state) 2855 int state)
2862{ 2856{
2863 llinfos << "state is " << state << llendl; 2857 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2864 /* 2858 /*
2865 According to Mike S., status codes for this event are: 2859 According to Mike S., status codes for this event are:
2866 login_state_logged_out=0, 2860 login_state_logged_out=0,
@@ -2881,7 +2875,8 @@ void LLVoiceClient::loginStateChangeEvent(
2881 break; 2875 break;
2882 2876
2883 default: 2877 default:
2884// llwarns << "unknown state: " << state << llendl; 2878 //Used to be a commented out warning
2879 LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL;
2885 break; 2880 break;
2886 } 2881 }
2887} 2882}
@@ -2893,13 +2888,13 @@ void LLVoiceClient::sessionNewEvent(
2893 std::string &nameString, 2888 std::string &nameString,
2894 std::string &uriString) 2889 std::string &uriString)
2895{ 2890{
2896// llinfos << "state is " << state << llendl; 2891 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2897 2892
2898 switch(state) 2893 switch(state)
2899 { 2894 {
2900 case 0: 2895 case 0:
2901 { 2896 {
2902 llinfos << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << llendl; 2897 LL_DEBUGS("Voice") << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << LL_ENDL;
2903 2898
2904 LLUUID caller_id; 2899 LLUUID caller_id;
2905 if(IDFromName(nameString, caller_id)) 2900 if(IDFromName(nameString, caller_id))
@@ -2917,13 +2912,13 @@ void LLVoiceClient::sessionNewEvent(
2917 } 2912 }
2918 else 2913 else
2919 { 2914 {
2920 llwarns << "Could not generate caller id from uri " << uriString << llendl; 2915 LL_WARNS("Voice") << "Could not generate caller id from uri " << uriString << LL_ENDL;
2921 } 2916 }
2922 } 2917 }
2923 break; 2918 break;
2924 2919
2925 default: 2920 default:
2926 llwarns << "unknown state: " << state << llendl; 2921 LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL;
2927 break; 2922 break;
2928 } 2923 }
2929} 2924}
@@ -2938,7 +2933,7 @@ void LLVoiceClient::participantStateChangeEvent(
2938 int participantType) 2933 int participantType)
2939{ 2934{
2940 participantState *participant = NULL; 2935 participantState *participant = NULL;
2941 llinfos << "state is " << state << llendl; 2936 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2942 2937
2943 switch(state) 2938 switch(state)
2944 { 2939 {
@@ -2947,8 +2942,8 @@ void LLVoiceClient::participantStateChangeEvent(
2947 if(participant) 2942 if(participant)
2948 { 2943 {
2949 participant->mName = nameString; 2944 participant->mName = nameString;
2950 llinfos << "added participant \"" << participant->mName 2945 LL_DEBUGS("Voice") << "added participant \"" << participant->mName
2951 << "\" (" << participant->mAvatarID << ")"<< llendl; 2946 << "\" (" << participant->mAvatarID << ")"<< LL_ENDL;
2952 } 2947 }
2953 break; 2948 break;
2954 case 9: // I see this when a participant leaves 2949 case 9: // I see this when a participant leaves
@@ -2959,7 +2954,7 @@ void LLVoiceClient::participantStateChangeEvent(
2959 } 2954 }
2960 break; 2955 break;
2961 default: 2956 default:
2962// llwarns << "unknown state: " << state << llendl; 2957 LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL;
2963 break; 2958 break;
2964 } 2959 }
2965} 2960}
@@ -2989,13 +2984,13 @@ void LLVoiceClient::participantPropertiesEvent(
2989 } 2984 }
2990 else 2985 else
2991 { 2986 {
2992 llwarns << "unknown participant: " << uriString << llendl; 2987 LL_WARNS("Voice") << "unknown participant: " << uriString << LL_ENDL;
2993 } 2988 }
2994} 2989}
2995 2990
2996void LLVoiceClient::auxAudioPropertiesEvent(F32 energy) 2991void LLVoiceClient::auxAudioPropertiesEvent(F32 energy)
2997{ 2992{
2998// llinfos << "got energy " << energy << llendl; 2993 LL_DEBUGS("Voice") << "got energy " << energy << LL_ENDL;
2999 mTuningEnergy = energy; 2994 mTuningEnergy = energy;
3000} 2995}
3001 2996
@@ -3053,7 +3048,7 @@ LLVoiceClient::participantState *LLVoiceClient::addParticipant(const std::string
3053 } 3048 }
3054 } 3049 }
3055 3050
3056 llinfos << "participant \"" << result->mURI << "\" added." << llendl; 3051 LL_DEBUGS("Voice") << "participant \"" << result->mURI << "\" added." << LL_ENDL;
3057 } 3052 }
3058 3053
3059 return result; 3054 return result;
@@ -3079,7 +3074,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa
3079 { 3074 {
3080 participantMap::iterator iter = mParticipantMap.find(participant->mURI); 3075 participantMap::iterator iter = mParticipantMap.find(participant->mURI);
3081 3076
3082 llinfos << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << llendl; 3077 LL_DEBUGS("Voice") << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << LL_ENDL;
3083 3078
3084 mParticipantMap.erase(iter); 3079 mParticipantMap.erase(iter);
3085 delete participant; 3080 delete participant;
@@ -3089,7 +3084,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa
3089 3084
3090void LLVoiceClient::removeAllParticipants() 3085void LLVoiceClient::removeAllParticipants()
3091{ 3086{
3092 llinfos << "called" << llendl; 3087 LL_DEBUGS("Voice") << "called" << LL_ENDL;
3093 3088
3094 while(!mParticipantMap.empty()) 3089 while(!mParticipantMap.empty())
3095 { 3090 {
@@ -3172,7 +3167,7 @@ void LLVoiceClient::clearChannelMap(void)
3172 3167
3173void LLVoiceClient::addChannelMapEntry(std::string &name, std::string &uri) 3168void LLVoiceClient::addChannelMapEntry(std::string &name, std::string &uri)
3174{ 3169{
3175// llinfos << "Adding channel name mapping: " << name << " -> " << uri << llendl; 3170 LL_DEBUGS("Voice") << "Adding channel name mapping: " << name << " -> " << uri << LL_ENDL;
3176 mChannelMap.insert(channelMap::value_type(name, uri)); 3171 mChannelMap.insert(channelMap::value_type(name, uri));
3177} 3172}
3178 3173
@@ -3195,7 +3190,7 @@ void LLVoiceClient::parcelChanged()
3195 if(getState() >= stateLoggedIn) 3190 if(getState() >= stateLoggedIn)
3196 { 3191 {
3197 // If the user is logged in, start a channel lookup. 3192 // If the user is logged in, start a channel lookup.
3198 llinfos << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << llendl; 3193 LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
3199 3194
3200 std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest"); 3195 std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
3201 LLSD data; 3196 LLSD data;
@@ -3207,7 +3202,7 @@ void LLVoiceClient::parcelChanged()
3207 else 3202 else
3208 { 3203 {
3209 // The transition to stateLoggedIn needs to kick this off again. 3204 // The transition to stateLoggedIn needs to kick this off again.
3210 llinfos << "not logged in yet, deferring" << llendl; 3205 LL_INFOS("Voice") << "not logged in yet, deferring" << LL_ENDL;
3211 } 3206 }
3212} 3207}
3213 3208
@@ -3219,7 +3214,7 @@ void LLVoiceClient::switchChannel(
3219{ 3214{
3220 bool needsSwitch = false; 3215 bool needsSwitch = false;
3221 3216
3222 llinfos << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << llendl; 3217 LL_DEBUGS("Voice") << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << LL_ENDL;
3223 3218
3224 switch(getState()) 3219 switch(getState())
3225 { 3220 {
@@ -3258,12 +3253,12 @@ void LLVoiceClient::switchChannel(
3258 if(uri.empty()) 3253 if(uri.empty())
3259 { 3254 {
3260 // Leave any channel we may be in 3255 // Leave any channel we may be in
3261 llinfos << "leaving channel" << llendl; 3256 LL_DEBUGS("Voice") << "leaving channel" << LL_ENDL;
3262 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED); 3257 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
3263 } 3258 }
3264 else 3259 else
3265 { 3260 {
3266 llinfos << "switching to channel " << uri << llendl; 3261 LL_DEBUGS("Voice") << "switching to channel " << uri << LL_ENDL;
3267 } 3262 }
3268 3263
3269 if(getState() <= stateNoChannel) 3264 if(getState() <= stateNoChannel)
@@ -3312,12 +3307,12 @@ void LLVoiceClient::setSpatialChannel(
3312 mSpatialSessionURI = uri; 3307 mSpatialSessionURI = uri;
3313 mAreaVoiceDisabled = mSpatialSessionURI.empty(); 3308 mAreaVoiceDisabled = mSpatialSessionURI.empty();
3314 3309
3315 llinfos << "got spatial channel uri: \"" << uri << "\"" << llendl; 3310 LL_DEBUGS("Voice") << "got spatial channel uri: \"" << uri << "\"" << LL_ENDL;
3316 3311
3317 if(mNonSpatialChannel || !mNextSessionSpatial) 3312 if(mNonSpatialChannel || !mNextSessionSpatial)
3318 { 3313 {
3319 // User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels. 3314 // User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels.
3320 llinfos << "in non-spatial chat, not switching channels" << llendl; 3315 LL_INFOS("Voice") << "in non-spatial chat, not switching channels" << LL_ENDL;
3321 } 3316 }
3322 else 3317 else
3323 { 3318 {
@@ -3559,7 +3554,7 @@ void LLVoiceClient::leaveChannel(void)
3559{ 3554{
3560 if(getState() == stateRunning) 3555 if(getState() == stateRunning)
3561 { 3556 {
3562// llinfos << "leaving channel for teleport/logout" << llendl; 3557 LL_DEBUGS("Voice") << "leaving channel for teleport/logout" << LL_ENDL;
3563 mChannelName.clear(); 3558 mChannelName.clear();
3564 sessionTerminate(); 3559 sessionTerminate();
3565 } 3560 }
@@ -3607,6 +3602,24 @@ bool LLVoiceClient::voiceEnabled()
3607 return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice"); 3602 return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
3608} 3603}
3609 3604
3605void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
3606{
3607 mLipSyncEnabled = enabled;
3608}
3609
3610BOOL LLVoiceClient::lipSyncEnabled()
3611{
3612
3613 if ( mVoiceEnabled && stateDisabled != getState() )
3614 {
3615 return mLipSyncEnabled;
3616 }
3617 else
3618 {
3619 return FALSE;
3620 }
3621}
3622
3610void LLVoiceClient::setUsePTT(bool usePTT) 3623void LLVoiceClient::setUsePTT(bool usePTT)
3611{ 3624{
3612 if(usePTT && !mUsePTT) 3625 if(usePTT && !mUsePTT)
@@ -3650,7 +3663,7 @@ void LLVoiceClient::setEarLocation(S32 loc)
3650{ 3663{
3651 if(mEarLocation != loc) 3664 if(mEarLocation != loc)
3652 { 3665 {
3653 llinfos << "Setting mEarLocation to " << loc << llendl; 3666 LL_DEBUGS("Voice") << "Setting mEarLocation to " << loc << LL_ENDL;
3654 3667
3655 mEarLocation = loc; 3668 mEarLocation = loc;
3656 mSpatialCoordsDirty = true; 3669 mSpatialCoordsDirty = true;
@@ -3659,7 +3672,7 @@ void LLVoiceClient::setEarLocation(S32 loc)
3659 3672
3660void LLVoiceClient::setVoiceVolume(F32 volume) 3673void LLVoiceClient::setVoiceVolume(F32 volume)
3661{ 3674{
3662// llinfos << "volume is " << volume << llendl; 3675 LL_DEBUGS("Voice") << "volume is " << volume << LL_ENDL;
3663 3676
3664 // incoming volume has the range [0.0 ... 1.0], with 0.5 as the default. 3677 // incoming volume has the range [0.0 ... 1.0], with 0.5 as the default.
3665 // Map it as follows: 0.0 -> -100, 0.5 -> 24, 1.0 -> 50 3678 // Map it as follows: 0.0 -> -100, 0.5 -> 24, 1.0 -> 50
@@ -3708,7 +3721,7 @@ void LLVoiceClient::setVivoxDebugServerName(std::string &serverName)
3708 3721
3709void LLVoiceClient::keyDown(KEY key, MASK mask) 3722void LLVoiceClient::keyDown(KEY key, MASK mask)
3710{ 3723{
3711// llinfos << "key is " << LLKeyboard::stringFromKey(key) << llendl; 3724 LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL;
3712 3725
3713 if (gKeyboard->getKeyRepeated(key)) 3726 if (gKeyboard->getKeyRepeated(key))
3714 { 3727 {
@@ -4002,7 +4015,7 @@ void LLVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::EStatusTy
4002 mVivoxErrorStatusCode = 0; 4015 mVivoxErrorStatusCode = 0;
4003 } 4016 }
4004 4017
4005 llinfos << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << llendl; 4018 LL_DEBUGS("Voice") << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << LL_ENDL;
4006 4019
4007 for (status_observer_set_t::iterator it = mStatusObservers.begin(); 4020 for (status_observer_set_t::iterator it = mStatusObservers.begin();
4008 it != mStatusObservers.end(); 4021 it != mStatusObservers.end();
diff --git a/linden/indra/newview/llvoiceclient.h b/linden/indra/newview/llvoiceclient.h
index d12bfa8..d1609a8 100644
--- a/linden/indra/newview/llvoiceclient.h
+++ b/linden/indra/newview/llvoiceclient.h
@@ -210,6 +210,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
210 void setMicGain(F32 volume); 210 void setMicGain(F32 volume);
211 void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal) 211 void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
212 void setVivoxDebugServerName(std::string &serverName); 212 void setVivoxDebugServerName(std::string &serverName);
213 void setLipSyncEnabled(BOOL enabled);
214 BOOL lipSyncEnabled();
213 215
214 // PTT key triggering 216 // PTT key triggering
215 void keyDown(KEY key, MASK mask); 217 void keyDown(KEY key, MASK mask);
@@ -516,6 +518,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
516 518
517 LLTimer mUpdateTimer; 519 LLTimer mUpdateTimer;
518 520
521 BOOL mLipSyncEnabled;
522
519 typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t; 523 typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t;
520 observer_set_t mObservers; 524 observer_set_t mObservers;
521 525
diff --git a/linden/indra/newview/llvoicevisualizer.cpp b/linden/indra/newview/llvoicevisualizer.cpp
index 6b2a3e6..ba16feb 100644
--- a/linden/indra/newview/llvoicevisualizer.cpp
+++ b/linden/indra/newview/llvoicevisualizer.cpp
@@ -45,7 +45,7 @@
45#include "llviewerimage.h" 45#include "llviewerimage.h"
46#include "llviewerimagelist.h" 46#include "llviewerimagelist.h"
47#include "llvoiceclient.h" 47#include "llvoiceclient.h"
48#include "llglimmediate.h" 48#include "llrender.h"
49 49
50//brent's wave image 50//brent's wave image
51//29de489d-0491-fb00-7dab-f9e686d31e83 51//29de489d-0491-fb00-7dab-f9e686d31e83
@@ -79,6 +79,35 @@ const F32 DEFAULT_MAXIMUM_GESTICULATION_AMPLITUDE = 1.0f;
79const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code. 79const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code.
80const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL 80const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL
81 81
82
83//------------------------------------------------------------------
84// handles parameter updates
85//------------------------------------------------------------------
86static bool handleVoiceVisualizerPrefsChanged(const LLSD& newvalue)
87{
88 // Note: Ignore the specific event value, we look up the ones we want
89 LLVoiceVisualizer::setPreferences();
90 return true;
91}
92
93//------------------------------------------------------------------
94// Initialize the statics
95//------------------------------------------------------------------
96bool LLVoiceVisualizer::sPrefsInitialized = false;
97BOOL LLVoiceVisualizer::sLipSyncEnabled = FALSE;
98F32* LLVoiceVisualizer::sOoh = NULL;
99F32* LLVoiceVisualizer::sAah = NULL;
100U32 LLVoiceVisualizer::sOohs = 0;
101U32 LLVoiceVisualizer::sAahs = 0;
102F32 LLVoiceVisualizer::sOohAahRate = 0.0f;
103F32* LLVoiceVisualizer::sOohPowerTransfer = NULL;
104U32 LLVoiceVisualizer::sOohPowerTransfers = 0;
105F32 LLVoiceVisualizer::sOohPowerTransfersf = 0.0f;
106F32* LLVoiceVisualizer::sAahPowerTransfer = NULL;
107U32 LLVoiceVisualizer::sAahPowerTransfers = 0;
108F32 LLVoiceVisualizer::sAahPowerTransfersf = 0.0f;
109
110
82//----------------------------------------------- 111//-----------------------------------------------
83// constructor 112// constructor
84//----------------------------------------------- 113//-----------------------------------------------
@@ -87,6 +116,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
87{ 116{
88 mCurrentTime = mTimer.getTotalSeconds(); 117 mCurrentTime = mTimer.getTotalSeconds();
89 mPreviousTime = mCurrentTime; 118 mPreviousTime = mCurrentTime;
119 mStartTime = mCurrentTime;
90 mVoiceSourceWorldPosition = LLVector3( 0.0f, 0.0f, 0.0f ); 120 mVoiceSourceWorldPosition = LLVector3( 0.0f, 0.0f, 0.0f );
91 mSpeakingAmplitude = 0.0f; 121 mSpeakingAmplitude = 0.0f;
92 mCurrentlySpeaking = false; 122 mCurrentlySpeaking = false;
@@ -105,7 +135,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
105 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 135 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
106 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 136 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
107 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 137 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
108 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 138 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
109 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c" 139 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c"
110 }; 140 };
111 141
@@ -117,7 +147,23 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
117 mSoundSymbol.mWaveOpacity [i] = 1.0f; 147 mSoundSymbol.mWaveOpacity [i] = 1.0f;
118 mSoundSymbol.mWaveExpansion [i] = 1.0f; 148 mSoundSymbol.mWaveExpansion [i] = 1.0f;
119 } 149 }
120 150
151 // The first instance loads the initial state from prefs.
152 if (!sPrefsInitialized)
153 {
154 setPreferences();
155
156 // Set up our listener to get updates on all prefs values we care about.
157 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
158 gSavedSettings.getControl("LipSyncOohAahRate")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
159 gSavedSettings.getControl("LipSyncOoh")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
160 gSavedSettings.getControl("LipSyncAah")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
161 gSavedSettings.getControl("LipSyncOohPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
162 gSavedSettings.getControl("LipSyncAahPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
163
164 sPrefsInitialized = true;
165 }
166
121}//--------------------------------------------------- 167}//---------------------------------------------------
122 168
123//--------------------------------------------------- 169//---------------------------------------------------
@@ -144,6 +190,7 @@ void LLVoiceVisualizer::setVoiceEnabled( bool v )
144//--------------------------------------------------- 190//---------------------------------------------------
145void LLVoiceVisualizer::setStartSpeaking() 191void LLVoiceVisualizer::setStartSpeaking()
146{ 192{
193 mStartTime = mTimer.getTotalSeconds();
147 mCurrentlySpeaking = true; 194 mCurrentlySpeaking = true;
148 mSoundSymbol.mActive = true; 195 mSoundSymbol.mActive = true;
149 196
@@ -176,6 +223,130 @@ void LLVoiceVisualizer::setSpeakingAmplitude( F32 a )
176 223
177 224
178//--------------------------------------------------- 225//---------------------------------------------------
226void LLVoiceVisualizer::setPreferences( )
227{
228 sLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
229 sOohAahRate = gSavedSettings.getF32("LipSyncOohAahRate");
230
231 std::string oohString = gSavedSettings.getString("LipSyncOoh");
232 lipStringToF32s (oohString, sOoh, sOohs);
233
234 std::string aahString = gSavedSettings.getString("LipSyncAah");
235 lipStringToF32s (aahString, sAah, sAahs);
236
237 std::string oohPowerString = gSavedSettings.getString("LipSyncOohPowerTransfer");
238 lipStringToF32s (oohPowerString, sOohPowerTransfer, sOohPowerTransfers);
239 sOohPowerTransfersf = (F32) sOohPowerTransfers;
240
241 std::string aahPowerString = gSavedSettings.getString("LipSyncAahPowerTransfer");
242 lipStringToF32s (aahPowerString, sAahPowerTransfer, sAahPowerTransfers);
243 sAahPowerTransfersf = (F32) sAahPowerTransfers;
244
245}//---------------------------------------------------
246
247
248//---------------------------------------------------
249// convert a string of digits to an array of floats.
250// the result for each digit is the value of the
251// digit multiplied by 0.11
252//---------------------------------------------------
253void LLVoiceVisualizer::lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s )
254{
255 delete[] out_F32s; // get rid of the current array
256
257 count_F32s = in_string.length();
258 if (count_F32s == 0)
259 {
260 // we don't like zero length arrays
261
262 count_F32s = 1;
263 out_F32s = new F32[1];
264 out_F32s[0] = 0.0f;
265 }
266 else
267 {
268 out_F32s = new F32[count_F32s];
269
270 for (U32 i=0; i<count_F32s; i++)
271 {
272 // we convert the characters 0 to 9 to their numeric value
273 // anything else we take the low order four bits with a ceiling of 9
274
275 U8 digit = in_string[i];
276 U8 four_bits = digit % 16;
277 if (four_bits > 9)
278 {
279 four_bits = 9;
280 }
281 out_F32s[i] = 0.11f * (F32) four_bits;
282 }
283 }
284
285}//---------------------------------------------------
286
287
288//--------------------------------------------------------------------------
289// find the amount to blend the ooh and aah mouth morphs
290//--------------------------------------------------------------------------
291void LLVoiceVisualizer::lipSyncOohAah( F32& ooh, F32& aah )
292{
293 if( ( sLipSyncEnabled == TRUE ) && mCurrentlySpeaking )
294 {
295 U32 transfer_index = (U32) (sOohPowerTransfersf * mSpeakingAmplitude);
296 if (transfer_index < 0)
297 {
298 transfer_index = 0;
299 }
300 if (transfer_index >= sOohPowerTransfers)
301 {
302 transfer_index = sOohPowerTransfers - 1;
303 }
304 F32 transfer_ooh = sOohPowerTransfer[transfer_index];
305
306 transfer_index = (U32) (sAahPowerTransfersf * mSpeakingAmplitude);
307 if (transfer_index < 0)
308 {
309 transfer_index = 0;
310 }
311 if (transfer_index >= sAahPowerTransfers)
312 {
313 transfer_index = sAahPowerTransfers - 1;
314 }
315 F32 transfer_aah = sAahPowerTransfer[transfer_index];
316
317 F64 current_time = mTimer.getTotalSeconds();
318 F64 elapsed_time = current_time - mStartTime;
319 U32 elapsed_frames = (U32) (elapsed_time * sOohAahRate);
320 U32 elapsed_oohs = elapsed_frames % sOohs;
321 U32 elapsed_aahs = elapsed_frames % sAahs;
322
323 ooh = transfer_ooh * sOoh[elapsed_oohs];
324 aah = transfer_aah * sAah[elapsed_aahs];
325
326 /*
327 llinfos << " elapsed frames " << elapsed_frames
328 << " ooh " << ooh
329 << " aah " << aah
330 << " transfer ooh" << transfer_ooh
331 << " transfer aah" << transfer_aah
332 << " start time " << mStartTime
333 << " current time " << current_time
334 << " elapsed time " << elapsed_time
335 << " elapsed oohs " << elapsed_oohs
336 << " elapsed aahs " << elapsed_aahs
337 << llendl;
338 */
339 }
340 else
341 {
342 ooh = 0.0f;
343 aah = 0.0f;
344 }
345
346}//---------------------------------------------------
347
348
349//---------------------------------------------------
179// this method is inherited from HUD Effect 350// this method is inherited from HUD Effect
180//--------------------------------------------------- 351//---------------------------------------------------
181void LLVoiceVisualizer::render() 352void LLVoiceVisualizer::render()
diff --git a/linden/indra/newview/llvoicevisualizer.h b/linden/indra/newview/llvoicevisualizer.h
index 8b1636f..76eb282 100644
--- a/linden/indra/newview/llvoicevisualizer.h
+++ b/linden/indra/newview/llvoicevisualizer.h
@@ -90,7 +90,9 @@ class LLVoiceVisualizer : public LLHUDEffect
90 void setStopSpeaking(); // tell me when the av stops speaking 90 void setStopSpeaking(); // tell me when the av stops speaking
91 bool getCurrentlySpeaking(); // the get for the above set 91 bool getCurrentlySpeaking(); // the get for the above set
92 VoiceGesticulationLevel getCurrentGesticulationLevel(); // based on voice amplitude, I'll give you the current "energy level" of avatar speech 92 VoiceGesticulationLevel getCurrentGesticulationLevel(); // based on voice amplitude, I'll give you the current "energy level" of avatar speech
93 93 static void setPreferences( );
94 static void lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s ); // convert a string of digits to an array of floats
95 void lipSyncOohAah( F32& ooh, F32& aah );
94 void render(); // inherited from HUD Effect 96 void render(); // inherited from HUD Effect
95 void packData(LLMessageSystem *mesgsys); // inherited from HUD Effect 97 void packData(LLMessageSystem *mesgsys); // inherited from HUD Effect
96 void unpackData(LLMessageSystem *mesgsys, S32 blocknum); // inherited from HUD Effect 98 void unpackData(LLMessageSystem *mesgsys, S32 blocknum); // inherited from HUD Effect
@@ -124,6 +126,7 @@ class LLVoiceVisualizer : public LLHUDEffect
124 }; 126 };
125 127
126 LLFrameTimer mTimer; // so I can ask the current time in seconds 128 LLFrameTimer mTimer; // so I can ask the current time in seconds
129 F64 mStartTime; // time in seconds when speaking started
127 F64 mCurrentTime; // current time in seconds, captured every step 130 F64 mCurrentTime; // current time in seconds, captured every step
128 F64 mPreviousTime; // copy of "current time" from last frame 131 F64 mPreviousTime; // copy of "current time" from last frame
129 SoundSymbol mSoundSymbol; // the sound symbol that appears over the avatar's head 132 SoundSymbol mSoundSymbol; // the sound symbol that appears over the avatar's head
@@ -134,6 +137,24 @@ class LLVoiceVisualizer : public LLHUDEffect
134 F32 mMaxGesticulationAmplitude; // this is the upper-limit of the envelope of detectable gesticulation leves 137 F32 mMaxGesticulationAmplitude; // this is the upper-limit of the envelope of detectable gesticulation leves
135 F32 mMinGesticulationAmplitude; // this is the lower-limit of the envelope of detectable gesticulation leves 138 F32 mMinGesticulationAmplitude; // this is the lower-limit of the envelope of detectable gesticulation leves
136 139
140 //---------------------------------------------------
141 // private static members
142 //---------------------------------------------------
143
144 static BOOL sLipSyncEnabled; // 0 disabled, 1 babble loop
145 static bool sPrefsInitialized; // the first instance will initialize the static members
146 static F32* sOoh; // the babble loop of amplitudes for the ooh morph
147 static F32* sAah; // the babble loop of amplitudes for the ooh morph
148 static U32 sOohs; // the number of entries in the ooh loop
149 static U32 sAahs; // the number of entries in the aah loop
150 static F32 sOohAahRate; // frames per second for the babble loop
151 static F32* sOohPowerTransfer; // the power transfer characteristics for the ooh amplitude
152 static U32 sOohPowerTransfers; // the number of entries in the ooh transfer characteristics
153 static F32 sOohPowerTransfersf; // the number of entries in the ooh transfer characteristics as a float
154 static F32* sAahPowerTransfer; // the power transfer characteristics for the aah amplitude
155 static U32 sAahPowerTransfers; // the number of entries in the aah transfer characteristics
156 static F32 sAahPowerTransfersf; // the number of entries in the aah transfer characteristics as a float
157
137};//----------------------------------------------------------------- 158};//-----------------------------------------------------------------
138 // end of LLVoiceVisualizer class 159 // end of LLVoiceVisualizer class
139//------------------------------------------------------------------ 160//------------------------------------------------------------------
diff --git a/linden/indra/newview/llvosky.cpp b/linden/indra/newview/llvosky.cpp
index 8e60010..eae322e 100644
--- a/linden/indra/newview/llvosky.cpp
+++ b/linden/indra/newview/llvosky.cpp
@@ -194,11 +194,13 @@ inline void color_gamma_correct(LLColor3 &col)
194 194
195S32 LLSkyTex::sComponents = 4; 195S32 LLSkyTex::sComponents = 4;
196S32 LLSkyTex::sResolution = 64; 196S32 LLSkyTex::sResolution = 64;
197F32 LLSkyTex::sInterpVal = 0.f; 197F32 LLSkyTex::sInterpVal = 0.f;
198S32 LLSkyTex::sCurrent = 0; 198S32 LLSkyTex::sCurrent = 0;
199 199
200 200
201LLSkyTex::LLSkyTex() 201LLSkyTex::LLSkyTex() :
202 mSkyData(NULL),
203 mSkyDirs(NULL)
202{ 204{
203} 205}
204 206
diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h
index 70aa3af..124b690 100644
--- a/linden/indra/newview/llvosky.h
+++ b/linden/indra/newview/llvosky.h
@@ -207,7 +207,7 @@ protected:
207 F32 mDiskRadius; 207 F32 mDiskRadius;
208 BOOL mDraw; // FALSE - do not draw. 208 BOOL mDraw; // FALSE - do not draw.
209 F32 mHorizonVisibility; // number [0, 1] due to how horizon 209 F32 mHorizonVisibility; // number [0, 1] due to how horizon
210 F32 mVisibility; // same but due to other objects being in frong. 210 F32 mVisibility; // same but due to other objects being in throng.
211 BOOL mVisible; 211 BOOL mVisible;
212 static F32 sInterpVal; 212 static F32 sInterpVal;
213 LLVector3 mQuadCorner[4]; 213 LLVector3 mQuadCorner[4];
@@ -217,10 +217,12 @@ protected:
217 217
218public: 218public:
219 LLHeavenBody(const F32 rad) : 219 LLHeavenBody(const F32 rad) :
220 mDirectionCached(LLVector3(0,0,0)), mDirection(LLVector3(0,0,0)), 220 mDirectionCached(LLVector3(0,0,0)),
221 mDiskRadius(rad), mDraw(FALSE), 221 mDirection(LLVector3(0,0,0)),
222 mHorizonVisibility(1), mVisibility(1) 222 mIntensity(0.f),
223 223 mDiskRadius(rad), mDraw(FALSE),
224 mHorizonVisibility(1.f), mVisibility(1.f),
225 mVisible(FALSE)
224 { 226 {
225 mColor.setToBlack(); 227 mColor.setToBlack();
226 mColorCached.setToBlack(); 228 mColorCached.setToBlack();
@@ -261,7 +263,6 @@ public:
261 BOOL isVisible() const { return mVisible; } 263 BOOL isVisible() const { return mVisible; }
262 void setVisible(const BOOL v) { mVisible = v; } 264 void setVisible(const BOOL v) { mVisible = v; }
263 265
264
265 const F32& getIntensity() const { return mIntensity; } 266 const F32& getIntensity() const { return mIntensity; }
266 void setIntensity(const F32 c) { mIntensity = c; } 267 void setIntensity(const F32 c) { mIntensity = c; }
267 268
@@ -311,19 +312,19 @@ LL_FORCE_INLINE LLColor3 calc_air_sca_sea_level()
311 312
312const LLColor3 gAirScaSeaLevel = calc_air_sca_sea_level(); 313const LLColor3 gAirScaSeaLevel = calc_air_sca_sea_level();
313const F32 AIR_SCA_INTENS = color_intens(gAirScaSeaLevel); 314const F32 AIR_SCA_INTENS = color_intens(gAirScaSeaLevel);
314const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3; 315const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3.f;
315 316
316class LLHaze 317class LLHaze
317{ 318{
318public: 319public:
319 LLHaze() : mG(0), mFalloff(1) {mSigSca.setToBlack();} 320 LLHaze() : mG(0), mFalloff(1), mAbsCoef(0.f) {mSigSca.setToBlack();}
320 LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2) : 321 LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2.f) :
321 mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0) 322 mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0.f)
322 { 323 {
323 mAbsCoef = color_intens(mSigSca) / AIR_SCA_INTENS; 324 mAbsCoef = color_intens(mSigSca) / AIR_SCA_INTENS;
324 } 325 }
325 326
326 LLHaze(const F32 g, const F32 sca, const F32 fo = 2) : mG(g), 327 LLHaze(const F32 g, const F32 sca, const F32 fo = 2.f) : mG(g),
327 mSigSca(0.25f/F_PI * LLColor3(sca, sca, sca)), mFalloff(fo) 328 mSigSca(0.25f/F_PI * LLColor3(sca, sca, sca)), mFalloff(fo)
328 { 329 {
329 mAbsCoef = 0.01f * sca / AIR_SCA_AVG; 330 mAbsCoef = 0.01f * sca / AIR_SCA_AVG;
diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp
index c0474f2..310a745 100644
--- a/linden/indra/newview/llvosurfacepatch.cpp
+++ b/linden/indra/newview/llvosurfacepatch.cpp
@@ -960,12 +960,12 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)
960 LLStrider<LLColor4U> colors; 960 LLStrider<LLColor4U> colors;
961 LLStrider<U16> indices; 961 LLStrider<U16> indices;
962 962
963 buffer->getVertexStrider(vertices); 963 llassert_always(buffer->getVertexStrider(vertices));
964 buffer->getNormalStrider(normals); 964 llassert_always(buffer->getNormalStrider(normals));
965 buffer->getTexCoordStrider(texcoords); 965 llassert_always(buffer->getTexCoordStrider(texcoords));
966 buffer->getTexCoord2Strider(texcoords2); 966 llassert_always(buffer->getTexCoord2Strider(texcoords2));
967 buffer->getColorStrider(colors); 967 llassert_always(buffer->getColorStrider(colors));
968 buffer->getIndexStrider(indices); 968 llassert_always(buffer->getIndexStrider(indices));
969 969
970 U32 indices_index = 0; 970 U32 indices_index = 0;
971 U32 index_offset = 0; 971 U32 index_offset = 0;
diff --git a/linden/indra/newview/llwatchdog.cpp b/linden/indra/newview/llwatchdog.cpp
new file mode 100644
index 0000000..1dd984e
--- /dev/null
+++ b/linden/indra/newview/llwatchdog.cpp
@@ -0,0 +1,222 @@
1/**
2 * @file llthreadwatchdog.cpp
3 * @brief The LLThreadWatchdog class definitions
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32
33#include "llviewerprecompiledheaders.h"
34#include "llwatchdog.h"
35
36// This class runs the watchdog timing thread.
37class LLWatchdogTimerThread : public LLThread
38{
39public:
40 LLWatchdogTimerThread() :
41 LLThread("Watchdog"),
42 mSleepMsecs(0),
43 mStopping(false)
44 {
45 }
46
47 ~LLWatchdogTimerThread() {}
48
49 void setSleepTime(long ms) { mSleepMsecs = ms; }
50 void stop()
51 {
52 mStopping = true;
53 ms_sleep(1);
54 }
55
56 /* virtual */ void run()
57 {
58 while(!mStopping)
59 {
60 LLWatchdog::getInstance()->run();
61 ms_sleep(mSleepMsecs);
62 }
63 }
64
65private:
66 long mSleepMsecs;
67 bool mStopping;
68};
69
70// LLWatchdogEntry
71LLWatchdogEntry::LLWatchdogEntry()
72{
73}
74
75LLWatchdogEntry::~LLWatchdogEntry()
76{
77}
78
79void LLWatchdogEntry::start()
80{
81 LLWatchdog::getInstance()->add(this);
82}
83
84void LLWatchdogEntry::stop()
85{
86 LLWatchdog::getInstance()->remove(this);
87}
88
89// LLWatchdogTimeout
90LLWatchdogTimeout::LLWatchdogTimeout() :
91 mTimeout(0.0f)
92{
93}
94
95LLWatchdogTimeout::~LLWatchdogTimeout()
96{
97}
98
99bool LLWatchdogTimeout::isAlive() const
100{
101 return (mTimer.getStarted() && !mTimer.hasExpired());
102}
103
104void LLWatchdogTimeout::setTimeout(F32 d)
105{
106 mTimeout = d;
107}
108
109void LLWatchdogTimeout::start()
110{
111 // Order of operation is very impmortant here.
112 // After LLWatchdogEntry::start() is called
113 // LLWatchdogTimeout::isAlive() will be called asynchronously.
114 mTimer.start();
115 mTimer.setTimerExpirySec(mTimeout);
116 LLWatchdogEntry::start();
117}
118void LLWatchdogTimeout::stop()
119{
120 LLWatchdogEntry::stop();
121 mTimer.stop();
122}
123
124void LLWatchdogTimeout::ping()
125{
126 mTimer.setTimerExpirySec(mTimeout);
127}
128
129// LlWatchdog
130LLWatchdog::LLWatchdog() :
131 mSuspectsAccessMutex(NULL),
132 mTimer(NULL)
133{
134}
135
136LLWatchdog::~LLWatchdog()
137{
138}
139
140void LLWatchdog::add(LLWatchdogEntry* e)
141{
142 lockThread();
143 mSuspects.insert(e);
144 unlockThread();
145}
146
147void LLWatchdog::remove(LLWatchdogEntry* e)
148{
149 lockThread();
150 mSuspects.erase(e);
151 unlockThread();
152}
153
154void LLWatchdog::init()
155{
156 if(!mSuspectsAccessMutex && !mTimer)
157 {
158 mSuspectsAccessMutex = new LLMutex(NULL);
159 mTimer = new LLWatchdogTimerThread();
160 mTimer->setSleepTime(1000);
161 mTimer->start();
162 }
163}
164
165void LLWatchdog::cleanup()
166{
167 if(mTimer)
168 {
169 mTimer->stop();
170 delete mTimer;
171 }
172
173 if(mSuspectsAccessMutex)
174 {
175 delete mSuspectsAccessMutex;
176 }
177}
178
179void LLWatchdog::run()
180{
181 lockThread();
182
183 SuspectsRegistry::iterator result =
184 std::find_if(mSuspects.begin(),
185 mSuspects.end(),
186 std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
187 );
188
189 if(result != mSuspects.end())
190 {
191 // error!!!
192 if(mTimer)
193 {
194 mTimer->stop();
195 }
196
197 llinfos << "Watchdog detected error:" << llendl;
198#ifdef LL_WINDOWS
199 RaiseException(0,0,0,0);
200#else
201 raise(SIGQUIT);
202#endif
203 }
204
205 unlockThread();
206}
207
208void LLWatchdog::lockThread()
209{
210 if(mSuspectsAccessMutex != NULL)
211 {
212 mSuspectsAccessMutex->lock();
213 }
214}
215
216void LLWatchdog::unlockThread()
217{
218 if(mSuspectsAccessMutex != NULL)
219 {
220 mSuspectsAccessMutex->unlock();
221 }
222}
diff --git a/linden/indra/newview/llwatchdog.h b/linden/indra/newview/llwatchdog.h
new file mode 100644
index 0000000..96388bb
--- /dev/null
+++ b/linden/indra/newview/llwatchdog.h
@@ -0,0 +1,98 @@
1/**
2 * @file llthreadwatchdog.h
3 * @brief The LLThreadWatchdog class declaration
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLTHREADWATCHDOG_H
33#define LL_LLTHREADWATCHDOG_H
34
35#ifndef LL_TIMER_H
36 #include "lltimer.h"
37#endif
38
39// LLWatchdogEntry is the interface used by the tasks that
40// need to be watched.
41class LLWatchdogEntry
42{
43public:
44 LLWatchdogEntry();
45 virtual ~LLWatchdogEntry();
46
47 // isAlive is accessed by the watchdog thread.
48 // This may mean that resources used by
49 // isAlive and other method may need synchronization.
50 virtual bool isAlive() const = 0;
51 virtual void start();
52 virtual void stop();
53};
54
55class LLWatchdogTimeout : public LLWatchdogEntry
56{
57public:
58 LLWatchdogTimeout();
59 virtual ~LLWatchdogTimeout();
60
61 /* virtual */ bool isAlive() const;
62 /* virtual */ void start();
63 /* virtual */ void stop();
64
65 void setTimeout(F32 d);
66 void ping();
67
68private:
69 LLTimer mTimer;
70 F32 mTimeout;
71};
72
73class LLWatchdogTimerThread; // Defined in the cpp
74class LLWatchdog : public LLSingleton<LLWatchdog>
75{
76public:
77 LLWatchdog();
78 ~LLWatchdog();
79
80 // Add an entry to the watchdog.
81 void add(LLWatchdogEntry* e);
82 void remove(LLWatchdogEntry* e);
83
84 void init();
85 void run();
86 void cleanup();
87
88private:
89 void lockThread();
90 void unlockThread();
91
92 typedef std::set<LLWatchdogEntry*> SuspectsRegistry;
93 SuspectsRegistry mSuspects;
94 LLMutex* mSuspectsAccessMutex;
95 LLWatchdogTimerThread* mTimer;
96};
97
98#endif // LL_LLTHREADWATCHDOG_H
diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp
index f121d46..fb09fd8 100644
--- a/linden/indra/newview/llwaterparammanager.cpp
+++ b/linden/indra/newview/llwaterparammanager.cpp
@@ -75,7 +75,8 @@ LLWaterParamManager::LLWaterParamManager() :
75 mBlurMultiplier(0.1f, "blurMultiplier"), 75 mBlurMultiplier(0.1f, "blurMultiplier"),
76 mWave1Dir(.5f, .5f, "wave1Dir"), 76 mWave1Dir(.5f, .5f, "wave1Dir"),
77 mWave2Dir(.5f, .5f, "wave2Dir"), 77 mWave2Dir(.5f, .5f, "wave2Dir"),
78 mDensitySliderValue(1.0f) 78 mDensitySliderValue(1.0f),
79 mWaterFogKS(1.0f)
79{ 80{
80} 81}
81 82
@@ -86,7 +87,7 @@ LLWaterParamManager::~LLWaterParamManager()
86void LLWaterParamManager::loadAllPresets(const LLString& file_name) 87void LLWaterParamManager::loadAllPresets(const LLString& file_name)
87{ 88{
88 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "")); 89 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
89 llinfos << "Loading water settings from " << path_name << llendl; 90 LL_INFOS2("AppInit", "Shaders") << "Loading water settings from " << path_name << LL_ENDL;
90 91
91 //mParamList.clear(); 92 //mParamList.clear();
92 93
@@ -96,7 +97,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name)
96 std::string name; 97 std::string name;
97 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 98 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
98 99
99 llinfos << "name: " << name << llendl; 100 LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
100 101
101 // if we have one 102 // if we have one
102 if(found) 103 if(found)
@@ -111,7 +112,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name)
111 std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4); 112 std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4);
112 113
113 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name)); 114 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name));
114 llinfos << "Loading water from " << cur_path << llendl; 115 LL_DEBUGS2("AppInit", "Shaders") << "Loading water from " << cur_path << LL_ENDL;
115 116
116 std::ifstream water_xml(cur_path.c_str()); 117 std::ifstream water_xml(cur_path.c_str());
117 if (water_xml) 118 if (water_xml)
@@ -255,8 +256,8 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
255 if(gPipeline.canUseVertexShaders()) 256 if(gPipeline.canUseVertexShaders())
256 { 257 {
257 //transform water plane to eye space 258 //transform water plane to eye space
258 glh::vec3f norm(0, 0, 1); 259 glh::vec3f norm(0.f, 0.f, 1.f);
259 glh::vec3f p(0, 0, gAgent.getRegion()->getWaterHeight()+0.1f); 260 glh::vec3f p(0.f, 0.f, gAgent.getRegion()->getWaterHeight()+0.1f);
260 261
261 F32 modelView[16]; 262 F32 modelView[16];
262 for (U32 i = 0; i < 16; i++) 263 for (U32 i = 0; i < 16; i++)
@@ -406,7 +407,7 @@ F32 LLWaterParamManager::getFogDensity(void)
406 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err); 407 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err);
407 408
408 // modify if we're underwater 409 // modify if we're underwater
409 const F32 water_height = gAgent.getRegion()->getWaterHeight(); 410 const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
410 F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; 411 F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
411 if(camera_height <= water_height) 412 if(camera_height <= water_height)
412 { 413 {
diff --git a/linden/indra/newview/llwaterparammanager.h b/linden/indra/newview/llwaterparammanager.h
index ad40c12..6c9ce3e 100644
--- a/linden/indra/newview/llwaterparammanager.h
+++ b/linden/indra/newview/llwaterparammanager.h
@@ -315,18 +315,16 @@ public:
315 F32 mDensitySliderValue; 315 F32 mDensitySliderValue;
316 316
317private: 317private:
318 // our parameter manager singleton instance
319 static LLWaterParamManager * sInstance;
320
321private:
322
323 LLVector4 mWaterPlane; 318 LLVector4 mWaterPlane;
324 F32 mWaterFogKS; 319 F32 mWaterFogKS;
320
321 // our parameter manager singleton instance
322 static LLWaterParamManager * sInstance;
325}; 323};
326 324
327inline void LLWaterParamManager::setDensitySliderValue(F32 val) 325inline void LLWaterParamManager::setDensitySliderValue(F32 val)
328{ 326{
329 val /= 10; 327 val /= 10.0f;
330 val = 1.0f - val; 328 val = 1.0f - val;
331 val *= val * val; 329 val *= val * val;
332// val *= val; 330// val *= val;
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp
index 9365eeb..6e8123a 100644
--- a/linden/indra/newview/llwearable.cpp
+++ b/linden/indra/newview/llwearable.cpp
@@ -185,7 +185,7 @@ const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ign
185 return r; 185 return r;
186} 186}
187 187
188BOOL LLWearable::exportFile( FILE* file ) 188BOOL LLWearable::exportFile( LLFILE* file )
189{ 189{
190 // header and version 190 // header and version
191 if( fprintf( file, "LLWearable version %d\n", mDefinitionVersion ) < 0 ) 191 if( fprintf( file, "LLWearable version %d\n", mDefinitionVersion ) < 0 )
@@ -266,7 +266,7 @@ BOOL LLWearable::exportFile( FILE* file )
266 266
267 267
268 268
269BOOL LLWearable::importFile( FILE* file ) 269BOOL LLWearable::importFile( LLFILE* file )
270{ 270{
271 // *NOTE: changing the type or size of this buffer will require 271 // *NOTE: changing the type or size of this buffer will require
272 // changes in the fscanf() code below. You would be better off 272 // changes in the fscanf() code below. You would be better off
@@ -852,7 +852,7 @@ void LLWearable::saveNewAsset()
852 mAssetID.toString(new_asset_id_string); 852 mAssetID.toString(new_asset_id_string);
853 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ 853 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
854 snprintf(filename, LL_MAX_PATH, "%s.wbl", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,new_asset_id_string).c_str()); /* Flawfinder: ignore */ 854 snprintf(filename, LL_MAX_PATH, "%s.wbl", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,new_asset_id_string).c_str()); /* Flawfinder: ignore */
855 FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ 855 LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
856 BOOL successful_save = FALSE; 856 BOOL successful_save = FALSE;
857 if(fp && exportFile(fp)) 857 if(fp && exportFile(fp))
858 { 858 {
diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h
index aa4b3dd..63243eb 100644
--- a/linden/indra/newview/llwearable.h
+++ b/linden/indra/newview/llwearable.h
@@ -78,8 +78,8 @@ public:
78 void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); } 78 void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); }
79 static void removeFromAvatar( EWearableType type, BOOL set_by_user ); 79 static void removeFromAvatar( EWearableType type, BOOL set_by_user );
80 80
81 BOOL exportFile(FILE* file); 81 BOOL exportFile(LLFILE* file);
82 BOOL importFile(FILE* file); 82 BOOL importFile(LLFILE* file);
83 83
84 EWearableType getType() const { return mType; } 84 EWearableType getType() const { return mType; }
85 void setType( EWearableType type ) { mType = type; } 85 void setType( EWearableType type ) { mType = type; }
diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp
index 01a2459..cabf20a 100644
--- a/linden/indra/newview/llwearablelist.cpp
+++ b/linden/indra/newview/llwearablelist.cpp
@@ -110,7 +110,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
110 if( status >= 0 ) 110 if( status >= 0 )
111 { 111 {
112 // read the file 112 // read the file
113 FILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 113 LLFILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
114 if( !fp ) 114 if( !fp )
115 { 115 {
116 llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl; 116 llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl;
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 710b7e1..1d187cb 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -43,8 +43,9 @@
43#include "llviewborder.h" 43#include "llviewborder.h"
44#include "llviewercontrol.h" 44#include "llviewercontrol.h"
45#include "llviewerwindow.h" 45#include "llviewerwindow.h"
46#include "llnotify.h"
46#include "llweb.h" 47#include "llweb.h"
47#include "llglimmediate.h" 48#include "llrender.h"
48 49
49// linden library includes 50// linden library includes
50#include "llfocusmgr.h" 51#include "llfocusmgr.h"
@@ -587,7 +588,7 @@ void LLWebBrowserCtrl::draw()
587 F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight(); 588 F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight();
588 589
589 // draw the browser 590 // draw the browser
590 gGL.blendFunc( GL_ONE, GL_ZERO ); 591 gGL.setSceneBlendType(LLRender::BT_REPLACE);
591 gGL.begin( LLVertexBuffer::QUADS ); 592 gGL.begin( LLVertexBuffer::QUADS );
592 { 593 {
593 // render using web browser reported width and height, instead of trying to invert GL scale 594 // render using web browser reported width and height, instead of trying to invert GL scale
@@ -604,7 +605,7 @@ void LLWebBrowserCtrl::draw()
604 gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 ); 605 gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 );
605 } 606 }
606 gGL.end(); 607 gGL.end();
607 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 608 gGL.setSceneBlendType(LLRender::BT_ALPHA);
608 } 609 }
609 gGL.popMatrix(); 610 gGL.popMatrix();
610 611
@@ -762,6 +763,8 @@ void LLWebBrowserCtrl::onClickLinkNoFollow( const EventType& eventIn )
762 && !mOpenAppSLURLs) 763 && !mOpenAppSLURLs)
763 { 764 {
764 // block handling of this secondlife:///app/ URL 765 // block handling of this secondlife:///app/ URL
766 LLNotifyBox::showXml("UnableToOpenCommandURL");
767
765 return; 768 return;
766 } 769 }
767 770
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index e1b5357..95757f1 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -47,11 +47,13 @@ class LLWebBrowserCtrlEvent
47 }; 47 };
48 48
49 LLWebBrowserCtrlEvent( std::string stringValIn ) : 49 LLWebBrowserCtrlEvent( std::string stringValIn ) :
50 mIntVal(-1),
50 mStringVal( stringValIn ) 51 mStringVal( stringValIn )
51 { 52 {
52 }; 53 };
53 54
54 LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) : 55 LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) :
56 mIntVal(-1),
55 mStringVal( stringValIn ), 57 mStringVal( stringValIn ),
56 mStringValEx( stringValExIn ) 58 mStringValEx( stringValExIn )
57 { 59 {
diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp
index 1b52a14..aba637c 100644
--- a/linden/indra/newview/llwindebug.cpp
+++ b/linden/indra/newview/llwindebug.cpp
@@ -35,7 +35,6 @@
35 35
36#include <tchar.h> 36#include <tchar.h>
37#include <tlhelp32.h> 37#include <tlhelp32.h>
38#include "llappviewer.h"
39#include "llwindebug.h" 38#include "llwindebug.h"
40#include "llviewercontrol.h" 39#include "llviewercontrol.h"
41#include "lldir.h" 40#include "lldir.h"
@@ -106,6 +105,8 @@ MINIDUMPWRITEDUMP f_mdwp = NULL;
106 105
107#undef UNICODE 106#undef UNICODE
108 107
108static LPTOP_LEVEL_EXCEPTION_FILTER gFilterFunc = NULL;
109
109HMODULE hDbgHelp; 110HMODULE hDbgHelp;
110 111
111// Tool Help functions. 112// Tool Help functions.
@@ -554,14 +555,13 @@ void LLMemoryReserve::release()
554static LLMemoryReserve gEmergencyMemoryReserve; 555static LLMemoryReserve gEmergencyMemoryReserve;
555 556
556// static 557// static
557BOOL LLWinDebug::setupExceptionHandler() 558void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func)
558{ 559{
559 560
560 static BOOL s_first_run = TRUE; 561 static bool s_first_run = true;
561 // Load the dbghelp dll now, instead of waiting for the crash. 562 // Load the dbghelp dll now, instead of waiting for the crash.
562 // Less potential for stack mangling 563 // Less potential for stack mangling
563 564
564 BOOL ok = TRUE;
565 if (s_first_run) 565 if (s_first_run)
566 { 566 {
567 // First, try loading from the directory that the app resides in. 567 // First, try loading from the directory that the app resides in.
@@ -576,15 +576,7 @@ BOOL LLWinDebug::setupExceptionHandler()
576 576
577 if (!hDll) 577 if (!hDll)
578 { 578 {
579 llwarns << "Couldn't find dbghelp.dll!" << llendl; 579 LL_WARNS("AppInit") << "Couldn't find dbghelp.dll!" << LL_ENDL;
580
581 std::string msg = "Couldn't find dbghelp.dll at ";
582 msg += local_dll_name;
583 msg += "!\n";
584
585 //write_debug(msg.c_str());
586
587 ok = FALSE;
588 } 580 }
589 else 581 else
590 { 582 {
@@ -592,18 +584,15 @@ BOOL LLWinDebug::setupExceptionHandler()
592 584
593 if (!f_mdwp) 585 if (!f_mdwp)
594 { 586 {
595 //write_debug("No MiniDumpWriteDump!\n");
596 FreeLibrary(hDll); 587 FreeLibrary(hDll);
597 hDll = NULL; 588 hDll = NULL;
598 ok = FALSE;
599 } 589 }
600 } 590 }
601 591
602 gEmergencyMemoryReserve.reserve(); 592 gEmergencyMemoryReserve.reserve();
603 }
604 593
605 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; 594 s_first_run = false;
606 prev_filter = SetUnhandledExceptionFilter(LLWinDebug::handleException); 595 }
607 596
608 // Try to get Tool Help library functions. 597 // Try to get Tool Help library functions.
609 HMODULE hKernel32; 598 HMODULE hKernel32;
@@ -612,26 +601,44 @@ BOOL LLWinDebug::setupExceptionHandler()
612 Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32FirstW"); 601 Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32FirstW");
613 Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32NextW"); 602 Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32NextW");
614 603
615 if (s_first_run) 604 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
605 prev_filter = SetUnhandledExceptionFilter(filter_func);
606
607 if(prev_filter != gFilterFunc)
616 { 608 {
617 // We're fine, this is the first run. 609 LL_WARNS("AppInit")
618 s_first_run = FALSE; 610 << "Replacing unknown exception (" << (void *)prev_filter << ") with (" << (void *)filter_func << ") !" << LL_ENDL;
619 return ok;
620 } 611 }
621 if (!prev_filter) 612
613 gFilterFunc = filter_func;
614}
615
616bool LLWinDebug::checkExceptionHandler()
617{
618 bool ok = true;
619 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
620 prev_filter = SetUnhandledExceptionFilter(gFilterFunc);
621
622 if (prev_filter != gFilterFunc)
622 { 623 {
623 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl; 624 LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with " << prev_filter << "!" << LL_ENDL;
624 ok = FALSE; 625 ok = false;
625 } 626 }
626 if (prev_filter != LLWinDebug::handleException) 627
628 if (prev_filter == NULL)
627 { 629 {
628 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl;
629 ok = FALSE; 630 ok = FALSE;
631 if (gFilterFunc == NULL)
632 {
633 LL_WARNS("AppInit") << "Exception handler uninitialized." << LL_ENDL;
634 }
635 else
636 {
637 LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with NULL!" << LL_ENDL;
638 }
630 } 639 }
631 640
632 return ok; 641 return ok;
633 // Internal builds don't mess with exception handling.
634 //return TRUE;
635} 642}
636 643
637void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename) 644void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename)
@@ -644,7 +651,7 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT
644 else 651 else
645 { 652 {
646 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, 653 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
647 filename); 654 filename);
648 655
649 HANDLE hFile = CreateFileA(dump_path.c_str(), 656 HANDLE hFile = CreateFileA(dump_path.c_str(),
650 GENERIC_WRITE, 657 GENERIC_WRITE,
@@ -672,20 +679,26 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT
672} 679}
673 680
674// static 681// static
675LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop) 682void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop)
676{ 683{
677 // *NOTE:Mani - This method is no longer the initial exception handler. 684 // *NOTE:Mani - This method is no longer the exception handler.
678 // It is called from viewer_windows_exception_handler() and other places. 685 // Its called from viewer_windows_exception_handler() and other places.
679 686
680 // 687 //
681 // Let go of a bunch of reserved memory to give library calls etc 688 // Let go of a bunch of reserved memory to give library calls etc
682 // a chance to execute normally in the case that we ran out of 689 // a chance to execute normally in the case that we ran out of
683 // memory. 690 // memory.
684 // 691 //
685 gEmergencyMemoryReserve.release(); 692 LLSD info;
693 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
694 "SecondLifeException");
695 std::string log_path = dump_path + ".log";
686 696
687 if (exception_infop) 697 if (exception_infop)
688 { 698 {
699 // Since there is exception info... Release the hounds.
700 gEmergencyMemoryReserve.release();
701
689 if(gSavedSettings.getControl("SaveMinidump") != NULL && gSavedSettings.getBOOL("SaveMinidump")) 702 if(gSavedSettings.getControl("SaveMinidump") != NULL && gSavedSettings.getBOOL("SaveMinidump"))
690 { 703 {
691 _MINIDUMP_EXCEPTION_INFORMATION ExInfo; 704 _MINIDUMP_EXCEPTION_INFORMATION ExInfo;
@@ -698,67 +711,34 @@ LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop)
698 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp"); 711 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp");
699 } 712 }
700 713
701
702 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
703 "SecondLifeException");
704
705 std::string log_path = dump_path + ".log";
706
707 LLSD info;
708 info = Get_Exception_Info(exception_infop); 714 info = Get_Exception_Info(exception_infop);
715 }
709 716
717 LLSD threads;
718 std::vector<DWORD> thread_ids;
719 GetProcessThreadIDs(GetCurrentProcessId(), thread_ids);
710 720
711 LLSD threads; 721 for(std::vector<DWORD>::iterator th_itr = thread_ids.begin();
712 std::vector<DWORD> thread_ids; 722 th_itr != thread_ids.end();
713 GetProcessThreadIDs(GetCurrentProcessId(), thread_ids); 723 ++th_itr)
714 724 {
715 for(std::vector<DWORD>::iterator th_itr = thread_ids.begin(); 725 LLSD thread_info;
716 th_itr != thread_ids.end(); 726 if(*th_itr != GetCurrentThreadId())
717 ++th_itr)
718 { 727 {
719 LLSD thread_info; 728 GetThreadCallStack(*th_itr, thread_info);
720 if(*th_itr != GetCurrentThreadId())
721 {
722 GetThreadCallStack(*th_itr, thread_info);
723 }
724
725 if(thread_info)
726 {
727
728 threads[llformat("ID %d", *th_itr)] = thread_info;
729 }
730 } 729 }
731 730
731 if(thread_info)
732 {
733 threads[llformat("ID %d", *th_itr)] = thread_info;
734 }
735 }
732 736
733 info["Threads"] = threads; 737 info["Threads"] = threads;
734
735 if (info)
736 {
737 std::ofstream out_file(log_path.c_str());
738 LLSDSerialize::toPrettyXML(info, out_file);
739 out_file.close();
740 }
741 }
742 else
743 {
744 // We're calling this due to a network error, not due to an actual exception.
745 // It doesn't realy matter what we return.
746 return EXCEPTION_CONTINUE_SEARCH;
747 }
748
749 //handle viewer crash must be called here since
750 //we don't return handling of the application
751 //back to the process.
752 LLAppViewer::handleViewerCrash();
753 738
754 // 739 std::ofstream out_file(log_path.c_str());
755 // At this point, we always want to exit the app. There's no graceful 740 LLSDSerialize::toPrettyXML(info, out_file);
756 // recovery for an unhandled exception. 741 out_file.close();
757 //
758 // Just kill the process.
759 LONG retval = EXCEPTION_EXECUTE_HANDLER;
760
761 return retval;
762} 742}
763 743
764#endif 744#endif
diff --git a/linden/indra/newview/llwindebug.h b/linden/indra/newview/llwindebug.h
index b11cdf6..cf15fae 100644
--- a/linden/indra/newview/llwindebug.h
+++ b/linden/indra/newview/llwindebug.h
@@ -38,10 +38,36 @@
38class LLWinDebug 38class LLWinDebug
39{ 39{
40public: 40public:
41 static BOOL setupExceptionHandler();
42 41
43 static LONG WINAPI handleException(struct _EXCEPTION_POINTERS *pExceptionInfo); 42
43 /**
44 * @brief initialize the llwindebug exception filter callback
45 *
46 * Hand a windows unhandled exception filter to LLWinDebug
47 * This method should only be called to change the
48 * exception filter used by llwindebug.
49 *
50 * Setting filter_func to NULL will clear any custom filters.
51 **/
52 static void initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func);
53
54 /**
55 * @brief check the status of the exception filter.
56 *
57 * Resets unhandled exception filter to the filter specified
58 * w/ initExceptionFilter).
59 * Returns false if the exception filter was modified.
60 *
61 * *NOTE:Mani In the past mozlib has been accused of
62 * overriding the exception filter. If the mozlib filter
63 * is required, perhaps we can chain calls from our
64 * filter to mozlib's.
65 **/
66 static bool checkExceptionHandler();
67
68 static void generateCrashStacks(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL);
44 static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename); 69 static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename);
70private:
45}; 71};
46 72
47#endif // LL_LLWINDEBUG_H 73#endif // LL_LLWINDEBUG_H
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index 9f59947..9f23b37 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -111,7 +111,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
111 if(file_name != "") 111 if(file_name != "")
112 { 112 {
113 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name)); 113 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name));
114 llinfos << "Loading WindLight settings from " << path_name << llendl; 114 LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
115 115
116 llifstream presetsXML(path_name.c_str()); 116 llifstream presetsXML(path_name.c_str());
117 117
@@ -137,7 +137,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
137 else 137 else
138 { 138 {
139 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "")); 139 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
140 llinfos << "Loading WindLight settings from " << path_name << llendl; 140 LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
141 141
142 //mParamList.clear(); 142 //mParamList.clear();
143 143
@@ -147,7 +147,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
147 std::string name; 147 std::string name;
148 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 148 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
149 149
150 llinfos << "name: " << name << llendl; 150 LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
151 151
152 // if we have one 152 // if we have one
153 if(found) 153 if(found)
@@ -162,7 +162,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
162 std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4); 162 std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4);
163 163
164 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name)); 164 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name));
165 llinfos << "Loading sky from " << cur_path << llendl; 165 LL_DEBUGS2("AppInit", "Shaders") << "Loading sky from " << cur_path << LL_ENDL;
166 166
167 std::ifstream sky_xml(cur_path.c_str()); 167 std::ifstream sky_xml(cur_path.c_str());
168 if (sky_xml) 168 if (sky_xml)
@@ -299,7 +299,7 @@ void LLWLParamManager::propagateParameters(void)
299 LLVector4 sunDir; 299 LLVector4 sunDir;
300 LLVector4 moonDir; 300 LLVector4 moonDir;
301 301
302 // set the sun direction from mSunAngle and mEastAngle 302 // set the sun direction from SunAngle and EastAngle
303 F32 sinTheta = sin(mCurParams.getEastAngle()); 303 F32 sinTheta = sin(mCurParams.getEastAngle());
304 F32 cosTheta = cos(mCurParams.getEastAngle()); 304 F32 cosTheta = cos(mCurParams.getEastAngle());
305 305
diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h
index bfb84e9..72b888d 100644
--- a/linden/indra/newview/llwlparammanager.h
+++ b/linden/indra/newview/llwlparammanager.h
@@ -199,8 +199,6 @@ public:
199public: 199public:
200 200
201 // helper variables 201 // helper variables
202 F32 mSunAngle;
203 F32 mEastAngle;
204 LLWLAnimator mAnimator; 202 LLWLAnimator mAnimator;
205 203
206 /// actual direction of the sun 204 /// actual direction of the sun
@@ -217,9 +215,6 @@ public:
217 // list of params and how they're cycled for days 215 // list of params and how they're cycled for days
218 LLWLDayCycle mDay; 216 LLWLDayCycle mDay;
219 217
220 // length of the day in seconds
221 F32 mLengthOfDay;
222
223 LLWLParamSet mCurParams; 218 LLWLParamSet mCurParams;
224 219
225 /// Sun Delta Terrain tweak variables. 220 /// Sun Delta Terrain tweak variables.
diff --git a/linden/indra/newview/llwlparamset.h b/linden/indra/newview/llwlparamset.h
index 6fa0bff..ed3453d 100644
--- a/linden/indra/newview/llwlparamset.h
+++ b/linden/indra/newview/llwlparamset.h
@@ -132,18 +132,10 @@ public:
132 /// get the star brightness value; 132 /// get the star brightness value;
133 F32 getStarBrightness(); 133 F32 getStarBrightness();
134 134
135 /// set the star's brightness
136 /// \param val brightness value
137 void setSunAngle(F32 val); 135 void setSunAngle(F32 val);
138
139 /// get the star brightness value;
140 F32 getSunAngle(); 136 F32 getSunAngle();
141 137
142 /// set the star's brightness
143 /// \param val brightness value
144 void setEastAngle(F32 val); 138 void setEastAngle(F32 val);
145
146 /// get the star brightness value;
147 F32 getEastAngle(); 139 F32 getEastAngle();
148 140
149 141
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 8c95260..27d7513 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -83,22 +83,25 @@ const F32 LLWorld::mWidthInMeters = mWidth * mScale;
83// 83//
84 84
85// allocate the stack 85// allocate the stack
86LLWorld::LLWorld() 86LLWorld::LLWorld() :
87 mLandFarClip(DEFAULT_FAR_PLANE),
88 mLastPacketsIn(0),
89 mLastPacketsOut(0),
90 mLastPacketsLost(0),
91 mMinRegionX(0),
92 mMaxRegionX(0),
93 mMinRegionY(0),
94 mMaxRegionY(0),
95 mSpaceTimeUSec(0)
87{ 96{
88 mSpaceTimeUSec = 0; 97 for (S32 i = 0; i < 8; i++)
89 mLastPacketsIn = 0;
90 mLastPacketsOut = 0;
91 mLastPacketsLost = 0;
92 mLandFarClip = DEFAULT_FAR_PLANE;
93
94 if (gNoRender)
95 { 98 {
96 return; 99 mEdgeWaterObjects[i] = NULL;
97 } 100 }
98 101
99 for (S32 i = 0; i < 8; i++) 102 if (gNoRender)
100 { 103 {
101 mEdgeWaterObjects[i] = NULL; 104 return;
102 } 105 }
103 106
104 LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,4); 107 LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,4);
@@ -1112,6 +1115,10 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data)
1112 1115
1113void send_agent_pause() 1116void send_agent_pause()
1114{ 1117{
1118 // *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause
1119 // the thread monitor to timeout.
1120 LLAppViewer::instance()->stopMainloopTimeout();
1121
1115 // Note: used to check for LLWorld initialization before it became a singleton. 1122 // Note: used to check for LLWorld initialization before it became a singleton.
1116 // Rather than just remove this check I'm changing it to assure that the message 1123 // Rather than just remove this check I'm changing it to assure that the message
1117 // system has been initialized. -MG 1124 // system has been initialized. -MG
@@ -1167,6 +1174,8 @@ void send_agent_resume()
1167 1174
1168 // Reset the FPS counter to avoid an invalid fps 1175 // Reset the FPS counter to avoid an invalid fps
1169 LLViewerStats::getInstance()->mFPSStat.start(); 1176 LLViewerStats::getInstance()->mFPSStat.start();
1177
1178 LLAppViewer::instance()->startMainloopTimeout();
1170} 1179}
1171 1180
1172 1181
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 28ae94a..231f5dc 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -160,6 +160,11 @@ void LLWorldMap::reset()
160 160
161 mNeighborMapWidth = 0; 161 mNeighborMapWidth = 0;
162 mNeighborMapHeight = 0; 162 mNeighborMapHeight = 0;
163
164 for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
165 {
166 mMapLayers[i].clear();
167 }
163} 168}
164 169
165void LLWorldMap::eraseItems() 170void LLWorldMap::eraseItems()
@@ -172,7 +177,6 @@ void LLWorldMap::eraseItems()
172 mInfohubs.clear(); 177 mInfohubs.clear();
173 mPGEvents.clear(); 178 mPGEvents.clear();
174 mMatureEvents.clear(); 179 mMatureEvents.clear();
175 mPopular.clear();
176 mLandForSale.clear(); 180 mLandForSale.clear();
177 mClassifieds.clear(); 181 mClassifieds.clear();
178 } 182 }
@@ -299,12 +303,6 @@ void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
299 sendItemRequest(MAP_ITEM_MATURE_EVENT); 303 sendItemRequest(MAP_ITEM_MATURE_EVENT);
300 } 304 }
301 305
302 if (mPopular.size() == 0)
303 {
304 // Request for popular
305 sendItemRequest(MAP_ITEM_POPULAR);
306 }
307
308 if (mLandForSale.size() == 0) 306 if (mLandForSale.size() == 0)
309 { 307 {
310 // Request for Land For Sale 308 // Request for Land For Sale
@@ -763,12 +761,6 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
763 } 761 }
764 break; 762 break;
765 } 763 }
766 case MAP_ITEM_POPULAR: // popular
767 {
768 new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
769 LLWorldMap::getInstance()->mPopular.push_back(new_item);
770 break;
771 }
772 case MAP_ITEM_LAND_FOR_SALE: // land for sale 764 case MAP_ITEM_LAND_FOR_SALE: // land for sale
773 { 765 {
774 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2); 766 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2);
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index 041dfc0..3f3a8e9 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -191,7 +191,6 @@ public:
191 item_info_list_t mInfohubs; 191 item_info_list_t mInfohubs;
192 item_info_list_t mPGEvents; 192 item_info_list_t mPGEvents;
193 item_info_list_t mMatureEvents; 193 item_info_list_t mMatureEvents;
194 item_info_list_t mPopular;
195 item_info_list_t mLandForSale; 194 item_info_list_t mLandForSale;
196 item_info_list_t mClassifieds; 195 item_info_list_t mClassifieds;
197 196
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 1cc4921..a9e1061 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -38,7 +38,7 @@
38#include "llmath.h" // clampf() 38#include "llmath.h" // clampf()
39#include "llregionhandle.h" 39#include "llregionhandle.h"
40#include "lleventflags.h" 40#include "lleventflags.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llcallingcard.h" 44#include "llcallingcard.h"
@@ -85,7 +85,6 @@ LLUIImagePtr LLWorldMapView::sTrackCircleImage = NULL;
85LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL; 85LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL;
86 86
87LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL; 87LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL;
88LLUIImagePtr LLWorldMapView::sPopularImage = NULL;
89LLUIImagePtr LLWorldMapView::sForSaleImage = NULL; 88LLUIImagePtr LLWorldMapView::sForSaleImage = NULL;
90 89
91F32 LLWorldMapView::sThresholdA = 48.f; 90F32 LLWorldMapView::sThresholdA = 48.f;
@@ -111,22 +110,21 @@ F32 CONE_SIZE = 0.6f;
111 110
112void LLWorldMapView::initClass() 111void LLWorldMapView::initClass()
113{ 112{
114 LLUUID image_id;
115
116 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga"); 113 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga");
117 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); 114 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga");
118 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); 115 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga");
119 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); 116 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga");
120 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); 117 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga");
118
121 sHomeImage = LLUI::getUIImage("map_home.tga"); 119 sHomeImage = LLUI::getUIImage("map_home.tga");
122 sTelehubImage = LLUI::getUIImage("map_telehub.tga"); 120 sTelehubImage = LLUI::getUIImage("map_telehub.tga");
123 sInfohubImage = LLUI::getUIImage("map_infohub.tga"); 121 sInfohubImage = LLUI::getUIImage("map_infohub.tga");
124 sEventImage = LLUI::getUIImage("map_event.tga"); 122 sEventImage = LLUI::getUIImage("map_event.tga");
125 sEventMatureImage = LLUI::getUIImage("map_event_mature.tga"); 123 sEventMatureImage = LLUI::getUIImage("map_event_mature.tga");
124
126 sTrackCircleImage = LLUI::getUIImage("map_track_16.tga"); 125 sTrackCircleImage = LLUI::getUIImage("map_track_16.tga");
127 sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga"); 126 sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga");
128 sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga"); 127 sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga");
129 sPopularImage = LLUI::getUIImage("icon_popular.tga");
130 sForSaleImage = LLUI::getUIImage("icon_for_sale.tga"); 128 sForSaleImage = LLUI::getUIImage("icon_for_sale.tga");
131} 129}
132 130
@@ -138,15 +136,16 @@ void LLWorldMapView::cleanupClass()
138 sAvatarLargeImage = NULL; 136 sAvatarLargeImage = NULL;
139 sAvatarAboveImage = NULL; 137 sAvatarAboveImage = NULL;
140 sAvatarBelowImage = NULL; 138 sAvatarBelowImage = NULL;
139
141 sTelehubImage = NULL; 140 sTelehubImage = NULL;
142 sInfohubImage = NULL; 141 sInfohubImage = NULL;
143 sHomeImage = NULL; 142 sHomeImage = NULL;
144 sEventImage = NULL; 143 sEventImage = NULL;
145 sEventMatureImage = NULL; 144 sEventMatureImage = NULL;
145
146 sTrackCircleImage = NULL; 146 sTrackCircleImage = NULL;
147 sTrackArrowImage = NULL; 147 sTrackArrowImage = NULL;
148 sClassifiedsImage = NULL; 148 sClassifiedsImage = NULL;
149 sPopularImage = NULL;
150 sForSaleImage = NULL; 149 sForSaleImage = NULL;
151} 150}
152 151
@@ -303,17 +302,17 @@ void LLWorldMapView::draw()
303 302
304 // Clear the background alpha to 0 303 // Clear the background alpha to 0
305 gGL.flush(); 304 gGL.flush();
306 glColorMask(FALSE, FALSE, FALSE, TRUE); 305 gGL.setColorMask(false, true);
307 glAlphaFunc(GL_GEQUAL, 0.00f); 306 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
308 gGL.blendFunc(GL_ONE, GL_ZERO); 307 gGL.setSceneBlendType(LLRender::BT_REPLACE);
309 gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f); 308 gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f);
310 gl_rect_2d(0, height, width, 0); 309 gl_rect_2d(0, height, width, 0);
311 } 310 }
312 311
313 gGL.flush(); 312 gGL.flush();
314 glAlphaFunc(GL_GEQUAL, 0.01f); 313 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
315 glColorMask(TRUE, TRUE, TRUE, TRUE); 314 gGL.setColorMask(true, true);
316 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 315 gGL.setSceneBlendType(LLRender::BT_ALPHA);
317 316
318 F32 layer_alpha = 1.f; 317 F32 layer_alpha = 1.f;
319 318
@@ -378,7 +377,7 @@ void LLWorldMapView::draw()
378 // Draw map image into RGB 377 // Draw map image into RGB
379 //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 378 //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
380 gGL.flush(); 379 gGL.flush();
381 glColorMask(TRUE, TRUE, TRUE, FALSE); 380 gGL.setColorMask(true, false);
382 gGL.color4f(1.f, 1.f, 1.f, layer_alpha); 381 gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
383 382
384 gGL.begin(LLVertexBuffer::QUADS); 383 gGL.begin(LLVertexBuffer::QUADS);
@@ -394,7 +393,7 @@ void LLWorldMapView::draw()
394 393
395 // draw an alpha of 1 where the sims are visible 394 // draw an alpha of 1 where the sims are visible
396 gGL.flush(); 395 gGL.flush();
397 glColorMask(FALSE, FALSE, FALSE, TRUE); 396 gGL.setColorMask(false, true);
398 gGL.color4f(1.f, 1.f, 1.f, 1.f); 397 gGL.color4f(1.f, 1.f, 1.f, 1.f);
399 398
400 gGL.begin(LLVertexBuffer::QUADS); 399 gGL.begin(LLVertexBuffer::QUADS);
@@ -410,8 +409,8 @@ void LLWorldMapView::draw()
410 } 409 }
411 410
412 gGL.flush(); 411 gGL.flush();
413 glAlphaFunc(GL_GEQUAL, 0.01f); 412 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
414 glColorMask(TRUE, TRUE, TRUE, TRUE); 413 gGL.setColorMask(true, true);
415 414
416#if 1 415#if 1
417 F32 sim_alpha = 1.f; 416 F32 sim_alpha = 1.f;
@@ -534,7 +533,7 @@ void LLWorldMapView::draw()
534 LLGLSUIDefault gls_ui; 533 LLGLSUIDefault gls_ui;
535 LLViewerImage::bindTexture(simimage); 534 LLViewerImage::bindTexture(simimage);
536 535
537 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 536 gGL.setSceneBlendType(LLRender::BT_ALPHA);
538 F32 alpha = sim_alpha * info->mAlpha; 537 F32 alpha = sim_alpha * info->mAlpha;
539 gGL.color4f(1.f, 1.0f, 1.0f, alpha); 538 gGL.color4f(1.f, 1.0f, 1.0f, alpha);
540 539
@@ -569,8 +568,8 @@ void LLWorldMapView::draw()
569 { 568 {
570 // draw an alpha of 1 where the sims are visible (except NULL sims) 569 // draw an alpha of 1 where the sims are visible (except NULL sims)
571 gGL.flush(); 570 gGL.flush();
572 gGL.blendFunc(GL_ONE, GL_ZERO); 571 gGL.setSceneBlendType(LLRender::BT_REPLACE);
573 glColorMask(FALSE, FALSE, FALSE, TRUE); 572 gGL.setColorMask(false, true);
574 gGL.color4f(1.f, 1.f, 1.f, 1.f); 573 gGL.color4f(1.f, 1.f, 1.f, 1.f);
575 574
576 LLGLSNoTexture gls_no_texture; 575 LLGLSNoTexture gls_no_texture;
@@ -582,14 +581,14 @@ void LLWorldMapView::draw()
582 gGL.end(); 581 gGL.end();
583 582
584 gGL.flush(); 583 gGL.flush();
585 glColorMask(TRUE, TRUE, TRUE, TRUE); 584 gGL.setColorMask(true, true);
586 } 585 }
587 } 586 }
588 587
589 if (info->mAccess == SIM_ACCESS_DOWN) 588 if (info->mAccess == SIM_ACCESS_DOWN)
590 { 589 {
591 // Draw a transparent red square over down sims 590 // Draw a transparent red square over down sims
592 gGL.blendFunc(GL_DST_ALPHA, GL_SRC_ALPHA); 591 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
593 gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f); 592 gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f);
594 593
595 LLGLSNoTexture gls_no_texture; 594 LLGLSNoTexture gls_no_texture;
@@ -606,7 +605,7 @@ void LLWorldMapView::draw()
606 && info->mAccess > SIM_ACCESS_PG 605 && info->mAccess > SIM_ACCESS_PG
607 && gAgent.isTeen()) 606 && gAgent.isTeen())
608 { 607 {
609 gGL.blendFunc(GL_DST_ALPHA, GL_ZERO); 608 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
610 609
611 LLGLSNoTexture gls_no_texture; 610 LLGLSNoTexture gls_no_texture;
612 gGL.color3f(1.f, 0.f, 0.f); 611 gGL.color3f(1.f, 0.f, 0.f);
@@ -667,14 +666,14 @@ void LLWorldMapView::draw()
667 LLGLSUIDefault gls_ui; 666 LLGLSUIDefault gls_ui;
668 { 667 {
669 LLGLSNoTexture gls_no_texture; 668 LLGLSNoTexture gls_no_texture;
670 glAlphaFunc(GL_GEQUAL, 0.0f); 669 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
671 gGL.blendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); 670 gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA);
672 gGL.color4fv( mBackgroundColor.mV ); 671 gGL.color4fv( mBackgroundColor.mV );
673 gl_rect_2d(0, height, width, 0); 672 gl_rect_2d(0, height, width, 0);
674 } 673 }
675 674
676 glAlphaFunc(GL_GEQUAL, 0.01f); 675 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
677 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 676 gGL.setSceneBlendType(LLRender::BT_ALPHA);
678 677
679 // Infohubs 678 // Infohubs
680 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) 679 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB)
@@ -705,11 +704,6 @@ void LLWorldMapView::draw()
705 drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage); 704 drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage);
706 } 705 }
707 706
708 if (gSavedSettings.getBOOL("MapShowPopular"))
709 {
710 drawGenericItems(LLWorldMap::getInstance()->mPopular, sPopularImage);
711 }
712
713 if (gSavedSettings.getBOOL("MapShowEvents")) 707 if (gSavedSettings.getBOOL("MapShowEvents"))
714 { 708 {
715 drawEvents(); 709 drawEvents();
@@ -1533,10 +1527,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1533 { 1527 {
1534 (*it).mSelected = FALSE; 1528 (*it).mSelected = FALSE;
1535 } 1529 }
1536 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1537 {
1538 (*it).mSelected = FALSE;
1539 }
1540 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) 1530 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
1541 { 1531 {
1542 (*it).mSelected = FALSE; 1532 (*it).mSelected = FALSE;
@@ -1578,21 +1568,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1578 } 1568 }
1579 } 1569 }
1580 1570
1581 if (gSavedSettings.getBOOL("MapShowPopular"))
1582 {
1583 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1584 {
1585 LLItemInfo& popular = *it;
1586
1587 if (checkItemHit(x, y, popular, id, true))
1588 {
1589 *hit_type = MAP_ITEM_POPULAR;
1590 mItemPicked = TRUE;
1591 return;
1592 }
1593 }
1594 }
1595
1596 if (gSavedSettings.getBOOL("MapShowLandForSale")) 1571 if (gSavedSettings.getBOOL("MapShowLandForSale"))
1597 { 1572 {
1598 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) 1573 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
@@ -1796,12 +1771,6 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
1796 LLFloaterDirectory::showEvents(event_id); 1771 LLFloaterDirectory::showEvents(event_id);
1797 break; 1772 break;
1798 } 1773 }
1799 case MAP_ITEM_POPULAR:
1800 {
1801 gFloaterWorldMap->close();
1802 LLFloaterDirectory::showPopular(id);
1803 break;
1804 }
1805 case MAP_ITEM_LAND_FOR_SALE: 1774 case MAP_ITEM_LAND_FOR_SALE:
1806 { 1775 {
1807 gFloaterWorldMap->close(); 1776 gFloaterWorldMap->close();
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index 18626b5..079cd47 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -149,7 +149,6 @@ public:
149 static LLUIImagePtr sTrackCircleImage; 149 static LLUIImagePtr sTrackCircleImage;
150 static LLUIImagePtr sTrackArrowImage; 150 static LLUIImagePtr sTrackArrowImage;
151 static LLUIImagePtr sClassifiedsImage; 151 static LLUIImagePtr sClassifiedsImage;
152 static LLUIImagePtr sPopularImage;
153 static LLUIImagePtr sForSaleImage; 152 static LLUIImagePtr sForSaleImage;
154 153
155 static F32 sThresholdA; 154 static F32 sThresholdA;
diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp
index 7179104..9b49eb9 100644
--- a/linden/indra/newview/llxmlrpctransaction.cpp
+++ b/linden/indra/newview/llxmlrpctransaction.cpp
@@ -569,10 +569,10 @@ F64 LLXMLRPCTransaction::transferRate()
569 569
570 double rate_bits_per_sec = impl.mTransferInfo.mSpeedDownload * 8.0; 570 double rate_bits_per_sec = impl.mTransferInfo.mSpeedDownload * 8.0;
571 571
572 llinfos << "Buffer size: " << impl.mResponseText.size() << " B" << llendl; 572 LL_INFOS("AppInit") << "Buffer size: " << impl.mResponseText.size() << " B" << LL_ENDL;
573 llinfos << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << llendl; 573 LL_DEBUGS("AppInit") << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << LL_ENDL;
574 llinfos << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << llendl; 574 LL_DEBUGS("AppInit") << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << LL_ENDL;
575 llinfos << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << llendl; 575 LL_INFOS("AppInit") << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << LL_ENDL;
576 576
577 return rate_bits_per_sec; 577 return rate_bits_per_sec;
578} 578}
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index 33a709c..c817b27 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -23,6 +23,7 @@
23/* Begin PBXBuildFile section */ 23/* Begin PBXBuildFile section */
24 0633E5D209E341F500712406 /* llfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D009E341F500712406 /* llfile.cpp */; }; 24 0633E5D209E341F500712406 /* llfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D009E341F500712406 /* llfile.cpp */; };
25 0633E5D509E3421500712406 /* llstreamtools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D309E3421500712406 /* llstreamtools.cpp */; }; 25 0633E5D509E3421500712406 /* llstreamtools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D309E3421500712406 /* llstreamtools.cpp */; };
26 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07167BBA0DCA8059003FE31D /* llrender.cpp */; };
26 1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */; }; 27 1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */; };
27 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 28 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; };
28 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; 29 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; };
@@ -60,6 +61,9 @@
60 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; }; 61 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; };
61 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; }; 62 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; };
62 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; }; 63 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; };
64 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE082090DA708E900575141 /* llanimstatelabels.cpp */; };
65 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820B0DA708E900575141 /* llstylemap.cpp */; };
66 1AE082110DA708E900575141 /* lltrans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820D0DA708E900575141 /* lltrans.cpp */; };
63 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; }; 67 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; };
64 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; }; 68 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; };
65 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; }; 69 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; };
@@ -557,7 +561,6 @@
557 A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; }; 561 A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; };
558 A241CB9207B3E383001A39E3 /* llmessagethrottle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */; }; 562 A241CB9207B3E383001A39E3 /* llmessagethrottle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */; };
559 A241CB9507B3E3A7001A39E3 /* llperlin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB9407B3E3A7001A39E3 /* llperlin.cpp */; }; 563 A241CB9507B3E3A7001A39E3 /* llperlin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB9407B3E3A7001A39E3 /* llperlin.cpp */; };
560 A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A243B2980C6769AC004DFF19 /* llglimmediate.cpp */; };
561 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */; }; 564 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */; };
562 A2A8C5480C649EE20001FEB2 /* llmultislider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5440C649EE20001FEB2 /* llmultislider.cpp */; }; 565 A2A8C5480C649EE20001FEB2 /* llmultislider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5440C649EE20001FEB2 /* llmultislider.cpp */; };
563 A2A8C5490C649EE20001FEB2 /* llmultisliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5460C649EE20001FEB2 /* llmultisliderctrl.cpp */; }; 566 A2A8C5490C649EE20001FEB2 /* llmultisliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5460C649EE20001FEB2 /* llmultisliderctrl.cpp */; };
@@ -836,6 +839,8 @@
836 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; }; 839 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; };
837 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; }; 840 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; };
838 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; }; 841 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; };
842 FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */; };
843 FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */; };
839 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; }; 844 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; };
840 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; }; 845 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; };
841 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; }; 846 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; };
@@ -988,6 +993,8 @@
988 0633E5D109E341F500712406 /* llfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfile.h; sourceTree = "<group>"; }; 993 0633E5D109E341F500712406 /* llfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfile.h; sourceTree = "<group>"; };
989 0633E5D309E3421500712406 /* llstreamtools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstreamtools.cpp; sourceTree = "<group>"; }; 994 0633E5D309E3421500712406 /* llstreamtools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstreamtools.cpp; sourceTree = "<group>"; };
990 0633E5D409E3421500712406 /* llstreamtools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstreamtools.h; sourceTree = "<group>"; }; 995 0633E5D409E3421500712406 /* llstreamtools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstreamtools.h; sourceTree = "<group>"; };
996 07167BBA0DCA8059003FE31D /* llrender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llrender.cpp; sourceTree = "<group>"; };
997 07167BBB0DCA8059003FE31D /* llrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llrender.h; sourceTree = "<group>"; };
991 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 998 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
992 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase64.cpp; sourceTree = "<group>"; }; 999 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase64.cpp; sourceTree = "<group>"; };
993 1A02016E0B7A85DE00D5C589 /* llbase64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbase64.h; sourceTree = "<group>"; }; 1000 1A02016E0B7A85DE00D5C589 /* llbase64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbase64.h; sourceTree = "<group>"; };
@@ -1075,6 +1082,12 @@
1075 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = "<group>"; }; 1082 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = "<group>"; };
1076 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhud.cpp; sourceTree = "<group>"; }; 1083 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhud.cpp; sourceTree = "<group>"; };
1077 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = "<group>"; }; 1084 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = "<group>"; };
1085 1AE082090DA708E900575141 /* llanimstatelabels.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llanimstatelabels.cpp; sourceTree = "<group>"; };
1086 1AE0820A0DA708E900575141 /* llanimstatelabels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llanimstatelabels.h; sourceTree = "<group>"; };
1087 1AE0820B0DA708E900575141 /* llstylemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llstylemap.cpp; sourceTree = "<group>"; };
1088 1AE0820C0DA708E900575141 /* llstylemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llstylemap.h; sourceTree = "<group>"; };
1089 1AE0820D0DA708E900575141 /* lltrans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lltrans.cpp; sourceTree = "<group>"; };
1090 1AE0820E0DA708E900575141 /* lltrans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lltrans.h; sourceTree = "<group>"; };
1078 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; }; 1091 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; };
1079 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; }; 1092 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; };
1080 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; }; 1093 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; };
@@ -2113,8 +2126,6 @@
2113 A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = "<group>"; }; 2126 A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = "<group>"; };
2114 A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = "<group>"; }; 2127 A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = "<group>"; };
2115 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = "<group>"; }; 2128 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = "<group>"; };
2116 A243B2980C6769AC004DFF19 /* llglimmediate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llglimmediate.cpp; sourceTree = "<group>"; };
2117 A243B2990C6769AC004DFF19 /* llglimmediate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llglimmediate.h; sourceTree = "<group>"; };
2118 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhardwaresettings.cpp; sourceTree = "<group>"; }; 2129 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhardwaresettings.cpp; sourceTree = "<group>"; };
2119 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterhardwaresettings.h; sourceTree = "<group>"; }; 2130 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterhardwaresettings.h; sourceTree = "<group>"; };
2120 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = "<group>"; }; 2131 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = "<group>"; };
@@ -2396,6 +2407,9 @@
2396 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2407 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2397 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2408 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; };
2398 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2409 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2410 FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwatchdog.cpp; sourceTree = "<group>"; };
2411 FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwindebug.cpp; sourceTree = "<group>"; };
2412 FE065EA60D8B0F170089E9F1 /* llwatchdog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llwatchdog.h; sourceTree = "<group>"; };
2399 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib2.dylib; path = "../../libraries/universal-darwin/lib_debug/libllmozlib2.dylib"; sourceTree = SOURCE_ROOT; }; 2413 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib2.dylib; path = "../../libraries/universal-darwin/lib_debug/libllmozlib2.dylib"; sourceTree = SOURCE_ROOT; };
2400 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lllcd.cpp; sourceTree = SOURCE_ROOT; }; 2414 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lllcd.cpp; sourceTree = SOURCE_ROOT; };
2401 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; }; 2415 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; };
@@ -2654,10 +2668,19 @@
2654 children = ( 2668 children = (
2655 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */, 2669 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */,
2656 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */, 2670 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */,
2671 1AE082090DA708E900575141 /* llanimstatelabels.cpp */,
2672 1AE0820A0DA708E900575141 /* llanimstatelabels.h */,
2673 1AE0820B0DA708E900575141 /* llstylemap.cpp */,
2674 1AE0820C0DA708E900575141 /* llstylemap.h */,
2675 1AE0820D0DA708E900575141 /* lltrans.cpp */,
2676 1AE0820E0DA708E900575141 /* lltrans.h */,
2657 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */, 2677 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */,
2658 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */, 2678 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */,
2659 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */, 2679 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */,
2660 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */, 2680 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */,
2681 FE065EA60D8B0F170089E9F1 /* llwatchdog.h */,
2682 FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */,
2683 FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */,
2661 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */, 2684 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */,
2662 FE0AEE490D2D9C6E0097256A /* lllcd.h */, 2685 FE0AEE490D2D9C6E0097256A /* lllcd.h */,
2663 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */, 2686 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */,
@@ -4235,8 +4258,8 @@
4235 D628314D0B4F3FA100F8830F /* llrender */ = { 4258 D628314D0B4F3FA100F8830F /* llrender */ = {
4236 isa = PBXGroup; 4259 isa = PBXGroup;
4237 children = ( 4260 children = (
4238 A243B2980C6769AC004DFF19 /* llglimmediate.cpp */, 4261 07167BBA0DCA8059003FE31D /* llrender.cpp */,
4239 A243B2990C6769AC004DFF19 /* llglimmediate.h */, 4262 07167BBB0DCA8059003FE31D /* llrender.h */,
4240 A30273550B3A13D800704420 /* llvertexbuffer.cpp */, 4263 A30273550B3A13D800704420 /* llvertexbuffer.cpp */,
4241 A30273560B3A13D800704420 /* llvertexbuffer.h */, 4264 A30273560B3A13D800704420 /* llvertexbuffer.h */,
4242 D628315B0B4F3FA100F8830F /* llfont.cpp */, 4265 D628315B0B4F3FA100F8830F /* llfont.cpp */,
@@ -5018,7 +5041,7 @@
5018 A2A8C5680C649F490001FEB2 /* llwldaycycle.cpp in Sources */, 5041 A2A8C5680C649F490001FEB2 /* llwldaycycle.cpp in Sources */,
5019 A2A8C5690C649F490001FEB2 /* llwlparammanager.cpp in Sources */, 5042 A2A8C5690C649F490001FEB2 /* llwlparammanager.cpp in Sources */,
5020 A2A8C56A0C649F490001FEB2 /* llwlparamset.cpp in Sources */, 5043 A2A8C56A0C649F490001FEB2 /* llwlparamset.cpp in Sources */,
5021 A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */, 5044 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */,
5022 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */, 5045 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */,
5023 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */, 5046 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */,
5024 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */, 5047 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */,
@@ -5027,10 +5050,15 @@
5027 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */, 5050 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */,
5028 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */, 5051 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */,
5029 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */, 5052 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */,
5053 FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */,
5054 FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */,
5030 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */, 5055 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */,
5031 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */, 5056 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */,
5032 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */, 5057 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */,
5033 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */, 5058 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */,
5059 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */,
5060 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */,
5061 1AE082110DA708E900575141 /* lltrans.cpp in Sources */,
5034 ); 5062 );
5035 runOnlyForDeploymentPostprocessing = 0; 5063 runOnlyForDeploymentPostprocessing = 0;
5036 }; 5064 };
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 3fe72e6..a378434 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -295,6 +295,9 @@
295 RelativePath=".\llagentpilot.cpp"> 295 RelativePath=".\llagentpilot.cpp">
296 </File> 296 </File>
297 <File 297 <File
298 RelativePath=".\llanimstatelabels.cpp">
299 </File>
300 <File
298 RelativePath=".\llappviewer.cpp"> 301 RelativePath=".\llappviewer.cpp">
299 </File> 302 </File>
300 <File 303 <File
@@ -1057,6 +1060,9 @@
1057 RelativePath=".\llstatview.cpp"> 1060 RelativePath=".\llstatview.cpp">
1058 </File> 1061 </File>
1059 <File 1062 <File
1063 RelativePath=".\llstylemap.cpp">
1064 </File>
1065 <File
1060 RelativePath=".\llsurface.cpp"> 1066 RelativePath=".\llsurface.cpp">
1061 </File> 1067 </File>
1062 <File 1068 <File
@@ -1141,6 +1147,9 @@
1141 RelativePath=".\lltracker.cpp"> 1147 RelativePath=".\lltracker.cpp">
1142 </File> 1148 </File>
1143 <File 1149 <File
1150 RelativePath=".\lltrans.cpp">
1151 </File>
1152 <File
1144 RelativePath=".\lluploaddialog.cpp"> 1153 RelativePath=".\lluploaddialog.cpp">
1145 </File> 1154 </File>
1146 <File 1155 <File
@@ -1404,6 +1413,9 @@
1404 RelativePath=".\llvowlsky.cpp"> 1413 RelativePath=".\llvowlsky.cpp">
1405 </File> 1414 </File>
1406 <File 1415 <File
1416 RelativePath=".\llwatchdog.cpp">
1417 </File>
1418 <File
1407 RelativePath=".\llwaterparammanager.cpp"> 1419 RelativePath=".\llwaterparammanager.cpp">
1408 </File> 1420 </File>
1409 <File 1421 <File
@@ -1478,6 +1490,9 @@
1478 RelativePath=".\llagentpilot.h"> 1490 RelativePath=".\llagentpilot.h">
1479 </File> 1491 </File>
1480 <File 1492 <File
1493 RelativePath=".\llanimstatelabels.h">
1494 </File>
1495 <File
1481 RelativePath=".\llappearance.h"> 1496 RelativePath=".\llappearance.h">
1482 </File> 1497 </File>
1483 <File 1498 <File
@@ -1646,6 +1661,9 @@
1646 RelativePath=".\llfilist.h"> 1661 RelativePath=".\llfilist.h">
1647 </File> 1662 </File>
1648 <File 1663 <File
1664 RelativePath="..\llcommon\llfindlocale.h">
1665 </File>
1666 <File
1649 RelativePath=".\llfirstuse.h"> 1667 RelativePath=".\llfirstuse.h">
1650 </File> 1668 </File>
1651 <File 1669 <File
@@ -2252,6 +2270,9 @@
2252 RelativePath=".\llstatview.h"> 2270 RelativePath=".\llstatview.h">
2253 </File> 2271 </File>
2254 <File 2272 <File
2273 RelativePath=".\llstylemap.h">
2274 </File>
2275 <File
2255 RelativePath=".\llsurface.h"> 2276 RelativePath=".\llsurface.h">
2256 </File> 2277 </File>
2257 <File 2278 <File
@@ -2342,6 +2363,9 @@
2342 RelativePath=".\lltracker.h"> 2363 RelativePath=".\lltracker.h">
2343 </File> 2364 </File>
2344 <File 2365 <File
2366 RelativePath=".\lltrans.h">
2367 </File>
2368 <File
2345 RelativePath=".\lluploaddialog.h"> 2369 RelativePath=".\lluploaddialog.h">
2346 </File> 2370 </File>
2347 <File 2371 <File
@@ -2540,6 +2564,9 @@
2540 RelativePath=".\llvowlsky.h"> 2564 RelativePath=".\llvowlsky.h">
2541 </File> 2565 </File>
2542 <File 2566 <File
2567 RelativePath=".\llwatchdog.h">
2568 </File>
2569 <File
2543 RelativePath=".\llwearable.h"> 2570 RelativePath=".\llwearable.h">
2544 </File> 2571 </File>
2545 <File 2572 <File
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 24a3459..9d9a9d2 100644
--- a/linden/indra/newview/newview_vc8.vcproj
+++ b/linden/indra/newview/newview_vc8.vcproj
@@ -69,7 +69,7 @@
69 /> 69 />
70 <Tool 70 <Tool
71 Name="VCLinkerTool" 71 Name="VCLinkerTool"
72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-sgd-1_34_1.lib libboost_signals-vc80-mt-sgd-1_34_1.lib libboost_program_options-vc80-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib llmozlib2d-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-sgd-1_34_1.lib libboost_signals-vc80-mt-sgd-1_34_1.lib libboost_program_options-vc80-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib llmozlib2d-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
73 OutputFile="$(ConfigurationName)/debugview.exe" 73 OutputFile="$(ConfigurationName)/debugview.exe"
74 LinkIncremental="2" 74 LinkIncremental="2"
75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -166,7 +166,7 @@
166 /> 166 />
167 <Tool 167 <Tool
168 Name="VCLinkerTool" 168 Name="VCLinkerTool"
169 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 169 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
170 OutputFile="$(ConfigurationName)/newview.exe" 170 OutputFile="$(ConfigurationName)/newview.exe"
171 LinkIncremental="2" 171 LinkIncremental="2"
172 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 172 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -263,7 +263,7 @@
263 <Tool 263 <Tool
264 Name="VCLinkerTool" 264 Name="VCLinkerTool"
265 LinkLibraryDependencies="false" 265 LinkLibraryDependencies="false"
266 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 266 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
267 OutputFile="$(ConfigurationName)/SecondLife.exe" 267 OutputFile="$(ConfigurationName)/SecondLife.exe"
268 LinkIncremental="0" 268 LinkIncremental="0"
269 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 269 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -357,7 +357,7 @@
357 /> 357 />
358 <Tool 358 <Tool
359 Name="VCLinkerTool" 359 Name="VCLinkerTool"
360 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib lgLcd.lib EZ_LCD_Wrapper_vc8.lib libndofdev.lib" 360 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib lgLcd.lib EZ_LCD_Wrapper_vc8.lib libndofdev.lib"
361 OutputFile="$(ConfigurationName)/newview_noopt.exe" 361 OutputFile="$(ConfigurationName)/newview_noopt.exe"
362 LinkIncremental="2" 362 LinkIncremental="2"
363 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 363 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -421,6 +421,10 @@
421 > 421 >
422 </File> 422 </File>
423 <File 423 <File
424 RelativePath=".\llanimstatelabels.cpp"
425 >
426 </File>
427 <File
424 RelativePath=".\llappviewer.cpp" 428 RelativePath=".\llappviewer.cpp"
425 > 429 >
426 </File> 430 </File>
@@ -1437,6 +1441,10 @@
1437 > 1441 >
1438 </File> 1442 </File>
1439 <File 1443 <File
1444 RelativePath=".\llstylemap.cpp"
1445 >
1446 </File>
1447 <File
1440 RelativePath=".\llsurface.cpp" 1448 RelativePath=".\llsurface.cpp"
1441 > 1449 >
1442 </File> 1450 </File>
@@ -1549,6 +1557,10 @@
1549 > 1557 >
1550 </File> 1558 </File>
1551 <File 1559 <File
1560 RelativePath=".\lltrans.cpp"
1561 >
1562 </File>
1563 <File
1552 RelativePath=".\lluploaddialog.cpp" 1564 RelativePath=".\lluploaddialog.cpp"
1553 > 1565 >
1554 </File> 1566 </File>
@@ -1905,6 +1917,10 @@
1905 > 1917 >
1906 </File> 1918 </File>
1907 <File 1919 <File
1920 RelativePath=".\llwatchdog.cpp"
1921 >
1922 </File>
1923 <File
1908 RelativePath=".\llwaterparammanager.cpp" 1924 RelativePath=".\llwaterparammanager.cpp"
1909 > 1925 >
1910 </File> 1926 </File>
@@ -1995,6 +2011,10 @@
1995 > 2011 >
1996 </File> 2012 </File>
1997 <File 2013 <File
2014 RelativePath=".\llanimstatelabels.h"
2015 >
2016 </File>
2017 <File
1998 RelativePath=".\llappearance.h" 2018 RelativePath=".\llappearance.h"
1999 > 2019 >
2000 </File> 2020 </File>
@@ -2679,6 +2699,10 @@
2679 > 2699 >
2680 </File> 2700 </File>
2681 <File 2701 <File
2702 RelativePath=".\llmimetypes.h"
2703 >
2704 </File>
2705 <File
2682 RelativePath=".\llmorphview.h" 2706 RelativePath=".\llmorphview.h"
2683 > 2707 >
2684 </File> 2708 </File>
@@ -3031,6 +3055,10 @@
3031 > 3055 >
3032 </File> 3056 </File>
3033 <File 3057 <File
3058 RelativePath=".\llstylemap.h"
3059 >
3060 </File>
3061 <File
3034 RelativePath=".\llsurface.h" 3062 RelativePath=".\llsurface.h"
3035 > 3063 >
3036 </File> 3064 </File>
@@ -3151,6 +3179,10 @@
3151 > 3179 >
3152 </File> 3180 </File>
3153 <File 3181 <File
3182 RelativePath=".\lltrans.h"
3183 >
3184 </File>
3185 <File
3154 RelativePath=".\lluiconstants.h" 3186 RelativePath=".\lluiconstants.h"
3155 > 3187 >
3156 </File> 3188 </File>
@@ -3423,6 +3455,10 @@
3423 > 3455 >
3424 </File> 3456 </File>
3425 <File 3457 <File
3458 RelativePath=".\llwatchdog.h"
3459 >
3460 </File>
3461 <File
3426 RelativePath=".\llwaterparammanager.h" 3462 RelativePath=".\llwaterparammanager.h"
3427 > 3463 >
3428 </File> 3464 </File>
diff --git a/linden/indra/newview/newview_vc9.vcproj b/linden/indra/newview/newview_vc9.vcproj
index 40851cb..6b693b5 100644
--- a/linden/indra/newview/newview_vc9.vcproj
+++ b/linden/indra/newview/newview_vc9.vcproj
@@ -406,6 +406,10 @@
406 > 406 >
407 </File> 407 </File>
408 <File 408 <File
409 RelativePath=".\llanimstatelabels.cpp"
410 >
411 </File>
412 <File
409 RelativePath=".\llappviewer.cpp" 413 RelativePath=".\llappviewer.cpp"
410 > 414 >
411 </File> 415 </File>
@@ -1422,6 +1426,10 @@
1422 > 1426 >
1423 </File> 1427 </File>
1424 <File 1428 <File
1429 RelativePath=".\llstylemap.cpp"
1430 >
1431 </File>
1432 <File
1425 RelativePath=".\llsurface.cpp" 1433 RelativePath=".\llsurface.cpp"
1426 > 1434 >
1427 </File> 1435 </File>
@@ -1534,6 +1542,10 @@
1534 > 1542 >
1535 </File> 1543 </File>
1536 <File 1544 <File
1545 RelativePath=".\lltrans.cpp"
1546 >
1547 </File>
1548 <File
1537 RelativePath=".\lluploaddialog.cpp" 1549 RelativePath=".\lluploaddialog.cpp"
1538 > 1550 >
1539 </File> 1551 </File>
@@ -1890,6 +1902,10 @@
1890 > 1902 >
1891 </File> 1903 </File>
1892 <File 1904 <File
1905 RelativePath=".\llwatchdog.cpp"
1906 >
1907 </File>
1908 <File
1893 RelativePath=".\llwaterparammanager.cpp" 1909 RelativePath=".\llwaterparammanager.cpp"
1894 > 1910 >
1895 </File> 1911 </File>
@@ -1980,6 +1996,10 @@
1980 > 1996 >
1981 </File> 1997 </File>
1982 <File 1998 <File
1999 RelativePath=".\llanimstatelabels.h"
2000 >
2001 </File>
2002 <File
1983 RelativePath=".\llappearance.h" 2003 RelativePath=".\llappearance.h"
1984 > 2004 >
1985 </File> 2005 </File>
@@ -2664,6 +2684,10 @@
2664 > 2684 >
2665 </File> 2685 </File>
2666 <File 2686 <File
2687 RelativePath=".\llmimetypes.h"
2688 >
2689 </File>
2690 <File
2667 RelativePath=".\llmorphview.h" 2691 RelativePath=".\llmorphview.h"
2668 > 2692 >
2669 </File> 2693 </File>
@@ -3016,6 +3040,10 @@
3016 > 3040 >
3017 </File> 3041 </File>
3018 <File 3042 <File
3043 RelativePath=".\llstylemap.h"
3044 >
3045 </File>
3046 <File
3019 RelativePath=".\llsurface.h" 3047 RelativePath=".\llsurface.h"
3020 > 3048 >
3021 </File> 3049 </File>
@@ -3136,6 +3164,10 @@
3136 > 3164 >
3137 </File> 3165 </File>
3138 <File 3166 <File
3167 RelativePath=".\lltrans.h"
3168 >
3169 </File>
3170 <File
3139 RelativePath=".\lluiconstants.h" 3171 RelativePath=".\lluiconstants.h"
3140 > 3172 >
3141 </File> 3173 </File>
@@ -3408,6 +3440,10 @@
3408 > 3440 >
3409 </File> 3441 </File>
3410 <File 3442 <File
3443 RelativePath=".\llwatchdog.h"
3444 >
3445 </File>
3446 <File
3411 RelativePath=".\llwaterparammanager.h" 3447 RelativePath=".\llwaterparammanager.h"
3412 > 3448 >
3413 </File> 3449 </File>
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 5ec3310..20fd5a7 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -50,7 +50,7 @@
50#include "v3color.h" 50#include "v3color.h"
51#include "llui.h" 51#include "llui.h"
52#include "llglheaders.h" 52#include "llglheaders.h"
53#include "llglimmediate.h" 53#include "llrender.h"
54 54
55// newview includes 55// newview includes
56#include "llagent.h" 56#include "llagent.h"
@@ -125,6 +125,7 @@ extern S32 gBoxFrame;
125extern BOOL gRenderLightGlows; 125extern BOOL gRenderLightGlows;
126extern BOOL gHideSelectedObjects; 126extern BOOL gHideSelectedObjects;
127extern BOOL gDisplaySwapBuffers; 127extern BOOL gDisplaySwapBuffers;
128extern BOOL gDebugGL;
128 129
129// hack counter for rendering a fixed number of frames after toggling 130// hack counter for rendering a fixed number of frames after toggling
130// fullscreen to work around DEV-5361 131// fullscreen to work around DEV-5361
@@ -134,6 +135,7 @@ BOOL gAvatarBacklight = FALSE;
134 135
135BOOL gRenderForSelect = FALSE; 136BOOL gRenderForSelect = FALSE;
136 137
138BOOL gDebugPipeline = FALSE;
137LLPipeline gPipeline; 139LLPipeline gPipeline;
138const LLMatrix4* gGLLastMatrix = NULL; 140const LLMatrix4* gGLLastMatrix = NULL;
139 141
@@ -504,11 +506,7 @@ void LLPipeline::createGLBuffers()
504 res = 128; 506 res = 128;
505 mCubeBuffer = new LLCubeMap(); 507 mCubeBuffer = new LLCubeMap();
506 mCubeBuffer->initGL(); 508 mCubeBuffer->initGL();
507 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName()); 509 mCubeBuffer->setReflection();
508 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
509 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
510 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
511 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
512 510
513 for (U32 i = 0; i < 6; i++) 511 for (U32 i = 0; i < 6; i++)
514 { 512 {
@@ -1178,7 +1176,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1178 LLGLDisable test(GL_ALPHA_TEST); 1176 LLGLDisable test(GL_ALPHA_TEST);
1179 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 1177 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
1180 1178
1181 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1179 gGL.setColorMask(false, false);
1182 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 1180 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
1183 1181
1184 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 1182 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -1236,7 +1234,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1236 sCull->pushDrawable(gSky.mVOGroundp->mDrawable); 1234 sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
1237 } 1235 }
1238 1236
1239 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1237 gGL.setColorMask(true, false);
1240 glPopMatrix(); 1238 glPopMatrix();
1241 1239
1242 if (to_texture) 1240 if (to_texture)
@@ -1313,11 +1311,11 @@ void LLPipeline::doOcclusion(LLCamera& camera)
1313 LLVertexBuffer::unbind(); 1311 LLVertexBuffer::unbind();
1314 if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION)) 1312 if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
1315 { 1313 {
1316 glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); 1314 gGL.setColorMask(true, false, false, false);
1317 } 1315 }
1318 else 1316 else
1319 { 1317 {
1320 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1318 gGL.setColorMask(false, false);
1321 } 1319 }
1322 LLGLDisable blend(GL_BLEND); 1320 LLGLDisable blend(GL_BLEND);
1323 LLGLDisable test(GL_ALPHA_TEST); 1321 LLGLDisable test(GL_ALPHA_TEST);
@@ -1334,7 +1332,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
1334 } 1332 }
1335 } 1333 }
1336 1334
1337 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1335 gGL.setColorMask(true, false);
1338 glFlush(); 1336 glFlush();
1339} 1337}
1340 1338
@@ -2262,11 +2260,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2262 LLVertexBuffer::unbind(); 2260 LLVertexBuffer::unbind();
2263 2261
2264 // Do verification of GL state 2262 // Do verification of GL state
2265#ifndef LL_RELEASE_FOR_DOWNLOAD
2266 LLGLState::checkStates(); 2263 LLGLState::checkStates();
2267 LLGLState::checkTextureChannels(); 2264 LLGLState::checkTextureChannels();
2268 LLGLState::checkClientArrays(); 2265 LLGLState::checkClientArrays();
2269#endif
2270 if (mRenderDebugMask & RENDER_DEBUG_VERIFY) 2266 if (mRenderDebugMask & RENDER_DEBUG_VERIFY)
2271 { 2267 {
2272 if (!verify()) 2268 if (!verify())
@@ -2384,19 +2380,18 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2384 } 2380 }
2385 poolp->endRenderPass(i); 2381 poolp->endRenderPass(i);
2386 LLVertexBuffer::unbind(); 2382 LLVertexBuffer::unbind();
2387#ifndef LL_RELEASE_FOR_DOWNLOAD 2383 if (gDebugGL || gDebugPipeline)
2388# if LL_DEBUG_GL
2389 GLint depth;
2390 glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth);
2391 if (depth > 3)
2392 { 2384 {
2393 llerrs << "GL matrix stack corrupted!" << llendl; 2385 GLint depth;
2386 glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth);
2387 if (depth > 3)
2388 {
2389 llerrs << "GL matrix stack corrupted!" << llendl;
2390 }
2391 LLGLState::checkStates();
2392 LLGLState::checkTextureChannels();
2393 LLGLState::checkClientArrays();
2394 } 2394 }
2395 LLGLState::checkStates();
2396 LLGLState::checkTextureChannels();
2397 LLGLState::checkClientArrays();
2398# endif
2399#endif
2400 } 2395 }
2401 } 2396 }
2402 else 2397 else
@@ -2417,11 +2412,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2417 } 2412 }
2418 2413
2419 LLVertexBuffer::unbind(); 2414 LLVertexBuffer::unbind();
2420#ifndef LL_RELEASE_FOR_DOWNLOAD
2421 LLGLState::checkStates(); 2415 LLGLState::checkStates();
2422 LLGLState::checkTextureChannels(); 2416 LLGLState::checkTextureChannels();
2423 LLGLState::checkClientArrays(); 2417 LLGLState::checkClientArrays();
2424#endif
2425 2418
2426 gGLLastMatrix = NULL; 2419 gGLLastMatrix = NULL;
2427 glLoadMatrixd(gGLModelView); 2420 glLoadMatrixd(gGLModelView);
@@ -2436,12 +2429,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2436 2429
2437 stop_glerror(); 2430 stop_glerror();
2438 2431
2439#ifndef LL_RELEASE_FOR_DOWNLOAD 2432 LLGLState::checkStates();
2440 LLGLState::checkStates(); 2433 LLGLState::checkTextureChannels();
2441 LLGLState::checkTextureChannels(); 2434 LLGLState::checkClientArrays();
2442 LLGLState::checkClientArrays(); 2435
2443#endif
2444
2445 if (!sReflectionRender) 2436 if (!sReflectionRender)
2446 { 2437 {
2447 renderHighlights(); 2438 renderHighlights();
@@ -2475,11 +2466,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2475 2466
2476 LLVertexBuffer::unbind(); 2467 LLVertexBuffer::unbind();
2477 2468
2478#ifndef LL_RELEASE_FOR_DOWNLOAD
2479 LLGLState::checkStates(); 2469 LLGLState::checkStates();
2480 LLGLState::checkTextureChannels(); 2470 LLGLState::checkTextureChannels();
2481 LLGLState::checkClientArrays(); 2471 LLGLState::checkClientArrays();
2482#endif
2483} 2472}
2484 2473
2485void LLPipeline::renderGeomDeferred() 2474void LLPipeline::renderGeomDeferred()
@@ -2514,7 +2503,7 @@ void LLPipeline::renderDebug()
2514 2503
2515 gGLLastMatrix = NULL; 2504 gGLLastMatrix = NULL;
2516 glLoadMatrixd(gGLModelView); 2505 glLoadMatrixd(gGLModelView);
2517 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2506 gGL.setColorMask(true, false);
2518 2507
2519 // Debug stuff. 2508 // Debug stuff.
2520 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 2509 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -2585,7 +2574,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2585{ 2574{
2586 assertInitialized(); 2575 assertInitialized();
2587 2576
2588 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2577 gGL.setColorMask(true, false);
2589 gPipeline.resetDrawOrders(); 2578 gPipeline.resetDrawOrders();
2590 2579
2591 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter) 2580 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
@@ -2607,12 +2596,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2607 LLVertexBuffer::unbind(); 2596 LLVertexBuffer::unbind();
2608 2597
2609 //for each drawpool 2598 //for each drawpool
2610#ifndef LL_RELEASE_FOR_DOWNLOAD
2611 LLGLState::checkStates(); 2599 LLGLState::checkStates();
2612 LLGLState::checkTextureChannels(); 2600 LLGLState::checkTextureChannels();
2613 LLGLState::checkClientArrays(); 2601 LLGLState::checkClientArrays();
2614 U32 last_type = 0; 2602 U32 last_type = 0;
2615#endif 2603
2616 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) 2604 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2617 { 2605 {
2618 LLDrawPool *poolp = *iter; 2606 LLDrawPool *poolp = *iter;
@@ -2624,7 +2612,6 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2624 gGLLastMatrix = NULL; 2612 gGLLastMatrix = NULL;
2625 glLoadMatrixd(gGLModelView); 2613 glLoadMatrixd(gGLModelView);
2626 2614
2627#ifndef LL_RELEASE_FOR_DOWNLOAD
2628 if (poolp->getType() != last_type) 2615 if (poolp->getType() != last_type)
2629 { 2616 {
2630 last_type = poolp->getType(); 2617 last_type = poolp->getType();
@@ -2632,32 +2619,21 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2632 LLGLState::checkTextureChannels(); 2619 LLGLState::checkTextureChannels();
2633 LLGLState::checkClientArrays(); 2620 LLGLState::checkClientArrays();
2634 } 2621 }
2635#endif
2636 } 2622 }
2637 } 2623 }
2638 2624
2639 LLGLEnable alpha_test(GL_ALPHA_TEST); 2625 LLGLEnable alpha_test(GL_ALPHA_TEST);
2640 if (gPickTransparent) 2626 if (gPickTransparent)
2641 { 2627 {
2642 glAlphaFunc(GL_GEQUAL, 0.0f); 2628 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
2643 } 2629 }
2644 else 2630 else
2645 { 2631 {
2646 glAlphaFunc(GL_GREATER, 0.2f); 2632 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
2647 } 2633 }
2648 2634
2649 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 2635 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
2650 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 2636 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
2651 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
2652
2653 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
2654 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
2655
2656 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
2657 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
2658
2659 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
2660 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
2661 2637
2662 U32 prim_mask = LLVertexBuffer::MAP_VERTEX | 2638 U32 prim_mask = LLVertexBuffer::MAP_VERTEX |
2663 LLVertexBuffer::MAP_TEXCOORD; 2639 LLVertexBuffer::MAP_TEXCOORD;
@@ -2758,12 +2734,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2758 glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); 2734 glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
2759 } 2735 }
2760 2736
2761 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 2737 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
2762 2738
2763 LLVertexBuffer::unbind(); 2739 LLVertexBuffer::unbind();
2764 LLVertexBuffer::unbind();
2765 2740
2766 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 2741 gGL.setColorMask(true, true);
2767} 2742}
2768 2743
2769void LLPipeline::renderFaceForUVSelect(LLFace* facep) 2744void LLPipeline::renderFaceForUVSelect(LLFace* facep)
@@ -4118,11 +4093,9 @@ void apply_cube_face_rotation(U32 face)
4118} 4093}
4119void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) 4094void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4120{ 4095{
4121#ifndef LL_RELEASE_FOR_DOWNLOAD
4122 LLGLState::checkStates(); 4096 LLGLState::checkStates();
4123 LLGLState::checkTextureChannels(); 4097 LLGLState::checkTextureChannels();
4124 LLGLState::checkClientArrays(); 4098 LLGLState::checkClientArrays();
4125#endif
4126 4099
4127 assertInitialized(); 4100 assertInitialized();
4128 4101
@@ -4140,10 +4113,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4140 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); 4113 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
4141 if (width != res) 4114 if (width != res)
4142 { 4115 {
4143 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 4116 cube_map->setReflection();
4144 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4145 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
4146 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
4147 4117
4148 for (U32 i = 0; i < 6; i++) 4118 for (U32 i = 0; i < 6; i++)
4149 { 4119 {
@@ -4224,9 +4194,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4224 gPipeline.stateSort(cube_cam, result); 4194 gPipeline.stateSort(cube_cam, result);
4225 4195
4226 glClearColor(0,0,0,0); 4196 glClearColor(0,0,0,0);
4227 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4197 gGL.setColorMask(true, true);
4228 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 4198 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
4229 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4199 gGL.setColorMask(true, false);
4230 stop_glerror(); 4200 stop_glerror();
4231 gPipeline.renderGeom(cube_cam); 4201 gPipeline.renderGeom(cube_cam);
4232 } 4202 }
@@ -4254,12 +4224,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4254 LLPipeline::sSkipUpdate = FALSE; 4224 LLPipeline::sSkipUpdate = FALSE;
4255 LLPipeline::sReflectionRender = FALSE; 4225 LLPipeline::sReflectionRender = FALSE;
4256 4226
4257#ifndef LL_RELEASE_FOR_DOWNLOAD
4258 LLGLState::checkStates(); 4227 LLGLState::checkStates();
4259 LLGLState::checkTextureChannels(); 4228 LLGLState::checkTextureChannels();
4260 LLGLState::checkClientArrays(); 4229 LLGLState::checkClientArrays();
4261#endif
4262
4263} 4230}
4264 4231
4265//send cube map vertices and texture coordinates 4232//send cube map vertices and texture coordinates
@@ -4336,18 +4303,16 @@ void validate_framebuffer_object()
4336 4303
4337void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) 4304void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4338{ 4305{
4339#ifndef LL_RELEASE_FOR_DOWNLOAD
4340 LLGLState::checkStates(); 4306 LLGLState::checkStates();
4341 LLGLState::checkTextureChannels(); 4307 LLGLState::checkTextureChannels();
4342 LLGLState::checkClientArrays(); 4308 LLGLState::checkClientArrays();
4343#endif
4344 4309
4345 assertInitialized(); 4310 assertInitialized();
4346 4311
4347 U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes"); 4312 U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes");
4348 enableLightsFullbright(LLColor4::white); 4313 enableLightsFullbright(LLColor4::white);
4349 LLGLDepthTest depth(GL_FALSE); 4314 LLGLDepthTest depth(GL_FALSE);
4350 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4315 gGL.setColorMask(true, true);
4351 glMatrixMode(GL_PROJECTION); 4316 glMatrixMode(GL_PROJECTION);
4352 glPushMatrix(); 4317 glPushMatrix();
4353 glLoadIdentity(); 4318 glLoadIdentity();
@@ -4361,10 +4326,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4361 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); 4326 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
4362 if (width != res) 4327 if (width != res)
4363 { 4328 {
4364 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 4329 cube_out->setReflection();
4365 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4366 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
4367 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
4368 4330
4369 for (U32 i = 0; i < 6; i++) 4331 for (U32 i = 0; i < 6; i++)
4370 { 4332 {
@@ -4391,7 +4353,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4391 4353
4392 stop_glerror(); 4354 stop_glerror();
4393 glViewport(0,0,res, res); 4355 glViewport(0,0,res, res);
4394 gGL.blendFunc(GL_ONE, GL_ONE); 4356 gGL.setSceneBlendType(LLRender::BT_ADD);
4395 cube_in->enableTexture(0); 4357 cube_in->enableTexture(0);
4396 //3-axis blur 4358 //3-axis blur
4397 for (U32 j = 0; j < 3; j++) 4359 for (U32 j = 0; j < 3; j++)
@@ -4421,7 +4383,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4421 gl_cube_face[i], 4383 gl_cube_face[i],
4422 j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0); 4384 j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0);
4423 validate_framebuffer_object(); 4385 validate_framebuffer_object();
4424 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4386 gGL.setColorMask(true, true);
4425 glClear(GL_COLOR_BUFFER_BIT); 4387 glClear(GL_COLOR_BUFFER_BIT);
4426 glLoadIdentity(); 4388 glLoadIdentity();
4427 apply_cube_face_rotation(i); 4389 apply_cube_face_rotation(i);
@@ -4441,7 +4403,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4441 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); 4403 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
4442 4404
4443 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 4405 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
4444 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4406 gGL.setColorMask(true, false);
4445 glMatrixMode(GL_PROJECTION); 4407 glMatrixMode(GL_PROJECTION);
4446 glPopMatrix(); 4408 glPopMatrix();
4447 glMatrixMode(GL_MODELVIEW); 4409 glMatrixMode(GL_MODELVIEW);
@@ -4449,13 +4411,11 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4449 4411
4450 cube_in->disableTexture(); 4412 cube_in->disableTexture();
4451 gViewerWindow->setupViewport(); 4413 gViewerWindow->setupViewport();
4452 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4414 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4453 4415
4454#ifndef LL_RELEASE_FOR_DOWNLOAD
4455 LLGLState::checkStates(); 4416 LLGLState::checkStates();
4456 LLGLState::checkTextureChannels(); 4417 LLGLState::checkTextureChannels();
4457 LLGLState::checkClientArrays(); 4418 LLGLState::checkClientArrays();
4458#endif
4459} 4419}
4460 4420
4461void LLPipeline::bindScreenToTexture() 4421void LLPipeline::bindScreenToTexture()
@@ -4471,10 +4431,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4471 return; 4431 return;
4472 } 4432 }
4473 4433
4474#ifndef LL_RELEASE_FOR_DOWNLOAD
4475 LLGLState::checkStates(); 4434 LLGLState::checkStates();
4476 LLGLState::checkTextureChannels(); 4435 LLGLState::checkTextureChannels();
4477#endif
4478 4436
4479 assertInitialized(); 4437 assertInitialized();
4480 4438
@@ -4494,7 +4452,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4494 tc2 /= (F32) res_mod; 4452 tc2 /= (F32) res_mod;
4495 } 4453 }
4496 4454
4497 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4455 gGL.setColorMask(true, true);
4498 4456
4499 LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM); 4457 LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM);
4500 gGL.color4f(1,1,1,1); 4458 gGL.color4f(1,1,1,1);
@@ -4513,7 +4471,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4513 4471
4514 LLGLDisable test(GL_ALPHA_TEST); 4472 LLGLDisable test(GL_ALPHA_TEST);
4515 4473
4516 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4474 gGL.setColorMask(true, true);
4517 glClearColor(0,0,0,0); 4475 glClearColor(0,0,0,0);
4518 4476
4519 if (for_snapshot) 4477 if (for_snapshot)
@@ -4525,7 +4483,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4525 //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 4483 //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
4526 //LLGLDisable blend(GL_BLEND); 4484 //LLGLDisable blend(GL_BLEND);
4527 LLGLEnable blend(GL_BLEND); 4485 LLGLEnable blend(GL_BLEND);
4528 gGL.blendFunc(GL_ONE, GL_ONE); 4486 gGL.setSceneBlendType(LLRender::BT_ADD);
4529 tc2.setVec(1,1); 4487 tc2.setVec(1,1);
4530 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); 4488 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
4531 gGL.color4f(1,1,1,1); 4489 gGL.color4f(1,1,1,1);
@@ -4543,7 +4501,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4543 gGL.end(); 4501 gGL.end();
4544 4502
4545 gGL.flush(); 4503 gGL.flush();
4546 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4504 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4547 } 4505 }
4548 4506
4549 gGL.flush(); 4507 gGL.flush();
@@ -4575,8 +4533,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4575 gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount); 4533 gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
4576 LLGLEnable blend_on(GL_BLEND); 4534 LLGLEnable blend_on(GL_BLEND);
4577 LLGLEnable test(GL_ALPHA_TEST); 4535 LLGLEnable test(GL_ALPHA_TEST);
4578 glAlphaFunc(GL_GREATER, 0.f); 4536 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4579 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 4537 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
4580 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4538 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
4581 4539
4582 glDisable(GL_TEXTURE_2D); 4540 glDisable(GL_TEXTURE_2D);
@@ -4785,26 +4743,17 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4785 4743
4786 LLGLDisable blend(GL_BLEND); 4744 LLGLDisable blend(GL_BLEND);
4787 4745
4788
4789 //tex unit 0 4746 //tex unit 0
4790 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 4747 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
4791 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
4792 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
4793 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
4794 4748
4795 mGlow[1].bindTexture(); 4749 mGlow[1].bindTexture();
4796 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 4750 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
4797 glTexCoordPointer(2, GL_FLOAT, 0, uv0); 4751 glTexCoordPointer(2, GL_FLOAT, 0, uv0);
4798 glActiveTextureARB(GL_TEXTURE1_ARB); 4752 gGL.getTexUnit(1)->activate();
4799 glEnable(GL_TEXTURE_RECTANGLE_ARB); 4753 glEnable(GL_TEXTURE_RECTANGLE_ARB);
4800 4754
4801 //tex unit 1 4755 //tex unit 1
4802 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 4756 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
4803 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
4804 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
4805 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
4806 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
4807 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
4808 4757
4809 glClientActiveTextureARB(GL_TEXTURE1_ARB); 4758 glClientActiveTextureARB(GL_TEXTURE1_ARB);
4810 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 4759 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4819,23 +4768,23 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4819 4768
4820 glDisable(GL_TEXTURE_RECTANGLE_ARB); 4769 glDisable(GL_TEXTURE_RECTANGLE_ARB);
4821 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 4770 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
4822 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 4771 gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
4823 glClientActiveTextureARB(GL_TEXTURE0_ARB); 4772 glClientActiveTextureARB(GL_TEXTURE0_ARB);
4824 glActiveTextureARB(GL_TEXTURE0_ARB); 4773 gGL.getTexUnit(0)->activate();
4825 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 4774 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
4826 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 4775 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
4827 } 4776 }
4828 4777
4829 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4778 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4830 glMatrixMode(GL_PROJECTION); 4779 glMatrixMode(GL_PROJECTION);
4831 glPopMatrix(); 4780 glPopMatrix();
4832 glMatrixMode(GL_MODELVIEW); 4781 glMatrixMode(GL_MODELVIEW);
4833 glPopMatrix(); 4782 glPopMatrix();
4834 4783
4835#ifndef LL_RELEASE_FOR_DOWNLOAD 4784 LLVertexBuffer::unbind();
4785
4836 LLGLState::checkStates(); 4786 LLGLState::checkStates();
4837 LLGLState::checkTextureChannels(); 4787 LLGLState::checkTextureChannels();
4838#endif
4839 4788
4840} 4789}
4841 4790
@@ -4867,11 +4816,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4867 { 4816 {
4868 LLVertexBuffer::unbind(); 4817 LLVertexBuffer::unbind();
4869 4818
4870#ifndef LL_RELEASE_FOR_DOWNLOAD
4871 LLGLState::checkStates(); 4819 LLGLState::checkStates();
4872 LLGLState::checkTextureChannels(); 4820 LLGLState::checkTextureChannels();
4873 LLGLState::checkClientArrays(); 4821 LLGLState::checkClientArrays();
4874#endif
4875 4822
4876 LLCamera camera = camera_in; 4823 LLCamera camera = camera_in;
4877 camera.setFar(camera.getFar()*0.87654321f); 4824 camera.setFar(camera.getFar()*0.87654321f);
@@ -4916,11 +4863,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4916 { //generate planar reflection map 4863 { //generate planar reflection map
4917 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4864 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
4918 glClearColor(0,0,0,0); 4865 glClearColor(0,0,0,0);
4919 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4866 gGL.setColorMask(true, true);
4920 mWaterRef.bindTarget(); 4867 mWaterRef.bindTarget();
4921 mWaterRef.getViewport(gGLViewport); 4868 mWaterRef.getViewport(gGLViewport);
4922 mWaterRef.clear(); 4869 mWaterRef.clear();
4923 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4870 gGL.setColorMask(true, false);
4924 4871
4925 stop_glerror(); 4872 stop_glerror();
4926 4873
@@ -5022,11 +4969,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5022 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4969 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
5023 LLColor4& col = LLDrawPoolWater::sWaterFogColor; 4970 LLColor4& col = LLDrawPoolWater::sWaterFogColor;
5024 glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f); 4971 glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
5025 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4972 gGL.setColorMask(true, true);
5026 mWaterDis.bindTarget(); 4973 mWaterDis.bindTarget();
5027 mWaterDis.getViewport(gGLViewport); 4974 mWaterDis.getViewport(gGLViewport);
5028 mWaterDis.clear(); 4975 mWaterDis.clear();
5029 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4976 gGL.setColorMask(true, false);
5030 4977
5031 if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate) 4978 if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
5032 { 4979 {
@@ -5060,11 +5007,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5060 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd)); 5007 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd));
5061 LLPipeline::sUseOcclusion = occlusion; 5008 LLPipeline::sUseOcclusion = occlusion;
5062 5009
5063#ifndef LL_RELEASE_FOR_DOWNLOAD
5064 LLGLState::checkStates(); 5010 LLGLState::checkStates();
5065 LLGLState::checkTextureChannels(); 5011 LLGLState::checkTextureChannels();
5066 LLGLState::checkClientArrays(); 5012 LLGLState::checkClientArrays();
5067#endif
5068 } 5013 }
5069} 5014}
5070 5015
@@ -5203,7 +5148,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5203 glh_set_current_modelview(mat); 5148 glh_set_current_modelview(mat);
5204 5149
5205 glClearColor(0.0f,0.0f,0.0f,0.0f); 5150 glClearColor(0.0f,0.0f,0.0f,0.0f);
5206 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 5151 gGL.setColorMask(true, true);
5207 glStencilMask(0xFFFFFFFF); 5152 glStencilMask(0xFFFFFFFF);
5208 glClearStencil(0); 5153 glClearStencil(0);
5209 5154
@@ -5250,14 +5195,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5250 5195
5251 if (muted) 5196 if (muted)
5252 { 5197 {
5253 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 5198 gGL.setColorMask(true, true);
5254 } 5199 }
5255 else 5200 else
5256 { 5201 {
5257 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 5202 gGL.setColorMask(false, true);
5258 } 5203 }
5259 5204
5260 gGL.blendFunc(GL_ONE, GL_ONE); 5205 gGL.setSceneBlendType(LLRender::BT_ADD);
5261 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 5206 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
5262 5207
5263 LLGLDepthTest depth(GL_FALSE, GL_FALSE); 5208 LLGLDepthTest depth(GL_FALSE, GL_FALSE);
@@ -5273,7 +5218,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5273 gGL.flush(); 5218 gGL.flush();
5274 5219
5275 5220
5276 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 5221 gGL.setSceneBlendType(LLRender::BT_ALPHA);
5277 } 5222 }
5278 5223
5279 5224
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index 9896a4a..bd857c2 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -550,6 +550,7 @@ void render_bbox(const LLVector3 &min, const LLVector3 &max);
550 550
551extern LLPipeline gPipeline; 551extern LLPipeline gPipeline;
552extern BOOL gRenderForSelect; 552extern BOOL gRenderForSelect;
553extern BOOL gDebugPipeline;
553extern const LLMatrix4* gGLLastMatrix; 554extern const LLMatrix4* gGLLastMatrix;
554 555
555#endif 556#endif
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index b6b38d8..12cd9fb 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,119 @@
1Release Notes for Second Life 1.20(7) May 16th, 2008
2=====================================
3
4New features and changes:
5* Pasting multiline clipboard content into Chat will show a Paragraph symbol at newlines
6* Moved "Set Window Size" options from File menu into Preferences > Graphics
7* New users are rendered as a cloud, rather than naked, before they choose a gender
8* Directly interacting with a muted resident will unmute them, with a note logged in the Chat history (VWR-1735)
9* Fly button is now shown as disabled when you are sitting
10* Group Info > Notices tab explains the storage limits of 200 notices and 14 days
11* Added OpenGL monitoring via Advanced menu > Rendering > Debug GL option to turn on extra rendering error checking and help reproduce crashes
12* Added beta support for basic voice lipsync for voice visualization (VWR-4794) - via Advanced menu > Character
13* Changed resident names to be interactive in Chat/IM:
14** Clicking on resident names in Local Chat will open their Profile page
15** Clicking on resident names in a Group IM will open an individual IM
16
17* Added four texture constants for referencing in llSetLinkTexture in scripts:
18** TEXTURE_BLANK, TEXTURE_DEFAULT, TEXTURE_PLYWOOD and TEXTURE_TRANSPARENT
19** Note: Scripts using these constants will run in all Second Life viewers, however previous versions of the viewer will not be able to edit and recompile scripts using the new TEXTURE_BLANK constant; older versions trying to compile such a script will report "(XX,YY) : ERROR : Name not defined within scope."
20
21* Thread monitoring to catch freezes
22** A new thread monitor will detect when the viewer application frozen for a period greater than 10 seconds and possibly force a crash with detailed logs
23
24* Improved internationalization support:
25** Make 'System Default' language option work on Linux and Windows.
26** Make unicode system font support good on Linux
27
28* Improvements to Search
29** Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase
30** Search > Places and Search > Groups use web-based search
31** Classified ads have a drop-down menu to indicate Mature or Not Mature content
32
33Changes:
34* VWR-4794: Basic voice lipsync for voice visualization
35* VWR-4204: Clicking on names in Chat/Group IM history should open Profile page or IM
36* VWR-463: Blank is a pre-defined texture in client, but not in LSL
37* Updated library version for openssl
38* New users are shown as a cloud rather than naked until they choose a gender.
39* Move "Set Window Size" options from File menu into Preferences > Graphics
40* Make clothing-still-downloading dialog into an ignorable alert dialog
41* Internationalize additional hard-coded viewer strings to a strings.xml file
42* Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase
43* Convert Search > Places tab to use HTML search
44* Convert Search > Group tab to use HTML search
45* Search: Require Mature/Not Mature in Classifieds
46* Make strict GL debugging toggleable on-the-fly via Advanced menu > Rendering > Debug GL option - turns on extra rendering error checking and help reproduce crashes
47
48Fixes:
49* Fixed: VWR-104: Unused class LLVertexProgramGL should be removed
50* Fixed: VWR-2778: System skirt textures turn invisible on wearing
51* Fixed: VWR-2272: Fly button doesn't work while sitting
52* Fixed: VWR-2404: Lossless texture compression on small textures is not lossless
53* Fixed: VWR-5807: Wild rotations of linkset while using the editor in Local Ruler Mode via CTRL key
54* Fixed: VWR-6056: Animation viewer does not play animations on upload.
55* Fixed: VWR-6399: llMapDestination should still show teleport map -- Teleport / Map screen changes in 1.20 RC0 need to be undone
56* Fixed: VWR-4860: WindLight: Planar texturing renders incorrectly in 1.19.0 (79674)
57* Fixed: VWR-5963: LLImageGL::setClamp may affect random texture (making repeating textures on objects non-repeating)
58* Fixed: VWR-7061: Trivial UI grammar error in the title of the "Script Warning/Error" window
59* Fixed: VWR-6186: Second Life is leaking Objective-C objects at startup
60* Fixed: VWR-3598: Non-group owned objects appear to belong to the group of the last selected object, no matter the owner/group.
61* Fixed: SVC-1241: Dead code in lscript_execute.cpp
62* Fixed: VWR-4057: Multi-line chat display bug - first character in line missing
63* Fixed: VWR-3857: Script (LSL) editor shows non Latin 1 characters as square boxes
64* Fixed: VWR-2275: Linux 1.18.3 Won't Link
65* Fixed: VWR-3813: gtk_check_version() API changed to return const gchar * - causes gcc ERROR
66* Fixed: llrender.cpp export
67* Fixed: Create secondlife:///app/ URL to open my groups panel
68* Fixed: Create secondlife:///app/ URL to open create groups dialog
69* Fixed: Display a message if LLWebBrowserCtrl blocks a secondlife:///app/* url
70* Fixed: Abstract common glTexParameter calls
71* Fixed: Orientation Island HUD select language texture is wrong for English in 1.20
72* Fixed: Double-clicking border of communicate window makes window unrecoverable
73* Fixed: Command line parser bug parsing "--multiple true" at beginning of a command line.
74* Fixed: --loginuri is not being handled correctly
75* Fixed: Grid selection drop-down on login screen does not take priority over -loginuri when selection is first opened
76* Fixed: crash in LLMediaImplQuickTime::load
77* Fixed: crash on LLViewerParcelMedia::update
78* Fixed: Pop-up menu width should try to accomodate the longest menu item (within reason)
79* Fixed: VWR-1735: Directly interacting with a muted resident should unmute them
80* Fixed: VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used
81* Fixed: VWR-5853: Double-Clicking on vertical edge of Inventory/Gesture window destroys the floating window.
82* Fixed: VWR-2448: Snapshot Preview tool should respect 'Quiet Snapshots to Disk'
83* Fixed: Can't change values with debug settings floater
84* Fixed: Focus > Zoom button can't be re-selected
85* Fixed: Debug Permissions displays overlap
86* Fixed: Objects with no group tagging show group tags of previously clicked items
87* Fixed: stop bundling libexpat with the linux viewer
88* Partial Fix: Pasting multiline clipboard content into chat loses newlines
89
90Localization Fixes:
91* Fixed: VWR-7168: A typo in base (en-us) version of mime_types.xml
92* Fixed: VWR-7153: An typo in en-us version of alerts.xml file makes an <ignore> text of unlocalizable
93* Fixed: VWR-7087: Japanese "About Second Life..." file includes an invalid UTF-8 character
94
95Release Notes for Second Life 1.20(6) May 7th, 2008
96=====================================
97Changes:
98* Changed the reference in Group Information window > Notices tab to 14 days instead of 30
99* Removed menu option Advanced > Character > Show Collision Plane
100
101Fixes:
102* Fixed: VWR-6389: Runtime Library error after quitting Second Life
103* Fixed: VWR-4580: Property lines are visible through avatar, objects and through ground
104* Fixed: VWR-6896: Crash when selecting Advanced > Rendering > Info Displays > Lights (and other Info Displays)
105* Fixed: VWR-7042: Incorrect tooltip for "Use built-in web browser" option
106* Fixed: the spinners are broken in the snapshot UI when upload a snapshot
107* Fixed: Create tool's last 11 shapes are not the proper height ("sphere" looks like an "egg")
108* Fixed: Typographical error in Transfer permissions alert dialog
109* Fixed: Crash selecting Edit > Land Owners with Basic Shaders disabled
110* Fixed: crash on LLFloaterWorldMap::buildLandmarkIDLists
111* Fixed: 3dConnexion device does not default to enabled with 1.20 RC 5
112* Fixed: Settings in the Joystick Configuration window reset to defaults on each launch when a SpaceNavigator is connected
113
114Localization Fixes:
115* Fixed: XML resizing to repair truncated text in 1.20 localizations
116
1Release Notes for Second Life 1.20(5) May 1st, 2008 117Release Notes for Second Life 1.20(5) May 1st, 2008
2===================================== 118=====================================
3Changes: 119Changes:
@@ -219,3 +335,140 @@ Source changes:
219* Fixed: g++ 4 viewer compile issues 335* Fixed: g++ 4 viewer compile issues
220* Dead code removal createLegacyWearableFromAvatar 336* Dead code removal createLegacyWearableFromAvatar
221 337
338
339Release Notes for Second Life 1.19.0(4) February 28th, 2008
340=====================================
341New features and changes:
342* Voice
343** Voice Chat is now enabled by default to allow Residents to hear other Residents.
344** A microphone is required to speak to other Residents.
345** Push-to-Talk is the default mode for transmitting voice.
346** These settings can be modified via the Voice Chat tab of the Preferences dialog.
347
348* Age Verification:
349** The user interface for parcel and estate access has been clarified and improved.
350** Added the ability to restrict access to parcels and estates to age verified adults.
351** Removed the ability to *ban* access to Residents who have provided payment info or who have used payment info. We continue to support the ability to *allow* access to only those who have provided payment info.
352
353* Crash Reporter
354** The crash reporting mechanism has been improved. Following a crash, more useful information will be sent and reports should now take less than 10 seconds.
355
356* VWR-210: Voice Support on Linux (EXPERIMENTAL) - see README-linux-voice.txt
357
358* Other changes:
359** Change alert message that pops up when you set Busy
360** Add "Teleporting from SLURL to SLURL" to the chat history to provide quick and dirty "back" links
361** Print the name of the missing gesture in the error message
362** Remove "New Account..." and "Preferences" buttons from login screen for 1.19.0
363
364Fixes:
365* SVC-930: Prims set for sale - prices are incorrectly set when multiple prims taken to inventory and rezzed
366* SVC-1125: New Search: Beacons aren't shown when teleporting to regions with "Allow Direct Teleport" disabled
367* VWR-1125: Clicking Title Bar While Mouselook'd Repositions SL Window
368* VWR-1137: Inventory names out of sync after renaming via Properties window
369* VWR-1145: Unable To Connect help not available
370* VWR-1162: Land for sale includes L$1 parcels that are not actually for sale
371* VWR-1350: Color settings do not appear to be applied to LSL default text
372* VWR-1475: OpenJPEG always uploads single layer lossless images
373* VWR-1590: Keyboard changes inventory selection after right-click
374* VWR-1627: Classified metrics are reset to 0 when the ad is updated
375* VWR-1651: Add ability to open a partners profile whilst viewing an avatar's profile
376* VWR-1774: Some avatar positions result in no Z-axis arrow when editing attachments
377* VWR-1873: Typos in en-us locale file
378* VWR-1919: Remove texture UUID information from UI unless full-perm
379* VWR-2030: Avatar only turns half-way in Appearance Mode
380* VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used
381* VWR-2256: Mac updater directory permission issues
382* VWR-2367: Wrong handling of maximum length of Group Notice message
383* VWR-2404: lossless texture compression on small textures not lossless
384* VWR-2410: noise dot appear in chat window when clien running long with chatting.
385* VWR-2411: Possible crash in pipeline.cpp
386* VWR-2412: Possible crash drawpoolwater
387* VWR-2421: ATI Radeon HD 2900 XT + Second Life = "Couldn't match GPU to a class","Setting GPU Class to Class0"
388* VWR-2483: the macviewer.xcodeprj file doesn't create stripped binaries on Deployment or Universal
389* VWR-250: Preedit (composition) strings are shown poorly when typing Japanese text on Windows
390* VWR-2550: Scuplty vertex coordinates are size/256 meters too small on the positive faces
391* VWR-2614: gActiveChannelSpeakerMgr not deleted at end of program in viewer.cpp
392* VWR-2617: Adds LLSD support to flex/light/sculpt params for primitives
393* VWR-2652: Changes needed to compile viewer against lastest libopenjpeg2000
394* VWR-2684: Minor leak in floaters using layoutstacks
395* VWR-2722: Muting an object with pie menu only mutes the prim you select, not entire linkset
396* VWR-2847: Wrong hover text in Japanese UI
397* VWR-2854: Some sculpted prims render as balls on close zoom, which look fine in older clients
398* VWR-2867: Eyes rotate unnaturally around their X axis. Clockwise/Counter-Clockwise
399* VWR-289: URLs for video media streaming need to be URL-encoded or stream doesn't work
400* VWR-2959: Windows (Visual Studio) solution file refers to a non-existing project "build_all"
401* VWR-3088: Unchecking "Automatic Appearance Camera Movement" no longer has any effect
402* VWR-3206: OpenJPEG svn478 causes slviewer to crash
403* VWR-3428: Checking a users profile while editing a linked set causes viewer crash
404* VWR-3458: Mouse cursor background is opaque white instead of transparent on big endian systems
405* VWR-3558: llLoadURL cannot be muted
406* VWR-356: Move delete to the bottom of context menus, separated by spacer
407* VWR-3748: Builds fail on 1.18.6 RC if not using MOZLIB due to missing #if LL_LIBXUL_ENABLED in 3 places in indra/newview/llpanellogin.cpp
408* VWR-3948: Underlayers no longer removable by pie menu in Windlight, release candidates
409* VWR-412: Object editing arrows hidden but clickable on objects you can't edit.
410* dialogs have extra vertical space
411* Photo Album: name in Properties cut off some Japanese characters
412* New gestures do not appear active in inventory
413* Make parcel name in menu "look" active
414* "Wear" pie option shows up for many objects even if resident does not own and cannot wear them.
415* Textures on no-transfer objects can be transferred
416* Deleted gestures still work
417* Inventory description out of sync after renaming via Properties window
418* Show private estate tiles when World Map is zoomed out
419* Properties description not updated when preview description updated
420* Buying object contents broken
421* Improve window opening behavior, ensuring it is mostly on screen
422* No-modify objects can be modified through Open pane
423* Inventory names out of sync after renaming via Properties
424* Japanese IME mode should be set and postiion of any input windows fixed for non-Japanese fields
425* ctrl-shift-w doesn't work if no windows have focus
426* Avatar falling in place - Alliez Mysterio
427* Linux crash reporter does not run on next execution after forcing an infinite loop and forcefully exiting
428* hitting enter should immediately set the value of a field
429* Inventory Folder Loading state not clearly indicated
430* Add warning dialog to the Land Sale process to warn against selling land to Anyone
431* Legacy flossexception link needs to be fixed in source
432* make link from client log in window to "Forgot Password" page
433* Remove button under estate managers list enables after estate manager clicks in the list
434* Changing search field should cancel current selection
435* Estate tab within Tools / Region Estate has wrong settings for enable of Restrict Access upon initialization
436* llEscapeURL and llUnescapeURL caps output to 255 characters
437* XUI LoadFromXML function doesn't work
438* Sanitize floater sizing behavior when SL window is made very small
439* Animation won't stop if avatar teleports while animated
440* Can't paste name of object into View > Mute List > Mute object by name
441* pressing ctrl-F10 then Escape causes keyboard to be unresponsive
442* Make SL viewer updater show a progress bar so that people know how long to wait
443* Can't double-click on groups in profile after changing your active title
444* Getting multiple copies of texture dragged onto prim
445* blue dialog's 'next' widget steals focus
446* Audio should be encoded for upload at a 'good enough' quality rather than a user-selected bitrate
447* multiple preview windows open for a single texture/snapshot saved inside a note card
448* Enhance Viewer to support new Age Verification feature
449* Rename crash setting to cause crash logger to come up for all residents
450* Change crash logger "Remember this choice" function to default to on
451* Rework Ban tab of floater_about_land
452* Windows IME positioning fixed
453* Viewer crashes in assert when playing Sword Strike animation
454* Unable to set 'Group Access' for land that is also 'Public Access' (Was VWR-3667)
455* Disable QuickTime when the installed version is less than version with RTSP exploit
456* Korean viewer crashes on startup
457* Move fullscreen message from login screen to viewer prefs
458* linux client doesn't recognise that a viewer is already running (slurl crapout)
459* Search results window displays "s..." and "n..." instead of "searching..." and "none found"
460* QuickTime disabled message can not be ignored
461* Crash on login page when using Logitech LCD Keyboard
462* SEC-17 Ability to Access Sculpted Prim Textures from Database without owning actual sculpt texture, allowing for people to "steal" sculpts.
463* info window does not pop up when transitioning from a Havok1 to Havok4 region
464* Repoint Report Bug... Viewer link to Pjira
465* Upload Animation window: Button missing in Stopped window state
466
467Source changes:
468* Upgrade Win32 libvorbis to v1.2
469* VWR-2881: Bundled Mesa libs are not GPL compatible
470* upgrade in-tree Linux GL headers to Mesa 7.x
471* upgrade in-tree Win32 GL headers to version without SGI Free B license
472* Rebuild and/or update libraries to use statically linked libs.
473* Remove llfloaterhtmlhelp.cpp / h and floater_html_help.xml
474
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index 6254613..099d5dc 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -231,8 +231,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
231// 231//
232 232
233VS_VERSION_INFO VERSIONINFO 233VS_VERSION_INFO VERSIONINFO
234 FILEVERSION 1,19,1,4 234 FILEVERSION 1,20,6,86975
235 PRODUCTVERSION 1,19,1,4 235 PRODUCTVERSION 1,20,6,86975
236 FILEFLAGSMASK 0x3fL 236 FILEFLAGSMASK 0x3fL
237#ifdef _DEBUG 237#ifdef _DEBUG
238 FILEFLAGS 0x1L 238 FILEFLAGS 0x1L
@@ -249,12 +249,12 @@ BEGIN
249 BEGIN 249 BEGIN
250 VALUE "CompanyName", "Linden Lab" 250 VALUE "CompanyName", "Linden Lab"
251 VALUE "FileDescription", "Second Life" 251 VALUE "FileDescription", "Second Life"
252 VALUE "FileVersion", "1.19.1.4" 252 VALUE "FileVersion", "1.20.6.86975"
253 VALUE "InternalName", "Second Life" 253 VALUE "InternalName", "Second Life"
254 VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc." 254 VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
255 VALUE "OriginalFilename", "SecondLife.exe" 255 VALUE "OriginalFilename", "SecondLife.exe"
256 VALUE "ProductName", "Second Life" 256 VALUE "ProductName", "Second Life"
257 VALUE "ProductVersion", "1.19.1.4" 257 VALUE "ProductVersion", "1.20.6.86975"
258 END 258 END
259 END 259 END
260 BLOCK "VarFileInfo" 260 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 6e7553f..4dbbdf0 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -106,6 +106,7 @@
106 <button_anim_stop_selected.tga/> 106 <button_anim_stop_selected.tga/>
107 <crosshairs.tga/> 107 <crosshairs.tga/>
108 <direction_arrow.tga/> 108 <direction_arrow.tga/>
109 <cloud-particle.j2c use_mips="true"/>
109 <foot_shadow.j2c use_mips="true"/> 110 <foot_shadow.j2c use_mips="true"/>
110 111
111 <icon_auction.tga/> 112 <icon_auction.tga/>
@@ -121,7 +122,6 @@
121 <icon_groupnoticeinventory.tga/> 122 <icon_groupnoticeinventory.tga/>
122 <icon_lock.tga/> 123 <icon_lock.tga/>
123 <icon_place.tga/> 124 <icon_place.tga/>
124 <icon_popular.tga/>
125 <icon_top_pick.tga/> 125 <icon_top_pick.tga/>
126 126
127 <inv_folder_animation.tga/> 127 <inv_folder_animation.tga/>
@@ -179,7 +179,7 @@
179 <map_telehub.tga/> 179 <map_telehub.tga/>
180 <map_track_16.tga/> 180 <map_track_16.tga/>
181 <media_icon.tga file_name="icn_label_media.tga" /> 181 <media_icon.tga file_name="icn_label_media.tga" />
182 <music_icon.tga file_name="icn_lable_music.tga" /> 182 <music_icon.tga file_name="icn_label_music.tga" />
183 <noentrylines.j2c use_mips="true"/> 183 <noentrylines.j2c use_mips="true"/>
184 <noentrypasslines.j2c use_mips="true"/> 184 <noentrypasslines.j2c use_mips="true"/>
185 <notify_tip_icon.tga/> 185 <notify_tip_icon.tga/>
diff --git a/linden/indra/newview/skins/xui/de/floater_html.xml b/linden/indra/newview/skins/xui/de/floater_html.xml
index f5c69ce..7e97d4f 100644
--- a/linden/indra/newview/skins/xui/de/floater_html.xml
+++ b/linden/indra/newview/skins/xui/de/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="Zuhause" name="home_btn" /> 5 <button label="Zuhause" name="home_btn" />
6 <button label="Weiterleiten" name="forward_btn" /> 6 <button label="Weiterleiten" name="forward_btn" />
7 <button label="Los" name="go_btn" /> 7 <button label="Los" name="go_btn" />
8 <string name="home_page_url">
9 http://de.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/de/mime_types.xml b/linden/indra/newview/skins/xui/de/mime_types.xml
index d5153d0..03fd660 100644
--- a/linden/indra/newview/skins/xui/de/mime_types.xml
+++ b/linden/indra/newview/skins/xui/de/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 Bild 82 Bild
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/de/panel_group_invite.xml b/linden/indra/newview/skins/xui/de/panel_group_invite.xml
index e762567..0ad1aeb 100644
--- a/linden/indra/newview/skins/xui/de/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/de/panel_group_invite.xml
@@ -1,10 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Mitglied einladen" name="invite_panel"> 2<panel label="Mitglied einladen" name="invite_panel">
3 <text>
4 Sie können mehrere Einwohner zu Ihrer
5Gruppe einladen. Klicken Sie auf
6&apos;Personenauswahl öffnen&apos;.
7 </text>
8 <text name="help_text"> 3 <text name="help_text">
9 Sie können mehrere Einwohner zu Ihrer 4 Sie können mehrere Einwohner zu Ihrer
10Gruppe einladen. Klicken Sie auf 5Gruppe einladen. Klicken Sie auf
diff --git a/linden/indra/newview/skins/xui/de/panel_group_notices.xml b/linden/indra/newview/skins/xui/de/panel_group_notices.xml
index 0488851..9a819eb 100644
--- a/linden/indra/newview/skins/xui/de/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/de/panel_group_notices.xml
@@ -16,7 +16,7 @@ gesendet. Mitteilungen können unter
16 Gruppenmitteilungsarchiv 16 Gruppenmitteilungsarchiv
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Mitteilungen werden 30 Tage lang aufbewahrt. Klicken 19 Mitteilungen werden 14 Tage lang aufbewahrt. Klicken
20Sie auf eine Mitteilung, um sie anzuzeigen. Klicken Sie 20Sie auf eine Mitteilung, um sie anzuzeigen. Klicken Sie
21auf &apos;Aktualisieren&apos;, um neue Mitteilungen zu suchen. 21auf &apos;Aktualisieren&apos;, um neue Mitteilungen zu suchen.
22 </text> 22 </text>
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
index ff48982..c251a50 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
@@ -17,6 +17,8 @@
17 <text_editor name="FullScreenInfo" width="480"> 17 <text_editor name="FullScreenInfo" width="480">
18 Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um. 18 Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um.
19 </text_editor> 19 </text_editor>
20 <combo_box name="windowsize combo" left="115">
21 </combo_box>
20 <text name="DisplayResLabel" width="100"> 22 <text name="DisplayResLabel" width="100">
21 Anzeigeauflösung: 23 Anzeigeauflösung:
22 </text> 24 </text>
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_web.xml b/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
index b746097..af493e6 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Web" name="web"> 2<panel label="Web" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="Externen Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."> 4 <radio_item name="external" tool_tip="Externen Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen.">
5 <radio_item name="external">
6 Externen Browser verwenden (Firefox, Safari, Internet Explorer) 5 Externen Browser verwenden (Firefox, Safari, Internet Explorer)
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index 39d1728..e3d0dbf 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -1032,7 +1032,7 @@ If you continue to have problems, please visit: http://www.secondlife.com/suppor
1032MINSPECS 1032MINSPECS
1033Do you wish to visit [_URL] for more information? 1033Do you wish to visit [_URL] for more information?
1034 </message> 1034 </message>
1035 <ignore message="ignore"> 1035 <ignore name="ignore">
1036 Ignore unsupported hardware 1036 Ignore unsupported hardware
1037 </ignore> 1037 </ignore>
1038 <option name="Yes"> 1038 <option name="Yes">
@@ -1319,8 +1319,7 @@ really want to offer this item?
1319 </alert> 1319 </alert>
1320 <alert modal="true" name="NoItems"> 1320 <alert modal="true" name="NoItems">
1321 <message name="message"> 1321 <message name="message">
1322 You do not have permission to transfer 1322 You do not have permission to transfer the selected items.
1323 the selected items.
1324 </message> 1323 </message>
1325 </alert> 1324 </alert>
1326 <alert modal="true" name="CannotCopyCountItems"> 1325 <alert modal="true" name="CannotCopyCountItems">
@@ -2465,10 +2464,12 @@ You have been moved into a nearby region.
2465 </alert> 2464 </alert>
2466 <alert modal="true" name="ClothingLoading"> 2465 <alert modal="true" name="ClothingLoading">
2467 <message name="message"> 2466 <message name="message">
2468 Your clothing is still downloading. 2467 Your clothing is still downloading.
2469You can use the world normally, and other users 2468You can use [SECOND_LIFE] normally and other users will see you correctly.
2470will see you correctly.
2471 </message> 2469 </message>
2470 <ignore name="ignore">
2471 When clothing is taking a long time to download
2472 </ignore>
2472 </alert> 2473 </alert>
2473 <alert modal="true" name="FirstRun"> 2474 <alert modal="true" name="FirstRun">
2474 <message name="message"> 2475 <message name="message">
@@ -3547,6 +3548,34 @@ Publish this classified now for L$[AMOUNT]?
3547 Cancel 3548 Cancel
3548 </option> 3549 </option>
3549 </alert> 3550 </alert>
3551 <alert name="SetClassifiedMature">
3552 <message name="message">
3553Does this classified contain Mature content?
3554 </message>
3555 <option name="Mature">
3556 Yes
3557 </option>
3558 <option name="Not Mature">
3559 No
3560 </option>
3561 <option name="Cancel">
3562 Cancel
3563 </option>
3564 </alert>
3565 <alert name="SetGroupMature">
3566 <message name="message">
3567Does this group contain Mature content?
3568 </message>
3569 <option name="Mature">
3570 Yes
3571 </option>
3572 <option name="Not Mature">
3573 No
3574 </option>
3575 <option name="Cancel">
3576 Cancel
3577 </option>
3578 </alert>
3550 <alert name="ConfirmRestart" title="Confirm restart"> 3579 <alert name="ConfirmRestart" title="Confirm restart">
3551 <message name="message"> 3580 <message name="message">
3552 Do you really want to restart this region in 2 minutes? 3581 Do you really want to restart this region in 2 minutes?
@@ -4951,5 +4980,10 @@ Would you like to visit the Second Life website to set this up?
4951 https://secondlife.com/account/ 4980 https://secondlife.com/account/
4952 </url> 4981 </url>
4953 </alert> 4982 </alert>
4983 <alert modal="true" name="MissingString">
4984 <message name="message">
4985 The string [STRING_NAME] is missing from strings.xml
4986 </message>
4987 </alert>
4954</alerts> 4988</alerts>
4955 4989
diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
index 7714d67..43f255c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -65,7 +65,8 @@
65 <string name="redirect_404_url"> 65 <string name="redirect_404_url">
66 http://secondlife.com/app/search/notfound.html 66 http://secondlife.com/app/search/notfound.html
67 </string> 67 </string>
68 </panel> 68 <string name="default_search_page">"http://secondlife.com/app/search/index.php?"</string>
69 </panel>
69 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 70 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
70 label="Classifieds" left="1" left_delta="68" mouse_opaque="false" 71 label="Classifieds" left="1" left_delta="68" mouse_opaque="false"
71 name="classified_panel" width="778"> 72 name="classified_panel" width="778">
@@ -272,50 +273,37 @@
272 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 273 mouse_opaque="true" name="&lt; Prev" right="258" width="80" />
273 </panel> 274 </panel>
274 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 275 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
275 label="Popular Places" left="1" mouse_opaque="false" name="popular_panel" 276 label="Showcase" left="1" mouse_opaque="false" name="showcase_panel"
276 width="778"> 277 width="778">
277 <string name="searching_text"> 278 <string name="searching_text">Searching...</string>
278 Searching... 279 <string name="not_found_text">None Found.</string>
279 </string> 280 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
280 <string name="not_found_text"> 281 label="Back"
281 None Found. 282 left="10"
282 </string> 283 name="back_btn" width="70" />
283 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 284 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
284 height="20" label="Next &gt;" label_selected="Next &gt;" 285 label="Forward" left_delta="75"
285 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 286 name="forward_btn" width="70" />
286 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 287 <!-- No mature content checkbox, showcase is all PG -->
287 height="20" label="&lt; Prev" label_selected="&lt; Prev" 288 <web_browser name="showcase_browser"
288 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 289 bottom="25"
289 <check_box bottom="-22" control_name="FindPlacesPictures" follows="left|top" 290 follows="top|left|bottom|right"
290 font="SansSerifSmall" height="16" initial_value="true" 291 font="SansSerifSmall"
291 label="Only show places with pictures" left="24" mouse_opaque="true" 292 left="10"
292 name="incpictures" width="200" /> 293 right="-10"
293 <check_box bottom_delta="-16" control_name="ShowMatureSims" follows="left|top" 294 top="-40" />
294 font="SansSerifSmall" height="16" initial_value="false" 295 <text bottom="5"
295 label="Include parcels with Restricted Content" left="24" 296 follows="bottom|left"
296 mouse_opaque="true" name="incmature" width="204" /> 297 halign="left"
297 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 298 left="10"
298 bottom="-38" drop_shadow_visible="true" follows="right|top" 299 width="150"
299 font="SansSerifSmall" h_pad="0" halign="left" height="32" left_delta="326" 300 name="status_text"
300 mouse_opaque="true" 301 height="16" />
301 name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there." 302 <string name="loading_text">Loading...</string>
302 v_pad="0" width="406"> 303 <string name="done_text">Done</string>
303 These are the most popular places in the world, as measured by traffic, 304 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
304the amount of time people spend there. 305 <string name="default_search_page">"http://secondlife.com/app/showcase/index.php?"</string>
305 </text> 306 </panel>
306 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
307 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
308 multi_select="false" name="results" search_column="2" width="339">
309 <column label="" name="icon" width="24" />
310 <column label="" name="type" width="-1" />
311 <column dynamicwidth="true" label="Name" name="name" />
312 <column label="Traffic" name="dwell" width="70" />
313 </scroll_list>
314 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
315 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
316 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
317 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
318 </panel>
319 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 307 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
320 label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel" 308 label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel"
321 width="778"> 309 width="778">
@@ -397,93 +385,72 @@ To buy direct, visit the land and click on the place name in the title bar.
397 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 385 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
398 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 386 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
399 </panel> 387 </panel>
400 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 388 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
401 label="Places" left="1" mouse_opaque="false" name="places_panel" 389 label="Places" left="1" mouse_opaque="false"
390 name="places_panel"
402 width="778"> 391 width="778">
403 <string name="searching_text"> 392 <string name="searching_text">Searching...</string>
404 Searching... 393 <string name="not_found_text">None Found.</string>
405 </string> 394 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
406 <string name="not_found_text"> 395 label="Back"
407 None Found. 396 left="10"
408 </string> 397 name="back_btn" width="70" />
409 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 398 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
410 height="20" label="Next &gt;" label_selected="Next &gt;" 399 label="Forward" left_delta="75"
411 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 400 name="forward_btn" width="70" />
412 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 401 <line_editor bevel_style="in"
413 height="20" label="&lt; Prev" label_selected="&lt; Prev" 402 border_style="line"
414 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 403 border_thickness="1"
415 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 404 bottom_delta="0"
416 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 405 enabled="true"
417 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 406 follows="top|left|right"
418 name="find" v_pad="0" width="50"> 407 font="SansSerif"
419 Find: 408 handle_edit_keys_directly="false"
420 </text> 409 commit_on_focus_lost="false"
421 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 410 height="20"
422 follows="left|top" font="SansSerif" height="18" left_delta="38" 411 hidden="false"
423 max_length="63" mouse_opaque="true" name="name" width="128" /> 412 label="Search"
424 <check_box bottom_delta="-18" control_name="ShowMatureSims" follows="left|top" 413 left_delta="80"
414 width="180"
415 max_length="254"
416 mouse_opaque="true"
417 name="search_editor"
418 select_all_on_focus_received="false"
419 select_on_focus="false"
420 tab_group="1"
421 tool_tip="Search Second Life" />
422 <button follows="top|right" font="SansSerif" height="20"
423 label="Search"
424 left_delta="185"
425 bottom_delta="0"
426 name="search_btn" width="70" />
427 <check_box bottom_delta="0"
428 control_name="ShowMatureFindAll" follows="right|top"
425 font="SansSerifSmall" height="16" initial_value="false" 429 font="SansSerifSmall" height="16" initial_value="false"
426 label="Include parcels with Mature content" left_delta="0" 430 label="Include Mature content"
427 mouse_opaque="true" name="incmature" width="204" /> 431 left_delta="133"
428 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="182" 432 name="mature_check"
429 max_chars="20" mouse_opaque="true" name="Category" width="128"> 433 width="156" />
430 <combo_item name="AnyCategory" value="any"> 434 <web_browser name="places_browser"
431 Any Category 435 bottom="25"
432 </combo_item> 436 follows="top|left|bottom|right"
433 <combo_item name="LindenLocation" value="linden"> 437 font="SansSerifSmall"
434 Linden Location 438 left="10"
435 </combo_item> 439 right="-10"
436 <combo_item name="Adult" value="adult"> 440 top="-40" />
437 Adult 441 <text bottom="5"
438 </combo_item> 442 follows="bottom|left"
439 <combo_item name="Arts&amp;Culture" value="arts"> 443 halign="left"
440 Arts &amp; Culture 444 left="10"
441 </combo_item> 445 width="150"
442 <combo_item name="Business" value="store"> 446 name="status_text"
443 Business 447 height="16" />
444 </combo_item> 448 <string name="loading_text">Loading...</string>
445 <combo_item name="Educational" value="educational"> 449 <string name="done_text">Done</string>
446 Educational 450 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
447 </combo_item> 451 <string name="default_search_page">"http://secondlife.com/app/search/index_places.php?"</string>
448 <combo_item name="Gaming" value="game"> 452 </panel>
449 Gaming 453 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
450 </combo_item>
451 <combo_item name="Hangout" value="gather">
452 Hangout
453 </combo_item>
454 <combo_item name="NewcomerFriendly" value="newcomer">
455 Newcomer Friendly
456 </combo_item>
457 <combo_item name="Parks&amp;Nature" value="park">
458 Parks &amp; Nature
459 </combo_item>
460 <combo_item name="Residential" value="home">
461 Residential
462 </combo_item>
463 <combo_item name="Shopping" value="shopping">
464 Shopping
465 </combo_item>
466 <combo_item name="Other" value="other">
467 Other
468 </combo_item>
469 </combo_box>
470 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
471 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
472 name="Search" width="70" />
473 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true"
474 draw_heading="true" follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
475 multi_select="false" name="results" search_column="2" width="339">
476 <column label="" name="icon" width="24" />
477 <column label="" name="type" width="-1" />
478 <column dynamicwidth="true" label="Name" name="name" />
479 <column label="Traffic" name="dwell" width="75" />
480 </scroll_list>
481 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
482 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
483 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
484 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
485 </panel>
486 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
487 label="People" left="1" mouse_opaque="false" name="people_panel" 454 label="People" left="1" mouse_opaque="false" name="people_panel"
488 width="778"> 455 width="778">
489 <string name="searching_text"> 456 <string name="searching_text">
@@ -495,128 +462,99 @@ To buy direct, visit the land and click on the place name in the title bar.
495 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 462 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
496 height="20" label="Next &gt;" label_selected="Next &gt;" 463 height="20" label="Next &gt;" label_selected="Next &gt;"
497 mouse_opaque="true" name="Next &gt;" right="330" width="80" /> 464 mouse_opaque="true" name="Next &gt;" right="330" width="80" />
498 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 465 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center"
499 height="20" label="&lt; Prev" label_selected="&lt; Prev" 466 height="20" label="&lt; Prev" label_selected="&lt; Prev"
500 mouse_opaque="true" name="&lt; Prev" right="244" width="80" /> 467 mouse_opaque="true" name="&lt; Prev" right="244" width="80" />
501 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 468 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
502 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 469 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
503 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 470 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
504 name="find" v_pad="0" width="50"> 471 name="find" v_pad="0" width="50">
505 Find: 472 Find:
506 </text> 473 </text>
507 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 474 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
508 follows="left|top" font="SansSerif" height="18" left_delta="38" 475 follows="left|top" font="SansSerif" height="18" left_delta="38"
509 max_length="63" mouse_opaque="true" name="name" width="200" /> 476 max_length="63" mouse_opaque="true" name="name" width="200" />
510 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 477 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
511 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 478 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true"
512 name="Search" width="70" /> 479 name="Search" width="70" />
513 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true" 480 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true"
481 draw_heading="true"
514 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 482 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
515 multi_select="false" name="results" search_column="2" width="326"> 483 multi_select="false" name="results" search_column="2" width="326">
516 <column label="" name="icon" width="24" /> 484 <column label="" name="icon" width="24" />
517 <column label="" name="type" width="-1" /> 485 <column label="" name="type" width="-1" />
518 <column label="Name" name="name" width="274" /> 486 <column label="Name" name="name" width="274" />
519 </scroll_list> 487 </scroll_list>
520 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 488 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
521 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom" 489 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
522 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 490 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
523 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 491 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
524 </panel> 492 </panel>
525 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 493 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
526 label="Groups" left="1" mouse_opaque="false" name="groups_panel" 494 label="Groups" left="1" mouse_opaque="false"
495 name="groups_panel"
527 width="778"> 496 width="778">
528 <string name="searching_text"> 497 <string name="searching_text">Searching...</string>
529 Searching... 498 <string name="not_found_text">None Found.</string>
530 </string> 499 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
531 <string name="not_found_text"> 500 label="Back"
532 None Found. 501 left="10"
533 </string> 502 name="back_btn" width="70" />
534 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 503 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
535 height="20" label="Next &gt;" label_selected="Next &gt;" 504 label="Forward" left_delta="75"
536 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 505 name="forward_btn" width="70" />
537 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 506 <line_editor bevel_style="in"
538 height="20" label="&lt; Prev" label_selected="&lt; Prev" 507 border_style="line"
539 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 508 border_thickness="1"
540 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 509 bottom_delta="0"
541 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 510 enabled="true"
542 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 511 follows="top|left|right"
543 name="find" v_pad="0" width="50"> 512 font="SansSerif"
544 Find: 513 handle_edit_keys_directly="false"
545 </text> 514 commit_on_focus_lost="false"
546 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 515 height="20"
547 follows="left|top" font="SansSerif" height="18" left_delta="38" 516 hidden="false"
548 max_length="63" mouse_opaque="true" name="name" width="200" /> 517 label="Search"
549 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 518 left_delta="80"
550 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 519 width="180"
551 name="Search" width="70" /> 520 max_length="254"
552 <check_box bottom_delta="-16" control_name="ShowMatureGroups" follows="left|top" 521 mouse_opaque="true"
522 name="search_editor"
523 select_all_on_focus_received="false"
524 select_on_focus="false"
525 tab_group="1"
526 tool_tip="Search Second Life" />
527 <button follows="top|right" font="SansSerif" height="20"
528 label="Search"
529 left_delta="185"
530 bottom_delta="0"
531 name="search_btn" width="70" />
532 <check_box bottom_delta="0"
533 control_name="ShowMatureFindAll" follows="right|top"
553 font="SansSerifSmall" height="16" initial_value="false" 534 font="SansSerifSmall" height="16" initial_value="false"
554 label="Include Mature groups" left="42" mouse_opaque="true" 535 label="Include Mature content"
555 name="incmature" width="204" /> 536 left_delta="133"
556 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true" 537 name="mature_check"
557 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 538 width="156" />
558 multi_select="false" name="results" search_column="2" width="339"> 539 <web_browser name="groups_browser"
559 <column label="" name="icon" sort="score" sort_ascending="false" width="24" /> 540 bottom="25"
560 <column label="" name="type" width="-1" /> 541 follows="top|left|bottom|right"
561 <column dynamicwidth="true" label="Name" name="name" /> 542 font="SansSerifSmall"
562 <column halign="left" label="Members" name="members" sort_ascending="false" width="100" /> 543 left="10"
563 <column label="" name="score" width="-1" /> 544 right="-10"
564 </scroll_list> 545 top="-40" />
565 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 546 <text bottom="5"
566 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom" 547 follows="bottom|left"
567 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 548 halign="left"
568 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 549 left="10"
569 </panel> 550 width="150"
570 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 551 name="status_text"
571 label="All (old)" left="1" mouse_opaque="false" name="find_all_old_panel" 552 height="16" />
572 width="778"> 553 <string name="loading_text">Loading...</string>
573 <string name="searching_text"> 554 <string name="done_text">Done</string>
574 Searching... 555 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
575 </string> 556 <string name="default_search_page">"http://secondlife.com/app/search/index_groups.php?"</string>
576 <string name="not_found_text"> 557 </panel>
577 None Found.
578 </string>
579 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
580 height="20" label="&lt; Prev" label_selected="&lt; Prev" left="80"
581 mouse_opaque="true" name="&lt; Prev" width="60" />
582 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
583 height="20" label="Next &gt;" label_selected="Next &gt;"
584 mouse_opaque="true" name="Next &gt;" width="60" />
585 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
586 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
587 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
588 name="find" v_pad="0" width="50">
589 Find:
590 </text>
591 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
592 follows="left|top" font="SansSerif" height="18" left_delta="38"
593 max_length="63" mouse_opaque="true" name="name" width="128" />
594 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
595 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
596 name="Search" width="70" />
597 <check_box bottom="-22" control_name="ShowMatureFindAll" follows="left|top"
598 font="SansSerifSmall" height="16" initial_value="false"
599 label="Include Mature content" left_delta="78" mouse_opaque="true"
600 name="incmature" width="156" />
601 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="false"
602 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
603 multi_select="false" name="results" search_column="1" width="339">
604 <column label="" name="icon" width="24" />
605 <column label="Name" name="name" width="235" />
606 <column label="Price" name="price" width="90" />
607 <column label="Time (PT)" name="date" width="90" />
608 <column label="Time" name="time" width="-1" />
609 <column label="Traffic" name="dwell" width="90" />
610 <column label="Area" name="area" width="90" />
611 <column label="L$/sq.m" name="per_meter" width="90" />
612 <column label="Online" name="online" width="90" />
613 <column label="Members" name="members" width="90" />
614 </scroll_list>
615 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
616 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
617 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
618 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
619 </panel>
620 </tab_container> 558 </tab_container>
621 <panel bottom="-560" follows="right|top" height="470" left="340" 559 <panel bottom="-560" follows="right|top" height="470" left="340"
622 name="classified_details_panel" width="440" /> 560 name="classified_details_panel" width="440" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_im.xml b/linden/indra/newview/skins/xui/en-us/floater_im.xml
index caf54e3..11c839c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_im.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_im.xml
@@ -16,6 +16,10 @@
16 <string name="invite_message"> 16 <string name="invite_message">
17 Click the [BUTTON NAME] button to accept/connect to this voice chat. 17 Click the [BUTTON NAME] button to accept/connect to this voice chat.
18 </string> 18 </string>
19 <string name="muted_message">
20 [FIRST] [LAST] is muted.
21 </string>
22
19 <string name="generic_request_error"> 23 <string name="generic_request_error">
20 Error making request, please try again later. 24 Error making request, please try again later.
21 </string> 25 </string>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
index 18f39dd..126bc7b 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
@@ -67,7 +67,7 @@
67 <text bottom="-294" left="20" width="94" halign="right" name="YDeadZone">Y Dead Zone</text> 67 <text bottom="-294" left="20" width="94" halign="right" name="YDeadZone">Y Dead Zone</text>
68 <spinner bottom="-294" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone2" name="AvatarAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 68 <spinner bottom="-294" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone2" name="AvatarAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
69 <spinner bottom="-294" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone2" name="BuildAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 69 <spinner bottom="-294" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone2" name="BuildAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
70 <spinner bottom="-294" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone2" ame="FlycamAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 70 <spinner bottom="-294" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone2" name="FlycamAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
71 71
72 <text bottom="-314" left="20" width="94" halign="right" name="ZDeadZone">Z Dead Zone</text> 72 <text bottom="-314" left="20" width="94" halign="right" name="ZDeadZone">Z Dead Zone</text>
73 <spinner bottom="-314" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone0" name="AvatarAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 73 <spinner bottom="-314" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone0" name="AvatarAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml b/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
index f9d555d..2abd503 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
@@ -2,7 +2,7 @@
2<multi_floater bottom="-463" can_close="true" can_drag_on_left="false" can_minimize="true" 2<multi_floater bottom="-463" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" height="233" left="337" min_height="100" min_width="100" 3 can_resize="true" height="233" left="337" min_height="100" min_width="100"
4 mouse_opaque="true" name="script debug floater" 4 mouse_opaque="true" name="script debug floater"
5 rect_control="FloaterScriptDebugRect" title="Script Errors/Warning" 5 rect_control="FloaterScriptDebugRect" title="Script Warning/Error"
6 width="450"> 6 width="450">
7 <tab_container border="false" bottom="-233" follows="left|top|right|bottom" height="217" 7 <tab_container border="false" bottom="-233" follows="left|top|right|bottom" height="217"
8 left="1" mouse_opaque="false" name="Preview Tabs" tab_position="bottom" 8 left="1" mouse_opaque="false" name="Preview Tabs" tab_position="bottom"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml b/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
index 3966ac6..1346f7c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
@@ -18,13 +18,13 @@
18 Save snapshot to hard drive 18 Save snapshot to hard drive
19 </radio_item> 19 </radio_item>
20 </radio_group> 20 </radio_group>
21 <text bottom="-240" follows="left|top" height="25" left="10" name="file_size_label" 21 <text bottom="-236" follows="left|top" height="25" left="10" name="file_size_label"
22 width="195"> 22 width="195">
23 File size: [SIZE] KB 23 File size: [SIZE] KB
24 </text> 24 </text>
25 <button bottom="-250" follows="left|top" height="20" label="Refresh Snapshot" left="10" 25 <button bottom="-246" follows="left|top" height="20" label="Refresh Snapshot" left="10"
26 name="new_snapshot_btn" width="195" /> 26 name="new_snapshot_btn" width="195" />
27 <button bottom_delta="-20" follows="left|top" height="20" label="Send" left="10" 27 <button bottom_delta="-22" follows="left|top" height="20" label="Send" left="10"
28 name="send_btn" width="105" /> 28 name="send_btn" width="105" />
29 <button bottom_delta="0" follows="left|top" height="20" label="Upload (L$10)" left="10" 29 <button bottom_delta="0" follows="left|top" height="20" label="Upload (L$10)" left="10"
30 name="upload_btn" width="105" /> 30 name="upload_btn" width="105" />
@@ -142,7 +142,7 @@
142 name="keep_open_check" /> 142 name="keep_open_check" />
143 <check_box bottom_delta="-20" follows="left|top" label="Freeze frame (fullscreen preview)" 143 <check_box bottom_delta="-20" follows="left|top" label="Freeze frame (fullscreen preview)"
144 left="10" name="freeze_frame_check" /> 144 left="10" name="freeze_frame_check" />
145 <check_box bottom_delta="-20" follows="left|top" label="Auto-snapshot" left="10" 145 <check_box bottom_delta="-20" follows="left|top" label="Auto-snapshot" left="20"
146 name="auto_snapshot_check" /> 146 name="auto_snapshot_check" />
147 <string name="unknown"> 147 <string name="unknown">
148 unknown 148 unknown
diff --git a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
index 4e26986..0ebab6f 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
@@ -98,51 +98,39 @@
98 font="SansSerifSmall" height="16" initial_value="false" label="" 98 font="SansSerifSmall" height="16" initial_value="false" label=""
99 left_delta="70" mouse_opaque="true" name="telehubchk" width="55" /> 99 left_delta="70" mouse_opaque="true" name="telehubchk" width="55" />
100 <icon bottom="-76" color="1, 1, 1, 1" follows="top|right" height="16" 100 <icon bottom="-76" color="1, 1, 1, 1" follows="top|right" height="16"
101 image_name="icon_popular.tga" left="1123" mouse_opaque="true"
102 name="popular" width="16" />
103 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
104 bottom="-76" drop_shadow_visible="true" follows="top|right"
105 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
106 mouse_opaque="true" name="popular_label" v_pad="0" width="145">
107 Popular
108 </text>
109 <check_box bottom="-76" control_name="MapShowPopular" follows="top|right"
110 font="SansSerifSmall" height="16" initial_value="false" label=""
111 left_delta="80" mouse_opaque="true" name="popular_chk" width="55" />
112 <icon bottom="-96" color="1, 1, 1, 1" follows="top|right" height="16"
113 image_name="icon_for_sale.tga" left="1123" mouse_opaque="true" 101 image_name="icon_for_sale.tga" left="1123" mouse_opaque="true"
114 name="landforsale" width="16" /> 102 name="landforsale" width="16" />
115 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 103 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
116 bottom="-96" drop_shadow_visible="true" follows="top|right" 104 bottom="-76" drop_shadow_visible="true" follows="top|right"
117 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 105 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
118 mouse_opaque="true" name="land_for_sale_label2" v_pad="0" width="145"> 106 mouse_opaque="true" name="land_for_sale_label2" v_pad="0" width="145">
119 Land For Sale 107 Land For Sale
120 </text> 108 </text>
121 <check_box bottom="-96" control_name="MapShowLandForSale" follows="top|right" 109 <check_box bottom="-76" control_name="MapShowLandForSale" follows="top|right"
122 font="SansSerifSmall" height="16" initial_value="false" label="" 110 font="SansSerifSmall" height="16" initial_value="false" label=""
123 left_delta="80" mouse_opaque="true" name="land_for_sale_chk" width="55" /> 111 left_delta="80" mouse_opaque="true" name="land_for_sale_chk" width="55" />
124 <icon bottom="-116" color="1, 1, 1, 1" follows="top|right" height="16" 112 <icon bottom="-96" color="1, 1, 1, 1" follows="top|right" height="16"
125 image_name="map_event.tga" left="1123" mouse_opaque="true" name="event" 113 image_name="map_event.tga" left="1123" mouse_opaque="true" name="event"
126 width="16" /> 114 width="16" />
127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 115 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
128 bottom="-116" drop_shadow_visible="true" follows="top|right" 116 bottom="-96" drop_shadow_visible="true" follows="top|right"
129 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 117 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
130 mouse_opaque="true" name="events_label" v_pad="0" width="145"> 118 mouse_opaque="true" name="events_label" v_pad="0" width="145">
131 Events 119 Events
132 </text> 120 </text>
133 <check_box bottom="-116" control_name="MapShowEvents" follows="top|right" 121 <check_box bottom="-96" control_name="MapShowEvents" follows="top|right"
134 font="SansSerifSmall" height="16" initial_value="false" label="" 122 font="SansSerifSmall" height="16" initial_value="false" label=""
135 left_delta="80" mouse_opaque="true" name="event_chk" width="55" /> 123 left_delta="80" mouse_opaque="true" name="event_chk" width="55" />
136 <icon bottom="-136" color="1, 1, 1, 1" follows="top|right" height="16" 124 <icon bottom="-116" color="1, 1, 1, 1" follows="top|right" height="16"
137 image_name="map_event_mature.tga" left="1123" mouse_opaque="true" 125 image_name="map_event_mature.tga" left="1123" mouse_opaque="true"
138 name="events_mature_icon" width="16" /> 126 name="events_mature_icon" width="16" />
139 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
140 bottom="-136" drop_shadow_visible="true" follows="top|right" 128 bottom="-116" drop_shadow_visible="true" follows="top|right"
141 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 129 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
142 mouse_opaque="true" name="events_mature_label" v_pad="0" width="145"> 130 mouse_opaque="true" name="events_mature_label" v_pad="0" width="145">
143 Events (M) 131 Events (M)
144 </text> 132 </text>
145 <check_box bottom="-136" control_name="ShowMatureEvents" follows="top|right" 133 <check_box bottom="-116" control_name="ShowMatureEvents" follows="top|right"
146 font="SansSerifSmall" height="16" initial_value="true" label="" 134 font="SansSerifSmall" height="16" initial_value="true" label=""
147 left_delta="80" mouse_opaque="true" name="event_mature_chk" width="55" /> 135 left_delta="80" mouse_opaque="true" name="event_mature_chk" width="55" />
148 <icon bottom="-181" color="0.5, 0, 0, 1" follows="top|right" height="16" 136 <icon bottom="-181" color="0.5, 0, 0, 1" follows="top|right" height="16"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
index cdba314..054f867 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
@@ -62,34 +62,6 @@
62 </menu_item_call> 62 </menu_item_call>
63 <menu_item_separator bottom="-194" enabled="true" height="8" label="-----------" left="0" 63 <menu_item_separator bottom="-194" enabled="true" height="8" label="-----------" left="0"
64 mouse_opaque="true" name="separator4" width="243" /> 64 mouse_opaque="true" name="separator4" width="243" />
65 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
66 height="117" label="Set Window Size" left="0" mouse_opaque="false"
67 name="Set Window Size" opaque="true" tear_off="true" width="125">
68 <menu_item_call bottom="-29" enabled="true" height="19" label="320x240" left="0"
69 mouse_opaque="true" name="320x240" width="125">
70 <on_click function="File.SetWindowSize" userdata="320,240" />
71 </menu_item_call>
72 <menu_item_call bottom="-48" enabled="true" height="19" label="640x480" left="0"
73 mouse_opaque="true" name="640x480" width="125">
74 <on_click function="File.SetWindowSize" userdata="640,480" />
75 </menu_item_call>
76 <menu_item_call bottom="-67" enabled="true" height="19" label="800x600" left="0"
77 mouse_opaque="true" name="800x600" width="125">
78 <on_click function="File.SetWindowSize" userdata="800,600" />
79 </menu_item_call>
80 <menu_item_separator bottom="-75" enabled="true" height="8" label="-----------" left="0"
81 mouse_opaque="true" name="separator" width="125" />
82 <menu_item_call bottom="-94" enabled="true" height="19" label="720x480 (NTSC)" left="0"
83 mouse_opaque="true" name="720x480 (NTSC)" width="125">
84 <on_click function="File.SetWindowSize" userdata="720,480" />
85 </menu_item_call>
86 <menu_item_call bottom="-113" enabled="true" height="19" label="768x576 (PAL)" left="0"
87 mouse_opaque="true" name="768x576 (PAL)" width="125">
88 <on_click function="File.SetWindowSize" userdata="768,576" />
89 </menu_item_call>
90 </menu>
91 <menu_item_separator bottom="-240" enabled="true" height="8" label="-----------" left="0"
92 mouse_opaque="true" name="separator5" width="243" />
93 <menu_item_call bottom="-259" enabled="true" height="19" label="Quit" left="0" 65 <menu_item_call bottom="-259" enabled="true" height="19" label="Quit" left="0"
94 mouse_opaque="true" name="Quit" shortcut="control|Q" width="243"> 66 mouse_opaque="true" name="Quit" shortcut="control|Q" width="243">
95 <on_click function="File.Quit" userdata="" /> 67 <on_click function="File.Quit" userdata="" />
@@ -509,6 +481,7 @@
509 <menu_item_check bottom="-86" enabled="true" height="19" label="Fly" left="0" 481 <menu_item_check bottom="-86" enabled="true" height="19" label="Fly" left="0"
510 mouse_opaque="true" name="Fly" shortcut="Home" width="185"> 482 mouse_opaque="true" name="Fly" shortcut="Home" width="185">
511 <on_click function="World.Fly" userdata="" /> 483 <on_click function="World.Fly" userdata="" />
484 <on_enable function="World.EnableFly" />
512 <on_check control="FlyBtnState" /> 485 <on_check control="FlyBtnState" />
513 </menu_item_check> 486 </menu_item_check>
514 <menu_item_separator bottom="-94" enabled="true" height="8" label="-----------" left="0" 487 <menu_item_separator bottom="-94" enabled="true" height="8" label="-----------" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/mime_types.xml b/linden/indra/newview/skins/xui/en-us/mime_types.xml
index 2a77a8b..e2e6fb2 100644
--- a/linden/indra/newview/skins/xui/en-us/mime_types.xml
+++ b/linden/indra/newview/skins/xui/en-us/mime_types.xml
@@ -166,7 +166,7 @@
166 </widgettype> 166 </widgettype>
167 </mimetype> 167 </mimetype>
168 <mimetype name="image/*"> 168 <mimetype name="image/*">
169 <label label="image2_label"> 169 <label name="image2_label">
170 Image 170 Image
171 </label> 171 </label>
172 <widgettype> 172 <widgettype>
diff --git a/linden/indra/newview/skins/xui/en-us/notify.xml b/linden/indra/newview/skins/xui/en-us/notify.xml
index f0ba148..02aa57c 100644
--- a/linden/indra/newview/skins/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/xui/en-us/notify.xml
@@ -914,6 +914,21 @@ Click Accept to join the call or Decline to decline the invitation. Click Mute t
914 Mute 914 Mute
915 </option> 915 </option>
916 </notify> 916 </notify>
917 <notify name="AutoUnmuteByIM" tip="false">
918 <message name="message">
919 [FIRST] [LAST] was sent an instant message and has been automatically unmuted.
920 </message>
921 </notify>
922 <notify name="AutoUnmuteByMoney" tip="false">
923 <message name="message">
924 [FIRST] [LAST] was given money and has been automatically unmuted.
925 </message>
926 </notify>
927 <notify name="AutoUnmuteByInventory" tip="false">
928 <message name="message">
929 [FIRST] [LAST] was offered inventory and has been automatically unmuted.
930 </message>
931 </notify>
917 <notify name="VoiceInviteGroup" tip="false" unique="true"> 932 <notify name="VoiceInviteGroup" tip="false" unique="true">
918 <message name="message"> 933 <message name="message">
919 [NAME] has joined a Voice Chat call with the group [GROUP]. 934 [NAME] has joined a Voice Chat call with the group [GROUP].
@@ -1029,4 +1044,9 @@ Click Accept to join the chat or Decline to decline the invitation. Click Mute t
1029 The region you have entered is running a different simulator version. Click this message for details. 1044 The region you have entered is running a different simulator version. Click this message for details.
1030 </message> 1045 </message>
1031 </notify> 1046 </notify>
1047 <notify caution="true" name="UnableToOpenCommandURL" tip="true">
1048 <message name="message">
1049 The URL you clicked cannot be opened from this web browser.
1050 </message>
1051 </notify>
1032</notifications> 1052</notifications>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
index 001d6d6..d378cb9 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
@@ -22,8 +22,18 @@
22 name="classified_map_btn" width="80" /> 22 name="classified_map_btn" width="80" />
23 <combo_box bottom_delta="-27" follows="left|top" height="18" label="" left="10" 23 <combo_box bottom_delta="-27" follows="left|top" height="18" label="" left="10"
24 name="classified_category_combo" right="150" /> 24 name="classified_category_combo" right="150" />
25 <check_box bottom_delta="-1" follows="left|top" height="20" label="Mature" left="160" 25 <combo_box allow_text_entry="false" bottom_delta="-1" follows="left|top" height="20"
26 name="classified_mature_check" width="80" /> 26 label="" left="160" name="classified_mature_check" width="130" >
27 <combo_item name="select_mature" value="Select">
28 - Select Mature -
29 </combo_item>
30 <combo_item name="mature" value="Mature">
31 Mature Content
32 </combo_item>
33 <combo_item name="not_mature" value="Not Mature">
34 Not Mature Content
35 </combo_item>
36 </combo_box>
27 <text bottom_delta="-25" follows="left|top" 37 <text bottom_delta="-25" follows="left|top"
28 font="SansSerifSmall" height="18" left="10" name="classified_info_text" 38 font="SansSerifSmall" height="18" left="10" name="classified_info_text"
29 tool_tip="The more you choose to pay for your ad, the higher in the list it appears." 39 tool_tip="The more you choose to pay for your ad, the higher in the list it appears."
diff --git a/linden/indra/newview/skins/xui/en-us/panel_classified.xml b/linden/indra/newview/skins/xui/en-us/panel_classified.xml
index bc7a4d1..063a110 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_classified.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_classified.xml
@@ -22,10 +22,21 @@
22 name="classified_map_btn" width="100" /> 22 name="classified_map_btn" width="100" />
23 <button bottom_delta="0" follows="left|top" height="20" label="Profile" left="230" 23 <button bottom_delta="0" follows="left|top" height="20" label="Profile" left="230"
24 name="classified_profile_btn" width="100" /> 24 name="classified_profile_btn" width="100" />
25 <check_box bottom="422" follows="left|top" height="20" label="Mature" left="30" 25 <combo_box allow_text_entry="false" bottom="422" follows="left|top" height="20" left="30"
26 name="classified_mature_check" width="80" /> 26 max_chars="20" mouse_opaque="true" name="classified_mature_check" width="130">
27 <combo_box bottom="445" follows="left|top" height="18" label="" 27 <combo_item name="select_mature" value="Select">
28 left="20" name="classified_category_combo" right="150" /> 28 - Select Mature -
29 </combo_item>
30 <combo_item name="mature" value="Mature">
31 Mature Content
32 </combo_item>
33 <combo_item name="not_mature" value="Not Mature">
34 Not Mature Content
35 </combo_item>
36 </combo_box>
37 <combo_box bg_readonly_color="grey" bottom="445" follows="left|top" height="18" label=""
38 left="20" name="classified_category_combo" right="150"
39 text_readonly_color="white" />
29 <button bottom="400" follows="left|top" height="20" label="Update" left="30" 40 <button bottom="400" follows="left|top" height="20" label="Update" left="30"
30 name="classified_update_btn" width="70" /> 41 name="classified_update_btn" width="70" />
31 <string name="ad_placed_paid"> 42 <string name="ad_placed_paid">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
index 7332cdf..8103363 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
@@ -83,11 +83,6 @@ Hover your mouse over the options for more help.
83 initial_value="true" label="Show in search" left="4" mouse_opaque="true" 83 initial_value="true" label="Show in search" left="4" mouse_opaque="true"
84 name="show_in_group_list" radio_style="false" 84 name="show_in_group_list" radio_style="false"
85 tool_tip="Let people see this group in search results." width="95" /> 85 tool_tip="Let people see this group in search results." width="95" />
86 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
87 initial_value="false" label="Mature group" left_delta="0"
88 mouse_opaque="true" name="mature" radio_style="false"
89 tool_tip="Sets whether your group information is considered mature."
90 visible="true" width="95" />
91 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16" 86 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16"
92 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true" 87 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true"
93 name="open_enrollement" radio_style="false" 88 name="open_enrollement" radio_style="false"
@@ -106,6 +101,21 @@ Hover your mouse over the options for more help.
106 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170" 101 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170"
107 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." 102 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
108 v_pad="0" width="65" /> 103 v_pad="0" width="65" />
104 <combo_box allow_text_entry="false" bottom_delta="-30" follows="left|top" height="20" left="6"
105 max_chars="20" mouse_opaque="true" name="group_mature_check"
106 tool_tip="Sets whether your group information is considered mature."
107 width="130">
108 <combo_item name="select_mature" value="Select">
109 - Select Mature -
110 </combo_item>
111 <combo_item name="mature" value="Mature">
112 Mature Content
113 </combo_item>
114 <combo_item name="not_mature" value="Not Mature">
115 Not Mature Content
116 </combo_item>
117 </combo_box>
118
109 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225" 119 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225"
110 name="title_container" width="160"> 120 name="title_container" width="160">
111 <text bottom="17" font="SansSerifSmall" left="0" name="active_title_label"> 121 <text bottom="17" font="SansSerifSmall" left="0" name="active_title_label">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml b/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
index 7f0c0f7..0e5e84d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
@@ -24,8 +24,9 @@ the General tab.
24 bottom_delta="-20" drop_shadow_visible="true" font="SansSerifSmall" 24 bottom_delta="-20" drop_shadow_visible="true" font="SansSerifSmall"
25 h_pad="0" halign="left" height="16" left_delta="0" mouse_opaque="true" 25 h_pad="0" halign="left" height="16" left_delta="0" mouse_opaque="true"
26 name="lbl2" v_pad="0" width="436"> 26 name="lbl2" v_pad="0" width="436">
27 Notices are kept for 30 days. Click the notice below you wish to view. 27 Notices are kept for 14 days. Click the notice below you wish to view.
28Click the &apos;Refresh&apos; button to check if new notices have been received. 28Click the &apos;Refresh&apos; button to check if new notices have been received.
29Notice lists are limited to 200 notices per group on a daily basis.
29 </text> 30 </text>
30 <scroll_list background_visible="true" bottom_delta="-137" column_padding="0" 31 <scroll_list background_visible="true" bottom_delta="-137" column_padding="0"
31 draw_border="true" draw_heading="true" enabled="true" 32 draw_border="true" draw_heading="true" enabled="true"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
index fbcb773..527309e 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
@@ -16,22 +16,48 @@
16 If unchecked, viewer will display full-screen when logged in. 16 If unchecked, viewer will display full-screen when logged in.
17 </text_editor> 17 </text_editor>
18 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 18 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
19 bottom="-39" drop_shadow_visible="true" enabled="true" follows="left|top" 19 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top"
20 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
21 mouse_opaque="true" name="WindowSizeLabel" v_pad="0" width="128">
22 Window Size:
23 </text>
24 <combo_box allow_text_entry="false" bottom="-67" enabled="true" follows="left|top"
25 height="18" left="185" max_chars="20" mouse_opaque="true"
26 name="windowsize combo" width="150">
27 <combo_item type="string" length="1" enabled="true" name="640x480" value="640 x 480">
28 640x480
29 </combo_item>
30 <combo_item type="string" length="1" enabled="true" name="800x600" value="800 x 600">
31 800x600
32 </combo_item>
33 <combo_item type="string" length="1" enabled="true" name="720x480" value="720 x 480">
34 720x480 (NTSC)
35 </combo_item>
36 <combo_item type="string" length="1" enabled="true" name="768x576" value="768 x 576">
37 768x576 (PAL)
38 </combo_item>
39 <combo_item type="string" length="1" enabled="true" name="1024x768" value="1024 x 768">
40 1024x768
41 </combo_item>
42
43 </combo_box>
44 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
45 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top"
20 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 46 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
21 mouse_opaque="true" name="DisplayResLabel" v_pad="0" width="128"> 47 mouse_opaque="true" name="DisplayResLabel" v_pad="0" width="128">
22 Display Resolution: 48 Display Resolution:
23 </text> 49 </text>
24 <combo_box allow_text_entry="false" bottom="-44" enabled="true" follows="left|top" 50 <combo_box allow_text_entry="false" bottom="-67" enabled="true" follows="left|top"
25 height="18" left="185" max_chars="20" mouse_opaque="true" 51 height="18" left="185" max_chars="20" mouse_opaque="true"
26 name="fullscreen combo" width="150" /> 52 name="fullscreen combo" width="150" />
27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 53 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
28 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top" 54 bottom="-39" drop_shadow_visible="true" enabled="true" follows="left|top"
29 font="SansSerifSmall" h_pad="0" halign="left" height="12" 55 font="SansSerifSmall" h_pad="0" halign="left" height="12"
30 left="10" mouse_opaque="true" name="AspectRatioLabel1" 56 left="10" mouse_opaque="true" name="AspectRatioLabel1"
31 tool_tip="width / height" v_pad="0" width="160"> 57 tool_tip="width / height" v_pad="0" width="160">
32 Aspect Ratio: 58 Aspect Ratio:
33 </text> 59 </text>
34 <combo_box allow_text_entry="true" bottom="-66" enabled="true" follows="left|top" 60 <combo_box allow_text_entry="true" bottom="-43" enabled="true" follows="left|top"
35 height="16" left="185" max_chars="100" mouse_opaque="true" 61 height="16" left="185" max_chars="100" mouse_opaque="true"
36 name="aspect_ratio" tool_tip="width / height" width="150"> 62 name="aspect_ratio" tool_tip="width / height" width="150">
37 <combo_item type="string" length="1" enabled="true" name="4:3(StandardCRT)" value="1.333333"> 63 <combo_item type="string" length="1" enabled="true" name="4:3(StandardCRT)" value="1.333333">
@@ -47,7 +73,7 @@
47 16:9 (Widescreen) 73 16:9 (Widescreen)
48 </combo_item> 74 </combo_item>
49 </combo_box> 75 </combo_box>
50 <check_box bottom="-67" control_name="FullScreenAutoDetectAspectRatio" enabled="true" 76 <check_box bottom="-44" control_name="FullScreenAutoDetectAspectRatio" enabled="true"
51 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 77 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
52 label="Auto-detect ratio" left="358" mouse_opaque="true" 78 label="Auto-detect ratio" left="358" mouse_opaque="true"
53 name="aspect_auto_detect" radio_style="false" width="256" /> 79 name="aspect_auto_detect" radio_style="false" width="256" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
index a32ca56..4d84e32 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
@@ -3,13 +3,13 @@
3 height="408" label="Web" left="102" mouse_opaque="true" name="web" 3 height="408" label="Web" left="102" mouse_opaque="true" name="web"
4 width="517"> 4 width="517">
5 <radio_group bottom="-45" draw_border="false" follows="top|left" height="40" left="12" 5 <radio_group bottom="-45" draw_border="false" follows="top|left" height="40" left="12"
6 name="use_external_browser" 6 name="use_external_browser" width="480">
7 tool_tip="Use outside web browser for help, web links, etc. Not recommended if running full screen." 7 <radio_item bottom="-20" height="20" left="0" name="external" width="480"
8 width="480"> 8 tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen.">
9 <radio_item bottom="-20" height="20" left="0" name="external" width="480">
10 Use external web browser (Firefox, Safari, Internet Explorer) 9 Use external web browser (Firefox, Safari, Internet Explorer)
11 </radio_item> 10 </radio_item>
12 <radio_item bottom="-40" height="20" left="0" name="internal" width="480"> 11 <radio_item bottom="-40" height="20" left="0" name="internal" width="480"
12 tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside Second Life.">
13 Use built-in web browser 13 Use built-in web browser
14 </radio_item> 14 </radio_item>
15 </radio_group> 15 </radio_group>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
index fa12fca..af3cecf 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
@@ -9,6 +9,14 @@
9 name="region_text" width="400"> 9 name="region_text" width="400">
10 unknown 10 unknown
11 </text> 11 </text>
12 <text bottom="-50" follows="left|top" font="SansSerif" height="20" left="10"
13 name="version_channel_text_lbl" width="100">
14 Version:
15 </text>
16 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60"
17 name="version_channel_text" width="200">
18 unknown
19 </text>
12 <check_box bottom_delta="-20" follows="left|top" height="20" label="Block Terraform" 20 <check_box bottom_delta="-20" follows="left|top" height="20" label="Block Terraform"
13 left="10" name="block_terraform_check" width="80" /> 21 left="10" name="block_terraform_check" width="80" />
14 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 22 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
@@ -74,6 +82,6 @@
74 label="Teleport Home All Users..." left="10" name="kick_all_btn" width="250" /> 82 label="Teleport Home All Users..." left="10" name="kick_all_btn" width="250" />
75 <button bottom_delta="-40" follows="left|top" height="20" 83 <button bottom_delta="-40" follows="left|top" height="20"
76 label="Send Message To Region..." left="10" name="im_btn" width="200" /> 84 label="Send Message To Region..." left="10" name="im_btn" width="200" />
77 <button bottom="-50" follows="left|top" height="20" label="Manage Telehub..." 85 <button bottom="-70" follows="left|top" height="20" label="Manage Telehub..."
78 left="250" name="manage_telehub_btn" width="150" /> 86 left="250" name="manage_telehub_btn" width="150" />
79</panel> 87</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/strings.xml b/linden/indra/newview/skins/xui/en-us/strings.xml
new file mode 100644
index 0000000..9952d56
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/strings.xml
@@ -0,0 +1,166 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<!-- This file contains strings that used to be hardcoded in the source.
3 It is only for those strings which don't belong in a floater.
4 For example, the strings used in avatar chat bubbles, and strings
5 that are returned from one component and may appear in many places-->
6<strings>
7
8 <!-- Login -->
9 <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string>
10 <string name="LoginAuthenticating">Authenticating</string>
11 <string name="LoginMaintenance">Performing account maintenance...</string>
12 <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string>
13 <string name="LoginPrecaching">Loading world...</string>
14 <string name="LoginInitializingBrowser">Initializing embedded web browser...</string>
15 <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string>
16 <string name="LoginProcessingResponse">Processing Response...</string>
17 <string name="LoginInitializingWorld">Initializing World...</string>
18 <string name="LoginDecodingImages">Decoding images...</string>
19 <string name="LoginInitializingQuicktime">Initializing QuickTime...</string>
20 <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string>
21 <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string>
22 <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
23 <string name="LoginConnectingToRegion">Connecting to region...</string>
24 <string name="LoginDownloadingClothing">Downloading clothing...</string>
25
26
27
28 <!-- Tooltip, llhoverview.cpp. Note: spaces at the end are intentional -->
29 <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
30 <string name="TooltipNoName">(no name)</string> <!-- No name on an object -->
31 <string name="TooltipOwner">Owner:</string> <!-- Owner name follows -->
32 <string name="TooltipPublic">Public</string> <!-- Public permissions on an object -->
33 <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group -->
34 <string name="TooltipFlagScript">Script</string>
35 <string name="TooltipFlagPhysics">Physics</string>
36 <string name="TooltipFlagTouch">Touch</string>
37 <string name="TooltipFlagL$">L$</string>
38 <string name="TooltipFlagDropInventory">Drop Inventory</string>
39 <string name="TooltipFlagPhantom">Phantom</string>
40 <string name="TooltipFlagTemporary">Temporary</string>
41 <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string>
42 <string name="TooltipFreeToCopy">Free to copy</string>
43 <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version -->
44 <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) -->
45 <string name="TooltipFlagGroupBuild">Group Build</string>
46 <string name="TooltipFlagNoBuild">No Build</string>
47 <string name="TooltipFlagNoEdit">Group Build</string>
48 <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area -->
49 <string name="TooltipFlagNoFly">No Fly</string>
50 <string name="TooltipFlagGroupScripts">Group Scripts</string>
51 <string name="TooltipFlagNoScripts">No Scripts</string>
52
53 <string name="TooltipLand">Land:</string>
54
55
56 <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. -->
57 <string name="RetrievingData">Retrieving...</string>
58
59 <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData -->
60 <string name="LoadingData">Loading...</string>
61
62
63 <!-- namecache -->
64 <!-- Avatar name: text shown for LLUUID::null -->
65 <string name="AvatarNameNobody">(nobody)</string>
66
67 <!-- Avatar name: text shown while fetching name -->
68 <string name="AvatarNameWaiting">(waiting)</string>
69
70 <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. -->
71 <string name="AvatarNameHippos">(hippos)</string>
72
73 <!-- Group name: text shown for LLUUID::null -->
74 <string name="GroupNameNone">(none)</string>
75
76 <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. -->
77 <string name="AssetErrorNone">No error</string>
78 <string name="AssetErrorRequestFailed">Asset request: failed</string>
79 <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string>
80 <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string>
81 <string name="AssetErrorEOF">End of file</string>
82 <string name="AssetErrorCannotOpenFile">Cannot open file</string>
83 <string name="AssetErrorFileNotFound">File not found</string>
84 <string name="AssetErrorTCPTimeout">File transfer timeout</string>
85 <string name="AssetErrorCircuitGone">Circuit gone</string>
86 <string name="AssetErrorUnknownStatus">Unknown status</string>
87
88 <!-- llvoavatar. Displayed in the avatar's chat bubble -->
89 <string name="AvatarEditingApparance">(Editing Appearance)</string>
90 <string name="AvatarAway">Away</string>
91 <string name="AvatarBusy">Busy</string>
92 <string name="AvatarMuted">Muted</string>
93
94 <!-- animations -->
95 <string name="anim_express_afraid">Afraid</string>
96 <string name="anim_express_anger">Angry</string>
97 <string name="anim_away">Away</string>
98 <string name="anim_backflip">Backflip</string>
99 <string name="anim_express_laugh">Belly Laugh</string>
100 <string name="anim_express_toothsmile">BigSmile</string>
101 <string name="anim_blowkiss">Blow Kiss</string>
102 <string name="anim_express_bored">Bored</string>
103 <string name="anim_bow">Bow</string>
104 <string name="anim_clap">Clap</string>
105 <string name="anim_courtbow">Court Bow</string>
106 <string name="anim_express_cry">Cry</string>
107 <string name="anim_dance1">Dance 1</string>
108 <string name="anim_dance2">Dance 2</string>
109 <string name="anim_dance3">Dance 3</string>
110 <string name="anim_dance4">Dance 4</string>
111 <string name="anim_dance5">Dance 5</string>
112 <string name="anim_dance6">Dance 6</string>
113 <string name="anim_dance7">Dance 7</string>
114 <string name="anim_dance8">Dance 8</string>
115 <string name="anim_express_disdain">Disdain</string>
116 <string name="anim_drink">Drink</string>
117 <string name="anim_express_embarrased">Embarrassed</string>
118 <string name="anim_angry_fingerwag">Finger Wag</string>
119 <string name="anim_fist_pump">Fist Pump</string>
120 <string name="anim_yoga_float">Floating Yoga</string>
121 <string name="anim_express_frown">Frown</string>
122 <string name="anim_impatient">Impatient</string>
123 <string name="anim_jumpforjoy">Jump For Joy</string>
124 <string name="anim_kissmybutt">Kiss My Butt</string>
125 <string name="anim_express_kiss">Kiss</string>
126 <string name="anim_laugh_short">Laugh</string>
127 <string name="anim_musclebeach">Muscle Beach</string>
128 <string name="anim_no_unhappy">No (Unhappy)</string>
129 <string name="anim_no_head">No</string>
130 <string name="anim_nyanya">Nya-nya-nya</string>
131 <string name="anim_punch_onetwo">One-Two Punch</string>
132 <string name="anim_express_open_mouth">Open Mouth</string>
133 <string name="anim_peace">Peace</string>
134 <string name="anim_point_you">Point at Other</string>
135 <string name="anim_point_me">Point at Self</string>
136 <string name="anim_punch_l">Punch Left</string>
137 <string name="anim_punch_r">Punch Right</string>
138 <string name="anim_rps_countdown">RPS count</string>
139 <string name="anim_rps_paper">RPS paper</string>
140 <string name="anim_rps_rock">RPS rock</string>
141 <string name="anim_rps_scissors">RPS scissors</string>
142 <string name="anim_express_repulsed">Repulsed</string>
143 <string name="anim_kick_roundhouse_r">Roundhouse Kick</string>
144 <string name="anim_express_sad">Sad</string>
145 <string name="anim_salute">Salute</string>
146 <string name="anim_shout">Shout</string>
147 <string name="anim_express_shrug">Shrug</string>
148 <string name="anim_express_smile">Smile</string>
149 <string name="anim_smoke_idle">Smoke Idle</string>
150 <string name="anim_smoke_inhale">Smoke Inhale</string>
151 <string name="anim_smoke_throw_down">Smoke Throw Down</string>
152 <string name="anim_express_surprise">Surprise</string>
153 <string name="anim_sword_strike_r">Sword Strike</string>
154 <string name="anim_angry_tantrum">Tantrum</string>
155 <string name="anim_express_tongue_out">TongueOut</string>
156 <string name="anim_hello">Wave</string>
157 <string name="anim_whisper">Whisper</string>
158 <string name="anim_whistle">Whistle</string>
159 <string name="anim_express_wink">Wink</string>
160 <string name="anim_wink_hollywood">Wink (Hollywood)</string>
161 <string name="anim_express_worry">Worry</string>
162 <string name="anim_yes_happy">Yes (Happy)</string>
163 <string name="anim_yes_head">Yes</string>
164
165</strings>
166
diff --git a/linden/indra/newview/skins/xui/es/panel_group_notices.xml b/linden/indra/newview/skins/xui/es/panel_group_notices.xml
index 86b8d2c..62d884d 100644
--- a/linden/indra/newview/skins/xui/es/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/es/panel_group_notices.xml
@@ -16,7 +16,7 @@ pestaña General.
16 Archivo de avisos de grupo 16 Archivo de avisos de grupo
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Avisos son mantenidos por 30 días. Haga clic en el aviso abajo se desea verlo. 19 Avisos son mantenidos por 14 días. Haga clic en el aviso abajo se desea verlo.
20Haga clic en el botón &apos;Actualizar lista&apos; si nuevos avisos fueron recibidos. 20Haga clic en el botón &apos;Actualizar lista&apos; si nuevos avisos fueron recibidos.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/fr/panel_group_notices.xml b/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
index 6643107..a266155 100644
--- a/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
@@ -16,7 +16,7 @@ l&apos;onglet Général.
16 Archive des Notifications du Groupe 16 Archive des Notifications du Groupe
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Les Notifications sont conservées pendant 30 jours. Cliquez sur la notification que vous souhaitez afficher. 19 Les Notifications sont conservées pendant 14 jours. Cliquez sur la notification que vous souhaitez afficher.
20Cliquez sur &apos;Actualiser&apos; pour afficher les nouvelles notifications. 20Cliquez sur &apos;Actualiser&apos; pour afficher les nouvelles notifications.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ja/floater_about.xml b/linden/indra/newview/skins/xui/ja/floater_about.xml
index 0567010..75983b5 100644
--- a/linden/indra/newview/skins/xui/ja/floater_about.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_about.xml
@@ -26,7 +26,7 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
26Voice chat Audio coding:Polycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C) 26Voice chat Audio coding:Polycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C)
27 27
28 28
29Happiness is a warm puppy. (ã—ã‚ã‚ã›ã¯Âcã‚ã£ãŸã‹ã„å­çЬ)-- ãƒãƒ£ãƒ¼ãƒ«ã‚ºãƒ»M・シュルツ 29Happiness is a warm puppy. (ã—ã‚ã‚ã›ã¯ã‚ã£ãŸã‹ã„å­çЬ)-- ãƒãƒ£ãƒ¼ãƒ«ã‚ºãƒ»M・シュルツ
30 </text_editor> 30 </text_editor>
31 <text name="you_are_at"> 31 <text name="you_are_at">
32 [POSITION]中 32 [POSITION]中
diff --git a/linden/indra/newview/skins/xui/ja/floater_html.xml b/linden/indra/newview/skins/xui/ja/floater_html.xml
index 1cb5384..6e1e7a0 100644
--- a/linden/indra/newview/skins/xui/ja/floater_html.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="ホーム" name="home_btn" /> 5 <button label="ホーム" name="home_btn" />
6 <button label="進む" name="forward_btn" /> 6 <button label="進む" name="forward_btn" />
7 <button label="移動" name="go_btn" /> 7 <button label="移動" name="go_btn" />
8 <string name="home_page_url">
9 http://jp.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_joystick.xml b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
index 517b9dd..baef61c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
@@ -3,65 +3,116 @@
3 <spinner label="X軸マッピング" name="JoystickAxis1" /> 3 <spinner label="X軸マッピング" name="JoystickAxis1" />
4 <spinner label="Y軸マッピング" name="JoystickAxis2" /> 4 <spinner label="Y軸マッピング" name="JoystickAxis2" />
5 <spinner label="Z軸マッピング" name="JoystickAxis0" /> 5 <spinner label="Z軸マッピング" name="JoystickAxis0" />
6 <spinner label="ピッãƒãƒ»ãƒžãƒƒãƒ”ング" name="JoystickAxis4" /> 6 <spinner label="ピッãƒãƒ»ãƒžãƒƒãƒ”ング" name="JoystickAxis4" label_width="110" left="10" width="150"/>
7 <spinner label="ヨー・マッピング" name="JoystickAxis5" /> 7 <spinner label="ヨー・マッピング" name="JoystickAxis5" />
8 <spinner label="ロール・マッピング" name="JoystickAxis3" /> 8 <spinner label="ロール・マッピング" name="JoystickAxis3" label_width="110" left="350" width="150"/>
9 <spinner label="ズーム・マッピング" name="JoystickAxis6" /> 9 <spinner label="ズーム・マッピング" name="JoystickAxis6" label_width="110" left="10" width="150"/>
10 <check_box label="直接ズーム" name="ZoomDirect" /> 10 <check_box label="直接ズーム" name="ZoomDirect" />
11 <check_box label="3Dカーソル" name="Cursor3D" /> 11 <check_box label="3Dカーソル" name="Cursor3D" />
12 <check_box label="自動レベル" name="AutoLeveling" /> 12 <check_box label="自動レベル" name="AutoLeveling" />
13 <text name="Control Modes:"> 13 <text name="Control Modes:">
14 制御モード: 14 制御モード:
15 </text> 15 </text>
16 <check_box name="JoystickAvatarEnabled">ã‚¢ãƒã‚¿ãƒ¼</check_box> 16 <check_box left="131" name="JoystickAvatarEnabled">ã‚¢ãƒã‚¿ãƒ¼</check_box>
17 <check_box name="JoystickBuildEnabled">造る</check_box> 17 <check_box left="201" name="JoystickBuildEnabled">造る</check_box>
18 <check_box name="JoystickFlycamEnabled">フライ・カメラ</check_box> 18 <check_box left="271" name="JoystickFlycamEnabled">フライ・カメラ</check_box>
19 <text name="XScale"> 19 <text name="XScale" left="5" width="120">
20 Xスケール 20 Xスケール
21 </text> 21 </text>
22 <text name="YScale"> 22 <spinner left="135" width="50" name="AvatarAxisScale1" />
23 <spinner left="205" width="50" name="BuildAxisScale1" />
24 <spinner left="275" width="50" name="FlycamAxisScale1" />
25
26 <text name="YScale" left="5" width="120">
23 Yスケール 27 Yスケール
24 </text> 28 </text>
25 <text name="ZScale"> 29 <spinner left="135" width="50" name="AvatarAxisScale2" />
30 <spinner left="205" width="50" name="BuildAxisScale2" />
31 <spinner left="275" width="50" name="FlycamAxisScale2" />
32
33 <text name="ZScale" left="5" width="120">
26 Zスケール 34 Zスケール
27 </text> 35 </text>
28 <text name="PitchScale"> 36 <spinner left="135" width="50" name="AvatarAxisScale0" />
37 <spinner left="205" width="50" name="BuildAxisScale0" />
38 <spinner left="275" width="50" name="FlycamAxisScale0" />
39
40 <text name="PitchScale" left="5" width="120">
29 ピッãƒãƒ»ã‚¹ã‚±ãƒ¼ãƒ« 41 ピッãƒãƒ»ã‚¹ã‚±ãƒ¼ãƒ«
30 </text> 42 </text>
31 <text name="YawScale"> 43 <spinner left="135" width="50" name="AvatarAxisScale4" />
44 <spinner left="205" width="50" name="BuildAxisScale4" />
45 <spinner left="275" width="50" name="FlycamAxisScale4" />
46
47 <text name="YawScale" left="5" width="120">
32 ヨー・スケール 48 ヨー・スケール
33 </text> 49 </text>
34 <text name="RollScale"> 50 <spinner left="135" width="50" name="AvatarAxisScale5" />
51 <spinner left="205" width="50" name="BuildAxisScale5" />
52 <spinner left="275" width="50" name="FlycamAxisScale5" />
53
54 <text name="RollScale" left="5" width="120">
35 ロール・スケール 55 ロール・スケール
36 </text> 56 </text>
37 <text name="XDeadZone"> 57 <spinner left="205" width="50" name="BuildAxisScale3" />
58 <spinner left="275" width="50" name="FlycamAxisScale3" />
59
60 <text name="XDeadZone" left="5" width="120">
38 Xデッド・ゾーン 61 Xデッド・ゾーン
39 </text> 62 </text>
40 <text name="YDeadZone"> 63 <spinner left="135" width="50" name="AvatarAxisDeadZone1" />
64 <spinner left="205" width="50" name="BuildAxisDeadZone1" />
65 <spinner left="275" width="50" name="FlycamAxisDeadZone1"/>
66
67 <text name="YDeadZone" left="5" width="120">
41 Yデッド・ゾーン 68 Yデッド・ゾーン
42 </text> 69 </text>
43 <text name="ZDeadZone"> 70 <spinner left="135" width="50" name="AvatarAxisDeadZone2"/>
71 <spinner left="205" width="50" name="BuildAxisDeadZone2"/>
72 <spinner left="275" width="50" name="FlycamAxisDeadZone2" />
73
74 <text name="ZDeadZone" left="5" width="120">
44 Zデッド・ゾーン 75 Zデッド・ゾーン
45 </text> 76 </text>
46 <text name="PitchDeadZone"> 77 <spinner left="135" width="50" name="AvatarAxisDeadZone0" />
78 <spinner left="205" width="50" name="BuildAxisDeadZone0" />
79 <spinner left="275" width="50" name="FlycamAxisDeadZone0" />
80
81 <text name="PitchDeadZone" left="0" width="135">
47 ピッãƒãƒ»ãƒ‡ãƒƒãƒ‰ãƒ»ã‚¾ãƒ¼ãƒ³ 82 ピッãƒãƒ»ãƒ‡ãƒƒãƒ‰ãƒ»ã‚¾ãƒ¼ãƒ³
48 </text> 83 </text>
49 <text name="YawDeadZone"> 84 <spinner left="135" width="50" name="AvatarAxisDeadZone4"/>
85 <spinner left="205" width="50" name="BuildAxisDeadZone4"/>
86 <spinner left="275" width="50" name="FlycamAxisDeadZone4"/>
87
88 <text name="YawDeadZone" left="5" width="120">
50 ヨー・デッド・ゾーン 89 ヨー・デッド・ゾーン
51 </text> 90 </text>
52 <text name="RollDeadZone"> 91 <spinner left="135" width="50" name="AvatarAxisDeadZone5" />
92 <spinner left="205" width="50" name="BuildAxisDeadZone5" />
93 <spinner left="275" width="50" name="FlycamAxisDeadZone5" />
94
95 <text name="RollDeadZone" left="0" width="135">
53 ロール・デッド・ゾーン 96 ロール・デッド・ゾーン
54 </text> 97 </text>
98 <spinner left="205" width="50" name="BuildAxisDeadZone3" />
99 <spinner left="275" width="50" name="FlycamAxisDeadZone3" />
100
55 <text name="Feathering"> 101 <text name="Feathering">
56 羽毛 102 羽毛
57 </text> 103 </text>
58 <text name="ZoomScale2"> 104 <slider left="126" width="67" name="AvatarFeathering" />
105 <slider left="196" width="67" name="BuildFeathering" />
106 <slider left="266" width="67" name="FlycamFeathering" />
107 <text name="ZoomScale2" left="0" width="140">
59 ズーム・スケール 108 ズーム・スケール
60 </text> 109 </text>
61 <text name="ZoomDeadZone"> 110 <spinner left="275" width="50" name="FlycamAxisScale6" />
111 <text name="ZoomDeadZone" left="0" width="140">
62 ズーム・デッド・ゾーン 112 ズーム・デッド・ゾーン
63 </text> 113 </text>
64 <button label="SpaceNavigatorã®ãƒ‡ãƒ•ォルト設定" name="SpaceNavigatorDefaults" /> 114 <spinner left="275" width="50" name="FlycamAxisDeadZone6" />
115 <button label="SpaceNavigatorã®ãƒ‡ãƒ•ォルト設定" name="SpaceNavigatorDefaults" width="210" left="330"/>
65<!-- Reverted the translation of the Joystick Monitor axes due to monospace font that cannot support UTF8 (see VWR-6608) 116<!-- Reverted the translation of the Joystick Monitor axes due to monospace font that cannot support UTF8 (see VWR-6608)
66 <string name="JoystickMonitor"> 117 <string name="JoystickMonitor">
67 ジョイスティック・モニター 118 ジョイスティック・モニター
diff --git a/linden/indra/newview/skins/xui/ja/mime_types.xml b/linden/indra/newview/skins/xui/ja/mime_types.xml
index a7019ad..9bebc7c 100644
--- a/linden/indra/newview/skins/xui/ja/mime_types.xml
+++ b/linden/indra/newview/skins/xui/ja/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 ç”»åƒ 82 ç”»åƒ
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
index 46eb096..f63c368 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
@@ -15,7 +15,7 @@
15 グループ通知アーカイブ 15 グループ通知アーカイブ
16 </text> 16 </text>
17 <text name="lbl2"> 17 <text name="lbl2">
18 通知ã¯ã€30日間ä¿å­˜ã•れã¾ã™ã€‚ 閲覧ã—ãŸã„通知をクリックã—ã¦ãã ã•ã„。 18 通知ã¯ã€14日間ä¿å­˜ã•れã¾ã™ã€‚ 閲覧ã—ãŸã„通知をクリックã—ã¦ãã ã•ã„。
19æ–°ç€ã®é€šçŸ¥ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã«ã¯ã€[æ›´æ–°]ボタンをクリックã—ã¾ã™ã€‚ 19æ–°ç€ã®é€šçŸ¥ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã«ã¯ã€[æ›´æ–°]ボタンをクリックã—ã¾ã™ã€‚
20 </text> 20 </text>
21 <scroll_list name="notice_list"> 21 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
index d3d3734..19e443a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
@@ -14,14 +14,14 @@
14 <text type="string" length="1" name="(width / height)"> 14 <text type="string" length="1" name="(width / height)">
15 (幅ï¼é«˜ã•) 15 (幅ï¼é«˜ã•)
16 </text> 16 </text>
17 <text_editor name="FullScreenInfo" width="480" bottom="-63" height="40"> 17 <text_editor name="FullScreenInfo" width="480" bottom="-56" height="40">
18 ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãƒ“ューワãŒãƒ•ルスクリーンã§è¡¨ç¤ºã•れã¾ã™ã€‚ 18 ãƒã‚§ãƒƒã‚¯ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãƒ“ューワãŒãƒ•ルスクリーンã§è¡¨ç¤ºã•れã¾ã™ã€‚
19 </text_editor> 19 </text_editor>
20 <text name="DisplayResLabel"> 20 <text name="DisplayResLabel">
21 表示解åƒåº¦ï¼š 21 表示解åƒåº¦ï¼š
22 </text> 22 </text>
23 <text name="AspectRatioLabel1" tool_tip="(幅/高ã•)"> 23 <text name="AspectRatioLabel1" tool_tip="(幅/高ã•)">
24 縦横比: 24 縦横比:
25 </text> 25 </text>
26 <combo_box name="aspect_ratio" tool_tip="(幅/高ã•)"> 26 <combo_box name="aspect_ratio" tool_tip="(幅/高ã•)">
27 <combo_item type="string" length="1" name="4:3(StandardCRT)"> 27 <combo_item type="string" length="1" name="4:3(StandardCRT)">
@@ -104,7 +104,7 @@
104 </radio_item> 104 </radio_item>
105 </radio_group> 105 </radio_group>
106 <text name="AvatarRenderingText"> 106 <text name="AvatarRenderingText">
107 ã‚¢ãƒã‚¿ãƒ¼è¡¨ç¤º: 107 ã‚¢ãƒã‚¿ãƒ¼è¡¨ç¤ºï¼š
108 </text> 108 </text>
109 <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã®ç²¾åº¦ã‚’下ã’ã‚‹" name="AvatarImpostors" /> 109 <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã®ç²¾åº¦ã‚’下ã’ã‚‹" name="AvatarImpostors" />
110 <check_box label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚¹ã‚­ãƒ‹ãƒ³ã‚°" name="AvatarVertexProgram" /> 110 <check_box label="ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ»ã‚¹ã‚­ãƒ‹ãƒ³ã‚°" name="AvatarVertexProgram" />
@@ -117,14 +117,14 @@
117 </text> 117 </text>
118 <slider label="æç”»è·é›¢ï¼š" name="DrawDistance" /> 118 <slider label="æç”»è·é›¢ï¼š" name="DrawDistance" />
119 <slider label="最大パーティクル数:" name="MaxParticleCount" /> 119 <slider label="最大パーティクル数:" name="MaxParticleCount" />
120 <slider label="ãƒã‚¹ãƒˆãƒ—ロセスå“質:" name="RenderPostProcess" /> 120 <slider label="ãƒã‚¹ãƒˆãƒ—ロセスå“質:" name="RenderPostProcess" />
121 <text name="MeshDetailText"> 121 <text name="MeshDetailText">
122 メッシュ詳細: 122 メッシュ詳細:
123 </text> 123 </text>
124 <slider label=" オブジェクト:" name="ObjectMeshDetail" /> 124 <slider label=" オブジェクト:" name="ObjectMeshDetail" />
125 <slider label=" フレキシプリム:" name="FlexibleMeshDetail" /> 125 <slider label=" フレキシプリム:" name="FlexibleMeshDetail" />
126 <slider label=" 樹木:" name="TreeMeshDetail" /> 126 <slider label=" 樹木:" name="TreeMeshDetail" />
127 <slider label=" ã‚¢ãƒã‚¿ãƒ¼:" name="AvatarMeshDetail" /> 127 <slider label=" ã‚¢ãƒã‚¿ãƒ¼ï¼š" name="AvatarMeshDetail" />
128 <slider label=" 地形:" name="TerrainMeshDetail" /> 128 <slider label=" 地形:" name="TerrainMeshDetail" />
129 <slider label=" 空:" name="SkyMeshDetail" /> 129 <slider label=" 空:" name="SkyMeshDetail" />
130 <text name="PostProcessText"> 130 <text name="PostProcessText">
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
index 48cfc23..0ed6c57 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="ウェブ" name="web"> 2<panel label="ウェブ" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="ヘルプã€Webリンクãªã©ã®ãŸã‚ã«ã€å¤–部Webブラウザを使用ã—ã¾ã™ã€‚フル画é¢ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã«ã¯æŽ¨å¥¨ã§ãã¾ã›ã‚“。"> 4 <radio_item name="external" tool_tip="ヘルプã€Webリンクãªã©ã®ãŸã‚ã«ã€å¤–部Webブラウザを使用ã—ã¾ã™ã€‚フル画é¢ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã«ã¯æŽ¨å¥¨ã§ãã¾ã›ã‚“。">
5 <radio_item name="external">
6 外部ã®ã‚¦ã‚§ãƒ–・ブラウザー (Firefox, Safari, Internet Explorer) を使用 5 外部ã®ã‚¦ã‚§ãƒ–・ブラウザー (Firefox, Safari, Internet Explorer) を使用
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml b/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
index 671888e..b82aace 100644
--- a/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
@@ -14,7 +14,7 @@
14 </combo_item> 14 </combo_item>
15 </combo_box> 15 </combo_box>
16 </layout_panel> 16 </layout_panel>
17 <layout_panel name="moderate_chat_panel"> 17 <layout_panel name="moderate_chat_panel" font="SansSerifSmall">
18 <scroll_list name="speakers_list"> 18 <scroll_list name="speakers_list">
19 <column label="åå‰" name="speaker_name" /> 19 <column label="åå‰" name="speaker_name" />
20 </scroll_list> 20 </scroll_list>
@@ -24,7 +24,7 @@
24 </text> 24 </text>
25 <button name="mute_btn" 25 <button name="mute_btn"
26 tool_tip="ã“ã®ä½äººã®ãƒœã‚¤ã‚¹ã‚’ミュート(消声)ã—ã¾ã™ã€‚" /> 26 tool_tip="ã“ã®ä½äººã®ãƒœã‚¤ã‚¹ã‚’ミュート(消声)ã—ã¾ã™ã€‚" />
27 <check_box label="テキストをミュート(消字)" name="mute_text_btn" /> 27 <check_box label="テキストをミュート" name="mute_text_btn" />
28 </panel> 28 </panel>
29 </layout_panel> 29 </layout_panel>
30 <layout_panel name="moderator_controls"> 30 <layout_panel name="moderator_controls">
diff --git a/linden/indra/newview/skins/xui/ko/floater_chat_history.xml b/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
index d821296..3c634d8 100644
--- a/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="chat floater" title="채팅 기ë¡"> 2<floater name="chat floater" title="로컬 채팅">
3 <button label="채팅" name="Chat" /> 3 <button label="채팅" name="Chat" />
4 <button label="차단" name="Mute resident" /> 4 <button label="차단" name="Mute resident" />
5 <check_box label="ìŒì†Œê±°ëœ í…스트 표시하기" name="show mutes" /> 5 <check_box label="ìŒì†Œê±°ëœ í…스트 표시하기" name="show mutes" />
diff --git a/linden/indra/newview/skins/xui/ko/floater_html.xml b/linden/indra/newview/skins/xui/ko/floater_html.xml
index 7974995..c99763e 100644
--- a/linden/indra/newview/skins/xui/ko/floater_html.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="홈" name="home_btn" /> 5 <button label="홈" name="home_btn" />
6 <button label="앞으로" name="forward_btn" /> 6 <button label="앞으로" name="forward_btn" />
7 <button label="ì´ë™" name="go_btn" /> 7 <button label="ì´ë™" name="go_btn" />
8 <string name="home_page_url">
9 http://kr.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_joystick.xml b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
index e965738..dd0fe30 100644
--- a/linden/indra/newview/skins/xui/ko/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
@@ -58,7 +58,7 @@
58 <text name="ZoomScale2"> 58 <text name="ZoomScale2">
59 확대/축소 í¬ê¸° 59 확대/축소 í¬ê¸°
60 </text> 60 </text>
61 <text name="ZoomDeadZone"> 61 <text name="ZoomDeadZone" width="140" left="0" >
62 확대/축소 사ê°ì§€ëŒ€ 62 확대/축소 사ê°ì§€ëŒ€
63 </text> 63 </text>
64 <button label="SpaceNavigator 기본값" name="SpaceNavigatorDefaults" /> 64 <button label="SpaceNavigator 기본값" name="SpaceNavigatorDefaults" />
diff --git a/linden/indra/newview/skins/xui/ko/menu_viewer.xml b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
index c59eefd..3abedaa 100644
--- a/linden/indra/newview/skins/xui/ko/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
@@ -75,7 +75,7 @@
75 <menu_item_call label="ë§í•œ 사람 보기" name="Look at Last Chatter" /> 75 <menu_item_call label="ë§í•œ 사람 보기" name="Look at Last Chatter" />
76 <menu_item_separator label="-----------" name="separator" /> 76 <menu_item_separator label="-----------" name="separator" />
77 <menu_item_check label="툴바" name="Toolbar" /> 77 <menu_item_check label="툴바" name="Toolbar" />
78 <menu_item_check label="채팅 기ë¡" name="Chat History" /> 78 <menu_item_check label="로컬 채팅" name="Chat History" />
79 <menu_item_check label="통신" name="Instant Message" /> 79 <menu_item_check label="통신" name="Instant Message" />
80 <menu_item_call label="ì¸ë²¤í† ë¦¬" name="Inventory" /> 80 <menu_item_call label="ì¸ë²¤í† ë¦¬" name="Inventory" />
81 <menu_item_check label="액티브 스피커" name="Active Speakers" /> 81 <menu_item_check label="액티브 스피커" name="Active Speakers" />
diff --git a/linden/indra/newview/skins/xui/ko/mime_types.xml b/linden/indra/newview/skins/xui/ko/mime_types.xml
index 33d7e14..9d2348c 100644
--- a/linden/indra/newview/skins/xui/ko/mime_types.xml
+++ b/linden/indra/newview/skins/xui/ko/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 ì´ë¯¸ì§€ 82 ì´ë¯¸ì§€
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml b/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
index d10958f..febfe23 100644
--- a/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat_bar"> 2<panel name="chat_bar">
3 <button label="로컬 채팅" label_selected="기ë¡" name="History" 3 <button label="로컬 채팅" name="History"
4 tool_tip="대화 ë‚´ìš©ì„ ë³´ë ¤ë©´ 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." /> 4 tool_tip="대화 ë‚´ìš©ì„ ë³´ë ¤ë©´ 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." />
5 <line_editor label="채팅하려면 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." name="Chat Editor" 5 <line_editor label="채팅하려면 여기를 í´ë¦­í•˜ì‹­ì‹œì˜¤." name="Chat Editor"
6 tool_tip="Enter를 눌러 ë§í•˜ê³ , Ctrl-Enter를 눌러 외칩니다." /> 6 tool_tip="Enter를 눌러 ë§í•˜ê³ , Ctrl-Enter를 눌러 외칩니다." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
index ea97438..338649f 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
@@ -1,10 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="íšŒì› ì´ˆëŒ€" name="invite_panel"> 2<panel label="íšŒì› ì´ˆëŒ€" name="invite_panel">
3 <text>
4 여러 ì£¼ë¯¼ì„ ì„ íƒí•˜ì—¬
5ê·¸ë£¹ì— ì´ˆëŒ€í•  수 있습니다. &apos;주민
6ì„ íƒê¸° 열기&apos;를 í´ë¦­í•˜ì—¬ 시작합니다.
7 </text>
8 <text name="help_text"> 3 <text name="help_text">
9 여러 ì£¼ë¯¼ì„ ì„ íƒí•˜ì—¬ 4 여러 ì£¼ë¯¼ì„ ì„ íƒí•˜ì—¬
10ê·¸ë£¹ì— ì´ˆëŒ€í•  수 있습니다. &apos;주민 5ê·¸ë£¹ì— ì´ˆëŒ€í•  수 있습니다. &apos;주민
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
index 7edb35b..c49fe9b 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
@@ -16,7 +16,7 @@
16 그룹 공지 16 그룹 공지
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 공지는 30ì¼ ë™ì•ˆ ë³´ê´€ë©ë‹ˆë‹¤. 보려는 공지를 다ìŒì—서 í´ë¦­í•˜ì‹­ì‹œì˜¤. 19 공지는 14ì¼ ë™ì•ˆ ë³´ê´€ë©ë‹ˆë‹¤. 보려는 공지를 다ìŒì—서 í´ë¦­í•˜ì‹­ì‹œì˜¤.
20새로운 공지를 수령한 경우 &apos;새로고침&apos; ë²„íŠ¼ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤. 20새로운 공지를 수령한 경우 &apos;새로고침&apos; ë²„íŠ¼ì„ í´ë¦­í•˜ì‹­ì‹œì˜¤.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
index 8452e3b..6018ecf 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="웹" name="web"> 2<panel label="웹" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="ë„움ë§, 웹ë§í¬ ë“±ì€ ì™¸ë¶€ 웹브ë¼ìš°ì €ë¥¼ 사용하십시오. ì „ì²´ 화면 모드ì—서는 권장하지 않습니다."> 4 <radio_item name="external" tool_tip="ë„움ë§, 웹ë§í¬ ë“±ì€ ì™¸ë¶€ 웹브ë¼ìš°ì €ë¥¼ 사용하십시오. ì „ì²´ 화면 모드ì—서는 권장하지 않습니다.">
5 <radio_item name="external">
6 외부 웹 브ë¼ìš°ì € 사용(Firefox, Safari, Internet Explorer) 5 외부 웹 브ë¼ìš°ì € 사용(Firefox, Safari, Internet Explorer)
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/pt/panel_group_notices.xml b/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
index f611485..f5698a7 100644
--- a/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
@@ -11,7 +11,7 @@
11 Arquivo de notícias do grupo 11 Arquivo de notícias do grupo
12 </text> 12 </text>
13 <text name="lbl2"> 13 <text name="lbl2">
14 As notícias são mantidas por 30 dias. Clicar na notícia que você desejar ver. 14 As notícias são mantidas por 14 dias. Clicar na notícia que você desejar ver.
15 </text> 15 </text>
16 <scroll_list name="notice_list"> 16 <scroll_list name="notice_list">
17 <column label="" name="icon" /> 17 <column label="" name="icon" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_notices.xml b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
index b0d5ab3..e6629cb 100644
--- a/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
@@ -11,7 +11,7 @@
11 社团通知归档 11 社团通知归档
12 </text> 12 </text>
13 <text name="lbl2"> 13 <text name="lbl2">
14 通知åªä¼šè¢«ä¿ç•™30日。点击下é¢ä½ æƒ³æŸ¥çœ‹çš„通知。如果新的通知已被接å—到,请点击“刷新åå•â€æŒ‰é’®ã€‚ 14 通知åªä¼šè¢«ä¿ç•™14日。点击下é¢ä½ æƒ³æŸ¥çœ‹çš„通知。如果新的通知已被接å—到,请点击“刷新åå•â€æŒ‰é’®ã€‚
15 </text> 15 </text>
16 <scroll_list name="notice_list"> 16 <scroll_list name="notice_list">
17 <column label="" name="icon" /> 17 <column label="" name="icon" />
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index d07ebf0..9751936 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -445,18 +445,20 @@ class LinuxManifest(ViewerManifest):
445 self.path("wrapper.sh","secondlife") 445 self.path("wrapper.sh","secondlife")
446 self.path("handle_secondlifeprotocol.sh") 446 self.path("handle_secondlifeprotocol.sh")
447 self.path("register_secondlifeprotocol.sh") 447 self.path("register_secondlifeprotocol.sh")
448 self.path("unicode.ttf","unicode.ttf")
449 self.end_prefix("linux_tools") 448 self.end_prefix("linux_tools")
450 449
451 # Create an appropriate gridargs.dat for this package, denoting required grid. 450 # Create an appropriate gridargs.dat for this package, denoting required grid.
452 self.put_in_file(self.flags_list(), 'gridargs.dat') 451 self.put_in_file(self.flags_list(), 'gridargs.dat')
453 452
453
454 def package_finish(self):
454 # stripping all the libs removes a few megabytes from the end-user package 455 # stripping all the libs removes a few megabytes from the end-user package
455 for s,d in self.file_list: 456 for s,d in self.file_list:
456 if re.search("lib/lib.+\.so.*", d): 457 if re.search("lib/lib.+\.so.*", d):
457 self.run_command('strip -S %s' % d) 458 self.run_command('strip -S %s' % d)
459 if re.search("app_settings/mozilla-runtime-.*/lib.+\.so.*", d):
460 self.run_command('strip %s' % d)
458 461
459 def package_finish(self):
460 if(self.args.has_key('installer_name')): 462 if(self.args.has_key('installer_name')):
461 installer_name = self.args['installer_name'] 463 installer_name = self.args['installer_name']
462 else: 464 else:
@@ -506,7 +508,6 @@ class Linux_i686Manifest(LinuxManifest):
506 self.path("libdb-4.2.so") 508 self.path("libdb-4.2.so")
507 self.path("libcrypto.so.0.9.7") 509 self.path("libcrypto.so.0.9.7")
508 self.path("libssl.so.0.9.7") 510 self.path("libssl.so.0.9.7")
509 self.path("libexpat.so.1")
510# self.path("libstdc++.so.6") 511# self.path("libstdc++.so.6")
511 self.path("libuuid.so", "libuuid.so.1") 512 self.path("libuuid.so", "libuuid.so.1")
512 self.path("libSDL-1.2.so.0") 513 self.path("libSDL-1.2.so.0")
diff --git a/linden/indra/test/inventory.cpp b/linden/indra/test/inventory.cpp
index 3899dfc..a4a4599 100644
--- a/linden/indra/test/inventory.cpp
+++ b/linden/indra/test/inventory.cpp
@@ -329,7 +329,7 @@ namespace tut
329 template<> template<> 329 template<> template<>
330 void inventory_object::test<7>() 330 void inventory_object::test<7>()
331 { 331 {
332 FILE* fp = fopen("linden_file.dat","w+"); 332 LLFILE* fp = LLFile::fopen("linden_file.dat","w+");
333 if(!fp) 333 if(!fp)
334 { 334 {
335 llerrs << "file could not be opened\n" << llendl; 335 llerrs << "file could not be opened\n" << llendl;
@@ -341,7 +341,7 @@ namespace tut
341 fclose(fp); 341 fclose(fp);
342 342
343 LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); 343 LLPointer<LLInventoryItem> src2 = new LLInventoryItem();
344 fp = fopen("linden_file.dat","r+"); 344 fp = LLFile::fopen("linden_file.dat","r+");
345 if(!fp) 345 if(!fp)
346 { 346 {
347 llerrs << "file could not be opened\n" << llendl; 347 llerrs << "file could not be opened\n" << llendl;
@@ -483,7 +483,7 @@ namespace tut
483 template<> template<> 483 template<> template<>
484 void inventory_object::test<13>() 484 void inventory_object::test<13>()
485 { 485 {
486 FILE* fp = fopen("linden_file.dat","w"); 486 LLFILE* fp = LLFile::fopen("linden_file.dat","w");
487 if(!fp) 487 if(!fp)
488 { 488 {
489 llerrs << "file coudnt be opened\n" << llendl; 489 llerrs << "file coudnt be opened\n" << llendl;
@@ -495,7 +495,7 @@ namespace tut
495 fclose(fp); 495 fclose(fp);
496 496
497 LLPointer<LLInventoryCategory> src2 = new LLInventoryCategory(); 497 LLPointer<LLInventoryCategory> src2 = new LLInventoryCategory();
498 fp = fopen("linden_file.dat","r"); 498 fp = LLFile::fopen("linden_file.dat","r");
499 if(!fp) 499 if(!fp)
500 { 500 {
501 llerrs << "file coudnt be opened\n" << llendl; 501 llerrs << "file coudnt be opened\n" << llendl;
diff --git a/linden/indra/test/llblowfish_tut.cpp b/linden/indra/test/llblowfish_tut.cpp
index e1fa2fd..78253cd 100644
--- a/linden/indra/test/llblowfish_tut.cpp
+++ b/linden/indra/test/llblowfish_tut.cpp
@@ -60,13 +60,13 @@ namespace tut
60 bool matchFile(const char* filename, 60 bool matchFile(const char* filename,
61 const std::string& data) 61 const std::string& data)
62 { 62 {
63 FILE* fp = fopen(filename, "rb"); 63 LLFILE* fp = LLFile::fopen(filename, "rb");
64 if (!fp) 64 if (!fp)
65 { 65 {
66 // sometimes test is run inside the indra directory 66 // sometimes test is run inside the indra directory
67 std::string path = "test/"; 67 std::string path = "test/";
68 path += filename; 68 path += filename;
69 fp = fopen(path.c_str(), "rb"); 69 fp = LLFile::fopen(path.c_str(), "rb");
70 } 70 }
71 if (!fp) 71 if (!fp)
72 { 72 {
diff --git a/linden/indra/test/lldatapacker_tut.cpp b/linden/indra/test/lldatapacker_tut.cpp
index 096801a..d561a3c 100644
--- a/linden/indra/test/lldatapacker_tut.cpp
+++ b/linden/indra/test/lldatapacker_tut.cpp
@@ -351,7 +351,7 @@ namespace tut
351 { 351 {
352 F32 f_val = 44.44f, f_unpkval; 352 F32 f_val = 44.44f, f_unpkval;
353 353
354 FILE* fp = fopen(TEST_FILE_NAME, "w+"); 354 LLFILE* fp = LLFile::fopen(TEST_FILE_NAME, "w+");
355 if(!fp) 355 if(!fp)
356 { 356 {
357 llerrs << "File couldnt be open" <<llendl; 357 llerrs << "File couldnt be open" <<llendl;
@@ -406,7 +406,7 @@ namespace tut
406 LLVector4 unpkllvec4; 406 LLVector4 unpkllvec4;
407 LLUUID unpkuuid; 407 LLUUID unpkuuid;
408 408
409 FILE* fp = fopen(TEST_FILE_NAME,"w+"); 409 LLFILE* fp = LLFile::fopen(TEST_FILE_NAME,"w+");
410 if(!fp) 410 if(!fp)
411 { 411 {
412 llerrs << "File couldnt be open" <<llendl; 412 llerrs << "File couldnt be open" <<llendl;
diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp
index e5dd328..869070e 100644
--- a/linden/indra/test/llmessageconfig_tut.cpp
+++ b/linden/indra/test/llmessageconfig_tut.cpp
@@ -221,4 +221,21 @@ namespace tut
221 LLMessageConfig::onlySendLatest("msg2"), 221 LLMessageConfig::onlySendLatest("msg2"),
222 false); 222 false);
223 } 223 }
224
225 template<> template<>
226 void LLMessageConfigTestObject::test<9>()
227 // tests that event queue max is reloaded
228 {
229 LLSD config;
230 config["maxQueuedEvents"] = 200;
231 LLMessageConfig::useConfig(config);
232 ensure_equals("Ensure setting maxQueuedEvents",
233 LLMessageConfig::getMaxQueuedEvents(),
234 200);
235
236 LLMessageConfig::useConfig(LLSD());
237 ensure_equals("Ensure default of event queue max 100",
238 LLMessageConfig::getMaxQueuedEvents(),
239 100);
240 }
224} 241}
diff --git a/linden/indra/test/llpermissions_tut.cpp b/linden/indra/test/llpermissions_tut.cpp
index 25af11c..0f53b98 100644
--- a/linden/indra/test/llpermissions_tut.cpp
+++ b/linden/indra/test/llpermissions_tut.cpp
@@ -421,7 +421,7 @@ namespace tut
421 template<> template<> 421 template<> template<>
422 void permission_object_t::test<20>() 422 void permission_object_t::test<20>()
423 { 423 {
424 FILE* fp = fopen("linden_file.dat","w+"); 424 LLFILE* fp = LLFile::fopen("linden_file.dat","w+");
425 if(!fp) 425 if(!fp)
426 { 426 {
427 llerrs << "file coudnt be opened\n" << llendl; 427 llerrs << "file coudnt be opened\n" << llendl;
@@ -444,7 +444,7 @@ namespace tut
444 444
445 perm.exportFile(fp); 445 perm.exportFile(fp);
446 fclose(fp); 446 fclose(fp);
447 fp = fopen("linden_file.dat","r+"); 447 fp = LLFile::fopen("linden_file.dat","r+");
448 if(!fp) 448 if(!fp)
449 { 449 {
450 llerrs << "file coudnt be opened\n" << llendl; 450 llerrs << "file coudnt be opened\n" << llendl;
diff --git a/linden/indra/test/llsaleinfo_tut.cpp b/linden/indra/test/llsaleinfo_tut.cpp
index dde0d6e..297a19b 100644
--- a/linden/indra/test/llsaleinfo_tut.cpp
+++ b/linden/indra/test/llsaleinfo_tut.cpp
@@ -113,7 +113,7 @@ namespace tut
113 void llsaleinfo_test_t::test<2>() 113 void llsaleinfo_test_t::test<2>()
114 { 114 {
115 115
116 FILE* fp = fopen("linden_file.dat","w+"); 116 LLFILE* fp = LLFile::fopen("linden_file.dat","w+");
117 if(!fp) 117 if(!fp)
118 { 118 {
119 llerrs << "file could not be opened\n" << llendl; 119 llerrs << "file could not be opened\n" << llendl;
@@ -129,7 +129,7 @@ namespace tut
129 LLSaleInfo llsaleinfo1; 129 LLSaleInfo llsaleinfo1;
130 U32 perm_mask; 130 U32 perm_mask;
131 BOOL has_perm_mask; 131 BOOL has_perm_mask;
132 fp = fopen("linden_file.dat","r"); 132 fp = LLFile::fopen("linden_file.dat","r");
133 133
134 if(!fp) 134 if(!fp)
135 { 135 {
diff --git a/linden/scripts/messages/message_template.msg b/linden/scripts/messages/message_template.msg
index c5588f4..abd25bf 100644
--- a/linden/scripts/messages/message_template.msg
+++ b/linden/scripts/messages/message_template.msg
@@ -2866,6 +2866,10 @@ version 2.0
2866 { StatID U32 } 2866 { StatID U32 }
2867 { StatValue F32 } 2867 { StatValue F32 }
2868 } 2868 }
2869 {
2870 PidStat Single
2871 { PID S32 }
2872 }
2869} 2873}
2870 2874
2871// viewer -> sim 2875// viewer -> sim