From d644fc64407dcd14ffcee6a0e9fbe28ee3a4e9bd Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:02 -0500 Subject: Second Life viewer sources 1.18.0.6 --- linden/etc/message.xml | 399 +++ linden/indra/SConstruct | 59 +- linden/indra/indra_complete/indra_complete.sln | 20 - linden/indra/indra_complete/indra_complete_vc8.sln | 17 - linden/indra/lib/python/indra/__init__.py | 25 + linden/indra/lib/python/indra/compatibility.py | 121 + linden/indra/lib/python/indra/llmanifest.py | 2 +- linden/indra/lib/python/indra/llmessage.py | 375 +++ linden/indra/lib/python/indra/tokenstream.py | 152 ++ linden/indra/llcommon/lldarray.h | 19 +- linden/indra/llcommon/llpreprocessor.h | 22 +- linden/indra/llcommon/llprocessor.cpp | 8 +- linden/indra/llcommon/llprocessor.h | 1 - linden/indra/llcommon/llskiplist.h | 12 +- linden/indra/llcommon/llstreamtools.h | 2 + linden/indra/llcommon/llstring.h | 4 - linden/indra/llcommon/llsys.cpp | 25 +- linden/indra/llcommon/llsys.h | 12 +- linden/indra/llcommon/llversion.h | 6 +- linden/indra/llmath/llmath.vcproj | 12 - linden/indra/llmath/llmath_vc8.vcproj | 16 - linden/indra/llmath/llv4math.h | 121 - linden/indra/llmath/llv4matrix3.h | 222 -- linden/indra/llmath/llv4matrix4.h | 251 -- linden/indra/llmath/llv4vector3.h | 82 - linden/indra/llmessage/files.lst | 2 + linden/indra/llmessage/llcircuit.h | 6 +- linden/indra/llmessage/llhost.cpp | 12 +- linden/indra/llmessage/llhost.h | 6 +- linden/indra/llmessage/llhttpclient.cpp | 3 - linden/indra/llmessage/llhttpsender.cpp | 11 +- linden/indra/llmessage/llhttpsender.h | 3 + linden/indra/llmessage/lliosocket.cpp | 14 +- linden/indra/llmessage/llmessage.vcproj | 13 +- linden/indra/llmessage/llmessage_vc8.vcproj | 12 + linden/indra/llmessage/llmessagebuilder.h | 73 +- linden/indra/llmessage/llmessageconfig.cpp | 165 +- linden/indra/llmessage/llmessageconfig.h | 19 +- linden/indra/llmessage/llmessagereader.cpp | 28 + linden/indra/llmessage/llmessagereader.h | 29 + linden/indra/llmessage/llmessagetemplate.cpp | 32 +- linden/indra/llmessage/llmessagetemplate.h | 83 +- linden/indra/llmessage/llmessagetemplateparser.cpp | 754 ++++++ linden/indra/llmessage/llmessagetemplateparser.h | 82 + linden/indra/llmessage/llmsgvariabletype.h | 28 + linden/indra/llmessage/llpacketack.cpp | 84 + linden/indra/llmessage/llpacketack.h | 122 +- linden/indra/llmessage/llsdmessagebuilder.cpp | 80 +- linden/indra/llmessage/llsdmessagebuilder.h | 72 +- linden/indra/llmessage/llsdmessagereader.cpp | 68 +- linden/indra/llmessage/llsdmessagereader.h | 5 +- .../indra/llmessage/lltemplatemessagebuilder.cpp | 329 ++- linden/indra/llmessage/lltemplatemessagebuilder.h | 72 +- linden/indra/llmessage/lltemplatemessagereader.cpp | 151 +- linden/indra/llmessage/lltemplatemessagereader.h | 28 + linden/indra/llmessage/lltransfermanager.cpp | 28 - linden/indra/llmessage/lltransfermanager.h | 1 - linden/indra/llmessage/message.cpp | 1674 +++--------- linden/indra/llmessage/message.h | 76 +- linden/indra/llmessage/message_prehash.cpp | 338 +-- linden/indra/llmessage/message_prehash.h | 169 +- .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/app_settings/message.xml | 228 -- linden/indra/newview/files.lst | 3 - linden/indra/newview/llagent.cpp | 2 - linden/indra/newview/llassetuploadresponders.cpp | 30 +- linden/indra/newview/llassetuploadresponders.h | 30 +- linden/indra/newview/llcontroldef.cpp | 6 - linden/indra/newview/lldrawable.h | 1 - linden/indra/newview/lleventpoll.cpp | 261 +- linden/indra/newview/lleventpoll.h | 7 +- linden/indra/newview/llfloaterimport.cpp | 5 +- linden/indra/newview/llinventorymodel.cpp | 167 -- linden/indra/newview/llpaneldisplay.cpp | 1 - linden/indra/newview/llselectmgr.cpp | 3 +- linden/indra/newview/llselectmgr.h | 4 +- linden/indra/newview/llstartup.cpp | 343 +-- linden/indra/newview/llstartup.h | 11 +- linden/indra/newview/lltoolbrush.cpp | 3 +- linden/indra/newview/lltoolbrush.h | 2 +- linden/indra/newview/llviewerjointmesh.cpp | 214 +- linden/indra/newview/llviewerjointmesh.h | 16 - linden/indra/newview/llviewerjointmesh_sse.cpp | 114 - linden/indra/newview/llviewerjointmesh_sse2.cpp | 116 - linden/indra/newview/llviewerjointmesh_vec.cpp | 97 - linden/indra/newview/llviewermenu.cpp | 65 +- linden/indra/newview/llviewermenufile.cpp | 3 +- linden/indra/newview/llviewermessage.cpp | 79 +- linden/indra/newview/llviewernetwork.h | 2 - linden/indra/newview/llviewerparcelmgr.cpp | 12 +- linden/indra/newview/llviewerregion.cpp | 36 +- linden/indra/newview/llviewerregion.h | 7 + linden/indra/newview/llworld.cpp | 52 +- .../newview/macview.xcodeproj/project.pbxproj | 24 +- linden/indra/newview/newview.vcproj | 116 +- linden/indra/newview/newview_vc8.vcproj | 97 +- linden/indra/newview/postbuild.bat | 5 + linden/indra/newview/prebuild.bat | 13 + linden/indra/newview/releasenotes.txt | 28 + linden/indra/newview/res/newViewRes.rc | 8 +- .../indra/newview/secondlife setup build vaak.bat | 2 +- .../indra/newview/skins/xui/de/floater_about.xml | 4 +- .../indra/newview/skins/xui/de/floater_groups.xml | 2 +- .../xui/de/floater_inventory_item_properties.xml | 2 +- .../indra/newview/skins/xui/de/floater_tools.xml | 24 +- .../indra/newview/skins/xui/de/menu_inventory.xml | 34 +- .../newview/skins/xui/de/menu_pie_attachment.xml | 4 +- .../indra/newview/skins/xui/de/menu_pie_avatar.xml | 2 +- .../indra/newview/skins/xui/de/menu_pie_land.xml | 2 +- .../indra/newview/skins/xui/de/menu_pie_object.xml | 10 +- .../indra/newview/skins/xui/de/menu_pie_self.xml | 10 +- linden/indra/newview/skins/xui/de/notify.xml | 40 +- linden/indra/newview/skins/xui/de/panel_login.xml | 6 +- .../skins/xui/de/panel_preferences_general.xml | 52 +- .../skins/xui/de/panel_preferences_graphics3.xml | 3 + .../newview/skins/xui/en-us/floater_about.xml | 7 +- .../indra/newview/skins/xui/en-us/panel_login.xml | 2 +- linden/indra/newview/skins/xui/ja/alerts.xml | 2855 +++++++++++--------- .../indra/newview/skins/xui/ja/floater_about.xml | 19 +- .../newview/skins/xui/ja/floater_about_land.xml | 254 +- .../skins/xui/ja/floater_animation_preview.xml | 97 +- .../indra/newview/skins/xui/ja/floater_auction.xml | 14 +- .../newview/skins/xui/ja/floater_avatar_picker.xml | 10 +- .../skins/xui/ja/floater_avatar_textures.xml | 26 +- .../newview/skins/xui/ja/floater_build_options.xml | 10 +- .../indra/newview/skins/xui/ja/floater_bumps.xml | 14 +- .../newview/skins/xui/ja/floater_buy_contents.xml | 10 +- .../newview/skins/xui/ja/floater_buy_currency.xml | 41 +- .../newview/skins/xui/ja/floater_buy_land.xml | 143 +- .../newview/skins/xui/ja/floater_buy_object.xml | 8 +- .../newview/skins/xui/ja/floater_chat_history.xml | 8 +- .../newview/skins/xui/ja/floater_choose_group.xml | 4 +- .../newview/skins/xui/ja/floater_clothing.xml | 6 +- .../newview/skins/xui/ja/floater_color_picker.xml | 22 +- .../newview/skins/xui/ja/floater_critical.xml | 8 +- .../newview/skins/xui/ja/floater_customize.xml | 413 +-- .../newview/skins/xui/ja/floater_directory.xml | 235 +- .../indra/newview/skins/xui/ja/floater_friends.xml | 45 +- .../indra/newview/skins/xui/ja/floater_gesture.xml | 17 +- .../newview/skins/xui/ja/floater_god_tools.xml | 116 +- .../newview/skins/xui/ja/floater_group_info.xml | 189 +- .../indra/newview/skins/xui/ja/floater_groups.xml | 10 +- linden/indra/newview/skins/xui/ja/floater_html.xml | 22 +- .../newview/skins/xui/ja/floater_html_help.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_im.xml | 25 +- .../newview/skins/xui/ja/floater_image_preview.xml | 20 +- .../indra/newview/skins/xui/ja/floater_import.xml | 12 +- .../skins/xui/ja/floater_instant_message.xml | 19 +- .../newview/skins/xui/ja/floater_inventory.xml | 30 +- .../xui/ja/floater_inventory_item_properties.xml | 42 +- .../skins/xui/ja/floater_inventory_view_finder.xml | 16 +- .../newview/skins/xui/ja/floater_land_holdings.xml | 18 +- .../skins/xui/ja/floater_live_lsleditor.xml | 2 +- .../newview/skins/xui/ja/floater_moveview.xml | 16 +- linden/indra/newview/skins/xui/ja/floater_mute.xml | 13 +- .../skins/xui/ja/floater_name_description.xml | 8 +- .../indra/newview/skins/xui/ja/floater_new_im.xml | 4 +- .../skins/xui/ja/floater_new_outfit_dialog.xml | 27 +- .../newview/skins/xui/ja/floater_openobject.xml | 4 +- linden/indra/newview/skins/xui/ja/floater_pay.xml | 16 +- .../newview/skins/xui/ja/floater_pay_object.xml | 22 +- .../newview/skins/xui/ja/floater_postcard.xml | 22 +- .../newview/skins/xui/ja/floater_preferences.xml | 9 +- .../skins/xui/ja/floater_preview_animation.xml | 13 +- .../xui/ja/floater_preview_embedded_texture.xml | 7 +- .../xui/ja/floater_preview_existing_landmark.xml | 5 +- .../skins/xui/ja/floater_preview_gesture.xml | 29 +- .../skins/xui/ja/floater_preview_new_landmark.xml | 7 +- .../skins/xui/ja/floater_preview_notecard.xml | 4 +- .../ja/floater_preview_notecard_keep_discard.xml | 10 +- .../newview/skins/xui/ja/floater_preview_sound.xml | 13 +- .../skins/xui/ja/floater_preview_texture.xml | 7 +- .../ja/floater_preview_texture_keep_discard.xml | 10 +- .../skins/xui/ja/floater_price_for_listing.xml | 18 +- .../indra/newview/skins/xui/ja/floater_profile.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_rate.xml | 18 +- .../newview/skins/xui/ja/floater_report_abuse.xml | 56 +- .../newview/skins/xui/ja/floater_report_bug.xml | 66 +- .../newview/skins/xui/ja/floater_script_debug.xml | 2 +- .../skins/xui/ja/floater_script_ed_panel.xml | 15 +- .../skins/xui/ja/floater_script_preview.xml | 2 +- .../newview/skins/xui/ja/floater_script_queue.xml | 2 +- .../newview/skins/xui/ja/floater_script_search.xml | 8 +- .../newview/skins/xui/ja/floater_sell_land.xml | 30 +- .../skins/xui/ja/floater_settings_debug.xml | 6 +- .../newview/skins/xui/ja/floater_snapshot.xml | 50 +- .../newview/skins/xui/ja/floater_sound_preview.xml | 12 +- .../indra/newview/skins/xui/ja/floater_telehub.xml | 24 +- .../newview/skins/xui/ja/floater_texture_ctrl.xml | 14 +- .../indra/newview/skins/xui/ja/floater_tools.xml | 221 +- .../newview/skins/xui/ja/floater_top_objects.xml | 42 +- linden/indra/newview/skins/xui/ja/floater_tos.xml | 14 +- .../skins/xui/ja/floater_wearable_save_as.xml | 6 +- .../newview/skins/xui/ja/floater_world_map.xml | 54 +- .../indra/newview/skins/xui/ja/menu_inventory.xml | 47 +- .../indra/newview/skins/xui/ja/menu_pie_avatar.xml | 18 +- .../indra/newview/skins/xui/ja/menu_pie_land.xml | 8 +- .../indra/newview/skins/xui/ja/menu_pie_object.xml | 23 +- .../indra/newview/skins/xui/ja/menu_pie_self.xml | 22 +- linden/indra/newview/skins/xui/ja/menu_viewer.xml | 164 +- linden/indra/newview/skins/xui/ja/notify.xml | 377 +-- linden/indra/newview/skins/xui/ja/panel_avatar.xml | 162 +- .../skins/xui/ja/panel_avatar_classified.xml | 18 +- .../newview/skins/xui/ja/panel_avatar_pick.xml | 8 +- .../indra/newview/skins/xui/ja/panel_chat_bar.xml | 12 +- .../newview/skins/xui/ja/panel_classified.xml | 8 +- linden/indra/newview/skins/xui/ja/panel_event.xml | 38 +- linden/indra/newview/skins/xui/ja/panel_group.xml | 7 +- .../newview/skins/xui/ja/panel_group_finder.xml | 4 +- .../newview/skins/xui/ja/panel_group_general.xml | 48 +- .../newview/skins/xui/ja/panel_group_invite.xml | 18 +- .../skins/xui/ja/panel_group_land_money.xml | 48 +- .../newview/skins/xui/ja/panel_group_notices.xml | 41 +- .../newview/skins/xui/ja/panel_group_roles.xml | 82 +- .../newview/skins/xui/ja/panel_group_voting.xml | 52 +- .../newview/skins/xui/ja/panel_land_covenant.xml | 24 +- linden/indra/newview/skins/xui/ja/panel_login.xml | 26 +- .../newview/skins/xui/ja/panel_media_remote.xml | 15 +- .../newview/skins/xui/ja/panel_music_remote.xml | 15 +- .../newview/skins/xui/ja/panel_overlaybar.xml | 15 +- linden/indra/newview/skins/xui/ja/panel_place.xml | 2 +- .../newview/skins/xui/ja/panel_place_small.xml | 2 +- .../skins/xui/ja/panel_preferences_audio.xml | 36 +- .../skins/xui/ja/panel_preferences_chat.xml | 42 +- .../skins/xui/ja/panel_preferences_general.xml | 90 +- .../skins/xui/ja/panel_preferences_graphics1.xml | 32 +- .../skins/xui/ja/panel_preferences_graphics2.xml | 36 +- .../skins/xui/ja/panel_preferences_graphics3.xml | 23 +- .../newview/skins/xui/ja/panel_preferences_im.xml | 27 +- .../skins/xui/ja/panel_preferences_input.xml | 22 +- .../skins/xui/ja/panel_preferences_network.xml | 32 +- .../skins/xui/ja/panel_preferences_popups.xml | 13 +- .../newview/skins/xui/ja/panel_region_covenant.xml | 33 +- .../newview/skins/xui/ja/panel_region_debug.xml | 36 +- .../newview/skins/xui/ja/panel_region_estate.xml | 51 +- .../newview/skins/xui/ja/panel_region_general.xml | 26 +- .../newview/skins/xui/ja/panel_region_terrain.xml | 28 +- .../newview/skins/xui/ja/panel_region_texture.xml | 59 +- .../newview/skins/xui/ja/panel_scrolling_param.xml | 4 +- .../newview/skins/xui/ja/panel_settings_chat.xml | 35 +- .../newview/skins/xui/ja/panel_settings_im.xml | 10 +- .../newview/skins/xui/ja/panel_settings_msgbox.xml | 10 +- .../skins/xui/ja/panel_settings_network.xml | 39 +- .../newview/skins/xui/ja/panel_settings_web.xml | 43 +- .../newview/skins/xui/ja/panel_status_bar.xml | 23 +- .../indra/newview/skins/xui/ja/panel_toolbar.xml | 29 +- .../indra/newview/skins/xui/ja/panel_top_pick.xml | 6 +- linden/indra/newview/skins/xui/ja/role_actions.xml | 179 +- linden/indra/newview/skins/xui/ja/untranslated.xml | Bin 69 -> 344387 bytes linden/indra/newview/skins/xui/ko/alerts.xml | 14 +- .../indra/newview/skins/xui/ko/floater_about.xml | 2 +- .../newview/skins/xui/ko/floater_about_land.xml | 30 +- .../skins/xui/ko/floater_animation_preview.xml | 60 +- .../skins/xui/ko/floater_avatar_textures.xml | 6 +- .../newview/skins/xui/ko/floater_clothing.xml | 2 +- .../newview/skins/xui/ko/floater_color_picker.xml | 4 +- .../newview/skins/xui/ko/floater_customize.xml | 2 +- .../newview/skins/xui/ko/floater_directory.xml | 60 +- .../indra/newview/skins/xui/ko/floater_friends.xml | 20 +- .../indra/newview/skins/xui/ko/floater_gesture.xml | 12 +- .../newview/skins/xui/ko/floater_group_info.xml | 4 +- .../indra/newview/skins/xui/ko/floater_groups.xml | 4 +- .../newview/skins/xui/ko/floater_image_preview.xml | 4 +- .../newview/skins/xui/ko/floater_inventory.xml | 6 +- .../skins/xui/ko/floater_inventory_view_finder.xml | 2 +- .../newview/skins/xui/ko/floater_land_holdings.xml | 10 +- linden/indra/newview/skins/xui/ko/floater_mute.xml | 2 +- .../skins/xui/ko/floater_new_outfit_dialog.xml | 6 +- .../skins/xui/ko/floater_preview_gesture.xml | 4 +- .../newview/skins/xui/ko/floater_report_abuse.xml | 8 +- .../newview/skins/xui/ko/floater_report_bug.xml | 8 +- .../newview/skins/xui/ko/floater_script_debug.xml | 2 +- .../newview/skins/xui/ko/floater_snapshot.xml | 4 +- .../indra/newview/skins/xui/ko/floater_telehub.xml | 4 +- .../newview/skins/xui/ko/floater_world_map.xml | 2 +- .../indra/newview/skins/xui/ko/menu_inventory.xml | 2 +- .../indra/newview/skins/xui/ko/menu_pie_self.xml | 4 +- linden/indra/newview/skins/xui/ko/menu_viewer.xml | 6 +- linden/indra/newview/skins/xui/ko/notify.xml | 2 +- linden/indra/newview/skins/xui/ko/panel_avatar.xml | 12 +- .../newview/skins/xui/ko/panel_group_general.xml | 14 +- .../newview/skins/xui/ko/panel_group_invite.xml | 2 +- .../skins/xui/ko/panel_group_land_money.xml | 6 +- .../newview/skins/xui/ko/panel_group_notices.xml | 16 +- .../newview/skins/xui/ko/panel_group_roles.xml | 20 +- .../newview/skins/xui/ko/panel_group_voting.xml | 10 +- .../newview/skins/xui/ko/panel_land_covenant.xml | 4 +- .../skins/xui/ko/panel_preferences_audio.xml | 4 +- .../skins/xui/ko/panel_preferences_chat.xml | 14 +- .../skins/xui/ko/panel_preferences_general.xml | 18 +- .../skins/xui/ko/panel_preferences_graphics2.xml | 12 +- .../skins/xui/ko/panel_preferences_graphics3.xml | 2 +- .../newview/skins/xui/ko/panel_preferences_im.xml | 8 +- .../skins/xui/ko/panel_preferences_input.xml | 6 +- .../skins/xui/ko/panel_preferences_network.xml | 2 +- .../skins/xui/ko/panel_preferences_popups.xml | 6 +- .../newview/skins/xui/ko/panel_region_debug.xml | 4 +- .../newview/skins/xui/ko/panel_region_general.xml | 4 +- .../newview/skins/xui/ko/panel_region_terrain.xml | 2 +- .../newview/skins/xui/ko/panel_region_texture.xml | 2 +- linden/indra/newview/viewer.cpp | 192 +- linden/indra/newview/viewer_manifest.py | 1 + .../indra/test/MacTester.xcodeproj/project.pbxproj | 2 +- linden/indra/test/blowfish.pl | 5 + linden/indra/test/files.lst | 21 + linden/indra/test/inventory.cpp | 463 +++- linden/indra/test/llbitpack_tut.cpp | 3 +- linden/indra/test/llbuffer_tut.cpp | 270 ++ linden/indra/test/lldatapacker_tut.cpp | 3 +- linden/indra/test/lldate_tut.cpp | 206 ++ linden/indra/test/llhost_tut.cpp | 237 ++ linden/indra/test/lljoint_tut.cpp | 244 ++ linden/indra/test/llmessageconfig_tut.cpp | 205 +- linden/indra/test/llmessagetemplateparser_tut.cpp | 370 +++ linden/indra/test/llnamevalue_tut.cpp | 848 ++++++ linden/indra/test/llpermissions_tut.cpp | 553 ++++ linden/indra/test/llquaternion_tut.cpp | 665 +++++ linden/indra/test/llsaleinfo_tut.cpp | 248 ++ linden/indra/test/llsdmessagebuilder_tut.cpp | 2 +- linden/indra/test/llsdmessagereader_tut.cpp | 6 +- linden/indra/test/llsdtraits.h | 28 + linden/indra/test/llsdutil_tut.cpp | 152 ++ linden/indra/test/llstreamtools_tut.cpp | 928 +++++++ linden/indra/test/llstring_tut.cpp | 1 + linden/indra/test/lltemplatemessagebuilder_tut.cpp | 964 +++++++ linden/indra/test/lltut.h | 6 - linden/indra/test/lluuidhashmap_tut.cpp | 359 +++ linden/indra/test/llxorcipher_tut.cpp | 133 + linden/indra/test/m3math_tut.cpp | 2 +- linden/indra/test/message_tut.cpp | 97 + linden/indra/test/test.cpp | 32 +- linden/indra/test/test.vcproj | 66 +- linden/indra/test/v2math_tut.cpp | 14 +- linden/indra/test/v3color_tut.cpp | 314 +++ linden/indra/test/v3dmath_tut.cpp | 157 +- linden/indra/test/v3math_tut.cpp | 14 +- linden/indra/test/v4color_tut.cpp | 364 +++ linden/indra/test/v4coloru_tut.cpp | 337 +++ linden/indra/test/v4math_tut.cpp | 379 +++ linden/scripts/messages/message_template.msg | 2239 ++++----------- linden/scripts/setup-path.py | 38 + linden/scripts/template_verifier.py | 175 ++ 343 files changed, 17833 insertions(+), 11012 deletions(-) create mode 100644 linden/etc/message.xml create mode 100644 linden/indra/lib/python/indra/__init__.py create mode 100644 linden/indra/lib/python/indra/compatibility.py create mode 100644 linden/indra/lib/python/indra/llmessage.py create mode 100644 linden/indra/lib/python/indra/tokenstream.py delete mode 100644 linden/indra/llmath/llv4math.h delete mode 100644 linden/indra/llmath/llv4matrix3.h delete mode 100644 linden/indra/llmath/llv4matrix4.h delete mode 100644 linden/indra/llmath/llv4vector3.h create mode 100644 linden/indra/llmessage/llmessagetemplateparser.cpp create mode 100644 linden/indra/llmessage/llmessagetemplateparser.h create mode 100644 linden/indra/llmessage/llpacketack.cpp delete mode 100644 linden/indra/newview/app_settings/message.xml delete mode 100644 linden/indra/newview/llviewerjointmesh_sse.cpp delete mode 100644 linden/indra/newview/llviewerjointmesh_sse2.cpp delete mode 100644 linden/indra/newview/llviewerjointmesh_vec.cpp create mode 100755 linden/indra/newview/prebuild.bat create mode 100644 linden/indra/test/llbuffer_tut.cpp create mode 100644 linden/indra/test/lldate_tut.cpp create mode 100644 linden/indra/test/llhost_tut.cpp create mode 100644 linden/indra/test/lljoint_tut.cpp create mode 100644 linden/indra/test/llmessagetemplateparser_tut.cpp create mode 100644 linden/indra/test/llnamevalue_tut.cpp create mode 100644 linden/indra/test/llpermissions_tut.cpp create mode 100644 linden/indra/test/llquaternion_tut.cpp create mode 100644 linden/indra/test/llsaleinfo_tut.cpp create mode 100644 linden/indra/test/llsdutil_tut.cpp create mode 100644 linden/indra/test/llstreamtools_tut.cpp create mode 100644 linden/indra/test/lltemplatemessagebuilder_tut.cpp create mode 100644 linden/indra/test/lluuidhashmap_tut.cpp create mode 100644 linden/indra/test/llxorcipher_tut.cpp create mode 100644 linden/indra/test/message_tut.cpp create mode 100644 linden/indra/test/v3color_tut.cpp create mode 100644 linden/indra/test/v4color_tut.cpp create mode 100644 linden/indra/test/v4coloru_tut.cpp create mode 100644 linden/indra/test/v4math_tut.cpp create mode 100755 linden/scripts/setup-path.py create mode 100755 linden/scripts/template_verifier.py diff --git a/linden/etc/message.xml b/linden/etc/message.xml new file mode 100644 index 0000000..ad2364a --- /dev/null +++ b/linden/etc/message.xml @@ -0,0 +1,399 @@ +<?xml version="1.0"?> +<llsd> + <map> + <key>serverDefaults</key> + <!-- + a map of server names to default message transport + --> + <map> + <key>simulator</key> + <string>template</string> + + <key>spaceserver</key> + <string>template</string> + + <key>dataserver</key> + <string>template</string> + + <key>logDataserver</key> + <string>template</string> + + <key>inventoryDataserver</key> + <string>template</string> + + <key>rpcserver</key> + <string>template</string> + + <key>mapserver</key> + <string>template</string> + + <key>viewer</key> + <string>template</string> + + </map> + <key>messages</key> + <!-- + a map of individual message names that override defaults + --> + <map> + <!-- + Circuit related messages + --> + <key>PacketAck</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>OpenCircuit</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>CloseCircuit</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>StartPingCheck</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>CompletePingCheck</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>AddCircuitCode</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>UseCircuitCode</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>CreateTrustedCircuit</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>RequestTrustedCircuit</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <!-- + Simulator to Launcher + until we get a HTTP server in the launcher + --> + <key>ReportAutosaveCrash</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>SetCPURatio</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <!-- + Viewer to simulator messages sent before UntrustedSimulatorMessage cap received. + --> + <key>CompleteAgentMovement</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>EconomyDataRequest</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>ViewerEffect</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>RegionHandshakeReply</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <!-- + Viewer to simulator messages sent unreliably. + --> + <key>AgentUpdate</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <!-- + Messages created by LLThrottleGroup clients + --> + <key>ImagePacket</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>LayerData</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>ObjectUpdateCached</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>ObjectUpdateCompressed</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>ObjectUpdate</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>ImprovedTerseObjectUpdate</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>AvatarAnimation</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <key>AvatarAppearance</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>false</boolean> + </map> + + <!-- Simulator to simulator unreliable messages --> + <key>EdgeDataPacket</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>CoarseLocationUpdate</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>SimulatorLoad</key> + <map> + <key>flavor</key> + <string>template</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>EstablishAgentCommunication</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ChatterBoxSessionStartReply</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ChatterBoxSessionEventReply</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ForceCloseChatterBoxSession</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ChatterBoxSessionLeaveReply</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ChatterBoxSessionAgentListUpdates</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + + <key>ChatterBoxInvitation</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + </map> + <key>capBans</key> + <map> + <key>MapLayer</key> + <boolean>false</boolean> + + <key>MapLayerGod</key> + <boolean>false</boolean> + + <key>NewFileAgentInventory</key> + <boolean>false</boolean> + + <key>UpdateGestureAgentInventory</key> + <boolean>false</boolean> + + <key>UpdateNotecardAgentInventory</key> + <boolean>false</boolean> + + <key>UpdateScriptAgentInventory</key> + <boolean>true</boolean> + + <key>UpdateGestureTaskInventory</key> + <boolean>false</boolean> + + <key>UpdateNotecardTaskInventory</key> + <boolean>true</boolean> + + <key>UpdateScriptTaskInventory</key> + <boolean>true</boolean> + + <key>ViewerStartAuction</key> + <boolean>true</boolean> + + <key>ParcelGodReserveForNewbie</key> + <boolean>true</boolean> + + <key>SendUserReport</key> + <boolean>false</boolean> + + <key>SendUserReportWithScreenshot</key> + <boolean>false</boolean> + + <key>RequestTextureDownload</key> + <boolean>true</boolean> + + <key>EventQueueGet</key> + <boolean>false</boolean> + + <key>UntrustedSimulatorMessage</key> + <boolean>false</boolean> + + <key>SendPostcard</key> + <boolean>false</boolean> + + <key>SendPostcard2</key> + <boolean>true</boolean> + + <key>SendPostcard3</key> + <boolean>true</boolean> + </map> + + <key>messageBans</key> + <map> + <key>trusted</key> + <map> + </map> + + <key>untrusted</key> + <map> + </map> + </map> + </map> +</llsd> diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct index 3de5e4f..f988b1b 100644 --- a/linden/indra/SConstruct +++ b/linden/indra/SConstruct @@ -392,18 +392,6 @@ for build_target in targets: env_no_distcc = env.Copy(CXX = compiler_no_distcc) - vec_match = re.compile("_vec\.") - env_vec = env.Copy() # _vec is for default vector optimizations or none - - sse_match = re.compile("_sse\.") - env_sse = env.Copy() - env_sse.Append(CPPFLAGS = ' -msse -mfpmath=sse') - - sse2_match = re.compile("_sse2\.") - env_sse2 = env.Copy() - env_sse2.Append(CPPFLAGS = ' -msse2 -mfpmath=sse') - - ### Distributed build hosts ### if enable_distcc: @@ -431,21 +419,6 @@ for build_target in targets: # HELPER FUNCTIONS # ##################### - ## handle special compiler modes - - def file_obj(file): - if file == 'newsim/lltask.cpp': - print 'Found lltask!' - return env_no_distcc.Object(file) - elif vec_match.search(file) != None: - return env_vec.Object(file) - elif sse_match.search(file) != None: - return env_sse.Object(file) - elif sse2_match.search(file) != None: - return env_sse2.Object(file) - else: - return file - ### Load a files.lst and files.PLATFORM.lst for each module ### def load_files(module, source_fname): @@ -456,7 +429,12 @@ for build_target in targets: for x in list: if not x.startswith('#'): file = os.path.join(build_dir, x) - new_list.append(file_obj(file)) + if x == 'newsim/lltask.cpp': + print 'Found lltask!' + obj = env_no_distcc.Object(file) + new_list.append(obj) + else: + new_list.append(file) list_file.close() except IOError, val: print 'Error: unable to open file list',source_fname, @@ -468,7 +446,7 @@ for build_target in targets: list = Split(platform_list_file.read()) for x in list: file = os.path.join(build_dir, x) - new_list.append(file_obj(file)) + new_list.append(file) platform_list_file.close() except IOError: return new_list @@ -522,6 +500,13 @@ for build_target in targets: Default(tgt) + ### Check the message template for compatibility with the base ### + tgt = env.Command("template_verifier_output", + '../scripts/template_verifier.py', + 'python $SOURCE --mode="development" 2>&1') + Default(tgt) + AlwaysBuild(tgt) + #################### # BUILD LIBRARIES # #################### @@ -684,16 +669,8 @@ for build_target in targets: create_executable('newspace/spaceserver' + file_suffix, 'newspace', internal_libs + external_libs) - # Userserver - Depends('userserver/userserver', 'newspace/spaceserver' + file_suffix) - external_libs = common_external_libs - internal_libs = ['llinventory', 'llscene', 'llmessage', 'llvfs', - 'llxml', 'llmath', 'llcommon'] - create_executable('userserver/userserver' + file_suffix, 'userserver', - internal_libs + external_libs) - # Rpcserver - Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix) + Depends('rpcserver/rpcserver', 'newspace/spaceserver' + file_suffix) external_libs = common_external_libs + ['xmlrpc', 'mysqlclient'] internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs', 'llmath', 'llcommon'] @@ -754,7 +731,7 @@ for build_target in targets: Depends('test/test', 'newsim/simulator' + file_suffix) external_libs = common_external_libs + ['mysqlclient'] internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml', - 'llvfs', 'llmath', 'llcommon' ] + 'llvfs', 'llcharacter', 'llmath', 'llcommon' ] test_executable = 'test/test' + file_suffix create_executable(test_executable, 'test', internal_libs + external_libs) @@ -763,7 +740,7 @@ for build_target in targets: test_results_file = 'test/test_results' + file_suffix + '.txt' env.Command(test_results_file, test_executable, - "$SOURCE 2>&1 | tee $TARGET") + "$SOURCE 2>&1") # tee masks segfaults Depends(test_results_file, test_executable) Default(test_results_file) @@ -771,7 +748,7 @@ for build_target in targets: script_test_results = 'test/script_test_result' + file_suffix + '.txt' env.Command(script_test_results, test_script, - "$SOURCE 2>&1 | tee $TARGET") + "$SOURCE 2>&1") # tee masks segfaults Depends(script_test_results, test_results_file) Default(script_test_results) diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln index 27e147e..24495ff 100644 --- a/linden/indra/indra_complete/indra_complete.sln +++ b/linden/indra/indra_complete/indra_complete.sln @@ -141,23 +141,13 @@ EndProject ProjectSection(ProjectDependencies) = postProject {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808} - {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} - {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} - {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - EndProjectSection -EndProject - ProjectSection(ProjectDependencies) = postProject - {A5504A1E-8BA4-45D2-8144-1B6937E37E98} = {A5504A1E-8BA4-45D2-8144-1B6937E37E98} - {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} - {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34} {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_crash_logger\win_crash_logger.vcproj", "{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}" @@ -264,8 +254,6 @@ Global Debug = Debug Release = Release EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32 @@ -455,14 +443,6 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload.ActiveCfg = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.ActiveCfg = Release|Win32 diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln index 8d09d72..9a35696 100644 --- a/linden/indra/indra_complete/indra_complete_vc8.sln +++ b/linden/indra/indra_complete/indra_complete_vc8.sln @@ -117,13 +117,6 @@ EndProject {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} EndProjectSection EndProject - ProjectSection(ProjectDependencies) = postProject - {A5504A1E-8BA4-45D2-8144-1B6937E37E98} = {A5504A1E-8BA4-45D2-8144-1B6937E37E98} - {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} - {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34} - {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_crash_logger\win_crash_logger_vc8.vcproj", "{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}" ProjectSection(ProjectDependencies) = postProject {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB} @@ -447,16 +440,6 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug|Win32.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug|Win32.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release|Win32.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload|Win32.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 diff --git a/linden/indra/lib/python/indra/__init__.py b/linden/indra/lib/python/indra/__init__.py new file mode 100644 index 0000000..7548558 --- /dev/null +++ b/linden/indra/lib/python/indra/__init__.py @@ -0,0 +1,25 @@ +# @file __init__.py +# @brief Initialization file for the indra module. +# +# Copyright (c) 2006-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. diff --git a/linden/indra/lib/python/indra/compatibility.py b/linden/indra/lib/python/indra/compatibility.py new file mode 100644 index 0000000..abc1c6a --- /dev/null +++ b/linden/indra/lib/python/indra/compatibility.py @@ -0,0 +1,121 @@ +# @file compatibility.py +# @brief Classes that manage compatibility states. +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + + +"""Compatibility combination table: + + I M O N S + -- -- -- -- -- +I: I I I I I +M: I M M M M +O: I M O M O +N: I M M N N +S: I M O N S + +""" + +class _Compatibility(object): + def __init__(self, reason): + self.reasons = [ ] + if reason: + self.reasons.append(reason) + + def combine(self, other): + if self._level() <= other._level(): + return self._buildclone(other) + else: + return other._buildclone(self) + + def prefix(self, leadin): + self.reasons = [ leadin + r for r in self.reasons ] + + def same(self): return self._level() >= 1 + def deployable(self): return self._level() > 0 + def resolved(self): return self._level() > -1 + def compatible(self): return self._level() > -2 + + def explain(self): + return self.__class__.__name__ + "\n" + "\n".join(self.reasons) + "\n" + + def _buildclone(self, other=None): + c = self._buildinstance() + c.reasons = self.reasons + if other: + c.reasons = c.reasons + other.reasons + return c + + def _buildinstance(self): + return self.__class__(None) + +# def _level(self): +# raise RuntimeError('implement in subclass') + + +class Incompatible(_Compatibility): + def _level(self): + return -2 + +class Mixed(_Compatibility): + def __init__(self, *inputs): + _Compatibility.__init__(self, None) + for i in inputs: + self.reasons += i.reasons + + def _buildinstance(self): + return self.__class__() + + def _level(self): + return -1 + +class _Aged(_Compatibility): + def combine(self, other): + if self._level() == other._level(): + return self._buildclone(other) + if int(self._level()) == int(other._level()): + return Mixed(self, other) + return _Compatibility.combine(self, other) + +class Older(_Aged): + def _level(self): + return -0.25 + +class Newer(_Aged): + def _level(self): + return 0.25 + +class Same(_Compatibility): + def __init__(self): + _Compatibility.__init__(self, None) + + def _buildinstance(self): + return self.__class__() + + def _level(self): + return 1 + + + + diff --git a/linden/indra/lib/python/indra/llmanifest.py b/linden/indra/lib/python/indra/llmanifest.py index e295cd7..22483b4 100644 --- a/linden/indra/lib/python/indra/llmanifest.py +++ b/linden/indra/lib/python/indra/llmanifest.py @@ -3,7 +3,7 @@ # @author Ryan Williams # @brief Library for specifying operations on a set of files. # -# Copyright (c) 2006-2007, Linden Research, Inc. +# Copyright (c) 2007-2007, Linden Research, Inc. # # Second Life Viewer Source Code # The source code in this file ("Source Code") is provided by Linden Lab diff --git a/linden/indra/lib/python/indra/llmessage.py b/linden/indra/lib/python/indra/llmessage.py new file mode 100644 index 0000000..1d4995d --- /dev/null +++ b/linden/indra/lib/python/indra/llmessage.py @@ -0,0 +1,375 @@ +# @file llmessage.py +# @brief Message template parsing and compatiblity +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +from sets import Set, ImmutableSet + +from compatibility import Incompatible, Older, Newer, Same +from tokenstream import TokenStream + +### +### Message Template +### + +class Template: + def __init__(self): + self.messages = { } + + def addMessage(self, m): + self.messages[m.name] = m + + def compatibleWithBase(self, base): + messagenames = ( + ImmutableSet(self.messages.keys()) + | ImmutableSet(base.messages.keys()) + ) + + compatibility = Same() + for name in messagenames: + selfmessage = self.messages.get(name, None) + basemessage = base.messages.get(name, None) + + if not selfmessage: + c = Older("missing message %s, did you mean to deprecate?" % name) + elif not basemessage: + c = Newer("added message %s" % name) + else: + c = selfmessage.compatibleWithBase(basemessage) + c.prefix("in message %s: " % name) + + compatibility = compatibility.combine(c) + + return compatibility + + + +class Message: + HIGH = "High" + MEDIUM = "Medium" + LOW = "Low" + FIXED = "Fixed" + priorities = [ HIGH, MEDIUM, LOW, FIXED ] + prioritieswithnumber = [ FIXED ] + + TRUSTED = "Trusted" + NOTTRUSTED = "NotTrusted" + trusts = [ TRUSTED, NOTTRUSTED ] + + UNENCODED = "Unencoded" + ZEROCODED = "Zerocoded" + encodings = [ UNENCODED, ZEROCODED ] + + NOTDEPRECATED = "NotDeprecated" + DEPRECATED = "Deprecated" + UDPDEPRECATED = "UDPDeprecated" + deprecations = [ NOTDEPRECATED, UDPDEPRECATED, DEPRECATED ] + # in order of increasing deprecation + + def __init__(self, name, number, priority, trust, coding): + self.name = name + self.number = number + self.priority = priority + self.trust = trust + self.coding = coding + self.deprecateLevel = 0 + self.blocks = [ ] + + def deprecated(self): + return self.deprecateLevel != 0 + + def deprecate(self, deprecation): + self.deprecateLevel = self.deprecations.index(deprecation) + + def addBlock(self, block): + self.blocks.append(block) + + def compatibleWithBase(self, base): + if self.name != base.name: + # this should never happen in real life because of the + # way Template matches up messages by name + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.priority != base.priority: + return Incompatible("has different priority: %s vs. %s in base" + % (self.priority, base.priority)) + if self.trust != base.trust: + return Incompatible("has different trust: %s vs. %s in base" + % (self.trust, base.trust)) + if self.coding != base.coding: + return Incompatible("has different coding: %s vs. %s in base" + % (self.coding, base.coding)) + if self.number != base.number: + return Incompatible("has different number: %s vs. %s in base" + % (self.number, base.number)) + + compatibility = Same() + + if self.deprecateLevel != base.deprecateLevel: + if self.deprecateLevel < base.deprecateLevel: + c = Older("is less deprecated: %s vs. %s in base" % ( + self.deprecations[self.deprecateLevel], + self.deprecations[base.deprecateLevel])) + else: + c = Newer("is more deprecated: %s vs. %s in base" % ( + self.deprecations[self.deprecateLevel], + self.deprecations[base.deprecateLevel])) + compatibility = compatibility.combine(c) + + selflen = len(self.blocks) + baselen = len(base.blocks) + samelen = min(selflen, baselen) + + for i in xrange(0, samelen): + selfblock = self.blocks[i] + baseblock = base.blocks[i] + + c = selfblock.compatibleWithBase(baseblock) + if not c.same(): + c = Incompatible("block %d isn't identical" % i) + compatibility = compatibility.combine(c) + + if selflen > baselen: + c = Newer("has %d extra blocks" % (selflen - baselen)) + elif selflen < baselen: + c = Older("missing %d extra blocks" % (baselen - selflen)) + else: + c = Same() + + compatibility = compatibility.combine(c) + return compatibility + + + +class Block(object): + SINGLE = "Single" + MULTIPLE = "Multiple" + VARIABLE = "Variable" + repeats = [ SINGLE, MULTIPLE, VARIABLE ] + repeatswithcount = [ MULTIPLE ] + + def __init__(self, name, repeat, count=None): + self.name = name + self.repeat = repeat + self.count = count + self.variables = [ ] + + def addVariable(self, variable): + self.variables.append(variable) + + def compatibleWithBase(self, base): + if self.name != base.name: + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.repeat != base.repeat: + return Incompatible("has different repeat: %s vs. %s in base" + % (self.repeat, base.repeat)) + if self.repeat in Block.repeatswithcount: + if self.count != base.count: + return Incompatible("has different count: %s vs. %s in base" + % (self.count, base.count)) + + compatibility = Same() + + selflen = len(self.variables) + baselen = len(base.variables) + + for i in xrange(0, min(selflen, baselen)): + selfvar = self.variables[i] + basevar = base.variables[i] + + c = selfvar.compatibleWithBase(basevar) + if not c.same(): + c = Incompatible("variable %d isn't identical" % i) + compatibility = compatibility.combine(c) + + if selflen > baselen: + c = Newer("has %d extra variables" % (selflen - baselen)) + elif selflen < baselen: + c = Older("missing %d extra variables" % (baselen - selflen)) + else: + c = Same() + + compatibility = compatibility.combine(c) + return compatibility + + + +class Variable: + U8 = "U8"; U16 = "U16"; U32 = "U32"; U64 = "U64" + S8 = "S8"; S16 = "S16"; S32 = "S32"; S64 = "S64" + F32 = "F32"; F64 = "F64" + LLVECTOR3 = "LLVector3"; LLVECTOR3D = "LLVector3d"; LLVECTOR4 = "LLVector4" + LLQUATERNION = "LLQuaternion" + LLUUID = "LLUUID" + BOOL = "BOOL" + IPADDR = "IPADDR"; IPPORT = "IPPORT" + FIXED = "Fixed" + VARIABLE = "Variable" + types = [ U8, U16, U32, U64, S8, S16, S32, S64, F32, F64, + LLVECTOR3, LLVECTOR3D, LLVECTOR4, LLQUATERNION, + LLUUID, BOOL, IPADDR, IPPORT, FIXED, VARIABLE ] + typeswithsize = [ FIXED, VARIABLE ] + + def __init__(self, name, type, size): + self.name = name + self.type = type + self.size = size + + def compatibleWithBase(self, base): + if self.name != base.name: + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.type != base.type: + return Incompatible("has different type: %s vs. %s in base" + % (self.type, base.type)) + if self.type in Variable.typeswithsize: + if self.size != base.size: + return Incompatible("has different size: %s vs. %s in base" + % (self.size, base.size)) + return Same() + + + +### +### Parsing Message Templates +### + +class TemplateParser: + def __init__(self, tokens): + self._tokens = tokens + self._version = 0 + self._numbers = { } + for p in Message.priorities: + self._numbers[p] = 0 + + def parseTemplate(self): + tokens = self._tokens + t = Template() + while True: + if tokens.want("version"): + v = float(tokens.require(tokens.wantFloat())) + self._version = v + t.version = v + continue + + m = self.parseMessage() + if m: + t.addMessage(m) + continue + + if self._version >= 2.0: + tokens.require(tokens.wantEOF()) + break + else: + if tokens.wantEOF(): + break + + tokens.consume() + # just assume (gulp) that this is a comment + # line 468: "sim -> dataserver" + return t + + + def parseMessage(self): + tokens = self._tokens + if not tokens.want("{"): + return None + + name = tokens.require(tokens.wantSymbol()) + priority = tokens.require(tokens.wantOneOf(Message.priorities)) + + if self._version >= 2.0 or priority in Message.prioritieswithnumber: + number = int("+" + tokens.require(tokens.wantInteger()), 0) + else: + self._numbers[priority] += 1 + number = self._numbers[priority] + + trust = tokens.require(tokens.wantOneOf(Message.trusts)) + coding = tokens.require(tokens.wantOneOf(Message.encodings)) + + m = Message(name, number, priority, trust, coding) + + if self._version >= 2.0: + d = tokens.wantOneOf(Message.deprecations) + if d: + m.deprecate(d) + + while True: + b = self.parseBlock() + if not b: + break + m.addBlock(b) + + tokens.require(tokens.want("}")) + + return m + + + def parseBlock(self): + tokens = self._tokens + if not tokens.want("{"): + return None + name = tokens.require(tokens.wantSymbol()) + repeat = tokens.require(tokens.wantOneOf(Block.repeats)) + if repeat in Block.repeatswithcount: + count = int(tokens.require(tokens.wantInteger())) + else: + count = None + + b = Block(name, repeat, count) + + while True: + v = self.parseVariable() + if not v: + break + b.addVariable(v) + + tokens.require(tokens.want("}")) + return b + + + def parseVariable(self): + tokens = self._tokens + if not tokens.want("{"): + return None + name = tokens.require(tokens.wantSymbol()) + type = tokens.require(tokens.wantOneOf(Variable.types)) + if type in Variable.typeswithsize: + size = tokens.require(tokens.wantInteger()) + else: + tokens.wantInteger() # in LandStatRequest: "{ ParcelLocalID S32 1 }" + size = None + tokens.require(tokens.want("}")) + return Variable(name, type, size) + +def parseTemplateString(s): + return TemplateParser(TokenStream().fromString(s)).parseTemplate() + +def parseTemplateFile(f): + return TemplateParser(TokenStream().fromFile(f)).parseTemplate() + + + + diff --git a/linden/indra/lib/python/indra/tokenstream.py b/linden/indra/lib/python/indra/tokenstream.py new file mode 100644 index 0000000..7dab11f --- /dev/null +++ b/linden/indra/lib/python/indra/tokenstream.py @@ -0,0 +1,152 @@ +# @file tokenstream.py +# @brief Message template parsing utility class +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +import re + +class _EOF(object): + pass + +EOF = _EOF() + +class _LineMarker(int): + pass + +_commentRE = re.compile(r'//.*') +_symbolRE = re.compile(r'[a-zA-Z_][a-zA-Z_0-9]*') +_integerRE = re.compile(r'(0x[0-9A-Fa-f]+|0\d*|[1-9]\d*)') +_floatRE = re.compile(r'\d+(\.\d*)?') + + +class ParseError(Exception): + def __init__(self, stream, reason): + self.line = stream.line + self.context = stream._context() + self.reason = reason + + def _contextString(self): + c = [ ] + for t in self.context: + if isinstance(t, _LineMarker): + break + c.append(t) + return " ".join(c) + + def __str__(self): + return "line %d: %s @ ... %s" % ( + self.line, self.reason, self._contextString()) + + def __nonzero__(self): + return False + + +def _optionText(options): + n = len(options) + if n == 1: + return '"%s"' % options[0] + return '"' + '", "'.join(options[0:(n-1)]) + '" or "' + options[-1] + '"' + + +class TokenStream(object): + def __init__(self): + self.line = 0 + self.tokens = [ ] + + def fromString(self, string): + return self.fromLines(string.split('\n')) + + def fromFile(self, file): + return self.fromLines(file) + + def fromLines(self, lines): + i = 0 + for line in lines: + i += 1 + self.tokens.append(_LineMarker(i)) + self.tokens.extend(_commentRE.sub(" ", line).split()) + self._consumeLines() + return self + + def consume(self): + if not self.tokens: + return EOF + t = self.tokens.pop(0) + self._consumeLines() + return t + + def _consumeLines(self): + while self.tokens and isinstance(self.tokens[0], _LineMarker): + self.line = self.tokens.pop(0) + + def peek(self): + if not self.tokens: + return EOF + return self.tokens[0] + + def want(self, t): + if t == self.peek(): + return self.consume() + return ParseError(self, 'expected "%s"' % t) + + def wantOneOf(self, options): + assert len(options) + if self.peek() in options: + return self.consume() + return ParseError(self, 'expected one of %s' % _optionText(options)) + + def wantEOF(self): + return self.want(EOF) + + def wantRE(self, re, message=None): + t = self.peek() + if t != EOF: + m = re.match(t) + if m and m.end() == len(t): + return self.consume() + if not message: + message = "expected match for r'%s'" % re.pattern + return ParseError(self, message) + + def wantSymbol(self): + return self.wantRE(_symbolRE, "expected symbol") + + def wantInteger(self): + return self.wantRE(_integerRE, "expected integer") + + def wantFloat(self): + return self.wantRE(_floatRE, "expected float") + + def _context(self): + n = min(5, len(self.tokens)) + return self.tokens[0:n] + + def require(self, t): + if t: + return t + if isinstance(t, ParseError): + raise t + else: + raise ParseError(self, "unmet requirement") + diff --git a/linden/indra/llcommon/lldarray.h b/linden/indra/llcommon/lldarray.h index 291da19..7942e77 100644 --- a/linden/indra/llcommon/lldarray.h +++ b/linden/indra/llcommon/lldarray.h @@ -189,16 +189,17 @@ public: void reset() { mVector.resize(0); mIndexMap.resize(0); } bool empty() const { return mVector.empty(); } - size_type size() const { return mVector.empty(); } + size_type size() const { return mVector.size(); } Type& operator[](const Key& k) { - typename std::map<Key, U32>::iterator iter = mIndexMap.find(k); + typename std::map<Key, U32>::const_iterator iter = mIndexMap.find(k); if (iter == mIndexMap.end()) { U32 n = mVector.size(); mIndexMap[k] = n; mVector.resize(n+1); + llassert(mVector.size() == mIndexMap.size()); return mVector[n]; } else @@ -206,7 +207,19 @@ public: return mVector[iter->second]; } } - + + const_iterator find(const Key& k) const + { + typename std::map<Key, U32>::const_iterator iter = mIndexMap.find(k); + if(iter == mIndexMap.end()) + { + return mVector.end(); + } + else + { + return mVector.begin() + iter->second; + } + } }; #endif diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h index 76145c5..495b9e8 100644 --- a/linden/indra/llcommon/llpreprocessor.h +++ b/linden/indra/llcommon/llpreprocessor.h @@ -71,22 +71,12 @@ #define MOZILLA_INTERNAL_API 1 #endif -// Figure out differences between compilers -#if defined(__GNUC__) +// Deal with minor differences on Unixy OSes. +#if LL_DARWIN || LL_LINUX #define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) - #ifndef LL_GNUC - #define LL_GNUC 1 - #endif -#elif defined(__MSVC_VER__) || defined(_MSC_VER) - #ifndef LL_MSVC - #define LL_MSVC 1 - #endif -#endif -// Deal with minor differences on Unixy OSes. -#if LL_DARWIN || LL_LINUX // Different name, same functionality. #define stricmp strcasecmp #define strnicmp strncasecmp @@ -99,9 +89,9 @@ #endif // Deal with the differeneces on Windows -#if LL_MSVC +#if LL_WINDOWS #define snprintf safe_snprintf /* Flawfinder: ignore */ -#endif // LL_MSVC +#endif // LL_WINDOWS // Static linking with apr on windows needs to be declared. #ifdef LL_WINDOWS @@ -120,7 +110,7 @@ // Deal with VC6 problems -#if LL_MSVC +#if defined(LL_WINDOWS) #pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4. #pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4. #pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4. @@ -131,6 +121,6 @@ #pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation. #pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) #pragma warning( disable : 4996 ) // warning: deprecated -#endif // LL_MSVC +#endif // LL_WINDOWS #endif // not LL_LINDEN_PREPROCESSOR_H diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp index e76294d..bd21351 100644 --- a/linden/indra/llcommon/llprocessor.cpp +++ b/linden/indra/llcommon/llprocessor.cpp @@ -1538,7 +1538,6 @@ void CProcessor::GetStandardProcessorExtensions() CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore = CheckBit(edxreg, 24); CPUInfo._Ext.SSE_StreamingSIMD_Extensions = CheckBit(edxreg, 25); CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = CheckBit(edxreg, 26); - CPUInfo._Ext.Altivec_Extensions = false; CPUInfo._Ext.SS_SelfSnoop = CheckBit(edxreg, 27); CPUInfo._Ext.HT_HyperThreading = CheckBit(edxreg, 28); CPUInfo._Ext.HT_HyterThreadingSiblings = (ebxreg >> 16) & 0xFF; @@ -1892,12 +1891,11 @@ const ProcessorInfo *CProcessor::GetCPUInfo() break; } + // It's kinda like MMX or SSE... CPUInfo._Ext.EMMX_MultimediaExtensions = CPUInfo._Ext.MMX_MultimediaExtensions = CPUInfo._Ext.SSE_StreamingSIMD_Extensions = - CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = false; - - CPUInfo._Ext.Altivec_Extensions = hasFeature("hw.optional.altivec"); + CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.altivec"); #endif @@ -1914,7 +1912,6 @@ const ProcessorInfo *CProcessor::GetCPUInfo() CPUInfo._Ext.MMX_MultimediaExtensions = hasFeature("hw.optional.mmx"); CPUInfo._Ext.SSE_StreamingSIMD_Extensions = hasFeature("hw.optional.sse"); CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.sse2"); - CPUInfo._Ext.Altivec_Extensions = false; CPUInfo._Ext.AA64_AMD64BitArchitecture = hasFeature("hw.optional.x86_64"); #endif @@ -2068,7 +2065,6 @@ bool CProcessor::CPUInfoToText(char *strBuffer, unsigned int uiMaxLen) BOOLADD("SS Self Snoop: ", CPUInfo._Ext.SS_SelfSnoop); BOOLADD("SSE Streaming SIMD Extensions: ", CPUInfo._Ext.SSE_StreamingSIMD_Extensions); BOOLADD("SSE2 Streaming SIMD 2 Extensions: ", CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions); - BOOLADD("ALTVEC Altivec Extensions: ", CPUInfo._Ext.Altivec_Extensions); BOOLADD("TM Thermal Monitor: ", CPUInfo._Ext.TM_ThermalMonitor); BOOLADD("TSC Time Stamp Counter: ", CPUInfo._Ext.TSC_TimeStampCounter); BOOLADD("VME Virtual 8086 Mode Enhancements: ", CPUInfo._Ext.VME_Virtual8086ModeEnhancements); diff --git a/linden/indra/llcommon/llprocessor.h b/linden/indra/llcommon/llprocessor.h index 6db9328..fd9a5da 100644 --- a/linden/indra/llcommon/llprocessor.h +++ b/linden/indra/llcommon/llprocessor.h @@ -71,7 +71,6 @@ typedef struct ProcessorExtensions bool FXSR_FastStreamingSIMD_ExtensionsSaveRestore; bool SSE_StreamingSIMD_Extensions; bool SSE2_StreamingSIMD2_Extensions; - bool Altivec_Extensions; bool SS_SelfSnoop; bool HT_HyperThreading; unsigned int HT_HyterThreadingSiblings; diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h index 40d0c8a..be3385d 100644 --- a/linden/indra/llcommon/llskiplist.h +++ b/linden/indra/llcommon/llskiplist.h @@ -28,10 +28,11 @@ #ifndef LL_LLSKIPLIST_H #define LL_LLSKIPLIST_H -#include "llrand.h" +#include "llerror.h" +//#include "vmath.h" // NOTA BENE: Insert first needs to be < NOT <= -// Binary depth must be >= 2 + template <class DATA_TYPE, S32 BINARY_DEPTH = 10> class LLSkipList { @@ -143,11 +144,14 @@ private: // Implementation // - -// Binary depth must be >= 2 template <class DATA_TYPE, S32 BINARY_DEPTH> inline void LLSkipList<DATA_TYPE, BINARY_DEPTH>::init() { + if (BINARY_DEPTH < 2) + { + llerrs << "Trying to create skip list with too little depth, " + "must be 2 or greater" << llendl; + } S32 i; for (i = 0; i < BINARY_DEPTH; i++) { diff --git a/linden/indra/llcommon/llstreamtools.h b/linden/indra/llcommon/llstreamtools.h index c339dde..d64bd57 100644 --- a/linden/indra/llcommon/llstreamtools.h +++ b/linden/indra/llcommon/llstreamtools.h @@ -60,11 +60,13 @@ bool skip_to_end_of_next_keyword(const char* keyword, std::istream& input_stream //bool skip_to_start_of_next_keyword(const char* keyword, std::istream& input_stream); // characters are pulled out of input_stream and appended to output_string +// returns result of input_stream.good() after characters are pulled bool get_word(std::string& output_string, std::istream& input_stream); bool get_line(std::string& output_string, std::istream& input_stream); // characters are pulled out of input_stream (up to a max of 'n') // and appended to output_string +// returns result of input_stream.good() after characters are pulled bool get_word(std::string& output_string, std::istream& input_stream, int n); bool get_line(std::string& output_string, std::istream& input_stream, int n); diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h index a24f944..adfdfb8 100644 --- a/linden/indra/llcommon/llstring.h +++ b/linden/indra/llcommon/llstring.h @@ -1074,9 +1074,6 @@ BOOL LLStringBase<T>::isHead( const std::basic_string<T>& string, const T* s ) template<class T> BOOL LLStringBase<T>::read(std::basic_string<T>& string, const char* filename) /*Flawfinder: ignore*/ { -#ifdef LL_LINUX - printf("STUBBED: LLStringBase<T>::read at %s:%d\n", __FILE__, __LINE__); -#else llifstream ifs(filename, llifstream::binary); if (!ifs.is_open()) { @@ -1091,7 +1088,6 @@ BOOL LLStringBase<T>::read(std::basic_string<T>& string, const char* filename) string = oss.str(); ifs.close(); -#endif return TRUE; } diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp index 33e5cda..48f2474 100644 --- a/linden/indra/llcommon/llsys.cpp +++ b/linden/indra/llcommon/llsys.cpp @@ -304,33 +304,12 @@ LLCPUInfo::LLCPUInfo() { CProcessor proc; const ProcessorInfo* info = proc.GetCPUInfo(); - // proc.WriteInfoTextFile("procInfo.txt"); - mHasSSE = info->_Ext.SSE_StreamingSIMD_Extensions; - mHasSSE2 = info->_Ext.SSE2_StreamingSIMD2_Extensions; - mHasAltivec = info->_Ext.Altivec_Extensions; + mHasSSE = (info->_Ext.SSE_StreamingSIMD_Extensions != 0); + mHasSSE2 = (info->_Ext.SSE2_StreamingSIMD2_Extensions != 0); mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0); mFamily.assign( info->strFamily ); } -bool LLCPUInfo::hasAltivec() const -{ - return mHasAltivec; -} - -bool LLCPUInfo::hasSSE() const -{ - return mHasSSE; -} - -bool LLCPUInfo::hasSSE2() const -{ - return mHasSSE2; -} - -S32 LLCPUInfo::getMhz() const -{ - return mCPUMhz; -} std::string LLCPUInfo::getCPUString() const { diff --git a/linden/indra/llcommon/llsys.h b/linden/indra/llcommon/llsys.h index 83ea081..2047d9a 100644 --- a/linden/indra/llcommon/llsys.h +++ b/linden/indra/llcommon/llsys.h @@ -72,18 +72,16 @@ public: std::string getCPUString() const; - bool hasAltivec() const; - bool hasSSE() const; - bool hasSSE2() const; - S32 getMhz() const; + BOOL hasSSE() const { return mHasSSE; } + BOOL hasSSE2() const { return mHasSSE2; } + S32 getMhz() const { return mCPUMhz; } // Family is "AMD Duron" or "Intel Pentium Pro" const std::string& getFamily() const { return mFamily; } private: - bool mHasSSE; - bool mHasSSE2; - bool mHasAltivec; + BOOL mHasSSE; + BOOL mHasSSE2; S32 mCPUMhz; std::string mFamily; }; diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h index eb8310e..9739d04 100644 --- a/linden/indra/llcommon/llversion.h +++ b/linden/indra/llcommon/llversion.h @@ -30,8 +30,8 @@ #define LL_LLVERSION_H const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 17; -const S32 LL_VERSION_PATCH = 3; -const S32 LL_VERSION_BUILD = 0; +const S32 LL_VERSION_MINOR = 18; +const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_BUILD = 6; #endif diff --git a/linden/indra/llmath/llmath.vcproj b/linden/indra/llmath/llmath.vcproj index bdc8ded..4876065 100644 --- a/linden/indra/llmath/llmath.vcproj +++ b/linden/indra/llmath/llmath.vcproj @@ -272,18 +272,6 @@ RelativePath=".\lluuid.h"> </File> <File - RelativePath=".\llv4math.h"> - </File> - <File - RelativePath=".\llv4matrix3.h"> - </File> - <File - RelativePath=".\llv4matrix4.h"> - </File> - <File - RelativePath=".\llv4vector3.h"> - </File> - <File RelativePath=".\llvolume.h"> </File> <File diff --git a/linden/indra/llmath/llmath_vc8.vcproj b/linden/indra/llmath/llmath_vc8.vcproj index 03d75c3..ea23702 100644 --- a/linden/indra/llmath/llmath_vc8.vcproj +++ b/linden/indra/llmath/llmath_vc8.vcproj @@ -389,22 +389,6 @@ > </File> <File - RelativePath=".\llv4math.h" - > - </File> - <File - RelativePath=".\llv4matrix3.h" - > - </File> - <File - RelativePath=".\llv4matrix4.h" - > - </File> - <File - RelativePath=".\llv4vector3.h" - > - </File> - <File RelativePath=".\llvolume.h" > </File> diff --git a/linden/indra/llmath/llv4math.h b/linden/indra/llmath/llv4math.h deleted file mode 100644 index d0b956b..0000000 --- a/linden/indra/llmath/llv4math.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATH_H -#define LL_LLV4MATH_H - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - GNUC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_GNUC && __GNUC__ >= 4 && __SSE__ - -#define LL_VECTORIZE 1 - -#if LL_DARWIN - -#include <Accelerate/Accelerate.h> -#include <xmmintrin.h> -typedef vFloat V4F32; - -#else - -#include <xmmintrin.h> -typedef float V4F32 __attribute__((vector_size(16))); - -#endif - -#endif -#if LL_GNUC - -#define LL_LLV4MATH_ALIGN_PREFIX -#define LL_LLV4MATH_ALIGN_POSTFIX __attribute__((aligned(16))) - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - MSVC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_MSVC && _M_IX86_FP - -#define LL_VECTORIZE 1 - -#include <xmmintrin.h> - -typedef __m128 V4F32; - -#endif -#if LL_MSVC - -#define LL_LLV4MATH_ALIGN_PREFIX __declspec(align(16)) -#define LL_LLV4MATH_ALIGN_POSTFIX - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - default - no vectorization -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if !LL_VECTORIZE - -#define LL_VECTORIZE 0 - -struct V4F32 { F32 __pad__[4]; }; - -inline F32 llv4lerp(F32 a, F32 b, F32 w) { return ( b - a ) * w + a; } - -#endif - -#ifndef LL_LLV4MATH_ALIGN_PREFIX -# define LL_LLV4MATH_ALIGN_PREFIX -#endif -#ifndef LL_LLV4MATH_ALIGN_POSTFIX -# define LL_LLV4MATH_ALIGN_POSTFIX -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - - -#define LLV4_NUM_AXIS 4 - -class LLV4Vector3; -class LLV4Matrix3; -class LLV4Matrix4; - -#endif diff --git a/linden/indra/llmath/llv4matrix3.h b/linden/indra/llmath/llv4matrix3.h deleted file mode 100644 index 0811338..0000000 --- a/linden/indra/llmath/llv4matrix3.h +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATRIX3_H -#define LL_LLV4MATRIX3_H - -#include "llv4math.h" -#include "llv4vector3.h" -#include "m3math.h" // for operator LLMatrix3() - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix3 -{ -public: - union { - F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; - V4F32 mV[LLV4_NUM_AXIS]; - }; - - void lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w); - void multiply(const LLVector3 &a, LLVector3& out) const; - void multiply(const LLVector4 &a, LLV4Vector3& out) const; - void multiply(const LLVector3 &a, LLV4Vector3& out) const; - - const LLV4Matrix3& transpose(); - const LLV4Matrix3& operator=(const LLMatrix3& a); - - operator LLMatrix3() const { return (reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0])))->getMat3(); } - - friend LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - - - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ - __m128 vw = _mm_set1_ps(w); - mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a - mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); - mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ - LLV4Vector3 j; - j.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); - o.setVec(j.mV); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ - o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ - mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); - mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); - mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - - mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); - mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); - mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - - mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); - mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); - mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix3& LLV4Matrix3::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) - _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); - return *this; -#else - F32 temp; - temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp; - temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp; - temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp; -#endif - return *this; -} - -inline const LLV4Matrix3& LLV4Matrix3::operator=(const LLMatrix3& a) -{ - memcpy(mMatrix[VX], a.mMatrix[VX], sizeof(F32) * 3 ); - memcpy(mMatrix[VY], a.mMatrix[VY], sizeof(F32) * 3 ); - memcpy(mMatrix[VZ], a.mMatrix[VZ], sizeof(F32) * 3 ); - return *this; -} - -inline LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b) -{ - return LLVector3( - a.mV[VX] * b.mMatrix[VX][VX] + - a.mV[VY] * b.mMatrix[VY][VX] + - a.mV[VZ] * b.mMatrix[VZ][VX], - - a.mV[VX] * b.mMatrix[VX][VY] + - a.mV[VY] * b.mMatrix[VY][VY] + - a.mV[VZ] * b.mMatrix[VZ][VY], - - a.mV[VX] * b.mMatrix[VX][VZ] + - a.mV[VY] * b.mMatrix[VY][VZ] + - a.mV[VZ] * b.mMatrix[VZ][VZ] ); -} - -#endif diff --git a/linden/indra/llmath/llv4matrix4.h b/linden/indra/llmath/llv4matrix4.h deleted file mode 100644 index 38280a2..0000000 --- a/linden/indra/llmath/llv4matrix4.h +++ /dev/null @@ -1,251 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATRIX4_H -#define LL_LLV4MATRIX4_H - -#include "llv4math.h" -#include "llv4matrix3.h" // just for operator LLV4Matrix3() -#include "llv4vector3.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix4 -{ -public: - union { - F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; - V4F32 mV[LLV4_NUM_AXIS]; - }; - - void lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w); - void multiply(const LLVector3 &a, LLVector3& o) const; - void multiply(const LLVector3 &a, LLV4Vector3& o) const; - - const LLV4Matrix4& transpose(); - const LLV4Matrix4& translate(const LLVector3 &vec); - const LLV4Matrix4& translate(const LLV4Vector3 &vec); - const LLV4Matrix4& operator=(const LLMatrix4& a); - - operator LLMatrix4() const { return *(reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0]))); } - operator LLV4Matrix3() const { return *(reinterpret_cast<const LLV4Matrix3*>(const_cast<const F32*>(&mMatrix[0][0]))); } - - friend LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ - __m128 vw = _mm_set1_ps(w); - mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a - mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); - mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); - mV[VW] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VW], a.mV[VW]), vw), a.mV[VW]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ - LLV4Vector3 j; - j.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); - o.setVec(j.mV); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ - mV[VW] = _mm_add_ps(mV[VW], vec.v); - return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ - mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); - mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); - mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - - mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); - mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); - mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - - mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); - mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); - mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); - - mMatrix[VW][VX] = llv4lerp(a.mMatrix[VW][VX], b.mMatrix[VW][VX], w); - mMatrix[VW][VY] = llv4lerp(a.mMatrix[VW][VY], b.mMatrix[VW][VY], w); - mMatrix[VW][VZ] = llv4lerp(a.mMatrix[VW][VZ], b.mMatrix[VW][VZ], w); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX] + - mMatrix[VW][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY] + - mMatrix[VW][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ] + - mMatrix[VW][VZ]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX] + - mMatrix[VW][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY] + - mMatrix[VW][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ] + - mMatrix[VW][VZ]); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ - mMatrix[3][0] += vec.mV[0]; - mMatrix[3][1] += vec.mV[1]; - mMatrix[3][2] += vec.mV[2]; - return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix4& LLV4Matrix4::operator=(const LLMatrix4& a) -{ - memcpy(mMatrix, a.mMatrix, sizeof(F32) * 16 ); - return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) - _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); -#else - LLV4Matrix4 mat; - mat.mMatrix[0][0] = mMatrix[0][0]; - mat.mMatrix[1][0] = mMatrix[0][1]; - mat.mMatrix[2][0] = mMatrix[0][2]; - mat.mMatrix[3][0] = mMatrix[0][3]; - - mat.mMatrix[0][1] = mMatrix[1][0]; - mat.mMatrix[1][1] = mMatrix[1][1]; - mat.mMatrix[2][1] = mMatrix[1][2]; - mat.mMatrix[3][1] = mMatrix[1][3]; - - mat.mMatrix[0][2] = mMatrix[2][0]; - mat.mMatrix[1][2] = mMatrix[2][1]; - mat.mMatrix[2][2] = mMatrix[2][2]; - mat.mMatrix[3][2] = mMatrix[2][3]; - - mat.mMatrix[0][3] = mMatrix[3][0]; - mat.mMatrix[1][3] = mMatrix[3][1]; - mat.mMatrix[2][3] = mMatrix[3][2]; - mat.mMatrix[3][3] = mMatrix[3][3]; - - *this = mat; -#endif - return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLVector3 &vec) -{ - mMatrix[3][0] += vec.mV[0]; - mMatrix[3][1] += vec.mV[1]; - mMatrix[3][2] += vec.mV[2]; - return (*this); -} - -inline LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b) -{ - return LLVector3(a.mV[VX] * b.mMatrix[VX][VX] + - a.mV[VY] * b.mMatrix[VY][VX] + - a.mV[VZ] * b.mMatrix[VZ][VX] + - b.mMatrix[VW][VX], - - a.mV[VX] * b.mMatrix[VX][VY] + - a.mV[VY] * b.mMatrix[VY][VY] + - a.mV[VZ] * b.mMatrix[VZ][VY] + - b.mMatrix[VW][VY], - - a.mV[VX] * b.mMatrix[VX][VZ] + - a.mV[VY] * b.mMatrix[VY][VZ] + - a.mV[VZ] * b.mMatrix[VZ][VZ] + - b.mMatrix[VW][VZ]); -} - - -#endif diff --git a/linden/indra/llmath/llv4vector3.h b/linden/indra/llmath/llv4vector3.h deleted file mode 100644 index 994e7f5..0000000 --- a/linden/indra/llmath/llv4vector3.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4VECTOR3_H -#define LL_LLV4VECTOR3_H - -#include "llv4math.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Vector3 -{ -public: - union { - F32 mV[LLV4_NUM_AXIS]; - V4F32 v; - }; - - enum { - ALIGNMENT = 16 - }; - - void setVec(F32 x, F32 y, F32 z); - void setVec(F32 a); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -inline void LLV4Vector3::setVec(F32 x, F32 y, F32 z) -{ - mV[VX] = x; - mV[VY] = y; - mV[VZ] = z; -} - -inline void LLV4Vector3::setVec(F32 a) -{ -#if LL_VECTORIZE - v = _mm_set1_ps(a); -#else - setVec(a, a, a); -#endif -} - -#endif diff --git a/linden/indra/llmessage/files.lst b/linden/indra/llmessage/files.lst index 456dffe..00a22b0 100644 --- a/linden/indra/llmessage/files.lst +++ b/linden/indra/llmessage/files.lst @@ -27,10 +27,12 @@ llmessage/llmessagebuilder.cpp llmessage/llmessageconfig.cpp llmessage/llmessagereader.cpp llmessage/llmessagetemplate.cpp +llmessage/llmessagetemplateparser.cpp llmessage/llmessagethrottle.cpp llmessage/llmime.cpp llmessage/llnamevalue.cpp llmessage/llnullcipher.cpp +llmessage/llpacketack.cpp llmessage/llpacketbuffer.cpp llmessage/llpacketring.cpp llmessage/llpartdata.cpp diff --git a/linden/indra/llmessage/llcircuit.h b/linden/indra/llmessage/llcircuit.h index 1eea203..33c0e10 100644 --- a/linden/indra/llmessage/llcircuit.h +++ b/linden/indra/llmessage/llcircuit.h @@ -58,7 +58,11 @@ const F32 LL_AVERAGED_PING_MIN = 100; // msec // IW: increased to avoid ret const U32 INITIAL_PING_VALUE_MSEC = 1000; // initial value for the ping delay, or for ping delay for an unknown circuit const TPACKETID LL_MAX_OUT_PACKET_ID = 0x01000000; -const U8 LL_PACKET_ID_SIZE = 4; + +// 0 - flags +// [1,4] - packetid +// 5 - data offset (after message name) +const U8 LL_PACKET_ID_SIZE = 6; const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100; const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200; diff --git a/linden/indra/llmessage/llhost.cpp b/linden/indra/llmessage/llhost.cpp index 50ef301..d57d52d 100644 --- a/linden/indra/llmessage/llhost.cpp +++ b/linden/indra/llmessage/llhost.cpp @@ -230,9 +230,9 @@ std::ostream& operator<< (std::ostream& os, const LLHost &hh) } -std::istream& operator>> (std::istream& is, LLHost &rh) -{ - is >> rh.mIP; - is >> rh.mPort; - return is; -} +//std::istream& operator>> (std::istream& is, LLHost &rh) +//{ +// is >> rh.mIP; +// is >> rh.mPort; +// return is; +//} diff --git a/linden/indra/llmessage/llhost.h b/linden/indra/llmessage/llhost.h index 5b477e0..1d37639 100644 --- a/linden/indra/llmessage/llhost.h +++ b/linden/indra/llmessage/llhost.h @@ -103,7 +103,11 @@ public: std::string getIPandPort() const; friend std::ostream& operator<< (std::ostream& os, const LLHost &hh); - friend std::istream& operator>> (std::istream& is, LLHost &hh); + + // This operator is not well defined. does it expect a + // "192.168.1.1:80" notation or "int int" format? Phoenix 2007-05-18 + //friend std::istream& operator>> (std::istream& is, LLHost &hh); + friend bool operator==( const LLHost &lhs, const LLHost &rhs ); friend bool operator!=( const LLHost &lhs, const LLHost &rhs ); friend bool operator<(const LLHost &lhs, const LLHost &rhs); diff --git a/linden/indra/llmessage/llhttpclient.cpp b/linden/indra/llmessage/llhttpclient.cpp index a1f8e29..392dfd0 100644 --- a/linden/indra/llmessage/llhttpclient.cpp +++ b/linden/indra/llmessage/llhttpclient.cpp @@ -43,12 +43,9 @@ #include <curl/curl.h> const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f; - static std::string gCABundle; - - LLHTTPClient::Responder::Responder() : mReferenceCount(0) { diff --git a/linden/indra/llmessage/llhttpsender.cpp b/linden/indra/llmessage/llhttpsender.cpp index f96e6d2..3796a52 100644 --- a/linden/indra/llmessage/llhttpsender.cpp +++ b/linden/indra/llmessage/llhttpsender.cpp @@ -40,6 +40,7 @@ namespace { typedef std::map<LLHost, LLHTTPSender*> SenderMap; static SenderMap senderMap; + static LLHTTPSender* defaultSender = new LLHTTPSender(); } //virtual @@ -69,11 +70,10 @@ void LLHTTPSender::setSender(const LLHost& host, LLHTTPSender* sender) //static const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host) { - static LLHTTPSender defaultSender; SenderMap::const_iterator iter = senderMap.find(host); if(iter == senderMap.end()) { - return defaultSender; + return *defaultSender; } return *(iter->second); } @@ -88,3 +88,10 @@ void LLHTTPSender::clearSender(const LLHost& host) senderMap.erase(iter); } } + +//static +void LLHTTPSender::setDefaultSender(LLHTTPSender* sender) +{ + delete defaultSender; + defaultSender = sender; +} diff --git a/linden/indra/llmessage/llhttpsender.h b/linden/indra/llmessage/llhttpsender.h index 650a0e9..5d8b028 100644 --- a/linden/indra/llmessage/llhttpsender.h +++ b/linden/indra/llmessage/llhttpsender.h @@ -53,6 +53,9 @@ class LLHTTPSender /** @brief Clear sender for host. */ static void clearSender(const LLHost& host); + + /** @brief Set default sender, takes ownership of sender. */ + static void setDefaultSender(LLHTTPSender* sender); }; #endif // LL_HTTP_SENDER_H diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp index 8bc347c..fdb4a89 100644 --- a/linden/indra/llmessage/lliosocket.cpp +++ b/linden/indra/llmessage/lliosocket.cpp @@ -421,6 +421,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( PUMP_DEBUG; apr_size_t len; bool done = false; + apr_status_t status = APR_SUCCESS; while(it != end) { @@ -428,9 +429,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( if((*it).isOnChannel(channels.in())) { PUMP_DEBUG; - // *FIX: check return code - sockets will fail (broken, etc.) len = (apr_size_t)segment.size(); - apr_status_t status = apr_socket_send( + status = apr_socket_send( mDestination->getSocket(), (const char*)segment.data(), &len); @@ -438,12 +438,12 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( // completed immediately' error from apr_socket_send. In this // case we break and the data will be sent the next time the chain // is pumped. -#if LL_WINDOWS - if (status == 730035) + if(APR_STATUS_IS_EAGAIN(status)) + { + ll_apr_warn_status(status); break; -#else - (void) status; -#endif + } + mLastWritten = segment.data() + len - 1; PUMP_DEBUG; diff --git a/linden/indra/llmessage/llmessage.vcproj b/linden/indra/llmessage/llmessage.vcproj index d3e0d89..bb404f0 100644 --- a/linden/indra/llmessage/llmessage.vcproj +++ b/linden/indra/llmessage/llmessage.vcproj @@ -240,6 +240,9 @@ RelativePath=".\llmessagetemplate.cpp"> </File> <File + RelativePath=".\llmessagetemplateparser.cpp"> + </File> + <File RelativePath=".\llmessagethrottle.cpp"> </File> <File @@ -252,6 +255,9 @@ RelativePath=".\llnullcipher.cpp"> </File> <File + RelativePath=".\llpacketack.cpp"> + </File> + <File RelativePath=".\llpacketbuffer.cpp"> </File> <File @@ -437,10 +443,10 @@ RelativePath=".\llhttpclient.h"> </File> <File - RelativePath=".\llhttpsender.h"> + RelativePath=".\llhttpnode.h"> </File> <File - RelativePath=".\llhttpnode.h"> + RelativePath=".\llhttpsender.h"> </File> <File RelativePath=".\llinstantmessage.h"> @@ -482,6 +488,9 @@ RelativePath=".\llmessagetemplate.h"> </File> <File + RelativePath=".\llmessagetemplateparser.h"> + </File> + <File RelativePath=".\llmessagethrottle.h"> </File> <File diff --git a/linden/indra/llmessage/llmessage_vc8.vcproj b/linden/indra/llmessage/llmessage_vc8.vcproj index 9692930..eec76e5 100644 --- a/linden/indra/llmessage/llmessage_vc8.vcproj +++ b/linden/indra/llmessage/llmessage_vc8.vcproj @@ -347,6 +347,10 @@ > </File> <File + RelativePath=".\llmessagetemplateparser.cpp" + > + </File> + <File RelativePath=".\llmessagethrottle.cpp" > </File> @@ -363,6 +367,10 @@ > </File> <File + RelativePath=".\llpacketack.cpp" + > + </File> + <File RelativePath=".\llpacketbuffer.cpp" > </File> @@ -677,6 +685,10 @@ > </File> <File + RelativePath=".\llmessagetemplateparser.h" + > + </File> + <File RelativePath=".\llmessagethrottle.h" > </File> diff --git a/linden/indra/llmessage/llmessagebuilder.h b/linden/indra/llmessage/llmessagebuilder.h index 7ae09c5..5c231bd 100644 --- a/linden/indra/llmessage/llmessagebuilder.h +++ b/linden/indra/llmessage/llmessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file llmessagebuilder.h + * @brief Declaration of LLMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGEBUILDER_H #define LL_LLMESSAGEBUILDER_H @@ -20,31 +48,33 @@ public: //CLASS_LOG_TYPE(LLMessageBuilder); virtual ~LLMessageBuilder(); - virtual void newMessage(const char *name) = 0; + virtual void newMessage(const char* name) = 0; virtual void nextBlock(const char* blockname) = 0; virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror /** All add* methods expect pointers to canonical strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size) = 0; + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size) = 0; virtual void addBOOL(const char* varname, BOOL b) = 0; - virtual void addS8(const char *varname, S8 s) = 0; - virtual void addU8(const char *varname, U8 u) = 0; - virtual void addS16(const char *varname, S16 i) = 0; - virtual void addU16(const char *varname, U16 i) = 0; - virtual void addF32(const char *varname, F32 f) = 0; - virtual void addS32(const char *varname, S32 s) = 0; - virtual void addU32(const char *varname, U32 u) = 0; - virtual void addU64(const char *varname, U64 lu) = 0; - virtual void addF64(const char *varname, F64 d) = 0; - virtual void addVector3(const char *varname, const LLVector3& vec) = 0; - virtual void addVector4(const char *varname, const LLVector4& vec) = 0; - virtual void addVector3d(const char *varname, const LLVector3d& vec) = 0; - virtual void addQuat(const char *varname, const LLQuaternion& quat) = 0; - virtual void addUUID(const char *varname, const LLUUID& uuid) = 0; - virtual void addIPAddr(const char *varname, const U32 ip) = 0; - virtual void addIPPort(const char *varname, const U16 port) = 0; + virtual void addS8(const char* varname, S8 s) = 0; + virtual void addU8(const char* varname, U8 u) = 0; + virtual void addS16(const char* varname, S16 i) = 0; + virtual void addU16(const char* varname, U16 i) = 0; + virtual void addF32(const char* varname, F32 f) = 0; + virtual void addS32(const char* varname, S32 s) = 0; + virtual void addU32(const char* varname, U32 u) = 0; + virtual void addU64(const char* varname, U64 lu) = 0; + virtual void addF64(const char* varname, F64 d) = 0; + virtual void addVector3(const char* varname, const LLVector3& vec) = 0; + virtual void addVector4(const char* varname, const LLVector4& vec) = 0; + virtual void addVector3d(const char* varname, const LLVector3d& vec) = 0; + virtual void addQuat(const char* varname, const LLQuaternion& quat) = 0; + virtual void addUUID(const char* varname, const LLUUID& uuid) = 0; + virtual void addIPAddr(const char* varname, const U32 ip) = 0; + virtual void addIPPort(const char* varname, const U16 port) = 0; virtual void addString(const char* varname, const char* s) = 0; virtual void addString(const char* varname, const std::string& s) = 0; @@ -54,7 +84,10 @@ public: virtual BOOL isBuilt() const = 0; virtual BOOL isClear() const = 0; - virtual U32 buildMessage(U8* buffer, U32 buffer_size) = 0; + virtual U32 buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) = 0; /**< Return built message size */ virtual void clearMessage() = 0; diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp index 687896b..8d114a9 100644 --- a/linden/indra/llmessage/llmessageconfig.cpp +++ b/linden/indra/llmessage/llmessageconfig.cpp @@ -32,37 +32,44 @@ #include "llfile.h" #include "lllivefile.h" #include "llsd.h" +#include "llsdutil.h" #include "llsdserialize.h" +#include "message.h" static const char messageConfigFileName[] = "message.xml"; static const F32 messageConfigRefreshRate = 5.0; // seconds + static std::string sServerName = ""; static std::string sConfigDir = ""; +static std::string sServerDefault; +static LLSD sMessages; + + class LLMessageConfigFile : public LLLiveFile { -private: +public: LLMessageConfigFile() - : LLLiveFile(fileName(), messageConfigRefreshRate), - mChanged(false) + : LLLiveFile(fileName(), messageConfigRefreshRate) { } static std::string fileName(); - -public: + + LLSD mMessages; + std::string mServerDefault; + static LLMessageConfigFile& instance(); // return the singleton configuration file -protected: /* virtual */ void loadFile(); void loadServerDefaults(const LLSD& data); void loadMessages(const LLSD& data); + void loadCapBans(const LLSD& blacklist); + void loadMessageBans(const LLSD& blacklist); + bool isCapBanned(const std::string& cap_name) const; public: - bool mChanged; - - std::string mServerDefault; - LLSD mMessages; + LLSD mCapBans; }; std::string LLMessageConfigFile::fileName() @@ -102,26 +109,63 @@ void LLMessageConfigFile::loadFile() } loadServerDefaults(data); loadMessages(data); + loadCapBans(data); + loadMessageBans(data); } void LLMessageConfigFile::loadServerDefaults(const LLSD& data) { mServerDefault = data["serverDefaults"][sServerName].asString(); - lldebugs << "loading default " << mServerDefault << llendl; } void LLMessageConfigFile::loadMessages(const LLSD& data) { - LLPointer<LLSDXMLFormatter> formatter = new LLSDXMLFormatter; - std::ostringstream out; - mMessages = data["messages"]; + +#ifdef DEBUG + std::ostringstream out; + LLSDXMLFormatter *formatter = new LLSDXMLFormatter; formatter->format(mMessages, out); - lldebugs << "loading ... " << out.str() + llinfos << "loading ... " << out.str() << " LLMessageConfigFile::loadMessages loaded " << mMessages.size() << " messages" << llendl; +#endif } +void LLMessageConfigFile::loadCapBans(const LLSD& data) +{ + LLSD bans = data["capBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section" + << llendl; + return; + } + + mCapBans = bans; + + llinfos << "LLMessageConfigFile::loadCapBans: " + << bans.size() << " ban tests" << llendl; +} + +void LLMessageConfigFile::loadMessageBans(const LLSD& data) +{ + LLSD bans = data["messageBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section" + << llendl; + return; + } + + gMessageSystem->setMessageBans(bans["trusted"], bans["untrusted"]); +} + +bool LLMessageConfigFile::isCapBanned(const std::string& cap_name) const +{ + llinfos << "mCapBans is " << LLSDXMLStreamer(mCapBans) << llendl; + return mCapBans[cap_name]; +} //--------------------------------------------------------------- // LLMessageConfig @@ -134,98 +178,77 @@ void LLMessageConfig::initClass(const std::string& server_name, sServerName = server_name; sConfigDir = config_dir; (void) LLMessageConfigFile::instance(); - llinfos << "LLMessageConfig::intiClass config file " + llinfos << "LLMessageConfig::initClass config file " << config_dir << "/" << messageConfigFileName << llendl; } //static -bool LLMessageConfig::isServerDefaultBuilderLLSD() +void LLMessageConfig::useConfig(const LLSD& config) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderLLSD() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "llsd"); -} + LLMessageConfigFile &the_file = LLMessageConfigFile::instance(); + the_file.loadServerDefaults(config); + the_file.loadMessages(config); + the_file.loadCapBans(config); + the_file.loadMessageBans(config); -//static -bool LLMessageConfig::isServerDefaultBuilderTemplate() -{ - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderTemplate() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "template"); } //static -bool LLMessageConfig::isMessageBuiltLLSD(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor() { - if (sServerName.empty()) + LLMessageConfigFile& file = LLMessageConfigFile::instance(); + if (file.mServerDefault == "llsd") { - llerrs << "LLMessageConfig::isMessageBuiltLLSD(name) before" - << " LLMessageConfig::initClass()" << llendl; + return LLSD_FLAVOR; } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (file.mServerDefault == "template") { - return isServerDefaultBuilderLLSD(); + return TEMPLATE_FLAVOR; } - return (config["builder"].asString() == "llsd"); + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageBuiltTemplate(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageBuiltTemplate(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (config["flavor"].asString() == "llsd") { - return isServerDefaultBuilderTemplate(); + return LLSD_FLAVOR; } - return (config["builder"].asString() == "template"); + if (config["flavor"].asString() == "template") + { + return TEMPLATE_FLAVOR; + } + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageTrusted(const std::string& msg_name) +LLMessageConfig::SenderTrust LLMessageConfig::getSenderTrustedness( + const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) + if (config.has("trusted-sender")) { - return false; + return config["trusted-sender"].asBoolean() ? TRUSTED : UNTRUSTED; } - return config["trusted-sender"].asBoolean(); + return NOT_SET; } //static -bool LLMessageConfig::isValidUntrustedMessage(const std::string& msg_name) +bool LLMessageConfig::isValidMessage(const std::string& msg_name) { if (sServerName.empty()) { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; + llerrs << "LLMessageConfig::initClass() not called" << llendl; } LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) - { - return false; - } - return !(config["trusted-sender"].asBoolean()); + return file.mMessages.has(msg_name); +} + +bool LLMessageConfig::isCapBanned(const std::string& cap_name) +{ + return LLMessageConfigFile::instance().isCapBanned(cap_name); } diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h index 1664ce6..ca09c27 100644 --- a/linden/indra/llmessage/llmessageconfig.h +++ b/linden/indra/llmessage/llmessageconfig.h @@ -31,21 +31,24 @@ #include <string> +class LLSD; + class LLMessageConfig { public: + enum Flavor { NO_FLAVOR=0, LLSD_FLAVOR=1, TEMPLATE_FLAVOR=2 }; + enum SenderTrust { NOT_SET=0, UNTRUSTED=1, TRUSTED=2 }; + static void initClass(const std::string& server_name, const std::string& config_dir); - // force loading of config file during startup process - // so it can be used for startup features + static void useConfig(const LLSD& config); - static bool isServerDefaultBuilderLLSD(); - static bool isServerDefaultBuilderTemplate(); + static Flavor getServerDefaultFlavor(); // For individual messages - static bool isMessageBuiltLLSD(const std::string& msg_name); - static bool isMessageBuiltTemplate(const std::string& msg_name); - static bool isMessageTrusted(const std::string& msg_name); - static bool isValidUntrustedMessage(const std::string& msg_name); + static Flavor getMessageFlavor(const std::string& msg_name); + static SenderTrust getSenderTrustedness(const std::string& msg_name); + static bool isValidMessage(const std::string& msg_name); + static bool isCapBanned(const std::string& cap_name); }; #endif // LL_MESSAGECONFIG_H diff --git a/linden/indra/llmessage/llmessagereader.cpp b/linden/indra/llmessage/llmessagereader.cpp index 4824480..db4cbdf 100644 --- a/linden/indra/llmessage/llmessagereader.cpp +++ b/linden/indra/llmessage/llmessagereader.cpp @@ -1,3 +1,31 @@ +/** + * @file llsdmessagereader.cpp + * @brief LLMessageReader class implementation + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "llmessagereader.h" static BOOL sTimeDecodes = FALSE; diff --git a/linden/indra/llmessage/llmessagereader.h b/linden/indra/llmessage/llmessagereader.h index 33ce928..9c1923a 100644 --- a/linden/indra/llmessage/llmessagereader.h +++ b/linden/indra/llmessage/llmessagereader.h @@ -1,3 +1,31 @@ +/** + * @file llmessagereader.h + * @brief Declaration of LLMessageReader class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGEREADER_H #define LL_LLMESSAGEREADER_H @@ -45,6 +73,7 @@ class LLMessageReader virtual void clearMessage() = 0; + /** Returns pointer to canonical (prehashed) string. */ virtual const char* getMessageName() const = 0; virtual S32 getMessageSize() const = 0; diff --git a/linden/indra/llmessage/llmessagetemplate.cpp b/linden/indra/llmessage/llmessagetemplate.cpp index 026843d..daf7f7a 100644 --- a/linden/indra/llmessage/llmessagetemplate.cpp +++ b/linden/indra/llmessage/llmessagetemplate.cpp @@ -1,3 +1,31 @@ +/** + * @file llmessagetemplate.cpp + * @brief Implementation of message template classes. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "llmessagetemplate.h" @@ -94,7 +122,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg) for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin(); iter != msg.mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = *(*iter); s << ci; } @@ -138,7 +166,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg) for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin(); iter != msg.mMemberBlocks.end(); iter++) { - LLMessageBlock* ci = iter->second; + LLMessageBlock* ci = *iter; s << *ci; } diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h index 8847ddc..804c343 100644 --- a/linden/indra/llmessage/llmessagetemplate.h +++ b/linden/indra/llmessage/llmessagetemplate.h @@ -1,3 +1,31 @@ +/** + * @file llmessagetemplate.h + * @brief Declaration of the message template classes. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGETEMPLATE_H #define LL_LLMESSAGETEMPLATE_H @@ -123,7 +151,7 @@ public: mName = name; } - LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) + LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) { mName = gMessageStringTable.getString(name); } @@ -154,14 +182,14 @@ typedef enum e_message_block_type class LLMessageBlock { public: - LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) + LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) { mName = gMessageStringTable.getString(name); } ~LLMessageBlock() { - for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer()); + for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePointer()); } void addVariable(char *name, const EMsgVariableType type, const S32 size) @@ -193,9 +221,15 @@ public: return (mMemberVariables[name])->getSize(); } + const LLMessageVariable* getVariable(char* name) const + { + message_variable_map_t::const_iterator iter = mMemberVariables.find(name); + return iter != mMemberVariables.end()? *iter : NULL; + } + friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg); - typedef std::map<const char *, LLMessageVariable*> message_variable_map_t; + typedef LLDynamicArrayIndexed<LLMessageVariable*, const char *, 8> message_variable_map_t; message_variable_map_t mMemberVariables; char *mName; EMsgBlockType mType; @@ -224,6 +258,13 @@ enum EMsgEncoding ME_ZEROCODED }; +enum EMsgDeprecation +{ + MD_NOTDEPRECATED, + MD_UDPDEPRECATED, + MD_DEPRECATED +}; + class LLMessageTemplate { public: @@ -234,7 +275,8 @@ public: mFrequency(freq), mTrust(MT_NOTRUST), mEncoding(ME_ZEROCODED), - mMessageNumber(message_number), + mDeprecation(MD_NOTDEPRECATED), + mMessageNumber(message_number), mTotalSize(0), mReceiveCount(0), mReceiveBytes(0), @@ -253,8 +295,8 @@ public: ~LLMessageTemplate() { - for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer()); - } + for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePointer()); +} void addBlock(LLMessageBlock *blockp) { @@ -289,7 +331,7 @@ public: mTrust = t; } - EMsgTrust getTrust(void) + EMsgTrust getTrust(void) const { return mTrust; } @@ -299,18 +341,28 @@ public: { mEncoding = e; } - EMsgEncoding getEncoding() + EMsgEncoding getEncoding() const { return mEncoding; } + void setDeprecation(EMsgDeprecation d) + { + mDeprecation = d; + } + + EMsgDeprecation getDeprecation() const + { + return mDeprecation; + } + void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data) { mHandlerFunc = handler_func; mUserData = user_data; } - BOOL callHandlerFunc(LLMessageSystem *msgsystem) + BOOL callHandlerFunc(LLMessageSystem *msgsystem) const { if (mHandlerFunc) { @@ -320,20 +372,27 @@ public: return FALSE; } - bool isBanned(bool trustedSource) + bool isBanned(bool trustedSource) const { return trustedSource ? mBanFromTrusted : mBanFromUntrusted; } friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg); + const LLMessageBlock* getBlock(char* name) const + { + message_block_map_t::const_iterator iter = mMemberBlocks.find(name); + return iter != mMemberBlocks.end()? *iter : NULL; + } + public: - typedef std::map<char*, LLMessageBlock*> message_block_map_t; + typedef LLDynamicArrayIndexed<LLMessageBlock*, char*, 8> message_block_map_t; message_block_map_t mMemberBlocks; char *mName; EMsgFrequency mFrequency; EMsgTrust mTrust; EMsgEncoding mEncoding; + EMsgDeprecation mDeprecation; U32 mMessageNumber; S32 mTotalSize; U32 mReceiveCount; // how many of this template have been received since last reset diff --git a/linden/indra/llmessage/llmessagetemplateparser.cpp b/linden/indra/llmessage/llmessagetemplateparser.cpp new file mode 100644 index 0000000..eb5e87e --- /dev/null +++ b/linden/indra/llmessage/llmessagetemplateparser.cpp @@ -0,0 +1,754 @@ +/** + * @file llmessagetemplateparser.cpp + * @brief LLMessageTemplateParser implementation + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "llmessagetemplateparser.h" +#include <boost/tokenizer.hpp> + + +// What follows is a bunch of C functions to do validation. + +// Lets support a small subset of regular expressions here +// Syntax is a string made up of: +// a - checks against alphanumeric ([A-Za-z0-9]) +// c - checks against character ([A-Za-z]) +// f - checks against first variable character ([A-Za-z_]) +// v - checks against variable ([A-Za-z0-9_]) +// s - checks against sign of integer ([-0-9]) +// d - checks against integer digit ([0-9]) +// * - repeat last check + +// checks 'a' +BOOL b_return_alphanumeric_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'c' +BOOL b_return_character_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'f' +BOOL b_return_first_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 'v' +BOOL b_return_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 's' +BOOL b_return_signed_integer_ok(char c) +{ + if ( ( (c < '0') + ||(c > '9')) + &&(c != '-')) + { + return FALSE; + } + return TRUE; +} + +// checks 'd' +BOOL b_return_integer_ok(char c) +{ + if ( (c < '0') + ||(c > '9')) + { + return FALSE; + } + return TRUE; +} + +BOOL (*gParseCheckCharacters[])(char c) = +{ + b_return_alphanumeric_ok, + b_return_character_ok, + b_return_first_variable_ok, + b_return_variable_ok, + b_return_signed_integer_ok, + b_return_integer_ok +}; + +S32 get_checker_number(char checker) +{ + switch(checker) + { + case 'a': + return 0; + case 'c': + return 1; + case 'f': + return 2; + case 'v': + return 3; + case 's': + return 4; + case 'd': + return 5; + case '*': + return 9999; + default: + return -1; + } +} + +// check token based on passed simplified regular expression +BOOL b_check_token(const char *token, char *regexp) +{ + S32 tptr, rptr = 0; + S32 current_checker, next_checker = 0; + + current_checker = get_checker_number(regexp[rptr++]); + + if (current_checker == -1) + { + llerrs << "Invalid regular expression value!" << llendl; + return FALSE; + } + + if (current_checker == 9999) + { + llerrs << "Regular expression can't start with *!" << llendl; + return FALSE; + } + + for (tptr = 0; token[tptr]; tptr++) + { + if (current_checker == -1) + { + llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; + return FALSE; + } + + if (!gParseCheckCharacters[current_checker](token[tptr])) + { + return FALSE; + } + if (next_checker != 9999) + { + next_checker = get_checker_number(regexp[rptr++]); + if (next_checker != 9999) + { + current_checker = next_checker; + } + } + } + return TRUE; +} + +// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number +BOOL b_variable_ok(const char *token) +{ + if (!b_check_token(token, "fv*")) + { + llwarns << "Token '" << token << "' isn't a variable!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 and may be preceded by a '-' +BOOL b_integer_ok(const char *token) +{ + if (!b_check_token(token, "sd*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 +BOOL b_positive_integer_ok(const char *token) +{ + if (!b_check_token(token, "d*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + + +// Done with C functions, here's the tokenizer. + +typedef boost::tokenizer< boost::char_separator<char> > tokenizer; + +LLTemplateTokenizer::LLTemplateTokenizer(const std::string & contents) : mStarted(false), mTokens() +{ + boost::char_separator<char> newline("\r\n", "", boost::keep_empty_tokens); + boost::char_separator<char> spaces(" \t"); + U32 line_counter = 1; + + tokenizer line_tokens(contents, newline); + for(tokenizer::iterator line_iter = line_tokens.begin(); + line_iter != line_tokens.end(); + ++line_iter, ++line_counter) + { + tokenizer word_tokens(*line_iter, spaces); + for(tokenizer::iterator word_iter = word_tokens.begin(); + word_iter != word_tokens.end(); + ++word_iter) + { + if((*word_iter)[0] == '/') + { + break; // skip to end of line on comments + } + positioned_token pt;// = new positioned_token(); + pt.str = std::string(*word_iter); + pt.line = line_counter; + mTokens.push_back(pt); + } + } + mCurrent = mTokens.begin(); +} +void LLTemplateTokenizer::inc() +{ + if(atEOF()) + { + error("trying to increment token of EOF"); + } + else if(mStarted) + { + ++mCurrent; + } + else + { + mStarted = true; + mCurrent = mTokens.begin(); + } +} +void LLTemplateTokenizer::dec() +{ + if(mCurrent == mTokens.begin()) + { + if(mStarted) + { + mStarted = false; + } + else + { + error("trying to decrement past beginning of file"); + } + } + else + { + mCurrent--; + } +} + +std::string LLTemplateTokenizer::get() const +{ + if(atEOF()) + { + error("trying to get EOF"); + } + return mCurrent->str; +} + +U32 LLTemplateTokenizer::line() const +{ + if(atEOF()) + { + return 0; + } + return mCurrent->line; +} + +bool LLTemplateTokenizer::atEOF() const +{ + return mCurrent == mTokens.end(); +} + +std::string LLTemplateTokenizer::next() +{ + inc(); + return get(); +} + +bool LLTemplateTokenizer::want(const std::string & token) +{ + if(atEOF()) return false; + inc(); + if(atEOF()) return false; + if(get() != token) + { + dec(); // back up a step + return false; + } + return true; +} + +bool LLTemplateTokenizer::wantEOF() +{ + // see if the next token is EOF + if(atEOF()) return true; + inc(); + if(!atEOF()) + { + dec(); // back up a step + return false; + } + return true; +} + +void LLTemplateTokenizer::error(std::string message) const +{ + if(atEOF()) + { + llerrs << "Unexpected end of file: " << message << llendl; + } + else + { + llerrs << "Problem parsing message template at line " + << line() << ", with token '" << get() << "' : " + << message << llendl; + } +} + + +// Done with tokenizer, next is the parser. + +LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens): + mVersion(0.f), + mMessages() +{ + // the version number should be the first thing in the file + if (tokens.want("version")) + { + // version number + std::string vers_string = tokens.next(); + mVersion = (F32)atof(vers_string.c_str()); + + llinfos << "### Message template version " << mVersion << " ###" << llendl; + } + else + { + llerrs << "Version must be first in the message template, found " + << tokens.next() << llendl; + } + + while(LLMessageTemplate * templatep = parseMessage(tokens)) + { + if (templatep->getDeprecation() != MD_DEPRECATED) + { + mMessages.push_back(templatep); + } + } + + if(!tokens.wantEOF()) + { + llerrs << "Expected end of template or a message, instead found: " + << tokens.next() << " at " << tokens.line() << llendl; + } +} + +F32 LLTemplateParser::getVersion() const +{ + return mVersion; +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesBegin() const +{ + return mMessages.begin(); +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesEnd() const +{ + return mMessages.end(); +} + + +// static +LLMessageTemplate * LLTemplateParser::parseMessage(LLTemplateTokenizer & tokens) +{ + LLMessageTemplate *templatep = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string template_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(template_name.c_str())) + { + llerrs << "Not legit variable name: " << template_name << " at " << tokens.line() << llendl; + } + + // ok, now get Frequency ("High", "Medium", or "Low") + EMsgFrequency frequency = MFT_LOW; + std::string freq_string = tokens.next(); + if (freq_string == "High") + { + frequency = MFT_HIGH; + } + else if (freq_string == "Medium") + { + frequency = MFT_MEDIUM; + } + else if (freq_string == "Low" || freq_string == "Fixed") + { + frequency = MFT_LOW; + } + else + { + llerrs << "Expected frequency, got " << freq_string << " at " << tokens.line() << llendl; + } + + // TODO more explicit checking here pls + U32 message_number = strtoul(tokens.next().c_str(),NULL,0); + + switch (frequency) { + case MFT_HIGH: + break; + case MFT_MEDIUM: + message_number = (255 << 8) | message_number; + break; + case MFT_LOW: + message_number = (255 << 24) | (255 << 16) | message_number; + break; + default: + llerrs << "Unknown frequency enum: " << frequency << llendl; + } + + templatep = new LLMessageTemplate( + template_name.c_str(), + message_number, + frequency); + + // Now get trust ("Trusted", "NotTrusted") + std::string trust = tokens.next(); + if (trust == "Trusted") + { + templatep->setTrust(MT_TRUST); + } + else if (trust == "NotTrusted") + { + templatep->setTrust(MT_NOTRUST); + } + else + { + llerrs << "Bad trust " << trust << " at " << tokens.line() << llendl; + } + + // get encoding + std::string encoding = tokens.next(); + if(encoding == "Unencoded") + { + templatep->setEncoding(ME_UNENCODED); + } + else if(encoding == "Zerocoded") + { + templatep->setEncoding(ME_ZEROCODED); + } + else + { + llerrs << "Bad encoding " << encoding << " at " << tokens.line() << llendl; + } + + // get deprecation + if(tokens.want("Deprecated")) + { + templatep->setDeprecation(MD_DEPRECATED); + } + else if (tokens.want("UDPDeprecated")) + { + templatep->setDeprecation(MD_UDPDEPRECATED); + } + else if (tokens.want("NotDeprecated")) + { + // this is the default value, but it can't hurt to set it twice + templatep->setDeprecation(MD_NOTDEPRECATED); + } + else { + // It's probably a brace, let's just start block processing + } + + while(LLMessageBlock * blockp = parseBlock(tokens)) + { + templatep->addBlock(blockp); + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for message " << template_name + << " at " << tokens.line() << llendl; + } + return templatep; +} + +// static +LLMessageBlock * LLTemplateParser::parseBlock(LLTemplateTokenizer & tokens) +{ + LLMessageBlock * blockp = NULL; + + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string block_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(block_name.c_str())) + { + llerrs << "not a legal block name: " << block_name + << " at " << tokens.line() << llendl; + } + + // now, block type ("Single", "Multiple", or "Variable") + std::string block_type = tokens.next(); + // which one is it? + if (block_type == "Single") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_SINGLE); + } + else if (block_type == "Multiple") + { + // need to get the number of repeats + std::string repeats = tokens.next(); + + // is it a legal integer + if (!b_positive_integer_ok(repeats.c_str())) + { + llerrs << "not a legal integer for block multiple count: " + << repeats << " at " << tokens.line() << llendl; + } + + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), + MBT_MULTIPLE, + atoi(repeats.c_str())); + } + else if (block_type == "Variable") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_VARIABLE); + } + else + { + llerrs << "bad block type: " << block_type + << " at " << tokens.line() << llendl; + } + + + while(LLMessageVariable * varp = parseVariable(tokens)) + { + blockp->addVariable(varp->getName(), + varp->getType(), + varp->getSize()); + delete varp; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for block " << block_name + << " at " << tokens.line() << llendl; + } + return blockp; + +} + +// static +LLMessageVariable * LLTemplateParser::parseVariable(LLTemplateTokenizer & tokens) +{ + LLMessageVariable * varp = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + std::string var_name = tokens.next(); + + if (!b_variable_ok(var_name.c_str())) + { + llerrs << "Not a legit variable name: " << var_name + << " at " << tokens.line() << llendl; + } + + std::string var_type = tokens.next(); + + if (var_type == "U8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U8, 1); + } + else if (var_type == "U16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U16, 2); + } + else if (var_type == "U32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U32, 4); + } + else if (var_type == "U64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U64, 8); + } + else if (var_type == "S8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S8, 1); + } + else if (var_type == "S16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S16, 2); + } + else if (var_type == "S32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S32, 4); + } + else if (var_type == "S64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S64, 8); + } + else if (var_type == "F32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F32, 4); + } + else if (var_type == "F64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F64, 8); + } + else if (var_type == "LLVector3") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3, 12); + } + else if (var_type == "LLVector3d") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3d, 24); + } + else if (var_type == "LLVector4") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector4, 16); + } + else if (var_type == "LLQuaternion") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLQuaternion, 12); + } + else if (var_type == "LLUUID") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLUUID, 16); + } + else if (var_type == "BOOL") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_BOOL, 1); + } + else if (var_type == "IPADDR") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_ADDR, 4); + } + else if (var_type == "IPPORT") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_PORT, 2); + } + else if (var_type == "Fixed" || var_type == "Variable") + { + std::string variable_size = tokens.next(); + + if (!b_positive_integer_ok(variable_size.c_str())) + { + llerrs << "not a legal integer variable size: " << variable_size + << " at " << tokens.line() << llendl; + } + + EMsgVariableType type_enum; + if(var_type == "Variable") + { + type_enum = MVT_VARIABLE; + } + else if(var_type == "Fixed") + { + type_enum = MVT_FIXED; + } + else + { + type_enum = MVT_FIXED; // removes a warning + llerrs << "bad variable type: " << var_type + << " at " << tokens.line() << llendl; + } + + varp = new LLMessageVariable( + var_name.c_str(), + type_enum, + atoi(variable_size.c_str())); + } + else + { + llerrs << "bad variable type:" << var_type + << " at " << tokens.line() << llendl; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for variable " << var_name + << " at " << tokens.line() << llendl; + } + return varp; +} diff --git a/linden/indra/llmessage/llmessagetemplateparser.h b/linden/indra/llmessage/llmessagetemplateparser.h new file mode 100644 index 0000000..f56dfec --- /dev/null +++ b/linden/indra/llmessage/llmessagetemplateparser.h @@ -0,0 +1,82 @@ +/** + * @file llmessagetemplateparser.h + * @brief Classes to parse message template. + * + * Copyright (c) 2000-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#ifndef LL_MESSAGETEMPLATEPARSER_H +#define LL_MESSAGETEMPLATEPARSER_H + +#include <string> +#include "llmessagetemplate.h" + +class LLTemplateTokenizer +{ +public: + LLTemplateTokenizer(const std::string & contents); + + U32 line() const; + bool atEOF() const; + std::string next(); + + bool want(const std::string & token); + bool wantEOF(); +private: + void inc(); + void dec(); + std::string get() const; + void error(std::string message = "generic") const; + + struct positioned_token + { + std::string str; + U32 line; + }; + + bool mStarted; + std::list<positioned_token> mTokens; + std::list<positioned_token>::const_iterator mCurrent; +}; + +class LLTemplateParser +{ +public: + typedef std::list<LLMessageTemplate *>::const_iterator message_iterator; + + static LLMessageTemplate * parseMessage(LLTemplateTokenizer & tokens); + static LLMessageBlock * parseBlock(LLTemplateTokenizer & tokens); + static LLMessageVariable * parseVariable(LLTemplateTokenizer & tokens); + + LLTemplateParser(LLTemplateTokenizer & tokens); + message_iterator getMessagesBegin() const; + message_iterator getMessagesEnd() const; + F32 getVersion() const; + +private: + F32 mVersion; + std::list<LLMessageTemplate *> mMessages; +}; + +#endif diff --git a/linden/indra/llmessage/llmsgvariabletype.h b/linden/indra/llmessage/llmsgvariabletype.h index 360d949..59fba7c 100644 --- a/linden/indra/llmessage/llmsgvariabletype.h +++ b/linden/indra/llmessage/llmsgvariabletype.h @@ -1,3 +1,31 @@ +/** + * @file llmsgvariabletype.h + * @brief Declaration of the EMsgVariableType enumeration. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMSGVARIABLETYPE_H #define LL_LLMSGVARIABLETYPE_H diff --git a/linden/indra/llmessage/llpacketack.cpp b/linden/indra/llmessage/llpacketack.cpp new file mode 100644 index 0000000..27d9916 --- /dev/null +++ b/linden/indra/llmessage/llpacketack.cpp @@ -0,0 +1,84 @@ +/** + * @file llpacketack.cpp + * @author Phoenix + * @date 2007-05-09 + * @brief Implementation of the LLReliablePacket. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "linden_common.h" +#include "llpacketack.h" + +#if !LL_WINDOWS +#include <netinet/in.h> +#else +#include "winsock2.h" +#endif + +#include "message.h" + +LLReliablePacket::LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params) : + mBuffer(NULL), + mBufferLength(0) +{ + if (params) + { + mHost = params->mHost; + mRetries = params->mRetries; + mPingBasedRetry = params->mPingBasedRetry; + mTimeout = params->mTimeout; + mCallback = params->mCallback; + mCallbackData = params->mCallbackData; + mMessageName = params->mMessageName; + } + else + { + mRetries = 0; + mPingBasedRetry = TRUE; + mTimeout = 0.f; + mCallback = NULL; + mCallbackData = NULL; + mMessageName = NULL; + } + + mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; + mPacketID = ntohl(*((U32*)(&buf_ptr[PHL_PACKET_ID]))); + + mSocket = socket; + if (mRetries) + { + mBuffer = new U8[buf_len]; + if (mBuffer != NULL) + { + memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ + mBufferLength = buf_len; + } + + } +} diff --git a/linden/indra/llmessage/llpacketack.h b/linden/indra/llmessage/llpacketack.h index c86fb0f..33fb5a0 100644 --- a/linden/indra/llmessage/llpacketack.h +++ b/linden/indra/llmessage/llpacketack.h @@ -29,37 +29,18 @@ #ifndef LL_LLPACKETACK_H #define LL_LLPACKETACK_H -#include <cstring> -#include <stdio.h> - -#include "llerror.h" -#include "lltimer.h" #include "llhost.h" -//class LLPacketAck -//{ -//public: -// LLHost mHost; -// TPACKETID mPacketID; -//public: -// LLPacketAck(const LLHost &host, TPACKETID packet_id) -// { -// mHost = host; -// mPacketID = packet_id; -// }; -// ~LLPacketAck(){}; -//}; - class LLReliablePacketParams { public: - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void **,S32); + void** mCallbackData; + char* mMessageName; public: LLReliablePacketParams() @@ -80,9 +61,13 @@ public: mMessageName = NULL; }; - void set ( const LLHost &host, S32 retries, BOOL ping_based_retry, - F32 timeout, - void (*callback)(void **,S32), void **callback_data, char *name ) + void set( + const LLHost& host, + S32 retries, + BOOL ping_based_retry, + F32 timeout, + void (*callback)(void**,S32), + void** callback_data, char* name) { mHost = host; mRetries = retries; @@ -97,53 +82,11 @@ public: class LLReliablePacket { public: - LLReliablePacket(S32 socket, U8 *buf_ptr, S32 buf_len, LLReliablePacketParams *params) : - mBuffer(NULL), - mBufferLength(0) - { - if (params) - { - mHost = params->mHost; - mRetries = params->mRetries; - mPingBasedRetry = params->mPingBasedRetry; - mTimeout = params->mTimeout; - mCallback = params->mCallback; - mCallbackData = params->mCallbackData; - mMessageName = params->mMessageName; - } - else - { - mRetries = 0; - mPingBasedRetry = TRUE; - mTimeout = 0.f; - mCallback = NULL; - mCallbackData = NULL; - mMessageName = NULL; - } - - mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; - mPacketID = buf_ptr[1] + ((buf_ptr[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mPacketID *= 256; - mPacketID += buf_ptr[2]; - mPacketID *= 256; - mPacketID += buf_ptr[3]; - } - - mSocket = socket; - if (mRetries) - { - mBuffer = new U8[buf_len]; - if (mBuffer != NULL) - { - memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ - mBufferLength = buf_len; - } - - } - }; - + LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params); ~LLReliablePacket() { mCallback = NULL; @@ -153,22 +96,21 @@ public: friend class LLCircuitData; protected: - S32 mSocket; - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; - - U8 *mBuffer; - S32 mBufferLength; + S32 mSocket; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void**,S32); + void** mCallbackData; + char* mMessageName; + + U8* mBuffer; + S32 mBufferLength; - TPACKETID mPacketID; + TPACKETID mPacketID; - F64 mExpirationTime; - + F64 mExpirationTime; }; #endif diff --git a/linden/indra/llmessage/llsdmessagebuilder.cpp b/linden/indra/llmessage/llsdmessagebuilder.cpp index b7deb48..d3dcd5b 100755 --- a/linden/indra/llmessage/llsdmessagebuilder.cpp +++ b/linden/indra/llmessage/llsdmessagebuilder.cpp @@ -1,3 +1,31 @@ +/** + * @file llsdmessagebuilder.cpp + * @brief LLSDMessageBuilder class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "llsdmessagebuilder.h" @@ -28,13 +56,13 @@ LLSDMessageBuilder::~LLSDMessageBuilder() // virtual -void LLSDMessageBuilder::newMessage(const char *name) +void LLSDMessageBuilder::newMessage(const char* name) { mbSBuilt = FALSE; mbSClear = FALSE; mCurrentMessage = LLSD::emptyMap(); - mCurrentMessageName = (char *)name; + mCurrentMessageName = (char*)name; } // virtual @@ -74,8 +102,10 @@ BOOL LLSDMessageBuilder::removeLastBlock() return FALSE; } -void LLSDMessageBuilder::addBinaryData(const char *varname, - const void *data, S32 size) +void LLSDMessageBuilder::addBinaryData( + const char* varname, + const void* data, + S32 size) { std::vector<U8> v; v.resize(size); @@ -83,57 +113,57 @@ void LLSDMessageBuilder::addBinaryData(const char *varname, (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS8(const char *varname, S8 v) +void LLSDMessageBuilder::addS8(const char* varname, S8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU8(const char *varname, U8 v) +void LLSDMessageBuilder::addU8(const char* varname, U8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS16(const char *varname, S16 v) +void LLSDMessageBuilder::addS16(const char* varname, S16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU16(const char *varname, U16 v) +void LLSDMessageBuilder::addU16(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addF32(const char *varname, F32 v) +void LLSDMessageBuilder::addF32(const char* varname, F32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS32(const char *varname, S32 v) +void LLSDMessageBuilder::addS32(const char* varname, S32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU32(const char *varname, U32 v) +void LLSDMessageBuilder::addU32(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_U32(v); } -void LLSDMessageBuilder::addU64(const char *varname, U64 v) +void LLSDMessageBuilder::addU64(const char* varname, U64 v) { (*mCurrentBlock)[varname] = ll_sd_from_U64(v); } -void LLSDMessageBuilder::addF64(const char *varname, F64 v) +void LLSDMessageBuilder::addF64(const char* varname, F64 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addIPAddr(const char *varname, U32 v) +void LLSDMessageBuilder::addIPAddr(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v); } -void LLSDMessageBuilder::addIPPort(const char *varname, U16 v) +void LLSDMessageBuilder::addIPPort(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } @@ -159,27 +189,27 @@ void LLSDMessageBuilder::addString(const char* varname, const std::string& v) (*mCurrentBlock)[varname] = ""; } -void LLSDMessageBuilder::addVector3(const char *varname, const LLVector3& v) +void LLSDMessageBuilder::addVector3(const char* varname, const LLVector3& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3(v); } -void LLSDMessageBuilder::addVector4(const char *varname, const LLVector4& v) +void LLSDMessageBuilder::addVector4(const char* varname, const LLVector4& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector4(v); } -void LLSDMessageBuilder::addVector3d(const char *varname, const LLVector3d& v) +void LLSDMessageBuilder::addVector3d(const char* varname, const LLVector3d& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v); } -void LLSDMessageBuilder::addQuat(const char *varname, const LLQuaternion& v) +void LLSDMessageBuilder::addQuat(const char* varname, const LLQuaternion& v) { (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v); } -void LLSDMessageBuilder::addUUID(const char *varname, const LLUUID& v) +void LLSDMessageBuilder::addUUID(const char* varname, const LLUUID& v) { (*mCurrentBlock)[varname] = v; } @@ -193,9 +223,7 @@ BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } -// make sure that all the desired data is in place and then copy the data -// into MAX_BUFFER_SIZEd buffer -U32 LLSDMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +U32 LLSDMessageBuilder::buildMessage(U8*, U32, U8) { return 0; } @@ -205,7 +233,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) // copy the blocks // counting variables used to encode multiple block info S32 block_count = 0; - char *block_name = NULL; + char* block_name = NULL; // loop through msg blocks to loop through variables, totalling up size // data and filling the new (send) message @@ -222,7 +250,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) if (block_count == 0) { block_count = mbci->mBlockNumber; - block_name = (char *)mbci->mName; + block_name = (char*)mbci->mName; } // counting down mutliple blocks @@ -248,7 +276,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg) { mCurrentMessage = msg; - llinfos << LLSDXMLStreamer(mCurrentMessage) << llendl; + lldebugs << LLSDXMLStreamer(mCurrentMessage) << llendl; } const LLSD& LLSDMessageBuilder::getMessage() const diff --git a/linden/indra/llmessage/llsdmessagebuilder.h b/linden/indra/llmessage/llsdmessagebuilder.h index f04194d..8ea7763 100755 --- a/linden/indra/llmessage/llsdmessagebuilder.h +++ b/linden/indra/llmessage/llsdmessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file llsdmessagebuilder.h + * @brief Declaration of LLSDMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLSDMESSAGEBUILDER_H #define LL_LLSDMESSAGEBUILDER_H @@ -19,31 +47,33 @@ public: LLSDMessageBuilder(); virtual ~LLSDMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... /** All add* methods expect pointers to canonical varname strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size); + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -52,8 +82,8 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); - /**< Return built message size */ + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); + /**< Null implementation which returns 0. */ virtual void clearMessage(); diff --git a/linden/indra/llmessage/llsdmessagereader.cpp b/linden/indra/llmessage/llsdmessagereader.cpp index 6312bee..6742edb 100755 --- a/linden/indra/llmessage/llsdmessagereader.cpp +++ b/linden/indra/llmessage/llsdmessagereader.cpp @@ -1,7 +1,38 @@ +/** + * @file llsdmessagereader.cpp + * @brief LLSDMessageReader class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "linden_common.h" + #include "llsdmessagereader.h" -#include "llsdutil.h" + #include "llmessagebuilder.h" #include "llsdmessagebuilder.h" +#include "llsdutil.h" LLSDMessageReader::LLSDMessageReader() { @@ -15,11 +46,30 @@ LLSDMessageReader::~LLSDMessageReader() LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum) { - if(input[block].isArray()) + // babbage: log error to llerrs if variable not found to mimic + // LLTemplateMessageReader::getData behaviour + if(NULL == block) + { + llerrs << "NULL block name" << llendl; + return LLSD(); + } + if(NULL == var) + { + llerrs << "NULL var name" << llendl; + return LLSD(); + } + if(! input[block].isArray()) { - return input[block][blocknum][var]; + llerrs << "block " << block << " not found" << llendl; + return LLSD(); } - return LLSD(); + + LLSD result = input[block][blocknum][var]; + if(result.isUndefined()) + { + llerrs << "var " << var << " not found" << llendl; + } + return result; } //virtual @@ -167,8 +217,12 @@ void LLSDMessageReader::getIPPort(const char *block, const char *var, void LLSDMessageReader::getString(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + return; + } std::string data = getLLSD(mMessage, block, var, blocknum); - S32 data_size = data.size(); if (data_size >= buffer_size) { @@ -241,7 +295,7 @@ void LLSDMessageReader::clearMessage() //virtual const char* LLSDMessageReader::getMessageName() const { - return mMessageName.c_str(); + return mMessageName; } // virtual @@ -256,7 +310,7 @@ void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const builder.copyFromLLSD(mMessage); } -void LLSDMessageReader::setMessage(const std::string& name, const LLSD& message) +void LLSDMessageReader::setMessage(const char* name, const LLSD& message) { mMessageName = name; // TODO: Validate diff --git a/linden/indra/llmessage/llsdmessagereader.h b/linden/indra/llmessage/llsdmessagereader.h index 5785194..d6d9f3d 100755 --- a/linden/indra/llmessage/llsdmessagereader.h +++ b/linden/indra/llmessage/llsdmessagereader.h @@ -69,10 +69,11 @@ public: virtual void copyToBuilder(LLMessageBuilder&) const; - void setMessage(const std::string& name, const LLSD& msg); + /** Expects a pointer to a canonical name string */ + void setMessage(const char* name, const LLSD& msg); private: - std::string mMessageName; + const char* mMessageName; // Canonical (prehashed) string. LLSD mMessage; }; diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.cpp b/linden/indra/llmessage/lltemplatemessagebuilder.cpp index 806f034..9473343 100644 --- a/linden/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/linden/indra/llmessage/lltemplatemessagebuilder.cpp @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagebuilder.cpp + * @brief LLTemplateMessageBuilder class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "lltemplatemessagebuilder.h" @@ -41,28 +69,30 @@ void LLTemplateMessageBuilder::newMessage(const char *name) delete mCurrentSMessageData; mCurrentSMessageData = NULL; - char *namep = (char *)name; - + char* namep = (char*)name; if (mMessageTemplates.count(namep) > 0) { mCurrentSMessageTemplate = mMessageTemplates[namep]; - if (mCurrentSMessageData) - { - delete mCurrentSMessageData; - } mCurrentSMessageData = new LLMsgData(namep); mCurrentSMessageName = namep; mCurrentSDataBlock = NULL; mCurrentSBlockName = NULL; // add at one of each block - LLMessageTemplate* msg_template = mMessageTemplates[namep]; - for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin(); - iter != msg_template->mMemberBlocks.end(); iter++) + const LLMessageTemplate* msg_template = mMessageTemplates[namep]; + + if (msg_template->getDeprecation() != MD_NOTDEPRECATED) { - LLMessageBlock* ci = iter->second; - LLMsgBlkData *tblockp; - tblockp = new LLMsgBlkData(ci->mName, 0); + llwarns << "Sending deprecated message " << namep << llendl; + } + + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = msg_template->mMemberBlocks.begin(); + iter != msg_template->mMemberBlocks.end(); + ++iter) + { + LLMessageBlock* ci = *iter; + LLMsgBlkData* tblockp = new LLMsgBlkData(ci->mName, 0); mCurrentSMessageData->addBlock(tblockp); } } @@ -102,16 +132,14 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) } // now, does this block exist? - LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep); - if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end()) + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); + if (!template_data) { llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep << " not a block in " << mCurrentSMessageTemplate->mName << llendl; return; } - LLMessageBlock* template_data = temp_iter->second; - // ok, have we already set this block? LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep]; if (block_data->mBlockNumber == 0) @@ -122,10 +150,10 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSBlockName = bnamep; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -181,12 +209,12 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(), end = template_data->mMemberVariables.end(); iter != end; iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -211,12 +239,12 @@ BOOL LLTemplateMessageBuilder::removeLastBlock() // Decrement the sent total by the size of the // data in the message block that we're currently building. - LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName); - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSendTotal -= ci.getSize(); } @@ -276,7 +304,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data || !var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -336,7 +364,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -484,7 +512,7 @@ static S32 zero_code(U8 **data, U32 *data_size) // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE ; ++ii) { count--; *outptr++ = *inptr++; @@ -571,7 +599,7 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const char* bnamep = (char*)blockname; S32 max; - LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[bnamep]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); switch(template_data->mType) { @@ -593,138 +621,59 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } - -// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer -U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* template_data, LLMsgData* message_data) { - // basic algorithm is to loop through the various pieces, building - // size and offset info if we encounter a -1 for mSize at any - // point that variable wasn't given data - - // do we have a current message? - if (!mCurrentSMessageTemplate) - { - llerrs << "newMessage not called prior to buildMessage" << llendl; - return 0; - } - - // zero out some useful values - - // leave room for circuit counter - U32 result = LL_PACKET_ID_SIZE; - - // encode message number and adjust total_offset - if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) - { -// old, endian-dependant way -// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); - -// new, independant way - buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) - { - U8 temp = 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - temp = mCurrentSMessageTemplate->mMessageNumber & 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) - { - U8 temp = 255; - U16 message_num; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; - - // convert to network byte order - message_num = htons(message_num); - memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ - result += sizeof(U16); - } - else - { - llerrs << "unexpected message frequency in buildMessage" << llendl; - return 0; + S32 result = 0; + LLMsgData::msg_blk_data_map_t::const_iterator block_iter = message_data->mMemberBlocks.find(template_data->mName); + const LLMsgBlkData* mbci = block_iter->second; + + // ok, if this is the first block of a repeating pack, set + // block_count and, if it's type MBT_VARIABLE encode a byte + // for how many there are + S32 block_count = mbci->mBlockNumber; + if (template_data->mType == MBT_VARIABLE) + { + // remember that mBlockNumber is a S32 + U8 temp_block_number = (U8)mbci->mBlockNumber; + if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) + { + memcpy(&buffer[result], &temp_block_number, sizeof(U8)); + result += sizeof(U8); + } + else + { + // Just reporting error is likely not enough. Need + // to check how to abort or error out gracefully + // from this function. XXXTBD + llerrs << "buildBlock failed. Message excedding " + << "sendBuffersize." << llendl; + } } - - // counting variables used to encode multiple block info - S32 block_count = 0; - U8 temp_block_number; - - // loop through msg blocks to loop through variables, - // totalling up size data and copying into buffer - for (LLMsgData::msg_blk_data_map_t::iterator - iter = mCurrentSMessageData->mMemberBlocks.begin(), - end = mCurrentSMessageData->mMemberBlocks.end(); - iter != end; iter++) + else if (template_data->mType == MBT_MULTIPLE) { - LLMsgBlkData* mbci = iter->second; - // do we need to encode a block code? - if (block_count == 0) + if (block_count != template_data->mNumber) { - block_count = mbci->mBlockNumber; - - LLMessageBlock* template_data = - mCurrentSMessageTemplate->mMemberBlocks[mbci->mName]; - - // ok, if this is the first block of a repeating pack, set - // block_count and, if it's type MBT_VARIABLE encode a byte - // for how many there are - if (template_data->mType == MBT_VARIABLE) - { - // remember that mBlockNumber is a S32 - temp_block_number = (U8)mbci->mBlockNumber; - if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) - { - memcpy(&buffer[result], &temp_block_number, sizeof(U8)); - result += sizeof(U8); - } - else - { - // Just reporting error is likely not enough. Need - // to check how to abort or error out gracefully - // from this function. XXXTBD - llerrs << "buildMessage failed. Message excedding " - << "sendBuffersize." << llendl; - } - } - else if (template_data->mType == MBT_MULTIPLE) - { - if (block_count != template_data->mNumber) - { - // nope! need to fill it in all the way! - llerrs << "Block " << mbci->mName - << " is type MBT_MULTIPLE but only has data for " - << block_count << " out of its " - << template_data->mNumber << " blocks" << llendl; - } - } + // nope! need to fill it in all the way! + llerrs << "Block " << mbci->mName + << " is type MBT_MULTIPLE but only has data for " + << block_count << " out of its " + << template_data->mNumber << " blocks" << llendl; } + } - // counting down multiple blocks - block_count--; - + while(block_count > 0) + { // now loop through the variables - for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin(); + for (LLMsgBlkData::msg_var_data_map_t::const_iterator iter = mbci->mMemberVarData.begin(); iter != mbci->mMemberVarData.end(); iter++) { - LLMsgVarData& mvci = *iter; + const LLMsgVarData& mvci = *iter; if (mvci.getSize() == -1) { // oops, this variable wasn't ever set! llerrs << "The variable " << mvci.getName() << " in block " << mbci->mName << " of message " - << mCurrentSMessageData->mName + << template_data->mName << " wasn't set prior to buildMessage call" << llendl; } else @@ -774,7 +723,7 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) // Just reporting error is likely not // enough. Need to check how to abort or error // out gracefully from this function. XXXTBD - llerrs << "LLMessageSystem::buildMessage failed. " + llerrs << "buildBlock failed. " << "Attempted to pack " << result + mvci.getSize() << " bytes into a buffer with size " @@ -783,6 +732,94 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) } } } + + --block_count; + ++block_iter; + if (block_iter != message_data->mMemberBlocks.end()) + { + mbci = block_iter->second; + } + } + + return result; +} + + +// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer +U32 LLTemplateMessageBuilder::buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) +{ + // basic algorithm is to loop through the various pieces, building + // size and offset info if we encounter a -1 for mSize at any + // point that variable wasn't given data + + // do we have a current message? + if (!mCurrentSMessageTemplate) + { + llerrs << "newMessage not called prior to buildMessage" << llendl; + return 0; + } + + // leave room for flags, packet sequence #, and data offset + // information. + buffer[PHL_OFFSET] = offset_to_data; + U32 result = LL_PACKET_ID_SIZE; + + // encode message number and adjust total_offset + if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) + { +// old, endian-dependant way +// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); + +// new, independant way + buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) + { + U8 temp = 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + temp = mCurrentSMessageTemplate->mMessageNumber & 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) + { + U8 temp = 255; + U16 message_num; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; + + // convert to network byte order + message_num = htons(message_num); + memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ + result += sizeof(U16); + } + else + { + llerrs << "unexpected message frequency in buildMessage" << llendl; + return 0; + } + + // fast forward through the offset and build the message + result += offset_to_data; + for(LLMessageTemplate::message_block_map_t::const_iterator + iter = mCurrentSMessageTemplate->mMemberBlocks.begin(), + end = mCurrentSMessageTemplate->mMemberBlocks.end(); + iter != end; + ++iter) + { + result += buildBlock(buffer + result, buffer_size - result, *iter, mCurrentSMessageData); } mbSBuilt = TRUE; diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.h b/linden/indra/llmessage/lltemplatemessagebuilder.h index ae53328..40a2f0d 100644 --- a/linden/indra/llmessage/lltemplatemessagebuilder.h +++ b/linden/indra/llmessage/lltemplatemessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagebuilder.h + * @brief Declaration of LLTemplateMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLTEMPLATEMESSAGEBUILDER_H #define LL_LLTEMPLATEMESSAGEBUILDER_H @@ -15,12 +43,12 @@ class LLTemplateMessageBuilder : public LLMessageBuilder { public: - typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; + typedef std::map<const char* , LLMessageTemplate*> message_template_name_map_t; LLTemplateMessageBuilder(message_template_name_map_t&); virtual ~LLTemplateMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... @@ -29,22 +57,22 @@ public: virtual void addBinaryData(const char *varname, const void *data, S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -53,7 +81,7 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); /**< Return built message size */ virtual void clearMessage(); @@ -68,14 +96,14 @@ public: virtual void copyFromLLSD(const LLSD&); private: - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type, S32 size); - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type); LLMsgData* mCurrentSMessageData; - LLMessageTemplate* mCurrentSMessageTemplate; + const LLMessageTemplate* mCurrentSMessageTemplate; LLMsgBlkData* mCurrentSDataBlock; char* mCurrentSMessageName; char* mCurrentSBlockName; diff --git a/linden/indra/llmessage/lltemplatemessagereader.cpp b/linden/indra/llmessage/lltemplatemessagereader.cpp index bb3f4f4..a1f5213 100644 --- a/linden/indra/llmessage/lltemplatemessagereader.cpp +++ b/linden/indra/llmessage/lltemplatemessagereader.cpp @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagereader.cpp + * @brief LLTemplateMessageReader class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "lltemplatemessagereader.h" #include "llfasttimer.h" @@ -53,7 +81,7 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -135,7 +163,7 @@ S32 LLTemplateMessageReader::getNumberOfBlocks(const char *blockname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -165,7 +193,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -214,7 +242,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const char *bnamep = (char *)blockname + blocknum; char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -497,16 +525,21 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender llassert( !mCurrentRMessageData ); delete mCurrentRMessageData; // just to make sure - S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency); + // The offset tells us how may bytes to skip after the end of the + // message name. + U8 offset = buffer[PHL_OFFSET]; + S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency) + offset; // create base working data set mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName); // loop through the template building the data structure as we go - for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); - iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++) + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); + iter != mCurrentRMessageTemplate->mMemberBlocks.end(); + ++iter) { - LLMessageBlock* mbci = iter->second; + LLMessageBlock* mbci = *iter; U8 repeat_number; S32 i; @@ -528,11 +561,16 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender // repeat number is a single byte if (decode_pos >= mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 repeats + repeat_number = 0; + } + else + { + repeat_number = buffer[decode_pos]; + decode_pos++; } - repeat_number = buffer[decode_pos]; - decode_pos++; } else { @@ -561,10 +599,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender mCurrentRMessageData->addBlock(cur_data_block); // now read the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = + mbci->mMemberVariables.begin(); iter != mbci->mMemberVariables.end(); iter++) { - LLMessageVariable& mvci = *(iter->second); + const LLMessageVariable& mvci = **iter; + // ok, build out the variables // add variable block cur_data_block->addVariable(mvci.getName(), mvci.getType()); @@ -580,34 +620,33 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender if ((decode_pos + data_size) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 length variable blocks + tsize = 0; } - switch(data_size) + else { - case 1: - htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); - tsize = tsizeb; - break; - case 2: - htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); - tsize = tsizeh; - break; - case 4: - htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); - break; - default: - llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; - break; - + switch(data_size) + { + case 1: + htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); + tsize = tsizeb; + break; + case 2: + htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); + tsize = tsizeh; + break; + case 4: + htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); + break; + default: + llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; + break; + } } decode_pos += data_size; - if ((decode_pos + (S32)tsize) > mReceiveSize) - { - logRanOffEndOfPacket( sender ); - return FALSE; - } cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType()); decode_pos += tsize; } @@ -615,14 +654,24 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender { // fixed! // so, copy data pointer and set data size to fixed size - if ((decode_pos + mvci.getSize()) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0s. + U32 size = mvci.getSize(); + std::vector<U8> data(size); + memset(&(data[0]), 0, size); + cur_data_block->addData(mvci.getName(), &(data[0]), + size, mvci.getType()); + } + else + { + cur_data_block->addData(mvci.getName(), + &buffer[decode_pos], + mvci.getSize(), + mvci.getType()); } - - cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType()); decode_pos += mvci.getSize(); } } @@ -644,11 +693,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender decode_timer.reset(); } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTResume(); // VTune - // } - { LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES); if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) ) @@ -657,11 +701,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender } } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTPause(); // VTune - // } - if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback()) { F32 decode_time = decode_timer.getElapsedTimeF32(); @@ -723,8 +762,12 @@ BOOL LLTemplateMessageReader::readMessage(const U8* buffer, //virtual const char* LLTemplateMessageReader::getMessageName() const { - static char empty_string[] = ""; - return mCurrentRMessageTemplate ? mCurrentRMessageTemplate->mName : empty_string; + if (!mCurrentRMessageTemplate) + { + llwarns << "no mCurrentRMessageTemplate" << llendl; + return ""; + } + return mCurrentRMessageTemplate->mName; } //virtual diff --git a/linden/indra/llmessage/lltemplatemessagereader.h b/linden/indra/llmessage/lltemplatemessagereader.h index dd5ee39..86d4ab6 100644 --- a/linden/indra/llmessage/lltemplatemessagereader.h +++ b/linden/indra/llmessage/lltemplatemessagereader.h @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagereader.h + * @brief Declaration of LLTemplateMessageReader class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLTEMPLATEMESSAGEREADER_H #define LL_LLTEMPLATEMESSAGEREADER_H diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp index f42ce45..3de08c6 100644 --- a/linden/indra/llmessage/lltransfermanager.cpp +++ b/linden/indra/llmessage/lltransfermanager.cpp @@ -601,34 +601,6 @@ void LLTransferManager::processTransferAbort(LLMessageSystem *msgp, void **) //static -void LLTransferManager::processTransferPriority(LLMessageSystem *msgp, void **) -{ - //llinfos << "LLTransferManager::processTransferPacket" << llendl; - - LLUUID transfer_id; - LLTransferChannelType channel_type; - F32 priority = 0.f; - msgp->getUUID("TransferInfo", "TransferID", transfer_id); - msgp->getS32("TransferInfo", "ChannelType", (S32 &)channel_type); - msgp->getF32("TransferInfo", "Priority", priority); - - // Hmm, not a target. Maybe it's a source. - LLTransferSourceChannel *tscp = gTransferManager.getSourceChannel(msgp->getSender(), channel_type); - if (tscp) - { - LLTransferSource *tsp = tscp->findTransferSource(transfer_id); - if (tsp) - { - tscp->updatePriority(tsp, priority); - return; - } - } - - llwarns << "Couldn't find transfer " << transfer_id << " to set priority!" << llendl; -} - - -//static void LLTransferManager::reliablePacketCallback(void **user_data, S32 result) { LLUUID *transfer_idp = (LLUUID *)user_data; diff --git a/linden/indra/llmessage/lltransfermanager.h b/linden/indra/llmessage/lltransfermanager.h index 81a0221..d063156 100644 --- a/linden/indra/llmessage/lltransfermanager.h +++ b/linden/indra/llmessage/lltransfermanager.h @@ -129,7 +129,6 @@ public: static void processTransferInfo(LLMessageSystem *mesgsys, void **); static void processTransferPacket(LLMessageSystem *mesgsys, void **); static void processTransferAbort(LLMessageSystem *mesgsys, void **); - static void processTransferPriority(LLMessageSystem *mesgsys, void **); static void reliablePacketCallback(void **, S32 result); diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp index d1c2875..01dce40 100644 --- a/linden/indra/llmessage/message.cpp +++ b/linden/indra/llmessage/message.cpp @@ -67,9 +67,12 @@ #include "lltemplatemessagebuilder.h" #include "lltemplatemessagereader.h" #include "llmessagetemplate.h" +#include "llmessagetemplateparser.h" #include "llsd.h" #include "llsdmessagebuilder.h" #include "llsdmessagereader.h" +#include "llsdserialize.h" +#include "llstring.h" #include "lltransfermanager.h" #include "lluuid.h" #include "llxfermanager.h" @@ -100,220 +103,28 @@ public: apr_pollfd_t mPollFD; }; -// Lets support a small subset of regular expressions here -// Syntax is a string made up of: -// a - checks against alphanumeric ([A-Za-z0-9]) -// c - checks against character ([A-Za-z]) -// f - checks against first variable character ([A-Za-z_]) -// v - checks against variable ([A-Za-z0-9_]) -// s - checks against sign of integer ([-0-9]) -// d - checks against integer digit ([0-9]) -// * - repeat last check - -// checks 'a' -BOOL b_return_alphanumeric_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'c' -BOOL b_return_character_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'f' -BOOL b_return_first_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 'v' -BOOL b_return_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 's' -BOOL b_return_signed_integer_ok(char c) -{ - if ( ( (c < '0') - ||(c > '9')) - &&(c != '-')) - { - return FALSE; - } - return TRUE; -} - -// checks 'd' -BOOL b_return_integer_ok(char c) -{ - if ( (c < '0') - ||(c > '9')) - { - return FALSE; - } - return TRUE; -} - -BOOL (*gParseCheckCharacters[])(char c) = -{ - b_return_alphanumeric_ok, - b_return_character_ok, - b_return_first_variable_ok, - b_return_variable_ok, - b_return_signed_integer_ok, - b_return_integer_ok -}; - -S32 get_checker_number(char checker) -{ - switch(checker) - { - case 'a': - return 0; - case 'c': - return 1; - case 'f': - return 2; - case 'v': - return 3; - case 's': - return 4; - case 'd': - return 5; - case '*': - return 9999; - default: - return -1; - } -} - -// check token based on passed simplified regular expression -BOOL b_check_token(char *token, char *regexp) -{ - S32 tptr, rptr = 0; - S32 current_checker, next_checker = 0; - - current_checker = get_checker_number(regexp[rptr++]); - - if (current_checker == -1) - { - llerrs << "Invalid regular expression value!" << llendl; - return FALSE; - } - - if (current_checker == 9999) - { - llerrs << "Regular expression can't start with *!" << llendl; - return FALSE; - } - - for (tptr = 0; token[tptr]; tptr++) - { - if (current_checker == -1) - { - llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; - return FALSE; - } - - if (!gParseCheckCharacters[current_checker](token[tptr])) - { - return FALSE; - } - if (next_checker != 9999) - { - next_checker = get_checker_number(regexp[rptr++]); - if (next_checker != 9999) - { - current_checker = next_checker; - } - } - } - return TRUE; -} - -// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number -BOOL b_variable_ok(char *token) -{ - if (!b_check_token(token, "fv*")) - { - llerrs << "Token '" << token << "' isn't a variable!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 and may be preceded by a '-' -BOOL b_integer_ok(char *token) -{ - if (!b_check_token(token, "sd*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 -BOOL b_positive_integer_ok(char *token) -{ - if (!b_check_token(token, "d*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - namespace { class LLFnPtrResponder : public LLHTTPClient::Responder { + LOG_CLASS(LLFnPtrResponder); public: - LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData) : + LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData, const std::string& name) : mCallback(callback), - mCallbackData(callbackData) + mCallbackData(callbackData), + mMessageName(name) { } virtual void error(U32 status, const std::string& reason) { + // don't spam when agent communication disconnected already + if (status != 410) + { + llwarns << "error status " << status + << " for message " << mMessageName + << " reason " << reason << llendl; + } // TODO: Map status in to useful error code. if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT); } @@ -327,6 +138,7 @@ namespace void (*mCallback)(void **,S32); void **mCallbackData; + std::string mMessageName; }; } @@ -352,10 +164,28 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response, ["x-secondlife-udp-listen-port"]; LLSD message_data; - message_data["sender"] = senderIP + ":" + senderPort; + std::string sender = senderIP + ":" + senderPort; + message_data["sender"] = sender; message_data["body"] = input; - LLMessageSystem::dispatch(name, message_data, response); + // untrusted senders should not have access to the trusted message + // service, but this can happen in development, so check and warn + LLMessageConfig::SenderTrust trust = + LLMessageConfig::getSenderTrustedness(name); + if ((trust == LLMessageConfig::TRUSTED || + (trust == LLMessageConfig::NOT_SET && + gMessageSystem->isTrustedMessage(name))) + && !gMessageSystem->isTrustedSender(LLHost(sender))) + { + llwarns << "trusted message POST to /trusted-message/" + << name << " from unknown or untrusted sender " + << sender << llendl; + response->status(403, "Unknown or untrusted sender"); + } + else + { + LLMessageSystem::dispatch(name, message_data, response); + } } class LLMessageHandlerBridge : public LLHTTPNode @@ -372,14 +202,15 @@ void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const { std::string name = context["request"]["wildcard"]["message-name"]; - + char* namePtr = gMessageStringTable.getString(name.c_str()); + lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl; gMessageSystem->mLastSender = LLHost(input["sender"].asString()); gMessageSystem->mPacketsIn += 1; - gMessageSystem->mLLSDMessageReader->setMessage(name, input["body"]); + gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]); gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader; - if(gMessageSystem->callHandler(name.c_str(), false, gMessageSystem)) + if(gMessageSystem->callHandler(namePtr, false, gMessageSystem)) { response->result(LLSD()); } @@ -401,6 +232,12 @@ LLUseCircuitCodeResponder::~LLUseCircuitCodeResponder() // even abstract base classes need a concrete destructor } +static const char* nullToEmpty(const char* s) +{ + static char emptyString[] = ""; + return s? s : emptyString; +} + void LLMessageSystem::init() { // initialize member variables @@ -440,7 +277,6 @@ void LLMessageSystem::init() mIncomingCompressedSize = 0; mCurrentRecvPacketID = 0; - mMessageFileChecksum = 0; mMessageFileVersionNumber = 0.f; mTimingCallback = NULL; @@ -454,9 +290,7 @@ void LLMessageSystem::init() LLMessageSystem::LLMessageSystem(const char *filename, U32 port, S32 version_major, S32 version_minor, - S32 version_patch) : - mTemplateConfirmed(FALSE), - mTemplateMatches(FALSE) + S32 version_patch) { init(); @@ -501,835 +335,63 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port, if (!gAPRPoolp) { llerrs << "No APR pool before message system initialization!" << llendl; - ll_init_apr(); - } - apr_socket_t *aprSocketp = NULL; - apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp); - - mPollInfop = new LLMessagePollInfo; - mPollInfop->mAPRSocketp = aprSocketp; - mPollInfop->mPollFD.p = gAPRPoolp; - mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET; - mPollInfop->mPollFD.reqevents = APR_POLLIN; - mPollInfop->mPollFD.rtnevents = 0; - mPollInfop->mPollFD.desc.s = aprSocketp; - mPollInfop->mPollFD.client_data = NULL; - - F64 mt_sec = getMessageTimeSeconds(); - mResendDumpTime = mt_sec; - mMessageCountTime = mt_sec; - mCircuitPrintTime = mt_sec; - mCurrentMessageTimeSeconds = mt_sec; - - // Constants for dumping output based on message processing time/count - mNumMessageCounts = 0; - mMaxMessageCounts = 200; // >= 0 means dump warnings - mMaxMessageTime = 1.f; - - mTrueReceiveSize = 0; -} - -// Read file and build message templates -void LLMessageSystem::loadTemplateFile(const char* filename) -{ - if(!filename) - { - llerrs << "No template filename specified" << llendl; - mbError = TRUE; - return; - } - - char token[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - // state variables - BOOL b_template_start = TRUE; - BOOL b_template_end = FALSE; - BOOL b_template = FALSE; - BOOL b_block_start = FALSE; - BOOL b_block_end = FALSE; - BOOL b_block = FALSE; - BOOL b_variable_start = FALSE; - BOOL b_variable_end = FALSE; - BOOL b_variable = FALSE; - //BOOL b_in_comment_block = FALSE; // not yet used - - // working temp variables - LLMessageTemplate *templatep = NULL; - char template_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageBlock *blockp = NULL; - char block_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageVariable var; - char var_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - char formatString[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - FILE* messagefilep = NULL; - mMessageFileChecksum = 0; - mMessageFileVersionNumber = 0.f; - S32 checksum_offset = 0; - char* checkp = NULL; - - // scanf needs 1 byte more than width, thus the MAX_... -1. - snprintf( /* Flawfinder: ignore */ - formatString, - sizeof(formatString), - "%%%ds", - MAX_MESSAGE_INTERNAL_NAME_SIZE - 1); - messagefilep = LLFile::fopen(filename, "r"); /* Flawfinder: ignore */ - if (messagefilep) - { -// mName = gMessageStringTable.getString(filename); - - fseek(messagefilep, 0L, SEEK_SET ); - while(fscanf(messagefilep, formatString, token) != EOF) /* Flawfinder: ignore */ - { - // skip comments - if (token[0] == '/') - { - // skip to end of line - while (token[0] != 10) - fscanf(messagefilep, "%c", token); - continue; - } - - checkp = token; - - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // what are we looking for - if (!strcmp(token, "{")) - { - // is that a legit option? - if (b_template_start) - { - // yup! - b_template_start = FALSE; - - // remember that it could be only a signal message, so name is all that it contains - b_template_end = TRUE; - - // start working on it! - b_template = TRUE; - } - else if (b_block_start) - { - // yup! - b_block_start = FALSE; - b_template_end = FALSE; - - // start working on it! - b_block = TRUE; - } - else if (b_variable_start) - { - // yup! - b_variable_start = FALSE; - b_block_end = FALSE; - - // start working on it! - b_variable = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - if (!strcmp(token, "}")) - { - // is that a legit option? - if (b_template_end) - { - // yup! - b_template_end = FALSE; - b_template = FALSE; - b_block_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it! - if (NULL == templatep) - { - llerrs << "Trying to addTemplate a NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - addTemplate(templatep); - - //llinfos << "Read template: "templatep->mNametemp_str - // << llendl; - - // look for next one! - b_template_start = TRUE; - } - else if (b_block_end) - { - // yup! - b_block_end = FALSE; - b_variable_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to template - if (NULL == templatep) - { - llerrs << "Trying to addBlock to NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->addBlock(blockp); - - // start working on it! - b_template_end = TRUE; - b_block_start = TRUE; - } - else if (b_variable_end) - { - // yup! - b_variable_end = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to block - blockp->addVariable(var.getName(), var.getType(), var.getSize()); - - // start working on it! - b_variable_start = TRUE; - b_block_end = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - // now, are we looking to start a template? - if (b_template) - { - - b_template = FALSE; - - // name first - if (fscanf(messagefilep, formatString, template_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template name, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // debugging to help figure out busted templates - //llinfos << template_name << llendl; - - // is name a legit C variable name - if (!b_variable_ok(template_name)) - { - // nope! - llerrs << "Not legal message template name: " - << template_name << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = template_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // ok, now get Frequency ("High", "Medium", or "Low") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template frequency, found EOF." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "High")) - { - if (++mNumberHighFreqMessages == 255) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 High frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is just mNumberHighFreqMessages - templatep = new LLMessageTemplate(template_name, mNumberHighFreqMessages, MFT_HIGH); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberHighFreqMessages - // << std::dec << " high" - // << llendl; - } - else if (!strcmp(token, "Medium")) - { - if (++mNumberMediumFreqMessages == 255) - { - // oops, too many Medium Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 Medium frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 8) | mNumberMediumFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 8) | mNumberMediumFreqMessages, MFT_MEDIUM); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberMediumFreqMessages - // << std::dec << " medium" - // << llendl; - } - else if (!strcmp(token, "Low")) - { - if (++mNumberLowFreqMessages == 65535) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 65534 Low frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 24) | (255 << 16) | mNumberLowFreqMessages, MFT_LOW); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberLowFreqMessages - // << std::dec << " low" - // << llendl; - } - else if (!strcmp(token, "Fixed")) - { - U32 message_num = 0; - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template number (fixed)," - << " found EOF." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - message_num = strtoul(token,NULL,0); - - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, message_num, MFT_LOW); - } - else - { - // oops, bad frequency line - llerrs << "Bad frequency! " << token - << " isn't High, Medium, or Low" << llendl - mbError = TRUE; - fclose(messagefilep); - return; - } - - // Now get trust ("Trusted", "NotTrusted") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message template " - "trust, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if (strcmp(token, "Trusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_TRUST); - } - else if (strcmp(token, "NotTrusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_NOTRUST); - } - else - { - // bad trust token - llerrs << "bad trust: " << token - << " isn't Trusted or NotTrusted" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // get encoding - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message encoding, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while(*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if(0 == strcmp(token, "Unencoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_UNENCODED); - } - else if(0 == strcmp(token, "Zerocoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_ZEROCODED); - } - else - { - // bad trust token - llerrs << "bad encoding: " << token - << " isn't Unencoded or Zerocoded" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // ok, now we need to look for a block - b_block_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_block) - { - b_block = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, block_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block name, but file ended" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = block_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(block_name)) - { - // nope! - llerrs << block_name << "is not a legal block name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, block type ("Single", "Multiple", or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block type, but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "Single")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_SINGLE); - } - else if (!strcmp(token, "Multiple")) - { - // need to get the number of repeats - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block multiple count," - " but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer for" - " block multiple count" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_MULTIPLE, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_VARIABLE); - } - else - { - // oops, bad block type - llerrs << "Bad block type! " << token - << " isn't Single, Multiple, or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, now we need to look for a variable - b_variable_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_variable) - { - b_variable = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, var_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable name, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = var_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(var_name)) - { - // nope! - llerrs << var_name << " is not a legal variable name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, variable type ("Fixed" or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable type, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - - // which one is it? - if (!strcmp(token, "U8")) - { - var = LLMessageVariable(var_name, MVT_U8, 1); - } - else if (!strcmp(token, "U16")) - { - var = LLMessageVariable(var_name, MVT_U16, 2); - } - else if (!strcmp(token, "U32")) - { - var = LLMessageVariable(var_name, MVT_U32, 4); - } - else if (!strcmp(token, "U64")) - { - var = LLMessageVariable(var_name, MVT_U64, 8); - } - else if (!strcmp(token, "S8")) - { - var = LLMessageVariable(var_name, MVT_S8, 1); - } - else if (!strcmp(token, "S16")) - { - var = LLMessageVariable(var_name, MVT_S16, 2); - } - else if (!strcmp(token, "S32")) - { - var = LLMessageVariable(var_name, MVT_S32, 4); - } - else if (!strcmp(token, "S64")) - { - var = LLMessageVariable(var_name, MVT_S64, 8); - } - else if (!strcmp(token, "F32")) - { - var = LLMessageVariable(var_name, MVT_F32, 4); - } - else if (!strcmp(token, "F64")) - { - var = LLMessageVariable(var_name, MVT_F64, 8); - } - else if (!strcmp(token, "LLVector3")) - { - var = LLMessageVariable(var_name, MVT_LLVector3, 12); - } - else if (!strcmp(token, "LLVector3d")) - { - var = LLMessageVariable(var_name, MVT_LLVector3d, 24); - } - else if (!strcmp(token, "LLVector4")) - { - var = LLMessageVariable(var_name, MVT_LLVector4, 16); - } - else if (!strcmp(token, "LLQuaternion")) - { - var = LLMessageVariable(var_name, MVT_LLQuaternion, 12); - } - else if (!strcmp(token, "LLUUID")) - { - var = LLMessageVariable(var_name, MVT_LLUUID, 16); - } - else if (!strcmp(token, "BOOL")) - { - var = LLMessageVariable(var_name, MVT_BOOL, 1); - } - else if (!strcmp(token, "IPADDR")) - { - var = LLMessageVariable(var_name, MVT_IP_ADDR, 4); - } - else if (!strcmp(token, "IPPORT")) - { - var = LLMessageVariable(var_name, MVT_IP_PORT, 2); - } - else if (!strcmp(token, "Fixed")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << " is not a legal integer for" - " variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_FIXED, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } + ll_init_apr(); + } + apr_socket_t *aprSocketp = NULL; + apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp); - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } + mPollInfop = new LLMessagePollInfo; + mPollInfop->mAPRSocketp = aprSocketp; + mPollInfop->mPollFD.p = gAPRPoolp; + mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET; + mPollInfop->mPollFD.reqevents = APR_POLLIN; + mPollInfop->mPollFD.rtnevents = 0; + mPollInfop->mPollFD.desc.s = aprSocketp; + mPollInfop->mPollFD.client_data = NULL; - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer" - " for variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_VARIABLE, atoi(token)); - } - else - { - // oops, bad variable type - llerrs << "Bad variable type! " << token - << " isn't Fixed or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } + F64 mt_sec = getMessageTimeSeconds(); + mResendDumpTime = mt_sec; + mMessageCountTime = mt_sec; + mCircuitPrintTime = mt_sec; + mCurrentMessageTimeSeconds = mt_sec; - // we got us a variable! - b_variable_end = TRUE; - continue; - } + // Constants for dumping output based on message processing time/count + mNumMessageCounts = 0; + mMaxMessageCounts = 200; // >= 0 means dump warnings + mMaxMessageTime = 1.f; + + mTrueReceiveSize = 0; +} - // do we have a version number stuck in the file? - if (!strcmp(token, "version")) - { - // version number - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected version number, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - mMessageFileVersionNumber = (F32)atof(token); - -// llinfos << "### Message template version " << mMessageFileVersionNumber << " ###" << llendl; - continue; - } - } - llinfos << "Message template checksum = " << std::hex << mMessageFileChecksum << std::dec << llendl; +// Read file and build message templates +void LLMessageSystem::loadTemplateFile(const char* filename) +{ + if(!filename) + { + llerrs << "No template filename specified" << llendl; + mbError = TRUE; + return; } - else + + LLString template_body; + if(!LLString::read(template_body, filename)) { llwarns << "Failed to open template: " << filename << llendl; mbError = TRUE; return; } - fclose(messagefilep); + + LLTemplateTokenizer tokens(template_body); + LLTemplateParser parsed(tokens); + mMessageFileVersionNumber = parsed.getVersion(); + for(LLTemplateParser::message_iterator iter = parsed.getMessagesBegin(); + iter != parsed.getMessagesEnd(); + iter++) + { + addTemplate(*iter); + } } @@ -1393,6 +455,94 @@ BOOL LLMessageSystem::poll(F32 seconds) } } +bool LLMessageSystem::isTrustedSender(const LLHost& host) const +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if(NULL == cdp) + { + return false; + } + return cdp->getTrusted(); +} + +static LLMessageSystem::message_template_name_map_t::const_iterator +findTemplate(const LLMessageSystem::message_template_name_map_t& templates, + std::string name) +{ + const char* namePrehash = gMessageStringTable.getString(name.c_str()); + if(NULL == namePrehash) {return templates.end();} + return templates.find(namePrehash); +} + +bool LLMessageSystem::isTrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_TRUST; +} + +bool LLMessageSystem::isUntrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_NOTRUST; +} + +LLCircuitData* LLMessageSystem::findCircuit(const LLHost& host, + bool resetPacketId) +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if (!cdp) + { + // This packet comes from a circuit we don't know about. + + // Are we rejecting off-circuit packets? + if (mbProtected) + { + // cdp is already NULL, so we don't need to unset it. + } + else + { + // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); + + if(resetPacketId) + { + // I added this - I think it's correct - DJS + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + // And claim the packet is on the circuit we just added. + } + } + else + { + // this is an old circuit. . . is it still alive? + if (!cdp->isAlive()) + { + // nope. don't accept if we're protected + if (mbProtected) + { + // don't accept packets from unexpected sources + cdp = NULL; + } + else + { + // wake up the circuit + cdp->setAlive(TRUE); + + if(resetPacketId) + { + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + } + } + } + return cdp; +} // Returns TRUE if a valid, on-circuit message has been received. BOOL LLMessageSystem::checkMessages( S64 frame_count ) @@ -1471,71 +621,12 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) } // process the message as normal - - mIncomingCompressedSize = zeroCodeExpand(&buffer,&receive_size); - mCurrentRecvPacketID = buffer[1] + ((buffer[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[2]; - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[3]; - } - + mIncomingCompressedSize = zeroCodeExpand(&buffer, &receive_size); + mCurrentRecvPacketID = ntohl(*((U32*)(&buffer[1]))); host = getSender(); - //llinfos << host << ":" << mCurrentRecvPacketID << llendl; - - // For testing the weird case we're having in the office where the first few packets - // on a connection get dropped - //if ((mCurrentRecvPacketID < 8) && !(buffer[0] & LL_RESENT_FLAG)) - //{ - // llinfos << "Evil! Dropping " << mCurrentRecvPacketID << " from " << host << " for fun!" << llendl; - // continue; - //} - - cdp = mCircuitInfo.findCircuit(host); - if (!cdp) - { - // This packet comes from a circuit we don't know about. - - // Are we rejecting off-circuit packets? - if (mbProtected) - { - // cdp is already NULL, so we don't need to unset it. - } - else - { - // nope, open the new circuit - cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); - - // I added this - I think it's correct - DJS - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - - // And claim the packet is on the circuit we just added. - } - } - else - { - // this is an old circuit. . . is it still alive? - if (!cdp->isAlive()) - { - // nope. don't accept if we're protected - if (mbProtected) - { - // don't accept packets from unexpected sources - cdp = NULL; - } - else - { - // wake up the circuit - cdp->setAlive(TRUE); - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - } - } - } + const bool resetPacketId = true; + cdp = findCircuit(host, resetPacketId); // At this point, cdp is now a pointer to the circuit that // this message came in on if it's valid, and NULL if the @@ -1664,6 +755,10 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (valid_packet) { + // enable this for output of message names + //llinfos << "< \"" << mTemplateMessageReader->getMessageName() + //<< "\"" << llendl; + /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. if( 1 ) { @@ -1768,9 +863,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) { if (mbProtected && (!cdp)) { - llwarns << "Packet " - << mTemplateMessageReader->getMessageName() - << " from invalid circuit " << host << llendl; + llwarns << "Invalid Packet from invalid circuit " << host << llendl; mOffCircuitPackets++; } else @@ -2051,15 +1144,34 @@ S32 LLMessageSystem::flushReliable(const LLHost &host) return send_bytes; } - +LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& name) +{ + if(mSendReliable) + { + return new LLFnPtrResponder(mReliablePacketParams.mCallback, + mReliablePacketParams.mCallbackData, + name); + } + else + { + llwarns << "LLMessageSystem::sendMessage: Sending unreliable " + << mMessageBuilder->getMessageName() << " message via HTTP" + << llendl; + return new LLFnPtrResponder(NULL, NULL, + mMessageBuilder->getMessageName()); + } +} + // This can be called from signal handlers, // so should should not use llinfos. S32 LLMessageSystem::sendMessage(const LLHost &host) { if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message @@ -2088,6 +1200,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) else { // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, 0); } } @@ -2115,33 +1228,23 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) LLSD message = mLLSDMessageBuilder->getMessage(); const LLHTTPSender& sender = LLHTTPSender::getSender(host); - LLHTTPClient::ResponderPtr responder = NULL; - if(mSendReliable) - { - responder = - new LLFnPtrResponder(mReliablePacketParams.mCallback, - mReliablePacketParams.mCallbackData); - } - else - { - llwarns << "LLMessageSystem::sendMessage: Sending unreliable " << mMessageBuilder->getMessageName() << " message via HTTP" << llendl; - responder = new LLFnPtrResponder(NULL, NULL); - } sender.send(host, mLLSDMessageBuilder->getMessageName(), - message, responder); + message, createResponder(mLLSDMessageBuilder->getMessageName())); mSendReliable = FALSE; mReliablePacketParams.clear(); return 1; } - memset(mSendBuffer,0,LL_PACKET_ID_SIZE); // zero out the packet ID field + // zero out the flags and packetid. Subtract 1 here so that we do + // not overwrite the offset if it was set set in buildMessage(). + memset(mSendBuffer, 0, LL_PACKET_ID_SIZE - 1); // add the send id to the front of the message cdp->nextPacketOutID(); // Packet ID size is always 4 - *((S32*)&mSendBuffer[0]) = htonl(cdp->getPacketOutID()); + *((S32*)&mSendBuffer[PHL_PACKET_ID]) = htonl(cdp->getPacketOutID()); // Compress the message, which will usually reduce its size. U8 * buf_ptr = (U8 *)mSendBuffer; @@ -2284,7 +1387,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << " REJECTED"; llinfos << str.str() << llendl; @@ -2307,6 +1410,27 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re } } +S32 LLMessageSystem::sendMessage(const LLHost &host, const char* name, + const LLSD& message) +{ + if (!(host.isOk())) + { + llwarns << "trying to send message to invalid host" << llendl; + return 0; + } + newMessage(name); + if (mMessageBuilder != mLLSDMessageBuilder) + { + llwarns << "trying to send llsd message when builder is not LLSD!" + << llendl; + return 0; + } + + const LLHTTPSender& sender = LLHTTPSender::getSender(host); + sender.send(host, name, message, createResponder(name)); + return 1; +} + void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) { // RequestTrustedCircuit is how we establish trust, so don't spam @@ -2314,9 +1438,9 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) { llwarns << "Received trusted message on untrusted circuit. " - << "Will reply with deny. " - << "Message: " << mMessageReader->getMessageName() - << " Host: " << host << llendl; + << "Will reply with deny. " + << "Message: " << nullToEmpty(mMessageReader->getMessageName()) + << " Host: " << host << llendl; } if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) @@ -2366,7 +1490,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << (recv_resent ? " resent" : "") << (recv_acks ? " acks" : ""); @@ -2506,16 +1630,16 @@ void LLMessageSystem::disableCircuit(const LLHost &host) llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; gMessageSystem->mIPPortToCircuitCode.erase(ip_port); } + mCircuitInfo.removeCircuitData(host); } else { // Sigh, since we can open circuits which don't have circuit // codes, it's possible for this to happen... - //llwarns << "Couldn't find circuit code for " << host << llendl; + llwarns << "Couldn't find circuit code for " << host << llendl; } - mCircuitInfo.removeCircuitData(host); } @@ -2937,6 +2061,30 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, } } +// static +void LLMessageSystem::processError(LLMessageSystem* msg, void**) +{ + char buffer[MTUBYTES]; + S32 error_code = 0; + msg->getS32("Data", "Code", error_code); + std::string error_token; + msg->getString("Data", "Token", MTUBYTES, buffer); + error_token.assign(buffer); + LLUUID error_id; + msg->getUUID("Data", "ID", error_id); + std::string error_system; + msg->getString("Data", "System", MTUBYTES, buffer); + error_system.assign(buffer); + std::string error_message; + msg->getString("Data", "Message", MTUBYTES, buffer); + error_message.assign(buffer); + + llwarns << "Message error from " << msg->getSender() << " - " + << error_code << " " << error_token << " " << error_id << " \"" + << error_system << "\" \"" << error_message << "\"" << llendl; +} + + static LLHTTPNode& messageRootNode() { static LLHTTPNode root_node; @@ -2964,10 +2112,13 @@ void LLMessageSystem::dispatch( const LLSD& message, LLHTTPNode::ResponsePtr responsep) { - if (msg_name.empty()) + if ((gMessageSystem->mMessageTemplates.find + (gMessageStringTable.getString(msg_name.c_str())) == + gMessageSystem->mMessageTemplates.end()) && + !LLMessageConfig::isValidMessage(msg_name)) { - llwarns << "LLMessageService::dispatch called with no message name" - << llendl; + llwarns << "Ignoring unknown message " << msg_name << llendl; + responsep->notFound("Invalid message name"); return; } @@ -2980,6 +2131,9 @@ void LLMessageSystem::dispatch( << path << llendl; return; } + // enable this for output of message names + //llinfos << "< \"" << msg_name << "\"" << llendl; + //lldebugs << "data: " << LLSDXMLStreamer(message) << llendl; handler->post(responsep, context, message); } @@ -3044,6 +2198,56 @@ void LLMessageSystem::setMessageBans( check_for_unrecognized_messages("untrusted", untrusted, mMessageTemplates); } +S32 LLMessageSystem::sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data) +{ + newMessage("Error"); + nextBlockFast(_PREHASH_AgentData); + addUUIDFast(_PREHASH_AgentID, agent_id); + nextBlockFast(_PREHASH_Data); + addS32("Code", code); + addString("Token", token); + addUUID("ID", id); + addString("System", system); + std::string temp; + temp = message; + if(temp.size() > (size_t)MTUBYTES) temp.resize((size_t)MTUBYTES); + addString("Message", message); + LLPointer<LLSDBinaryFormatter> formatter = new LLSDBinaryFormatter; + std::ostringstream ostr; + formatter->format(data, ostr); + temp = ostr.str(); + bool pack_data = true; + static const std::string ERROR_MESSAGE_NAME("Error"); + if (LLMessageConfig::getMessageFlavor(ERROR_MESSAGE_NAME) == + LLMessageConfig::TEMPLATE_FLAVOR) + { + S32 msg_size = temp.size() + mMessageBuilder->getMessageSize(); + if(msg_size >= ETHERNET_MTU_BYTES) + { + pack_data = false; + } + } + if(pack_data) + { + addBinaryData("Data", (void*)temp.c_str(), temp.size()); + } + else + { + llwarns << "Data and message were too large -- data removed." + << llendl; + addBinaryData("Data", NULL, 0); + } + return sendReliable(host); +} + void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) { TPACKETID packet_id; @@ -3069,37 +2273,8 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) } } -void send_template_reply(LLMessageSystem* msg, const LLUUID& token) -{ - msg->newMessageFast(_PREHASH_TemplateChecksumReply); - msg->nextBlockFast(_PREHASH_DataBlock); - msg->addU32Fast(_PREHASH_Checksum, msg->mMessageFileChecksum); - msg->addU8Fast(_PREHASH_MajorVersion, U8(msg->mSystemVersionMajor) ); - msg->addU8Fast(_PREHASH_MinorVersion, U8(msg->mSystemVersionMinor) ); - msg->addU8Fast(_PREHASH_PatchVersion, U8(msg->mSystemVersionPatch) ); - msg->addU8Fast(_PREHASH_ServerVersion, U8(msg->mSystemVersionServer) ); - msg->addU32Fast(_PREHASH_Flags, msg->mVersionFlags); - msg->nextBlockFast(_PREHASH_TokenBlock); - msg->addUUIDFast(_PREHASH_Token, token); - msg->sendMessage(msg->getSender()); -} - -void process_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Message template checksum request received from " - << msg->getSender() << llendl; - send_template_reply(msg, LLUUID::null); -} - -void process_secured_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Secured message template checksum request received from " - << msg->getSender() << llendl; - LLUUID token; - msg->getUUIDFast(_PREHASH_TokenBlock, _PREHASH_Token, token); - send_template_reply(msg, token); -} +/* void process_log_messages(LLMessageSystem* msg, void**) { U8 log_message; @@ -3116,7 +2291,7 @@ void process_log_messages(LLMessageSystem* msg, void**) llinfos << "Stopping logging via message" << llendl; msg->stopLogging(); } -} +}*/ // Make circuit trusted if the MD5 Digest matches, otherwise // notify remote end that they are not trusted. @@ -3349,15 +2524,14 @@ BOOL start_messaging_system( //gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder); gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumRequest, process_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_SecuredTemplateChecksumRequest, process_secured_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); + //gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_CreateTrustedCircuit, process_create_trusted_circuit, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_DenyTrustedCircuit, process_deny_trusted_circuit, NULL); + gMessageSystem->setHandlerFunc("Error", LLMessageSystem::processError); // We can hand this to the null_message_callback since it is a // trusted message, so it will automatically be denied if it isn't @@ -3471,11 +2645,11 @@ void LLMessageSystem::summarizeLogs(std::ostream& str) snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */ str << buffer << std:: endl; F32 avg; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if(mt->mTotalDecoded > 0) { avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded; @@ -3549,11 +2723,11 @@ void LLMessageSystem::dumpReceiveCounts() if(mNumMessageCounts > 0) { llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if (mt->mReceiveCount > 0) { llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes @@ -3601,8 +2775,10 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } // TODO: babbage: remove this horror mMessageBuilder->setBuilt(FALSE); @@ -3616,7 +2792,7 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii) { count--; inptr++; @@ -3667,19 +2843,20 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() -S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size) +S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) { - - if ((*data_size ) < LL_PACKET_ID_SIZE) + if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE) { - llwarns << "zeroCodeExpand() called with data_size of " << *data_size << llendl; + llwarns << "zeroCodeExpand() called with data_size of " << *data_size + << llendl; } - + mTotalBytesIn += *data_size; - if (!(*data[0] & LL_ZERO_CODE_FLAG)) // if we're not zero-coded, just go 'way + // if we're not zero-coded, simply return. + if (!(*data[0] & LL_ZERO_CODE_FLAG)) { - return(0); + return 0; } S32 in_size = *data_size; @@ -3695,7 +2872,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size) // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii) { count--; *outptr++ = *inptr++; @@ -3789,14 +2966,16 @@ bool LLMessageSystem::callHandler(const char *name, bool trustedSource, LLMessageSystem* msg) { name = gMessageStringTable.getString(name); - LLMessageTemplate* msg_template = mMessageTemplates[(char*)name]; - if (!msg_template) + message_template_name_map_t::const_iterator iter; + iter = mMessageTemplates.find(name); + if(iter == mMessageTemplates.end()) { llwarns << "LLMessageSystem::callHandler: unknown message " << name << llendl; return false; } - + + const LLMessageTemplate* msg_template = iter->second; if (msg_template->isBanned(trustedSource)) { llwarns << "LLMessageSystem::callHandler: banned message " @@ -3852,14 +3031,13 @@ BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const BOOL LLMessageSystem::isMessageFast(const char *msg) { - return(msg == mMessageReader->getMessageName()); + return msg == mMessageReader->getMessageName(); } char* LLMessageSystem::getMessageName() { - const char* name = mMessageReader->getMessageName(); - return name[0] == '\0'? NULL : const_cast<char*>(name); + return const_cast<char*>(mMessageReader->getMessageName()); } const LLUUID& LLMessageSystem::getSenderID() const @@ -4188,120 +3366,6 @@ void LLMessageSystem::dumpPacketToLog() } } -//static -BOOL LLMessageSystem::isTemplateConfirmed() -{ - return gMessageSystem->mTemplateConfirmed; -} - -//static -BOOL LLMessageSystem::doesTemplateMatch() -{ - if (!isTemplateConfirmed()) - { - return FALSE; - } - return gMessageSystem->mTemplateMatches; -} - -//static -void LLMessageSystem::sendMessageTemplateChecksum(const LLHost ¤tHost) -{ - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->mTemplateMatches = FALSE; - gMessageSystem->newMessageFast(_PREHASH_TemplateChecksumRequest); - // Don't use ping-based retry - gMessageSystem->sendReliable(currentHost, 40, FALSE, 3, NULL, NULL); -} - -//static -void LLMessageSystem::processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - U32 remote_template_checksum = 0; - msg->getU32Fast(_PREHASH_DataBlock, _PREHASH_Checksum, remote_template_checksum); - msg->mTemplateConfirmed = TRUE; - if ((remote_template_checksum) != msg->mMessageFileChecksum) - { - llwarns << "out of sync message template!" << llendl; - - msg->mTemplateMatches = FALSE; - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage(msg->getSender()); - return; - } - - msg->mTemplateMatches = TRUE; - llinfos << "According to " << msg->getSender() - << " the message template is current!" - << llendl; -} - -//static -void LLMessageSystem::sendSecureMessageTemplateChecksum(const LLHost& host) -{ - // generate an token for use during template checksum requests to - // prevent DOS attacks from injected bad template checksum replies. - LLUUID *template_tokenp = new LLUUID; - template_tokenp->generate(); - lldebugs << "random token: " << *template_tokenp << llendl; - - // register the handler for the reply while saving off template_token - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, - LLMessageSystem::processSecureTemplateChecksumReply, - (void**)template_tokenp); - - // send checksum request - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest); - gMessageSystem->nextBlockFast(_PREHASH_TokenBlock); - gMessageSystem->addUUIDFast(_PREHASH_Token, *template_tokenp); - gMessageSystem->sendReliable(host); -} - -//static -void LLMessageSystem::processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - // copy the token out into the stack and delete allocated memory - LLUUID template_token = *((LLUUID*)user_data); - delete user_data; - - LLUUID received_token; - msg->getUUID("TokenBlock", "Token", received_token); - - if(received_token != template_token) - { - llwarns << "Incorrect token in template checksum reply: " - << received_token << llendl; - //return do_normal_idle; - return; - } - - U32 remote_template_checksum = 0; - U8 major_version = 0; - U8 minor_version = 0; - U8 patch_version = 0; - U8 server_version = 0; - U32 flags = 0x0; - msg->getU32("DataBlock", "Checksum", remote_template_checksum); - msg->getU8 ("DataBlock", "MajorVersion", major_version); - msg->getU8 ("DataBlock", "MinorVersion", minor_version); - msg->getU8 ("DataBlock", "PatchVersion", patch_version); - msg->getU8 ("DataBlock", "ServerVersion", server_version); - msg->getU32("DataBlock", "Flags", flags); - - msg->mTemplateConfirmed = TRUE; - if (remote_template_checksum != gMessageSystem->mMessageFileChecksum) - { - llinfos << "Message template out of sync" << llendl; - msg->mTemplateMatches = FALSE; - } - else - { - msg->mTemplateMatches = TRUE; - } -} //static U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update) @@ -4352,14 +3416,32 @@ typedef std::map<const char*, LLMessageBuilder*> BuilderMap; void LLMessageSystem::newMessageFast(const char *name) { - if(LLMessageConfig::isMessageBuiltTemplate(name)) + LLMessageConfig::Flavor message_flavor = + LLMessageConfig::getMessageFlavor(name); + LLMessageConfig::Flavor server_flavor = + LLMessageConfig::getServerDefaultFlavor(); + + if(message_flavor == LLMessageConfig::TEMPLATE_FLAVOR) { mMessageBuilder = mTemplateMessageBuilder; } - else + else if (message_flavor == LLMessageConfig::LLSD_FLAVOR) { mMessageBuilder = mLLSDMessageBuilder; } + // NO_FLAVOR + else + { + if (server_flavor == LLMessageConfig::LLSD_FLAVOR) + { + mMessageBuilder = mLLSDMessageBuilder; + } + // TEMPLATE_FLAVOR or NO_FLAVOR + else + { + mMessageBuilder = mTemplateMessageBuilder; + } + } mSendReliable = FALSE; mMessageBuilder->newMessage(name); } @@ -4822,6 +3904,10 @@ void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u, void LLMessageSystem::getStringFast(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + } mMessageReader->getString(block, var, buffer_size, s, blocknum); } diff --git a/linden/indra/llmessage/message.h b/linden/indra/llmessage/message.h index 0a55485..6c834f7 100644 --- a/linden/indra/llmessage/message.h +++ b/linden/indra/llmessage/message.h @@ -1,5 +1,5 @@ /** - * @FILE message.h + * @file message.h * @brief LLMessageSystem class header file * * Copyright (c) 2001-2007, Linden Research, Inc. @@ -50,11 +50,13 @@ #include "lltimer.h" #include "llpacketring.h" #include "llhost.h" +#include "llhttpclient.h" #include "llhttpnode.h" #include "llpacketack.h" #include "message_prehash.h" #include "llstl.h" #include "llmsgvariabletype.h" +#include "llmsgvariabletype.h" const U32 MESSAGE_MAX_STRINGS_LENGTH = 64; const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192; @@ -126,7 +128,16 @@ const U8 LL_RELIABLE_FLAG = 0x40; const U8 LL_RESENT_FLAG = 0x20; const U8 LL_ACK_FLAG = 0x10; -const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; // 4 bytes id + 1 byte message name (high) +// 1 byte flags, 4 bytes sequence, 1 byte offset + 1 byte message name (high) +const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; +enum EPacketHeaderLayout +{ + PHL_FLAGS = 0, + PHL_PACKET_ID = 1, + PHL_OFFSET = 5, + PHL_NAME = 6 +}; + const S32 LL_DEFAULT_RELIABLE_RETRIES = 3; const F32 LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS = 1.f; @@ -155,8 +166,6 @@ class LLUUID; class LLMessageSystem; class LLPumpIO; -// message data pieces are used to collect the data called for by the message template - // message system exceptional condition handlers. enum EMessageException { @@ -168,6 +177,7 @@ enum EMessageException typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException); +// message data pieces are used to collect the data called for by the message template class LLMsgData; class LLMsgBlkData; class LLMessageTemplate; @@ -180,6 +190,8 @@ class LLMessageReader; class LLTemplateMessageReader; class LLSDMessageReader; + + class LLUseCircuitCodeResponder { LOG_CLASS(LLMessageSystem); @@ -204,7 +216,6 @@ class LLMessageSystem // Set this flag to TRUE when you want *very* verbose logs. BOOL mVerboseLog; - U32 mMessageFileChecksum; F32 mMessageFileVersionNumber; typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; @@ -450,8 +461,11 @@ public: void forwardReliable(const LLHost &host); void forwardReliable(const U32 circuit_code); + LLHTTPClient::ResponderPtr createResponder(const std::string& name); S32 sendMessage(const LLHost &host); S32 sendMessage(const U32 circuit); + S32 sendMessage(const LLHost &host, const char* name, + const LLSD& message); // BOOL decodeData(const U8 *buffer, const LLHost &host); @@ -528,6 +542,15 @@ public: // The actual sending is done by reallySendDenyTrustedCircuit() void sendDenyTrustedCircuit(const LLHost &host); + /** Return false if host is unknown or untrusted */ + bool isTrustedSender(const LLHost& host) const; + + /** Return false true if name is unknown or untrusted */ + bool isTrustedMessage(const std::string& name) const; + + /** Return false true if name is unknown or trusted */ + bool isUntrustedMessage(const std::string& name) const; + private: // A list of the circuits that need to be sent DenyTrustedCircuit messages. typedef std::set<LLHost> host_set_t; @@ -537,7 +560,6 @@ private: // related to sendDenyTrustedCircuit() void reallySendDenyTrustedCircuit(const LLHost &host); - public: // Use this to establish trust to and from a host. This blocks // until trust has been established, and probably should only be @@ -594,15 +616,6 @@ public: void setMaxMessageTime(const F32 seconds); // Max time to process messages before warning and dumping (neg to disable) void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable) - // statics - static BOOL isTemplateConfirmed(); - static BOOL doesTemplateMatch(); - static void sendMessageTemplateChecksum(const LLHost&); - static void processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); - static void sendSecureMessageTemplateChecksum(const LLHost&); - static void processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds @@ -613,6 +626,7 @@ public: //static void processAssignCircuitCode(LLMessageSystem* msg, void**); static void processAddCircuitCode(LLMessageSystem* msg, void**); static void processUseCircuitCode(LLMessageSystem* msg, void**); + static void processError(LLMessageSystem* msg, void**); // dispatch llsd message to http node tree static void dispatch(const std::string& msg_name, @@ -623,13 +637,33 @@ public: void setMessageBans(const LLSD& trusted, const LLSD& untrusted); + /** + * @brief send an error message to the host. This is a helper method. + * + * @param host Destination host. + * @param agent_id Destination agent id (may be null) + * @param code An HTTP status compatible error code. + * @param token A specific short string based message + * @param id The transactionid/uniqueid/sessionid whatever. + * @param system The hierarchical path to the system (255 bytes) + * @param message Human readable message (1200 bytes) + * @param data Extra info. + * @return Returns value returned from sendReliable(). + */ + S32 sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data); + // Check UDP messages and pump http_pump to receive HTTP messages. bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump); private: - // data used in those internal handlers - BOOL mTemplateConfirmed; - BOOL mTemplateMatches; // The mCircuitCodes is a map from circuit codes to session // ids. This allows us to verify sessions on connect. @@ -639,7 +673,7 @@ private: // Viewers need to track a process session in order to make sure // that no one gives them a bad circuit code. LLUUID mSessionID; - + void addTemplate(LLMessageTemplate *templatep); void clearReceiveState(); BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template ); @@ -710,6 +744,10 @@ private: bool callHandler(const char *name, bool trustedSource, LLMessageSystem* msg); + + + /** Find, create or revive circuit for host as needed */ + LLCircuitData* findCircuit(const LLHost& host, bool resetPacketId); }; diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp index 3e26726..fbe5c33 100644 --- a/linden/indra/llmessage/message_prehash.cpp +++ b/linden/indra/llmessage/message_prehash.cpp @@ -27,14 +27,14 @@ */ /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ #include "linden_common.h" #include "message.h" -F32 gPrehashVersionNumber = 1.053f; +F32 gPrehashVersionNumber = 2.000f; char * _PREHASH_X; char * _PREHASH_Y; @@ -59,7 +59,6 @@ char * _PREHASH_ScriptAnswerYes; char * _PREHASH_PartnerID; char * _PREHASH_DirLandQuery; char * _PREHASH_TeleportStart; -char * _PREHASH_LogMessages; char * _PREHASH_AboutText; char * _PREHASH_VisualParam; char * _PREHASH_GroupPrims; @@ -67,10 +66,8 @@ char * _PREHASH_SelectedPrims; char * _PREHASH_ID; char * _PREHASH_UUIDNameRequest; char * _PREHASH_UUIDGroupNameRequest; -char * _PREHASH_MoneyTransactionsRequest; char * _PREHASH_GroupAccountTransactionsRequest; char * _PREHASH_MapNameRequest; -char * _PREHASH_MailTaskSimRequest; char * _PREHASH_UpdateSimulator; char * _PREHASH_BillableFactor; char * _PREHASH_ObjectBonusFactor; @@ -80,7 +77,6 @@ char * _PREHASH_ConfirmEnableSimulator; char * _PREHASH_LayerType; char * _PREHASH_OwnerRole; char * _PREHASH_ParcelOverlay; -char * _PREHASH_AdjustBalance; char * _PREHASH_GroupOwned; char * _PREHASH_IP; char * _PREHASH_ChatFromViewer; @@ -115,8 +111,8 @@ char * _PREHASH_SensedData; char * _PREHASH_UpdateBlock; char * _PREHASH_ClassifiedGodDelete; char * _PREHASH_ObjectGrabUpdate; -char * _PREHASH_TaxDate; char * _PREHASH_LocationPos; +char * _PREHASH_TaxDate; char * _PREHASH_StartDateTime; char * _PREHASH_ObjectUpdateCached; char * _PREHASH_Packets; @@ -148,14 +144,11 @@ char * _PREHASH_AABBMin; char * _PREHASH_ClassifiedFlags; char * _PREHASH_ControlFlags; char * _PREHASH_TeleportRequest; -char * _PREHASH_SpaceLocationTeleportRequest; -char * _PREHASH_LeaderBoardRequest; char * _PREHASH_ScriptTeleportRequest; +char * _PREHASH_EstateCovenantRequest; char * _PREHASH_DateUTC; char * _PREHASH_TaskIDs; -char * _PREHASH_EstateCovenantRequest; char * _PREHASH_RequestResult; -char * _PREHASH_ReputationAgentAssign; char * _PREHASH_CanAcceptAgents; char * _PREHASH_ObjectSaleInfo; char * _PREHASH_KillChildAgents; @@ -167,7 +160,6 @@ char * _PREHASH_InfoBlock; char * _PREHASH_OwnershipCost; char * _PREHASH_AvatarNotesUpdate; char * _PREHASH_PID; -char * _PREHASH_TimeString; char * _PREHASH_DirPopularReply; char * _PREHASH_TerrainHeightRange00; char * _PREHASH_SimData; @@ -193,7 +185,6 @@ char * _PREHASH_Objects; char * _PREHASH_URL; char * _PREHASH_CreationDate; char * _PREHASH_JointPivot; -char * _PREHASH_RateeID; char * _PREHASH_FPS; char * _PREHASH_HasTelehub; char * _PREHASH_PathEnd; @@ -218,7 +209,6 @@ char * _PREHASH_GroupNoticesListReply; char * _PREHASH_ParcelAccessListReply; char * _PREHASH_RpcChannelReply; char * _PREHASH_RegionPresenceResponse; -char * _PREHASH_AgentPresenceResponse; char * _PREHASH_CharterMember; char * _PREHASH_EdgeData; char * _PREHASH_NameData; @@ -232,14 +222,12 @@ char * _PREHASH_Mag; char * _PREHASH_ParcelPropertiesRequestByID; char * _PREHASH_ObjectLink; char * _PREHASH_RpcScriptReplyInbound; -char * _PREHASH_BoardData; char * _PREHASH_RezData; char * _PREHASH_RemoveInventoryObjects; char * _PREHASH_GroupProposalBallot; char * _PREHASH_RPCServerIP; char * _PREHASH_Far; char * _PREHASH_GodSessionID; -char * _PREHASH_ViewerDigest; char * _PREHASH_FLAboutText; char * _PREHASH_RegionHandshakeReply; char * _PREHASH_GroupActiveProposalItemReply; @@ -251,7 +239,6 @@ char * _PREHASH_Set; char * _PREHASH_NewName; char * _PREHASH_Key; char * _PREHASH_AgentID; -char * _PREHASH_OnlineStatusRequest; char * _PREHASH_EventNotificationRemoveRequest; char * _PREHASH_NewFolderID; char * _PREHASH_Arc; @@ -263,7 +250,6 @@ char * _PREHASH_Top; char * _PREHASH_MiscStats; char * _PREHASH_ImageID; char * _PREHASH_DataPacket; -char * _PREHASH_ObjectDehinge; char * _PREHASH_You; char * _PREHASH_ScriptControlChange; char * _PREHASH_LoadURL; @@ -280,9 +266,9 @@ char * _PREHASH_Contribution; char * _PREHASH_SetGroupContribution; char * _PREHASH_Offline; char * _PREHASH_AgentIsNowWearing; -char * _PREHASH_SecPerDay; char * _PREHASH_Members; char * _PREHASH_FailedResends; +char * _PREHASH_SecPerDay; char * _PREHASH_CameraCenter; char * _PREHASH_CameraLeftAxis; char * _PREHASH_ExBlock; @@ -290,7 +276,6 @@ char * _PREHASH_Channel; char * _PREHASH_NetTest; char * _PREHASH_DiscardLevel; char * _PREHASH_LayerID; -char * _PREHASH_RatorID; char * _PREHASH_GrabOffset; char * _PREHASH_SimPort; char * _PREHASH_PricePerMeter; @@ -310,21 +295,16 @@ char * _PREHASH_SitName; char * _PREHASH_RegionsVisited; char * _PREHASH_DirClassifiedReply; char * _PREHASH_AvatarClassifiedReply; -char * _PREHASH_ReputationIndividualReply; char * _PREHASH_MediaURL; char * _PREHASH_CompleteAgentMovement; -char * _PREHASH_SpaceIP; char * _PREHASH_ClassifiedID; char * _PREHASH_LocalID; +char * _PREHASH_SpaceIP; char * _PREHASH_RemoveItem; char * _PREHASH_LogFailedMoneyTransaction; char * _PREHASH_ViewerStartAuction; char * _PREHASH_StartAuction; -char * _PREHASH_NameValueName; -char * _PREHASH_AngVelX; char * _PREHASH_DuplicateFlags; -char * _PREHASH_AngVelY; -char * _PREHASH_AngVelZ; char * _PREHASH_TextColor; char * _PREHASH_SlaveID; char * _PREHASH_Charter; @@ -335,21 +315,16 @@ char * _PREHASH_ParcelAuctions; char * _PREHASH_OwnerIsGroup; char * _PREHASH_NameValuePair; char * _PREHASH_RemoveNameValuePair; -char * _PREHASH_GetNameValuePair; char * _PREHASH_BulkUpdateInventory; char * _PREHASH_UpdateTaskInventory; char * _PREHASH_RemoveTaskInventory; char * _PREHASH_MoveTaskInventory; char * _PREHASH_RequestTaskInventory; char * _PREHASH_ReplyTaskInventory; -char * _PREHASH_DeclineInventory; char * _PREHASH_AggregatePermInventory; -char * _PREHASH_SimulatorInfo; -char * _PREHASH_MoneyTransactionsReply; char * _PREHASH_GroupAccountTransactionsReply; -char * _PREHASH_MailTaskSimReply; +char * _PREHASH_SimulatorInfo; char * _PREHASH_WearableData; -char * _PREHASH_StatisticsData; char * _PREHASH_Enabled; char * _PREHASH_Savings; char * _PREHASH_SimulatorLoad; @@ -361,15 +336,12 @@ char * _PREHASH_JoinGroupRequest; char * _PREHASH_LeaveGroupRequest; char * _PREHASH_InviteGroupRequest; char * _PREHASH_LiveHelpGroupRequest; -char * _PREHASH_ServerVersion; char * _PREHASH_PriceParcelClaimFactor; char * _PREHASH_BillableArea; char * _PREHASH_ObjectID; char * _PREHASH_ObjectFlagUpdate; char * _PREHASH_GroupRoleUpdate; char * _PREHASH_RequestInventoryAsset; -char * _PREHASH_RedoLand; -char * _PREHASH_TravelAccess; char * _PREHASH_ChangedGrid; char * _PREHASH_AgentDropGroup; char * _PREHASH_Details; @@ -402,7 +374,6 @@ char * _PREHASH_Timestamp; char * _PREHASH_GlobalPos; char * _PREHASH_GrabOffsetInitial; char * _PREHASH_IsTrial; -char * _PREHASH_FinalizeLogout; char * _PREHASH_ObjectDuplicateOnRay; char * _PREHASH_GroupMembershipCount; char * _PREHASH_MethodData; @@ -438,32 +409,26 @@ char * _PREHASH_TaskData; char * _PREHASH_SimWideMaxPrims; char * _PREHASH_TotalPrims; char * _PREHASH_ProfileBegin; -char * _PREHASH_MoneyDetailsRequest; char * _PREHASH_Request; char * _PREHASH_GroupAccountDetailsRequest; char * _PREHASH_GroupActiveProposalsRequest; char * _PREHASH_StringValue; -char * _PREHASH_ClosestSimulator; char * _PREHASH_Version; char * _PREHASH_OtherCount; char * _PREHASH_MemberCount; char * _PREHASH_ChatData; char * _PREHASH_IsGroupOwned; char * _PREHASH_EnergyEfficiency; -char * _PREHASH_MaxPlace; char * _PREHASH_PickInfoUpdate; char * _PREHASH_PickDelete; char * _PREHASH_ScriptReset; char * _PREHASH_Requester; char * _PREHASH_ForSale; char * _PREHASH_NearestLandingRegionReply; -char * _PREHASH_RecordAgentPresence; -char * _PREHASH_EraseAgentPresence; char * _PREHASH_ParcelID; char * _PREHASH_Godlike; char * _PREHASH_TotalDebits; char * _PREHASH_Direction; -char * _PREHASH_Appearance; char * _PREHASH_HealthData; char * _PREHASH_LeftAxis; char * _PREHASH_LocationBlock; @@ -471,41 +436,31 @@ char * _PREHASH_ObjectImage; char * _PREHASH_TerrainStartHeight00; char * _PREHASH_TerrainStartHeight01; char * _PREHASH_TerrainStartHeight10; -char * _PREHASH_ObjectHinge; char * _PREHASH_TerrainStartHeight11; -char * _PREHASH_MetersPerGrid; char * _PREHASH_WaterHeight; char * _PREHASH_FetchInventoryReply; -char * _PREHASH_MoneySummaryReply; char * _PREHASH_GroupAccountSummaryReply; char * _PREHASH_AttachedSound; char * _PREHASH_ParamInUse; char * _PREHASH_GodKickUser; char * _PREHASH_PickName; char * _PREHASH_TaskName; -char * _PREHASH_SubType; char * _PREHASH_ObjectCount; char * _PREHASH_RegionPresenceRequestByHandle; char * _PREHASH_RezSingleAttachmentFromInv; char * _PREHASH_ChildAgentUpdate; -char * _PREHASH_ToID; -char * _PREHASH_ViewerPort; char * _PREHASH_IsOwnerGroup; char * _PREHASH_AgentHeightWidth; char * _PREHASH_VerticalAngle; char * _PREHASH_WearableType; char * _PREHASH_AggregatePermNextOwner; char * _PREHASH_ShowInList; -char * _PREHASH_PositionSuggestion; char * _PREHASH_UpdateParcel; -char * _PREHASH_ClearAgentSessions; char * _PREHASH_SetAlwaysRun; char * _PREHASH_NVPair; char * _PREHASH_SearchType; char * _PREHASH_ObjectSpinStart; char * _PREHASH_UseEstateSun; -char * _PREHASH_LogoutBlock; -char * _PREHASH_RelayLogControl; char * _PREHASH_RegionID; char * _PREHASH_AbuseRegionID; char * _PREHASH_Creator; @@ -514,14 +469,12 @@ char * _PREHASH_DirEventsReply; char * _PREHASH_EventInfoReply; char * _PREHASH_UserInfoReply; char * _PREHASH_PathRadiusOffset; -char * _PREHASH_SessionInfo; char * _PREHASH_TextureData; char * _PREHASH_ChatPass; char * _PREHASH_TargetID; char * _PREHASH_DefaultPayPrice; char * _PREHASH_UserLocation; char * _PREHASH_MaxPrims; -char * _PREHASH_RegionIP; char * _PREHASH_LandmarkID; char * _PREHASH_InitiateDownload; char * _PREHASH_Name; @@ -529,18 +482,13 @@ char * _PREHASH_OtherCleanTime; char * _PREHASH_ParcelSetOtherCleanTime; char * _PREHASH_TeleportPriceExponent; char * _PREHASH_Gain; -char * _PREHASH_VelX; char * _PREHASH_PacketAck; char * _PREHASH_PathSkew; -char * _PREHASH_Negative; -char * _PREHASH_VelY; char * _PREHASH_SimulatorShutdownRequest; char * _PREHASH_NearestLandingRegionRequest; -char * _PREHASH_VelZ; char * _PREHASH_OtherID; char * _PREHASH_MemberID; char * _PREHASH_MapLayerRequest; -char * _PREHASH_PatchVersion; char * _PREHASH_ObjectScale; char * _PREHASH_TargetIP; char * _PREHASH_Redo; @@ -583,27 +531,20 @@ char * _PREHASH_Perp; char * _PREHASH_Code; char * _PREHASH_InvType; char * _PREHASH_AgentFOV; -char * _PREHASH_BulkMoneyTransfer; char * _PREHASH_Audible; char * _PREHASH_AuctionData; char * _PREHASH_IDBlock; -char * _PREHASH_ReputationData; char * _PREHASH_West; char * _PREHASH_Undo; char * _PREHASH_TotalNumItems; char * _PREHASH_Info; char * _PREHASH_Area; -char * _PREHASH_Behavior; char * _PREHASH_SimCrashed; char * _PREHASH_Text; -char * _PREHASH_AgentToNewRegion; char * _PREHASH_PriceGroupCreate; char * _PREHASH_ObjectShape; char * _PREHASH_GroupRoleDataReply; -char * _PREHASH_PosX; -char * _PREHASH_PosY; char * _PREHASH_MuteCRC; -char * _PREHASH_PosZ; char * _PREHASH_Size; char * _PREHASH_FromAddress; char * _PREHASH_Body; @@ -621,16 +562,14 @@ char * _PREHASH_Stat; char * _PREHASH_SoundID; char * _PREHASH_Item; char * _PREHASH_User; -char * _PREHASH_RemoteInfos; char * _PREHASH_Prey; -char * _PREHASH_UsecSinceStart; char * _PREHASH_RayStart; +char * _PREHASH_UsecSinceStart; char * _PREHASH_ParcelData; char * _PREHASH_CameraUpAxis; char * _PREHASH_ScriptDialog; char * _PREHASH_MasterParcelData; char * _PREHASH_Invalid; -char * _PREHASH_MinPlace; char * _PREHASH_ProfileCurve; char * _PREHASH_ParcelAccessListUpdate; char * _PREHASH_MuteListUpdate; @@ -649,14 +588,12 @@ char * _PREHASH_DeRezObject; char * _PREHASH_IsTemporary; char * _PREHASH_InsigniaID; char * _PREHASH_CheckFlags; -char * _PREHASH_TransferPriority; char * _PREHASH_EventID; char * _PREHASH_Selected; char * _PREHASH_FromAgentId; char * _PREHASH_Type; char * _PREHASH_ChatType; char * _PREHASH_ReportData; -char * _PREHASH_LeaderBoardData; char * _PREHASH_RequestBlock; char * _PREHASH_GrantData; char * _PREHASH_DetachAttachmentIntoInv; @@ -672,12 +609,9 @@ char * _PREHASH_OnlineNotification; char * _PREHASH_OfflineNotification; char * _PREHASH_SendPostcard; char * _PREHASH_RequestFlags; -char * _PREHASH_MoneyHistoryRequest; -char * _PREHASH_MoneySummaryRequest; char * _PREHASH_GroupAccountSummaryRequest; char * _PREHASH_GroupVoteHistoryRequest; char * _PREHASH_ParamValue; -char * _PREHASH_Checksum; char * _PREHASH_MaxAgents; char * _PREHASH_CreateNewOutfitAttachments; char * _PREHASH_RegionHandle; @@ -687,12 +621,10 @@ char * _PREHASH_AvatarInterestsUpdate; char * _PREHASH_GroupNoticeID; char * _PREHASH_ParcelName; char * _PREHASH_PriceObjectRent; -char * _PREHASH_ConnectAgentToUserserver; -char * _PREHASH_ConnectToUserserver; char * _PREHASH_OfferCallingCard; -char * _PREHASH_AgentAccess; char * _PREHASH_AcceptCallingCard; char * _PREHASH_DeclineCallingCard; +char * _PREHASH_AgentAccess; char * _PREHASH_DataHomeLocationReply; char * _PREHASH_EventLocationReply; char * _PREHASH_TerseDateID; @@ -710,8 +642,8 @@ char * _PREHASH_Invoice; char * _PREHASH_IntervalDays; char * _PREHASH_PathScaleX; char * _PREHASH_FromTaskID; -char * _PREHASH_TimeInfo; char * _PREHASH_PathScaleY; +char * _PREHASH_TimeInfo; char * _PREHASH_PublicCount; char * _PREHASH_ParcelJoin; char * _PREHASH_GroupRolesCount; @@ -736,7 +668,6 @@ char * _PREHASH_NearestLandingRegionUpdated; char * _PREHASH_PassToAgent; char * _PREHASH_PreyAgent; char * _PREHASH_SimStats; -char * _PREHASH_Options; char * _PREHASH_LogoutReply; char * _PREHASH_FeatureDisabled; char * _PREHASH_ObjectLocalID; @@ -747,10 +678,8 @@ char * _PREHASH_Destination; char * _PREHASH_MasterID; char * _PREHASH_TransferData; char * _PREHASH_WantToMask; -char * _PREHASH_AvatarData; char * _PREHASH_ParcelSelectObjects; char * _PREHASH_ExtraParams; -char * _PREHASH_LogLogin; char * _PREHASH_CreatorID; char * _PREHASH_Summary; char * _PREHASH_BuyObjectInventory; @@ -791,8 +720,8 @@ char * _PREHASH_ButtonLabel; char * _PREHASH_GranterID; char * _PREHASH_WantToText; char * _PREHASH_ReportType; -char * _PREHASH_DataBlock; char * _PREHASH_SimulatorReady; +char * _PREHASH_DataBlock; char * _PREHASH_AnimationSourceList; char * _PREHASH_SubscribeLoad; char * _PREHASH_UnsubscribeLoad; @@ -819,9 +748,8 @@ char * _PREHASH_Header; char * _PREHASH_GestureFlags; char * _PREHASH_XferID; char * _PREHASH_StatValue; -char * _PREHASH_PickID; char * _PREHASH_TaskID; -char * _PREHASH_GridsPerEdge; +char * _PREHASH_PickID; char * _PREHASH_RayEnd; char * _PREHASH_Throttles; char * _PREHASH_RebakeAvatarTextures; @@ -834,30 +762,24 @@ char * _PREHASH_Access; char * _PREHASH_TitleRoleID; char * _PREHASH_SquareMetersCredit; char * _PREHASH_Filename; -char * _PREHASH_SecuredTemplateChecksumRequest; -char * _PREHASH_TemplateChecksumRequest; -char * _PREHASH_AgentPresenceRequest; char * _PREHASH_ClassifiedInfoRequest; char * _PREHASH_ParcelInfoRequest; char * _PREHASH_ParcelObjectOwnersRequest; char * _PREHASH_TeleportLandmarkRequest; char * _PREHASH_EventInfoRequest; -char * _PREHASH_ChatFromSimulator; -char * _PREHASH_PickInfoRequest; char * _PREHASH_MoneyBalanceRequest; char * _PREHASH_GroupMembersRequest; char * _PREHASH_GroupRoleMembersRequest; +char * _PREHASH_ChatFromSimulator; char * _PREHASH_OldFolderID; char * _PREHASH_UserInfoRequest; char * _PREHASH_TextureID; char * _PREHASH_ProfileURL; char * _PREHASH_Handle; -char * _PREHASH_StartParcelRenameAck; char * _PREHASH_ButtonIndex; char * _PREHASH_GetScriptRunning; char * _PREHASH_SetScriptRunning; char * _PREHASH_Health; -char * _PREHASH_FileID; char * _PREHASH_CircuitInfo; char * _PREHASH_ObjectBuy; char * _PREHASH_ProfileEnd; @@ -882,7 +804,6 @@ char * _PREHASH_PingID; char * _PREHASH_Change; char * _PREHASH_Height; char * _PREHASH_Region; -char * _PREHASH_MoneyHistoryReply; char * _PREHASH_TelehubInfo; char * _PREHASH_StateSave; char * _PREHASH_RoleData; @@ -893,11 +814,10 @@ char * _PREHASH_ParcelGodMarkAsContent; char * _PREHASH_UsePhysics; char * _PREHASH_RegionDenyTransacted; char * _PREHASH_JointType; -char * _PREHASH_TaxEstimate; char * _PREHASH_ObjectTaxEstimate; char * _PREHASH_LightTaxEstimate; -char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_LandTaxEstimate; +char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_GroupTaxEstimate; char * _PREHASH_AvgViewerFPS; char * _PREHASH_Buttons; @@ -929,8 +849,6 @@ char * _PREHASH_WinnerID; char * _PREHASH_ChannelType; char * _PREHASH_NonExemptMembers; char * _PREHASH_Agents; -char * _PREHASH_SimulatorStart; -char * _PREHASH_Enable; char * _PREHASH_MemberData; char * _PREHASH_ToGroupID; char * _PREHASH_ImageNotInDatabase; @@ -938,27 +856,21 @@ char * _PREHASH_StartDate; char * _PREHASH_AnimID; char * _PREHASH_Serial; char * _PREHASH_AbuseRegionName; -char * _PREHASH_ControlPort; char * _PREHASH_ModifyLand; char * _PREHASH_Digest; char * _PREHASH_Victim; char * _PREHASH_Script; -char * _PREHASH_TemplateChecksumReply; char * _PREHASH_PickInfoReply; char * _PREHASH_MoneyBalanceReply; char * _PREHASH_RoutedMoneyBalanceReply; char * _PREHASH_RoleID; char * _PREHASH_RegionInfo; -char * _PREHASH_Sequence; char * _PREHASH_GodUpdateRegionInfo; -char * _PREHASH_LocalX; -char * _PREHASH_LocalY; char * _PREHASH_StartAnim; -char * _PREHASH_Location; char * _PREHASH_Action; +char * _PREHASH_Location; char * _PREHASH_Rights; char * _PREHASH_SearchDir; -char * _PREHASH_Active; char * _PREHASH_TransferRequest; char * _PREHASH_ScriptSensorRequest; char * _PREHASH_MoneyTransferRequest; @@ -969,8 +881,6 @@ char * _PREHASH_Center; char * _PREHASH_SharedData; char * _PREHASH_PSBlock; char * _PREHASH_UUIDNameBlock; -char * _PREHASH_Viewer; -char * _PREHASH_GroupNoticeDelete; char * _PREHASH_GroupTitleUpdate; char * _PREHASH_Method; char * _PREHASH_TouchName; @@ -982,11 +892,9 @@ char * _PREHASH_GodlikeMessage; char * _PREHASH_SystemMessage; char * _PREHASH_BodyRotation; char * _PREHASH_SearchRegions; -char * _PREHASH_Ignore; char * _PREHASH_AnimationData; char * _PREHASH_StatID; char * _PREHASH_ItemID; -char * _PREHASH_AvatarStatisticsReply; char * _PREHASH_ScriptDialogReply; char * _PREHASH_RegionIDAndHandleReply; char * _PREHASH_CameraAtOffset; @@ -1011,7 +919,6 @@ char * _PREHASH_OldItemID; char * _PREHASH_RegionPort; char * _PREHASH_PriceEnergyUnit; char * _PREHASH_Bitmap; -char * _PREHASH_TrackAgentSession; char * _PREHASH_CacheMissType; char * _PREHASH_VFileID; char * _PREHASH_GroupInsigniaID; @@ -1059,7 +966,6 @@ char * _PREHASH_MeanCollisionAlert; char * _PREHASH_CanAcceptTasks; char * _PREHASH_ItemData; char * _PREHASH_AnimationList; -char * _PREHASH_PassObject; char * _PREHASH_Reputation; char * _PREHASH_IntValue; char * _PREHASH_TargetType; @@ -1082,10 +988,8 @@ char * _PREHASH_ParcelBuy; char * _PREHASH_DirFindQueryBackend; char * _PREHASH_DirPlacesQueryBackend; char * _PREHASH_DirClassifiedQueryBackend; -char * _PREHASH_DirPicksQueryBackend; char * _PREHASH_DirLandQueryBackend; char * _PREHASH_DirPopularQueryBackend; -char * _PREHASH_LogoutDemand; char * _PREHASH_HistoryData; char * _PREHASH_SnapshotID; char * _PREHASH_Aspect; @@ -1093,7 +997,6 @@ char * _PREHASH_ParamSize; char * _PREHASH_VoteCast; char * _PREHASH_CastsShadows; char * _PREHASH_EveryoneMask; -char * _PREHASH_SetSunPhase; char * _PREHASH_ObjectSpinUpdate; char * _PREHASH_MaturePublish; char * _PREHASH_UseExistingAsset; @@ -1102,7 +1005,6 @@ char * _PREHASH_ParcelLocalID; char * _PREHASH_TeleportCancel; char * _PREHASH_UnixTime; char * _PREHASH_QueryFlags; -char * _PREHASH_LastExecFroze; char * _PREHASH_AlwaysRun; char * _PREHASH_Bottom; char * _PREHASH_ButtonData; @@ -1121,7 +1023,6 @@ char * _PREHASH_NVPairs; char * _PREHASH_GroupNoticesListRequest; char * _PREHASH_ParcelAccessListRequest; char * _PREHASH_MuteListRequest; -char * _PREHASH_StartPeriod; char * _PREHASH_RpcChannelRequest; char * _PREHASH_LandStatRequest; char * _PREHASH_PlacesQuery; @@ -1149,34 +1050,27 @@ char * _PREHASH_SnapSelection; char * _PREHASH_SoundTrigger; char * _PREHASH_TerrainRaiseLimit; char * _PREHASH_Quorum; -char * _PREHASH_TokenBlock; char * _PREHASH_AgentBlock; char * _PREHASH_CommandBlock; char * _PREHASH_PricePublicObjectDecay; char * _PREHASH_SpawnPointPos; -char * _PREHASH_AttachedSoundCutoffRadius; char * _PREHASH_VolumeDetail; char * _PREHASH_FromAgentName; char * _PREHASH_Range; char * _PREHASH_DirectoryVisibility; char * _PREHASH_PublicIP; char * _PREHASH_TeleportFailed; -char * _PREHASH_OnlineStatusReply; -char * _PREHASH_RequestAvatarInfo; char * _PREHASH_PreloadSound; char * _PREHASH_ScreenshotID; char * _PREHASH_CovenantTimestamp; char * _PREHASH_OldestUnacked; char * _PREHASH_SimulatorIP; -char * _PREHASH_ObjectImport; char * _PREHASH_Value; char * _PREHASH_JointAxisOrAnchor; char * _PREHASH_Test0; char * _PREHASH_Test1; char * _PREHASH_Test2; char * _PREHASH_SunPhase; -char * _PREHASH_Place; -char * _PREHASH_Phase; char * _PREHASH_ParcelDivide; char * _PREHASH_PriceObjectClaim; char * _PREHASH_Field; @@ -1186,7 +1080,6 @@ char * _PREHASH_LiveHelpGroupReply; char * _PREHASH_Score; char * _PREHASH_Image; char * _PREHASH_ObjectClickAction; -char * _PREHASH_Delta; char * _PREHASH_Parameter; char * _PREHASH_Flags; char * _PREHASH_Plane; @@ -1196,26 +1089,24 @@ char * _PREHASH_DirFindQuery; char * _PREHASH_Textures; char * _PREHASH_EventData; char * _PREHASH_Final; +char * _PREHASH_System; char * _PREHASH_TelehubPos; char * _PREHASH_ReportAutosaveCrash; char * _PREHASH_CreateTrustedCircuit; char * _PREHASH_DenyTrustedCircuit; char * _PREHASH_RequestTrustedCircuit; char * _PREHASH_Codec; -char * _PREHASH_Level; char * _PREHASH_Modal; char * _PREHASH_ChildAgentUnknown; char * _PREHASH_LandingType; char * _PREHASH_ScriptRunningReply; -char * _PREHASH_MoneyDetailsReply; char * _PREHASH_Reply; +char * _PREHASH_GroupAccountDetailsReply; char * _PREHASH_TelehubRot; -char * _PREHASH_RequestFriendship; char * _PREHASH_AcceptFriendship; -char * _PREHASH_GroupAccountDetailsReply; +char * _PREHASH_ItemType; char * _PREHASH_DwellInfo; char * _PREHASH_AgentResume; -char * _PREHASH_ItemType; char * _PREHASH_MailFilter; char * _PREHASH_Disconnect; char * _PREHASH_SimPosition; @@ -1242,7 +1133,6 @@ char * _PREHASH_VoteType; char * _PREHASH_CategoryID; char * _PREHASH_Token; char * _PREHASH_AggregatePerms; -char * _PREHASH_StartParcelRemoveAck; char * _PREHASH_ObjectSelect; char * _PREHASH_ForceObjectSelect; char * _PREHASH_Price; @@ -1271,7 +1161,6 @@ char * _PREHASH_Notes; char * _PREHASH_AvatarID; char * _PREHASH_FounderID; char * _PREHASH_EndPointID; -char * _PREHASH_StipendEstimate; char * _PREHASH_LocationLookAt; char * _PREHASH_Sound; char * _PREHASH_Cover; @@ -1291,12 +1180,12 @@ char * _PREHASH_ProfileHollow; char * _PREHASH_GroupRoleChanges; char * _PREHASH_Count; char * _PREHASH_South; -char * _PREHASH_Entry; char * _PREHASH_ObjectUpdateCompressed; char * _PREHASH_MuteFlags; char * _PREHASH_Group; char * _PREHASH_AgentPause; char * _PREHASH_LanguagesText; +char * _PREHASH_Error; char * _PREHASH_InternalScriptMail; char * _PREHASH_FindAgent; char * _PREHASH_AgentData; @@ -1305,7 +1194,6 @@ char * _PREHASH_AssetBlock; char * _PREHASH_AcceptNotices; char * _PREHASH_SetGroupAcceptNotices; char * _PREHASH_CloseCircuit; -char * _PREHASH_LogControl; char * _PREHASH_TeleportFinish; char * _PREHASH_PathRevolutions; char * _PREHASH_ClassifiedInfoReply; @@ -1322,7 +1210,6 @@ char * _PREHASH_DataHomeLocationRequest; char * _PREHASH_EventNotificationAddRequest; char * _PREHASH_ParcelDwellRequest; char * _PREHASH_EventLocationRequest; -char * _PREHASH_EndPeriod; char * _PREHASH_SetStartLocationRequest; char * _PREHASH_QueryStart; char * _PREHASH_EjectData; @@ -1335,7 +1222,6 @@ char * _PREHASH_ParcelRelease; char * _PREHASH_VFileType; char * _PREHASH_EjectGroupMemberReply; char * _PREHASH_ImageData; -char * _PREHASH_SpaceServerSimulatorTimeMessage; char * _PREHASH_SimulatorViewerTimeMessage; char * _PREHASH_Rotation; char * _PREHASH_Selection; @@ -1343,7 +1229,6 @@ char * _PREHASH_TransactionData; char * _PREHASH_OperationData; char * _PREHASH_ExpirationDate; char * _PREHASH_ParcelDeedToGroup; -char * _PREHASH_DirPicksReply; char * _PREHASH_AvatarPicksReply; char * _PREHASH_GroupTitlesReply; char * _PREHASH_AgentInfo; @@ -1354,8 +1239,8 @@ char * _PREHASH_PassPrice; char * _PREHASH_SourceID; char * _PREHASH_ChangeUserRights; char * _PREHASH_TeleportFlags; -char * _PREHASH_AssetData; char * _PREHASH_SlaveParcelData; +char * _PREHASH_AssetData; char * _PREHASH_MultipleObjectUpdate; char * _PREHASH_ObjectUpdate; char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1371,7 +1256,6 @@ char * _PREHASH_TaskLocalID; char * _PREHASH_ClaimDate; char * _PREHASH_MergeParcel; char * _PREHASH_Priority; -char * _PREHASH_Building; char * _PREHASH_QueryText; char * _PREHASH_GroupNoticeAdd; char * _PREHASH_ReturnType; @@ -1381,7 +1265,6 @@ char * _PREHASH_HeaderData; char * _PREHASH_RequestMultipleObjects; char * _PREHASH_RetrieveInstantMessages; char * _PREHASH_OpenCircuit; -char * _PREHASH_SecureSessionID; char * _PREHASH_CrossedRegion; char * _PREHASH_DirGroupsReply; char * _PREHASH_AvatarGroupsReply; @@ -1392,18 +1275,14 @@ char * _PREHASH_Position; char * _PREHASH_ParentEstate; char * _PREHASH_EstateName; char * _PREHASH_MuteName; -char * _PREHASH_StartParcelRename; -char * _PREHASH_BulkParcelRename; char * _PREHASH_ParcelRename; char * _PREHASH_ViewerFilename; -char * _PREHASH_Positive; char * _PREHASH_UserReportInternal; char * _PREHASH_AvatarPropertiesRequest; char * _PREHASH_ParcelPropertiesRequest; char * _PREHASH_GroupProfileRequest; char * _PREHASH_AgentDataUpdateRequest; char * _PREHASH_PriceObjectScaleFactor; -char * _PREHASH_DirPicksQuery; char * _PREHASH_OpenEnrollment; char * _PREHASH_GroupData; char * _PREHASH_RequestGodlikePowers; @@ -1414,7 +1293,6 @@ char * _PREHASH_Controls; char * _PREHASH_FirstDetachAll; char * _PREHASH_EstateID; char * _PREHASH_ImprovedInstantMessage; -char * _PREHASH_AgentQuit; char * _PREHASH_CheckParcelSales; char * _PREHASH_ParcelSales; char * _PREHASH_CurrentInterval; @@ -1431,12 +1309,8 @@ char * _PREHASH_OwnerIDs; char * _PREHASH_SystemKickUser; char * _PREHASH_TransactionTime; char * _PREHASH_TimeToLive; -char * _PREHASH_StartParcelRemove; -char * _PREHASH_BulkParcelRemove; char * _PREHASH_OldAgentID; -char * _PREHASH_BonusEstimate; char * _PREHASH_MusicURL; -char * _PREHASH_CompleteLure; char * _PREHASH_ParcelPrimBonus; char * _PREHASH_EjectUser; char * _PREHASH_CoarseLocationUpdate; @@ -1469,10 +1343,6 @@ char * _PREHASH_ParcelProperties; char * _PREHASH_EstateOwnerID; char * _PREHASH_LogoutRequest; char * _PREHASH_AssetUploadRequest; -char * _PREHASH_ReputationIndividualRequest; -char * _PREHASH_MajorVersion; -char * _PREHASH_MinorVersion; -char * _PREHASH_SimulatorAssign; char * _PREHASH_TransactionType; char * _PREHASH_AvatarPropertiesUpdate; char * _PREHASH_ParcelPropertiesUpdate; @@ -1481,7 +1351,6 @@ char * _PREHASH_AbortXfer; char * _PREHASH_DeRezAck; char * _PREHASH_TakeControls; char * _PREHASH_DirLandReply; -char * _PREHASH_SpaceLocationTeleportReply; char * _PREHASH_MuteType; char * _PREHASH_IMViaEMail; char * _PREHASH_RentPrice; @@ -1522,7 +1391,6 @@ void init_prehash_data() _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID"); _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery"); _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart"); - _PREHASH_LogMessages = gMessageStringTable.getString("LogMessages"); _PREHASH_AboutText = gMessageStringTable.getString("AboutText"); _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam"); _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims"); @@ -1530,10 +1398,8 @@ void init_prehash_data() _PREHASH_ID = gMessageStringTable.getString("ID"); _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest"); _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest"); - _PREHASH_MoneyTransactionsRequest = gMessageStringTable.getString("MoneyTransactionsRequest"); _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest"); _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest"); - _PREHASH_MailTaskSimRequest = gMessageStringTable.getString("MailTaskSimRequest"); _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator"); _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor"); _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor"); @@ -1543,7 +1409,6 @@ void init_prehash_data() _PREHASH_LayerType = gMessageStringTable.getString("LayerType"); _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole"); _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay"); - _PREHASH_AdjustBalance = gMessageStringTable.getString("AdjustBalance"); _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned"); _PREHASH_IP = gMessageStringTable.getString("IP"); _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer"); @@ -1578,8 +1443,8 @@ void init_prehash_data() _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock"); _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete"); _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate"); - _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos"); + _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime"); _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached"); _PREHASH_Packets = gMessageStringTable.getString("Packets"); @@ -1611,14 +1476,11 @@ void init_prehash_data() _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags"); _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags"); _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest"); - _PREHASH_SpaceLocationTeleportRequest = gMessageStringTable.getString("SpaceLocationTeleportRequest"); - _PREHASH_LeaderBoardRequest = gMessageStringTable.getString("LeaderBoardRequest"); _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest"); + _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC"); _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs"); - _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult"); - _PREHASH_ReputationAgentAssign = gMessageStringTable.getString("ReputationAgentAssign"); _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents"); _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo"); _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents"); @@ -1630,7 +1492,6 @@ void init_prehash_data() _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost"); _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate"); _PREHASH_PID = gMessageStringTable.getString("PID"); - _PREHASH_TimeString = gMessageStringTable.getString("TimeString"); _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply"); _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00"); _PREHASH_SimData = gMessageStringTable.getString("SimData"); @@ -1656,7 +1517,6 @@ void init_prehash_data() _PREHASH_URL = gMessageStringTable.getString("URL"); _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate"); _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot"); - _PREHASH_RateeID = gMessageStringTable.getString("RateeID"); _PREHASH_FPS = gMessageStringTable.getString("FPS"); _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub"); _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd"); @@ -1681,7 +1541,6 @@ void init_prehash_data() _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply"); _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply"); _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse"); - _PREHASH_AgentPresenceResponse = gMessageStringTable.getString("AgentPresenceResponse"); _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember"); _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData"); _PREHASH_NameData = gMessageStringTable.getString("NameData"); @@ -1695,14 +1554,12 @@ void init_prehash_data() _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID"); _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink"); _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound"); - _PREHASH_BoardData = gMessageStringTable.getString("BoardData"); _PREHASH_RezData = gMessageStringTable.getString("RezData"); _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects"); _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot"); _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP"); _PREHASH_Far = gMessageStringTable.getString("Far"); _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID"); - _PREHASH_ViewerDigest = gMessageStringTable.getString("ViewerDigest"); _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText"); _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply"); _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply"); @@ -1714,7 +1571,6 @@ void init_prehash_data() _PREHASH_NewName = gMessageStringTable.getString("NewName"); _PREHASH_Key = gMessageStringTable.getString("Key"); _PREHASH_AgentID = gMessageStringTable.getString("AgentID"); - _PREHASH_OnlineStatusRequest = gMessageStringTable.getString("OnlineStatusRequest"); _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest"); _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID"); _PREHASH_Arc = gMessageStringTable.getString("Arc"); @@ -1726,7 +1582,6 @@ void init_prehash_data() _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats"); _PREHASH_ImageID = gMessageStringTable.getString("ImageID"); _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket"); - _PREHASH_ObjectDehinge = gMessageStringTable.getString("ObjectDehinge"); _PREHASH_You = gMessageStringTable.getString("You"); _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange"); _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL"); @@ -1743,9 +1598,9 @@ void init_prehash_data() _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution"); _PREHASH_Offline = gMessageStringTable.getString("Offline"); _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing"); - _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_Members = gMessageStringTable.getString("Members"); _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends"); + _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter"); _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis"); _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock"); @@ -1753,7 +1608,6 @@ void init_prehash_data() _PREHASH_NetTest = gMessageStringTable.getString("NetTest"); _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel"); _PREHASH_LayerID = gMessageStringTable.getString("LayerID"); - _PREHASH_RatorID = gMessageStringTable.getString("RatorID"); _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset"); _PREHASH_SimPort = gMessageStringTable.getString("SimPort"); _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter"); @@ -1773,21 +1627,16 @@ void init_prehash_data() _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited"); _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply"); _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply"); - _PREHASH_ReputationIndividualReply = gMessageStringTable.getString("ReputationIndividualReply"); _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL"); _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement"); - _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID"); _PREHASH_LocalID = gMessageStringTable.getString("LocalID"); + _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem"); _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction"); _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction"); _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction"); - _PREHASH_NameValueName = gMessageStringTable.getString("NameValueName"); - _PREHASH_AngVelX = gMessageStringTable.getString("AngVelX"); _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags"); - _PREHASH_AngVelY = gMessageStringTable.getString("AngVelY"); - _PREHASH_AngVelZ = gMessageStringTable.getString("AngVelZ"); _PREHASH_TextColor = gMessageStringTable.getString("TextColor"); _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID"); _PREHASH_Charter = gMessageStringTable.getString("Charter"); @@ -1798,21 +1647,16 @@ void init_prehash_data() _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup"); _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair"); _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair"); - _PREHASH_GetNameValuePair = gMessageStringTable.getString("GetNameValuePair"); _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory"); _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory"); _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory"); _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory"); _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory"); _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory"); - _PREHASH_DeclineInventory = gMessageStringTable.getString("DeclineInventory"); _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory"); - _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); - _PREHASH_MoneyTransactionsReply = gMessageStringTable.getString("MoneyTransactionsReply"); _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply"); - _PREHASH_MailTaskSimReply = gMessageStringTable.getString("MailTaskSimReply"); + _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); _PREHASH_WearableData = gMessageStringTable.getString("WearableData"); - _PREHASH_StatisticsData = gMessageStringTable.getString("StatisticsData"); _PREHASH_Enabled = gMessageStringTable.getString("Enabled"); _PREHASH_Savings = gMessageStringTable.getString("Savings"); _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad"); @@ -1824,15 +1668,12 @@ void init_prehash_data() _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest"); _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest"); _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest"); - _PREHASH_ServerVersion = gMessageStringTable.getString("ServerVersion"); _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor"); _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea"); _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID"); _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate"); _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate"); _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset"); - _PREHASH_RedoLand = gMessageStringTable.getString("RedoLand"); - _PREHASH_TravelAccess = gMessageStringTable.getString("TravelAccess"); _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid"); _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup"); _PREHASH_Details = gMessageStringTable.getString("Details"); @@ -1865,7 +1706,6 @@ void init_prehash_data() _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos"); _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial"); _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial"); - _PREHASH_FinalizeLogout = gMessageStringTable.getString("FinalizeLogout"); _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay"); _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount"); _PREHASH_MethodData = gMessageStringTable.getString("MethodData"); @@ -1901,32 +1741,26 @@ void init_prehash_data() _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims"); _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims"); _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin"); - _PREHASH_MoneyDetailsRequest = gMessageStringTable.getString("MoneyDetailsRequest"); _PREHASH_Request = gMessageStringTable.getString("Request"); _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest"); _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest"); _PREHASH_StringValue = gMessageStringTable.getString("StringValue"); - _PREHASH_ClosestSimulator = gMessageStringTable.getString("ClosestSimulator"); _PREHASH_Version = gMessageStringTable.getString("Version"); _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount"); _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount"); _PREHASH_ChatData = gMessageStringTable.getString("ChatData"); _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned"); _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency"); - _PREHASH_MaxPlace = gMessageStringTable.getString("MaxPlace"); _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate"); _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete"); _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset"); _PREHASH_Requester = gMessageStringTable.getString("Requester"); _PREHASH_ForSale = gMessageStringTable.getString("ForSale"); _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply"); - _PREHASH_RecordAgentPresence = gMessageStringTable.getString("RecordAgentPresence"); - _PREHASH_EraseAgentPresence = gMessageStringTable.getString("EraseAgentPresence"); _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID"); _PREHASH_Godlike = gMessageStringTable.getString("Godlike"); _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits"); _PREHASH_Direction = gMessageStringTable.getString("Direction"); - _PREHASH_Appearance = gMessageStringTable.getString("Appearance"); _PREHASH_HealthData = gMessageStringTable.getString("HealthData"); _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis"); _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock"); @@ -1934,41 +1768,31 @@ void init_prehash_data() _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00"); _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01"); _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10"); - _PREHASH_ObjectHinge = gMessageStringTable.getString("ObjectHinge"); _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11"); - _PREHASH_MetersPerGrid = gMessageStringTable.getString("MetersPerGrid"); _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight"); _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply"); - _PREHASH_MoneySummaryReply = gMessageStringTable.getString("MoneySummaryReply"); _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply"); _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound"); _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse"); _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser"); _PREHASH_PickName = gMessageStringTable.getString("PickName"); _PREHASH_TaskName = gMessageStringTable.getString("TaskName"); - _PREHASH_SubType = gMessageStringTable.getString("SubType"); _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount"); _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle"); _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv"); _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate"); - _PREHASH_ToID = gMessageStringTable.getString("ToID"); - _PREHASH_ViewerPort = gMessageStringTable.getString("ViewerPort"); _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup"); _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth"); _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle"); _PREHASH_WearableType = gMessageStringTable.getString("WearableType"); _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner"); _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList"); - _PREHASH_PositionSuggestion = gMessageStringTable.getString("PositionSuggestion"); _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel"); - _PREHASH_ClearAgentSessions = gMessageStringTable.getString("ClearAgentSessions"); _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun"); _PREHASH_NVPair = gMessageStringTable.getString("NVPair"); _PREHASH_SearchType = gMessageStringTable.getString("SearchType"); _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart"); _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun"); - _PREHASH_LogoutBlock = gMessageStringTable.getString("LogoutBlock"); - _PREHASH_RelayLogControl = gMessageStringTable.getString("RelayLogControl"); _PREHASH_RegionID = gMessageStringTable.getString("RegionID"); _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID"); _PREHASH_Creator = gMessageStringTable.getString("Creator"); @@ -1977,14 +1801,12 @@ void init_prehash_data() _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply"); _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply"); _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset"); - _PREHASH_SessionInfo = gMessageStringTable.getString("SessionInfo"); _PREHASH_TextureData = gMessageStringTable.getString("TextureData"); _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass"); _PREHASH_TargetID = gMessageStringTable.getString("TargetID"); _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice"); _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation"); _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims"); - _PREHASH_RegionIP = gMessageStringTable.getString("RegionIP"); _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID"); _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload"); _PREHASH_Name = gMessageStringTable.getString("Name"); @@ -1992,18 +1814,13 @@ void init_prehash_data() _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime"); _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent"); _PREHASH_Gain = gMessageStringTable.getString("Gain"); - _PREHASH_VelX = gMessageStringTable.getString("VelX"); _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck"); _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew"); - _PREHASH_Negative = gMessageStringTable.getString("Negative"); - _PREHASH_VelY = gMessageStringTable.getString("VelY"); _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest"); _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest"); - _PREHASH_VelZ = gMessageStringTable.getString("VelZ"); _PREHASH_OtherID = gMessageStringTable.getString("OtherID"); _PREHASH_MemberID = gMessageStringTable.getString("MemberID"); _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest"); - _PREHASH_PatchVersion = gMessageStringTable.getString("PatchVersion"); _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale"); _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP"); _PREHASH_Redo = gMessageStringTable.getString("Redo"); @@ -2046,27 +1863,20 @@ void init_prehash_data() _PREHASH_Code = gMessageStringTable.getString("Code"); _PREHASH_InvType = gMessageStringTable.getString("InvType"); _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV"); - _PREHASH_BulkMoneyTransfer = gMessageStringTable.getString("BulkMoneyTransfer"); _PREHASH_Audible = gMessageStringTable.getString("Audible"); _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData"); _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock"); - _PREHASH_ReputationData = gMessageStringTable.getString("ReputationData"); _PREHASH_West = gMessageStringTable.getString("West"); _PREHASH_Undo = gMessageStringTable.getString("Undo"); _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems"); _PREHASH_Info = gMessageStringTable.getString("Info"); _PREHASH_Area = gMessageStringTable.getString("Area"); - _PREHASH_Behavior = gMessageStringTable.getString("Behavior"); _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed"); _PREHASH_Text = gMessageStringTable.getString("Text"); - _PREHASH_AgentToNewRegion = gMessageStringTable.getString("AgentToNewRegion"); _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate"); _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape"); _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply"); - _PREHASH_PosX = gMessageStringTable.getString("PosX"); - _PREHASH_PosY = gMessageStringTable.getString("PosY"); _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC"); - _PREHASH_PosZ = gMessageStringTable.getString("PosZ"); _PREHASH_Size = gMessageStringTable.getString("Size"); _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress"); _PREHASH_Body = gMessageStringTable.getString("Body"); @@ -2084,16 +1894,14 @@ void init_prehash_data() _PREHASH_SoundID = gMessageStringTable.getString("SoundID"); _PREHASH_Item = gMessageStringTable.getString("Item"); _PREHASH_User = gMessageStringTable.getString("User"); - _PREHASH_RemoteInfos = gMessageStringTable.getString("RemoteInfos"); _PREHASH_Prey = gMessageStringTable.getString("Prey"); - _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_RayStart = gMessageStringTable.getString("RayStart"); + _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData"); _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis"); _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog"); _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData"); _PREHASH_Invalid = gMessageStringTable.getString("Invalid"); - _PREHASH_MinPlace = gMessageStringTable.getString("MinPlace"); _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve"); _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate"); _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate"); @@ -2112,14 +1920,12 @@ void init_prehash_data() _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary"); _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID"); _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags"); - _PREHASH_TransferPriority = gMessageStringTable.getString("TransferPriority"); _PREHASH_EventID = gMessageStringTable.getString("EventID"); _PREHASH_Selected = gMessageStringTable.getString("Selected"); _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId"); _PREHASH_Type = gMessageStringTable.getString("Type"); _PREHASH_ChatType = gMessageStringTable.getString("ChatType"); _PREHASH_ReportData = gMessageStringTable.getString("ReportData"); - _PREHASH_LeaderBoardData = gMessageStringTable.getString("LeaderBoardData"); _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock"); _PREHASH_GrantData = gMessageStringTable.getString("GrantData"); _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv"); @@ -2135,12 +1941,9 @@ void init_prehash_data() _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification"); _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard"); _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags"); - _PREHASH_MoneyHistoryRequest = gMessageStringTable.getString("MoneyHistoryRequest"); - _PREHASH_MoneySummaryRequest = gMessageStringTable.getString("MoneySummaryRequest"); _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest"); _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest"); _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue"); - _PREHASH_Checksum = gMessageStringTable.getString("Checksum"); _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents"); _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments"); _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle"); @@ -2150,12 +1953,10 @@ void init_prehash_data() _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID"); _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName"); _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent"); - _PREHASH_ConnectAgentToUserserver = gMessageStringTable.getString("ConnectAgentToUserserver"); - _PREHASH_ConnectToUserserver = gMessageStringTable.getString("ConnectToUserserver"); _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard"); - _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard"); _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard"); + _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply"); _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply"); _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID"); @@ -2173,8 +1974,8 @@ void init_prehash_data() _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays"); _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX"); _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID"); - _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY"); + _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount"); _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin"); _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount"); @@ -2199,7 +2000,6 @@ void init_prehash_data() _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent"); _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent"); _PREHASH_SimStats = gMessageStringTable.getString("SimStats"); - _PREHASH_Options = gMessageStringTable.getString("Options"); _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply"); _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled"); _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID"); @@ -2210,10 +2010,8 @@ void init_prehash_data() _PREHASH_MasterID = gMessageStringTable.getString("MasterID"); _PREHASH_TransferData = gMessageStringTable.getString("TransferData"); _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask"); - _PREHASH_AvatarData = gMessageStringTable.getString("AvatarData"); _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects"); _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams"); - _PREHASH_LogLogin = gMessageStringTable.getString("LogLogin"); _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID"); _PREHASH_Summary = gMessageStringTable.getString("Summary"); _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory"); @@ -2254,8 +2052,8 @@ void init_prehash_data() _PREHASH_GranterID = gMessageStringTable.getString("GranterID"); _PREHASH_WantToText = gMessageStringTable.getString("WantToText"); _PREHASH_ReportType = gMessageStringTable.getString("ReportType"); - _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady"); + _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList"); _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad"); _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad"); @@ -2282,9 +2080,8 @@ void init_prehash_data() _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags"); _PREHASH_XferID = gMessageStringTable.getString("XferID"); _PREHASH_StatValue = gMessageStringTable.getString("StatValue"); - _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_TaskID = gMessageStringTable.getString("TaskID"); - _PREHASH_GridsPerEdge = gMessageStringTable.getString("GridsPerEdge"); + _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd"); _PREHASH_Throttles = gMessageStringTable.getString("Throttles"); _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures"); @@ -2297,30 +2094,24 @@ void init_prehash_data() _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID"); _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit"); _PREHASH_Filename = gMessageStringTable.getString("Filename"); - _PREHASH_SecuredTemplateChecksumRequest = gMessageStringTable.getString("SecuredTemplateChecksumRequest"); - _PREHASH_TemplateChecksumRequest = gMessageStringTable.getString("TemplateChecksumRequest"); - _PREHASH_AgentPresenceRequest = gMessageStringTable.getString("AgentPresenceRequest"); _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest"); _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest"); _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest"); _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest"); _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest"); - _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); - _PREHASH_PickInfoRequest = gMessageStringTable.getString("PickInfoRequest"); _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest"); _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest"); _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest"); + _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID"); _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest"); _PREHASH_TextureID = gMessageStringTable.getString("TextureID"); _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL"); _PREHASH_Handle = gMessageStringTable.getString("Handle"); - _PREHASH_StartParcelRenameAck = gMessageStringTable.getString("StartParcelRenameAck"); _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex"); _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning"); _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning"); _PREHASH_Health = gMessageStringTable.getString("Health"); - _PREHASH_FileID = gMessageStringTable.getString("FileID"); _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo"); _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy"); _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd"); @@ -2345,7 +2136,6 @@ void init_prehash_data() _PREHASH_Change = gMessageStringTable.getString("Change"); _PREHASH_Height = gMessageStringTable.getString("Height"); _PREHASH_Region = gMessageStringTable.getString("Region"); - _PREHASH_MoneyHistoryReply = gMessageStringTable.getString("MoneyHistoryReply"); _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo"); _PREHASH_StateSave = gMessageStringTable.getString("StateSave"); _PREHASH_RoleData = gMessageStringTable.getString("RoleData"); @@ -2356,11 +2146,10 @@ void init_prehash_data() _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics"); _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted"); _PREHASH_JointType = gMessageStringTable.getString("JointType"); - _PREHASH_TaxEstimate = gMessageStringTable.getString("TaxEstimate"); _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate"); _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate"); - _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate"); + _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate"); _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS"); _PREHASH_Buttons = gMessageStringTable.getString("Buttons"); @@ -2392,8 +2181,6 @@ void init_prehash_data() _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType"); _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers"); _PREHASH_Agents = gMessageStringTable.getString("Agents"); - _PREHASH_SimulatorStart = gMessageStringTable.getString("SimulatorStart"); - _PREHASH_Enable = gMessageStringTable.getString("Enable"); _PREHASH_MemberData = gMessageStringTable.getString("MemberData"); _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID"); _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase"); @@ -2401,27 +2188,21 @@ void init_prehash_data() _PREHASH_AnimID = gMessageStringTable.getString("AnimID"); _PREHASH_Serial = gMessageStringTable.getString("Serial"); _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName"); - _PREHASH_ControlPort = gMessageStringTable.getString("ControlPort"); _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand"); _PREHASH_Digest = gMessageStringTable.getString("Digest"); _PREHASH_Victim = gMessageStringTable.getString("Victim"); _PREHASH_Script = gMessageStringTable.getString("Script"); - _PREHASH_TemplateChecksumReply = gMessageStringTable.getString("TemplateChecksumReply"); _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply"); _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply"); _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply"); _PREHASH_RoleID = gMessageStringTable.getString("RoleID"); _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo"); - _PREHASH_Sequence = gMessageStringTable.getString("Sequence"); _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo"); - _PREHASH_LocalX = gMessageStringTable.getString("LocalX"); - _PREHASH_LocalY = gMessageStringTable.getString("LocalY"); _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim"); - _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Action = gMessageStringTable.getString("Action"); + _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Rights = gMessageStringTable.getString("Rights"); _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir"); - _PREHASH_Active = gMessageStringTable.getString("Active"); _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest"); _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest"); _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest"); @@ -2432,8 +2213,6 @@ void init_prehash_data() _PREHASH_SharedData = gMessageStringTable.getString("SharedData"); _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock"); _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock"); - _PREHASH_Viewer = gMessageStringTable.getString("Viewer"); - _PREHASH_GroupNoticeDelete = gMessageStringTable.getString("GroupNoticeDelete"); _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate"); _PREHASH_Method = gMessageStringTable.getString("Method"); _PREHASH_TouchName = gMessageStringTable.getString("TouchName"); @@ -2445,11 +2224,9 @@ void init_prehash_data() _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage"); _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation"); _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions"); - _PREHASH_Ignore = gMessageStringTable.getString("Ignore"); _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData"); _PREHASH_StatID = gMessageStringTable.getString("StatID"); _PREHASH_ItemID = gMessageStringTable.getString("ItemID"); - _PREHASH_AvatarStatisticsReply = gMessageStringTable.getString("AvatarStatisticsReply"); _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply"); _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply"); _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset"); @@ -2474,7 +2251,6 @@ void init_prehash_data() _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort"); _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit"); _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap"); - _PREHASH_TrackAgentSession = gMessageStringTable.getString("TrackAgentSession"); _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType"); _PREHASH_VFileID = gMessageStringTable.getString("VFileID"); _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID"); @@ -2522,7 +2298,6 @@ void init_prehash_data() _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks"); _PREHASH_ItemData = gMessageStringTable.getString("ItemData"); _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList"); - _PREHASH_PassObject = gMessageStringTable.getString("PassObject"); _PREHASH_Reputation = gMessageStringTable.getString("Reputation"); _PREHASH_IntValue = gMessageStringTable.getString("IntValue"); _PREHASH_TargetType = gMessageStringTable.getString("TargetType"); @@ -2545,10 +2320,8 @@ void init_prehash_data() _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend"); _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend"); _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend"); - _PREHASH_DirPicksQueryBackend = gMessageStringTable.getString("DirPicksQueryBackend"); _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend"); _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend"); - _PREHASH_LogoutDemand = gMessageStringTable.getString("LogoutDemand"); _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData"); _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID"); _PREHASH_Aspect = gMessageStringTable.getString("Aspect"); @@ -2556,7 +2329,6 @@ void init_prehash_data() _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast"); _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows"); _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask"); - _PREHASH_SetSunPhase = gMessageStringTable.getString("SetSunPhase"); _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate"); _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish"); _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset"); @@ -2565,7 +2337,6 @@ void init_prehash_data() _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel"); _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime"); _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags"); - _PREHASH_LastExecFroze = gMessageStringTable.getString("LastExecFroze"); _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun"); _PREHASH_Bottom = gMessageStringTable.getString("Bottom"); _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData"); @@ -2584,7 +2355,6 @@ void init_prehash_data() _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest"); _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest"); _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest"); - _PREHASH_StartPeriod = gMessageStringTable.getString("StartPeriod"); _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest"); _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest"); _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery"); @@ -2612,34 +2382,27 @@ void init_prehash_data() _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger"); _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit"); _PREHASH_Quorum = gMessageStringTable.getString("Quorum"); - _PREHASH_TokenBlock = gMessageStringTable.getString("TokenBlock"); _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock"); _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock"); _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay"); _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos"); - _PREHASH_AttachedSoundCutoffRadius = gMessageStringTable.getString("AttachedSoundCutoffRadius"); _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail"); _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName"); _PREHASH_Range = gMessageStringTable.getString("Range"); _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility"); _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP"); _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed"); - _PREHASH_OnlineStatusReply = gMessageStringTable.getString("OnlineStatusReply"); - _PREHASH_RequestAvatarInfo = gMessageStringTable.getString("RequestAvatarInfo"); _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound"); _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID"); _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp"); _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked"); _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP"); - _PREHASH_ObjectImport = gMessageStringTable.getString("ObjectImport"); _PREHASH_Value = gMessageStringTable.getString("Value"); _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor"); _PREHASH_Test0 = gMessageStringTable.getString("Test0"); _PREHASH_Test1 = gMessageStringTable.getString("Test1"); _PREHASH_Test2 = gMessageStringTable.getString("Test2"); _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase"); - _PREHASH_Place = gMessageStringTable.getString("Place"); - _PREHASH_Phase = gMessageStringTable.getString("Phase"); _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide"); _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim"); _PREHASH_Field = gMessageStringTable.getString("Field"); @@ -2649,7 +2412,6 @@ void init_prehash_data() _PREHASH_Score = gMessageStringTable.getString("Score"); _PREHASH_Image = gMessageStringTable.getString("Image"); _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction"); - _PREHASH_Delta = gMessageStringTable.getString("Delta"); _PREHASH_Parameter = gMessageStringTable.getString("Parameter"); _PREHASH_Flags = gMessageStringTable.getString("Flags"); _PREHASH_Plane = gMessageStringTable.getString("Plane"); @@ -2659,26 +2421,24 @@ void init_prehash_data() _PREHASH_Textures = gMessageStringTable.getString("Textures"); _PREHASH_EventData = gMessageStringTable.getString("EventData"); _PREHASH_Final = gMessageStringTable.getString("Final"); + _PREHASH_System = gMessageStringTable.getString("System"); _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos"); _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash"); _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit"); _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit"); _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit"); _PREHASH_Codec = gMessageStringTable.getString("Codec"); - _PREHASH_Level = gMessageStringTable.getString("Level"); _PREHASH_Modal = gMessageStringTable.getString("Modal"); _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown"); _PREHASH_LandingType = gMessageStringTable.getString("LandingType"); _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply"); - _PREHASH_MoneyDetailsReply = gMessageStringTable.getString("MoneyDetailsReply"); _PREHASH_Reply = gMessageStringTable.getString("Reply"); + _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot"); - _PREHASH_RequestFriendship = gMessageStringTable.getString("RequestFriendship"); _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship"); - _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); + _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo"); _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume"); - _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter"); _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect"); _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition"); @@ -2705,7 +2465,6 @@ void init_prehash_data() _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID"); _PREHASH_Token = gMessageStringTable.getString("Token"); _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms"); - _PREHASH_StartParcelRemoveAck = gMessageStringTable.getString("StartParcelRemoveAck"); _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect"); _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect"); _PREHASH_Price = gMessageStringTable.getString("Price"); @@ -2734,7 +2493,6 @@ void init_prehash_data() _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID"); _PREHASH_FounderID = gMessageStringTable.getString("FounderID"); _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID"); - _PREHASH_StipendEstimate = gMessageStringTable.getString("StipendEstimate"); _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt"); _PREHASH_Sound = gMessageStringTable.getString("Sound"); _PREHASH_Cover = gMessageStringTable.getString("Cover"); @@ -2754,12 +2512,12 @@ void init_prehash_data() _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges"); _PREHASH_Count = gMessageStringTable.getString("Count"); _PREHASH_South = gMessageStringTable.getString("South"); - _PREHASH_Entry = gMessageStringTable.getString("Entry"); _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed"); _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags"); _PREHASH_Group = gMessageStringTable.getString("Group"); _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause"); _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText"); + _PREHASH_Error = gMessageStringTable.getString("Error"); _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail"); _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent"); _PREHASH_AgentData = gMessageStringTable.getString("AgentData"); @@ -2768,7 +2526,6 @@ void init_prehash_data() _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices"); _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices"); _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit"); - _PREHASH_LogControl = gMessageStringTable.getString("LogControl"); _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish"); _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions"); _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply"); @@ -2785,7 +2542,6 @@ void init_prehash_data() _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest"); _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest"); _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest"); - _PREHASH_EndPeriod = gMessageStringTable.getString("EndPeriod"); _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest"); _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart"); _PREHASH_EjectData = gMessageStringTable.getString("EjectData"); @@ -2798,7 +2554,6 @@ void init_prehash_data() _PREHASH_VFileType = gMessageStringTable.getString("VFileType"); _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply"); _PREHASH_ImageData = gMessageStringTable.getString("ImageData"); - _PREHASH_SpaceServerSimulatorTimeMessage = gMessageStringTable.getString("SpaceServerSimulatorTimeMessage"); _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage"); _PREHASH_Rotation = gMessageStringTable.getString("Rotation"); _PREHASH_Selection = gMessageStringTable.getString("Selection"); @@ -2806,7 +2561,6 @@ void init_prehash_data() _PREHASH_OperationData = gMessageStringTable.getString("OperationData"); _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate"); _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup"); - _PREHASH_DirPicksReply = gMessageStringTable.getString("DirPicksReply"); _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply"); _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply"); _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo"); @@ -2817,8 +2571,8 @@ void init_prehash_data() _PREHASH_SourceID = gMessageStringTable.getString("SourceID"); _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights"); _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags"); - _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData"); + _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate"); _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate"); _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate"); @@ -2834,7 +2588,6 @@ void init_prehash_data() _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate"); _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel"); _PREHASH_Priority = gMessageStringTable.getString("Priority"); - _PREHASH_Building = gMessageStringTable.getString("Building"); _PREHASH_QueryText = gMessageStringTable.getString("QueryText"); _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd"); _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType"); @@ -2844,7 +2597,6 @@ void init_prehash_data() _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects"); _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages"); _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit"); - _PREHASH_SecureSessionID = gMessageStringTable.getString("SecureSessionID"); _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion"); _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply"); _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply"); @@ -2855,18 +2607,14 @@ void init_prehash_data() _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate"); _PREHASH_EstateName = gMessageStringTable.getString("EstateName"); _PREHASH_MuteName = gMessageStringTable.getString("MuteName"); - _PREHASH_StartParcelRename = gMessageStringTable.getString("StartParcelRename"); - _PREHASH_BulkParcelRename = gMessageStringTable.getString("BulkParcelRename"); _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename"); _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename"); - _PREHASH_Positive = gMessageStringTable.getString("Positive"); _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal"); _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest"); _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest"); _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest"); _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest"); _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor"); - _PREHASH_DirPicksQuery = gMessageStringTable.getString("DirPicksQuery"); _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment"); _PREHASH_GroupData = gMessageStringTable.getString("GroupData"); _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers"); @@ -2877,7 +2625,6 @@ void init_prehash_data() _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll"); _PREHASH_EstateID = gMessageStringTable.getString("EstateID"); _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage"); - _PREHASH_AgentQuit = gMessageStringTable.getString("AgentQuit"); _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales"); _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales"); _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval"); @@ -2894,12 +2641,8 @@ void init_prehash_data() _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser"); _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime"); _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive"); - _PREHASH_StartParcelRemove = gMessageStringTable.getString("StartParcelRemove"); - _PREHASH_BulkParcelRemove = gMessageStringTable.getString("BulkParcelRemove"); _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID"); - _PREHASH_BonusEstimate = gMessageStringTable.getString("BonusEstimate"); _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL"); - _PREHASH_CompleteLure = gMessageStringTable.getString("CompleteLure"); _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus"); _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser"); _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate"); @@ -2932,10 +2675,6 @@ void init_prehash_data() _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID"); _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest"); _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest"); - _PREHASH_ReputationIndividualRequest = gMessageStringTable.getString("ReputationIndividualRequest"); - _PREHASH_MajorVersion = gMessageStringTable.getString("MajorVersion"); - _PREHASH_MinorVersion = gMessageStringTable.getString("MinorVersion"); - _PREHASH_SimulatorAssign = gMessageStringTable.getString("SimulatorAssign"); _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType"); _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate"); _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate"); @@ -2944,7 +2683,6 @@ void init_prehash_data() _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck"); _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls"); _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply"); - _PREHASH_SpaceLocationTeleportReply = gMessageStringTable.getString("SpaceLocationTeleportReply"); _PREHASH_MuteType = gMessageStringTable.getString("MuteType"); _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail"); _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice"); diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h index 06a8a9c..b75edca 100644 --- a/linden/indra/llmessage/message_prehash.h +++ b/linden/indra/llmessage/message_prehash.h @@ -30,7 +30,7 @@ #define LL_MESSAGE_PREHASH_H /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ @@ -59,7 +59,6 @@ extern char * _PREHASH_ScriptAnswerYes; extern char * _PREHASH_PartnerID; extern char * _PREHASH_DirLandQuery; extern char * _PREHASH_TeleportStart; -extern char * _PREHASH_LogMessages; extern char * _PREHASH_AboutText; extern char * _PREHASH_VisualParam; extern char * _PREHASH_GroupPrims; @@ -67,10 +66,8 @@ extern char * _PREHASH_SelectedPrims; extern char * _PREHASH_ID; extern char * _PREHASH_UUIDNameRequest; extern char * _PREHASH_UUIDGroupNameRequest; -extern char * _PREHASH_MoneyTransactionsRequest; extern char * _PREHASH_GroupAccountTransactionsRequest; extern char * _PREHASH_MapNameRequest; -extern char * _PREHASH_MailTaskSimRequest; extern char * _PREHASH_UpdateSimulator; extern char * _PREHASH_BillableFactor; extern char * _PREHASH_ObjectBonusFactor; @@ -80,7 +77,6 @@ extern char * _PREHASH_ConfirmEnableSimulator; extern char * _PREHASH_LayerType; extern char * _PREHASH_OwnerRole; extern char * _PREHASH_ParcelOverlay; -extern char * _PREHASH_AdjustBalance; extern char * _PREHASH_GroupOwned; extern char * _PREHASH_IP; extern char * _PREHASH_ChatFromViewer; @@ -115,8 +111,8 @@ extern char * _PREHASH_SensedData; extern char * _PREHASH_UpdateBlock; extern char * _PREHASH_ClassifiedGodDelete; extern char * _PREHASH_ObjectGrabUpdate; -extern char * _PREHASH_TaxDate; extern char * _PREHASH_LocationPos; +extern char * _PREHASH_TaxDate; extern char * _PREHASH_StartDateTime; extern char * _PREHASH_ObjectUpdateCached; extern char * _PREHASH_Packets; @@ -148,14 +144,11 @@ extern char * _PREHASH_AABBMin; extern char * _PREHASH_ClassifiedFlags; extern char * _PREHASH_ControlFlags; extern char * _PREHASH_TeleportRequest; -extern char * _PREHASH_SpaceLocationTeleportRequest; -extern char * _PREHASH_LeaderBoardRequest; extern char * _PREHASH_ScriptTeleportRequest; +extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_DateUTC; extern char * _PREHASH_TaskIDs; -extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_RequestResult; -extern char * _PREHASH_ReputationAgentAssign; extern char * _PREHASH_CanAcceptAgents; extern char * _PREHASH_ObjectSaleInfo; extern char * _PREHASH_KillChildAgents; @@ -167,7 +160,6 @@ extern char * _PREHASH_InfoBlock; extern char * _PREHASH_OwnershipCost; extern char * _PREHASH_AvatarNotesUpdate; extern char * _PREHASH_PID; -extern char * _PREHASH_TimeString; extern char * _PREHASH_DirPopularReply; extern char * _PREHASH_TerrainHeightRange00; extern char * _PREHASH_SimData; @@ -193,7 +185,6 @@ extern char * _PREHASH_Objects; extern char * _PREHASH_URL; extern char * _PREHASH_CreationDate; extern char * _PREHASH_JointPivot; -extern char * _PREHASH_RateeID; extern char * _PREHASH_FPS; extern char * _PREHASH_HasTelehub; extern char * _PREHASH_PathEnd; @@ -218,7 +209,6 @@ extern char * _PREHASH_GroupNoticesListReply; extern char * _PREHASH_ParcelAccessListReply; extern char * _PREHASH_RpcChannelReply; extern char * _PREHASH_RegionPresenceResponse; -extern char * _PREHASH_AgentPresenceResponse; extern char * _PREHASH_CharterMember; extern char * _PREHASH_EdgeData; extern char * _PREHASH_NameData; @@ -232,14 +222,12 @@ extern char * _PREHASH_Mag; extern char * _PREHASH_ParcelPropertiesRequestByID; extern char * _PREHASH_ObjectLink; extern char * _PREHASH_RpcScriptReplyInbound; -extern char * _PREHASH_BoardData; extern char * _PREHASH_RezData; extern char * _PREHASH_RemoveInventoryObjects; extern char * _PREHASH_GroupProposalBallot; extern char * _PREHASH_RPCServerIP; extern char * _PREHASH_Far; extern char * _PREHASH_GodSessionID; -extern char * _PREHASH_ViewerDigest; extern char * _PREHASH_FLAboutText; extern char * _PREHASH_RegionHandshakeReply; extern char * _PREHASH_GroupActiveProposalItemReply; @@ -251,7 +239,6 @@ extern char * _PREHASH_Set; extern char * _PREHASH_NewName; extern char * _PREHASH_Key; extern char * _PREHASH_AgentID; -extern char * _PREHASH_OnlineStatusRequest; extern char * _PREHASH_EventNotificationRemoveRequest; extern char * _PREHASH_NewFolderID; extern char * _PREHASH_Arc; @@ -263,7 +250,6 @@ extern char * _PREHASH_Top; extern char * _PREHASH_MiscStats; extern char * _PREHASH_ImageID; extern char * _PREHASH_DataPacket; -extern char * _PREHASH_ObjectDehinge; extern char * _PREHASH_You; extern char * _PREHASH_ScriptControlChange; extern char * _PREHASH_LoadURL; @@ -280,9 +266,9 @@ extern char * _PREHASH_Contribution; extern char * _PREHASH_SetGroupContribution; extern char * _PREHASH_Offline; extern char * _PREHASH_AgentIsNowWearing; -extern char * _PREHASH_SecPerDay; extern char * _PREHASH_Members; extern char * _PREHASH_FailedResends; +extern char * _PREHASH_SecPerDay; extern char * _PREHASH_CameraCenter; extern char * _PREHASH_CameraLeftAxis; extern char * _PREHASH_ExBlock; @@ -290,7 +276,6 @@ extern char * _PREHASH_Channel; extern char * _PREHASH_NetTest; extern char * _PREHASH_DiscardLevel; extern char * _PREHASH_LayerID; -extern char * _PREHASH_RatorID; extern char * _PREHASH_GrabOffset; extern char * _PREHASH_SimPort; extern char * _PREHASH_PricePerMeter; @@ -310,21 +295,16 @@ extern char * _PREHASH_SitName; extern char * _PREHASH_RegionsVisited; extern char * _PREHASH_DirClassifiedReply; extern char * _PREHASH_AvatarClassifiedReply; -extern char * _PREHASH_ReputationIndividualReply; extern char * _PREHASH_MediaURL; extern char * _PREHASH_CompleteAgentMovement; -extern char * _PREHASH_SpaceIP; extern char * _PREHASH_ClassifiedID; extern char * _PREHASH_LocalID; +extern char * _PREHASH_SpaceIP; extern char * _PREHASH_RemoveItem; extern char * _PREHASH_LogFailedMoneyTransaction; extern char * _PREHASH_ViewerStartAuction; extern char * _PREHASH_StartAuction; -extern char * _PREHASH_NameValueName; -extern char * _PREHASH_AngVelX; extern char * _PREHASH_DuplicateFlags; -extern char * _PREHASH_AngVelY; -extern char * _PREHASH_AngVelZ; extern char * _PREHASH_TextColor; extern char * _PREHASH_SlaveID; extern char * _PREHASH_Charter; @@ -335,21 +315,16 @@ extern char * _PREHASH_ParcelAuctions; extern char * _PREHASH_OwnerIsGroup; extern char * _PREHASH_NameValuePair; extern char * _PREHASH_RemoveNameValuePair; -extern char * _PREHASH_GetNameValuePair; extern char * _PREHASH_BulkUpdateInventory; extern char * _PREHASH_UpdateTaskInventory; extern char * _PREHASH_RemoveTaskInventory; extern char * _PREHASH_MoveTaskInventory; extern char * _PREHASH_RequestTaskInventory; extern char * _PREHASH_ReplyTaskInventory; -extern char * _PREHASH_DeclineInventory; extern char * _PREHASH_AggregatePermInventory; -extern char * _PREHASH_SimulatorInfo; -extern char * _PREHASH_MoneyTransactionsReply; extern char * _PREHASH_GroupAccountTransactionsReply; -extern char * _PREHASH_MailTaskSimReply; +extern char * _PREHASH_SimulatorInfo; extern char * _PREHASH_WearableData; -extern char * _PREHASH_StatisticsData; extern char * _PREHASH_Enabled; extern char * _PREHASH_Savings; extern char * _PREHASH_SimulatorLoad; @@ -361,15 +336,12 @@ extern char * _PREHASH_JoinGroupRequest; extern char * _PREHASH_LeaveGroupRequest; extern char * _PREHASH_InviteGroupRequest; extern char * _PREHASH_LiveHelpGroupRequest; -extern char * _PREHASH_ServerVersion; extern char * _PREHASH_PriceParcelClaimFactor; extern char * _PREHASH_BillableArea; extern char * _PREHASH_ObjectID; extern char * _PREHASH_ObjectFlagUpdate; extern char * _PREHASH_GroupRoleUpdate; extern char * _PREHASH_RequestInventoryAsset; -extern char * _PREHASH_RedoLand; -extern char * _PREHASH_TravelAccess; extern char * _PREHASH_ChangedGrid; extern char * _PREHASH_AgentDropGroup; extern char * _PREHASH_Details; @@ -402,7 +374,6 @@ extern char * _PREHASH_Timestamp; extern char * _PREHASH_GlobalPos; extern char * _PREHASH_GrabOffsetInitial; extern char * _PREHASH_IsTrial; -extern char * _PREHASH_FinalizeLogout; extern char * _PREHASH_ObjectDuplicateOnRay; extern char * _PREHASH_GroupMembershipCount; extern char * _PREHASH_MethodData; @@ -438,32 +409,26 @@ extern char * _PREHASH_TaskData; extern char * _PREHASH_SimWideMaxPrims; extern char * _PREHASH_TotalPrims; extern char * _PREHASH_ProfileBegin; -extern char * _PREHASH_MoneyDetailsRequest; extern char * _PREHASH_Request; extern char * _PREHASH_GroupAccountDetailsRequest; extern char * _PREHASH_GroupActiveProposalsRequest; extern char * _PREHASH_StringValue; -extern char * _PREHASH_ClosestSimulator; extern char * _PREHASH_Version; extern char * _PREHASH_OtherCount; extern char * _PREHASH_MemberCount; extern char * _PREHASH_ChatData; extern char * _PREHASH_IsGroupOwned; extern char * _PREHASH_EnergyEfficiency; -extern char * _PREHASH_MaxPlace; extern char * _PREHASH_PickInfoUpdate; extern char * _PREHASH_PickDelete; extern char * _PREHASH_ScriptReset; extern char * _PREHASH_Requester; extern char * _PREHASH_ForSale; extern char * _PREHASH_NearestLandingRegionReply; -extern char * _PREHASH_RecordAgentPresence; -extern char * _PREHASH_EraseAgentPresence; extern char * _PREHASH_ParcelID; extern char * _PREHASH_Godlike; extern char * _PREHASH_TotalDebits; extern char * _PREHASH_Direction; -extern char * _PREHASH_Appearance; extern char * _PREHASH_HealthData; extern char * _PREHASH_LeftAxis; extern char * _PREHASH_LocationBlock; @@ -471,41 +436,31 @@ extern char * _PREHASH_ObjectImage; extern char * _PREHASH_TerrainStartHeight00; extern char * _PREHASH_TerrainStartHeight01; extern char * _PREHASH_TerrainStartHeight10; -extern char * _PREHASH_ObjectHinge; extern char * _PREHASH_TerrainStartHeight11; -extern char * _PREHASH_MetersPerGrid; extern char * _PREHASH_WaterHeight; extern char * _PREHASH_FetchInventoryReply; -extern char * _PREHASH_MoneySummaryReply; extern char * _PREHASH_GroupAccountSummaryReply; extern char * _PREHASH_AttachedSound; extern char * _PREHASH_ParamInUse; extern char * _PREHASH_GodKickUser; extern char * _PREHASH_PickName; extern char * _PREHASH_TaskName; -extern char * _PREHASH_SubType; extern char * _PREHASH_ObjectCount; extern char * _PREHASH_RegionPresenceRequestByHandle; extern char * _PREHASH_RezSingleAttachmentFromInv; extern char * _PREHASH_ChildAgentUpdate; -extern char * _PREHASH_ToID; -extern char * _PREHASH_ViewerPort; extern char * _PREHASH_IsOwnerGroup; extern char * _PREHASH_AgentHeightWidth; extern char * _PREHASH_VerticalAngle; extern char * _PREHASH_WearableType; extern char * _PREHASH_AggregatePermNextOwner; extern char * _PREHASH_ShowInList; -extern char * _PREHASH_PositionSuggestion; extern char * _PREHASH_UpdateParcel; -extern char * _PREHASH_ClearAgentSessions; extern char * _PREHASH_SetAlwaysRun; extern char * _PREHASH_NVPair; extern char * _PREHASH_SearchType; extern char * _PREHASH_ObjectSpinStart; extern char * _PREHASH_UseEstateSun; -extern char * _PREHASH_LogoutBlock; -extern char * _PREHASH_RelayLogControl; extern char * _PREHASH_RegionID; extern char * _PREHASH_AbuseRegionID; extern char * _PREHASH_Creator; @@ -514,14 +469,12 @@ extern char * _PREHASH_DirEventsReply; extern char * _PREHASH_EventInfoReply; extern char * _PREHASH_UserInfoReply; extern char * _PREHASH_PathRadiusOffset; -extern char * _PREHASH_SessionInfo; extern char * _PREHASH_TextureData; extern char * _PREHASH_ChatPass; extern char * _PREHASH_TargetID; extern char * _PREHASH_DefaultPayPrice; extern char * _PREHASH_UserLocation; extern char * _PREHASH_MaxPrims; -extern char * _PREHASH_RegionIP; extern char * _PREHASH_LandmarkID; extern char * _PREHASH_InitiateDownload; extern char * _PREHASH_Name; @@ -529,18 +482,13 @@ extern char * _PREHASH_OtherCleanTime; extern char * _PREHASH_ParcelSetOtherCleanTime; extern char * _PREHASH_TeleportPriceExponent; extern char * _PREHASH_Gain; -extern char * _PREHASH_VelX; extern char * _PREHASH_PacketAck; extern char * _PREHASH_PathSkew; -extern char * _PREHASH_Negative; -extern char * _PREHASH_VelY; extern char * _PREHASH_SimulatorShutdownRequest; extern char * _PREHASH_NearestLandingRegionRequest; -extern char * _PREHASH_VelZ; extern char * _PREHASH_OtherID; extern char * _PREHASH_MemberID; extern char * _PREHASH_MapLayerRequest; -extern char * _PREHASH_PatchVersion; extern char * _PREHASH_ObjectScale; extern char * _PREHASH_TargetIP; extern char * _PREHASH_Redo; @@ -583,27 +531,20 @@ extern char * _PREHASH_Perp; extern char * _PREHASH_Code; extern char * _PREHASH_InvType; extern char * _PREHASH_AgentFOV; -extern char * _PREHASH_BulkMoneyTransfer; extern char * _PREHASH_Audible; extern char * _PREHASH_AuctionData; extern char * _PREHASH_IDBlock; -extern char * _PREHASH_ReputationData; extern char * _PREHASH_West; extern char * _PREHASH_Undo; extern char * _PREHASH_TotalNumItems; extern char * _PREHASH_Info; extern char * _PREHASH_Area; -extern char * _PREHASH_Behavior; extern char * _PREHASH_SimCrashed; extern char * _PREHASH_Text; -extern char * _PREHASH_AgentToNewRegion; extern char * _PREHASH_PriceGroupCreate; extern char * _PREHASH_ObjectShape; extern char * _PREHASH_GroupRoleDataReply; -extern char * _PREHASH_PosX; -extern char * _PREHASH_PosY; extern char * _PREHASH_MuteCRC; -extern char * _PREHASH_PosZ; extern char * _PREHASH_Size; extern char * _PREHASH_FromAddress; extern char * _PREHASH_Body; @@ -621,16 +562,14 @@ extern char * _PREHASH_Stat; extern char * _PREHASH_SoundID; extern char * _PREHASH_Item; extern char * _PREHASH_User; -extern char * _PREHASH_RemoteInfos; extern char * _PREHASH_Prey; -extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_RayStart; +extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_ParcelData; extern char * _PREHASH_CameraUpAxis; extern char * _PREHASH_ScriptDialog; extern char * _PREHASH_MasterParcelData; extern char * _PREHASH_Invalid; -extern char * _PREHASH_MinPlace; extern char * _PREHASH_ProfileCurve; extern char * _PREHASH_ParcelAccessListUpdate; extern char * _PREHASH_MuteListUpdate; @@ -649,14 +588,12 @@ extern char * _PREHASH_DeRezObject; extern char * _PREHASH_IsTemporary; extern char * _PREHASH_InsigniaID; extern char * _PREHASH_CheckFlags; -extern char * _PREHASH_TransferPriority; extern char * _PREHASH_EventID; extern char * _PREHASH_Selected; extern char * _PREHASH_FromAgentId; extern char * _PREHASH_Type; extern char * _PREHASH_ChatType; extern char * _PREHASH_ReportData; -extern char * _PREHASH_LeaderBoardData; extern char * _PREHASH_RequestBlock; extern char * _PREHASH_GrantData; extern char * _PREHASH_DetachAttachmentIntoInv; @@ -672,12 +609,9 @@ extern char * _PREHASH_OnlineNotification; extern char * _PREHASH_OfflineNotification; extern char * _PREHASH_SendPostcard; extern char * _PREHASH_RequestFlags; -extern char * _PREHASH_MoneyHistoryRequest; -extern char * _PREHASH_MoneySummaryRequest; extern char * _PREHASH_GroupAccountSummaryRequest; extern char * _PREHASH_GroupVoteHistoryRequest; extern char * _PREHASH_ParamValue; -extern char * _PREHASH_Checksum; extern char * _PREHASH_MaxAgents; extern char * _PREHASH_CreateNewOutfitAttachments; extern char * _PREHASH_RegionHandle; @@ -687,12 +621,10 @@ extern char * _PREHASH_AvatarInterestsUpdate; extern char * _PREHASH_GroupNoticeID; extern char * _PREHASH_ParcelName; extern char * _PREHASH_PriceObjectRent; -extern char * _PREHASH_ConnectAgentToUserserver; -extern char * _PREHASH_ConnectToUserserver; extern char * _PREHASH_OfferCallingCard; -extern char * _PREHASH_AgentAccess; extern char * _PREHASH_AcceptCallingCard; extern char * _PREHASH_DeclineCallingCard; +extern char * _PREHASH_AgentAccess; extern char * _PREHASH_DataHomeLocationReply; extern char * _PREHASH_EventLocationReply; extern char * _PREHASH_TerseDateID; @@ -710,8 +642,8 @@ extern char * _PREHASH_Invoice; extern char * _PREHASH_IntervalDays; extern char * _PREHASH_PathScaleX; extern char * _PREHASH_FromTaskID; -extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PathScaleY; +extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PublicCount; extern char * _PREHASH_ParcelJoin; extern char * _PREHASH_GroupRolesCount; @@ -736,7 +668,6 @@ extern char * _PREHASH_NearestLandingRegionUpdated; extern char * _PREHASH_PassToAgent; extern char * _PREHASH_PreyAgent; extern char * _PREHASH_SimStats; -extern char * _PREHASH_Options; extern char * _PREHASH_LogoutReply; extern char * _PREHASH_FeatureDisabled; extern char * _PREHASH_ObjectLocalID; @@ -747,10 +678,8 @@ extern char * _PREHASH_Destination; extern char * _PREHASH_MasterID; extern char * _PREHASH_TransferData; extern char * _PREHASH_WantToMask; -extern char * _PREHASH_AvatarData; extern char * _PREHASH_ParcelSelectObjects; extern char * _PREHASH_ExtraParams; -extern char * _PREHASH_LogLogin; extern char * _PREHASH_CreatorID; extern char * _PREHASH_Summary; extern char * _PREHASH_BuyObjectInventory; @@ -791,8 +720,8 @@ extern char * _PREHASH_ButtonLabel; extern char * _PREHASH_GranterID; extern char * _PREHASH_WantToText; extern char * _PREHASH_ReportType; -extern char * _PREHASH_DataBlock; extern char * _PREHASH_SimulatorReady; +extern char * _PREHASH_DataBlock; extern char * _PREHASH_AnimationSourceList; extern char * _PREHASH_SubscribeLoad; extern char * _PREHASH_UnsubscribeLoad; @@ -819,9 +748,8 @@ extern char * _PREHASH_Header; extern char * _PREHASH_GestureFlags; extern char * _PREHASH_XferID; extern char * _PREHASH_StatValue; -extern char * _PREHASH_PickID; extern char * _PREHASH_TaskID; -extern char * _PREHASH_GridsPerEdge; +extern char * _PREHASH_PickID; extern char * _PREHASH_RayEnd; extern char * _PREHASH_Throttles; extern char * _PREHASH_RebakeAvatarTextures; @@ -834,30 +762,24 @@ extern char * _PREHASH_Access; extern char * _PREHASH_TitleRoleID; extern char * _PREHASH_SquareMetersCredit; extern char * _PREHASH_Filename; -extern char * _PREHASH_SecuredTemplateChecksumRequest; -extern char * _PREHASH_TemplateChecksumRequest; -extern char * _PREHASH_AgentPresenceRequest; extern char * _PREHASH_ClassifiedInfoRequest; extern char * _PREHASH_ParcelInfoRequest; extern char * _PREHASH_ParcelObjectOwnersRequest; extern char * _PREHASH_TeleportLandmarkRequest; extern char * _PREHASH_EventInfoRequest; -extern char * _PREHASH_ChatFromSimulator; -extern char * _PREHASH_PickInfoRequest; extern char * _PREHASH_MoneyBalanceRequest; extern char * _PREHASH_GroupMembersRequest; extern char * _PREHASH_GroupRoleMembersRequest; +extern char * _PREHASH_ChatFromSimulator; extern char * _PREHASH_OldFolderID; extern char * _PREHASH_UserInfoRequest; extern char * _PREHASH_TextureID; extern char * _PREHASH_ProfileURL; extern char * _PREHASH_Handle; -extern char * _PREHASH_StartParcelRenameAck; extern char * _PREHASH_ButtonIndex; extern char * _PREHASH_GetScriptRunning; extern char * _PREHASH_SetScriptRunning; extern char * _PREHASH_Health; -extern char * _PREHASH_FileID; extern char * _PREHASH_CircuitInfo; extern char * _PREHASH_ObjectBuy; extern char * _PREHASH_ProfileEnd; @@ -882,7 +804,6 @@ extern char * _PREHASH_PingID; extern char * _PREHASH_Change; extern char * _PREHASH_Height; extern char * _PREHASH_Region; -extern char * _PREHASH_MoneyHistoryReply; extern char * _PREHASH_TelehubInfo; extern char * _PREHASH_StateSave; extern char * _PREHASH_RoleData; @@ -893,11 +814,10 @@ extern char * _PREHASH_ParcelGodMarkAsContent; extern char * _PREHASH_UsePhysics; extern char * _PREHASH_RegionDenyTransacted; extern char * _PREHASH_JointType; -extern char * _PREHASH_TaxEstimate; extern char * _PREHASH_ObjectTaxEstimate; extern char * _PREHASH_LightTaxEstimate; -extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_LandTaxEstimate; +extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_GroupTaxEstimate; extern char * _PREHASH_AvgViewerFPS; extern char * _PREHASH_Buttons; @@ -929,8 +849,6 @@ extern char * _PREHASH_WinnerID; extern char * _PREHASH_ChannelType; extern char * _PREHASH_NonExemptMembers; extern char * _PREHASH_Agents; -extern char * _PREHASH_SimulatorStart; -extern char * _PREHASH_Enable; extern char * _PREHASH_MemberData; extern char * _PREHASH_ToGroupID; extern char * _PREHASH_ImageNotInDatabase; @@ -938,27 +856,21 @@ extern char * _PREHASH_StartDate; extern char * _PREHASH_AnimID; extern char * _PREHASH_Serial; extern char * _PREHASH_AbuseRegionName; -extern char * _PREHASH_ControlPort; extern char * _PREHASH_ModifyLand; extern char * _PREHASH_Digest; extern char * _PREHASH_Victim; extern char * _PREHASH_Script; -extern char * _PREHASH_TemplateChecksumReply; extern char * _PREHASH_PickInfoReply; extern char * _PREHASH_MoneyBalanceReply; extern char * _PREHASH_RoutedMoneyBalanceReply; extern char * _PREHASH_RoleID; extern char * _PREHASH_RegionInfo; -extern char * _PREHASH_Sequence; extern char * _PREHASH_GodUpdateRegionInfo; -extern char * _PREHASH_LocalX; -extern char * _PREHASH_LocalY; extern char * _PREHASH_StartAnim; -extern char * _PREHASH_Location; extern char * _PREHASH_Action; +extern char * _PREHASH_Location; extern char * _PREHASH_Rights; extern char * _PREHASH_SearchDir; -extern char * _PREHASH_Active; extern char * _PREHASH_TransferRequest; extern char * _PREHASH_ScriptSensorRequest; extern char * _PREHASH_MoneyTransferRequest; @@ -969,8 +881,6 @@ extern char * _PREHASH_Center; extern char * _PREHASH_SharedData; extern char * _PREHASH_PSBlock; extern char * _PREHASH_UUIDNameBlock; -extern char * _PREHASH_Viewer; -extern char * _PREHASH_GroupNoticeDelete; extern char * _PREHASH_GroupTitleUpdate; extern char * _PREHASH_Method; extern char * _PREHASH_TouchName; @@ -982,11 +892,9 @@ extern char * _PREHASH_GodlikeMessage; extern char * _PREHASH_SystemMessage; extern char * _PREHASH_BodyRotation; extern char * _PREHASH_SearchRegions; -extern char * _PREHASH_Ignore; extern char * _PREHASH_AnimationData; extern char * _PREHASH_StatID; extern char * _PREHASH_ItemID; -extern char * _PREHASH_AvatarStatisticsReply; extern char * _PREHASH_ScriptDialogReply; extern char * _PREHASH_RegionIDAndHandleReply; extern char * _PREHASH_CameraAtOffset; @@ -1011,7 +919,6 @@ extern char * _PREHASH_OldItemID; extern char * _PREHASH_RegionPort; extern char * _PREHASH_PriceEnergyUnit; extern char * _PREHASH_Bitmap; -extern char * _PREHASH_TrackAgentSession; extern char * _PREHASH_CacheMissType; extern char * _PREHASH_VFileID; extern char * _PREHASH_GroupInsigniaID; @@ -1059,7 +966,6 @@ extern char * _PREHASH_MeanCollisionAlert; extern char * _PREHASH_CanAcceptTasks; extern char * _PREHASH_ItemData; extern char * _PREHASH_AnimationList; -extern char * _PREHASH_PassObject; extern char * _PREHASH_Reputation; extern char * _PREHASH_IntValue; extern char * _PREHASH_TargetType; @@ -1082,10 +988,8 @@ extern char * _PREHASH_ParcelBuy; extern char * _PREHASH_DirFindQueryBackend; extern char * _PREHASH_DirPlacesQueryBackend; extern char * _PREHASH_DirClassifiedQueryBackend; -extern char * _PREHASH_DirPicksQueryBackend; extern char * _PREHASH_DirLandQueryBackend; extern char * _PREHASH_DirPopularQueryBackend; -extern char * _PREHASH_LogoutDemand; extern char * _PREHASH_HistoryData; extern char * _PREHASH_SnapshotID; extern char * _PREHASH_Aspect; @@ -1093,7 +997,6 @@ extern char * _PREHASH_ParamSize; extern char * _PREHASH_VoteCast; extern char * _PREHASH_CastsShadows; extern char * _PREHASH_EveryoneMask; -extern char * _PREHASH_SetSunPhase; extern char * _PREHASH_ObjectSpinUpdate; extern char * _PREHASH_MaturePublish; extern char * _PREHASH_UseExistingAsset; @@ -1102,7 +1005,6 @@ extern char * _PREHASH_ParcelLocalID; extern char * _PREHASH_TeleportCancel; extern char * _PREHASH_UnixTime; extern char * _PREHASH_QueryFlags; -extern char * _PREHASH_LastExecFroze; extern char * _PREHASH_AlwaysRun; extern char * _PREHASH_Bottom; extern char * _PREHASH_ButtonData; @@ -1121,7 +1023,6 @@ extern char * _PREHASH_NVPairs; extern char * _PREHASH_GroupNoticesListRequest; extern char * _PREHASH_ParcelAccessListRequest; extern char * _PREHASH_MuteListRequest; -extern char * _PREHASH_StartPeriod; extern char * _PREHASH_RpcChannelRequest; extern char * _PREHASH_LandStatRequest; extern char * _PREHASH_PlacesQuery; @@ -1149,34 +1050,27 @@ extern char * _PREHASH_SnapSelection; extern char * _PREHASH_SoundTrigger; extern char * _PREHASH_TerrainRaiseLimit; extern char * _PREHASH_Quorum; -extern char * _PREHASH_TokenBlock; extern char * _PREHASH_AgentBlock; extern char * _PREHASH_CommandBlock; extern char * _PREHASH_PricePublicObjectDecay; extern char * _PREHASH_SpawnPointPos; -extern char * _PREHASH_AttachedSoundCutoffRadius; extern char * _PREHASH_VolumeDetail; extern char * _PREHASH_FromAgentName; extern char * _PREHASH_Range; extern char * _PREHASH_DirectoryVisibility; extern char * _PREHASH_PublicIP; extern char * _PREHASH_TeleportFailed; -extern char * _PREHASH_OnlineStatusReply; -extern char * _PREHASH_RequestAvatarInfo; extern char * _PREHASH_PreloadSound; extern char * _PREHASH_ScreenshotID; extern char * _PREHASH_CovenantTimestamp; extern char * _PREHASH_OldestUnacked; extern char * _PREHASH_SimulatorIP; -extern char * _PREHASH_ObjectImport; extern char * _PREHASH_Value; extern char * _PREHASH_JointAxisOrAnchor; extern char * _PREHASH_Test0; extern char * _PREHASH_Test1; extern char * _PREHASH_Test2; extern char * _PREHASH_SunPhase; -extern char * _PREHASH_Place; -extern char * _PREHASH_Phase; extern char * _PREHASH_ParcelDivide; extern char * _PREHASH_PriceObjectClaim; extern char * _PREHASH_Field; @@ -1186,7 +1080,6 @@ extern char * _PREHASH_LiveHelpGroupReply; extern char * _PREHASH_Score; extern char * _PREHASH_Image; extern char * _PREHASH_ObjectClickAction; -extern char * _PREHASH_Delta; extern char * _PREHASH_Parameter; extern char * _PREHASH_Flags; extern char * _PREHASH_Plane; @@ -1196,26 +1089,24 @@ extern char * _PREHASH_DirFindQuery; extern char * _PREHASH_Textures; extern char * _PREHASH_EventData; extern char * _PREHASH_Final; +extern char * _PREHASH_System; extern char * _PREHASH_TelehubPos; extern char * _PREHASH_ReportAutosaveCrash; extern char * _PREHASH_CreateTrustedCircuit; extern char * _PREHASH_DenyTrustedCircuit; extern char * _PREHASH_RequestTrustedCircuit; extern char * _PREHASH_Codec; -extern char * _PREHASH_Level; extern char * _PREHASH_Modal; extern char * _PREHASH_ChildAgentUnknown; extern char * _PREHASH_LandingType; extern char * _PREHASH_ScriptRunningReply; -extern char * _PREHASH_MoneyDetailsReply; extern char * _PREHASH_Reply; +extern char * _PREHASH_GroupAccountDetailsReply; extern char * _PREHASH_TelehubRot; -extern char * _PREHASH_RequestFriendship; extern char * _PREHASH_AcceptFriendship; -extern char * _PREHASH_GroupAccountDetailsReply; +extern char * _PREHASH_ItemType; extern char * _PREHASH_DwellInfo; extern char * _PREHASH_AgentResume; -extern char * _PREHASH_ItemType; extern char * _PREHASH_MailFilter; extern char * _PREHASH_Disconnect; extern char * _PREHASH_SimPosition; @@ -1242,7 +1133,6 @@ extern char * _PREHASH_VoteType; extern char * _PREHASH_CategoryID; extern char * _PREHASH_Token; extern char * _PREHASH_AggregatePerms; -extern char * _PREHASH_StartParcelRemoveAck; extern char * _PREHASH_ObjectSelect; extern char * _PREHASH_ForceObjectSelect; extern char * _PREHASH_Price; @@ -1271,7 +1161,6 @@ extern char * _PREHASH_Notes; extern char * _PREHASH_AvatarID; extern char * _PREHASH_FounderID; extern char * _PREHASH_EndPointID; -extern char * _PREHASH_StipendEstimate; extern char * _PREHASH_LocationLookAt; extern char * _PREHASH_Sound; extern char * _PREHASH_Cover; @@ -1291,12 +1180,12 @@ extern char * _PREHASH_ProfileHollow; extern char * _PREHASH_GroupRoleChanges; extern char * _PREHASH_Count; extern char * _PREHASH_South; -extern char * _PREHASH_Entry; extern char * _PREHASH_ObjectUpdateCompressed; extern char * _PREHASH_MuteFlags; extern char * _PREHASH_Group; extern char * _PREHASH_AgentPause; extern char * _PREHASH_LanguagesText; +extern char * _PREHASH_Error; extern char * _PREHASH_InternalScriptMail; extern char * _PREHASH_FindAgent; extern char * _PREHASH_AgentData; @@ -1305,7 +1194,6 @@ extern char * _PREHASH_AssetBlock; extern char * _PREHASH_AcceptNotices; extern char * _PREHASH_SetGroupAcceptNotices; extern char * _PREHASH_CloseCircuit; -extern char * _PREHASH_LogControl; extern char * _PREHASH_TeleportFinish; extern char * _PREHASH_PathRevolutions; extern char * _PREHASH_ClassifiedInfoReply; @@ -1322,7 +1210,6 @@ extern char * _PREHASH_DataHomeLocationRequest; extern char * _PREHASH_EventNotificationAddRequest; extern char * _PREHASH_ParcelDwellRequest; extern char * _PREHASH_EventLocationRequest; -extern char * _PREHASH_EndPeriod; extern char * _PREHASH_SetStartLocationRequest; extern char * _PREHASH_QueryStart; extern char * _PREHASH_EjectData; @@ -1335,7 +1222,6 @@ extern char * _PREHASH_ParcelRelease; extern char * _PREHASH_VFileType; extern char * _PREHASH_EjectGroupMemberReply; extern char * _PREHASH_ImageData; -extern char * _PREHASH_SpaceServerSimulatorTimeMessage; extern char * _PREHASH_SimulatorViewerTimeMessage; extern char * _PREHASH_Rotation; extern char * _PREHASH_Selection; @@ -1343,7 +1229,6 @@ extern char * _PREHASH_TransactionData; extern char * _PREHASH_OperationData; extern char * _PREHASH_ExpirationDate; extern char * _PREHASH_ParcelDeedToGroup; -extern char * _PREHASH_DirPicksReply; extern char * _PREHASH_AvatarPicksReply; extern char * _PREHASH_GroupTitlesReply; extern char * _PREHASH_AgentInfo; @@ -1354,8 +1239,8 @@ extern char * _PREHASH_PassPrice; extern char * _PREHASH_SourceID; extern char * _PREHASH_ChangeUserRights; extern char * _PREHASH_TeleportFlags; -extern char * _PREHASH_AssetData; extern char * _PREHASH_SlaveParcelData; +extern char * _PREHASH_AssetData; extern char * _PREHASH_MultipleObjectUpdate; extern char * _PREHASH_ObjectUpdate; extern char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1371,7 +1256,6 @@ extern char * _PREHASH_TaskLocalID; extern char * _PREHASH_ClaimDate; extern char * _PREHASH_MergeParcel; extern char * _PREHASH_Priority; -extern char * _PREHASH_Building; extern char * _PREHASH_QueryText; extern char * _PREHASH_GroupNoticeAdd; extern char * _PREHASH_ReturnType; @@ -1381,7 +1265,6 @@ extern char * _PREHASH_HeaderData; extern char * _PREHASH_RequestMultipleObjects; extern char * _PREHASH_RetrieveInstantMessages; extern char * _PREHASH_OpenCircuit; -extern char * _PREHASH_SecureSessionID; extern char * _PREHASH_CrossedRegion; extern char * _PREHASH_DirGroupsReply; extern char * _PREHASH_AvatarGroupsReply; @@ -1392,18 +1275,14 @@ extern char * _PREHASH_Position; extern char * _PREHASH_ParentEstate; extern char * _PREHASH_EstateName; extern char * _PREHASH_MuteName; -extern char * _PREHASH_StartParcelRename; -extern char * _PREHASH_BulkParcelRename; extern char * _PREHASH_ParcelRename; extern char * _PREHASH_ViewerFilename; -extern char * _PREHASH_Positive; extern char * _PREHASH_UserReportInternal; extern char * _PREHASH_AvatarPropertiesRequest; extern char * _PREHASH_ParcelPropertiesRequest; extern char * _PREHASH_GroupProfileRequest; extern char * _PREHASH_AgentDataUpdateRequest; extern char * _PREHASH_PriceObjectScaleFactor; -extern char * _PREHASH_DirPicksQuery; extern char * _PREHASH_OpenEnrollment; extern char * _PREHASH_GroupData; extern char * _PREHASH_RequestGodlikePowers; @@ -1414,7 +1293,6 @@ extern char * _PREHASH_Controls; extern char * _PREHASH_FirstDetachAll; extern char * _PREHASH_EstateID; extern char * _PREHASH_ImprovedInstantMessage; -extern char * _PREHASH_AgentQuit; extern char * _PREHASH_CheckParcelSales; extern char * _PREHASH_ParcelSales; extern char * _PREHASH_CurrentInterval; @@ -1431,12 +1309,8 @@ extern char * _PREHASH_OwnerIDs; extern char * _PREHASH_SystemKickUser; extern char * _PREHASH_TransactionTime; extern char * _PREHASH_TimeToLive; -extern char * _PREHASH_StartParcelRemove; -extern char * _PREHASH_BulkParcelRemove; extern char * _PREHASH_OldAgentID; -extern char * _PREHASH_BonusEstimate; extern char * _PREHASH_MusicURL; -extern char * _PREHASH_CompleteLure; extern char * _PREHASH_ParcelPrimBonus; extern char * _PREHASH_EjectUser; extern char * _PREHASH_CoarseLocationUpdate; @@ -1469,10 +1343,6 @@ extern char * _PREHASH_ParcelProperties; extern char * _PREHASH_EstateOwnerID; extern char * _PREHASH_LogoutRequest; extern char * _PREHASH_AssetUploadRequest; -extern char * _PREHASH_ReputationIndividualRequest; -extern char * _PREHASH_MajorVersion; -extern char * _PREHASH_MinorVersion; -extern char * _PREHASH_SimulatorAssign; extern char * _PREHASH_TransactionType; extern char * _PREHASH_AvatarPropertiesUpdate; extern char * _PREHASH_ParcelPropertiesUpdate; @@ -1481,7 +1351,6 @@ extern char * _PREHASH_AbortXfer; extern char * _PREHASH_DeRezAck; extern char * _PREHASH_TakeControls; extern char * _PREHASH_DirLandReply; -extern char * _PREHASH_SpaceLocationTeleportReply; extern char * _PREHASH_MuteType; extern char * _PREHASH_IMViaEMail; extern char * _PREHASH_RentPrice; diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index 794f869..bc1c7dd 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.17.3.0"; -CFBundleGetInfoString = "Second Life version 1.17.3.0, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.18.0.6"; +CFBundleGetInfoString = "Second Life version 1.18.0.6, Copyright 2004-2007 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 5d351bb..f4dd8e0 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ </dict> </array> <key>CFBundleVersion</key> - <string>1.17.3.0</string> + <string>1.18.0.6</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/linden/indra/newview/app_settings/message.xml b/linden/indra/newview/app_settings/message.xml deleted file mode 100644 index 5402a64..0000000 --- a/linden/indra/newview/app_settings/message.xml +++ /dev/null @@ -1,228 +0,0 @@ -<?xml version="1.0"?> -<llsd> - <map> - <key>serverDefaults</key> - <!-- - a map of server names to default message transport - --> - <map> - <key>simulator</key> - <string>template</string> - - <key>userserver</key> - <string>template</string> - - <key>spaceserver</key> - <string>template</string> - - <key>dataserver</key> - <string>template</string> - - <key>logDataserver</key> - <string>template</string> - - <key>inventoryDataserver</key> - <string>template</string> - - <key>viewer</key> - <string>template</string> - - </map> - <key>messages</key> - <!-- - a map of individual message names that override defaults - --> - <map> - <!-- - Circuit related messages - --> - <key>PacketAck</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>OpenCircuit</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>CloseCircuit</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>StartPingCheck</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>CompletePingCheck</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>AddCircuitCode</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>true</boolean> - </map> - - <key>UseCircuitCode</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>CreateTrustedCircuit</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <!-- - Viewer to userserver messages. - --> - <key>ConnectAgentToUserserver</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <!-- - Viewer to simulator messages sent before Untrusted-senderSimulatorMessage cap received. - --> - <key>SecuredTemplateChecksumRequest</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>CompleteAgentMovement</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>EconomyDataRequest</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>ViewerEffect</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <!-- - Viewer to simulator messages sent unreliably. - --> - <key>AgentUpdate</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <!-- - Messages created by LLThrottleGroup clients - --> - <key>ImagePacket</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>LayerData</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>ObjectUpdateCached</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>ObjectUpdateCompressed</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>ObjectUpdate</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>ImprovedTerseObjectUpdate</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>AvatarAnimation</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - - <key>AvatarAppearance</key> - <map> - <key>builder</key> - <string>template</string> - <key>trusted-sender</key> - <boolean>false</boolean> - </map> - </map> - </map> -</llsd> diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst index a4ff014..6c51893 100644 --- a/linden/indra/newview/files.lst +++ b/linden/indra/newview/files.lst @@ -275,9 +275,6 @@ newview/llviewerinventory.cpp newview/llviewerjointattachment.cpp newview/llviewerjoint.cpp newview/llviewerjointmesh.cpp -newview/llviewerjointmesh_sse.cpp -newview/llviewerjointmesh_sse2.cpp -newview/llviewerjointmesh_vec.cpp newview/llviewerjointshape.cpp newview/llviewerjoystick.cpp newview/llviewerkeyboard.cpp diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index 553c968..307ab6f 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -5721,7 +5721,6 @@ void LLAgent::requestEnterGodMode() // simulator and userserver need to know about your request sendReliableMessage(); - msg->sendReliable(gUserServer); } void LLAgent::requestLeaveGodMode() @@ -5737,7 +5736,6 @@ void LLAgent::requestLeaveGodMode() // simulator and userserver need to know about your request sendReliableMessage(); - msg->sendReliable(gUserServer); } // wearables diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp index 79faec1..1d6e27d 100644 --- a/linden/indra/newview/llassetuploadresponders.cpp +++ b/linden/indra/newview/llassetuploadresponders.cpp @@ -1,6 +1,30 @@ -// llassetuploadresponders.cpp -// Copyright 2006, Linden Research, Inc. -// Processes responses received for asset upload requests. +/** + * @file llassetuploadresponders.cpp + * @brief Processes responses received for asset upload requests. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ #include "llviewerprecompiledheaders.h" diff --git a/linden/indra/newview/llassetuploadresponders.h b/linden/indra/newview/llassetuploadresponders.h index ef8cd38..4744d34 100644 --- a/linden/indra/newview/llassetuploadresponders.h +++ b/linden/indra/newview/llassetuploadresponders.h @@ -1,6 +1,30 @@ -// llassetuploadresponders.h -// Copyright 2006, Linden Research, Inc. -// Processes responses received for asset upload requests. +/** + * @file llassetuploadresponders.h + * @brief Processes responses received for asset upload requests. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ #ifndef LL_LLASSETUPLOADRESPONDER_H #define LL_LLASSETUPLOADRESPONDER_H diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp index e0153d7..7481d99 100644 --- a/linden/indra/newview/llcontroldef.cpp +++ b/linden/indra/newview/llcontroldef.cpp @@ -1317,12 +1317,6 @@ void declare_settings() gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas)."); gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom."); - // Vector Processor & Math - gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version."); - gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment."); - gSavedSettings.declareBOOL("VectorizeSkin", TRUE, "Enable vector operations for avatar skinning."); - gSavedSettings.declareU32( "VectorizeProcessor", 0, "0=Compiler Default, 1=SSE, 2=SSE2, autodetected", NO_PERSIST); - // // crash_settings.xml // diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h index e550142..c2cafe3 100644 --- a/linden/indra/newview/lldrawable.h +++ b/linden/indra/newview/lldrawable.h @@ -46,7 +46,6 @@ #include "llviewerobject.h" #include "llrect.h" -class LLCamera; class LLDrawPool; class LLDrawable; class LLFace; diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp index dd59a06..755c622 100644 --- a/linden/indra/newview/lleventpoll.cpp +++ b/linden/indra/newview/lleventpoll.cpp @@ -36,155 +36,162 @@ #include "llviewerregion.h" #include "message.h" -class LLEventPoll::Impl : LLHTTPClient::Responder +namespace { -public: - static Impl& start(const std::string& pollURL); - void stop(); - -private: - Impl(const std::string& pollURL); - ~Impl(); - - void makeRequest(); - void handleMessage(const LLSD& content); - virtual void error(U32 status, const std::string& reason); - virtual void result(const LLSD& content); - -private: - typedef LLHTTPClient::ResponderPtr Ptr; - - Ptr mPtr; - bool mDone; - - std::string mPollURL; - std::string mSender; - - LLSD mAcknowledge; - - // these are only here for debugging so we can see which poller is which - static int sCount; - int mCount; -}; - -//static -LLEventPoll::Impl& LLEventPoll::Impl::start( - const std::string& pollURL) -{ - Impl* i = new Impl(pollURL); - llinfos << "LLEventPoll::Impl::start <" << i->mCount << "> " - << pollURL << llendl; - return *i; -} - -void LLEventPoll::Impl::stop() -{ - lldebugs << "LLEventPoll::Impl::stop <" << mCount << "> " - << mPollURL << llendl; - // there should be a way to stop a LLHTTPClient request in progress - mDone = true; - mPtr = NULL; -} - -int LLEventPoll::Impl::sCount = 0; - -LLEventPoll::Impl::Impl(const std::string& pollURL) - : mPtr(NULL), mDone(false), - mPollURL(pollURL), - mCount(++sCount) -{ - mPtr = this; - //extract host and port of simulator to set as sender - LLViewerRegion *regionp = gAgent.getRegion(); - if (!regionp) + class LLEventPollResponder : public LLHTTPClient::Responder + { + public: + + static LLHTTPClient::ResponderPtr start(const std::string& pollURL, const LLHost& sender); + void stop(); + + private: + LLEventPollResponder(const std::string& pollURL, const LLHost& sender); + ~LLEventPollResponder(); + + void makeRequest(); + void handleMessage(const LLSD& content); + virtual void error(U32 status, const std::string& reason); + virtual void result(const LLSD& content); + + private: + + bool mDone; + + std::string mPollURL; + std::string mSender; + + LLSD mAcknowledge; + + // these are only here for debugging so we can see which poller is which + static int sCount; + int mCount; + }; + + //static + LLHTTPClient::ResponderPtr LLEventPollResponder::start( + const std::string& pollURL, const LLHost& sender) { - llerrs << "LLEventPoll initialized before region is added." << llendl; + LLHTTPClient::ResponderPtr result = new LLEventPollResponder(pollURL, sender); + llinfos << "LLEventPollResponder::start <" << sCount << "> " + << pollURL << llendl; + return result; } - mSender = regionp->getHost().getIPandPort(); - llinfos << "LLEventPoll initialized with sender " << mSender << llendl; - makeRequest(); -} -LLEventPoll::Impl::~Impl() -{ - lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> " - << mPollURL << llendl; -} - -void LLEventPoll::Impl::makeRequest() -{ - LLSD request; - request["ack"] = mAcknowledge; - request["done"] = mDone; - - lldebugs << "LLEventPoll::Impl::makeRequest <" << mCount << "> ack = " - << LLSDXMLStreamer(mAcknowledge) << llendl; - LLHTTPClient::post(mPollURL, request, mPtr); -} + void LLEventPollResponder::stop() + { + llinfos << "LLEventPollResponder::stop <" << mCount << "> " + << mPollURL << llendl; + // there should be a way to stop a LLHTTPClient request in progress + mDone = true; + } -void LLEventPoll::Impl::handleMessage(const LLSD& content) -{ - std::string msg_name = content["message"]; - LLSD message; - message["sender"] = mSender; - message["body"] = content["body"]; - LLMessageSystem::dispatch(msg_name, message); -} + int LLEventPollResponder::sCount = 0; -//virtual -void LLEventPoll::Impl::error(U32 status, const std::string& reason) -{ - if (mDone) return; + LLEventPollResponder::LLEventPollResponder(const std::string& pollURL, const LLHost& sender) + : mDone(false), + mPollURL(pollURL), + mCount(++sCount) + { + //extract host and port of simulator to set as sender + LLViewerRegion *regionp = gAgent.getRegion(); + if (!regionp) + { + llerrs << "LLEventPoll initialized before region is added." << llendl; + } + mSender = sender.getIPandPort(); + llinfos << "LLEventPoll initialized with sender " << mSender << llendl; + makeRequest(); + } - if(status != 499) + LLEventPollResponder::~LLEventPollResponder() { - llwarns << "LLEventPoll::Impl::error: <" << mCount << "> got " - << status << ": " << reason - << (mDone ? " -- done" : "") << llendl; stop(); - return; + lldebugs << "LLEventPollResponder::~Impl <" << mCount << "> " + << mPollURL << llendl; } - makeRequest(); -} + void LLEventPollResponder::makeRequest() + { + LLSD request; + request["ack"] = mAcknowledge; + request["done"] = mDone; + + lldebugs << "LLEventPollResponder::makeRequest <" << mCount << "> ack = " + << LLSDXMLStreamer(mAcknowledge) << llendl; + LLHTTPClient::post(mPollURL, request, this); + } -//virtual -void LLEventPoll::Impl::result(const LLSD& content) -{ - lldebugs << "LLEventPoll::Impl::result <" << mCount << ">" - << (mDone ? " -- done" : "") << llendl; - - if (mDone) return; - - mAcknowledge = content["id"]; - LLSD events = content["events"]; - - if(mAcknowledge.isUndefined()) + void LLEventPollResponder::handleMessage(const LLSD& content) { - llwarns << "LLEventPoll::Impl: id undefined" << llendl; + std::string msg_name = content["message"]; + LLSD message; + message["sender"] = mSender; + message["body"] = content["body"]; + LLMessageSystem::dispatch(msg_name, message); } - - llinfos << "LLEventPoll::Impl::completed <" << mCount << "> " << events.size() << "events (id " - << LLSDXMLStreamer(mAcknowledge) << ")" << llendl; - - LLSD::array_const_iterator i = events.beginArray(); - LLSD::array_const_iterator end = events.endArray(); - for (; i != end; ++i) + + //virtual + void LLEventPollResponder::error(U32 status, const std::string& reason) { - if (i->has("message")) + if (mDone) return; + + if(status != 499) { - handleMessage(*i); + llwarns << "LLEventPollResponder::error: <" << mCount << "> got " + << status << ": " << reason + << (mDone ? " -- done" : "") << llendl; + stop(); + return; } + + makeRequest(); } - - makeRequest(); + + //virtual + void LLEventPollResponder::result(const LLSD& content) + { + lldebugs << "LLEventPollResponder::result <" << mCount << ">" + << (mDone ? " -- done" : "") << llendl; + + if (mDone) return; + + if (!content.get("events") || + !content.get("id")) + { + llwarns << "received event poll with no events or id key" << llendl; + return; + } + + mAcknowledge = content["id"]; + LLSD events = content["events"]; + + if(mAcknowledge.isUndefined()) + { + llwarns << "LLEventPollResponder: id undefined" << llendl; + } + + llinfos << "LLEventPollResponder::completed <" << mCount << "> " << events.size() << "events (id " + << LLSDXMLStreamer(mAcknowledge) << ")" << llendl; + + LLSD::array_const_iterator i = events.beginArray(); + LLSD::array_const_iterator end = events.endArray(); + for (; i != end; ++i) + { + if (i->has("message")) + { + handleMessage(*i); + } + } + + makeRequest(); + } } -LLEventPoll::LLEventPoll(const std::string& pollURL) - : impl(Impl::start(pollURL)) +LLEventPoll::LLEventPoll(const std::string& pollURL, const LLHost& sender) + : mImpl(LLEventPollResponder::start(pollURL, sender)) { } LLEventPoll::~LLEventPoll() { - impl.stop(); } diff --git a/linden/indra/newview/lleventpoll.h b/linden/indra/newview/lleventpoll.h index 4c06a43..a9a533d 100644 --- a/linden/indra/newview/lleventpoll.h +++ b/linden/indra/newview/lleventpoll.h @@ -29,11 +29,13 @@ #ifndef LL_LLEVENTPOLL_H #define LL_LLEVENTPOLL_H +#include "llhttpclient.h" + class LLEventPoll ///< implements the viewer side of server-to-viewer pushed events. { public: - LLEventPoll(const std::string& pollURL); + LLEventPoll(const std::string& pollURL, const LLHost& sender); ///< Start polling the URL. virtual ~LLEventPoll(); @@ -41,8 +43,7 @@ public: private: - class Impl; - Impl& impl; + LLHTTPClient::ResponderPtr mImpl; }; diff --git a/linden/indra/newview/llfloaterimport.cpp b/linden/indra/newview/llfloaterimport.cpp index ed71c1b..c60c571 100644 --- a/linden/indra/newview/llfloaterimport.cpp +++ b/linden/indra/newview/llfloaterimport.cpp @@ -452,6 +452,9 @@ void LLFloaterImport::draw() // static void LLFloaterImport::finishImport(ImportAssetInfo *info) { + // Commenting this code out and removing + // ObjectImport message from the message template + /* llinfos << "Uploading object " << info->FilenameAndPath << "..." << llendl; LLUUID new_file_id; @@ -502,7 +505,7 @@ void LLFloaterImport::finishImport(ImportAssetInfo *info) else { llinfos << "Failed to copy file." << llendl; - } + }*/ } // static diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp index 8e95156..743b06d 100644 --- a/linden/indra/newview/llinventorymodel.cpp +++ b/linden/indra/newview/llinventorymodel.cpp @@ -2112,173 +2112,6 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg) msg->setHandlerFunc("FetchInventoryReply", processFetchInventoryReply); } -/* -//struct LLUpdateInventoryInfo -{ - LLString mFilenameAndPath; - BOOL mIsComplete; -}; - -// static -void LLInventoryModel::processInventoryUpdate(LLMessageSystem* msg, void**) -{ - lldebugs << "LLInventoryModel::processInventoryUpdate()" << llendl; - LLUUID agent_id; - msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_AgentID, agent_id); - if(agent_id != gAgent.getID()) - { - llwarns << "Got an inventory update for the wrong agent." << llendl; - return; - } - - BOOL is_complete; - msg->getBOOLFast(_PREHASH_InventoryData, _PREHASH_IsComplete, is_complete); - char filename[MAX_STRING]; - msg->getStringFast(_PREHASH_InventoryData, _PREHASH_Filename, MAX_STRING, filename); - - LLUpdateInventoryInfo* info = new LLUpdateInventoryInfo; - info->mFilenameAndPath = gDirUtilp->getExpandedFilename( LL_PATH_TEMP, filename ); - info->mIsComplete = is_complete; - - gXferManager->requestFile(info->mFilenameAndPath, - filename, - LL_PATH_CACHE, // The remote file is in the data directory - gUserServer, - TRUE, // Delete the remote file after the transfer - processInventoryFile, - (void*)info, - LLXferManager::HIGH_PRIORITY); -} - -// static -void LLInventoryModel::processInventoryFile(void** user_data, S32 error_code) -{ - llinfos << "LLInventoryModel::processInventoryFile()" << llendl; - //gInventory.dumpInventory(); - LLUpdateInventoryInfo* info = (LLUpdateInventoryInfo*)user_data; - if(info && (0 == error_code)) - { - if(info->mIsComplete) - { - if(gInventory.isLoaded()) - { - // it's a complete update, and we've already loaded - // everything. Therefore, we need to blow away - // everything. - gInventory.empty(); - } - else - { - // We want to merge with anything that's happened - // before the load. Therefore, we only want to get rid - // of the root category. - gInventory.deleteObject(gAgent.getInventoryRootID()); - } - } - - // decompress if necessary - const char* filename = info->mFilenameAndPath.c_str(); - const char* ext = filename + strlen(filename) - 6; - char dst_filename[LL_MAX_PATH]; - if(0 == strnicmp(ext, "gz", 2)) - { - // it's a gz file. decmpress it. - dst_filename[0] = '\0'; - strncat(dst_filename, filename, (ext - filename)); - strcat(dst_filename, "tmp"); - BOOL success = gunzip_file(filename, dst_filename); - LLFile::remove(filename); - if(!success) - { - llwarns << "Error loading inventory file. Return code: " << error_code << llendl; - LLNotifyBox::showXml("InventoryNetworkCorruption"); - goto exit; - } - filename = dst_filename; - } - -#ifdef DIFF_INVENTORY_FILES - char agent_id_string[UUID_STR_LENGTH]; - char inventory_filename[LL_MAX_PATH]; - gAgent.getID().toString(agent_id_string); - sprintf(inventory_filename, CACHE_FORMAT_STRING, gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); - char buffer[MAX_STRING]; - sprintf(buffer, - "c:/cygwin/bin/diff %s %s", - inventory_filename, - filename); - llinfos << buffer << llendl; - system(buffer); - -#endif - - // load it all up. - gInventory.loadFromFile(filename); - gInventory.buildParentChildMap(); - //gInventory.recalculateCloneInformation(); - gInventory.addChangedMask(LLInventoryObserver::ALL); - if(info->mIsComplete) - { - // Set loaded to true if it's a complete set because it's - // poosible for someone to accept an inventory category - // before they have their complete inventory. If we marked - // it loaded at that point, when the real inventory - // arrived, it would erase (on the client anyway) the - // existence of that inventory. - gInventory.mIsLoaded = TRUE; - - //retrieveIM(gMessageSystem); - llinfos << "complete inventory update" << llendl; - - // If we promised you a message on load, here it is - if (gViewerStats->getStat(LLViewerStats::ST_INVENTORY_TOO_LONG) > 0.0) - { - LLNotifyBox::showXml("InventoryLoaded"); - } - } - else - { - llinfos << "incomplete inventory update" << llendl; - } - gInventory.notifyObservers(); - LLFile::remove(filename); - } - else - { - llwarns << "Eror loading inventory file. Return code: " << error_code - << llendl; - if(error_code == LL_ERR_TCP_TIMEOUT) - { - //llwarns << "Re-requesting inventory" << llendl; - //gInventory.requestFromServer(gAgent.getID()); - } - } - -exit: - delete info; - //gInventory.dumpInventory(); -} - -// static -void LLInventoryModel::processUseCachedInventory(LLMessageSystem* msg, void**) -{ - llinfos << "LLInventoryModel::processUseCachedInventory()" << llendl; - char agent_id_string[UUID_STR_LENGTH]; - gAgent.getID().toString(agent_id_string); - char filename[LL_MAX_PATH]; - sprintf(filename, CACHE_FORMAT_STRING, gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); - // We want to merge with anything that's happened before the - // load. Therefore, we only want to get rid of the root category. - gInventory.deleteObject(gAgent.getInventoryRootID()); - gInventory.loadFromFile(filename); - gInventory.buildParentChildMap(); - //gInventory.recalculateCloneInformation(); - gInventory.addChangedMask(LLInventoryObserver::ALL); - gInventory.mIsLoaded = TRUE; - gInventory.notifyObservers(); - //retrieveIM(); -} -*/ // static void LLInventoryModel::processUpdateCreateInventoryItem(LLMessageSystem* msg, void**) diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index c4fa1dc..d79dcb4 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -520,7 +520,6 @@ void LLPanelDisplay2::refreshEnabledState() void LLPanelDisplay2::apply() { - // Anisotropic rendering BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; LLImageGL::sGlobalUseAnisotropic = childGetValue("ani"); diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index e2be9fd..0cf8b00 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -3688,6 +3688,7 @@ void LLSelectMgr::sendDelink() // Hinges //---------------------------------------------------------------------- +/* void LLSelectMgr::sendHinge(U8 type) { if (!mSelectedObjects->getNumNodes()) @@ -3717,7 +3718,7 @@ void LLSelectMgr::sendDehinge() packObjectLocalID, NULL, SEND_ONLY_ROOTS); -} +}*/ void LLSelectMgr::sendSelect() { diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h index 5f76ce2..7eff94a 100644 --- a/linden/indra/newview/llselectmgr.h +++ b/linden/indra/newview/llselectmgr.h @@ -469,8 +469,8 @@ public: void sendDropAttachment(); void sendLink(); void sendDelink(); - void sendHinge(U8 type); - void sendDehinge(); + //void sendHinge(U8 type); + //void sendDehinge(); void sendSelect(); void requestObjectPropertiesFamily(LLViewerObject* object); // asks sim for creator, permissions, resources, etc. diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index 0130edf..7dbb107 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -50,6 +50,7 @@ #include "llerrorcontrol.h" #include "llfiltersd2xmlrpc.h" #include "llfocusmgr.h" +#include "llhttpsender.h" #include "imageids.h" #include "lllandmark.h" #include "llloginflags.h" @@ -223,7 +224,6 @@ BOOL is_hex_string(U8* str, S32 len); void show_first_run_dialog(); void first_run_dialog_callback(S32 option, void* userdata); void set_startup_status(const F32 frac, const char* string, const char* msg); -void on_userserver_name_resolved( BOOL success, const LLString& host_name, U32 ip, void* userdata ); void login_alert_status(S32 option, void* user_data); void update_app(BOOL mandatory, const std::string& message); void update_dialog_callback(S32 option, void *userdata); @@ -236,7 +236,6 @@ void dialog_choose_gender_first_start(); void callback_choose_gender(S32 option, void* userdata); void init_start_screen(S32 location_id); void release_start_screen(); -void process_connect_to_userserver(LLMessageSystem* msg, void**); void reset_login(); // @@ -246,6 +245,21 @@ void reset_login(); // // local classes // + +namespace +{ + class LLNullHTTPSender : public LLHTTPSender + { + virtual void send(const LLHost& host, + const char* message, const LLSD& body, + LLHTTPClient::ResponderPtr response) const + { + llwarns << " attemped to send " << message << " to " << host + << " with null sender" << llendl; + } + }; +} + class LLGestureInventoryFetchObserver : public LLInventoryFetchObserver { public: @@ -422,7 +436,7 @@ BOOL idle_startup() port = gSavedSettings.getU32("ConnectionPort"); } - LLMessageConfig::initClass("viewer", gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); + LLHTTPSender::setDefaultSender(new LLNullHTTPSender()); if(!start_messaging_system( message_template_path, port, @@ -435,6 +449,7 @@ BOOL idle_startup() std::string msg = llformat("Unable to start networking, error %d", gMessageSystem->getErrorCode()); app_early_exit(msg); } + LLMessageConfig::initClass("viewer", gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); } else { @@ -452,9 +467,13 @@ BOOL idle_startup() msg->setExceptionFunc(MX_PACKET_TOO_SHORT, invalid_message_callback, NULL); - msg->setExceptionFunc(MX_RAN_OFF_END_OF_PACKET, + + // running off end of a packet is now valid in the case + // when a reader has a newer message template than + // the sender + /*msg->setExceptionFunc(MX_RAN_OFF_END_OF_PACKET, invalid_message_callback, - NULL); + NULL);*/ msg->setExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE, invalid_message_callback, NULL); @@ -476,7 +495,7 @@ BOOL idle_startup() gXferManager->setUseAckThrottling(TRUE); gXferManager->setAckThrottleBPS(xfer_throttle_bps); } - gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS, gUserServer); + gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS); msg->mPacketRing.setDropPercentage(gPacketDropPercentage); if (gInBandwidth != 0.f) @@ -778,7 +797,6 @@ BOOL idle_startup() gSavedSettings.setS32("ServerChoice", gUserServerChoice); if (gUserServerChoice == USERSERVER_OTHER) { - gUserServer.setHostByName( server_label.c_str() ); snprintf(gUserServerName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */ } } @@ -845,231 +863,15 @@ BOOL idle_startup() // color init must be after saved settings loaded init_colors(); - // Request userserver domain name - set_startup_status(0.05f, "Finding Server Domain Name...", NULL); - - // We're prematurely switching out of this state because the - // userserver name resolver can potentiallly occur before reaching the end of the - // switch statement. Also, if it's done at the bottom, sometimes we will - // skip the userserver resolved step (in the local cases) - djs 09/24/03 - gStartupState++; - timeout.reset(); - - switch( gUserServerChoice ) - { - case USERSERVER_AGNI: - gInProductionGrid = TRUE; - case USERSERVER_DMZ: - case USERSERVER_ADITI: - case USERSERVER_SIVA: - case USERSERVER_SHAKTI: - case USERSERVER_DURGA: - case USERSERVER_SOMA: - case USERSERVER_VAAK: - case USERSERVER_GANGA: - case USERSERVER_UMA: - { - const char* host_name = gUserServerDomainName[gUserServerChoice].mName; - snprintf(gUserServerName, MAX_STRING, "%s", host_name); /* Flawfinder: ignore */ - llinfos << "Resolving " << - gUserServerDomainName[gUserServerChoice].mLabel << - " userserver domain name " << host_name << llendl; - - BOOL requested_domain_name = gAsyncHostByName.startRequest( host_name, on_userserver_name_resolved, NULL ); - if( !requested_domain_name ) - //BOOL resolved_domain_name = gUserServer.setHostByName( host_name ); - //if( !resolved_domain_name ) - { - llwarns << "setHostByName failed" << llendl; - - LLStringBase<char>::format_map_t args; - args["[HOST_NAME]"] = host_name; - - gViewerWindow->alertXml("UnableToConnect", args, login_alert_done ); - reset_login(); - return FALSE; - } - break; - } - - case USERSERVER_LOCAL: - llinfos << "Using local userserver" << llendl; - gUserServer.setAddress( LOOPBACK_ADDRESS_STRING ); - gStartupState = STATE_USERSERVER_RESOLVED; - break; - - case USERSERVER_OTHER: - llinfos << "Userserver set explicitly" << llendl; - gStartupState = STATE_USERSERVER_RESOLVED; - break; - - case USERSERVER_NONE: - default: - llerrs << "No userserver IP address specified" << llendl; - break; - } - return do_normal_idle; - } - - if (STATE_RESOLVING_USERSERVER == gStartupState) - { - // Don't do anything. Wait for LL_WM_HOST_RESOLVED which is handled by LLAsyncHostByName, - // which calls on_userserver_name_resolved, which will push us to the next state. - if (timeout.getElapsedTimeF32() > TIMEOUT_SECONDS*3.f) - { - // Cancel the pending asynchostbyname request - - gViewerWindow->alertXml("CanNotFindServer", - login_alert_status, NULL); - - // Back up to login screen - reset_login(); - gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT); - } - ms_sleep(1); - return do_normal_idle; - } - - if (STATE_USERSERVER_RESOLVED == gStartupState) - { - if (!gUserServer.isOk()) - { - LLStringBase<char>::format_map_t args; - args["[IP_ADDRESS]"] = u32_to_ip_string( gUserServer.getAddress() ); - - gViewerWindow->alertXml("PleaseSelectServer", args, login_alert_done ); - - reset_login(); - return FALSE; - } - - write_debug("Userserver: "); - char tmp_str[256]; /* Flawfinder: ignore */ - gUserServer.getIPString(tmp_str, 256); - write_debug(tmp_str); - write_debug("\n"); - - gStartupState++; - } - - if (STATE_MESSAGE_TEMPLATE_SEND == gStartupState) - { - set_startup_status(0.10f, "Verifying protocol version...", NULL); - - LLHost mt_host; - if (!gRunLocal) - { - // open up user server circuit (trusted) - gMessageSystem->enableCircuit(gUserServer, TRUE); - mt_host = gUserServer; - } - else - { - mt_host = gAgentSimHost; - } - - llinfos << "Verifying message template..." << llendl; - LLMessageSystem::sendSecureMessageTemplateChecksum(mt_host); - - timeout.reset(); - gStartupState++; - return do_normal_idle; - } - - if (STATE_MESSAGE_TEMPLATE_WAIT == gStartupState) - { - LLMessageSystem* msg = gMessageSystem; - while (msg->checkAllMessages(gFrameCount, gServicePump)) - { - if (msg->isTemplateConfirmed()) - { - BOOL update_available = FALSE; - BOOL mandatory = FALSE; - - if (!LLMessageSystem::doesTemplateMatch()) - { - // Mandatory update -- message template checksum doesn't match - update_available = TRUE; - mandatory = TRUE; - } - - BOOL quit = FALSE; - if (update_available) - { - if (show_connect_box) - { - update_app(mandatory, ""); - gStartupState = STATE_UPDATE_CHECK; - return FALSE; - } - else - { - quit = TRUE; - } - } - - // Bail out and clean up circuit - if (quit) - { - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage( msg->getSender() ); - app_force_quit(NULL); - return FALSE; - } - - // If we get here, we've got a compatible message template - if (!mandatory) - { - llinfos << "Message template is current!" << llendl; - } - gStartupState = STATE_LOGIN_AUTH_INIT; - timeout.reset(); - // unregister with the message system so it knows we're no longer expecting this message - msg->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, NULL, NULL); - - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage(gUserServer); - msg->disableCircuit(gUserServer); - if (gRunLocal) - { - msg->enableCircuit(gAgentSimHost, TRUE); - - // Don't use a session token, and generate a random user id - gAgentID.generate(); - gAgentSessionID = LLUUID::null; - - // Skip userserver queries. - gStartupState = STATE_WORLD_INIT; - } - } - } - gMessageSystem->processAcks(); - - if (timeout.getElapsedTimeF32() > TIMEOUT_SECONDS) - { - if (timeout_count > MAX_TIMEOUT_COUNT) - { - gViewerWindow->alertXml("SystemMayBeDown", - login_alert_status, - NULL); - - // Back up to login screen - reset_login(); - gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT); - } - else - { - llinfos << "Resending on timeout" << llendl; - gStartupState--; - timeout_count++; - } - } + // skipping over STATE_UPDATE_CHECK because that just waits for input + gStartupState = STATE_LOGIN_AUTH_INIT; return do_normal_idle; } if (STATE_UPDATE_CHECK == gStartupState) { + // wait for user to give input via dialog box return do_normal_idle; } @@ -1677,9 +1479,7 @@ BOOL idle_startup() // // Initialize classes w/graphics stuff. // - gImageList.doPrefetchImages(); - update_texture_fetch(); - + gImageList.doPrefetchImages(); LLSurface::initClasses(); LLFace::initClass(); @@ -1710,6 +1510,7 @@ BOOL idle_startup() LLViewerRegion *regionp = gWorldp->getRegionFromHandle(first_sim_handle); llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; + gStartupState = STATE_SEED_GRANTED_WAIT; regionp->setSeedCapability(first_sim_seed_cap); // Set agent's initial region to be the one we just created. @@ -1725,9 +1526,32 @@ BOOL idle_startup() // VEFFECT: Login gWorldp->addRegion(0, gAgentSimHost); gAgent.setRegion(gWorldp->getRegionFromHandle(0)); + + gStartupState = STATE_SEED_CAP_GRANTED; } display_startup(); + return do_normal_idle; + } + + + //--------------------------------------------------------------------- + // Wait for Seed Cap Grant + //--------------------------------------------------------------------- + if(STATE_SEED_GRANTED_WAIT == gStartupState) + { + llinfos << "Waiting for seed grant ...." << llendl; + return do_normal_idle; + } + + + //--------------------------------------------------------------------- + // Seed Capability Granted + // no newMessage calls should happen before this point + //--------------------------------------------------------------------- + if (STATE_SEED_CAP_GRANTED == gStartupState) + { + update_texture_fetch(); // Initialize UI if (!gNoRender) @@ -2195,21 +2019,6 @@ BOOL idle_startup() return do_normal_idle; } - //--------------------------------------------------------------------- - // Assert agent to userserver - //--------------------------------------------------------------------- - if (STATE_CONNECT_USERSERVER == gStartupState) - { - LLMessageSystem* msg = gMessageSystem; - msg->enableCircuit(gUserServer, TRUE); - msg->newMessage("ConnectAgentToUserserver"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->sendReliable(gUserServer); - gStartupState++; - return do_normal_idle; - } //--------------------------------------------------------------------- // Misc @@ -2334,9 +2143,6 @@ BOOL idle_startup() msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound); msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change); //msg->setHandlerFuncFast(_PREHASH_AttachedSoundCutoffRadius, process_attached_sound_cutoff_radius); - msg->setHandlerFunc( - "ConnectToUserserver", - process_connect_to_userserver); llinfos << "Initialization complete" << llendl; gInitializationComplete = TRUE; @@ -2776,31 +2582,6 @@ void set_startup_status(const F32 frac, const char *string, const char* msg) gViewerWindow->setProgressMessage(msg); } -void on_userserver_name_resolved( BOOL success, const LLString& host_name, U32 ip, void* userdata ) -{ - if( STATE_RESOLVING_USERSERVER != gStartupState ) - { - llwarns << "Userserver name callback returned during invalid state!" << llendl; - return; - } - - if( success ) - { - gUserServer.setAddress( ip ); - llinfos << "...Userserver resolved to " << gUserServer << llendl; - gStartupState = STATE_USERSERVER_RESOLVED; - } - else - { - llwarns << "setHostByName failed" << llendl; - - LLStringBase<char>::format_map_t args; - args["[HOST_NAME]"] = host_name; - gViewerWindow->alertXml("SetByHostFail", args, login_alert_done ); - reset_login(); - } -} - void login_alert_status(S32 option, void* user_data) { if (0 == option) @@ -2924,8 +2705,6 @@ void update_dialog_callback(S32 option, void *userdata) LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); #if LL_WINDOWS - char ip[MAX_STRING]; /* Flawfinder: ignore */ - update_exe_path = gDirUtilp->getTempFilename(); if (update_exe_path.empty()) { @@ -2952,7 +2731,6 @@ void update_dialog_callback(S32 option, void *userdata) app_force_quit(NULL); return; } - u32_to_ip_string(gUserServer.getAddress(), ip); // if a sim name was passed in via command line parameter (typically through a SLURL) if ( LLURLSimString::sInstance.mSimString.length() ) @@ -3080,7 +2858,7 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFuncFast(_PREHASH_MeanCollisionAlert, process_mean_collision_alert_message, NULL); msg->setHandlerFunc("ViewerFrozenMessage", process_frozen_message); - msg->setHandlerFuncFast(_PREHASH_RequestAvatarInfo, process_avatar_info_request); + //msg->setHandlerFuncFast(_PREHASH_RequestAvatarInfo, process_avatar_info_request); msg->setHandlerFuncFast(_PREHASH_NameValuePair, process_name_value); msg->setHandlerFuncFast(_PREHASH_RemoveNameValuePair, process_remove_name_value); msg->setHandlerFuncFast(_PREHASH_AvatarAnimation, process_avatar_animation); @@ -3944,19 +3722,6 @@ void release_start_screen() gStartImageGL = NULL; } -void process_connect_to_userserver(LLMessageSystem* msg, void**) -{ - // Sent unreliably since if we've become disconnected, the - // userserver will get back to us eventually. By sending reliable, - // we also may accidently induce two separate validations under - // conditions where the userserver is already lagged. - msg->newMessage("ConnectAgentToUserserver"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->sendMessage(gUserServer); -} - bool LLStartUp::canGoFullscreen() { return gStartupState >= STATE_WORLD_INIT; diff --git a/linden/indra/newview/llstartup.h b/linden/indra/newview/llstartup.h index 7c54b8c..718d74d 100644 --- a/linden/indra/newview/llstartup.h +++ b/linden/indra/newview/llstartup.h @@ -46,27 +46,20 @@ enum EStartupState{ STATE_LOGIN_SHOW, STATE_LOGIN_WAIT, STATE_LOGIN_CLEANUP, - STATE_RESOLVING_USERSERVER, - STATE_USERSERVER_RESOLVED, - STATE_MESSAGE_TEMPLATE_SEND, - STATE_MESSAGE_TEMPLATE_WAIT, STATE_UPDATE_CHECK, STATE_LOGIN_AUTH_INIT, STATE_LOGIN_AUTHENTICATE, STATE_LOGIN_NO_DATA_YET, STATE_LOGIN_DOWNLOADING, STATE_LOGIN_PROCESS_RESPONSE, - //STATE_USERSERVER_SEND, - //STATE_USERSERVER_WAIT, - //STATE_LOCATION_SEND, - //STATE_LOCATION_WAIT, STATE_WORLD_INIT, + STATE_SEED_GRANTED_WAIT, + STATE_SEED_CAP_GRANTED, STATE_QUICKTIME_INIT, STATE_WORLD_WAIT, STATE_AGENT_SEND, STATE_AGENT_WAIT, STATE_INVENTORY_SEND, - STATE_CONNECT_USERSERVER, STATE_MISC, STATE_PRECACHE, STATE_WEARABLES_WAIT, diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp index a1b9526..98cafa0 100644 --- a/linden/indra/newview/lltoolbrush.cpp +++ b/linden/indra/newview/lltoolbrush.cpp @@ -568,6 +568,7 @@ void LLToolBrushLand::undo() } // static +/* void LLToolBrushLand::redo() { for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); @@ -580,7 +581,7 @@ void LLToolBrushLand::redo() gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); gMessageSystem->sendMessage(regionp->getHost()); } -} +}*/ // static bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const diff --git a/linden/indra/newview/lltoolbrush.h b/linden/indra/newview/lltoolbrush.h index e6e4257..97aa13f 100644 --- a/linden/indra/newview/lltoolbrush.h +++ b/linden/indra/newview/lltoolbrush.h @@ -73,7 +73,7 @@ public: virtual void undo(); virtual BOOL canUndo() { return TRUE; } - virtual void redo(); + //virtual void redo(); virtual BOOL canRedo() { return FALSE; } diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp index 642fa7b..c76990c 100644 --- a/linden/indra/newview/llviewerjointmesh.cpp +++ b/linden/indra/newview/llviewerjointmesh.cpp @@ -31,11 +31,14 @@ //----------------------------------------------------------------------------- #include "llviewerprecompiledheaders.h" +#if LL_WINDOWS // For Intel vector classes + #include "fvec.h" +#endif + #include "imageids.h" #include "llfasttimer.h" #include "llagent.h" -#include "llapr.h" #include "llbox.h" #include "lldrawable.h" #include "lldrawpoolavatar.h" @@ -46,18 +49,12 @@ #include "llglheaders.h" #include "lltexlayer.h" #include "llviewercamera.h" -#include "llviewercontrol.h" #include "llviewerimagelist.h" #include "llviewerjointmesh.h" #include "llvoavatar.h" #include "llsky.h" #include "pipeline.h" #include "llglslshader.h" -#include "llmath.h" -#include "v4math.h" -#include "m3math.h" -#include "m4math.h" - #if !LL_DARWIN && !LL_LINUX extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB; @@ -71,7 +68,6 @@ static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD; - //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // LLViewerJointMesh::LLSkinJoint @@ -124,7 +120,6 @@ BOOL LLSkinJoint::setupSkinJoint( LLViewerJoint *joint) return TRUE; } - //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // LLViewerJointMesh @@ -419,9 +414,9 @@ const S32 NUM_AXES = 3; // rotation Z 0-n // pivot parent 0-n -- child = n+1 -static LLMatrix4 gJointMatUnaligned[32]; -static LLMatrix3 gJointRotUnaligned[32]; -static LLVector4 gJointPivot[32]; +static LLMatrix4 gJointMat[32]; +static LLMatrix3 gJointRot[32]; +static LLVector4 gJointPivot[32]; //----------------------------------------------------------------------------- // uploadJointMatrices() @@ -442,8 +437,8 @@ void LLViewerJointMesh::uploadJointMatrices() { joint_mat *= LLDrawPoolAvatar::getModelView(); } - gJointMatUnaligned[joint_num] = joint_mat; - gJointRotUnaligned[joint_num] = joint_mat.getMat3(); + gJointMat[joint_num] = joint_mat; + gJointRot[joint_num] = joint_mat.getMat3(); } BOOL last_pivot_uploaded = FALSE; @@ -480,8 +475,8 @@ void LLViewerJointMesh::uploadJointMatrices() { LLVector3 pivot; pivot = LLVector3(gJointPivot[i]); - pivot = pivot * gJointRotUnaligned[i]; - gJointMatUnaligned[i].translate(pivot); + pivot = pivot * gJointRot[i]; + gJointMat[i].translate(pivot); } // upload matrices @@ -492,11 +487,11 @@ void LLViewerJointMesh::uploadJointMatrices() for (joint_num = 0; joint_num < reference_mesh->mJointRenderData.count(); joint_num++) { - gJointMatUnaligned[joint_num].transpose(); + gJointMat[joint_num].transpose(); for (S32 axis = 0; axis < NUM_AXES; axis++) { - F32* vector = gJointMatUnaligned[joint_num].mMatrix[axis]; + F32* vector = gJointMat[joint_num].mMatrix[axis]; //glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, LL_CHARACTER_MAX_JOINTS_PER_MESH * axis + joint_num+5, (GLfloat*)vector); U32 offset = LL_CHARACTER_MAX_JOINTS_PER_MESH*axis+joint_num; memcpy(mat+offset*4, vector, sizeof(GLfloat)*4); @@ -908,9 +903,21 @@ BOOL LLViewerJointMesh::updateLOD(F32 pixel_area, BOOL activate) return (valid != activate); } -// static -void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) + +void LLViewerJointMesh::updateGeometry() { + if (!(mValid + && mMesh + && mFace + && mMesh->hasWeights() + && mFace->mVertexBuffer.notNull() + && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0)) + { + return; + } + + uploadJointMatrices(); + LLStrider<LLVector3> o_vertices; LLStrider<LLVector3> o_normals; @@ -951,9 +958,9 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) // No lerp required in this case. if (w == 1.0f) { - gBlendMat = gJointMatUnaligned[joint+1]; + gBlendMat = gJointMat[joint+1]; o_vertices[bidx] = coords[index] * gBlendMat; - gBlendRotMat = gJointRotUnaligned[joint+1]; + gBlendRotMat = gJointRot[joint+1]; o_normals[bidx] = normals[index] * gBlendRotMat; continue; } @@ -961,8 +968,8 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) // Try to keep all the accesses to the matrix data as close // together as possible. This function is a hot spot on the // Mac. JC - LLMatrix4 &m0 = gJointMatUnaligned[joint+1]; - LLMatrix4 &m1 = gJointMatUnaligned[joint+0]; + LLMatrix4 &m0 = gJointMat[joint+1]; + LLMatrix4 &m1 = gJointMat[joint+0]; gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w); gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w); @@ -982,8 +989,8 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) o_vertices[bidx] = coords[index] * gBlendMat; - LLMatrix3 &n0 = gJointRotUnaligned[joint+1]; - LLMatrix3 &n1 = gJointRotUnaligned[joint+0]; + LLMatrix3 &n0 = gJointRot[joint+1]; + LLMatrix3 &n1 = gJointRot[joint+0]; gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w); gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w); @@ -1001,161 +1008,6 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) } } -const U32 UPDATE_GEOMETRY_CALL_MASK = 0x1FFF; // 8K samples before overflow -const U32 UPDATE_GEOMETRY_CALL_OVERFLOW = ~UPDATE_GEOMETRY_CALL_MASK; -static bool sUpdateGeometryCallPointer = false; -static F64 sUpdateGeometryGlobalTime = 0.0 ; -static F64 sUpdateGeometryElapsedTime = 0.0 ; -static F64 sUpdateGeometryElapsedTimeOff = 0.0 ; -static F64 sUpdateGeometryElapsedTimeOn = 0.0 ; -static F64 sUpdateGeometryRunAvgOff[10]; -static F64 sUpdateGeometryRunAvgOn[10]; -static U32 sUpdateGeometryRunCount = 0 ; -static U32 sUpdateGeometryCalls = 0 ; -static U32 sUpdateGeometryLastProcessor = 0 ; -void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); - -void LLViewerJointMesh::updateGeometry() -{ - extern BOOL gVectorizePerfTest; - extern U32 gVectorizeProcessor; - - if (!(mValid - && mMesh - && mFace - && mMesh->hasWeights() - && mFace->mVertexBuffer.notNull() - && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0)) - { - return; - } - - if (!gVectorizePerfTest) - { - // Once we've measured performance, just run the specified - // code version. - if(sUpdateGeometryFunc == updateGeometryOriginal) - uploadJointMatrices(); - sUpdateGeometryFunc(mFace, mMesh); - } - else - { - // At startup, measure the amount of time in skinning and choose - // the fastest one. - LLTimer ug_timer ; - - if (sUpdateGeometryCallPointer) - { - if(sUpdateGeometryFunc == updateGeometryOriginal) - uploadJointMatrices(); - // call accelerated version for this processor - sUpdateGeometryFunc(mFace, mMesh); - } - else - { - uploadJointMatrices(); - updateGeometryOriginal(mFace, mMesh); - } - - sUpdateGeometryElapsedTime += ug_timer.getElapsedTimeF64(); - ++sUpdateGeometryCalls; - if(0 != (sUpdateGeometryCalls & UPDATE_GEOMETRY_CALL_OVERFLOW)) - { - F64 time_since_app_start = ug_timer.getElapsedSeconds(); - if(sUpdateGeometryGlobalTime == 0.0 - || sUpdateGeometryLastProcessor != gVectorizeProcessor) - { - sUpdateGeometryGlobalTime = time_since_app_start; - sUpdateGeometryElapsedTime = 0; - sUpdateGeometryCalls = 0; - sUpdateGeometryRunCount = 0; - sUpdateGeometryLastProcessor = gVectorizeProcessor; - sUpdateGeometryCallPointer = false; - return; - } - F64 percent_time_in_function = - ( sUpdateGeometryElapsedTime * 100.0 ) / ( time_since_app_start - sUpdateGeometryGlobalTime ) ; - sUpdateGeometryGlobalTime = time_since_app_start; - if (!sUpdateGeometryCallPointer) - { - // First set of run data is with vectorization off. - sUpdateGeometryCallPointer = true; - llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = " - << "vectorize off " << percent_time_in_function - << "% of time with " - << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls) - << " seconds per call " - << llendl; - sUpdateGeometryRunAvgOff[sUpdateGeometryRunCount] = percent_time_in_function; - sUpdateGeometryElapsedTimeOff += sUpdateGeometryElapsedTime; - sUpdateGeometryCalls = 0; - } - else - { - // Second set of run data is with vectorization on. - sUpdateGeometryCallPointer = false; - llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = " - << "VEC on " << percent_time_in_function - << "% of time with " - << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls) - << " seconds per call " - << llendl; - sUpdateGeometryRunAvgOn[sUpdateGeometryRunCount] = percent_time_in_function ; - sUpdateGeometryElapsedTimeOn += sUpdateGeometryElapsedTime; - - sUpdateGeometryCalls = 0; - sUpdateGeometryRunCount++; - F64 a = 0.0, b = 0.0; - for(U32 i = 0; i<sUpdateGeometryRunCount; i++) - { - a += sUpdateGeometryRunAvgOff[i]; - b += sUpdateGeometryRunAvgOn[i]; - } - a /= sUpdateGeometryRunCount; - b /= sUpdateGeometryRunCount; - F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn; - llinfos << "run averages (" << (F64)sUpdateGeometryRunCount - << "/10) vectorize off " << a - << "% : vectorize type " << gVectorizeProcessor - << " " << b - << "% : performance boost " - << perf_boost * 100.0 - << "%" - << llendl ; - if(sUpdateGeometryRunCount == 10) - { - // In case user runs test again, force reset of data on - // next run. - sUpdateGeometryGlobalTime = 0.0; - - // We have data now on which version is faster. Switch to that - // code and save the data for next run. - gVectorizePerfTest = FALSE; - gSavedSettings.setBOOL("VectorizePerfTest", FALSE); - - if (perf_boost > 0.0) - { - llinfos << "Vectorization improves avatar skinning performance, " - << "keeping on for future runs." - << llendl; - gSavedSettings.setBOOL("VectorizeSkin", TRUE); - } - else - { - // SIMD decreases performance, fall back to original code - llinfos << "Vectorization decreases avatar skinning performance, " - << "switching back to original code." - << llendl; - - gSavedSettings.setBOOL("VectorizeSkin", FALSE); - } - } - } - sUpdateGeometryElapsedTime = 0.0f; - } - } -} - void LLViewerJointMesh::dump() { if (mValid) diff --git a/linden/indra/newview/llviewerjointmesh.h b/linden/indra/newview/llviewerjointmesh.h index b40daed..f016da6 100644 --- a/linden/indra/newview/llviewerjointmesh.h +++ b/linden/indra/newview/llviewerjointmesh.h @@ -146,22 +146,6 @@ public: /*virtual*/ BOOL isAnimatable() { return FALSE; } void writeCAL3D(apr_file_t* fp, S32 material_num, LLCharacter* characterp); - - // Avatar vertex skinning is a significant performance issue on computers - // with avatar vertex programs turned off (for example, most Macs). We - // therefore have custom versions that use SIMD instructions. - // - // These functions require compiler options for SSE2, SSE, or neither, and - // hence are contained in separate individual .cpp files. JC - static void updateGeometryOriginal(LLFace* face, LLPolyMesh* mesh); - // generic vector code, used for Altivec - static void updateGeometryVectorized(LLFace* face, LLPolyMesh* mesh); - static void updateGeometrySSE(LLFace* face, LLPolyMesh* mesh); - static void updateGeometrySSE2(LLFace* face, LLPolyMesh* mesh); - - // Use a fuction pointer to indicate which version we are running. - static void (*sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); - private: // Allocate skin data BOOL allocateSkinData( U32 numSkinJoints ); diff --git a/linden/indra/newview/llviewerjointmesh_sse.cpp b/linden/indra/newview/llviewerjointmesh_sse.cpp deleted file mode 100644 index 4e30ce1..0000000 --- a/linden/indra/newview/llviewerjointmesh_sse.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 class implementation with LLViewerJointMesh class - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- - -// Do not use precompiled headers, because we need to build this file with -// SSE support, but not the precompiled header file. JC -#include "linden_common.h" - -#include "llviewerjointmesh.h" - -// project includes -#include "llface.h" -#include "llpolymesh.h" - -// library includes -#include "lldarray.h" -#include "llv4math.h" // for LL_VECTORIZE -#include "llv4matrix3.h" -#include "llv4matrix4.h" -#include "v3math.h" - -// *NOTE: SSE must be enabled for this module - -#if LL_VECTORIZE - -static LLV4Matrix4 sJointMat[32]; - -inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j) -{ - m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]); - m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]); - m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]); - m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY])); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ])); -} - -// static -void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData; - - //upload joint pivots/matrices - for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j ) - { - matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix, - joint_data[j]->mSkinJoint ? - joint_data[j]->mSkinJoint->mRootToJointSkinOffset - : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider<LLVector3> o_vertices; - LLStrider<LLVector3> o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} - -#else - -void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh) -{ - LLViewerJointMesh::updateGeometryVectorized(face, mesh); - return; -} - -#endif diff --git a/linden/indra/newview/llviewerjointmesh_sse2.cpp b/linden/indra/newview/llviewerjointmesh_sse2.cpp deleted file mode 100644 index 1c205ae..0000000 --- a/linden/indra/newview/llviewerjointmesh_sse2.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 class implementation with LLViewerJointMesh class - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- - -// Do not use precompiled headers, because we need to build this file with -// SSE support, but not the precompiled header file. JC -#include "linden_common.h" - -#include "llviewerjointmesh.h" - -// project includes -#include "llface.h" -#include "llpolymesh.h" - -// library includes -#include "lldarray.h" -#include "llstrider.h" -#include "llv4math.h" // for LL_VECTORIZE -#include "llv4matrix3.h" -#include "llv4matrix4.h" -#include "m4math.h" -#include "v3math.h" - -// *NOTE: SSE2 must be enabled for this module - -#if LL_VECTORIZE - -static LLV4Matrix4 sJointMat[32]; - -inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j) -{ - m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]); - m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]); - m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]); - m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY])); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ])); -} - -// static -void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData; - - //upload joint pivots/matrices - for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j ) - { - matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix, - joint_data[j]->mSkinJoint ? - joint_data[j]->mSkinJoint->mRootToJointSkinOffset - : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider<LLVector3> o_vertices; - LLStrider<LLVector3> o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} - -#else - -void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh) -{ - LLViewerJointMesh::updateGeometryVectorized(face, mesh); - return; -} - -#endif diff --git a/linden/indra/newview/llviewerjointmesh_vec.cpp b/linden/indra/newview/llviewerjointmesh_vec.cpp deleted file mode 100644 index 4d52361..0000000 --- a/linden/indra/newview/llviewerjointmesh_vec.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 math class implementation with LLViewerJointMesh class - * - * Copyright (c) 2001-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- -#include "llviewerprecompiledheaders.h" - -#include "llviewerjointmesh.h" - -#include "llface.h" -#include "llpolymesh.h" -#include "llv4math.h" -#include "llv4matrix3.h" -#include "llv4matrix4.h" - -// *NOTE: This is the fallback code for vectorized joint mesh skinning. -// For builds that must support non-SSE x86 code (Windows, perhaps Linux) -// SSE code generation should be disabled for this file. -// -// For builds that run on processors that always have SSE (Mac), -// SSE code generation can be enabled. JC - -static LLV4Matrix4 sJointMat[32]; - -// static -void LLViewerJointMesh::updateGeometryVectorized(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData; - S32 j, joint_num, joint_end = joint_data.count(); - LLV4Vector3 pivot; - - //upload joint pivots/matrices - for(j = joint_num = 0; joint_num < joint_end ; ++joint_num ) - { - LLSkinJoint *sj; - const LLMatrix4 * wm = joint_data[joint_num]->mWorldMatrix; - if (NULL == (sj = joint_data[joint_num]->mSkinJoint)) - { - sj = joint_data[++joint_num]->mSkinJoint; - ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToParentJointSkinOffset, pivot); - sJointMat[j++].translate(pivot); - wm = joint_data[joint_num]->mWorldMatrix; - } - ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToJointSkinOffset, pivot); - sJointMat[j++].translate(pivot); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider<LLVector3> o_vertices; - LLStrider<LLVector3> o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index a142aff..31d10df 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -278,7 +278,7 @@ void handle_leave_group(void *); // File Menu const char* upload_pick(void* data); void handle_upload(void* data); -void handle_upload_object(void* data); +//void handle_upload_object(void* data); void handle_compress_image(void*); BOOL enable_save_as(void *); @@ -395,11 +395,11 @@ void slow_mo_animations(void *); void handle_disconnect_viewer(void *); void handle_stopall(void*); -void handle_hinge(void*); -void handle_ptop(void*); -void handle_lptop(void*); -void handle_wheel(void*); -void handle_dehinge(void*); +//void handle_hinge(void*); +//void handle_ptop(void*); +//void handle_lptop(void*); +//void handle_wheel(void*); +//void handle_dehinge(void*); BOOL enable_dehinge(void*); void handle_force_delete(void*); void print_object_info(void*); @@ -980,7 +980,6 @@ extern BOOL gDebugClicks; extern BOOL gDebugWindowProc; extern BOOL gDebugTextEditorTips; extern BOOL gDebugSelectMgr; -extern BOOL gVectorizePerfTest; void init_debug_ui_menu(LLMenuGL* menu) { @@ -1190,8 +1189,6 @@ void init_debug_rendering_menu(LLMenuGL* menu) (void*)"ShowDepthBuffer")); sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); - sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest)); - sub_menu = new LLMenuGL("Render Tests"); sub_menu->append(new LLMenuItemCheckGL("Camera Offset", @@ -4550,36 +4547,36 @@ class LLToolsStopAllAnimations : public view_listener_t } }; -void handle_hinge(void*) -{ - gSelectMgr->sendHinge(1); -} +//void handle_hinge(void*) +//{ +// gSelectMgr->sendHinge(1); +//} -void handle_ptop(void*) -{ - gSelectMgr->sendHinge(2); -} +//void handle_ptop(void*) +//{ +// gSelectMgr->sendHinge(2); +//} -void handle_lptop(void*) -{ - gSelectMgr->sendHinge(3); -} +//void handle_lptop(void*) +//{ +// gSelectMgr->sendHinge(3); +//} -void handle_wheel(void*) -{ - gSelectMgr->sendHinge(4); -} +//void handle_wheel(void*) +//{ +// gSelectMgr->sendHinge(4); +//} -void handle_dehinge(void*) -{ - gSelectMgr->sendDehinge(); -} +//void handle_dehinge(void*) +//{ +// gSelectMgr->sendDehinge(); +//} -BOOL enable_dehinge(void*) -{ - LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject(); - return obj && !obj->isAttachment(); -} +//BOOL enable_dehinge(void*) +//{ +// LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject(); +// return obj && !obj->isAttachment(); +//} class LLEditEnableCut : public view_listener_t diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp index 09b2baf..d0b8c73 100644 --- a/linden/indra/newview/llviewermenufile.cpp +++ b/linden/indra/newview/llviewermenufile.cpp @@ -206,6 +206,7 @@ const char* upload_pick(void* data) return filename; } +/* void handle_upload_object(void* data) { const char* filename = upload_pick(data); @@ -215,7 +216,7 @@ void handle_upload_object(void* data) LLFloaterImport* floaterp = new LLFloaterImport(filename); gUICtrlFactory->buildFloater(floaterp, "floater_import.xml"); } -} +}*/ class LLFileUploadImage : public view_listener_t { diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index d9e2927..d45cf34 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -2338,82 +2338,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) } } -/* -void process_agent_to_new_region(LLMessageSystem *mesgsys, void **user_data) -{ -// LLFastTimer t(LLFastTimer::FTM_TEMP8); - - U64 handle; - U32 ip; - U16 port; - LLUUID session_id; - - // Actually, the agent itself should process this message. - // From a "AgentToNewRegion" message - mesgsys->getIPAddrFast(_PREHASH_RegionData, _PREHASH_IP, ip); - mesgsys->getIPPortFast(_PREHASH_RegionData, _PREHASH_Port, port); - mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_Handle, handle); - mesgsys->getUUIDFast(_PREHASH_RegionData, _PREHASH_SessionID, session_id); - - if (gAgent.getSessionID() != session_id) - { - llwarns << "Got AgentToNewRegion with invalid session ID, ignoring" << llendl; - return; - } - - LLViewerRegion *regionp; - - F32 x, y; - from_region_handle(handle, &x, &y); - regionp = gWorldp->getRegionFromHandle(handle); - if (!regionp) - { - if (gAgent.getRegion()) - { - llwarns << "current region " << gAgent.getRegion()->getOriginGlobal() << llendl; - } - - llwarns << "Agent being sent to invalid home region: " - << x << ":" << y - << " current pos " << gAgent.getPositionGlobal() - << llendl; - do_disconnect("You were sent to an invalid region."); - return; - - } - - if (regionp == gAgent.getRegion()) - { - llinfos << "Agent being sent to current home region, skipping." << llendl; - return; - } - - - llinfos << "AgentToNewRegion - being sent to " << x << ":" << y - << "" - - LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal()); - - gAgent.setRegion(regionp); - - gObjectList.shiftObjects(shift_vector); - - llinfos << "Changing home region to " << x << ":" << y << llendl; - - // send camera update to new region - - send_agent_update(TRUE, TRUE); - - // set our upstream asset provider to the new simulator - LLHost upstream(ip, port); - gAssetStorage->setUpstream(upstream); - gCacheName->setUpstream(upstream); - - // Not needed, as simulator will always send request as it creates the new - // agent in the new region. - // send_current_avatar_info(); -} -*/ // Simulator we're on is informing the viewer that the agent // is starting to teleport (perhaps to another sim, perhaps to the @@ -3556,6 +3480,7 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data) // This info is requested by the simulator when the agent first logs in // or when it moves into a simulator in which it did not already have // a child agent. +/* void process_avatar_info_request(LLMessageSystem *mesgsys, void **user_data) { llinfos << "process_avatar_info_request()" << llendl; @@ -3563,7 +3488,7 @@ void process_avatar_info_request(LLMessageSystem *mesgsys, void **user_data) // Send the avatar appearance (parameters and texture entry UUIDs) gAgent.sendAgentSetAppearance(); send_agent_update(TRUE, TRUE); -} +}*/ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data) diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h index eb9610b..1023182 100644 --- a/linden/indra/newview/llviewernetwork.h +++ b/linden/indra/newview/llviewernetwork.h @@ -59,8 +59,6 @@ struct LLUserServerData const char* mHelperURI; }; -extern LLHost gUserServer; - extern F32 gPacketDropPercentage; extern F32 gInBandwidth; extern F32 gOutBandwidth; diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp index 437a768..ac56681 100644 --- a/linden/indra/newview/llviewerparcelmgr.cpp +++ b/linden/indra/newview/llviewerparcelmgr.cpp @@ -1058,7 +1058,9 @@ public: // for parcel buys S32 mParcelID; - + S32 mPrice; + S32 mArea; + // for land claims F32 mWest; F32 mSouth; @@ -1116,6 +1118,8 @@ LLViewerParcelMgr::ParcelBuyInfo* LLViewerParcelMgr::setupParcelBuy( info->mIsClaim = is_claim; info->mRemoveContribution = remove_contribution; info->mHost = region->getHost(); + info->mPrice = mCurrentParcel->getSalePrice(); + info->mArea = mCurrentParcel->getArea(); if (!is_claim) { @@ -1161,6 +1165,12 @@ void LLViewerParcelMgr::sendParcelBuy(ParcelBuyInfo* info) msg->addF32("East", info->mEast); msg->addF32("North", info->mNorth); } + else // ParcelBuy + { + msg->nextBlock("ParcelData"); + msg->addS32("Price",info->mPrice); + msg->addS32("Area",info->mArea); + } msg->sendReliable(info->mHost); } diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp index 9e05d4f..0f20fd8 100644 --- a/linden/indra/newview/llviewerregion.cpp +++ b/linden/indra/newview/llviewerregion.cpp @@ -51,6 +51,7 @@ #include "llfloaterregioninfo.h" #include "llhttpnode.h" #include "llnetmap.h" +#include "llstartup.h" #include "llviewerobjectlist.h" #include "llviewerparceloverlay.h" #include "llvlmanager.h" @@ -1176,6 +1177,10 @@ void LLViewerRegion::unpackRegionHandshake() setBillableFactor(billable_factor); setCacheID(cache_id); + LLUUID region_id; + msg->getUUID("RegionInfo2", "RegionID", region_id); + setRegionID(region_id); + LLVLComposition *compp = getComposition(); if (compp) { @@ -1252,6 +1257,11 @@ public: { llinfos << "BaseCapabilitiesComplete::error " << statusNum << ": " << reason << llendl; + + if (STATE_SEED_GRANTED_WAIT == gStartupState) + { + gStartupState = STATE_SEED_CAP_GRANTED; + } } void result(const LLSD& content) @@ -1263,6 +1273,11 @@ public: llinfos << "BaseCapabilitiesComplete::result got capability for " << iter->first << llendl; } + + if (STATE_SEED_GRANTED_WAIT == gStartupState) + { + gStartupState = STATE_SEED_CAP_GRANTED; + } } static boost::intrusive_ptr<BaseCapabilitiesComplete> build( @@ -1279,6 +1294,11 @@ private: void LLViewerRegion::setSeedCapability(const std::string& url) { + if (getCapability("Seed") == url) + { + llwarns << "Ignoring duplicate seed capability" << llendl; + return; + } delete mEventPoll; mEventPoll = NULL; @@ -1306,23 +1326,18 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("ParcelVoiceInfoRequest"); capabilityNames.append("ChatSessionRequest"); + llinfos << "posting to seed " << url << llendl; + LLHTTPClient::post(url, capabilityNames, BaseCapabilitiesComplete::build(this)); } -static -LLEventPoll* createViewerEventPoll(const std::string& url) -{ - return new LLEventPoll(url); -} - - void LLViewerRegion::setCapability(const std::string& name, const std::string& url) { if(name == "EventQueueGet") { delete mEventPoll; mEventPoll = NULL; - mEventPoll = createViewerEventPoll(url); + mEventPoll = new LLEventPoll(url, getHost()); } else if(name == "UntrustedSimulatorMessage") { @@ -1346,14 +1361,15 @@ std::string LLViewerRegion::getCapability(const std::string& name) const void LLViewerRegion::logActiveCapabilities() const { + int count = 0; CapabilityMap::const_iterator iter; - for (iter = mCapabilities.begin(); iter != mCapabilities.end(); iter++) + for (iter = mCapabilities.begin(); iter != mCapabilities.end(); iter++, count++) { if (!iter->second.empty()) { - // llinfos << "Active capability is " << iter->first << llendl; llinfos << iter->first << " URL is " << iter->second << llendl; } } + llinfos << "Dumped " << count << " entries." << llendl; } diff --git a/linden/indra/newview/llviewerregion.h b/linden/indra/newview/llviewerregion.h index 5b7ce17..8ac5de2 100644 --- a/linden/indra/newview/llviewerregion.h +++ b/linden/indra/newview/llviewerregion.h @@ -196,6 +196,10 @@ public: LLSurface &getLand() const { return *mLandp; } + // set and get the region id + const LLUUID& getRegionID() const { return mRegionID; } + void setRegionID(const LLUUID& region_id) { mRegionID = region_id; } + BOOL pointInRegionGlobal(const LLVector3d &point_global) const; LLVector3 getPosRegionFromGlobal(const LLVector3d &point_global) const; LLVector3 getPosRegionFromAgent(const LLVector3 &agent_pos) const; @@ -270,6 +274,9 @@ protected: U64 mHandle; LLHost mHost; + // The unique ID for this region. + LLUUID mRegionID; + F32 mTimeDilation; // time dilation of physics simulation on simulator // simulator name diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp index 7696431..3c314cd 100644 --- a/linden/indra/newview/llworld.cpp +++ b/linden/indra/newview/llworld.cpp @@ -37,6 +37,7 @@ #include "llviewercontrol.h" #include "lldrawpool.h" #include "llglheaders.h" +#include "llhttpnode.h" #include "llregionhandle.h" #include "llsurface.h" #include "llviewercamera.h" @@ -762,15 +763,6 @@ void LLWorld::printPacketsLost() << " packets lost: " << cdp->getPacketsLost() << llendl; } } - - llinfos << "UserServer:" << llendl; - llinfos << "-----------" << llendl; - - cdp = gMessageSystem->mCircuitInfo.findCircuit(gUserServer); - if (cdp) - { - llinfos << gUserServer << " packets lost: " << cdp->getPacketsLost() << llendl; - } } void LLWorld::processCoarseUpdate(LLMessageSystem* msg, void** user_data) @@ -1043,6 +1035,41 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data) msg->sendReliable(sim); } +class LLEstablishAgentCommunication : public LLHTTPNode +{ + LOG_CLASS(LLEstablishAgentCommunication); +public: + virtual void describe(Description& desc) const + { + desc.shortInfo("seed capability info for a region"); + desc.postAPI(); + desc.input( + "{ seed-capability: ..., sim-ip: ..., sim-port }"); + desc.source(__FILE__, __LINE__); + } + + virtual void post(ResponsePtr response, const LLSD& context, const LLSD& input) const + { + if (!input["body"].has("agent-id") || + !input["body"].has("sim-ip-and-port") || + !input["body"].has("seed-capability")) + { + llwarns << "invalid parameters" << llendl; + return; + } + + LLHost sim(input["body"]["sim-ip-and-port"].asString()); + + LLViewerRegion* regionp = gWorldp->getRegion(sim); + if (!regionp) + { + llwarns << "Got EstablishAgentCommunication for unknown region " + << sim << llendl; + return; + } + regionp->setSeedCapability(input["body"]["seed-capability"]); + } +}; // disable the circuit to this simulator // Called in response to "DisableSimulator" message. @@ -1095,8 +1122,6 @@ void send_agent_pause() gMessageSystem->sendReliable(regionp->getHost()); } - gMessageSystem->sendReliable(gUserServer); - gObjectList.mWasPaused = TRUE; } @@ -1122,10 +1147,11 @@ void send_agent_resume() gMessageSystem->sendReliable(regionp->getHost()); } - gMessageSystem->sendReliable(gUserServer); - // Reset the FPS counter to avoid an invalid fps gViewerStats->mFPSStat.start(); } +LLHTTPRegistration<LLEstablishAgentCommunication> + gHTTPRegistrationEstablishAgentCommunication( + "/message/EstablishAgentCommunication"); diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj index 059ae5a..08e64b4 100644 --- a/linden/indra/newview/macview.xcodeproj/project.pbxproj +++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj @@ -27,9 +27,6 @@ 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; 1A0201870B7A861200D5C589 /* llxorcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201830B7A861200D5C589 /* llxorcipher.cpp */; }; - 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */; }; - 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */; }; - 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */; }; 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */; }; 1A1C61630847AEE6005D7227 /* llvolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615F0847AEE6005D7227 /* llvolume.cpp */; }; 1A1C61760847B307005D7227 /* llvolumemessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C61740847B307005D7227 /* llvolumemessage.cpp */; }; @@ -435,6 +432,7 @@ 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88AA282B0C17720D0032DF53 /* libpng12.a */; }; 9104C0CC0778AE0F001EC4F6 /* llpanelmsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */; }; 910D255306484F1A0034E66F /* llvolumesliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */; }; + 9117EAA20BF24A6100845BD2 /* llpacketack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */; }; 9118669B07F4FAF700E3D5BC /* llmediaremotectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */; }; 911CAD87075BE87B00CD1090 /* llinventoryview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */; }; 911CAD8B075BE90600CD1090 /* llgroupmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 911CAD8A075BE90600CD1090 /* llgroupmgr.cpp */; }; @@ -539,6 +537,7 @@ 9C1853AE0A91175E00DA7B01 /* llviewercontrol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C1853AD0A91175E00DA7B01 /* llviewercontrol.cpp */; }; 9C1A4F6D0A8D4BB30037639E /* llsdserialize_xml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD1558240A06BB5F00DE9AE5 /* llsdserialize_xml.cpp */; }; 9C659A870BAB0B6E00D2EB60 /* llmessageconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */; }; + 9CC280FF0BE79737006D8BDC /* llmessagetemplateparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */; }; 9CD49D5709D0BAC100192434 /* llflexibleobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */; }; 9CD49D5B09D0BB1500192434 /* lllocalanimationobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */; }; A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; }; @@ -821,9 +820,6 @@ 1A0201820B7A861200D5C589 /* llnullcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnullcipher.h; sourceTree = "<group>"; }; 1A0201830B7A861200D5C589 /* llxorcipher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llxorcipher.cpp; sourceTree = "<group>"; }; 1A0201840B7A861200D5C589 /* llxorcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llxorcipher.h; sourceTree = "<group>"; }; - 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_vec.cpp; sourceTree = "<group>"; }; - 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse2.cpp; sourceTree = "<group>"; }; - 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse.cpp; sourceTree = "<group>"; }; 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumemgr.cpp; sourceTree = "<group>"; }; 1A1C615F0847AEE6005D7227 /* llvolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolume.cpp; sourceTree = "<group>"; }; 1A1C61600847AEE6005D7227 /* llvolumemgr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvolumemgr.h; sourceTree = "<group>"; }; @@ -1502,6 +1498,7 @@ 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelmsgs.cpp; sourceTree = "<group>"; }; 9104C0CD0778AE20001EC4F6 /* llpanelmsgs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelmsgs.h; sourceTree = "<group>"; }; 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumesliderctrl.cpp; sourceTree = "<group>"; }; + 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpacketack.cpp; sourceTree = "<group>"; }; 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmediaremotectrl.cpp; sourceTree = "<group>"; }; 9118669A07F4FAF700E3D5BC /* llmediaremotectrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmediaremotectrl.h; sourceTree = "<group>"; }; 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llinventoryview.cpp; sourceTree = "<group>"; }; @@ -1923,6 +1920,8 @@ 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessageconfig.cpp; sourceTree = "<group>"; }; 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessageconfig.h; sourceTree = "<group>"; }; 9C67A8440A02BBA60056B4E0 /* gpu_table.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = gpu_table.txt; sourceTree = "<group>"; }; + 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagetemplateparser.cpp; sourceTree = "<group>"; }; + 9CC281000BE79746006D8BDC /* llmessagetemplateparser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagetemplateparser.h; sourceTree = "<group>"; }; 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llflexibleobject.cpp; sourceTree = "<group>"; }; 9CD49D5809D0BAD600192434 /* llflexibleobject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llflexibleobject.h; sourceTree = "<group>"; }; 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lllocalanimationobject.cpp; sourceTree = "<group>"; }; @@ -2346,9 +2345,6 @@ 26F529A0051F61CD00A80050 /* newview */ = { isa = PBXGroup; children = ( - 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */, - 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */, - 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */, 26F52A9D051F61DF00A80050 /* head.cpp */, 26F52A41051F61DF00A80050 /* llagent.cpp */, 1A758C910A436FCA00589675 /* llagentdata.cpp */, @@ -2975,6 +2971,9 @@ 619221B8074A9B58005E1F34 /* llmessage */ = { isa = PBXGroup; children = ( + 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */, + 9CC281000BE79746006D8BDC /* llmessagetemplateparser.h */, + 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */, 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */, 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */, AA348DF80B0EAB31002C3015 /* llcurl.cpp */, @@ -4097,7 +4096,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# exit on any error\nset -e\n\n# Copy the necessary resources into the build directory.\npython viewer_manifest.py --actions=\"copy\" --configuration=\"${CONFIGURATION}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\"\n"; + shellScript = "# exit on any error\nset -e\n\n# Check that the message template is compatible\npython ../../scripts/template_verifier.py --mode=\"development\"\n\n# Copy the necessary resources into the build directory.\npython viewer_manifest.py --actions=\"copy\" --configuration=\"${CONFIGURATION}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\"\n"; }; FD53B40409BDF9F600BFE3BC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -4558,12 +4557,10 @@ A3C20E4C0BB0BD12007E872B /* llviewerjoystick.cpp in Sources */, 1A8870D50BCC5A6300E89AA6 /* llinventorytype.cpp in Sources */, 1A8870E50BCC5A9500E89AA6 /* llviewermenufile.cpp in Sources */, + 9CC280FF0BE79737006D8BDC /* llmessagetemplateparser.cpp in Sources */, 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */, 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */, 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */, - 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */, - 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */, - 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4739,6 +4736,7 @@ DA9C41140B54B8CA00DD6F44 /* lllivefile.cpp in Sources */, 1A97C4560B8BCF9C00331A24 /* llliveappconfig.cpp in Sources */, 1A9897E90B98E2F4005C45D7 /* llbase32.cpp in Sources */, + 9117EAA20BF24A6100845BD2 /* llpacketack.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj index a6d4fa5..955d71a 100644 --- a/linden/indra/newview/newview.vcproj +++ b/linden/indra/newview/newview.vcproj @@ -55,7 +55,9 @@ Description="Executing post-build batch file" CommandLine="postbuild.bat debug"/> <Tool - Name="VCPreBuildEventTool"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat debug"/> <Tool Name="VCPreLinkEventTool"/> <Tool @@ -118,7 +120,9 @@ Description="Executing post-build batch file" CommandLine="postbuild.bat release"/> <Tool - Name="VCPreBuildEventTool"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat release"/> <Tool Name="VCPreLinkEventTool"/> <Tool @@ -178,7 +182,9 @@ Description="Executing post-build batch file" CommandLine="postbuild.bat releasefordownload"/> <Tool - Name="VCPreBuildEventTool"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasefordownload"/> <Tool Name="VCPreLinkEventTool"/> <Tool @@ -238,7 +244,9 @@ Description="Executing post-build batch file" CommandLine="postbuild.bat releasenoopt"/> <Tool - Name="VCPreBuildEventTool"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasenoopt"/> <Tool Name="VCPreLinkEventTool"/> <Tool @@ -1100,71 +1108,6 @@ RelativePath=".\llviewerjointmesh.cpp"> </File> <File - RelativePath=".\llviewerjointmesh_sse.cpp"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="ReleaseForDownload|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="ReleaseNoOpt|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0"/> - </FileConfiguration> - </File> - <File - RelativePath=".\llviewerjointmesh_sse2.cpp"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="ReleaseForDownload|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - UsePrecompiledHeader="0"/> - </FileConfiguration> - <FileConfiguration - Name="ReleaseNoOpt|Win32"> - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - UsePrecompiledHeader="0"/> - </FileConfiguration> - </File> - <File - RelativePath=".\llviewerjointmesh_vec.cpp"> - </File> - <File RelativePath=".\llviewerjointshape.cpp"> </File> <File @@ -2952,6 +2895,41 @@ RelativePath=".\llviewerprecompiledheaders.h"> </File> <File + RelativePath="..\..\etc\message.xml"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCustomBuildTool" + Description="Copying message.xml" + CommandLine="copy "$(InputPath)" .\app_settings\message.xml" + Outputs="./app_settings/message.xml"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCustomBuildTool" + Description="Copying message.xml" + CommandLine="copy "$(InputPath)" .\app_settings\message.xml" + Outputs="./app_settings/message.xml"/> + </FileConfiguration> + <FileConfiguration + Name="ReleaseForDownload|Win32"> + <Tool + Name="VCCustomBuildTool" + Description="Copying message.xml" + CommandLine="copy "$(InputPath)" .\app_settings\message.xml" + Outputs="./app_settings/message.xml"/> + </FileConfiguration> + <FileConfiguration + Name="ReleaseNoOpt|Win32"> + <Tool + Name="VCCustomBuildTool" + Description="Copying message.xml" + CommandLine="copy "$(InputPath)" .\app_settings\message.xml" + Outputs="./app_settings/message.xml"/> + </FileConfiguration> + </File> + <File RelativePath="..\..\scripts\messages\message_template.msg"> <FileConfiguration Name="Debug|Win32"> diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj index 5ba125b..032a6bf 100644 --- a/linden/indra/newview/newview_vc8.vcproj +++ b/linden/indra/newview/newview_vc8.vcproj @@ -25,6 +25,8 @@ > <Tool Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat debug" /> <Tool Name="VCCustomBuildTool" @@ -116,6 +118,8 @@ > <Tool Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat release" /> <Tool Name="VCCustomBuildTool" @@ -207,6 +211,8 @@ > <Tool Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasefordownload" /> <Tool Name="VCCustomBuildTool" @@ -297,6 +303,8 @@ > <Tool Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasenoopt" /> <Tool Name="VCCustomBuildTool" @@ -1504,95 +1512,6 @@ > </File> <File - RelativePath=".\llviewerjointmesh_sse.cpp" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="ReleaseForDownload|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="ReleaseNoOpt|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="1" - UsePrecompiledHeader="0" - WarnAsError="false" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\llviewerjointmesh_sse2.cpp" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="ReleaseForDownload|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - WarnAsError="false" - /> - </FileConfiguration> - <FileConfiguration - Name="ReleaseNoOpt|Win32" - > - <Tool - Name="VCCLCompilerTool" - EnableEnhancedInstructionSet="2" - UsePrecompiledHeader="0" - WarnAsError="false" - /> - </FileConfiguration> - </File> - <File - RelativePath=".\llviewerjointmesh_vec.cpp" - > - </File> - <File RelativePath=".\llviewerjointshape.cpp" > </File> diff --git a/linden/indra/newview/postbuild.bat b/linden/indra/newview/postbuild.bat index f0d4a2d..76bedbe 100644 --- a/linden/indra/newview/postbuild.bat +++ b/linden/indra/newview/postbuild.bat @@ -110,5 +110,10 @@ copy ..\..\libraries\i686-win32\lib_release\xul.dll .\ReleaseForDownload\ /y ) goto end +:BuildFailed +echo POSTBUILD FAILED +exit 1 +:end +echo POSTBUILD SUCCESSFUL :end diff --git a/linden/indra/newview/prebuild.bat b/linden/indra/newview/prebuild.bat new file mode 100755 index 0000000..139d810 --- /dev/null +++ b/linden/indra/newview/prebuild.bat @@ -0,0 +1,13 @@ +@echo off + +rem -- Check current message template against the master +"../../scripts/template_verifier.py" --mode="development" +if errorlevel 1 goto BuildFailed +goto end + +:BuildFailed +echo PREBUILD FAILED +exit 1 + +:end +echo PREBUILD SUCCESSFUL diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index 83fb42f..34b68c6 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,21 @@ +Release Notes for Second Life 1.18.0(6) July 11, 2007 +===================================== +Changes: +* Message system changes to support transport via TCP (HTTP) as well as UDP. +** More details are available here: http://blog.secondlife.com/2006/12/21/a-big-change-youll-barely-notice/ +** And here: http://blog.secondlife.com/2007/06/25/dia-de-la-liberacion/ +* German language added to the Windows installer +* Updated translations for German language viewer +* Updated translations for Japanese language viewer +* Updated translations for Korean language viewer +* Viewer "channel" (Release, First Look, etc) now visible at login in the lower right corner next to the version number + +Bug fixes: +* Fixed SVC-286: deleted fully-permissive objects owned by others skip trash +* Fixed SVC-251: Death teleport fails when teleporting to a home point you no longer have access to +* Fixed MISC-273: Enrollment fee is incorrectly deducted if you belong to max. # of groups and try to join new ones + + Release Notes for Second Life 1.17.3(0) July 5, 2007 ===================================== Changes: @@ -19,8 +37,18 @@ Bug fixes: * Fixed odd text overlay on About Land > General tab * Fixed format of llOwnerSay chat text + Release Notes for Second Life 1.17.2(0) June 27, 2007 ===================================== +Bug fixes: +* VWR-1369: Creating, re-rezzing, then editing an object results in a viewer crash + +Not for public: +* SL-46373 VWR-1369: Creating, re-rezzing, then editing an object results in a viewer crash + + +Release Notes for Second Life 1.17.1(0) June 25, 2007 +===================================== Changes: * VWR-650: Make "Give money" permissions look different than the other permissions * VWR-427: Added new menu item: Tools > Edit Linked Parts diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index bd94933..b1992cf 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,3,0 - PRODUCTVERSION 1,17,3,0 + FILEVERSION 1,18,0,6 + PRODUCTVERSION 1,18,0,6 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -245,12 +245,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.17.3.0" + VALUE "FileVersion", "1.18.0.6" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright � 2001-2007, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.17.3.0" + VALUE "ProductVersion", "1.18.0.6" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/secondlife setup build vaak.bat b/linden/indra/newview/secondlife setup build vaak.bat index f957918..63cd71c 100644 --- a/linden/indra/newview/secondlife setup build vaak.bat +++ b/linden/indra/newview/secondlife setup build vaak.bat @@ -1,4 +1,4 @@ @rem Invoke the script which preps then runs the installer. @rem This batch file is customized per grid. -@"secondlife setup build.bat" --grid=vaak +@"viewer_manifest.py" --grid=vaak diff --git a/linden/indra/newview/skins/xui/de/floater_about.xml b/linden/indra/newview/skins/xui/de/floater_about.xml index 8cf3fcb..b35a7ee 100644 --- a/linden/indra/newview/skins/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/xui/de/floater_about.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater_about" title="Info zu Second Life"> <text_editor name="credits_editor"> - Second Life bringen Ihnen Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW und viele andere. + Second Life wird zu Ihnen gebracht von: Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW und vielen anderen. Vielen Dank den folgenden Einwohnern, die uns geholfen haben, die bisher beste Version zu entwickeln: Kyrah Abattoir, Icesis Anansi, Clifton Antonelli, Nargus Asturias, Justizin Austinmer, Drake Bacon, Bitzer Balderdash, McWheelie Baldwin, SuezanneC Baskerville, Sweetheart Baskerville, Logan Bauer, Malarthi Behemoth, phoenix Behemoth, Eva Bellambi, Samgame Bertrand, Woody Blair, Tin Bling, Bibi Book, Barney Boomslang, Eric Boyer, Chromal Brodsky, Kerian Bunin, Lara Bunin, BigRick Byrd, Jillian Callahan, Hypatia Callisto, Frans Charming, nathalie Christensen, Francis Chung, pizzaguy Clutterbuck, Evo Commons, Entity Cosmo, Grazel Cosmo, Tiger Crossing, Fremont Cunningham, Jaki Daligdig, Sugar Darling, Todd David, Norman Desmoulins, Gxeremio Dimsum, Happy Dimsum, Kim Dingo, Roy Domela, Cory Edo, Delu Elytis, DBDigital Epsilon, Leeza Everett, Garth FairChang, Snowflake Fairymeadow, Khamon Fate, lex Fitzcarraldo, Kitto Flora, Angel Fluffy, CrystalShard Foo, Raudf Fox, Govindira Galatea, Rizpah Galatea, Tre Giles, Gattz Gilman, Kex Godel, Armandi Goodliffe, Tsu Goodliffe, Nickolas Goodman, Damen Gorilla, Nytemyst Grace, Mhaijik Guillaume, Gleeb Gupte, Ebonfire Harbinger, Bethanee Heaney, Jenny Hicks, Sandling Honey, Victoria Jacques, Adso Krogstad, Travis Lambert, simon Lameth, Duffy Langdon, Aaron Levy, Jade Lily, Gwyneth Llewelyn, Lola Lollipop, Michi Lumin, KaiLastOfTheBrunnenG Macdonald, Jesse Malthus, Herry Maltz, Seth Mandelbrot, Raavi Mann, Shirley Marquez, Dnate Mars, Ima Mechanique, Hawk Mendicant, Mercury Metropolitan, Haravikk Mistral, Trent Mondrian, Nexus Nash, Seraph Nephilim, Lewis Nerd, Aurael Neurocam, Lex Neva, Prokofy Neva, Seagel Neville, Kate Nicholas, Didde Nielsen, Richard Noonan, crevan Nori, Maczter Oddfellow, vanler Odets, Fat Ogre, Hamncheese Omlet, Strife Onizuka, Panthar Orlowski, Jessica Ornitz, Ron Overdrive, OmniCron Overlord, Dargon Pacer, Kar Parks, Eloise Pasteur, Caliandris Pendragon, Julianna Pennyfeather, Iron Perth, Shawk Pertwee, Mera Pixel, Elle Pollack, Phoenix Psaltery, Hank Ramos, Jon Ree, Tam Ree, Zi Ree, Jon Rolland, BamBam Sachertorte, kai Sachertorte, Mily Sartre, ice Semple, Desmond Shang, DigiKatt Shaw, Felix Sholokhov, Rhyph Somme, Rain Soothsayer, Oz Spade, squeekachu Spearmann, Wesley Spengler, Belaya Statosky, eltee Statosky, Khashai Steinbeck, Draco Steinhardt, Hope Stilman, Ashen Stygian, Seifert Surface, Gigs Taggart, Dolmere Talamasca, JayJay Talamasca, Becky Tardis, Fenris Tardis, Cubey Terra, Osprey Therian, Millie Thompson, John Toonie, Charlene Trudeau, Lyr Tuppakaka, Indy Turner, Luthien Unsung, Random Unsung, Huns Valen, Valdemar Virgo, Gordon Wendt, Mike Westerburg, Wayfinder Wishbringer, Lee Wormser, Aimee Xia, nimrod Yaffle, Yiffy Yaffle, Elle74 Zaftig und viele andere. @@ -25,6 +25,6 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. Alle Rechte vorbehalten. Details siehe licenses.txt. -Ist keine Programmfehler, sondern eine Funktion. +Fehler sind kein Geheimnis, die darf ruhig jeder sehen. </text_editor> </floater> diff --git a/linden/indra/newview/skins/xui/de/floater_groups.xml b/linden/indra/newview/skins/xui/de/floater_groups.xml index 837ac90..13037b0 100644 --- a/linden/indra/newview/skins/xui/de/floater_groups.xml +++ b/linden/indra/newview/skins/xui/de/floater_groups.xml @@ -4,7 +4,7 @@ Ihre derzeit aktive Gruppe wird in Fettdruck angezeigt. </text> <text name="groupcount"> - Sie gehören zu [COUNT] Gruppen (von maximal [MAX.]). + Sie gehören zu [COUNT] Gruppen (von maximal [MAX]). </text> <button label="Aktivieren" label_selected="Aktivieren" name="Activate" /> <button label="Info" label_selected="Info" name="Info" /> diff --git a/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml b/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml index 3112df9..5e0bcce 100644 --- a/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml +++ b/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml @@ -64,7 +64,7 @@ Original </radio_item> <radio_item name="radio2"> - Kopieren + Kopie </radio_item> </radio_group> <text name="TextPrice"> diff --git a/linden/indra/newview/skins/xui/de/floater_tools.xml b/linden/indra/newview/skins/xui/de/floater_tools.xml index 3622dd2..45c31b1 100644 --- a/linden/indra/newview/skins/xui/de/floater_tools.xml +++ b/linden/indra/newview/skins/xui/de/floater_tools.xml @@ -285,7 +285,7 @@ </text> <combo_box name="comboBaseType"> <combo_item name="Box"> - Box + Quader </combo_item> <combo_item name="Cylinder"> Zylinder @@ -294,7 +294,7 @@ Prisma </combo_item> <combo_item name="Sphere"> - Sphäre + Kugel </combo_item> <combo_item name="Torus"> Torus @@ -307,7 +307,7 @@ </combo_item> </combo_box> <text name="text cut"> - Pfadausschnitt-Beginn und Ende + Pfadschnitt Beginn und Ende </text> <spinner label="B" name="cut begin" /> <spinner label="E" name="cut end" /> @@ -315,7 +315,7 @@ Hohl </text> <text name="text skew"> - Schräg + Versatz </text> <text name="Hollow Shape"> Hohlform @@ -335,12 +335,12 @@ </combo_item> </combo_box> <text name="text twist"> - Dienstag 15. Aug. 13:47:25 2006 + Torsion </text> <spinner label="B" name="Twist Begin" /> <spinner label="E" name="Twist End" /> <text name="scale_taper"> - Verjüngt + Verjüngung </text> <text name="scale_hole"> Lochgröße @@ -348,25 +348,25 @@ <spinner label="X" name="Taper Scale X" /> <spinner label="Y" name="Taper Scale Y" /> <text name="text topshear"> - Obere Schicht + Verscherung </text> <spinner label="X" name="Shear X" /> <spinner label="Y" name="Shear Y" /> <text name="advanced_cut"> - Profil abgeschnitten-Beginn und Ende + Profilschnitt-Beginn und Ende </text> <text name="advanced_dimple"> - Kräuseln-Beginn und Ende + Vertiefung-Beginn und Ende </text> <spinner label="B" name="Path Limit Begin" /> <spinner label="E" name="Path Limit End" /> <text name="text taper2"> - Verjüngt + Verjüngung </text> <spinner label="X" name="Taper X" /> <spinner label="Y" name="Taper Y" /> <text name="text radius delta"> - Radius Delta + Spiralform </text> <text name="text revolutions"> Umdrehungen @@ -374,7 +374,7 @@ </panel> <panel label="Eigenschaften" name="Features"> <text name="select_single"> - Wählen Sie ein Primitivum aus, um Eigenschaften zu bearbeiten. + Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten. </text> <text name="edit_object"> Objekteigenschaften bearbeiten: diff --git a/linden/indra/newview/skins/xui/de/menu_inventory.xml b/linden/indra/newview/skins/xui/de/menu_inventory.xml index bf8fd28..c8e6b31 100644 --- a/linden/indra/newview/skins/xui/de/menu_inventory.xml +++ b/linden/indra/newview/skins/xui/de/menu_inventory.xml @@ -2,8 +2,8 @@ <menu name="Popup"> <menu_item_call label="Kaufen" name="Task Buy" /> <menu_item_call label="Öffnen" name="Task Open" /> - <menu_item_call label="Spiel" name="Task Play" /> - <menu_item_call label="Grundstücke" name="Task Properties" /> + <menu_item_call label="Abspielen" name="Task Play" /> + <menu_item_call label="Eigenschaften" name="Task Properties" /> <menu_item_call label="Umbenennen" name="Task Rename" /> <menu_item_call label="Löschen" name="Task Remove" /> <menu_item_call label="Papierkorb ausleeren" name="Empty Trash" /> @@ -11,7 +11,7 @@ <menu_item_call label="Neues Skript" name="New Script" /> <menu_item_call label="Neue Notiz" name="New Note" /> <menu_item_call label="Neue Geste" name="New Gesture" /> - <menu name="New Clothes"> + <menu label="Neues Kleidungsstück" name="New Clothes"> <menu_item_call label="Neues Hemd" name="New Shirt" /> <menu_item_call label="Neue Hose" name="New Pants" /> <menu_item_call label="Neue Schuhe" name="New Shoes" /> @@ -22,8 +22,8 @@ <menu_item_call label="Neues Unterhemd" name="New Undershirt" /> <menu_item_call label="Neue Unterhose" name="New Underpants" /> </menu> - <menu name="New Body Parts"> - <menu_item_call label="Neue Form" name="New Shape" /> + <menu label="Neuer Körperteil" name="New Body Parts"> + <menu_item_call label="Neue Körperform" name="New Shape" /> <menu_item_call label="Neue Haut" name="New Skin" /> <menu_item_call label="Neues Haar" name="New Hair" /> <menu_item_call label="Neue Augen" name="New Eyes" /> @@ -34,7 +34,7 @@ <menu_item_call label="Objekt löschen" name="Purge Item" /> <menu_item_call label="Objekt wiederherstellen" name="Restore Item" /> <menu_item_call label="Öffnen" name="Open" /> - <menu_item_call label="Grundstücke" name="Properties" /> + <menu_item_call label="Eigenschaften" name="Properties" /> <menu_item_call label="Umbenennen" name="Rename" /> <menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID" /> <menu_item_call label="Kopieren" name="Copy" /> @@ -42,23 +42,23 @@ <menu_item_call label="Löschen" name="Delete" /> <menu_item_call label="Zu Outfit hinzufügen" name="Add To Outfit" /> <menu_item_call label="Outfit ersetzen" name="Replace Outfit" /> - <menu_item_call label="Objekte wegnehmen" name="Take Off Items" /> - <menu_item_call label="IM an Online-Kontakte in Ordner" name="IM Online Contacts In Folder" /> - <menu_item_call label="IM an alle Kontakte in Ordner" name="IM All Contacts In Folder" /> - <menu_item_call label="Spiel" name="Sound Play" /> - <menu_item_call label="Teleport zu Landmarken" name="Teleport To Landmark" /> - <menu_item_call label="In Welt spielen" name="Animation Play" /> - <menu_item_call label="Lokal spielen" name="Animation Audition" /> + <menu_item_call label="Objekte abnehmen" name="Take Off Items" /> + <menu_item_call label="IM an Online-Kontakte im Ordner" name="IM Online Contacts In Folder" /> + <menu_item_call label="IM an alle Kontakte im Ordner" name="IM All Contacts In Folder" /> + <menu_item_call label="Abspielen" name="Sound Play" /> + <menu_item_call label="Teleport zu Landmarke" name="Teleport To Landmark" /> + <menu_item_call label="In-Welt abspielen" name="Animation Play" /> + <menu_item_call label="Lokal abspielen" name="Animation Audition" /> <menu_item_call label="Instant Message senden" name="Send Instant Message" /> <menu_item_call label="Teleport anbieten..." name="Offer Teleport..." /> <menu_item_call label="Aktivieren" name="Activate" /> <menu_item_call label="Deaktivieren" name="Deactivate" /> - <menu_item_call label="Von sich selbst trennen" name="Detach From Yourself" /> + <menu_item_call label="Abnehmen" name="Detach From Yourself" /> <menu_item_call label="Tragen" name="Object Wear" /> <menu label="Anhängen an" name="Attach To" /> - <menu label="Anhängen an HUD" name="Attach To HUD" /> - <menu_item_call label="Tragen" name="Wearable Wear" /> + <menu label="Ans HUD hängen" name="Attach To HUD" /> + <menu_item_call label="Anziehen" name="Wearable Wear" /> <menu_item_call label="Bearbeiten" name="Wearable Edit" /> - <menu_item_call label="Ablösen" name="Take Off" /> + <menu_item_call label="Abnehmen" name="Take Off" /> <menu_item_call label="--keine Optionen--" name="--no options--" /> </menu> diff --git a/linden/indra/newview/skins/xui/de/menu_pie_attachment.xml b/linden/indra/newview/skins/xui/de/menu_pie_attachment.xml index 54f64b1..7af7208 100644 --- a/linden/indra/newview/skins/xui/de/menu_pie_attachment.xml +++ b/linden/indra/newview/skins/xui/de/menu_pie_attachment.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <pie_menu name="Attachment Pie"> - <menu_item_call label="Ablegen" name="Drop" /> - <menu_item_call label="Trennen" name="Detach" /> + <menu_item_call label="Hinlegen" name="Drop" /> + <menu_item_call label="Abnehmen" name="Detach" /> <menu_item_call label="Bearbeiten" name="Edit" /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml index 899057e..fc97e10 100644 --- a/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml +++ b/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml @@ -4,7 +4,7 @@ <menu_item_call label="Stumm schalten" name="Avatar Mute" /> <menu_item_call label="Gehen zu" name="Go To" /> <menu_item_call label="Freund hinzufügen" name="Add Friend" /> - <menu_item_call label="Zahlen..." name="Pay..." /> + <menu_item_call label="Bezahlen..." name="Pay..." /> <pie_menu label="Mehr >" name="More >"> <menu_item_call label="Einfrieren..." name="Freeze..." /> <menu_item_call label="Karte geben" name="Give Card" /> diff --git a/linden/indra/newview/skins/xui/de/menu_pie_land.xml b/linden/indra/newview/skins/xui/de/menu_pie_land.xml index 07c8d1c..6790401 100644 --- a/linden/indra/newview/skins/xui/de/menu_pie_land.xml +++ b/linden/indra/newview/skins/xui/de/menu_pie_land.xml @@ -3,7 +3,7 @@ <menu_item_call label="Info zu Land..." name="About Land..." /> <menu_item_call label="Erstellen" name="Create" /> <menu_item_call label="Hierhin gehen" name="Go Here" /> - <menu_item_call label="Hier hinsitzen" name="Sit Here" /> + <menu_item_call label="Hinsetzen" name="Sit Here" /> <menu_item_call label="Pass kaufen..." name="Land Buy Pass" /> <menu_item_call label="Terrain bearbeiten" name="Edit Terrain" /> <menu_item_call label="Land kaufen..." name="Land Buy" /> diff --git a/linden/indra/newview/skins/xui/de/menu_pie_object.xml b/linden/indra/newview/skins/xui/de/menu_pie_object.xml index d73ec54..ab78e17 100644 --- a/linden/indra/newview/skins/xui/de/menu_pie_object.xml +++ b/linden/indra/newview/skins/xui/de/menu_pie_object.xml @@ -3,16 +3,16 @@ <menu_item_call label="Öffnen" name="Open" /> <menu_item_call label="Erstellen" name="Create" /> <menu_item_call label="Berühren" name="Object Touch" /> - <menu_item_call label="Hier hinsitzen" name="Object Sit" /> + <menu_item_call label="Hinsetzen" name="Object Sit" /> <menu_item_call label="Nehmen" name="Pie Object Take" /> - <menu_item_call label="Zahlen..." name="Pay..." /> + <menu_item_call label="Bezahlen..." name="Pay..." /> <pie_menu label="Mehr >" name="More >"> <menu_item_call label="Löschen" name="Delete" /> - <menu_item_call label="Tragen" name="Wear" /> + <menu_item_call label="Anziehen" name="Wear" /> <menu_item_call label="Kopie nehmen" name="Take Copy" /> - <pie_menu label="HUD anhängen >" name="Object Attach HUD" /> + <pie_menu label="Ans HUD hängen >" name="Object Attach HUD" /> <pie_menu label="Anhängen >" name="Object Attach" /> - <menu_item_call label="Zurückgeben..." name="Return..." /> + <menu_item_call label="Zurücksenden..." name="Return..." /> <pie_menu label="Mehr >" name="Rate Menu"> <menu_item_call label="Missbrauch melden..." name="Report Abuse..." /> <menu_item_call label="Stumm schalten" name="Object Mute" /> diff --git a/linden/indra/newview/skins/xui/de/menu_pie_self.xml b/linden/indra/newview/skins/xui/de/menu_pie_self.xml index 867c396..197b05a 100644 --- a/linden/indra/newview/skins/xui/de/menu_pie_self.xml +++ b/linden/indra/newview/skins/xui/de/menu_pie_self.xml @@ -2,12 +2,12 @@ <pie_menu name="Self Pie"> <menu_item_call label="Profil..." name="Profile..." /> <menu_item_call label="Gruppen..." name="Groups..." /> - <menu_item_call label="Los..." name="Go..." /> + <menu_item_call label="Bewegen..." name="Go..." /> <menu_item_call label="Aufstehen" name="Stand Up" /> <menu_item_call label="Freunde..." name="Friends..." /> <menu_item_call label="Gesten..." name="Gestures..." /> - <pie_menu label="Ablösen >" name="Take Off >"> - <pie_menu label="Kleidung >" name="Clothes >"> + <pie_menu label="Abnehmen >" name="Take Off >"> + <pie_menu label="Ausziehen >" name="Clothes >"> <menu_item_call label="Hemd" name="Shirt" /> <menu_item_call label="Hose" name="Pants" /> <menu_item_call label="Schuhe" name="Shoes" /> @@ -22,8 +22,8 @@ <menu_item_call label="Rock" name="Skirt" /> </pie_menu> <pie_menu label="HUD >" name="Object Detach HUD" /> - <pie_menu label="Trennen >" name="Object Detach" /> - <menu_item_call label="Alle trennen" name="Detach All" /> + <pie_menu label="Objekt >" name="Object Detach" /> + <menu_item_call label="Alle Objekte" name="Detach All" /> </pie_menu> <menu_item_call label="Aussehen..." name="Appearance..." /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/de/notify.xml b/linden/indra/newview/skins/xui/de/notify.xml index a4c8a1d..9f0ff2f 100644 --- a/linden/indra/newview/skins/xui/de/notify.xml +++ b/linden/indra/newview/skins/xui/de/notify.xml @@ -12,7 +12,7 @@ </notify> <notify name="CancelledSit"> <message name="message"> - Sitzen abgebrochen + Hinsetzen abgebrochen </message> </notify> <notify name="CancelledAttach"> @@ -37,23 +37,23 @@ </notify> <notify name="AddSelfFriend"> <message name="message"> - You cannot add yourself as a friend. + Sie können sich nicht selber zur Freundesliste hinzufügen. </message> </notify> <notify name="UploadingAuctionSnapshot"> <message name="message"> - Spielinterne und Website-Fotosn werden hochgeladen... + Spielinterne und Website-Fotos werden hochgeladen... (Dauert ca. 5 Minuten.) </message> </notify> <notify name="UploadPayment"> <message name="message"> - You paid L$[AMOUNT] to upload. + Hochladegebühr von L$[AMOUNT] wurde abgebucht. </message> </notify> <notify name="UploadingSnapshot"> <message name="message"> - Spielinterne Foto wird hochgeladen... + Bildschirmfoto wird hochgeladen... (Dauert ca. 1 Minute.) </message> </notify> @@ -64,7 +64,7 @@ </notify> <notify name="UploadSnapshotDone"> <message name="message"> - Upload der spielinternen Foto abgeschlossen + Hochladen des Bildschirmfotos abgeschlossen. </message> </notify> <notify name="TerrainDownloaded"> @@ -95,34 +95,34 @@ Bitte versuchen Sie es noch einmal. </notify> <notify name="LandmarkMissing"> <message name="message"> - Landmarken fehlt in Datenbank. + Landmarke fehlt in Datenbank. </message> </notify> <notify name="UnableToLoadLandmark"> <message name="message"> - Landmarken kann nicht geladen werden. Bitte versuchen Sie es noch einmal. + Landmarke kann nicht geladen werden. Bitte versuchen Sie es noch einmal. </message> </notify> <notify name="CapsKeyOn"> <message name="message"> Ihre Feststelltaste ist aktiviert. Da sich dies auf das von Ihnen eingegebene Kennwort auswirkt, -sollten Sie sie evtl. deaktivieren. +wird empfohlen, die Feststelltaste zu deaktivieren. </message> </notify> <notify name="NotecardMissing"> <message name="message"> - Grußkarte fehlt in Datenbank. + Notiz fehlt in Datenbank. </message> </notify> <notify name="NotecardNoPermissions"> <message name="message"> - Berechtigungen reichen zum Anzeigen der Grußkarte nicht aus. + Berechtigungen reichen zum Anzeigen der Notiz nicht aus. </message> </notify> <notify name="UnableToLoadNotecard"> <message name="message"> - Grußkarte kann nicht geladen werden. + Notiz kann nicht geladen werden. Bitte versuchen Sie es noch einmal. </message> </notify> @@ -206,14 +206,14 @@ Bitte wählen Sie ein einzelnes Objekt. Kopieren wegen fehlender Kopierberechtigung fehlgeschlagen </message> </notify> - <notify name="InventoryAccepted"> + <notify name="InventoryAccepted" tip="true"> <message name="message"> - [MESSAGE] + [NAME] hat Ihr Inventarangebot angenommen </message> </notify> - <notify name="InventoryDeclined"> + <notify name="InventoryDeclined" tip="true"> <message name="message"> - [NAME] hat Ihr Freundschaftsangebot angenommen. + [NAME] hat Ihr Inventarangebot abgelehnt </message> </notify> <notify name="ObjectMessage"> @@ -565,12 +565,12 @@ see each other's online status. </notify> <notify name="FriendshipAccepted"> <message name="message"> - [NAME] + [NAME] hat Ihr Freundschaftsangebot angenommen. </message> </notify> <notify name="FriendshipDeclined"> <message name="message"> - [NAME] L$ [PRICE] Sie haben nicht genug der Währung, um dies zu tun. + [NAME] hat Ihr Freundschaftsangebot abgelehnt </message> </notify> <notify name="OfferCallingCard"> @@ -790,10 +790,10 @@ Sie können Ihr Aussehen beliebig oft ändern. </notify> <notify name="FirstInventory"> <message name="message"> - Dies ist Ihr Inventar, das Objekte, Grußkarten, Kleidung und andere Sachen enthält, die Ihnen gehören. + Dies ist Ihr Inventar, das Objekte, Notizen, Kleidung und andere Sachen enthält, die Ihnen gehören. * Um ein Objekt oder einen Outfit-Ordner zu tragen, ziehen Sie das Objekt auf sich. * Um ein Objekt in die Welt zu bringen, ziehen Sie es auf den Boden. -* Um eine Grußkarte zu lesen, doppelklicken Sie darauf. +* Um eine Notiz zu lesen, doppelklicken Sie darauf. </message> </notify> <notify name="FirstSandbox"> diff --git a/linden/indra/newview/skins/xui/de/panel_login.xml b/linden/indra/newview/skins/xui/de/panel_login.xml index 9908c06..cc0ceb8 100644 --- a/linden/indra/newview/skins/xui/de/panel_login.xml +++ b/linden/indra/newview/skins/xui/de/panel_login.xml @@ -20,15 +20,15 @@ Mein Zuhause </combo_item> <combo_item name="MyLastLocation"> - Meine letzte Position + Letzter Aufenthaltsort </combo_item> - <combo_item name="<Typeregionname>"> + <combo_item name="Typeregionname"> <Regionsnamen eingeben> </combo_item> </combo_box> <check_box label="Kennwort merken" name="remember_check" /> <text name="full_screen_text"> - Viewer zeigt bei Anmeldung Vollbild an. + Umschaltung auf Vollbild erfolgt nach Anmeldung. </text> <button label="Neuer Account..." label_selected="Neuer Account..." name="new_account_btn" /> diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_general.xml b/linden/indra/newview/skins/xui/de/panel_preferences_general.xml index f57c2ed..00ea9d0 100644 --- a/linden/indra/newview/skins/xui/de/panel_preferences_general.xml +++ b/linden/indra/newview/skins/xui/de/panel_preferences_general.xml @@ -1,19 +1,27 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="Allgemein" name="general_panel"> - <check_box label="Startposition auf Anmeldungsbildschirm anzeigen" + <combo_box name="location_combobox"> + <combo_item name="MyHome"> + Mein Zuhause + </combo_item> + <combo_item name="MyLastLocation"> + Letzter Aufenthaltsort + </combo_item> + </combo_box> + <check_box label="Startposition auf Anmeldesbildschirm anzeigen" name="show_location_checkbox" /> <check_box label="Meinen Namen auf meinem Bildschirm ausblenden" name="show_my_name_checkbox" /> <check_box label="Meinen Gruppentitel ausblenden" name="show_my_title_checkbox" /> - <check_box label="Kleine Avatarnamen" name="small_avatar_names_checkbox" /> + <check_box label="Kleine Schrift für Avatarnamen" name="small_avatar_names_checkbox" /> <check_box label="Online-Freundbenachrichtigungen anzeigen" name="friends_online_notify_checkbox" /> <check_box label="Minikarte drehen" name="rotate_mini_map_checkbox" /> - <check_box label="Benachrichtigen, wenn Linden-Dollar (L$) ausgegeben oder erhalten" + <check_box label="Benachrichtigung bei Änderung des Kontostands (L$)" name="notify_money_change_checkbox" /> - <check_box label="Grafikhardware beim nächsten Start automatisch erfassen" - name="probe_hardware_checkbox" - tool_tip="Second Life konfiguriert automatisch einige Grafikeinstellungen anhand Ihrer Hardware. Wenn Sie neue Hardware installieren, sollten Sie sie von Second Life erfassen lassen." /> + <check_box label="Vorschau für Notizen, Texturen und Landmarken" + name="show_new_inventory" + tool_tip="Wenn Sie eine Notiz, Textur oder Landmarke erhalten, kann Second Life Ihnen automatisch eine Vorschau dieses Objektes anzeigen. Das kann bei Transfers von vielen Objekten gleichzeitig dazu führen, daß sehr viele Fenster auf dem Bildschirm geöffnet werden. Mit dieser Option können Sie beeinflussen, ob Sie die automatische Vorschau haben wollen, oder nicht." /> <check_box label="Standardsystem-Farbauswahl verwenden" name="use_system_color_picker_checkbox" tool_tip="Standardsystem-Farbauswahl anstatt der in Second Life integrierten verwenden." /> @@ -24,26 +32,26 @@ Namen anzeigen: </text> <text type="string" length="1" name="effects_color_textbox"> - Farbe für meine Effekte: + Meine Effektfarbe: </text> <text type="string" length="1" name="seconds_textbox"> Sekunden </text> <text type="string" length="1" name="crash_report_textbox"> - Crash-Berichte: + Absturzberichte: </text> <text type="string" length="1" name="language_textbox"> Sprache: </text> <text type="string" length="1" name="language_textbox2"> - (Erfordert für vollen Effekt Neustart) + (Erfordert Programmneustart) </text> <radio_group name="fade_out_radio"> <radio_item type="string" length="1" name="Never"> Nie </radio_item> <radio_item type="string" length="1" name="Temporarily"> - Temporär anzeigen + Für eine kurze Zeit </radio_item> <radio_item type="string" length="1" name="Always"> Immer @@ -51,7 +59,7 @@ </radio_group> <color_swatch label="" name="effect_color_swatch" tool_tip="Klicken, um Farbauswahl zu öffnen" /> - <spinner label="Weg-Timeout:" name="afk_timeout_spinner" /> + <spinner label="Abwesend nach:" name="afk_timeout_spinner" /> <text name="region_name_prompt"> <Regionsnamen eingeben> </text> @@ -67,20 +75,32 @@ </combo_item> </combo_box> <combo_box name="language_combobox"> + <combo_item type="string" length="1" name="System Default Language"> + Systemstandard + </combo_item> <combo_item type="string" length="1" name="English"> Englisch (English) </combo_item> + <combo_item type="string" length="1" name="Chinese"> + Chinesisch (Chinese) + </combo_item> <combo_item type="string" length="1" name="Deutsch(German)"> - Deutsch (German) + Deutsch (German) + </combo_item> + <combo_item type="string" length="1" name="French"> + Französisch (Français) </combo_item> <combo_item type="string" length="1" name="(Japanese)"> - 日本語 (Japanese) + Japanisch (日本語) </combo_item> <combo_item type="string" length="1" name="(Korean)"> - 한국어 (Korean) + Koreanisch (한국어) </combo_item> - <combo_item type="string" length="1" name="Chinese"> - Chinesisch + <combo_item type="string" length="1" name="Portugese"> + Portugiesisch (Português) + </combo_item> + <combo_item type="string" length="1" enabled="true" name="Spanish" value="es"> + Spanisch (Español) </combo_item> </combo_box> </panel> diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml index 3ea042c..4bc538d 100644 --- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml +++ b/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml @@ -48,4 +48,7 @@ <text type="string" length="1" name="(lower is faster)"> (niedriger ist schneller) </text> + <check_box label="Grafikhardware beim nächsten Start automatisch erfassen" + name="probe_hardware_checkbox" + tool_tip="Second Life konfiguriert automatisch einige Grafikeinstellungen anhand Ihrer Hardware. Wenn Sie neue Hardware installieren, sollten Sie sie von Second Life erfassen lassen." /> </panel> diff --git a/linden/indra/newview/skins/xui/en-us/floater_about.xml b/linden/indra/newview/skins/xui/en-us/floater_about.xml index fbfebf0..e9bb109 100644 --- a/linden/indra/newview/skins/xui/en-us/floater_about.xml +++ b/linden/indra/newview/skins/xui/en-us/floater_about.xml @@ -7,9 +7,9 @@ follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6" max_length="65536" mouse_opaque="true" name="credits_editor" text_color="1, 1, 1, 1" text_readonly_color="1, 1, 1, 1" width="458" - word_wrap="true">Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica and many others. + word_wrap="true">Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa and many others. -Thank you to the following residents for helping to ensure that this is the best version yet: Hypatia Callisto, Inigo Chamerberlin, Matti Deigan, Jasper Dogpatch, Able Forder, Evy Gardenvale, Bosco Gray, Torben Jensen, Claire Kanno, bebop Kohime, Michael Kyuzo, Sian Lumley, Chase McClure, Lisa McConnell, Alice Obscure, Stumbelina Ophelia, Arenae Rosewood, Joseph Rustamova, Norm Schack, Funk Schnook, Teleio Seferis, Ninnie Stradling, Darzus Strutt, Glory Takashi, Omei Turnbull, Craig Weiland, Johan Yugen, xsdenied Zucker. +Thank you to the following residents for helping to ensure that this is the best version yet: Gate Bates, Henri Beauchamp, zinoplatinium Burton, Celeste Eerie, Sara Flinker, skyking Heron, sakura Jannings, Arth Karas, Trevor Langdon, tamara Levitsky, Donuma Masala, Keith Mathieson, Ima Mechanique, Venus Medusa, Alice Obscure, Glenn Rotaru, Norm Schack, Singular Seoul, Rhyph Somme, Amy Sukra, Omei Turnbull, Fehan Villota APR Copyright (C) 2000-2004 The Apache Software Foundation Cg Copyright (C) 2002, NVIDIA Corporationa. @@ -30,7 +30,8 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. All rights reserved. See licenses.txt for details. -Bananas are the new plywood cubes.</text_editor> + +Viva la Liberación!</text_editor> <text_editor bg_readonly_color="0, 0, 0, 0" bottom_delta="174" embedded_items="false" follows="left|top|right|bottom" font="SansSerif" height="238" left="6" max_length="65536" mouse_opaque="true" name="support_editor" diff --git a/linden/indra/newview/skins/xui/en-us/panel_login.xml b/linden/indra/newview/skins/xui/en-us/panel_login.xml index ba4884d..6652a63 100644 --- a/linden/indra/newview/skins/xui/en-us/panel_login.xml +++ b/linden/indra/newview/skins/xui/en-us/panel_login.xml @@ -64,7 +64,7 @@ <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom="74" drop_shadow_visible="true" follows="left|bottom" font="SansSerifSmall" h_pad="0" halign="left" height="20" hidden="false" - left="32" mouse_opaque="true" name="full_screen_text" v_pad="0" width="252"> + left="32" mouse_opaque="true" name="full_screen_text" v_pad="0" width="300"> Viewer will display full screen when logged in. </text> <button bottom="46" follows="left|bottom" font="SansSerif" halign="center" height="24" diff --git a/linden/indra/newview/skins/xui/ja/alerts.xml b/linden/indra/newview/skins/xui/ja/alerts.xml index 476ad88..113d768 100644 --- a/linden/indra/newview/skins/xui/ja/alerts.xml +++ b/linden/indra/newview/skins/xui/ja/alerts.xml @@ -2,7 +2,7 @@ <alerts> <alert name="MissingAlert"> <message name="message"> - [ALERT_NAME]がalerts.xmlにありません! + [ALERT_NAME]がalerts.xmlに含まれていません! </message> <option name="OK"> OK @@ -10,7 +10,7 @@ </alert> <alert name="FloaterNotFound"> <message name="message"> - フロータエラー:下記のコントロールが見つかりませんでした。 + フロータ・エラー:下記のコントロールが見つかりませんでした: [CONTROLS] </message> <option name="OK"> @@ -35,7 +35,7 @@ はい </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GenericServerAlert"> @@ -46,9 +46,9 @@ <alert name="ConnectTimeout"> <message name="message"> [SECOND_LIFE]に接続できません。 -このシステムはダウンしている可能性があります。 -数秒後にもう一度試みるか、または助言をえる -そしてシステムステータスウェブページへのリンクのためにHelpをクリックしてください。 +システムがダウンしている可能性があります。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -59,96 +59,95 @@ </alert> <alert name="RemoveWearableSave"> <message name="message"> - 現在の衣類/体の部分への変更の全てを保存しますか。 + 現在の衣服/身体部位に対する変更を保存しますか? </message> <option name="Save"> 保存 </option> <option name="Don'tSave"> - 保存できない + 保存しない </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="SetWearableSave"> <message name="message"> - 現在の衣類/体の部分への変更の全てを保存しますか。 + 現在の衣服/身体部位に対する変更を保存しますか? </message> <option name="Save"> 保存 </option> <option name="Don'tSave"> - 保存できない + 保存しない </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CompileQueueSaveText"> <message name="message"> - 次のような理由によってスクリプトようのテキストをアップロードするのに問題があります: [REASON]. 後でもう一度試みてください。 + 次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 [REASON] 後でもう一度試してください。 </message> </alert> <alert name="CompileQueueSaveBytecode"> <message name="message"> - 次のような理由によって準拠したスクリプトをアップロードするのに問題があります: [REASON]. 後でもう一度試みてください。 + 次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 [REASON]後でもう一度試してください。 </message> </alert> <alert name="WriteAnimationFail"> <message name="message"> - アニメーションデータを書くことに失敗 + アニメーション・データの書き込み失敗 </message> </alert> <alert name="UploadAuctionSnapshotFail"> <message name="message"> - 次のような理由によってオークションスナップショットをアップロードするのに問題があります: [REASON] + 次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 [REASON] </message> </alert> <alert name="UnableToViewContentsMoreThanOne"> <message name="message"> - 一度に一つ以上の項目のコンテンツを見ることはできません。 -ただ一つのオブジェクトを選択し、再び試みてください。 + 一度に複数のアイテムのコンテンツは表示できません。 +選択するアイテムを1つだけにして、もう一度試してください。 </message> </alert> <alert name="MustSupplyVoteProposal"> <message name="message"> - 選挙のために提案を供給する必要があります。 -グループの意図として簡単な説明を入力します。 + 投票のために問題を提起してください。 +グループの目的を簡単に説明してください。 </message> </alert> <alert name="InsufficientFunds"> <message name="message"> - 不十分な資金 + 資金が不十分です。 </message> </alert> <alert name="CharacterSnapshotSaved"> <message name="message"> - あなたのキャラクターのスナップショットを保存しました。 + あなたのキャラクターのスナップショットが保存されました。 -それを見るにはウェブページスタジオを見てください。 +Studio exhibitのウェブ・ページで確認してください。 </message> </alert> <alert name="SaveClothingBodyChanges"> <message name="message"> - 衣類/体の部分に変更の全てを保存しますか。 + 衣服/身体部位に対する変更をすべて保存しますか? </message> <option name="SaveAll"> - 全て保存 + すべて保存 </option> <option name="Don'tSave"> - 保存できない + 保存しない </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GrantModifyRights"> <message name="message"> - Granting modify rights to another resident allows them to change -ANY objects you may have in-world. Be VERY careful when handing -out this permission. -Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? + 他の住人に変更権限を与えると、その人はあなたが所有している +すべてのオブジェクトを変更できるようになります。 この許可を与えるときには細心の注意を払ってください。 +[FIRST_NAME] [LAST_NAME]に変更権限を与えますか? </message> <option name="Yes"> はい @@ -159,7 +158,7 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="RevokeModifyRights"> <message name="message"> - Do you want to revoke modify rights for [FIRST_NAME] [LAST_NAME]? + [FIRST_NAME][LAST_NAME]に対して変更権限を取り消しますか? </message> <option name="Yes"> はい @@ -170,23 +169,23 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="RemoveFriend"> <message name="message"> - あなたはあなたの友達から[FIRST] [LAST]を取り除きたいですか。 + [FIRST][LAST]をフレンド・リストから削除しますか? </message> <option name="Remove"> - 取り除く + 削除 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GroupCreateSuccess"> <message name="message"> - グループの作成に成功しました。 + グループの作成が正常に終了しました。 </message> </alert> <alert name="UnableToCreateGroup"> <message name="message"> - グループを作成することは不可能です。 + グループを作成できません。 [MESSAGE] </message> <option name="OK"> @@ -195,50 +194,55 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="PanelGroupApply"> <message name="message"> - [NEEDS_APPLY_MESSAGE][WANT_APPLY_MESSAGE] + [NEEDS_APPLY_MESSAGE] +[WANT_APPLY_MESSAGE] </message> <option name="ApplyChanges"> - 変更の適用 + 変更を適用 </option> <option name="IgnoreChanges"> - 変更の無視 + 変更を無視 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CreateGroupCanAfford"> <message name="message"> - グループ設立にはL$[COST]かかります。 3日間以上グループを維持するためには、全体で3名以上のメンバー数が必要です。 + グループ作成にはL$[COST]かかります。 + +グループを4日以上維持するには、 +全体で3名以上のメンバー数に達する必要があります。 + グループを設立しますか? </message> <option name="Create"> - 生成 + 作成 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CreateGroupCannotAfford"> <message name="message"> - グループの価格 L$[COST]を作成 -あなたはこのグループを生成するのに十分な金を持っていません。 + グループの作成にはL$[COST]かかります。 +お金が不足しているため、このグループを作成できません。 </message> </alert> <alert name="GroupNameTooShort"> <message name="message"> - グループ名は、少なくとも4字文字の長さである必要があります。 + グループ名は、4文字以上にする必要があります。 </message> </alert> <alert name="GroupNameUsesReservedWord"> <message name="message"> - そのグループ名には予約の言葉を使用します。 -異なった名前を選択してください。 + このグループ名はすでに使われています。 違う +名前を選んでください。 </message> </alert> <alert name="MustSpecifyGroupNoticeSubject"> <message name="message"> - グループ通知を送信する際は、題名を特定してください。 + グループ通知の送信には、件名の記入が必要です。 </message> <option name="OK"> OK @@ -246,15 +250,20 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="MustSupplyGroupCharter"> <message name="message"> - グループのために支部を供給する必要があります。 -グループの意図として簡単な説明を入力します。 + グループ用の特権が必要です。 +グループの目的を簡単に説明してください。 </message> </alert> <alert name="AddGroupOwnerWarning"> <message name="message"> - あなたは[ROLE_NAME]の役割に、グループメンバーを追加しようとしています。役割についたメンバーは、自ら退任しない限り、役割から外すことが出来ません。 -本当に作業を続けますか? + あなたは [ROLE_NAME]の役割にメンバーを加えようとしています。 +任命されたメンバーが自ら退任しない +限り、彼らを役柄から削除できません。 +操作を続行しますか? </message> + <ignore name="ignore"> + オーナーの役割にグループ・メンバーを加えるとき + </ignore> <option name="Yes"> はい </option> @@ -264,11 +273,17 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="AssignDangerousActionWarning"> <message name="message"> - あなたは、権限『[ACTION_NAME]』を役割『[ROLE_NAME]』に追加しようとしています。 -*警告* -この権限を持つ役割のメンバーは、自分自身や他のメンバーに、現在よりも強力な、オーナーに近いパワーをもたせることが出来ます。 -この権限を与える前に、そのことを確認してください。 -この権限を『[ROLE_NAME]』に追加しますか? + あなたは[ROLE_NAME]に [ACTION_NAME]の能力を +加えようとしています。 + + *警告* + この能力を持つ役割のメンバーは、 + 自分と他のメンバーに現在より強力な権限を割り当て、 +自分をオーナーとほぼ同様の立場に +任命することもできるようになります。 この行為の意味をよく理解してから +実行してください。 + +この能力を[ROLE_NAME]に加えますか? </message> <option name="Yes"> はい @@ -279,10 +294,15 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="AssignDangerousAbilityWarning"> <message name="message"> - あなたは権限『[ACTION_NAME]』を、役割『[ROLE_NAME]』に追加しようとしています。 -*警告* -この権限を持つ役割のメンバーは、自分自身や他のメンバーに、オーナーに近いパワーをもたせることが出来ます。 -この権限を『[ROLE_NAME]』に追加しますか? + あなたは[ROLE_NAME]に [ACTION_NAME]の能力を +加えようとしています。 + + *警告* + この能力をもつ役割のメンバーは、自分と他のメンバーにすべての +能力を割り当て、自分をオーナーとほぼ同様の立場に +任命できます。 + +この能力を[ROLE_NAME]に加えますか? </message> <option name="Yes"> はい @@ -293,70 +313,93 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]? </alert> <alert name="ClickPublishHelpGroup"> <message name="message"> - ウェブ上で公開' オプションを選択した場合、[SECOND_LIFE]Webサイトにて、グループ名、記章、特権、タイトル、創立者を公開できるようになります。上記内容がコミュニティ・スタンダードにおいて成人向けコンテンツと判断されるかどうかの責任はあなたにあります。 + [ウェブ上で公開]オプションを選択すると、 +[SECOND_LIFE]ウェブ・サイト上でグループ名、記章、特権、タイトル、および創立者を公開できます。 上記のコンテンツがコミュニティ・スタンダードにおいて +成人向けコンテンツと判断されるかどうかについては、 +あなた自身がそれを明記しなければなりません。 </message> </alert> <alert name="ClickPublishHelpLand"> <message name="message"> - ウェブ上で公開' オプションを選択した場合、[SECOND_LIFE]Webサイトにて、名前、説明、スナップショット、場所を公開できるようになります。上記内容がコミュニティ・スタンダードにおいて成人向けコンテンツと判断されるかどうかの責任はあなたにあります。 + [ウェブ上で公開]オプションを選択すると、 +[SECOND_LIFE]ウェブ・サイト上で、この区画の名前、説明、スナップショット、およびロケーションを公開できます。 上記のコンテンツがコミュニティ・スタンダードにおいて +成人向けコンテンツと判断されるかどうかについては、 +あなた自身がそれを明記しなければなりません。 </message> </alert> <alert name="ClickPublishHelpPostcard"> <message name="message"> - ウェブ上で公開' オプションを選択した場合、[SECOND_LIFE]Webサイトにて、撮影者の[SECOND_LIFE]名、題名、場所、メッセージ、スナップショットを公開できるようになります。上記内容がコミュニティ・スタンダードにおいて成人向けコンテンツと判断されるかどうかの責任はあなたにあります。 + [ウェブ上で公開]オプションを選択すると、 +[SECOND_LIFE]ウェブ・サイト上で撮影者の[SECOND_LIFE]名、題名、ロケーション、メッセージ、およびスナップショットを公開できます。 上記のコンテンツがコミュニティ・スタンダードにおいて +成人向けコンテンツと判断されるかどうかについては、 +あなた自身がそれをスナップショットごとに明記しなければなりません。 </message> </alert> <alert name="ClickPublishHelpAvatar"> <message name="message"> - ウェブ上で公開' オプションを選択した場合、[SECOND_LIFE]Webサイトにて、あなたの名前、イメージ画像、自己紹介を公開できるようになります。 + [ウェブ上で公開]オプションを選択すると、 +[SECOND_LIFE]ウェブ・サイト上で、あなた自身の名前、画像、および自己紹介を公開できます。 </message> </alert> + <alert name="ClickPartnerHelpAvatar"> + <message name="message"> + [SECOND_LIFE]のウェブ・サイトから、他の住人へのプロポーズ、パートナー解消ができます。 + +ウェブ・サイトに行って パートナーに関する情報を取得しますか? + </message> + <option name="GotoPage"> + ページに移動 + </option> + <option name="Cancel"> + 取り消し + </option> + </alert> <alert name="ClickWebProfileHelpAvatar"> <message name="message"> - If this resident has a web profile URL set then you can: - * Click Load to load the page with the embedded web browser. - * Click Open to view externally in your default web browser. + この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です。 +*そのページを内蔵ブラウザーで表示するには、[ロード]をクリックします。 +*そのページをデフォルトの外部ウェブ・ブラウザーで表示するには、[開く]をクリックします。 -When viewing your profile you can enter any URL as your Web Profile. -Residents can visit the URL you specify when they view your profile. +自分のプロフィールを表示しているときは、任意のURLをウェブ・プロフィールとして入力できます。 +プロフィールを見た住人は、そのURLにアクセスすることができます。 </message> </alert> <alert name="ClickWebProfileNoWebHelpAvatar"> <message name="message"> - If this resident has a web profile URL set then you can: - * Click Open to view externally in your default web browser. + この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です: +*そのページをデフォルトの外部ウェブ・ブラウザーで表示するには、[開く]をクリックします。 -When viewing your profile you can enter any URL as your Web Profile. -Residents can visit the URL you specify when they view your profile. +自分のプロフィールを表示しているときは、任意のURLをウェブ・プロフィールとして入力できます。 +プロフィールを見た住人は、そのURLにアクセスすることができます。 </message> </alert> <alert name="ReputationMinGreaterThanMax"> <message name="message"> - 名声の最低限度は最大限度より大きいです。 -最小限度をより下げるかまたは最大限度を上げるかどちらかです。 + 評判の最低値が最高値を超えています。 +最低値を下げるか、最高値を上げてください。 </message> </alert> <alert name="MoneyMinGreaterThanMax"> <message name="message"> - 金銭の最低限度は最大限度より大きいです。 -最小限度をより下げるかまたは最大限度を上げるかどちらかです。 + 最低金額が最高金額を超えています。 +最低金額を下げるか、最高金額を上げてください。 </message> </alert> <alert name="OfficerTitleTooLong"> <message name="message"> - オフィサーのタイトルは、最大20文字の長さである必要があります。 -より短いタイトルを選択してください。 + オフィサーの肩書きが長すぎます。 +20文字以下のタイトルを選択してください。 </message> </alert> <alert name="MemberTitleTooLong"> <message name="message"> - メンバーの役職は、最大20文字の長さである必要があります。 -より短い役職を選択してください。 + メンバーのタイトルが長すぎます。 +20文字以下のタイトルを選択してください。 </message> </alert> <alert name="RunningLocally"> <message name="message"> - ローカルで起動中… + ローカルで実行中… データがありません。 </message> <option name="OK"> @@ -365,7 +408,7 @@ Residents can visit the URL you specify when they view your profile. </alert> <alert name="EjectNoMemberSelected"> <message name="message"> - 追放するために選択されたメンバーはいない。 + 追放するメンバーが選択されていません。 </message> <option name="OK"> OK @@ -373,426 +416,461 @@ Residents can visit the URL you specify when they view your profile. </alert> <alert name="ConfirmEject"> <message name="message"> - これはグループから[MEMBER]を追放します。 -続行したいですか。 + これをすると [MEMBER] がグループから追放されます。 +手続きを続けますか? </message> <option name="Eject"> - 追放する + 追放 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="JoinGroupCanAfford"> <message name="message"> - グループに参加する価格は L$[COST]です。 -続行したいですか。 + このグループに参加するには、L$[COST]かかります。 +続行しますか? </message> <option name="Join"> 参加 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="JoinGroupCannotAfford"> <message name="message"> - グループに参加する価格は L$[COST]です。 -あなたはこのグループに参加するための十分な残金を持っていません。 + このグループに参加するにはL$[COST]かかります。 +残金不足のため、このグループに参加できません。 </message> </alert> <alert name="LandBuyPass"> <message name="message"> - L$[COST]で [TIME] 時間のためにこの土地[PARCEL_NAME] -入ることができます。 パスをかいますか。 + L$[COST]で [TIME] 時間にわたって、この土地[PARCEL_NAME]に入ることができます。パスを購入しますか? </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CannotStartAuctionAlreadyForSale"> <message name="message"> - あなたは売り物としてすでに設定された区画でオークションを開始できません。 -もしオークションを開始することが確かな場合には -土地売却を不可能にします。 + 売り出し中の区画では、オークションを +開始できません。 オークションを始める場合は、 +土地の売り出しを無効にします。 </message> </alert> <alert name="SalePriceRestriction"> <message name="message"> - 誰かに売却する場合には、売却価格は > L$0 で設定される必要があります。 -L$0で売却する場合には、売却する個人を選択してください。 + 任意の相手に売却する場合、売却価格はL$0を超えている必要があります。 +L$0で売却するには、売却先の個人を選択してください。 </message> </alert> <alert name="ConfirmLandSaleChange"> <message name="message"> - 選択した [LAND_SIZE] 平方メーターの土地は売り物として設定されています。 -売却価格はL$[SALE_PRICE]で、[NAME]に売却を認可されます。 + 選択された [LAND_SIZE] 平方メートルの土地が売り出し中です。 +あなたの売値はL$[SALE_PRICE]で、[NAME]への販売が承認される予定です。 -この変更をすることを続けたいですか。 +この変更手続きを続けますか? </message> <option name="Continue"> - 継続 + 続行 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsDeededToGroup"> <message name="message"> - この区画のグループ『[NAME]』共有の全てのオブジェクトを、以前の所有者の持ち物に本当に返却してもよいですか? -*警告*これにより、そのグループに譲渡された譲渡不可能なオブジェクトは削除されます! -オブジェクト:[N] + この区画のグループ[NAME]共有のすべてのオブジェクトを、以前のオーナーの持ち物に戻そうとしています。 +操作を続行しますか? + +*警告* これにより、 +そのグループに譲渡された +譲渡不可能なオブジェクトは削除されます! +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsOwnedByUser"> <message name="message"> - この区画の居住者『[NAME]』所有の全てのオブジェクトを、所有者の持ち物に本当に返却してもよいですか? -オブジェクト:[N] + この土地区画の +住人[NAME]所有のすべてのオブジェクトを、オーナーの持ち物に戻そうとしています。 +操作を続行しますか? + +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsOwnedBySelf"> <message name="message"> - この区画であなたが所有する全てのオブジェクトを、あなたの持ち物に本当に返却してもよいですか? -オブジェクト:[N] + この土地区画内のオブジェクトのうち、 +あなたが所有するすべてのオブジェクトを +あなたの持ち物に戻そうとしています。操作を続行しますか? + +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsNotOwnedBySelf"> <message name="message"> - この区画であなたが所有する全てのオブジェクトを、あなたの持ち物に本当に返却してもよいですか?グループに譲渡された譲渡可能オブジェクトは、以前の所有者に返却されます。 -*警告*これにより、そのグループに譲渡された譲渡不可能なオブジェクトは削除されます! -オブジェクト:[N] + この土地区画内のオブジェクトのうち、 +あなたが所有していないすべてのオブジェクトをそれぞれのオーナーの持ち物に戻そうとしています。 +操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。 + +*警告* これにより、 +そのグループに譲渡された +譲渡不可能なオブジェクトは削除されます! +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsNotOwnedByUser"> <message name="message"> - この土地の一区画において[NAME]の所有ではない -全てのオブジェクトをその所有者'の在庫目録に戻してもよいですか。 -グループに譲渡された譲渡可能なオブジェクトは -前の所有者に戻されます。 - -*警告* グループに譲渡された譲渡不可能なオブジェクトは -削除されます。 + この土地区画内のオブジェクトのうち、 +[NAME]が所有していないすべてのオブジェクトをそれぞれのオーナーの持ち物に返却しようとしています。 +操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。 -オブジェクト:[N] +*警告* これにより、 +そのグループに譲渡された +譲渡不可能なオブジェクトは削除されます! +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnAllTopObjects"> <message name="message"> - Are you sure you want to return all objects -in this region back to their owner's inventory? + この地域にあるすべてのオブジェクトをオーナーに返却しようとしています。操作を続行しますか? </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="DisableAllTopObjects"> <message name="message"> - Are you sure you want to disable all objects in this region? + この地域内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか? </message> <option name="Disable"> - 不能 + 無効化 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnObjectsNotOwnedByGroup"> <message name="message"> - この土地の区画においてグループ[NAME]と共有していないオブジェクトを、所有者に返却しますか? -オブジェクト:[N] + この土地の区画上のオブジェクトのうち、グループ[NAME] +との間で共有していないオブジェクトをオーナーに返却しますか? + +オブジェクト: [N] </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="UnableToDisableOutsideScripts"> <message name="message"> - 外部スクリプトを不能にすることはできません。 -この地域全体では、健全であるようにします(安全でない)。 -スクリプトは仕事で拳銃を作動させることを許す必要があります。 + 外部スクリプトを無効にできません。 +この地域全域でヘルス・システムが有効になっています(安全ではありません)。 +スクリプトを実行して発砲を許可する必要があります。 </message> </alert> <alert name="MustBeInParcel"> <message name="message"> - そのLanding Pointを設定するには -土地区画の内側に立つ必要があります。 + 着地点を設定するには、この区画の内側に +立ってください。 </message> </alert> <alert name="PromptRecipientEmail"> <message name="message"> - 受領者のEメールのアドレスを入力してください。 + 受信者の電子メール・アドレスを入力してください。 </message> </alert> <alert name="PromptSelfEmail"> <message name="message"> - あなたのEメールのアドレスを入力してください。 + あなたの電子メール・アドレスを入力してください。 </message> </alert> <alert name="ErrorProcessingSnapshot"> <message name="message"> - エラープロセススナップショットデータ + スナップショット・データの処理エラー </message> </alert> <alert name="ErrorEncodingSnapshot"> <message name="message"> - エラー暗号化スナップショット! + スナップショットのエンコード・エラー! </message> </alert> <alert name="ErrorUploadingPostcard"> <message name="message"> - 次のような理由によってポストカードをアップロードするのに問題があります: [REASON] + 次の理由で、ポストカードのアップロード時に問題が起こりました。 [REASON] </message> </alert> <alert name="ErrorUploadingReportScreenshot"> <message name="message"> - 次のような理由によって報告のスクリーンショットをアップロードするのに問題があります: [REASON] + 次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON] </message> </alert> <alert name="MustAgreeToLogIn"> <message name="message"> - [SECOND_LIFE]に続けてロクインするにはTerms of Serviceに同意する必要があります。 + [SECOND_LIFE]へのログインを続けるには、利用規約に同意してください。 </message> </alert> <alert name="CouldNotPutOnOutfit"> <message name="message"> - 服を着ることができなかった。 -アウトフィットフォルダーは衣服、体の一部または装身具は含まれていません。 + 服装を装着できません。 +服装フォルダに衣服、身体部位、付属品がありません。 </message> </alert> <alert name="CannotWearTrash"> <message name="message"> - ゴミ箱内の衣類または体の一部をつけることはできません。 + ゴミ箱に入っている服や身体部位は装着できません。 </message> </alert> <alert name="CannotWearInfoNotComplete"> <message name="message"> - 完全な情報がまだ使用可能でないのでこの項目を着用できません。すぐにもう一度試みてください。 + 情報セットが不足しているため、このアイテムを装着することはできません。数分後に試してください。 </message> </alert> <alert name="MustHaveAccountToLogInNoLinks"> <message name="message"> - [SECOND_LIFE]に接続するにはアカウントを持つ必要があります。 + [SECOND_LIFE]への接続にはアカウントが必要です。 </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="MustHaveAccountToLogIn"> <message name="message"> - [SECOND_LIFE]に接続するにはアカウントを持つ必要があります。 + [SECOND_LIFE]への接続にはアカウントが必要です。 -新しいアカウントを作成するために www.secondlife.com に行きますか。 +www.secondlife.comに行き、アカウントを作成しますか? </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="AddClassified"> <message name="message"> - 検索ディレクトリの『クラシファイド』セクションに、クラシファイド広告が一週間掲載されます。広告を記入後、『発行』をクリックし、ディレクトリに追加します。 -発行する際に、支払いをする金額を尋ねられます。支払い金額を多く出すことや、キーワード検索が多くされることにより、あなたの広告は上位にリストされます。 + クラシファイド広告は、 +検索ディレクトリのクラシファイド・セクションに +1週間掲示されます。 +広告を記入後、[発行]をクリックし、 +ディレクトリ +に追加します。 [発行]をクリックすると、料金の支払いが要求されます。 +支払い額が大きいほど、広告がリスト内で上位に表示され、 +キーワードで検索されたときも上位に表示されます。 </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> + <ignore name="ignore"> + 新しいクラシファイド広告を加えるとき + </ignore> </alert> <alert name="DeleteClassified"> <message name="message"> - 分類された[NAME]を削除しますか。 -支払った料金のための返済はありません。 + クラシファイド広告[NAME]の削除をしますか? +支払い済みの料金は返金されません。 </message> <option name="Delete"> 削除 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="DeleteAvatarPick"> <message name="message"> - ピック [PICK]を削除しますか。? + ピック[PICK]を削除しますか? </message> <option name="Delete"> 削除 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="DisplayChangeRestart"> <message name="message"> - その表示のいくつかは、進行中の仕事を失う原因となるような -即座のシャットダウンをすることを[SECOND_LIFE]に要求 -させることを変更します。 + あなたが表示に対して行った変更には、[SECOND_LIFE]の即時シャットダウンを +必要とするものが含まれています。 +これにより、現在の作業内容が失われる可能性があります。 -これらの変更を適用し、終了します +それらの変更を適用した後、終了します。 </message> <option name="ApplyandQuit"> - 適用と終了 + 適用して終了 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="PromptGoToEventsPage"> <message name="message"> - [SECOND_LIFE] イベントウェブページに行きますか。 + [SECOND_LIFE]イベント・ウェブ・ページに移動しますか? </message> <option name="GotoPage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="MustSelectCandidate"> <message name="message"> - 投票する候補者を選択する必要があります。 + 候補者を選定して投票します。 </message> </alert> <alert name="SelectItemToView"> <message name="message"> - 見たい項目を選択してください。 + 表示するアイテムを選択してください。 </message> </alert> <alert name="SelectProposalToView"> <message name="message"> - 閲覧する提案を選択してください。 + 表示する提案を選択してください。 </message> </alert> <alert name="SelectHistoryItemToView"> <message name="message"> - 見たい履歴項目を選択してください。 + 表示する履歴アイテムを選択してください。 </message> </alert> <alert name="ResetShowNextTimeDialogs"> <message name="message"> - 全て再設定 '次の時間を見せる' ダイアログ... + 「次回表示」ダイアログをすべてリセットしますか? </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CacheWillClear"> <message name="message"> - キャッシュは[SECOND_LIFE]を再起動された後クリアされます。 + [SECOND_LIFE]の再起動後にキャッシュがクリアされます。 + </message> + </alert> + <alert name="CacheWillBeMoved"> + <message name="message"> + [SECOND_LIFE]の再起動後にキャッシュが移動されます。 +メモ:これによりキャッシュがクリアされます。 + </message> + </alert> + <alert name="ChangeConnectionPort"> + <message name="message"> + ポートの設定は、[SECOND_LIFE]の再起動後に有効になります。 </message> </alert> <alert name="GoToAuctionPage"> <message name="message"> - オークションの詳細をみたり、 -または入札をするために[SECOND_LIFE] ウェブページに行きますか。 + オークションの詳細を見たり、 +入札をするために[SECOND_LIFE]ウェブ・ページに移動しますか? </message> <option name="GotoPage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="SaveChanges"> <message name="message"> - 変更を保存しますか。 + 変更を保存しますか? </message> <option name="Save"> 保存 </option> <option name="Don'tSave"> - 保存できない + 保存しない </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GestureSaveFailedTooManySteps"> <message name="message"> - 身振りの保存に失敗しました。 -この身振りはステップが多すぎます。 -いくつかのステップ取り除くことを試み、それから再び保存してください。 + ジェスチャーの保存に失敗しました。 +ステップが多すぎます。 +ステップをいくつか削除してから再保存してください </message> </alert> <alert name="GestureSaveFailedTryAgain"> <message name="message"> - 身振りの保存に失敗しました。 すぐにもう一度試みてください。 + ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。 </message> </alert> <alert name="GestureSaveFailedObjectNotFound"> <message name="message"> - オブジェクトまたは関連したオブジェクト在庫目録を見つけることができないので、身振りを保存できなかった。 -このオブジェクトは範囲の外にあるかまたは削除されてしまった可能性があります。 + ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 </message> </alert> <alert name="GestureSaveFailedReason"> <message name="message"> - 次のような理由によって身振りを保存するのに問題があります: [REASON]. 後で身振りを再保存することを試みてください。 + 次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]. 後でもう一度試してください。 </message> </alert> <alert name="SaveNotecardFailObjectNotFound"> <message name="message"> - オブジェクトまたは関連したオブジェクト在庫目録を見つけることができないので、ノートカードを保存できなかった。 -このオブジェクトは範囲の外にあるかまたは削除されてしまった可能性があります。 + ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 </message> </alert> <alert name="SaveNotecardFailReason"> <message name="message"> - 次のような理由によってノートカードを保存するのに問題があります: [REASON]. あとでこのノートカードを再保存することを試みてください。 + 次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]. 後でもう一度試してください。 </message> </alert> <alert name="ScriptCannotUndo"> <message name="message"> - あなたのスクリプトのバージョンでは、変更を元に戻す事はできませんでした。サーバーの最新保存バージョンをロードしますか? -(注意:この操作は元に戻すことができません) + あなたが使用しているバージョンのスクリプトに対して行った変更をすべて元に戻すことに失敗しました。 +サーバー側の最新保存バージョンをロードしますか? +(注意:この操作は元に戻すことができません)。 </message> <option name="Yes"> はい @@ -803,50 +881,50 @@ in this region back to their owner's inventory? </alert> <alert name="SaveScriptFailReason"> <message name="message"> - 次のような理由によってスクリプトを保存するのに問題があります: [REASON]. あとでこのスクリプトを再保存することを試みてください。 + 次の理由で、スクリプトの保存に問題が起こりました。 [REASON]. 後でもう一度試してください。 </message> </alert> <alert name="SaveScriptFailObjectNotFound"> <message name="message"> - スクリプトが乗っているオブジェクトを見つけることができないのでスクリプトを保存できませんでした。 -このオブジェクトは範囲の外にあるかまたは削除されてしまった可能性があります。 + スクリプトの保存に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 </message> </alert> <alert name="SaveBytecodeFailReason"> <message name="message"> - 次のような理由によって準拠したスクリプトを保存するのに問題があります: [REASON]. あとでこのスクリプトを再保存することを試みてください。 + 次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]. 後でもう一度試してください。 </message> </alert> <alert name="CouldNotStartStopScript"> <message name="message"> - スクリプトが乗っているオブジェクトを見つけることができないのでスクリプトを開始または停止できませんでした。 -このオブジェクトは範囲の外にあるかまたは削除されてしまった可能性があります。 + スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 </message> </alert> <alert name="CannotDownloadFile"> <message name="message"> - ファイルをダウンロードすることが不可能です。 + ファイルをダウンロードできません。 </message> </alert> <alert name="CannotWriteEncode"> <message name="message"> - ファイルを暗号化することが不可能です [[FILE]] + [[FILE]]のファイルをエンコードできません。 </message> </alert> <alert name="CannotWriteFile"> <message name="message"> - ファイルを書き込むことは不可能です[[FILE]] + ファイル[[FILE]を書き込めません。 </message> </alert> <alert name="CannotLoadWearable"> <message name="message"> - すみません。衣類をロードできません + 残念ながら、着用可能なものをロードできませんでした。 </message> </alert> <alert name="ConfirmDeleteComplicated"> <message name="message"> - 少なくとも一つ選択されたオブジェクトはロックされているか、コピーが不可能か、ほかのだれかによって所有されています。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものか、コピーできないもの、または他人が所有しているものが少なくとも1つあります。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -857,13 +935,14 @@ in this region back to their owner's inventory? </alert> <alert name="DisplaySettingsSafe"> <message name="message"> - 表示設定は、あなたが安全オプションを指定したので -安全レベルに設定されました。 + -safeオプションを指定したので、 +表示設定はセーフ・レベルに設定されています。 </message> </alert> <alert name="DisplaySettingsRecommended"> <message name="message"> - ディスプレイ設定は、あなたのシステム構成に基づいて推奨されたレベルに設定されています。 + 表示設定は、あなたのシステム構成に +基づいて推奨されたレベルに設定されています。 </message> <option name="OK"> OK @@ -872,17 +951,17 @@ in this region back to their owner's inventory? <alert name="CannotRequestDomain"> <message name="message"> サーバーに接続できません。 -ドメイン名を依頼できませんでした: [HOST] +ドメイン名[HOST]をリクエストできませんでした。 </message> </alert> <alert name="CannotFindDomain"> <message name="message"> - このサーバードメイン名をみつけることが不可能です。 -これはネットワーク接続を失ったか -またはサーバーの問題で起こる結果の可能性があります。 + サーバーのドメイン名が見つかりません。 +ネットワーク接続が失われたか、サーバーに問題が +あります。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -899,68 +978,70 @@ Helpをクリックしてください。 </alert> <alert name="CannotConnectDNSError"> <message name="message"> - [SECOND_LIFE]に接続できません -DNS はホスト名を解明できませんでした。 -www.secondlife.com ウエブサイトに接続できることを確認してください。 -もしできで、しかしこのエラーを続けて受け取る場合には、 -支援セクションに行きそしてこの問題を報告してください。 + [SECOND_LIFE]に接続できません。 +DNSがホスト名を見つけられませんでした。 + www.secondlife.comウェブ・サイトに接続できることを確認 +してください。 接続はできるのにこのエラーが続く場合は、 +[サポート]に連絡してこの問題を報告してください。 </message> </alert> <alert name="CannotConnectSecurityError"> <message name="message"> - ログインサーバーに安定した接続を確立することが不可能です。 -しばしばこれはあなたのコンピュータのクロックが不適当に設定されていることを意味します。 -Control Panels に行きそして時間と日付が正しく設定されていることを + ログインサーバーとの接続が確立できません。 +あなたのコンピューターの時計が正しく設定されていないことが原因かもしれません。 +日時の設定が正しいか[コントロールパネル]から 確認してください。 -このエラーを続けて受け取る場合には、 -SecondLife.com ウェブサイト上のSupportセクションにいって -そしてこの問題を報告してください。 + エラーが続くようならSecondLife.com +ウェブ・サイトの「サポート」セクションに行き +問題を報告してください。 </message> </alert> <alert name="CannotConnectVerificationError"> <message name="message"> [SECOND_LIFE]に接続できません。 -このログインサーバーはそれ自身をSSLを介して確認できませんでした。 -このエラーを続けて受領する場合には、 -SecondLife.com ウェブサイト上のSupportセクションにいって -そしてこの問題を報告してください。 +ログインサーバーはSSLを介して自己認証できませんでした。 +このエラーが続く場合は、SecondLife.com +ウェブ・サイトの[サポート]セクションに連絡して +この問題を報告してください。 </message> </alert> <alert name="CannotConnectUnknownErrorWindows"> <message name="message"> [SECOND_LIFE]に接続できません。 -我々の最善の努力にも関わらず、予期しない出来事が発生しました。 -SecondLife.comのWebサイトのサポート・セクションで問題を報告してください。可能ならば、C:\Documents and Settings\(name)\Application Data\SecondLife\logs から、あなたのログファイルを含めてください。 -ご協力ありがとうございます。 +最善の努力を行ったにもかかわらず、予想外の問題が起きました。 +ウェブ上のSecondLife.comの[サポート]セクションに行き +問題を報告してください。. できれば下のところにあるあなたの SecondLife.ログファイルも +入れてください: C:\Documents and Settings\(name)\Application Data\SecondLife\logs +よろしくお願いいたします。 </message> </alert> <alert name="CannotConnectUnknownErrorDarwin"> <message name="message"> [SECOND_LIFE]に接続できません。 -最高の努力にも関わらず、予期しない何かが故障しました。 -SecondLife.com ウェブサイトの支援セクションに行きそして問題を報告してください。 -可能な場合には、以下からのあなたのSecondLife.logファイルを含める: -file from: ~/Library/Application Support/SecondLife/logs -どうもありがとう +最善の努力を行ったにもかかわらず、予想外の問題が起きました。 +ウェブ上のSecondLife.comの[サポート]セクションに行き +問題を報告してください。 できれば~/Library/Application Support/SecondLife/logsにある + あなたのSecondLife.ログファイルも入れてください。 +よろしくお願いいたします。 </message> </alert> <alert name="CannotResolveLoginToken"> <message name="message"> - 認証を取った -あなたの地域で解決する問題があります。 -もう一度ロクインを試みてください。 -このエラーを続けて受け取る場合には、 -SecondLife.com ウェブサイト上のSupportセクションにいってください。 + ログイン認証トークンの解読に +問題がありました。 もう一度ログインを試して +ください。 このエラーが続くようなら + SecondLife.comのサポートセクションに + 連絡してください。 </message> </alert> <alert name="CannotConnectNoMessage"> <message name="message"> - 未知の問題を正しく直すには -(サーバーからの空エラーメッセージ) + 接続中に未知のエラーが起こりました。 +(サーバーからブランク・エラーメッセージ) -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -971,10 +1052,10 @@ Helpをクリックしてください。 </alert> <alert name="CannotConnectNoReplyFromLogin"> <message name="message"> - 接続は不可能です。ログインデータベースからは返答がありません。 + 接続できません。 ログインデータベースが応答していません。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -985,46 +1066,45 @@ Helpをクリックしてください。 </alert> <alert name="CannotConnectLoginTimeout"> <message name="message"> - ログインは世界の中のあなたの場所でまっていることにタイムアウトしました。 もう一度試みてください。 + インワールドでのあなたのロケーションの取得中にログインがタイムアウトしました。もう一度試みてください。 </message> </alert> <alert name="FirstRunDialog"> <message name="message"> - [SECOND_LIFE] のインストールは完了しました。 - -これはあなたが最初に[SECOND_LIFE]使用する場合に、 -あなたがロクオンする前にアカウント生成する必要があります。. + [SECOND_LIFE] のインストールが完了しました。 -新しいアカウントを作成するために www.secondlife.com に戻りますか。 +[SECOND_LIFE]の使用が初めての方は、ログイン前に +アカウントの作成が必要です。 +www.secondlife.comに戻って新規アカウントの作成を行いますか? </message> <option name="NewAccount..."> - 新しいアカウント... + 新規アカウント... </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="ClothingStillDownloading"> <message name="message"> - あなたの衣類はまだダウンロードしています。 -あなたは世界を普通に使用でき、そして他の使用者は -現在のあなたを見ます。 + あなたの服をダウンロード中です。 +通常どおりに世界を使え、他のユーザーもあなたを +正常に見ることができます。 </message> </alert> <alert name="CannotResolveDomain"> <message name="message"> サーバーに接続できません。 -ドメイン名を解明できませんでした: [DOMAIN] -あなたのネットワーク接続をチェックしてください。 + ドメイン名[DOMAIN]を確認できませんでした。 +ネットワーク接続を確認してください。 </message> </alert> <alert name="CannotConnectLoginPacket"> <message name="message"> - 接続は不可能です。ロクインのパケットは -ロクインサーバーによって受け取られませんでした。 + 接続できません。 ログインパケットがログインサーバーに +到達しませんでした。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -1035,12 +1115,12 @@ Helpをクリックしてください。 </alert> <alert name="WelcomeToSecondLife"> <message name="message"> - [SECOND_LIFE]にようこそ! + [SECOND_LIFE]にようこそ! -矢印キーを使用して歩きます。 +>矢印のキーを使うと歩くことができます。 -男性あるいは女性の人物を選択してください。 -後であなたの決定を変更できます。 +あなたの分身の性別を選んでください。 +これは後から変えることもできます。 </message> <option name="Male"> 男性 @@ -1051,11 +1131,11 @@ Helpをクリックしてください。 </alert> <alert name="WelcomeToSecondLifeSimple"> <message name="message"> - [SECOND_LIFE]にようこそ! + [SECOND_LIFE]にようこそ! -矢印キーを使用して歩きます。 +矢印のキーを使うと歩くことができます。 -男性あるいは女性の人物を選択してください。 +あなたの分身の性別を選んでください。 </message> <option name="Male"> 男性 @@ -1066,7 +1146,7 @@ Helpをクリックしてください。 </alert> <alert name="ConfirmQuit"> <message name="message"> - 止めるのは望んでいるのは確かですか。 + 終了しようとしています。操作を続行しますか? </message> <option name="Yes"> はい @@ -1077,19 +1157,17 @@ Helpをクリックしてください。 </alert> <alert name="RegionNoTerraforming"> <message name="message"> - この地域[REGION]は、土地生成は許されません。 -土地生成をするには -世界のほかの部分で土地を購入する必要があります。 + この地域 [REGION] では土地整備は禁じられています。 +土地を整備するには、ほかの地域で土地を購入 +してください。 </message> </alert> <alert name="CannotCopyWarning"> <message name="message"> - この項目を -コピーする許可を持っていないし、 -それをあげてしまう場合にはあなたの -在庫目録からそれを失います。 -この項目を実際に -提供したいですか。 + あなたはこのアイテムのコピーを +許されていないので、人にあげると +持ち物から失われます。 本当に +これをあげたいですか? </message> <option name="Yes"> はい @@ -1100,30 +1178,30 @@ Helpをクリックしてください。 </alert> <alert name="CannotGiveItem"> <message name="message"> - 在庫目録の分類を与えることが不可能です。 + 持ち物のアイテムを渡せません。 </message> </alert> <alert name="TransactionCancelled"> <message name="message"> - 取引は取れ消されました。 + 取引がキャンセルされました。 </message> </alert> <alert name="TooManyItems"> <message name="message"> - 一つの在庫目録移動の中でたくさんの項目を与えることはできません。 + 1回の持ち物譲渡で譲渡できるアイテム数の上限を超えています。 </message> </alert> <alert name="NoItems"> <message name="message"> - 与えることができる項目はない。 + 渡せるアイテムがありません。 </message> </alert> <alert name="CannotCopyCountItems"> <message name="message"> - 選択された項目の -[COUNT]コピーについて許可を持っていません。 -あなたの在庫目録からこれらの項目を失います。 -この項目を実際に与えたいですか。 + あなたは選択されたアイテムの[COUNT]のコピーを +許されていません。 これらのアイテムはあなたの +持ち物から失われます。 +本当にアイテムをあげたいですか? </message> <option name="Yes"> はい @@ -1134,65 +1212,63 @@ Helpをクリックしてください。 </alert> <alert name="CannotGiveCategory"> <message name="message"> - 在庫目録の分類を与えることが不可能です。 + 持ち物のカテゴリーを渡せません。 </message> </alert> <alert name="FreezeAvatar"> <message name="message"> - このアバターを静止させてますか。 -彼または彼女は移動する -チャットまたは世界と対話することがことが一時的にできません。 + このアバターをフリーズしますか? +アバターは一時的に動けなくなり、 +チャットなど、この世界に対する関わりを持つことができなくなります。 </message> <option name="Freeze"> - 静止する + フリーズ </option> <option name="Unfreeze"> - 静止を解除する + 解凍 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EjectAvatar"> <message name="message"> - あなたの土地からこのアバターを追放しますか。 + あなたの土地からこのアバターを追放しますか? </message> <option name="Eject"> - 追放する + 追放 </option> <option name="EjectandBan"> 追放と禁止 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="InvalidUUID"> <message name="message"> - 有効なuuidではない + UUIDが無効 </message> </alert> <alert name="AcquireErrorTooManyObjects"> <message name="message"> - エラーを獲得: 選択されたオブジェクトが多すぎます。 + 取得エラー:選択したオブジェクトの数が多すぎます。 </message> </alert> <alert name="AcquireErrorObjectSpan"> <message name="message"> - エラーを獲得: オブジェクトは一つ以上の地域に広がります。 -獲得されたオブジェクトの全てを移動してください。 -同じ地域で + 取得エラー:オブジェクトが複数の地域にまたがって存在しています。 +取得するオブジェクトは、すべて同じ地域内に移動させてください。 </message> </alert> <alert name="TakeLockedOrNotOwnedBy"> <message name="message"> - 少なくとも一つのオブジェクトはロックされるかまたはあなたによって所有されません。 -オブジェクトがあなたによって所有されないそしてあなたがそれを得ている場合には、 -オブジェクトがあなたによって所有されないそしてあなたがそれを得ている場合には、 -それを変更するまたはコピーするためにあなたの能力をことによると限定します。 -将来 -しかし、あなたはまだ現行の選択を取ることができます。 -これらの項目を得ることを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているか、またはあなたが所有していないものが少なくとも1つあります。 +この選択内容をそのまま取得することは可能ですが、あなたの所有物ではないオブジェクトを取得すると、 +次のオーナーの権限がそのオブジェクトに適用されます。 +このため、 +将来、変更やコピーの能力が制限される可能性があります。 +これらのアイテムの取得を続行しますか? </message> <option name="Yes"> はい @@ -1206,49 +1282,51 @@ Helpをクリックしてください。 [EXTRA] -購入通貨に関する情報について [URL]に行きますか。 +[URL]に移動して貨幣購入に関する情報を確認しますか? </message> <option name="GotoPage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="UnableToLinkObjects"> <message name="message"> - これらの[COUNT]オブジェクトをリンクできません。 -最大[MAX]オブジェクトをリンクすることができます。数を減らして、試みてください。 + これら[COUNT]個のオブジェクトをリンクできません。 +リンクできるのは [MAX] 個までです。 +選択するオブジェクトを減らしてください。 </message> </alert> <alert name="CannotLinkIncompleteSet"> <message name="message"> - あなたは完全なセットのオブジェクトにリンクでき、 -そして一つ以上のオブジェクトを選択しなければなりません。 + セットとして揃っているオブジェクトのみリンクできます。複数の +オブジェクトを選択してください。 </message> </alert> <alert name="CannotLinkModify"> <message name="message"> - リンクすることが不可能です。すべてのオブジェクトの許可 -を修正しなかったからです。 -どれもロックされていない、そしてそれらの全てをあなたが所有していることを確認します。 + すべてのオブジェクトに対する修正許可があなたにない +ため、リンクできません。 オブジェクトがすべてロックされておらず、あなたのものであることを +確認してください。 </message> </alert> <alert name="CannotLinkDifferentOwners"> <message name="message"> - リンクすることが不可能です。全てのオブジェクトが同じ所有者を持たないからです。 -選択されたオブジェクトの全てを所有していることを確認してください。 + 所有者が異なるため、すべてのオブジェクトを +リンクできません。 自分が所有しているオブジェクトだけを選択してください。 </message> </alert> <alert name="NoFileExtension"> <message name="message"> - このファイルのためのファイル拡張はない:[FILE] -このファイルが正しいファイル拡張があるか確認してください + ファイル[FILE]の拡張子が無効です。 +このファイルの拡張子が正しいかどうかを確認してください。 </message> </alert> <alert name="InvalidFileExtension"> <message name="message"> - 期待された [VALIDS] + ファイル拡張子[EXTENSION]は無効です +正しい拡張子:[VALIDS] </message> <option name="OK"> OK @@ -1256,318 +1334,309 @@ Helpをクリックしてください。 </alert> <alert name="CannotUploadSoundFile"> <message name="message"> - 読むためにアップロード音ファイルを開くことができません。: + 読み込み用のアップロード・サウンド・ファイルを開くことができません。 [FILE] </message> </alert> <alert name="SoundFileNotRIFF"> <message name="message"> - ファイルは RIFF WAVE ファイルであることがわかりません: + ファイルがRIFF WAVEファイルとして認識されません: [FILE] </message> </alert> <alert name="SoundFileNotPCM"> <message name="message"> - ファイルはPCM WAVE オーディオファイルであることがわかりません: -[FILE] + ファイルがPCM WAVEオーディオ・ファイルとして認識されません: +[FILE][FILE] </message> </alert> <alert name="SoundFileInvalidChannelCount"> <message name="message"> - ファイルは、チャンネルの無効な数字を保持しています (モノまたはステレオである必要があります): + ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります): [FILE] </message> </alert> <alert name="SoundFileInvalidSampleRate"> <message name="message"> - ファイルは支援されたサンプル率であることがわかりません (44.1kである必要がある): + ファイルのサンプル・レートがサポート外です(44.1kを指定する必要があります): [FILE] </message> </alert> <alert name="SoundFileInvalidWordSize"> <message name="message"> - ファイルは支援された言葉サイズであることがわかりません (8 または16 ビットである必要があります): + ファイルのワード・サイズがサポート外です(8または16ビットを指定する必要があります): [FILE] </message> </alert> <alert name="SoundFileInvalidHeader"> <message name="message"> - WAVヘダー内にデータのかたまりを見つけることができなかった: -[FILE] + WAVヘッダーにデータ・チャンクが見つかりません:[FILE] </message> </alert> <alert name="SoundFileInvalidTooLong"> <message name="message"> - オーディオファイルは長すぎます (最大10秒): -[FILE] + オーディオ・ファイルが長すぎます。(最大10秒):[FILE] </message> </alert> <alert name="ProblemWithFile"> <message name="message"> - ファイルでの問題 [FILE]: + ファイル[FILE]にエラーがあります。 [ERROR] </message> </alert> <alert name="CannotOpenTemporarySoundFile"> <message name="message"> - Couldn't 書き込みするために一時的な圧縮音ファイルを開くことができません。: [FILE] + 書き込み用の一時圧縮サウンド・ファイルを開くことができません:[FILE] </message> </alert> <alert name="UnknownVorbisEncodeFailure"> <message name="message"> - 以下で未知のvorbis 暗号化に失敗: [FILE] + 未知のvorbisエンコードに失敗しました: [FILE] </message> </alert> <alert name="CorruptResourceFile"> <message name="message"> - リソースファイルの破壊: [FILE] + 破損したリソース・ファイル:[FILE] </message> </alert> <alert name="UnknownResourceFileVersion"> <message name="message"> - ファイル内の未知のlinden リソースファイルバージョン: [FILE] + 次のファイル内に未知のLindenリソースファイルバージョンがあります: [FILE] </message> </alert> <alert name="UnableToCreateOutputFile"> <message name="message"> - 出力ファイルを作成することは不可能です。: [FILE] + 服装ファイルを作成できません: [FILE] </message> </alert> <alert name="DoNotSupportBulkAnimationUpload"> <message name="message"> - アニメーションファイルのバルクアップロードを現在支援していません + 現在、アニメーション・ファイルの大量アップロードはサポートされていません。 </message> </alert> <alert name="CannotAccessOutputFile"> <message name="message"> - 出力ファイルにアクセス不能: [FILE] + 出力ファイル[FILE]にアクセスできません: </message> </alert> <alert name="InsufficientFundsToUploadFile"> <message name="message"> - 価格はL$[COST]で、残金はL$[BALANCE]です: ファイルをアップロードするには不十分な資金[FILE] + ファイル[FILE]をアップロードするには資金不足です:価格はL$[COST]ですが残金はL$[BALANCE]です。 </message> </alert> <alert name="InsufficientFundsToFinishUpload"> <message name="message"> - アップロードを終了するには不十分な資金[FILE]: 価格はL$[COST]で、残金はL$[BALANCE]です + ファイル[FILE]のアップロードを完了するには資金不足です:価格はL$[COST]ですが残金はL$[BALANCE]です。 </message> </alert> <alert name="CannotUploadReason"> <message name="message"> - 次のような理由で [FILE] をアップロードすることは不可能: [REASON] -後でもう一度試みてください。 + 次の理由で、[FILE] をアップロードできません: [REASON] +あとでもう一度試してください。 </message> </alert> <alert name="CannotCreateLandmarkNotOwner"> <message name="message"> - ここにランドマークを生成できません。 -それはこの土地の所有者がそれを許可しないからです。 -最初に数メーター動くことを試みます。 + 土地所有者が許可していないので、 +ここにランドマークを作成することはできません。 +まず数メートル移動してください。 </message> </alert> <alert name="CannotRecompileSelectObjectsNoScripts"> <message name="message"> - 再コンパイルを行うことができません。 -有効なスクリプトを持ったオブジェクトを -選択する。 + 再コンパイルできません。 +スクリプトが有効なオブジェクトを選択してください。 </message> </alert> <alert name="CannotRecompileSelectObjectsNoPermission"> <message name="message"> - 再コンパイルを行うことができません。 -あなたが修正する許可のあるスクリプトを持ったオブジェクトを選択する。 -あなたが修正する許可のあるスクリプトを持ったオブジェクトを選択する。 + 再コンパイルできません。 +自分にスクリプトの変更権限があるオブジェクトを選択してください。 </message> </alert> <alert name="CannotResetSelectObjectsNoScripts"> <message name="message"> - 再設定を行うことができません。 -有効なスクリプトを持ったオブジェクトを -選択する。 + リセットできません。 +スクリプトが有効なオブジェクトを選択してください。 </message> </alert> <alert name="CannotResetSelectObjectsNoPermission"> <message name="message"> - 再設定を行うことができません。 -あなたが修正する許可のあるスクリプトを持ったオブジェクトを -選択する。 + リセットできません。 +自分にスクリプトの変更権限があるオブジェクトを選択してください。 </message> </alert> <alert name="CannotSetRunningSelectObjectsNoScripts"> <message name="message"> - 実行するようなどんなスクリプトも設定できない。 -有効なスクリプトを持ったオブジェクトを -選択する。 + スクリプトの実行を有効化できません。 +スクリプトが有効なオブジェクトを選択してください。 </message> </alert> <alert name="CannotSetRunningSelectObjectsNoPermission"> <message name="message"> - 実行するようなどんなスクリプトも設定できない。 -あなたが修正する許可のあるスクリプトを持ったオブジェクトを -選択する。 + スクリプトの実行を有効化できません。 +自分にスクリプトの変更権限があるオブジェクトを選択してください。 </message> </alert> <alert name="CannotSetRunningNotSelectObjectsNoScripts"> <message name="message"> - 実行しないようなどんなスクリプトも設定できない。 -有効なスクリプトを持ったオブジェクトを -選択する。 + スクリプトの実行を無効化できません。 +スクリプトが有効なオブジェクトを選択してください。 </message> </alert> <alert name="CannotSetRunningNotSelectObjectsNoPermission"> <message name="message"> - 実行しないようなどんなスクリプトも設定できない。 -あなたが修正する許可のあるスクリプトを持ったオブジェクトを -選択する。 + スクリプトの実行を無効化できません。 +自分にスクリプトの変更権限があるオブジェクトを選択してください。 </message> </alert> <alert name="NoFrontmostFloater"> <message name="message"> - 保存するためにのfrontmost フロータはない + 保存すべき最前面フローターがありません。 </message> </alert> <alert name="ColladaExportFailedUnknownServerError"> <message name="message"> - コライダのエクスポートに失敗した: 未知のサービスエラー + Colladaエクスポート失敗:原因不明のサーバーエラー </message> </alert> <alert name="ColladaExportFailedInvalidPermissions"> <message name="message"> - コライダのエクスポートに失敗した: 有効でない許可またはオブジェクトがロックされた。 + Colladaエクスポート失敗:権限無効またはオブジェクト・ロック! </message> </alert> <alert name="ColladaExportFailedUnknownError"> <message name="message"> - コライダのエクスポートに失敗した: 未知のエラー + Colladaエクスポート失敗:原因不明のエラー </message> </alert> <alert name="ObjectImportFailedTransfer"> <message name="message"> - オブジェクトのインポートに失敗しました。ファイルを転送することができなかった。 + オブジェクトのインポートに失敗しました。ファイルを転送できませんでした。 </message> </alert> <alert name="ObjectImportFailedBadFormat"> <message name="message"> - オブジェクトのインポートに失敗しました。 ファイルはSLObject フォーマットを受け入れません。 + オブジェクトのインポートに失敗しました。有効なSLObject形式のファイルではありません。 </message> </alert> <alert name="ObjectImportFailedUnknownError"> <message name="message"> - オブジェクトのインポートに失敗しました。 未知のエラー. + オブジェクトのインポートに失敗しました。未知のエラー。 </message> </alert> <alert name="CouldNotTeleportReason"> <message name="message"> - テレポートができませんでした。 + テレポートに失敗しました。 [REASON] </message> </alert> <alert name="CannotSetLandOwnerNothingSelected"> <message name="message"> - 土地所有者を設定することは不可能: -何も選択しませんでした。 + 土地所有者を設定できません: +何も選択されていません。 </message> </alert> <alert name="CannotSetLandOwnerMultipleRegions"> <message name="message"> - 土地の所有権を強制することができません。選択が複数の地域に渡るからです。 -より小さなエリアを選択し、再度試みてください。 + 複数の地域が選択されたため、土地の所有権を主張 +できません。 選択する面積を小さくして、もう一度試してください。 </message> </alert> <alert name="ForceOwnerAuctionWarning"> <message name="message"> - この区画はオークションにでます。所有権を強制することは -オークションを取消し、そして入札が始まった場合にはいくらかの居住者を -不幸にする可能性があります。所有権を強制しますか。 + この区画はオークションに出品されています。 区画の所有権を主張すると +オークションが無効になり、入札が開始していたら不満に思う +住人が出てくるかもしれません。 所有権を主張しますか? </message> <option name="Force"> - 強制 + フォース </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CannotContentifyNothingSelected"> <message name="message"> - コンテンツ化は不可能です。 -何も選択しませんでした。 + コンテンツ化できません: +何も選択されていません。 </message> </alert> <alert name="CannotContentifyNoRegion"> <message name="message"> - コンテンツ化は不可能です。 -地域は無し。 + コンテンツ化できません: +地域がありません。 </message> </alert> <alert name="CannotReleaseLandNothingSelected"> <message name="message"> - 土地を捨てることは不可能: -N何も選択しませんでした。 + 土地を破棄できません: +何も選択されていません。 </message> </alert> <alert name="CannotReleaseLandNoRegion"> <message name="message"> - 土地を捨てることは不可能: -地域を見つけることができません。 + 土地を破棄できません: +地域が見つかりません。 </message> </alert> <alert name="CannotBuyLandNothingSelected"> <message name="message"> - 土地を購入することは不可能: -何も選択しませんでした。 + 土地を購入できません: +何も選択されていません。 </message> </alert> <alert name="CannotBuyLandNoRegion"> <message name="message"> - 土地を購入することは不可能: -この土地がある地域を見つけることができません。 + 土地を購入できません: +この土地がある地域が見つかりません。 </message> </alert> <alert name="CannotDeedLandNothingSelected"> <message name="message"> - 土地を証書を作成して譲渡することは不可能: -何も選択しませんでした。 + 土地を譲渡できません: +何も選択されていません。 </message> </alert> <alert name="CannotDeedLandNoGroup"> <message name="message"> - 土地を証書を作成して譲渡することは不可能: -グループは無し。 + 土地を譲渡できません: +グループがありません。 </message> </alert> <alert name="CannotDeedLandNoRegion"> <message name="message"> - 土地を証書を作成して譲渡することは不能: -この土地がある地域を見つけることができません。 -この報告をするためにHelp -> Report Bugを使用してください。 + 土地を譲渡できません: +この土地がある地域が見つかりません。 +[ツール]>[バグを報告する]を使って報告してください。 </message> </alert> <alert name="CannotSetLandOwnerNothingSelected"> <message name="message"> - 土地所有者を設定することは不可能: -何も選択しませんでした。 + 土地所有者を設定できません: +何も選択されていません。 </message> </alert> <alert name="CannotBuyLandMultipleRegions"> <message name="message"> - 土地を購入することができません。選択が複数の地域に渡るからです。 -より小さなエリアを選択し、再度試みてください。 + 複数の地域が選択されたため、土地を購入できません。 +選択する面積を小さくしてもう一度試してください。 </message> </alert> <alert name="CannotBuyLandMultipleSelected"> <message name="message"> - 土地を購入することは不可能: -複数の異なった区画を選択しました。 -より小さなエリアを選択するよう試みます。 + 土地を購入できません: +複数の区画が選択されています。 +選択する面積を小さくしてください。 </message> </alert> <alert name="CannotDeedLandMultipleSelected"> <message name="message"> - 土地を証書を作成して譲渡することは不可能: -複数の異なった区画を選択しました。 -より小さなエリアを選択するよう試みます。 + 土地を譲渡できません: + +複数の異なった区画が選択されています。 +選択する面積を小さくしてください。 </message> </alert> <alert name="RegionNotFound"> @@ -1577,315 +1646,314 @@ N何も選択しませんでした。 </alert> <alert name="ParcelCanPlayMusic"> <message name="message"> - この場所はストリーミング音楽を演奏できます。 + ここではストリーミング・ミュージック再生が可能です。 -音楽は768 kbps を要求するかまたは より速い -Internet の接続が必要です。 + ミュージックの再生には768 kbpsより速い +接続環境が必要です。 -使用可能なときは音楽を演奏しますか。 +利用可能になったら再生しますか? </message> <option name="PlayMusic"> - 音楽を演奏 + 音楽を再生 </option> <option name="Disable"> - 不能 + 無効化 </option> </alert> <alert name="ParcelCanPlayMedia"> <message name="message"> - この場所はストリーミングビデオを上映できます。 + ここではストリーミング・ビデオ再生が可能です。 -ストリーミングビデオは768 kbps を要求するかまたは より速い -Internet の接続が必要です。 +ビデオの再生には768 kbps より速い +接続環境が必要です。 -使用可能なときはビデオを演奏しますか。 +使用可能になったら再生しますか? -(Preferences > Audio & Videoの所で -このオプションを後で変更できます。) +(このオプションは、[環境設定]>[音声とビデオ]を通じて +後からでも変更できます) </message> <option name="PlayMedia"> - メディアを上映 + メディアを再生 </option> <option name="Disable"> - 不能 + 無効化 </option> </alert> <alert name="CannotBuyLandWaitingForServer"> <message name="message"> - 土地を購入することは不可能: -W価格を報告するためのサーバーを待っています。 -数秒後に一度試みてください。 + 土地を購入できません: +サーバーからコストの報告を待っています。 +少ししてからもう一度試してください。 </message> </alert> <alert name="CannotDeedLandWaitingForServer"> <message name="message"> - 土地を証書を作成して譲渡することは不可能: -所有権を報告するためのサーバーを待っています。 -数秒後に一度試みてください。 + 土地を譲渡できません: +所有権に関するサーバーの報告を待っています。 +少ししてからもう一度試してください。 </message> </alert> <alert name="CannotBuyLandNoPublic"> <message name="message"> - 土地を購入することは不可能: -この選択はいかなる公共の土地も含んでいません。 + 土地を購入できません: +公共の土地が全く選択されていません。 </message> </alert> <alert name="CannotBuyLandLandOwned"> <message name="message"> - 土地を購入することは不可能: -他の使用者によって所有された土地が選択されています。 -より小さなエリアを選択するよう試みます。 + 土地を購入できません: +他の人所有の土地が選択されました。 +選択する面積を小さくしてください。 </message> </alert> <alert name="CannotButLandRegionNotFound"> <message name="message"> - 土地を購入することは不可能: -この土地がある地域を見つけることができません。 -この報告をするためにHelp -> Report Bugを使用してください。 + 土地を購入できません: +この土地がある地域が見つかりません。 +[ツール]>[バグを報告する]を使って報告してください。 </message> </alert> <alert name="CannotBuyLandNoTransfer"> <message name="message"> - 土地を購入することは不可能: -この地域[REGION]は、土地の転送を許されません。 + 土地を購入できません: +この [REGION] では土地の譲渡が許されていません。 </message> </alert> <alert name="CannotDeedLandNoTransfer"> <message name="message"> - 土地を証書を作成して譲渡することは不可能: -この地域[REGION]は、土地の転送を許されません。 + 土地を譲渡できません: +この地域 [REGION] では土地の譲渡が許されていません。 </message> </alert> <alert name="CannotBuyLandForGroupNotOfficer"> <message name="message"> - グループようの土地の購入が不可能: -現在のクループであなたはオフィサーではありません。 -Edit -> Groupsを使用して他のクループを起動してください... + このグループ用に土地を購入できません: +あなたはこのグループの役員ではありません。 +[編集]>[グループ...]を使って他のグループをアクティブにしてください。 </message> </alert> <alert name="CannotBuyLandInsufficientFunds"> <message name="message"> - 土地価格L$[PRICE]のこの [AREA] 平方メーターを買います。 -あんたはただ L$[BALANCE]を持っています。 + この[AREA]平方メートルの土地を購入するには、L$[PRICE]かかります。 +残金がL$[BALANCE]しかありません。 </message> </alert> <alert name="CannotReleaseLandNothingSelected"> <message name="message"> - 土地を捨てることは不可能: -N何も選択しませんでした。 + 土地を破棄できません: +何も選択されていません。 </message> </alert> <alert name="CannotReleaseLandWatingForServer"> <message name="message"> - 土地を捨てることは不可能: -価格を報告するためのサーバーを待っています。 -数秒後に一度試みてください。 + 土地を破棄できません: +サーバーからのコストの報告を待っています。 +少ししてからもう一度試してください。 </message> </alert> <alert name="CannotReleaseLandSelected"> <message name="message"> - 土地を捨てることは不可能: -複数の異なった区画を選択しました。 -より小さなエリアを選択するよう試みます。 + 土地を破棄できません: +複数の異なった区画が選択されています。 +選択する面積を小さくしてください。 </message> </alert> <alert name="CannotReleaseLandDontOwn"> <message name="message"> - 土地を捨てることができません: -この区画を解放する権限がありません。あなたの所有する区画は緑色で表されます。 + 土地を破棄できません: +あなたはこの土地を手放すことを許可されていません。 +あなたの区画は緑色で表示されています。 </message> </alert> <alert name="CannotReleaseLandRegionNotFound"> <message name="message"> - 土地を捨てることは不可能: -この土地がある地域を見つけることができません。 -この報告をするためにHelp -> Report Bugを使用してください。 + 土地を破棄できません: +この土地がある地域が見つかりません。 +[ツール]>[バグを報告する]を使ってバグを報告してください。 </message> </alert> <alert name="CannotReleaseLandNoTransfer"> <message name="message"> - 土地を捨てることは不可能: -この地域[REGION]は、土地の転送を許されません。 + 土地を破棄できません: +この [REGION] では土地の譲渡が許されていません。 </message> </alert> <alert name="CannotReleaseLandPartialSelection"> <message name="message"> - 土地を捨てることは不可能: -区画全体を選択するか、それを解放する必要があります。 -ダブルクリックを試みて、区画全体を選択するか、または -最初にあなたの区画を分割します。 + 土地を破棄できません: +この区画を手放すには、区画全域を選択します。 +ダブルクリックして区画全域を選択するか、 +最初に区画を分割してください。 </message> </alert> <alert name="ReleaseLandWarning"> <message name="message"> - あなたは [AREA] 平方メーターの土地を手放そうとしています。 -この区画の解放はあなたの土地 -保有からそれを取り除きますが、 -いくらかの金額L$でクレジットされません。 + あなたは [AREA] 平方メートルの土地を手放そうと +しています。あなたの所有地からこの区画分が +減りますが、お金(L$)は入りません。 -土地を解放しますか。 +この土地を手放しますか? </message> <option name="Release"> 解放 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CannotDivideLandNothingSelected"> <message name="message"> - 土地を分割することは不可能: -何も選択しませんでした。 + 土地を分割できません: +何も選択されていません。 </message> </alert> <alert name="CannotDivideLandPartialSelection"> <message name="message"> - 土地を分割することは不可能: -あなたは選択された全ての区画を持っています。 -クリックとドラッグによってより小さいエリアを選択するように -心がけます。 + 土地を分割できません: +1区画全域が選択されています。 +クリックとドラッグを使用して、選択する面積を +小さくしてください。 </message> </alert> <alert name="LandDivideWarning"> <message name="message"> - この土地を分割することは、この区画を2つに分割し、 -そして各区画はそれ自身の設定を保持することができます。 いくつかの設定は -オペレーションの後デフォルトで再設定されます。 + この土地を分割すると、2つの区画に別れます。 +区画ごとの設定が可能になります。 この操作を行うと、一部の設定がデフォルトにリセットされます。 -土地を分割しますか。 +土地の分割操作を続行しますか? </message> <option name="Divide"> - 分割 + 分割する </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="CannotDivideLandNoRegion"> <message name="message"> - 土地を分割することは不可能: -この土地がある地域を見つけることができません。 -の報告をするためにHelp -> Report Bugを使用してください。 + 土地を分割できません: +この土地がある地域が見つかりません。 +[ツール]>[バグを報告する]を使って報告してください。 </message> </alert> <alert name="CannotJoinLandNoRegion"> <message name="message"> - 土地を統合することが出来ませんでした: -この土地が存在する地域が見つかりません。ヘルプのバグを報告を利用して報告してください。 + 土地を統合できません: +この土地がある地域が見つかりません。 +[ツール]>[バグを報告する]を使って報告してください。 </message> </alert> <alert name="CannotJoinLandNothingSelected"> <message name="message"> - 土地に加わることは不可能: -何も選択しませんでした。 + 土地を統合できません: +何も選択されていません。 </message> </alert> <alert name="CannotJoinLandEntireParcelSelected"> <message name="message"> - 土地に加わることは不可能: -あなたは選択された全ての区画を持っています。 -クリックとドラッグによってより大きいエリアを -選択するように心がけます。 + 土地を統合できません: +1区画だけが選択されています。 +クリックとドラッグにより、選択する面積を +大きくしてください。 </message> </alert> <alert name="CannotJoinLandSelection"> <message name="message"> - 土地に加わることは不可能: -一つ以上の区画を選択する必要があります。 -クリックとドラッグによってより大きいエリアを -選択するように心がけます。 + 土地を統合できません: +複数の区画を選択してください。 +クリックとドラッグで、選択する面積を +大きくしてください。 </message> </alert> <alert name="JoinLandWarning"> <message name="message"> - この土地に加わるには、選択された長方形に交差する全ての区画の外の -一つの大きな区画を生成します。 - -あなたは、新しい区画 -の名前とオプションを再設定する必要があります。 - -土地に加わりますか。 + この土地を統合すると、選択された長方形に交差する全ての区画を基にして1つの大きな区画が作成されます。 + +新しい区画の名前とオプションを再設定する必要があります。 + + +土地を統合しますか? </message> <option name="Join"> 参加 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmNotecardSave"> <message name="message"> - This notecard needs to be saved before the item can be copied or viewed. Save notecard? + このアイテムをコピー、表示する前に、ノートカードの保存が必要です。 保存しますか? </message> <option name="Save"> 保存 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmLandmarkCopy"> <message name="message"> - あなたの在庫目録にこの項目をコピーする。 + このアイテムをあなたの持ち物にコピーしますか? </message> <option name="Copy"> コピー </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmItemCopy"> <message name="message"> - あなたの在庫目録にこの項目をコピーする。 + このアイテムをあなたの持ち物にコピーしますか? </message> <option name="Copy"> コピー </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ResolutionSwitchFail"> <message name="message"> - ソリューションを [RESY]で[RESX]に交換することに失敗した + 解像度を [RESX]x[RESY]に切り替えることができませんでした。 </message> </alert> <alert name="ErrorUndefinedGrasses"> <message name="message"> - エラー: 未定義の草: [SPECIES] + エラー:未定義の植物:[SPECIES] </message> </alert> <alert name="ErrorUndefinedTrees"> <message name="message"> - エラー: 未定義の草: [SPECIES] + エラー:未定義の樹木:[SPECIES] </message> </alert> <alert name="CannotSaveWearableOutOfSpace"> <message name="message"> - 衣類のファイルにを保存することが不可能です。 -あなたのコンピュータのいくつかのスペースを解放する必要があり、 -そしてもう一度衣類を保存してください。 + '[NAME]'を服のファイルに保存できません。 コンピューターの +ディスクスペースを少し増やしてから、もう一度 +保存してみてください。 </message> </alert> <alert name="CannotSaveToAssetStore"> <message name="message"> - 中央資産格納庫に[NAME]の保存が不可能です。 -これは通常一時的な故障です。 -カスタマイズして、そして数分後もう一度衣類を保存してください。 -この問題が続く場合には、 -プルダウンメニューをクリックし -そしてあなたのネットワーク設定について詳細を提供してください。 + [NAME] を中央資産格納庫に保存できません。 +通常、これは一時的な不具合です。 服を +カスタマイズし、数分後にもう一度保存 +してください。 この問題が続くようなら、[ツール]> +[バグを報告する]をクリックし、お使いの +ネットワーク設定の詳細を報告してください。 </message> </alert> <alert name="AppEarlyExit"> <message name="message"> [MESSAGE] -この問題から回復することができません。 -もう一度試みる前にアンインストールし、そしてインストールしてください。 -問題が続く場合には、以下でTech Support FAQをチェック: -www.secondlife.com/support. +この問題から正常復帰することができません。 +いったんアンインストールしてから再インストールした後、もう一度試してください。 +この問題を解決できない場合は、Tech SupportFAQ( +www.secondlife.com/support)を参照してください。 </message> <option name="Quit"> 終了 @@ -1893,128 +1961,147 @@ www.secondlife.com/support. </alert> <alert name="YouHaveBeenLoggedOut"> <message name="message"> - [SECOND_LIFE]をログアウト: + あなたは[SECOND_LIFE]からログアウトされました: [MESSAGE] -存在するIM とチャットをみるためにContinueをクリックします。 -他のオペレーションを行うことはできません。 -即座に[SECOND_LIFE] をでるにはQuitをクリックします。 +[続行]をクリックすると現在あるIM とチャットを見られます。 +これ以外の操作はできません。 +[終了]をクリックして、すぐに [SECOND_LIFE] から退出してください。 </message> <option name="Continue"> - 継続 + 続行 </option> <option name="Quit"> 終了 </option> </alert> + <alert name="SelectSingleRate"> + <message name="message"> + 評価対象の単一のオブジェクトを選択 + </message> + <option name="OK"> + OK + </option> + </alert> <alert name="OnlyOfficerCanBuyLand"> <message name="message"> - グループ用の土地の購入ができません: -活動グループのための土地を購入する権限がありません。Edit→Groupsを使用して、他のグループを起動してください。 + このグループ用に土地を購入できません: +あなたはこのグループ用の土地購入を許可されていません。 +[編集]>[グループ...]を使って他のグループをアクティブにしてください。 </message> </alert> <alert name="AddFriend" title="フレンドを追加"> <message name="message"> - Friends can give permissions to -track each other on the map and -receive online status updates. + フレンド同士は、 +地図上で互いを追跡し、 +オンライン・ステータスの更新情報を受信する権限を与え合うことができます。 -Offer friendship to [NAME]? +[NAME]にフレンドシップを贈りますか? </message> <option name="Offer"> - 申し出る + 贈る </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="RemoveFromFriends"> <message name="message"> - あなたはあなたの友達から[FIRST_NAME] [LAST_NAME]を取り除きたいですか。 + [FIRST_NAME][LAST_NAME]をフレンド・リストから削除しますか? </message> <option name="Remove"> - 取り除く + 削除 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="RemoveMultipleFromFriends"> <message name="message"> - Do you want to remove multiple friends from your friends list? + フレンド・リストから複数のフレンドを削除しますか? </message> <option name="Remove"> - 取り除く + 削除 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GodDeleteAllScriptedPublicObjectsByUser"> <message name="message"> - このシムの他の全ての土地において、**[AVATAR_NAME]**所有のスクリプトを含むオブジェクトを、本当に全部削除してもよいですか? + **[AVATAR_NAME]** + +所有のすべてのスクリプト・オブジェクトをこのシム内の他のすべての土地から削除しようとしています。操作を続行しますか? </message> <option name="DELETE!!"> - 削除!! + 削除!! </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GodDeleteAllScriptedObjectsByUser"> <message name="message"> - このシムの全ての土地において、**[AVATAR_NAME]**所有のスクリプトを含むオブジェクトを、本当に全部削除してもよいですか? + **[AVATAR_NAME]** + +所有のすべてのスクリプト・オブジェクトをこのシムのすべての土地から削除しようとしています。操作を続行しますか? </message> <option name="!!DELETEALL!!"> - !!全て削除!! + !!全て削除!! </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GodDeleteAllObjectsByUser"> <message name="message"> - このシムの全ての土地において、**[AVATAR_NAME]**所有のオブジェクト(スクリプトを含む、または無し)を、本当に全部削除してもよいですか? + **[AVATAR_NAME]** + +所有のすべてのオブジェクト(スクリプト・オブジェクトと非スクリプト・オブジェクト)をこのシムのすべての土地から削除しようとしています。操作を続行しますか? </message> <option name="!!DELETEALL!!"> - !!全て削除!! + !!全て削除!! </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="PublishGroupInfoToWeb"> <message name="message"> - ウェブ上で公開' オプションを選択した場合、[SECOND_LIFE]Webサイトにて、グループ名、記章、特権、タイトル、創立者を公開できるようになります。上記内容がコミュニティ・スタンダードにおいて成人向けコンテンツと判断されるかどうかの責任はあなたにあります。 + [ウェブ上で公開]オプションを選択すると、 +[SECOND_LIFE]ウェブ・サイト上でグループ名、記章、特権、タイトル、および創立者を公開できます。 上記のコンテンツがコミュニティ・スタンダード +において成人向けコンテンツと判断されるかどうかについては、 +あなた自身がそれを明記しなければなりません。 </message> </alert> <alert name="ErrorEncodingSnapshot"> <message name="message"> - エラー暗号化スナップショット! + スナップショットのエンコード・エラー! </message> </alert> <alert name="BlankClassifiedName"> <message name="message"> - あなたの分類のために空白でない名前を指定する必要があります。 + クラシファイド広告には名前の記入が必要です。 </message> </alert> <alert name="MinClassifiedPrice"> <message name="message"> - 指定の支払い金額は少なくともL$[MIN_PRICE]です。 -もっと高い金額を入力してください。 + 広告料の支払い金額は、Lと[MIN_PRICE]が下限です。 + +金額を増やしてください。 </message> </alert> <alert name="CantLoadVertexShaders"> <message name="message"> - Vertex Shadersをロードすることが不可能です。 + 頂点シェーダーをロードできません。 </message> </alert> <alert name="ConfirmObjectDeleteLock"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2025,9 +2112,9 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteNoCopy"> <message name="message"> - すくなくとも一つのオブジェクトはコピーが可能ではありません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、コピーできないものが少なくとも1つあります。。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2038,9 +2125,9 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteNoOwn"> <message name="message"> - あなたは特に一つのオブジェクトも所有していません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 少なくとも1つ所有していないオブジェクトがあります。 +けれどもこの選択を削除できます。 +これらのアイテムを削除しますか? </message> <option name="Yes"> はい @@ -2051,10 +2138,10 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteLockNoCopy"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -すくなくとも一つのオブジェクトはコピーが可能ではありません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +また、コピーできないオブジェクトが少なくとも1つあります。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2065,10 +2152,10 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteLockNoOwn"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -あなたは特に一つのオブジェクトも所有していません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +また、あなたの所有物ではないオブジェクトが少なくとも1つあります。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2079,10 +2166,10 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteNoCopyNoOwn"> <message name="message"> - すくなくとも一つのオブジェクトはコピーが可能ではありません。 -あなたは特に一つのオブジェクトも所有していません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、コピーできないものが少なくとも1つあります。。 +また、あなたの所有物ではないオブジェクトが少なくとも1つあります。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2093,11 +2180,11 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectDeleteLockNoCopyNoOwn"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -すくなくとも一つのオブジェクトはコピーが可能ではありません。 -あなたは特に一つのオブジェクトも所有していません。 -しかし、あなたはまだ現行の選択を削除できます。 -これらの項目を削除することを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +また、コピーできないオブジェクトが少なくとも1つあります。 +さらに、あなたの所有物ではないオブジェクトが少なくとも1つあります。 +このまま選択内容を削除することも可能です。 +これらのアイテムの削除を続行しますか? </message> <option name="Yes"> はい @@ -2108,9 +2195,9 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectTakeLock"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -しかし、あなたはまだ現行の選択を得ることができます。 -これらの項目を得ることを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +このまま選択内容を取得することも可能です。 +これらのアイテムの取得を続行しますか? </message> <option name="Yes"> はい @@ -2121,12 +2208,12 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectTakeNoOwn"> <message name="message"> - あなたは得ているオブジェクトの全てを所有していません。 -もし継続する場合には, 次の所有者の許可は、オブジェクトに適用され、 -そして将来それらを変更またはコピーするためのあなたの能力を -ことによると限定します。 -しかし、あなたはまだ現行の選択を得ることができます。 -これらの項目を得ることを確かに望んでいますか。 + 取ろうとするオブジェクトは、すべてあなたの物ではありません。 +このまま続けると、次の所有者の許可が オブジェクトに +適用され、将来あなたが修正、コピー +する際、制限を受けるかもしれません。 +ただし、この選択で実行は可能です。 +これらのアイテムを取りますか? </message> <option name="Yes"> はい @@ -2137,13 +2224,13 @@ Offer friendship to [NAME]? </alert> <alert name="ConfirmObjectTakeLockNoOwn"> <message name="message"> - すくなくとも一つのオブジェクトはロックされます。 -あなたが得ているオブジェクトの全てを所有していません。 -もし継続する場合には, 次の所有者の許可は、オブジェクトに適用 -能力をことによると限定します。 -され、そして将来それらを変更またはコピーするためのあなたの -しかし、あなたはまだ現行の選択を得ることができます。 -これらの項目を得ることを確かに望んでいますか。 + 選択内容に含まれているオブジェクトのうち、ロックされているものが少なくとも1つあります。 +取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。 +この選択内容をそのまま取得することは可能ですが、あなたの所有物ではないオブジェクトを取得すると、 +次のオーナーの権限がそのオブジェクトに適用されます。 +このため、 +将来、変更やコピーの能力が制限される可能性があります。 +これらのアイテムの取得を続行しますか? </message> <option name="Yes"> はい @@ -2154,76 +2241,70 @@ Offer friendship to [NAME]? </alert> <alert name="CantBuyLandAcrossMultipleRegions"> <message name="message"> - 土地を購入することができません。選択が複数の地域に渡るからです。 -より小さなエリアを選択し、再度試みてください。 + 複数の地域が選択されたため、土地を購入できません。 +選択する面積を小さくしてもう一度試してください。 </message> </alert> <alert name="DeedLandToGroup"> <message name="message"> - この区画を証書を作成して譲渡することで、このグループはクレジットを使用して十分な土地を保持し、維持することを -要求されます。 + この区画の譲渡に際しては、このグループが十分な土地クレジットを保有および維持することが必要条件となります。 -その土地の購入価格は、所有者その土地の購入価格は、所有者 -には返金されません。 もし譲渡された区画が、売却される場合には、その売却 -価格は、グループメンバーの間で均等に分配されます。 +土地の購入価格は、オーナーに +返金されません。 譲渡された区画が売れると、販売価格はグループ・メンバーに均等に割り振られます。 -このクループへ土地のこの[AREA] 平方メーターを証書を作成して譲渡しますか。 -[GROUP_NAME]? +この[AREA]平方メートルの土地をグループ[GROUP_NAME]に譲渡しますか? </message> <option name="Deed"> - 譲渡する + 譲渡 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="DeedLandToGroupWithContribution"> <message name="message"> - この区画を証書を作成して譲渡することで、このグループはクレジットを使用して十分な土地を保持し、維持することを -要求されます。 + この区画の譲渡に際しては、このグループが十分な土地クレジットを保有および維持することが必要条件となります。 -この譲渡は、[FIRST_NAME] [LAST_NAME]からそのグループへの同時に起こる土地 -の寄贈を含みます。 +この譲渡により、[FIRST_NAME][LAST_NAME]からグループに対して土地が同時に提供されます。 -Tその土地の購入価格は、所有者には返金されません。 -もし譲渡された区画が、売却される場合には、その売却 -価格は、グループメンバーの間で均等に分配されます。 +土地の購入価格は、オーナーに +返金されません。 譲渡された区画が売れると、販売価格はグループ・メンバーに均等に割り振られます。 -このクループへ土地のこの[AREA] 平方メーターを証書を作成して譲渡しますか。 -[GROUP_NAME] +この[AREA]平方メートルの土地をグループ[GROUP_NAME]に譲渡しますか? </message> <option name="Deed"> - 譲渡する + 譲渡 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="DisplaySetToSafe"> <message name="message"> - 表示設定は、あなたが安全オプションを指定したので -安全レベルに設定されました。 + -safeオプションを指定したので、 +表示設定はセーフ・レベルに設定されています。 </message> </alert> <alert name="DisplaySetToRecommended"> <message name="message"> - ディスプレイ設定は、あなたのシステム構成に基づいて推奨されたレベルに設定されています。 + 表示設定は、あなたのシステム構成に +基づいて推奨されたレベルに設定されています。 </message> </alert> <alert name="UnableToConnect"> <message name="message"> サーバーに接続できません。 -ドメイン名を依頼できませんでした: [HOST_NAME] +ドメイン名[HOST_NAME]をリクエストできませんでした。 </message> </alert> <alert name="CanNotFindServer"> <message name="message"> - このサーバードメイン名をみつけることが不可能です。 -これはネットワーク接続を失ったか -またはサーバーの問題で起こる結果の可能性があります。 + サーバーのドメイン名が見つかりません。 +ネットワーク接続が失われたか、サーバーに問題が +あります。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -2240,10 +2321,10 @@ Helpをクリックしてください。 </alert> <alert name="SystemMayBeDown"> <message name="message"> - SECOND_LIFE]に接続できません -このシステムはダウンしている可能性があります。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください + [SECOND_LIFE]に接続できません。 +システムがダウンしている可能性があります。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -2259,48 +2340,47 @@ Helpをクリックしてください </alert> <alert name="AvatarMoved"> <message name="message"> - Your [TYPE] location is not currently available. + あなたの [TYPE] のロケーションは現在使用不可能です。 [HELP] -You have been moved into a nearby region. +あなたは近くの地域に移されました。 </message> </alert> <alert name="ClothingLoading"> <message name="message"> - あなたの衣類はまだダウンロードしています。 -あなたは世界を普通に使用でき、そして他の使用者は -現在のあなたを見ます。 + あなたの服をダウンロード中です。 +通常どおりに世界を使え、他のユーザーもあなたを +正常に見ることができます。 </message> </alert> <alert name="FirstRun"> <message name="message"> - [SECOND_LIFE] のインストールは完了しました。 - -これはあなたが最初に[SECOND_LIFE]使用する場合に、 -あなたがロクオンする前にアカウント生成する必要があります。. + [SECOND_LIFE] のインストールが完了しました。 -新しいアカウントを作成するために www.secondlife.com に戻りますか。 +[SECOND_LIFE]の使用が初めての方は、ログイン前に +アカウントの作成が必要です。 +www.secondlife.comに戻って新規アカウントの作成を行いますか? </message> <option name="NewAccount..."> - 新しいアカウント... + 新規アカウント... </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="SetByHostFail"> <message name="message"> サーバーに接続できません。 -ドメイン名を解明できませんでした: [HOST_NAME] -あなたのネットワーク接続をチェックしてください。 +ドメイン名を確認できませんでした。 [HOST_NAME] +ネットワーク接続を確認してください。 </message> </alert> <alert name="LoginPacketNeverReceived"> <message name="message"> - 接続は不可能です。ロクインのパケットは -ロクインサーバーによって受け取られませんでした。 + 接続できません。 ログインパケットがログインサーバーに +到達しませんでした。 -数秒後にもう一度試みるか、または助言をえるそしてシステムステータスウェブページへのリンクのために -Helpをクリックしてください。 +数分後にもう一度試すか、[ヘルプ]とシステムステータス・ウェブ・ページへの +リンクをクリックしてください。 </message> <option name="OK"> OK @@ -2311,17 +2391,25 @@ Helpをクリックしてください。 </alert> <alert name="WelcomeNoClothes"> <message name="message"> - あなたのキャラクターは、まもなく表示されます。 -矢印キーを使用して歩きます。 -ヘルプ、または[SECOND_LIFE]に関して学ぶ場合は、いつでもF1キーを押してください。 + まもなくあなたのアバターが表示されます。 + +矢印キーを使うと歩くことができます。 + +ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、 +いつでも F1 キーを押してください。 </message> </alert> <alert name="WelcomeChooseSex"> <message name="message"> - あなたのキャラクターは、まもなく表示されます。 -矢印キーを使用して歩きます。 -ヘルプ、または[SECOND_LIFE]に関して学ぶ場合は、いつでもF1キーを押してください。 -男性あるいは女性のキャラクターを選択してください。あなたの決定は後で変更可能です。 + まもなくあなたのアバターが表示されます。 + +矢印キーを使うと歩くことができます。 + +ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、 +いつでも F1 キーを押してください。 + +アバターの性別を選んでください。 +これは後から変えることもできます。 </message> <option name="Male"> 男性 @@ -2332,139 +2420,149 @@ Helpをクリックしてください。 </alert> <alert name="NotEnoughCurrency"> <message name="message"> - [NAME] L$ [PRICE] それをするのは十分な金額をもっていません。 + [NAME] L$ [PRICE] 残金が足りません。 </message> </alert> <alert name="GrantedModifyRights"> <message name="message"> - You have been granted the privilege to modify [FIRST_NAME] [LAST_NAME]'s objects. + あなたには、 [FIRST_NAME] [LAST_NAME]のオブジェクトを修正する特権が与えられています。 </message> </alert> <alert name="RevokedModifyRights"> <message name="message"> - Your privilege to modify [FIRST_NAME] [LAST_NAME]'s objects has been revoked + [FIRST_NAME] [LAST_NAME]のオブジェクトを修正する特権が取り消されました。 </message> </alert> <alert name="FlushMapVisibilityCaches"> <message name="message"> - この地域の地図のキャッシュを消去します。実際にはデバッグを行う時のみ有用なオプションです。 (プロダクションには、5分程度待つと、再度ログイン後に、全員の地図が更新されます) + この手順は、この地域の地図のキャッシュを消去します。 + +これが便利なのはデバッグ時のみです。 + +(作成中は5分間経つと、全員の地図が再度 +ログイン後に更新されます) </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="OnlyCopyContentsOfSingleItem"> <message name="message"> - 一度に一つ以上のコンテンツをコピーすることはできません。単一オブジェクトを選択し、再度、試みてください。 + 一度に複数のアイテムのコンテンツはコピーできません。 +選択するオブジェクトを1つだけにして、もう一度試してください。 </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="KickUsersFromRegion"> <message name="message"> - 本地域の全てのユーザーをホームにテレポートしますか? + 地域のユーザー全員をホームにテレポートしますか? </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnScriptedOnOthersLand"> <message name="message"> - **[USER_NAME]**所有の土地で、彼/彼女の全てのスクリプトを含むオブジェクトを、本当に返却してもよいですか? + **[USER_NAME]**が所有する土地以外のすべての土地にある彼/彼女が所有しているすべてのスクリプト・オブジェクトを返却してもいいですか? </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnScriptedOnAllLand"> <message name="message"> - この地域の他の全ての土地において、**[AVATAR_NAME]**所有のスクリプトを含むオブジェクトを、本当に全部返却してもよいですか? + **[USER_NAME]** +所有のすべてのスクリプト・オブジェクトをこの地域内のすべての土地から削除しようとしています。操作を続行しますか? </message> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="InvalidTerrainBitDepth"> <message name="message"> - Couldn't set region textures: - -Terrain texture [TEXTURE_NUM] has an invalid bit depth of [TEXTURE_BIT_DEPTH]. + 地域テクスチャーの設定に失敗しました: + +地形テクスチャー[TEXTURE_NUM]のビット深度[TEXTURE_BIT_DEPTH]は無効です。 -Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image -then click "Set" again. +テクスチャー[TEXTURE_NUM]を24ビット512X512以下のイメージと交換し、 +「設定」を再度クリックしてください。 </message> </alert> <alert name="InvalidTerrainSize"> <message name="message"> - Couldn't set region textures: - -Terrain texture [TEXTURE_NUM] is too large at [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]. + 地域テクスチャーの設定に失敗しました: + +地形テクスチャー[TEXTURE_NUM]のサイズ[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]は上限を超えています。 -Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image -then click "Set" again. +テクスチャー[TEXTURE_NUM]を24ビット512X512以下のイメージと交換し、 +[設定]を再度クリックしてください。 </message> </alert> <alert name="RawUploadStarted"> <message name="message"> - アップロードが開始されました。あなたの接続速度により、2分程度かかることがあります。 + アップロード開始。 接続速度によっては、 +最大2分間かかります。 </message> </alert> <alert name="ConfirmBakeTerrain"> <message name="message"> - 現在の領域を上昇/下降させる境界の中間点にベークし、『復帰』ツールのデフォルトにしますか? + 現在の地形を構築しようとしています。 +この操作を行うと、現在の地形が上昇/下降の制限範囲の中心になり、「復帰」ツールのデフォルトになります。 +操作を続行しますか? </message> <option name="Bake"> - ベークする + 構築する </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="MaxAllowedAgentOnRegion"> <message name="message"> - [MAX_AGENTS]許可居住人のみ使用可能です + 住人は、最大 [MAX_AGENTS] 人まで抱えることができます。 </message> </alert> <alert name="MaxAllowedGroupsOnRegion"> <message name="message"> - [MAX_GROUPS]許可グループのみ使用可能です + グループは、最大[MAX_GROUPS]個まで抱えることができます。 </message> <option name="Bake"> - ベークする + 構築する </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="MaxBannedAgentsOnRegion"> <message name="message"> - [MAX_BANNED]禁止居住者のみ使用可能です + 禁止された住人は、最大 [MAX_BANNED] 人まで抱えることができます。 </message> </alert> <alert name="MaxManagersOnRegion"> <message name="message"> - [MAX_MANAGER]禁止居住者のみ使用可能です + 禁止された住人は、[MAX_MANAGER] 人までしか抱えることができません。 </message> </alert> <alert name="OwnerCanNotBeDenied"> <message name="message"> - 不動産オーナーを不動産『アクセス拒否』リストに追加できません。 + 不動産オーナーを不動産の「アクセス拒否」リストに追加できません。 </message> </alert> <alert name="CanNotChangeAppearanceUntilLoaded"> @@ -2474,22 +2572,27 @@ then click "Set" again. </alert> <alert name="ClassifiedMustBeAlphanumeric"> <message name="message"> - クラシファイドの名前は、AからZの文字、または、数字で始める必要があります。句読点からは始められません。 + クラシファイド広告の名前は、アルファベットか +数字で始めます。 句読点では始められません。 </message> </alert> <alert name="CantSetBuyObject"> <message name="message"> - オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。 販売対象のオブジェクトを設定し、再度試みてください。 + オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。 +販売対象のオブジェクトを設定し、もう一度試してください。 </message> </alert> <alert name="FinishedRawDownload"> <message name="message"> - [DOWNLOAD_PATH]への、 未加工の領域ファイルのダウンロードが終了しました。 + 未加工の地形ファイルを +[DOWNLOAD_PATH]にダウンロードしました。 </message> </alert> <alert name="DownloadWindowsMandatory"> <message name="message"> - [SECOND_LIFE]の新しいバージョンが使用可能です。 [MESSAGE] このシステムを使用するために、アップデートをダウンロードする必要があります。 + [SECOND_LIFE]の新しいバージョンが使用可能です。 +[MESSAGE] +システムを使用するには、このアップデートをダウンロードする必要があります。 </message> <option name="Download"> ダウンロード @@ -2500,38 +2603,40 @@ then click "Set" again. </alert> <alert name="DownloadWindows"> <message name="message"> - [SECOND_LIFE]のアップデートバージョンが使用可能です。 + [SECOND_LIFE]のアップデート・バージョンが利用可能です。 [MESSAGE] -このアップデートは必須ではありませんが、性能と安定性を向上させるために、インストールする事をお勧めします。 + +このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。 </message> <option name="Download"> ダウンロード </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="DownloadWindowsReleaseForDownload"> <message name="message"> - [SECOND_LIFE]のアップデートバージョンが使用可能です。 + [SECOND_LIFE]のアップデート・バージョンが利用可能です。 [MESSAGE] -このアップデートは必須ではありませんが、性能と安定性を向上させるために、インストールする事をお勧めします。 + +このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。 </message> <option name="Download"> ダウンロード </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="DownloadMacMandatory"> <message name="message"> - A new version of [SECOND_LIFE] is available. + [SECOND_LIFE]の新しいバージョンが利用可能です。 [MESSAGE] -You must download this update to use the system. +システムを使用するには、このアップデートをダウンロードする必要があります。 -Download to your Applications folder? +アプリケーション・フォルダにダウンロードしますか? </message> <option name="Download"> ダウンロード @@ -2542,248 +2647,242 @@ Download to your Applications folder? </alert> <alert name="DownloadMac"> <message name="message"> - [SECOND_LIFE]のアップデートバージョンが使用可能です。 + [SECOND_LIFE]のアップデート・バージョンが利用可能です。 [MESSAGE] -このアップデートは必須ではありませんが、性能と安定性を向上させるために、インストールする事をお勧めします。 -アプリケーション・フォルダーにダウンロードしますか? + +このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。 + +アプリケーション・フォルダにダウンロードしますか? </message> <option name="Download"> ダウンロード </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="DownloadMacReleaseForDownload"> <message name="message"> - [SECOND_LIFE]のアップデートバージョンが使用可能です。 + [SECOND_LIFE]のアップデート・バージョンが利用可能です。 [MESSAGE] -このアップデートは必須ではありませんが、性能と安定性を向上させるために、インストールする事をお勧めします。 -アプリケーション・フォルダーにダウンロードしますか? + +このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。 + +アプリケーション・フォルダにダウンロードしますか? </message> <option name="Download"> ダウンロード </option> <option name="Continue"> - 継続 + 続行 </option> </alert> <alert name="DeedObjectToGroup"> <message name="message"> - このオブジェクトを譲渡することはグループとって以下の原因になります: -* オブジェクトへの支払いの金銭を受け取ります + このオブジェクトを譲渡すると、グループは +*オブジェクトに支払われた金額を受領します。 </message> + <ignore name="ignore"> + オブジェクトをグループに譲渡するとき + </ignore> <option name="Deed"> - 譲渡する + 譲渡 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="AddClassified"> <message name="message"> - 案内広告は、;一週間のディレクトリーを見つけるの -部分に現れます。 - -あなたの広告を見つけるには、Publish...をクリックし、 -ディレクトリーにそれを追加します。 - -Publishをクリックする時支払いをする金額を尋ねられます。 -より多く支払うことは、リスト内であなたの広告がより高い位置に表示され、そして -キーワードで検索した時にもより高い頻度で現れます。 - </message> + クラシファイド広告は、 +検索ディレクトリのクラシファイド・セクションに +1週間掲示されます。 +広告を記入後、[発行]をクリックし、 +ディレクトリ +に追加します。 [発行]をクリックするすると、料金の支払いが要求されます。 +支払い額が大きいほど、広告がリスト内で上位に表示され、 +キーワードで検索されたときも上位に表示されます。 + </message> + <ignore name="ignore"> + 新しいクラシファイド広告を加えるとき + </ignore> <option name="OK"> OK </option> <option name="Cancel"> - 取消 - </option> - </alert> - <alert name="WebLaunchGraphicsDriver"> - <message name="message"> - このコンピュータに搭載の[VENDOR_LABLE][CARD_NAME]グラフィック・ドライバーは旧式です。 -これはあなたのグラフィック・カードを制御するソフトウェアの一つです。古いドライバーは[SECOND_LIFE]のような3Dグラフィック・プログラムでの動作の遅延やクラッシュの原因になる可能性があります。 -[VENDOR_LABLE] から無料でダウンロードできる[DRIVER_NAME]ドライバーへのアップグレードを強く推奨します。[SECOND_LIFE]のドライバーWebページに移行しますか? - </message> - <option name="Gotopage"> - ページに行く - </option> - <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="WebLaunchGraphicsDriverIntelExtreme"> - <message name="message"> - このコンピュータのあなたの Intel Extreme グラフィックドライバーは旧式です。 - -これはあなたのグラフィックカードを制御するソフトウェアの一つです。 -古いドライバーは[SECOND_LIFE]のような3Dグラフィックプログラムでゆっくり作動したり、またはチャッシュの原因になる可能性があります。 - -最も最新のドライバーにアップグレードすることを強く推奨します、Intelから無料のダウンロードが使用可能です。 - -[SECOND_LIFE] ドライバーウェブページに行きたいですか。? - </message> - <option name="Gotopage"> - ページに行く - </option> - <option name="Cancel"> - 取消 - </option> - </alert> - <alert name="RunningInPCI"> - <message name="message"> - GL は、このシステム上のこのグラフィックドライバが、グラフィックを描くよりゆっくりした方法であるPCI -モードで作動していることを示しています。 あなたがPCIビデオカードを使用している場合には -このメッセージを無視できます。 あなたがAGPビデオカードを使用している場合には、このアプリケーションそして -3Dアプリケーションでの向上した性能のためにあなたのマザーボードドライバをアップデートする -必要があります。 PCI Express グラフィックスカードを使用している場合には、[SECOND_LIFE]内の参照のオプションパネルから -AGP Graphics Accelerationを可能にできます。 - </message> - </alert> <alert name="WebLaunchJoinNow"> <message name="message"> - あなたのアカウントを管理するために www.secondlife.com に行きますか。 + www.secondlife.comに移動してアカウントを管理しますか? </message> + <ignore name="ignore"> + 口座を管理するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchForums"> <message name="message"> - 最新のヒントおよびトリックは、[SECOND_LIFE]の知識ベースを検索してください。 + 最新のヒントおよびトリックについては、[SECOND_LIFE]の知識ベースを検索してください。 </message> + <ignore name="ignore"> + 知識ベースを表示するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchSupport"> <message name="message"> - Contact [SECOND_LIFE] Support. + [SECOND_LIFE]サポートにコンタクト </message> + <ignore name="ignore"> + サポートに連絡するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchSupportWiki"> <message name="message"> - 公式のLindenブログで、最新のニュースや情報を入手してください。 + Linden公式ブログで、最新のニュースや情報を入手してください。 </message> + <ignore name="ignore"> + ブログを表示するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchLSLGuide"> <message name="message"> - スクリプトによるヘルプのためにLSL ガイドに行きますか。 + LSLガイドを開いてスクリプトのヘルプを参照しますか? </message> + <ignore name="ignore"> + LSLガイドを表示するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchLSLWiki"> <message name="message"> - スクリプトによるヘルプのためにLSL Wikiに行きますか。 + LSLポータルを開いてスクリプトのヘルプを参照しますか? </message> + <ignore name="ignore"> + LSLポータルを表示するために、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="WebLaunchReleaseNotes"> <message name="message"> - [SECOND_LIFE]のリリースノートを閲覧しますか? + [SECOND_LIFE] のリリースノートを表示しますか? </message> + <ignore name="ignore"> + リリースノートを表示するため、ウェブ・ブラウザーを起動するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ReturnToOwner"> <message name="message"> - オブジェクトをそれらの所有者に戻すことを確かに望んでいますか。 -選択された 譲渡可能な証書を作成して譲渡された -オブジェクトはそれらの以前の所有者に戻されます。 -(返還された全てにオブジェクトは、それらが最後にあったフォールダに戻されます。.) - -*警告* 譲渡不可能な証書を作成して譲渡されたオブジェクトは削除されます。 + 選択したオブジェクトをオーナーに返却しようとしています。 +操作を続行しますか? 譲渡された譲渡可能オブジェクトは以前のオーナーに返却されます。 +(返却したオブジェクトは、それらが譲渡前に格納されていたフォルダに戻されます)。 +*警告* 譲渡不可能なオブジェクトは削除されます。 </message> + <ignore name="ignore"> + オブジェクトを持ち主に返却するとき + </ignore> <option name="Return"> - 戻る + 返却 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ViewReleaseNotes"> <message name="message"> - Second Lifeのリリースノートを閲覧しますか? + Second Lifeのリリースノートを表示しますか? </message> + <ignore name="ignore"> + リリースノートを表示するとき + </ignore> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GroupLeaveConfirmOfficer"> <message name="message"> - あなたは現在このグループ[GROUP]のオフィサーです。 -グループを去りますか。 + 現在あなたは [GROUP]のオフィサーです。 +ここから抜けますか? </message> <option name="Leave"> - 去る + 立ち去る </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="GroupLeaveConfirmMember"> <message name="message"> - あなたは現在このグループ[GROUP]のメンバーです。 -グループを去りますか。 + 現在あなたは [GROUP]のメンバーです。 +ここから抜けますか? </message> <option name="Leave"> - 去る + 立ち去る </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmKick"> <message name="message"> - 全ての使用者をグリッドから追い出すことを本当に望んでいるのですか。 + すべてのユーザーをグリッド外にキックしようとしています。操作を続行しますか? </message> </alert> <alert name="MuteLinden"> <message name="message"> - すみません。Lindenをミュートできません。 + 残念ながら、Lindenをミュートすることはできません。 </message> <option name="OK"> OK </option> </alert> - <alert name="MuteByName" title="オブジェクト名でミュートする"> + <alert name="MuteByName" title="オブジェクトを名前でミュート"> <message name="message"> - 名前によるミュートは、オブジェクト・チャット、およびIMのみに影響し、サウンドには影響しません。 正確なオブジェクト名をタイプする必要があります。 + 名前によるミュートは、オブジェクト・チャット、およびIMのみに影響し、サウンドには影響しません。 +正確なオブジェクト名を入力する必要があります。 </message> <editline> オブジェクト名 @@ -2792,12 +2891,13 @@ AGP Graphics Accelerationを可能にできます。 OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="MuteByNameFailed" title="オブジェクト名でミュートの失敗"> + <alert name="MuteByNameFailed" + title="オブジェクトを名前でミュートできませんでした"> <message name="message"> - この名前は、すでにミュートされています。 + あなたはすでにこの名前をミュートしています。 </message> <option name="OK"> OK @@ -2805,8 +2905,8 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="RemoveItemWarn"> <message name="message"> - 許可されたけれど、在庫目録を削除することはそのオブジェクトに損害を与える可能性があります。 -その在庫目録項目を削除したいですか。 + 許されてはいますが、持ち物を削除するとオブジェクトが壊れる +恐れがあります。 持ち物アイテムを削除しますか? </message> <option name="Yes"> はい @@ -2817,7 +2917,7 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="CantRateOwnedByGroup"> <message name="message"> - Can't このオブジェクトの所有者を格付けすることはできないので, オブジェクトはグループによて所有されます。 + このオブジェクトのオーナーを評価できません。オブジェクトはグループの所有物です。 </message> <option name="OK"> OK @@ -2825,7 +2925,7 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="CantOfferCallingCard"> <message name="message"> - 今のところ電話カードを提供できません。すぐにもう一度試みてください。 + 現在コーリング・カードを贈れません。数分後にもう一度試してください。 </message> <option name="OK"> OK @@ -2833,7 +2933,7 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="CantOfferFriendship"> <message name="message"> - 今のところ友情を提供できません。すぐにもう一度試みてください。 + 現在フレンドシップを贈れません。数分後に試してください。 </message> <option name="OK"> OK @@ -2841,8 +2941,7 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="CantSetHome"> <message name="message"> - Can't ここにホームを設定できま -あなたのホームは、あなたまたはあなたのグループが所有する土地の上にある必要があります。 + ここにホームを設定することはできません。ホームは、あなた自身の土地か、あなたのグループ所有の土地に設定する必要があります。 </message> <option name="OK"> OK @@ -2850,18 +2949,19 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="BusyModeSet"> <message name="message"> - 使用中モードの設定 -チャットとインスタントメッセージは隠されます。 インスタント -メッセージは、あなたの使用中の返答を受けます。 全てのテレポート -と在庫目録の提供は、低下します。 + ビジー・モードのセット。 +チャットとインスタント・メッセージが隠れます。 インスタント・メッセージは、ビジー応答を受け取ります。 テレポートと持ち物のオファーはすべて拒否されます。 </message> + <ignore name="ignore"> + ビジー・モードを設定するとき + </ignore> <option name="OK"> OK </option> </alert> <alert name="NoPVPDetected"> <message name="message"> - プレーヤ無し 対 プレーヤ (PvP) 悪用が発見された + プレイヤー間(PvP)の嫌がらせ未検出 </message> <option name="OK"> OK @@ -2869,8 +2969,8 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="NotecardAttachPermFail"> <message name="message"> - 制限されない次の所有者の許可付きの項目だけが -ノートカードに添付できます。 + ノートカードには、 +次のオーナーの権限が制限されていないアイテムのみ添付できます。 </message> <option name="OK"> OK @@ -2878,339 +2978,344 @@ AGP Graphics Accelerationを可能にできます。 </alert> <alert name="JoinedTooManyGroupsMember"> <message name="message"> - "他のグループに参加するにはあまりに多くのグループのメンバーです。" - "このグループに参加する前に少なくとも一つのグループから去るか、" - "またはこの申し出を断ってください。" - "グループを去るためにメニューからオプションを選択します。" - "[NAME] はメンバーとしてグループに参加するために" - "あなたを招待しました。" - "[INVITE]" - "" + 加入グループが多すぎて、別のグループに +加われません。 少なくとも1つのグループから +抜けるか、この招待を断ってください。 +脱退するには[編集]メニューから[私のグループ] +オプションを選びます。 +[NAME] があなたをメンバーとしてグループに招待しました。 +[INVITE] </message> <option name="Join"> 参加 </option> <option name="Decline"> - 断わる + 辞退 </option> </alert> <alert name="JoinedTooManyGroupsOfficer"> <message name="message"> - "他のグループに参加するにはあまりに多くのグループのメンバーです。" - "このグループに参加する前に少なくとも一つのグループから去るか、" - "またはこの申し出を断ってください。" - "グループを去るためにメニューからオプションを選択します。" - "[[NAME] はオフィサーとしてグループに参加するために" - "あなたを招待しました。" - "[INVITE]" - "" + 加入グループが多すぎて、別のグループに +加われません。 少なくとも1つのグループから +抜けるか、この招待を断ってください。 +脱退するには[編集]メニューから[私のグループ] +オプションを選びます。 +[NAME] があなたをオフィサーとしてグループに招待しました。 +[INVITE] </message> <option name="Join"> 参加 </option> <option name="Decline"> - 断わる + 辞退 + </option> + </alert> + <alert name="HandleRateOwner"> + <message name="message"> + このオブジェクトのオーナーを評価できません。オブジェクトはグループの所有物です。 + </message> + <option name="OK"> + OK </option> </alert> <alert name="KickUser"> <message name="message"> - どんなメッセージでこの使用者を追い出しますか。 + どんなメッセージを表示して、このユーザーを追い出しますか? </message> <editline> - 管理人があなたをログオフしました。 + あなたは管理者によりログオフされました。 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="KickAllUsers"> <message name="message"> - どんなメッセージでグリット上の皆を追い出しますか。 + どんなメッセージを表示して、グリッドにいる全員を追い出しますか? </message> <editline> - 管理人があなたをログオフしました。 + あなたは管理者によりログオフされました。 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="FreezeUser"> <message name="message"> - どんなメッセージでこの使用者を静止させますか。 + どんなメッセージを表示して、このユーザーをフリーズしますか? </message> <editline> - あなたは動けませんでした。 あなたは移動またはチャットができません。 管理人がインスタントメッセージ(IM)で連絡します 。 + あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="UnFreezeUser"> <message name="message"> - どんなメッセージでこの使用者の静止状態を解除しますか。 + どんなメッセージを表示して、このユーザーのフリーズを解除しますか? </message> <editline> - あなたはもう動けます。 + もうフリーズされていません。 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ExpungeUser"> <message name="message"> - 削除するために使用者のエージェントidを入力してください + 消去するユーザーのエージェントIDを入力 </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="OfferTeleport"> <message name="message"> - 次のメッセージを持ったあなたの位置にテレポートを提供しますか。 + あなたのロケーションへのテレポートを次のメッセージと共に贈りますか? </message> <editline> - [REGION]に私を入れてください + [REGION]に参加希望 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="OfferTeleportFromGod"> <message name="message"> - 神があなたの場所に使用者を呼び出しますか。 + ユーザーをゴッド・コールで呼び寄せますか? </message> <editline> - [REGION]に私を入れてください + [REGION]に参加希望 </editline> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="MessageEstate" - title="あなたの不動産内全員にメッセージ送信"> + title="あなたの不動産内の全員にメッセージを送信"> <message name="message"> - あなたの所有地内のみんなに現在送られる -短い通知をタイプします。 + 今あなたの不動産にいる人全員に送る +短いメッセージを入力してください。. </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="ChangeLindenEstate" title="Lindenエステートを変更"> + <alert name="ChangeLindenEstate" title="Lindenの不動産を変更"> <message name="message"> - "所有地を所有したLindenを変更しようとしています" - "(本土, ティーン格子、 オリエンテーションなど)。" - " " - "これは極めて危険です。それは使用者の経験に" - "基本的に影響力があるからです。 本土では、数千の地域が変更され、" - "そしてスペースサーバーに問題をつくっています。" - " " - "続行しますか。" - "" + あなたはLinden所有の不動産(メインランド、ティーングリッド、 +オリエンテーションなど)を変更しようとしています。 + +これはユーザーの経験を根本から揺るがしかねない +「非常に危険な行為」です。 メインランドで何千もの地域が +変わり、スペースサーバーに悪影響が出ます。 + +操作を続行しますか? </message> <option name="ChangeEstate"> - 所有地の変更 + 不動産を変更 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="ChangeLindenAccess" title="Lindenエステート・アクセスを変更"> + <alert name="ChangeLindenAccess" title="Lindenの不動産へのアクセスを変更"> <message name="message"> - 所有地を所有したLindenのためのアクセスリストを変更しようとしています -(本土,ティーン格子、オリエンテーションなど)。 + あなたはLinden所有の不動産(メインランド、ティーングリッド、 +オリエンテーションなど)へのアクセス・リストを変更しようとしています。 -これはDANGEROUSです。そして実行すべきではありません。グリッドの -内部/外部にオブジェクト/金銭を転送することを許す -ハッキングを引き起こします。 +この行為は「危険」であり、グリッドからオブジェクトやお金の +譲渡を許すハッキングを引き起こす結果に +終わる可能性大です。 -I数千の地域が変更され、そして -スペースサーバーに問題をつくっています。 +メインランドで何千もの地域が変わり、 +スペースサーバーに悪影響が出ます。 -続行しますか。 +操作を続行しますか? </message> <option name="ChangeEstate"> - 所有地の変更 + 不動産を変更 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateAllowedAgentAdd" title="不動産を選択"> <message name="message"> - この所有地または[ALL_ESTATES]のために許可リストに追加しますか + この不動産の許可リストだけに追加しますか? それとも[ALL_ESTATES]のすべての許可リストに追加しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateAllowedAgentRemove" title="不動産を選択"> <message name="message"> - この所有地ためだけまたは[ALL_ESTATES]のために許可リストから取り除きますか + 許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateAllowedGroupAdd" title="不動産を選択"> <message name="message"> - この所有地または[ALL_ESTATES]のためにグループ許可リストに追加しますか + この不動産のグループ許可リストだけに追加しますか? それとも[ALL_ESTATES]のグループ許可リストに追加しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateAllowedGroupRemove" title="不動産を選択"> <message name="message"> - この所有地だけまたは[ALL_ESTATES]のためにリストを許可されたグループから取り除きますか + 許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateBannedAgentAdd" title="不動産を選択"> <message name="message"> - この所有地だけまたは[ALL_ESTATES]のためにアクセスを拒みますか + この不動産についてのみアクセスを拒否しますか? それとも[ALL_ESTATE]へのアクセスを拒否しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateBannedAgentRemove" title="不動産を選択"> <message name="message"> - この所有地だけまたは[ALL_ESTATES]のためにアクセスを拒むことを止めますか + アクセス拒否をこの不動産についてのみ停止しますか。それとも、[ALL_ESTATES]に対して停止しますか。 </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateManagerAdd" title="不動産を選択"> <message name="message"> - この所有地または全てのあなたの所有地に対して所有地マネージャを追加しますか。 + 不動産マネージャーをこの不動産だけに追加しますか? それともすべての不動産に追加しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateManagerRemove" title="不動産を選択"> <message name="message"> - この所有地または全てのあなたの所有地のための所有地マネージャを取り除きますか。 + 不動産マネージャーをこの不動産からのみ削除しますか? それとも、あなたの全不動産から削除しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateCovenantChange" title="不動産を選択"> <message name="message"> - 本不動産のみ、または、[ALL_ESTATES]のための約款メッセージを変更しますか? + 約款メッセージをこの不動産についてのみ変更しますか? それとも[ALL_ESTATES]を対象に変更しますか? </message> <option name="ThisEstate"> - この所有地 + この不動産 </option> <option name="AllEstates"> - 全ての所有地 + すべての不動産 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="EstateKickUser" title="キック確認"> + <alert name="EstateKickUser" title="キックを確認"> <message name="message"> - この所有地から[EVIL_USER] 追い出しますか。 + この不動産から[EVIL_USER]を追い出しますか? </message> <option name="Kick"> - 追い出す + キック </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="EstateChangeCovenant"> <message name="message"> - 不動産約款を本当に変更してもよいですか? + 不動産約款を変更しようとしています。操作を続行しますか? </message> <option name="Change"> 変更 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ProblemImportingEstateCovenant"> <message name="message"> - 不動産約款インポートの問題 + 不動産約款のインポート時に問題発生。 </message> <option name="OK"> OK @@ -3218,7 +3323,7 @@ I数千の地域が変更され、そして </alert> <alert name="UnableToLoadNotecard"> <message name="message"> - 今回は、ノートカード資産を読み込むことができません。 + 現在ノートカードの資産をロードできません。 </message> <option name="OK"> OK @@ -3226,7 +3331,7 @@ I数千の地域が変更され、そして </alert> <alert name="NotAllowedToViewNotecard"> <message name="message"> - 要求された資産IDに関するノートカード閲覧のための許可が不十分です + 要求された資産IDに関するノートカードを閲覧するには権限が不十分です。 </message> <option name="OK"> OK @@ -3234,7 +3339,7 @@ I数千の地域が変更され、そして </alert> <alert name="MissingNotecardAssetID"> <message name="message"> - ノートカード用資産IDがデータベースから紛失 + ノートカード用資産IDがデータベースに登録されていません。 </message> <option name="OK"> OK @@ -3242,405 +3347,389 @@ I数千の地域が変更され、そして </alert> <alert name="PublishClassified"> <message name="message"> - 注意 :案内広告の料金は払い戻しされません。 -L$[AMOUNT]で、この案内を表示しますか? + 注意:クラシファイド広告の料金は払い戻しされません。 + +L$[AMOUNT]で、このクラシファイド広告を今すぐ掲載しますか? </message> <option name="Publish"> - 表示 + 公開 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="ConfirmRestart" title="再スタート確認"> + <alert name="ConfirmRestart" title="再起動を確認"> <message name="message"> - 実際に2分間でこの地域を再スタートしたいですか。 + この地域を2分後に再起動しようとしています。操作を続行しますか? </message> <option name="Restart"> 再起動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="MessageRegion" title="この地域内全員にメッセージ送信"> + <alert name="MessageRegion" + title="この地域内の全員にメッセージを送信"> <message name="message"> - あなたの所有地内のみんなに送られる -短い通知をタイプします。 + この地域にいる人全員に送る +短いメッセージを入力してください。 </message> <option name="OK"> OK </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="HelpRegionBlockTerraform" title="フロック土地形成"> + <alert name="HelpRegionBlockTerraform" title="土地整備をブロック"> <message name="message"> - 本ボックスがチェックされている場合、区画毎の『領域を編集』設定にかかわらず、土地オーナーは土地整備が出来ません。 -デフォルト: オフ + このボックスがチェックされている場合、区画ごとの「領域を編集」設定にかかわらず、土地オーナーは土地整備ができません。 + +デフォルト:オフ </message> </alert> - <alert name="HelpRegionBlockFly" title="ブロックフライ"> + <alert name="HelpRegionBlockFly" title="飛行をブロック"> <message name="message"> - このボックスがチェックされる場合には、人々は区画毎のFly設定に関わりなく -彼らの土地での飛行はできません。 + このボックスをチェックすると、区画ごとの「飛行」設定に関わらず飛行ができなくなります。 -ディフォルト値: オフ +デフォルト:オフ </message> </alert> - <alert name="HelpRegionAllowDamage" title="ダメージを許可"> + <alert name="HelpRegionAllowDamage" title="損害を許可"> <message name="message"> - このボックスをチェックすることは、個々人の区画設定に関わらず -全ての区画に渡って健全なシステムが可能です。 -このボックスがチェックしないで残される場合には、 -個々の区画の所有者は彼らの区画で健全なシステムを起動することはまだできます。 - -ディフォルト値: オフ + このボックスをチェックすると、区画別の設定に関係なく、すべての区画に対してヘルス・システムが有効になります。 +このボックスがチェックされていない場合は、各区画のオーナー各人が自分の区画に対してヘルス・システムのオン/オフを設定できます。 +デフォルトでは、オフになっています。 </message> </alert> - <alert name="HelpRegionAgentLimit" title="エージェントの制限"> + <alert name="HelpRegionAgentLimit" title="人物の制限"> <message name="message"> - この地域に許可される最大数のアバターを設定します。 -一つの地域により多くのアバターを持っていると、 -性能がより悪くなる可能性があることに注意します。 + この地域で使用可能なアバターの最大数を設定します。 +1つの地域に存在するアバターが多いとパフォーマンスが +低下する原因になるので注意してください。 -ディフォルト値: 30 +デフォルト:30 </message> </alert> - <alert name="HelpRegionObjectBonus" title="オブジェクトボーナス"> + <alert name="HelpRegionObjectBonus" title="物体ボーナス"> <message name="message"> - The Object Bonus is a multiplier for primitives allowed on any given -parcel. The range allowed is 1 to 10. Set at '1' each 512m2 parcel -would be allowed 117 objects. Set at '2' each 512m2 parcel would be -allowed 234, or twice as many, and so on. The max number of objects -allowed per region remains 15,000 no matter what the value set for -Object Bonus. Once this value is set, it should not be lowered until -you are certain that changing it will not force return or deletion of -the objects currently on parcels. + 物体ボーナスとは、すべての区画に認められたプリム(オブジェクト)の増倍数です。 1から10までの増倍数が認められています。'1' の設定では、512m2の1区画に\117のオブジェクトが許可されます。 '2' の設定では、同じ1区画に許される\オブジェクトは2倍の234で、3以降も同様になります。 オブジェクト・ボーナスの\数値にかかわらず、1つの地域に認められるオブジェクトの最大数は常に\15,000です。 いったんこの数値を決めたら、それを変えても区画上の\オブジェクトを返却または削除させることにならないと確認できるまで、\数値を下げるべきではありません。 -Default: 1.0 +デフォルト: 1.0 </message> </alert> - <alert name="HelpRegionMaturity" title="年齢制限"> + <alert name="HelpRegionMaturity" title="成人指定"> <message name="message"> - 地図のポップアップ助言とスクリーンの上部右側 -の角に示したように、この地域の年齢制限を設定します。 年齢制限 -も検索結果に影響します - 居住者は成人向け地域でのコンテンツを -を見つけないように選択できます。 + 地域の成人指定を設定します。成人指定は、 +スクリーンの右上の角に示されるほか、地図のポップアップ・ヒントに示されます。 +成人指定は、検索結果にも影響します。住人は、成人向け地域のコンテンツを検索から除外することができます。 -システムが地図情報を定期的にアップデートしているだけな -ので、マップ上のポップアップ助言は5 分間は変更しません。 +地図情報は一定間隔でのみ更新されるため、 +地図上のポップアップ・ヒントに変更が反映されるまでに5分かかります。 -ディフォルト値: PG +デフォルト:PG </message> </alert> - <alert name="HelpRegionRestrictPushObject" title="プッシングを制限"> + <alert name="HelpRegionRestrictPushObject" title="プッシュを制限"> <message name="message"> - 全地域において、プッシュ許可を制限します。エージェントは自分自身でのプッシュ、他区画のオーナー、および、その区画に設定/譲渡されたグループ所有のスクリプトにプッシュされる可能性があります。 + 制限されたプッシュ権限を全地域に適用します。 +これによりエージェントのプッシュは、自分自身でのプッシュ、 +他区画のオーナーが所有しているスクリプトによるプッシュ、または区画のグループに設定されているスクリプトによるプッシュだけに制限されます +(区画にグループが設定/譲渡されている場合)。 +プッシュでは、LSLのllPushObject()関数を参照します。 + デフォルト:オフ </message> </alert> <alert name="HelpParcelChanges" title="区画統合/再分割"> <message name="message"> - 不動産オーナーが所有していない区画を統合/再分割できる -か設定します。 -本オプションが無効な場合: -*不動産オーナー、または管理者のみが、統合/再分割を行うことができます。 *オーナー、または、適切な権限を持つグループに属する区画のみを統合/再分割することができます。 -本オプションが有効な場合: -*全ての区画オーナーは、所有する区画の統合/再分割ができます。 *グループ所有の区画は、適切な権限を持つグループに属する区画を統合/再分割することができます + 不動産オーナーが所有していない区画に関して、統合/再分割が\可能かどうかを設定します。 +このオプションがチェックされていない場合 + *不動産のオーナーまたは管理者だけが、区画を統合/再分割できます。 + *彼らが統合/再分割できるのは、オーナーの持つ区画、または適切な権限を持つグループに属する区画だけです。 +このオプションが有効の場合 + * 全ての区画オーナーは、所有する区画を統合/再分割できます。 + * グループ所有の区画では、適切な権限を持つグループが区画を統合/再分割できます。 + +デフォルト: チェックあり </message> </alert> - <alert name="RegionMaturityChange" title="地域の成熟度変更済み"> + <alert name="RegionMaturityChange" title="地域の成人指定変更済み"> <message name="message"> - この地域の年齢制限のランクはアップデートされました。 + この地域の成人指定が更新されました。 -しかしながら世界地図は更新するのに約 5分間かかります。 -このシステムは定期的に -地図情報を更新しているからです。 +ただしシステムが行う地図情報の更新は一定期間 +ごとなので、世界地図に反映されるには5分ほど +かかります。 </message> </alert> - <alert name="HelpRegionLandResell" title="再販の土地"> + <alert name="HelpRegionLandResell" title="土地の再販"> <message name="message"> - 不動産オーナーや管理者は、不動産オーナーの土地を販売することができます。 もし、このオプションが設定されていない場合、購入者は本地域における土地を再販することができません。もし、このオプションが設定されている場合、購入者は本地域における土地を再販することができます。 -デフォルト: 許可しない + 不動産のオーナーと管理者は、不動産オーナーの土地を販売することができます。 +このオプションをチェックしない場合、購入者が本地域における土地を再販することはできなくなります。 +このオプションをチェックした場合、購入者は本地域における土地を再販することができます。 + +デフォルト:許可しない </message> </alert> - <alert name="HelpEstateCovenantID" title="特権資産ID"> + <alert name="HelpEstateCovenantID" title="約款資産ID"> <message name="message"> - 本不動産に属する不動産約款のノートカード資産IDを設定 デフォルト:00000000-0000-0000-0000-000000000000もしくは、無し + この不動産に属する不動産約款のノートカード資産IDを設定します。 + + +デフォルト:00000000-0000-0000-0000-000000000000または値なし </message> </alert> - <alert name="HelpRegionDisableScripts" title="スクリプトを無効にする"> + <alert name="HelpRegionDisableScripts" title="スクリプトを無効化"> <message name="message"> - 加入者識別モジュールの動作が不良の時は、スクリプトに原因がある可能性があります。 -Statistics Bar (Ctrl-Shift-1) -を開いてください。Simulator Physics FPSを見てください。 -それが45より低い場合には、Stats Barのボタン -にある'Time'パネルを開きます。Script Timeが25ms以上である場合には、 -'Get Top Scripts'ボタンをクリックします。動作不良の原因と考えられるスクリプトの名前と位置 -が表示されます。 + スクリプトが原因で、シムのパフォーマンスが低下することがあります。 (Ctrl-Shift-1)を\押して、統計バーを開き、 シムの物理モデリング}のFPS値を見ます。 +その数値が45を下回っていれば、統計バーの下側にある[時間]\パネルを開きます。 スクリプトタイムが25ms以上であれば、\[トップ・スクリプトを取得]ボタンをクリックします。 問題の原因と思われる\スクリプトの名前と位置が表示されます。 + +[スクリプトを無効化]をチェックしてから[適用]ボタンをクリック\すると、この地域の全てのスクリプトが一時的に無効になります。 表示された\[トップ・スクリプト]の位置に行くには、この操作が\必要になります。 トップ・スクリプトにたどり着いたら、この\スクリプトが問題を起こしているか調べます。 スクリプトの\オーナーに連絡するか、オブジェクトを削除または返却しましょう。 +[スクリプトを無効化]のチェックを外してから[適用]ボタンをクリックして、\地域のスクリプトをアクティブに戻します。 -'Disable Scripts'ボックスをチェックし、'Apply' -ボタンを押すと、この地域での全てのスクリプトが一時的に無効になります。注をつけた -'トップスクリプト'の場所に行くためには、これを行う必要 -かあるでしょう。その場所に移動したら直ぐに、それが問題の原因かどうか判断するためにその -スクリプトを調査します。そのスクリプトの所有者に連絡しても良いし、オブジェクトを削除したり戻したりしてもかまいません。 -'Disable Script'ボックスのチェックを外し、'Apply'して -その地域でのスクリプトを再び有効にします。 -デフォルト値:off +デフォルト: オフ </message> </alert> - <alert name="HelpRegionDisableCollisions" title="衝突を無効にする"> + <alert name="HelpRegionDisableCollisions" title="衝突を無効化"> <message name="message"> - 加入者識別モジュールの動作が不良の時は、スクリプトに原因がある可能性があります。 -Statistics Bar (Ctrl-Shift-1)を開いてください。Simulator -Physics FPSを見てください。”それが45より低い場合には、Stats Barのボタンにある -'Time'パネルを開きます。Sim Time (Physics) が20ms以上で -ある場合には、'Get Top Colliders'ボタンをクリックします。 -動作不良の原因と考えられる -物理的オブジェクトの名前と位置が表示されます。 + 物理オブジェクトが原因で、シムのパフォーマンスが低下することがあります。 +(Ctrl-Shift-1)を押して、統計バーを開き、 シムの物理モデリング}のFPS値を見ます。 その数値が45を下回っていれば、統計バーの\下側にある[時間]パネルを開きます。 シム時間(物理作用)が \20ms以上だったらシム時間(物理作用)、[トップ・コライダーを取得]ボタンをクリックします。 +問題の原因と思われる物理オブジェクトの\名前と位置が表示されます。 -'Disable Collisions'ボックスをチェックし、'Apply' -ボタンを押すと、この地域での全てのオブジェクト間の衝突が一時的に無効になります。注をつけた -'トップコライダー'の場所に行くためには、これを行う必要 -があるでしょう。その場所に移動したら直ぐに、 -そのオブジェクトが他のオブジェクトと常に衝突しているかを調査します。そのオブジェクトの所有者に連絡しても良いし、オブジェクトを削除したり戻したりしてもかまいません。 -'Disable Collisions'ボックスのチェックを外し、'Apply'して -その地域での衝突を再び有効にします。 -ディォルト値: off +[衝突を無効化]をチェックしてから[適用]ボタンをクリックすると、\オブジェクト同士の衝突が一時的に無効になります。 表示された\[トップ・コライダー]の位置に行くには、この操作が\必要になります。 トップ・コライダーにたどり着いたら、オブジェクトを調べます。\それは常に他のオブジェクトと衝突していますか? このオブジェクトの\オーナーに連絡するか、オブジェクトを削除または返却しましょう。 +[衝突を無効化]のチェックを外してから[適用]ボタンをクリックし、地域の衝突を\アクティブに戻します。 + +デフォルト: オフ </message> </alert> - <alert name="HelpRegionDisablePhysics" title="フィジックスを無効にする"> + <alert name="HelpRegionDisablePhysics" title="物理作用を無効化"> <message name="message"> - Physics を不能にすることは、全ての -フィジックスシュミレーションを不能にするを除いてはCollisionsを不能にすることと似ています。 これは、オブジェクトが衝突を止めるのみならず、 -アバターが移動できなくなることを意味します。 + 物理作用を無効化した場合に得られる結果は、衝突を無効化した場合と似ていますが、すべての +物理シミュレーションが無効化される点が異なります。 これは、 +オブジェクトが衝突しなくなるだけではなく、アバターも移動できなくなることを意味します。 -Disable Collisionsがフィジックスの問題またはTop Colliderを -調査するために地域に十分な業績を与え返さ -ない時だけにこれは使用されます。 +この機能は、衝突を無効化しても +地域内で物理問題または「上部コライダー」を検証するために +十分なパフォーマンスが得られない場合にのみ使用してください。 -終了する時、フィジックスを再可能にすることを確認するか、またはアバターの -動きができなくなることが続けます。 +作業が完了したら必ず物理作用を再度有効化してください。 +これを怠ると、アバターが依然として移動できない状態になります。 -ディフォルト値: オフ +デフォルト:オフ </message> </alert> - <alert name="HelpRegionTopColliders" title="上部コライダー"> + <alert name="HelpRegionTopColliders" title="トップ・コライダー"> <message name="message"> - 可能性のあるオブジェクト-オブジェクトの -衝突の最大数を経験するオブジェクトのリストを示します。 -これらのオブジェクトは参加者識別モジュールの性能をゆっくりにする可能性があります。 -Statistics Barを選択し、そしてSim Time (Physics)の下を見て、 20 ms以上がフィジックス内で費やされているかかどうか -みます。 + オブジェクト同士の衝突が最も多い可能性のある +オブジェクトのリストを表示します。 これらのオブジェクトは、 +シムのパフォーマンスを低下させる可能性があります。 [ビュー]>[統計バー]を選択して、 +[シミュレータ]>[時間]>[シム時間(物理作用)]をチェックし、 +物理作用に使用されている時間が20msを超えているかどうかを確認してください。 </message> </alert> - <alert name="HelpRegionTopScripts" title="上部スクリプト"> + <alert name="HelpRegionTopScripts" title="トップ・スクリプト"> <message name="message"> - ほとんどの時間 -LSL スクリプトの実行に費やしているオブジェクトのリストを示します。 -これらのオブジェクトは参加者識別モジュールの性能をゆっくりにする可能性があります。 -Statistics Barを選択し、そしてSimulator > Time > Sim Time (Physics)の下を見て、 25 ms以上 -がフィジックス内で費やされているかかどうか みます。 + LSLスクリプトの実行に最も時間を費やしているオブジェクトのリスト +を表示します。 これらのオブジェクトは、シムのパフォーマンスを低下させる可能性があります。 +[ビュー]>[統計バー]を選択して、 +[シミュレータ]>[時間]>[シム時間(物理作用)]をチェックし、スクリプトに使用されている時間が25ms +を超えているかどうかを確認してください。 </message> </alert> - <alert name="HelpRegionRestart" title="地域を再起動"> + <alert name="HelpRegionRestart" title="地域をリスタート"> <message name="message"> - 後この地域で実行しているサーバープロセスを再起動する。 -2分間の警告のこの地域の全ての居住者は、連絡を -絶たれます。 この地域はそのデータを保存し、90秒以内に元に戻され -ます。 + 2分後にサーバーが再起動されることを警告するメッセージが表示された後、 +サーバーを再起動します。 この地域内のすべての住人の接続が切れます。 + 地域のデータは保存され、通常は90秒以内に元に戻ります。 -この地域を再起動することはほとんどの性能の -題を修正しません、これは指示された時だけ通常使用される必要があります。 +この地域をリスタートしてもパフォーマンス上の問題はほとんど解決されないので、 +指示された場合以外はリスタートしないでください。 </message> </alert> - <alert name="HelpRegionWaterHeight" title="水の高さ"> + <alert name="HelpRegionWaterHeight" title="水面の高さ"> <message name="message"> - これは水が現れるメーターでの高さです。 -もしこの設定が20以外のもので、そして世界の端に隣接する水または -役に立たない水がある -場合には、目に見えるギャップがあります。 + これは、水が現れる高さ(単位:メートル)です。 +この設定が20以外で、水が世界の +端や、「空の」水に近ければ、 +溝が見えるでしょう。 -ディフォルト値: 20 +デフォルト: 20 </message> </alert> - <alert name="HelpRegionTerrainRaise" title="領域隆起"> + <alert name="HelpRegionTerrainRaise" title="地形の上昇"> <message name="message"> - これは、区画所有者が彼らの土地を焼いた -土地のディフォルトの高さの上に -上げることができます。 + この数値は、区画オーナーが、構築した地形のデフォルトの高さから +自分の地形を上昇させてよい距離を +示します。 -ディフォルト値: 4 +デフォルト: 4 </message> </alert> - <alert name="HelpRegionTerrainLower" title="領域沈降"> + <alert name="HelpRegionTerrainLower" title="地形の下降"> <message name="message"> - これは、区画所有者が彼らの土地を焼いた -土地のディフォルトの高さの下に -下げることができます。 + この数値は、区画オーナーが、構築した地形のデフォルトの高さから +自分の地形を下降させてよい距離を +示します。 -ディフォルト値: -4 +デフォルト: -4 </message> </alert> - <alert name="HelpRegionUploadRaw" title="RAW領域をアップロード"> + <alert name="HelpRegionUploadRaw" title="RAW地形をアップロード"> <message name="message"> - This button uploads a .RAW file to the region you are in. -The file must have the correct dimensions/number of channels: -RGB, 256x256 and 13 channels. The best way to create a -terrain file is to download the existing RAW file. A good -first step is to modify the first channel (land height), -and upload it. + このボタンをクリックすると、.RAWファイルがあなたのいる地域にアップロードされます。 +ファイルには正しい寸法とチャンネル数である「RGB、256x256、 +13チャンネル」を指定します。 地形ファイルを作成する\最良の方法は、既存のRAW ファイルをダウンロードすることです。 まず\最初のチャンネル(土地の高さ)を変更して\アップロードします。 -The upload can take up to 45 seconds. Note that uploading a -terrain file *will not* move the objects that are on the land, -only the terrain itself and the permissions associated with the -parcels. This can result in objects going underground. +アップロードには最大45秒かかります。 地形ファイルをアップロード\しても、その土地にあるオブジェクトは「移動しない」ので、注意してください。\地形そのものと、その区画にかかわる許可事項だけが\移動します。 その結果、オブジェクトが地下に潜ってしまうこともあります。 -For more information on editing region height fields, go to: -http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFile +地域の高さフィールドの編集の詳細は +http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFileを参照してください。 </message> </alert> - <alert name="HelpRegionDownloadRaw" title="RAW領域をダウンロード"> + <alert name="HelpRegionDownloadRaw" title="RAW地形をダウンロード"> <message name="message"> - このボタンは高さフィールドデータ、区画寸法、売り出し状態の区画そしてこの地域 -ようのいくらかの区画許可を含むファイルをダウンロードします。 -Photoshopのようなプログラムのなかでこのファイルを開いた時には、以下のように -ドキュメント寸法を指定する必要があります。 -: RGB, RGB, 256x256 で 13 チャンネルです。 -この土地ファイルは他の方法では開くことができません。 + このボタンをクリックすると、標高フィールドデータ、区画寸法、 +売り出し区画の状況、この地域の区画に関する許可が入ったファイルが +ダウンロードされます。 Photoshopなどのソフトウェアでこのファイルを +開く場合、文書サイズを次のように指定 +します。 「RGB, 256x256 、13チャンネル」 この地形ファイルは、これ +以外の方法で開くことはできせん。 -地域の高さファイルを編集することに関する詳しい情報については、以下を参照してください: +地域における標高フィールドの編集に関する参照先: http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFile </message> </alert> - <alert name="HelpRegionUseEstateSun" title="Estate Sunを使用"> + <alert name="HelpRegionUseEstateSun" title="不動産の太陽を使用"> <message name="message"> - このチェックボックスは、この地域での太陽の位置がこの所有地の残りの部分での -太陽の位置と同じであるようにさせます。 + このボックスがチェックされていると、この地域の太陽は +不動産の他の場所における太陽と位置が同じになります。 -Default: on +デフォルト: オン </message> </alert> - <alert name="HelpRegionFixedSun" title="固定の太陽"> + <alert name="HelpRegionFixedSun" title="太陽固定"> <message name="message"> - このチェックボックスは太陽の位置をPhase スライダーの中の位置を設定し、 -そして移動から太陽を止めます。 - -ディフォルト値: オフ + このボックスをチェックすると、太陽の位置は段階スライダー内に +設定され、動かなくなります。 +デフォルト: オフ </message> </alert> - <alert name="HelpRegionBakeTerrain" title="土地を焼く"> + <alert name="HelpRegionBakeTerrain" title="地形を構築する"> <message name="message"> - このボタンにより、現在の領域の形を新たなデフォルトとして保存します。一度ベークされると、あなたや他の使用者が領域編集の『復帰』オプション/ツールを利用しなくても、保存された形に復帰することができます。ベークされた領域は、領域上昇および下降境界の中間点でもあります。 + このボタンをクリックすると、地形の現在の形状が地域の新しい +デフォルトとして保存されます。 構築されると、あなたや他の人が[地形の編集]から +[戻す]オプション/ツールを使って、保存された形状に +戻すことができます。 構築された地形は、地形の上昇限界と +下降限界の中間点にもなります。 </message> </alert> <alert name="HelpEstateEstateManager" title="不動産マネージャー"> <message name="message"> - 所有地マネージャは、地域と所有地の設定の制御を -委託した居住者です。 -所有地マネージャは -アップロード、ダウンロード、地形を焼くためを除いては、 -これらの区域内でいかなる設定も変更できます。 特に、 -あなたの所有地から居住者を許可したり締め出したりできます。 + 不動産マネージャーとは、 +地域管理と不動産設定が委任された住人をさします。 不動産マネージャーは +アップロード、ダウンロード、地形構築以外 +のパネル内の設定を変更できます。 特に、住人のアクセス +禁止の設定ができることは大きな特徴です。 -所有地マネージャは、お互いによってではなく、その所有地の所有者によって -追加または取り除くことができます。 所有地マネージャとしてあなたが信用する -居住者のみを選択してください。あなたには彼らの行為に対する - -最終的な責任があります。 +不動産マネージャーを追加または削除できるのは、不動産オーナーだけです。逆はできません。 信頼の置ける住人のみ +不動産マネージャーに任命してください。 +彼らの行動の全責任はあなたにあります。 </message> </alert> - <alert name="HelpEstateUseGlobalTime" title="Global Timeを使用"> + <alert name="HelpEstateUseGlobalTime" title="グローバル・タイムを使用"> <message name="message"> - このチェックボックスは、あなたの所有地での太陽がLinden-所有の -本土の所有地でものと同じ位置に -準じるようにします。 + このボックスがチェックされていると、あなたの所有地の太陽は +Linden社所有のメインランドの不動産での太陽の位置に +準じます。 -ディフォルト値: オン +デフォルト: オン </message> </alert> - <alert name="HelpEstateFixedSun" title="固定の太陽"> + <alert name="HelpEstateFixedSun" title="太陽固定"> <message name="message"> - このチェックボックスは太陽の位置をPhase スライダーの中の位置を設定し、 -そして移動から太陽を止めます。 + このボックスがチェックされていると、太陽の位置は段階スライダー内に +設定され、動かなくなります。 </message> </alert> - <alert name="HelpEstateExternallyVisible" title="Public Access"> + <alert name="HelpEstateExternallyVisible" title="パブリック・アクセス"> <message name="message"> - Sets whether residents who are on other estates can enter this - estate without being on an access list. + 他の不動産の住人がアクセス・リストに登録されていなくても、 +この不動産に立ち入ることができるようにするかどうかを指定します。 -Default: on +デフォルト:オン </message> </alert> <alert name="HelpEstateAllowDirectTeleport" title="直接テレポートを許可"> <message name="message"> - When checked, allows residents to directly teleport to any -point in your estate. When unchecked, residents teleport -to the nearest telehub. + チェックされていると、住人はあなたの不動産のどこにでも直接 +テレポートすることができます。 チェックされていないと、住人はいちばん近いテレハブに +テレポートします。 -Default: off +デフォルト: オフ </message> </alert> <alert name="HelpEstateAllowResident" title="アクセスを許可"> <message name="message"> - どんな居住者でもここにリストされている場合には、所有地にアクセスすることは -どんな居住者でもここにリストされている場合には、所有地にアクセスすることは上記で特別に許可されたグループに限定されています。 + このリストに住人が登録されている場合、 +不動産へのアクセスは、 +登録されている住人と下記で特別に登録されたグループだけに限定して許可されます。 -(この所有地が本土から見える場合には、アクセスは -居住者またはリストされたクループに限定することはできないし、これらの制御は -不能にされています。 ただアクセス拒否リストだけが使用されます。) +(この不動産がメインランドから見える設定の場合には、 +アクセスが住人またはクループのリストに限定されることはなく、これらのコントロールは +無効になります。 「アクセス拒否リスト」だけが使用されることになります)。 </message> </alert> <alert name="HelpEstateAllowGroup" title="グループ・アクセスを許可"> <message name="message"> - どんなグループでもここにリストされている場合には、所有地にアクセスすることは -このリスト上のグループそして -上記で特別に許可された居住者に限定されています。 + このリストにグループが登録されている場合、 +不動産へのアクセスは、 +登録されているグループと上記で特別に許可された住人だけに限定して許可されます。 -(この所有地が本土から見える場合には、アクセスは -居住者またはリストされたクループに限定することはできないし、これらの制御は -不能にされています。 アクセス拒否リストだけが使用されます。) +(この不動産がメインランドから見える設定の場合には、 +アクセスが住人またはクループのリストに限定されることはなく、これらのコントロールは +無効になります。 「アクセス拒否リスト」だけが使用されることになります)。 </message> </alert> <alert name="HelpEstateBanResident" title="アクセス拒否"> <message name="message"> - 許可と上記のグループ設定に関わらず -、このリストの居住者はあなたの所有地へのアクセスを拒絶されます。 + このリストに含めた住人は、上記の許可設定とグループ設定にかかわりなく、あなたの不動産へのアクセスを禁止されます。 -このリストに居住者を追加することは許可リスト -から彼らを取り除きます。 +このリストに住人を加えると、その住人は許可リストから削除されます。 </message> </alert> - <alert name="HelpEstateCovenant" title="不動産特権"> + <alert name="HelpEstateCovenant" title="不動産約款"> <message name="message"> - 不動産約款を設定することにより、その不動産内において土地を販売することができます。約款がない場合、その土地を販売することができません。購入者が購入する前に、土地に関する規則を適用したり、アドバイスをしたくない場合は、約款のノートカードは空白でも構いません。 約款は、規則、ガイドライン、文化的情報、または、単に将来の購入者に対してあなたが期待することを伝えるために利用できます。これには、土地使用区分、建造物規制、支払いオプション、または、新しいオーナーにとってあなたが重要と思われる事柄等の、購入前に購入者が読んで同意しておくべき情報を含むことができます。 購入者は購入を完了する前にチェックボックスをチェックし、約款に同意する必要があります。不動産約款が設定されている土地の約款は、土地に関するダイアログ内に表示されます。 + 不動産約款を定めると、自分の不動産内の区画を販売\できるようになります。 約款を定めていないと、\土地は売れません。 土地に関する規則を適用したくなかったり、購入前に\土地に関する情報を購入者に知らせたくなかったら、\あなたの約款のノートカードは白紙でかまいません。 + +約款は購入を考えている人に、規則、ガイドライン、\文化的情報や単にあなたが期待することを伝えるためにも\使えます。 ここには、区画規制、建造物規制、\支払いオプション、それから購入者が事前に\目を通して同意しておくべきだとあなたが思う重要な情報をすべて\入れることができます。 + +購入者がボックスをチェックして約款に同意しないかぎり、\購入の手続きは完了しません。 不動産\約款が定められている区画であれば、すべて[土地情報]から\約款をいつでも閲覧できます。 </message> </alert> - <alert name="BuyObjectOneOnly" title="オブジェクトの購入不可"> + <alert name="BuyObjectOneOnly" title="オブジェクトを購入できません"> <message name="message"> - 一度に一つ以上のオブジェクトを購入できません。 -ただ一つのオブジェクトを選択し、再び試みてください。 + 一度に複数のオブジェクトは購入できません。 +選択するオブジェクトを1つだけにして、もう一度試してください。 </message> </alert> - <alert name="BuyObjectOneOwner" title="オブジェクトの購入不可"> + <alert name="BuyObjectOneOwner" title="オブジェクトを購入できません"> <message name="message"> - 同時に異なった所有者からオブジェクトを購入できません。 -ただ一つのオブジェクトを選択し、再び試みてください。 + 複数のオーナーから同時にオブジェクトを購入することはできません。 +単一のオブジェクトを選択し、もう一度試してください。 </message> </alert> - <alert name="BuyContentsOneOnly" title="コンテンツの購入不可"> + <alert name="BuyContentsOneOnly" title="コンテンツを購入できません"> <message name="message"> - 一度に一つ以上のオブジェクトを購入できません。 -ただ一つのオブジェクトを選択し、再び試みてください。 + 一度に複数のオブジェクトのコンテンツは購入できません。 +選択するオブジェクトを1つだけにして、もう一度試してください。 </message> </alert> - <alert name="BuyContentsOneOwner" title="コンテンツの購入不可"> + <alert name="BuyContentsOneOwner" title="コンテンツを購入できません"> <message name="message"> - 同時に異なった所有者からオブジェクトを購入できません。 -ただ一つのオブジェクトを選択し、再び試みてください。 + 複数のオーナーから同時にオブジェクトを購入することはできません。 +単一のオブジェクトを選択し、もう一度試してください。 </message> </alert> <alert name="PermYes"> @@ -3655,127 +3744,126 @@ Default: off </alert> <alert name="BuyOriginal"> <message name="message"> - L$[PRICE]で[OWNER]からオリジナルのオブジェクトを購入しますか? -あなたが本オブジェクトの所有者になります。 -あなたには以下の権限があります。 -修正:[MODIFYPERM] -コピー:[COPYPERM] -再販、またはプレゼント:[RESELLPERM] + オリジナルのオブジェクトを[OWNER]からL$[PRICE]で購入しますか? +これにより、あなたがオブジェクトのオーナーになります。 +可能な操作は、 +変更:[MODIFYPERM] +、コピー:[COPYPERM] +、再販/プレゼント[RESELLPERM]です。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="BuyOriginalNoOwner"> <message name="message"> - L$[PRICE]でオリジナルのオブジェクトを購入しますか? -あなたが本オブジェクトの所有者になります。 -あなたには以下の権限があります。 -修正:[MODIFYPERM] -コピー:[COPYPERM] -再販、またはプレゼント:[RESELLPERM] + L$[PRICE]でオリジナルのオブジェクトを購入しますか? +これにより、あなたがオブジェクトのオーナーになります。 +可能な操作は、 +変更:[MODIFYPERM] +、コピー:[COPYPERM] +、再販/プレゼント[RESELLPERM]です。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="BuyCopy"> <message name="message"> - L$[PRICE]で[OWNER]からコピーを購入しますか? -そのオブジェクトはあなたの持ち物にコピーされます。 -あなたには以下の権限があります。 -修正:[MODIFYPERM] -コピー:[COPYPERM] -再販、またはプレゼント:[RESELLPERM] + コピーを[OWNER]からL$[PRICE]で購入しますか? +購入したオブジェクトは、あなたの持ち物にコピーされます。 +可能な操作は、変更:[MODIFYPERM] +、コピー:[COPYPERM] +、再販/プレゼント[RESELLPERM]です。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="BuyCopyNoOwner"> <message name="message"> - L$[PRICE]でコピーを購入しますか? -そのオブジェクトはあなたの持ち物にコピーされます。 -あなたには以下の権限があります。 -修正:[MODIFYPERM] -コピー:[COPYPERM] -再販、またはプレゼント:[RESELLPERM] + L$[PRICE]でコピーを購入しますか? +購入したオブジェクトは、あなたの持ち物にコピーされます。 +可能な操作は、変更:[MODIFYPERM] +、コピー:[COPYPERM] +、再販/プレゼント[RESELLPERM]です。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="BuyContents"> <message name="message"> - L$[PRICE]で[OWNER]からコンテンツを購入しますか? -それらはあなたの持ち物にコピーされます。 + コンテンツを[OWNER]からL$[PRICE]で購入しますか? +購入したコンテンツは、あなたの持ち物にコピーされます。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="BuyContentsNoOwner"> <message name="message"> L$[PRICE]でコンテンツを購入しますか? -それらはあなたの持ち物にコピーされます。 +購入したコンテンツは、あなたの持ち物にコピーされます。 </message> <option name="Buy"> 購入 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmPurchase"> <message name="message"> - この取引は以下です: + この手続きをすると以下のことが起こります。 [ACTION] -この購入を続行したいですか。 +購入の手続きを続けますか? </message> <option name="Confirm"> 確認 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="ConfirmPurchasePassword"> <message name="message"> - この取引は以下です: + この手続きをすると以下のことが起こります。 [ACTION] -この購入を続行したいですか。 -あなたのパスワードを再入力してそして確認をクリックしてください。 +購入の手続きを続けますか? +パスワードを再入力し、[確認]をクリックしてください。 </message> <option name="ConfirmPurchase"> - 購入を確認 + 購買を確認 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> <alert name="SetPickLocation"> <message name="message"> - 注意: -あなたは、本ピックのロケーションを更新しましたが、他の詳細は、元の値のままです。 + メモ: +本ピックのロケーションを更新しましたが +、他の詳細は元の値のままになります。 </message> <option name="OK"> OK @@ -3783,181 +3871,247 @@ Default: off </alert> <alert name="MoveInventoryFromObject"> <message name="message"> - コピー無し在庫目録を選択しました。 -これらの項目は、あなたの在庫目録に移動され、コピーはされません。 + [コピー禁止]の持ち物アイテムが選択されました。 +これらの~アイテムはコピーされないまま、あなたの持ち物に移動されます。 + -在庫目録項目を移しますか。 +アイテムを動かしますか? </message> + <ignore name="ignore"> + コピー禁止の持ち物をオブジェクトから移動させるとき + </ignore> <option name="Move"> - 移動する + 移動 </option> <option name="Don'tMove"> - 移動できない + 移動しない </option> </alert> <alert name="MoveInventoryFromScriptedObject"> <message name="message"> - コピー無し在庫目録項目を選択しました。 -これらの項目はあなたの在庫目録に移動され、コピーはされません。 + [コピー禁止]の持ち物アイテムが選択されました。 これらの +アイテムはコピーされないまま、あなたの持ち物に移動されます。 -このオブジェクトはスクリプトされているので、あなたの在庫目録にこれらの項目を移すことは -スクリプトが誤作動する原因になる可能性があります。 +このオブジェクトはスクリプト付きなので、 +あなたの持ち物に移動させると誤動作が起きるかもしれません。 -在庫目録項目を移しますか。 +アイテムを動かしますか? </message> + <ignore name="ignore"> + コピー禁止の持ち物をスクリプト付きオブジェクトから移動させるとき + </ignore> <option name="Move"> - 移動する + 移動 </option> <option name="Don'tMove"> - 移動できない + 移動しない </option> </alert> <alert name="ClickActionNotPayable"> <message name="message"> - 警告: Pay Object クリックオークションは設定されましたが、しかしこれはスクリプトが金銭() イベントに -追加された場合にはだけ作動します。 -これは、居住者が一般に金銭がそれらに支払われる時にどういうわけか -反応するオブジェクトを期待するからです。 + 警告: [オブジェクトへの支払い]ボタンが設定されましたが +money()イベントを含むスクリプトを追加しないと作動しません。 +一般的に住人はオブジェクトにお金が支払われると +何らかの反応があると思うため、このような仕様となっています。 </message> + <ignore name="ignore"> + money()イベントなしに[オブジェクトに支払う]を設定するとき + </ignore> </alert> <alert name="OpenObjectCannotCopy"> <message name="message"> - このオブジェクト内に、あなたがコピーできるアイテムはありません + このオブジェクトにあなたがコピーしてよいアイテムはありません。 </message> </alert> - <alert name="LoadAccountTransactions"> + <alert name="WebLaunchAccountHistory"> <message name="message"> - 取引の詳細を見るために -[URL]に行ってください。 + SecondLifeウェブ・ページを開いてアカウント履歴を確認しますか? </message> - <option name="OK"> - OK + <ignore name="ignore"> + 口座履歴のウェブ・ページをロードするとき + </ignore> + <option name="Gotopage"> + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </alert> - <alert name="HelpReportAbuse"> + <alert name="HelpReportAbuseEmailLL"> <message name="message"> - Use this tool to report violations of the Terms of Service and Community Standards. See: + このツールで、利用規約ならびにコミュニティ・スタンダード +への違反を報告してください。 参照先: +- http://secondlife.com/corporate/tos.php http://secondlife.com/corporate/cs.php - -All reported abuses of the Terms of Service and Community Standards -are investigated and resolved. You will receive an email informing you -of the resolution when it occurs. -You can also view the incident resolution on the Police Blotter at: - +- +利用規約ならびにコミュニティ・スタンダードへの違反は +すべて調査され、解決されます。 問題が解決した時点で、Eメールで +ご報告します。 解決結果は下記アドレスの +[警察日誌]でも表示可能です: +- http://secondlife.com/community/blotter.php </message> </alert> + <alert name="HelpReportAbuseEmailEO"> + <message name="message"> + 重要: このレポートはLinden Lab社ではなく、\あなたが現在いる地域のオーナーに送られます。 +- +あなたが今いる地域のオーナーは、住人と訪問者への\サービスの一環として、この地域からのレポートをすべて\受け付け、解決することに同意しています。 Linden Lab社が\あなたがここから提出するレポートを調査することはありません。 +地域のオーナーは、不動産約款で指定している\地元の規則を基に、報告された問題を解決します。 +([世界]のメニューから[土地情報]を選ぶと、約款を\閲覧できます。) +- +このレポートに関する解決策は、この地域にだけ当てはまります。\住人がセカンドライフの他の地域へアクセスする際、\このレポートの結果に影響されることはありません。 Linden Lab社だけが\セカンドライフ全域におけるアクセス制限権を持っています。 + </message> + </alert> <alert name="HelpReportBug"> <message name="message"> - Use this tool to report technical features that do not perform -as described or expected. All bug reports are investigated and -resolved. No email response will be sent, you may reply to the -auto-response email to add more details to your report. -If you are having a technical difficulty, please contact Support at: - + このツールは、説明どおりに動作しないテクニカルの機能の報告「のみに」 +使用してください。説明はできるだけ詳細にしてください。 +自動応答メールへの返信に詳細を付け加えてもかまいません。 +バグの報告はすべて、調査、査定されます。 Eメールでの返答は送られません。 +- +技術的な問題があるときは、以下から[サポート]に連絡してください: http://secondlife.com/community/support.php +- +注意:: 不完全な報告には調査は行われません。 </message> </alert> <alert name="HelpReportAbuseSelectCategory"> <message name="message"> - この嫌がらせ報告のカテゴリを選択してください。カテゴリを選択することにより、嫌がらせ報告の処理や保管に大変役立ちます。 + この嫌がらせ報告のカテゴリーを選択してください。 + +嫌がらせ報告を適切に処理できるように、カテゴリーの選択をお願いいたします。 </message> </alert> <alert name="HelpReportBugSelectCategory"> <message name="message"> - Please select a category for this bug. + このバグのカテゴリーを選択してください。 -Selecting a category helps us file and process bug reports. +バグ報告を適切に処理できるように、カテゴリーの選択をお願いいたします。 </message> </alert> <alert name="HelpReportAbuseAbuserNameEmpty"> <message name="message"> - 嫌がらせを行った者の名前を入力してください。あなたの正確な情報は、嫌がらせ報告の処理や保管に大変役立ちます。 + 嫌がらせ行為をした人の名前を入力してください。 + +嫌がらせ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportAbuseAbuserLocationEmpty"> <message name="message"> - 嫌がらせの起きた場所を入力してください。あなたの正確な場所(地点)は、嫌がらせ報告の処理や保管に大変役立ちます。 + 嫌がらせがあった場所を入力してください。 + +嫌がらせ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportAbuseSummaryEmpty"> <message name="message"> - 起きた嫌がらせの要旨を入力してください。あなたの正確な要旨は、嫌がらせ報告の処理や保管に大変役立ちます。 + 嫌がらせの概要を入力してください。 + +嫌がらせ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportBugSummaryEmpty"> <message name="message"> - Please enter a summary of the bug. + バグの概要を入力してください。 -Entering an accurate summary helps us file and process bug reports. +バグ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportAbuseDetailsEmpty"> <message name="message"> - 嫌がらせの詳細説明を入力してください。名前や、報告する事象等、できるだけ詳しくわかりやすく記入してください。 -あなたの正確な説明は、嫌がらせ報告の処理や保管に大変役立ちます。 + 嫌がらせの詳細な説明を入力してください。 +名前や嫌がらせの詳細をできるだけ具体的に記入してください。 + + +嫌がらせ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportBugDetailsEmpty"> <message name="message"> - Please enter a detailed description of the bug. -Be as specific as you can, including steps to reproduce the bug -if possible. + バグについての詳細な説明を入力してください。 + +バグがどのような条件で再現するかなどを +できるだけ具体的に示してください。 -Entering an accurate description helps us file and process bug reports. +バグ報告を適切に処理できるように、正確な記述をお願いいたします。 </message> </alert> <alert name="HelpReportAbuseContainsCopyright"> <message name="message"> - 親愛なる居住者の皆様へ: -著作権侵害に関する報告は http://secondlife.com/corporate/dmca.phpの記述に従ってのみ提出することができます。 -著作権侵害に関する報告は『嫌がらせ報告』を通して提出され場合、自動的に廃棄されます。報告が著作権侵害に関しない場合は、本ウインドウを閉じ、報告を提出してください。 -ありがとうございます。 -Linden Lab + 親愛なる住人の皆様へ: +著作権侵害に関する報告は +http://secondlife.com/corporate/dmca.phpの記述に従ってのみ提出することができます。 +「嫌がらせ報告」を通じて著作権侵害に関する報告を提出しても、その報告は自動的に破棄されます。 + 著作権侵害に関係のない報告であれば、このウィンドウを閉じて報告を提出することができます。 + +敬具。 + +Linden Lab </message> </alert> <alert name="FailedRequirementsCheck"> <message name="message"> - 次の要求されたコンポーネントは[FLOATER]から失われています。: + 以下の必要なコンポーネントが、[FLOATER]から抜け落ちています [COMPONENTS] </message> </alert> - <alert name="ReplaceAttachment" title="既存の付属品を入れ替え"> + <alert name="ReplaceAttachment" title="既存の付属品を置換"> <message name="message"> - この体の部位には、すでに装着されているオブジェクトが存在します。選択されたオブジェクトとそれを取り替えますか? + 体のこの部位にはオブジェクトが装着されています。 +選択されたオブジェクトと置き換えますか? </message> - <option ignore="自動的に交換" name="Yes"> + <ignore> + 現在、装着しているものを置換するとき + </ignore> + <option ignore="自動置換" name="Yes"> はい </option> - <option ignore="交換しない" name="No"> + <option ignore="置き換えない" name="No"> いいえ </option> </alert> - <alert name="BusyModePay" title="取り込み中モードの警告"> + <alert name="BusyModePay" title="ビジー・モードの警告"> <message name="message"> - 使用中モードです。 -それはあなたがこの支払いで交換として提供された項目も -受け取れないことを意味します。 + 現在、ビジー・モードのため、この支払いと +引き換えのアイテムを受け取ることが +できません。 -この取引を完了するまえに -使用中モードを去りたいですか。 +この取引を完了する前に、ビジー・ +モードを外しますか? </message> - <option ignore="いつも使用中モードにしておく" name="Yes"> + <ignore> + ビジー・モードの人またはオブジェクトに支払うとき + </ignore> + <option ignore="常にビジー・モード外" name="Yes"> はい </option> - <option ignore="使用中モードのままにしない" name="No"> + <option ignore="ビジー・モードに固定" name="No"> いいえ </option> </alert> <alert name="ConfirmEmptyTrash"> <message name="message"> - Are you sure you want to permanently remove -the contents of your Trash folder? + ゴミ箱フォルダの中身を完全に削除しようとしています。操作を続行しますか? + </message> + <ignore name="ignore"> + 持ち物内の[ごみ箱]フォルダを空にするとき + </ignore> + <option name="Yes"> + はい + </option> + <option name="No"> + いいえ + </option> + </alert> + <alert name="ConfirmEmptyLostAndFound"> + <message name="message"> + 遺失物フォルダの中身を完全に削除しようとしています。操作を続行しますか? </message> + <ignore name="ignore"> + 持ち物内の[遺失物]フォルダを空にするとき + </ignore> <option name="Yes"> はい </option> @@ -3965,4 +4119,53 @@ the contents of your Trash folder? いいえ </option> </alert> + <alert name="CopySLURL"> + <message name="message"> + 以下のSLURLがクリップボードにコピーされました。 + + [SLURL] + + 他の人がアクセスしやすいよう、ウェブ・ページに載せたり + あなたのブラウザのアドレス・バーに貼り付けてみましょう。 + </message> + <ignore name="ignore"> + SLURLをクリップボードにコピーするとき + </ignore> + </alert> + <alert name="IMSessionStartError"> + <message name="message"> + [RECIPIENT]との新しいIMセッションの開始エラー。 + [REASON] + </message> + <option name="OK"> + OK + </option> + </alert> + <alert name="IMSessionStartNotVerified"> + <message name="message"> + [RECIPIENT]との新しいIMセッションの開始エラー。 + [REASON] + </message> + <option name="OK"> + OK + </option> + </alert> + <alert name="IMSessionEventError"> + <message name="message"> + エラー[EVENT][RECIPIENT]。 + [REASON] + </message> + <option name="OK"> + OK + </option> + </alert> + <alert name="ForceCloseIMSession"> + <message name="messsage"> + [NAME] とのIMを閉じてください。 + [REASON] + </message> + <option name="OK"> + OK + </option> + </alert> </alerts> diff --git a/linden/indra/newview/skins/xui/ja/floater_about.xml b/linden/indra/newview/skins/xui/ja/floater_about.xml index 8940e08..d78f50f 100644 --- a/linden/indra/newview/skins/xui/ja/floater_about.xml +++ b/linden/indra/newview/skins/xui/ja/floater_about.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater_about" title="Second Lifeについて"> <text_editor name="credits_editor"> - Second Lifeは、Philip、Andrew、Tessa、Cory、Frank、James、Doug、Hunter、Richard、John、Eric、Avi、AaronB、AaronY、Ian、Peter、Mark、Robin、Stephen、Tracy、Ryan、Alberto、Haney、Tanya、JimJ、Dan、Ben、Stephanie、Tim、Evan、Catherine、Colin、Chris、Reuben、Charity、Jeska、James、JonHenry、Kelly、Callum、Char、Daniel、DavidF、Don、Jeff、Lauren、Lee、Michael、Ramzi、Vektor、Steve、TomY、Tess、Kona、Brent、Clarissa、PeterP、Jesse、Annette、Cyn、Blue、Ginsu、Jonathan、Karen、Adam、Nova、Deana、Lizzie、Patsy、DavidK、Isaac、Pathfinder、Monroe、Jill、Benny、Altruima、Rheya、Jennifer、Jack、DaveP、Brad、Mick、Babbage、Elisabeth、Brian、Beth、Data、Ethan、Wendy、Nicole、Sky、Jeffrey、Zero、Coffee、Tesla、Kenny、Makiko、Nigel、Teeple、Lucy、Mia、Dee、Guy、Harry、Liana、Branka、Jimbo、Aura、Vasuda、SarahD、bethanye、Torley、Runitai、MikeS、PaulM、Milo、Hermia、JoeM、Melanie、Rejean、DSmith、SMiller、Susan、Jose、DongYun、Justin、Andrey、Syrah、Donovan、Henrik、Nora、Lexie、AC、Donna、ChrisC、Alex、Leyla、Kyle、Mathew、Devin、Joshua、DanC、Jessica、Harmony、Claudia、Tramel、Glenn、Betsy、Fritz、Jun、Adam、Cassandra、Ken、RyanWと、その他多数の人達によって作成されました。 + Second Lifeは次の方たちのご協力で実現しました。 a2, Aaron, Abishai, adrian, Alberto, Alex, Alexei, Alfred, Alice, Altruima, Amber, Anastasia, Andrea, Andrew, Andy, Annette, Anthony, Aura, Avi, Babbage, Beast, beez, Belinda, Ben, Benjamin, Benny, Betsy, Bill, Blue, Bo, Bob, Brad, Branka, Brent, Brian, Bruce, Bub, Bucky, Bunny, Burgess, Buttercup, Callum, Casino, Cat, Catherine, Chadrick, Char, Charity, Charlie, Chiyo, Chris, Christopher, Civic, Claudia, Cleopetra, Cole, ColeD, Colin, Colleen, Cornelius, Cory, Cube, Cupid, Cyan, Cyn, Dan, DanceStar, Daniel, Data, Dave, David, David2, Deana, Debra, Dee, Dek, Del, Dez, Don, Donovan, Dore, Doug, drunkensufi, Dummy, dustin, Eddie, Eileen, Elena, Elle, Emily, Eric, erika, Erin, Ethan, Evan, Eve, Everett, Firefly, Flashpoint, Fordak, Frank, Fred, Fritz, Frontier, Garry, George, Gia, Ginsu, Glenn, Gulliver, Guy, Hamlet, Haney, Harmony, Harry, Helen, Hello, Henrik, Heretic, Hermia, Holly, Hungry, Hunter, Ian, Icculus, Irfan, Iris, Isaac, Isabel, IsThat, Ivy, Izzy, Jack, Jacqui, Jake, James, Jane, Janet, Jaron, Jay, Jean, Jed, Jeff, Jennifer, Jeremy, Jeska, JeskaTest, Jesse, Jill, Jim, Jimbo, Joe, John, Jon, Jonathan, Joon, Jose, Joshua, Jp, June, Justin, Karen, Kari, Karinelson, Kelly, Kelvin, Ken, Kenny, Kent, Kevin, Kona, Kyle, LaughingMan, Lauren, Lawrence, Lee, Leopard, Leprechaun, Leviathania, Lexie, Leyla, Liana, Libby, Lightfoot, Lizzie, Lock, Logan, Loki, Louie, Lucy, Luke, Madhavi, Magellan, Magenta, Makiko, Marius, Mark, Martin, Matthew, Maurice, Mayor, Melanie, Meta, Mia, Michael, MichaelFrancis, Mick, Migyeong, Mikeb, MikeT, Milo, Mitch, Mogura, Monkey, Monroe, Morpheus, Natria, Neo, Nicolas, Nicole, Nigel, Noel, Nora, Nova, Otakon, Page, Pathfinder, Patsy, Paul, Peter, Philip, Phoenix, PierreLuc, Pilouk, Pony, Professor, Qarl, Rachelle, Ramzi, Ray, Realestate, Red, Rejean, Reuben, Rheya, Richard, Rika, Rob, Robin, Roosevelt, Ross, Runitai, Ruth, Ryan, Sabin, Sally, Sam, Sarah, Satoko, Sean, Secret, Sejong, Senator, Seth, Showme, Siobhan, Sky, Sleepy, Spike, Stefan, Stephanie, Stephany, Stephen, Steve, Stryfe, sturm, Sudhi, Sunil, Swiss, Sylvain, Tanya, Tbone, Teeny, Teeple, Teresa, Tesla, Tess, Tessa, Thomas, Thrax, Thumper, Tim, Tobin, Todd, Tofu, Tom, Torley, Tracy, Uncle, Varas, Vasudha, Vektor, Ventrella, Video, Viola, Walker, Warren, Wendy, Which, Xan, Xander, Xenon, Xtreme, Yedwab, Yohan, Yool, Yoz, Yuko, Zach, Zee, Zero このほか大勢の方たち。 -これが、現在の最高のバージョンであることを保証するために、支援してくれた次の居住者の方々に厚く感謝いたします。 -Kyrah Abattoir、Icesis Anansi、Clifton Antonelli、Nargus Asturias、Justizin Austinmer、Drake Bacon、Bitzer Balderdash、McWheelie Baldwin、SuezanneC Baskerville、Sweetheart Baskerville、Logan Bauer、Malarthi Behemoth、phoenix Behemoth、Eva Bellambi、Samgame Bertrand、Woody Blair、Tin Bling、Bibi Book、Barney Boomslang、Eric Boyer、Chromal Brodsky、Kerian Bunin、Lara Bunin、BigRick Byrd、Jillian Callahan、Hypatia Callisto、Frans Charming、nathalie Christensen、Francis Chung、pizzaguy Clutterbuck、Evo Commons、Entity Cosmo、Grazel Cosmo、Tiger Crossing、Fremont Cunningham、Jaki Daligdig、Sugar Darling、Todd David、Norman Desmoulins、Gxeremio Dimsum、Happy Dimsum、Kim Dingo、Roy Domela、Cory Edo、Delu Elytis、DBDigital Epsilon、Leeza Everett、Garth FairChang、Snowflake Fairymeadow、Khamon Fate、lex Fitzcarraldo、Kitto Flora、Angel Fluffy、CrystalShard Foo、Raudf Fox、Govindira Galatea、Rizpah Galatea、Tre Giles、Gattz Gilman、Kex Godel、Armandi Goodliffe、Tsu Goodliffe、Nickolas Goodman、Damen Gorilla、Nytemyst Grace、Mhaijik Guillaume、Gleeb Gupte、Ebonfire Harbinger、Bethanee Heaney、Jenny Hicks、Sandling Honey、Victoria Jacques、Adso Krogstad、Travis Lambert、simon Lameth、Duffy Langdon、Aaron Levy、Jade Lily、Gwyneth Llewelyn、Lola Lollipop、Michi Lumin、KaiLastOfTheBrunnenG Macdonald、Jesse Malthus、Herry Maltz、Seth Mandelbrot、Raavi Mann、Shirley Marquez、Dnate Mars、Ima Mechanique、Hawk Mendicant、Mercury Metropolitan、Haravikk Mistral、Trent Mondrian、Nexus Nash、Seraph Nephilim、Lewis Nerd、Aurael Neurocam、Lex Neva、Prokofy Neva、Seagel Neville、Kate Nicholas、Didde Nielsen、Richard Noonan、crevan Nori、Maczter Oddfellow、vanler Odets、Fat Ogre、Hamncheese Omlet、Strife Onizuka、Panthar Orlowski、Jessica Ornitz、Ron Overdrive、OmniCron Overlord、Dargon Pacer、Kar Parks、Eloise Pasteur、Caliandris Pendragon、Julianna Pennyfeather、Iron Perth、Shawk Pertwee、Mera Pixel、Elle Pollack、Phoenix Psaltery、Hank Ramos、Jon Ree、Tam Ree、Zi Ree、Jon Rolland、BamBam Sachertorte、kai Sachertorte、Mily Sartre、ice Semple、Desmond Shang、DigiKatt Shaw、Felix Sholokhov、Rhyph Somme、Rain Soothsayer、Oz Spade、squeekachu Spearmann、Wesley Spengler、Belaya Statosky、eltee Statosky、Khashai Steinbeck、Draco Steinhardt、Hope Stilman、Ashen Stygian、Seifert Surface、Gigs Taggart、Dolmere Talamasca、JayJay Talamasca、Becky Tardis、Fenris Tardis、Cubey Terra、Osprey Therian、Millie Thompson、John Toonie、Charlene Trudeau、Lyr Tuppakaka、Indy Turner、Luthien Unsung、Random Unsung、Huns Valen、Valdemar Virgo、Gordon Wendt、Mike Westerburg、Wayfinder Wishbringer、Lee Wormser、Aimee Xia、nimrod Yaffle、Yiffy Yaffle、Elle74 Zaftig、そしてその他多数の方々。 +このバージョンをこれまでで最高のものにしてくださった、以下の住人のみなさんに感謝します。 AlexandriaS Aabye, devilite Aabye, Dynamqting Aabye, hellebore Aabye, Maddog Aabye, Urru Aabye, mabare Abattoir, Didi Abdallah, Elwood Abernathy, Jake Abramovich, Schort Achterbahn, Divily Ackland, JadeCharlet Ackland, Kevin Acorn, Binvis Acronym, Robert Adelaide, Atte Aderdeen, KiVanyel Adria, Krillian Adria, Mandi Adria, Butch Adzebills, Beccaboo Aero, Akasha Aferdita, Nicole Aferdita, Nero Agnomen, Hay Ah, Oxoc Ah, Sironl Ah, evokue Ahn, nycbadboy Ahn, Taan Ahn, Cyres Aida, TalNova Aji, Illusion Akula, Xen Akula, Jessa Alba, Alba Albert, kernowed Albert, Blaine Albion, AnneMarie Alcott, Bo Alcott, Cindie Alcott, Cunundrum Alcott, fighter Alcott, Jarad Alcott, Marcello Aldwych, Xenia Alemany, CellMaster Alexander, Molly Alexander, Aerotisma Alexandre, Ghostofgoat Alexandre, Took Alexandre, Ty Alexandre, Christophe Perrin / Krisp Alexandre, Adec Alexandria, Kiwi Alfa, Rowr Aliev, aivlys Allen, asclepius Allen, Aveyond06 Allen, Calvin Allen, gayfrench Allen, gender Allen, Grayson Allen, Jak Allen, Jerdog Allen, MariahMarie Allen, Metzyn Allen, Misty26 Allen, moshetzi Allen, nayara Allen, NH Allen, Pegi Allen, Ponesco Allen, Rap4rag Allen, Safer Allen, sobroke Allen, Bethann Allstar, Sloan Almendros, Ogro Almodovar, Raymondo Alonzo, Rebeca Alonzo, Omega Alphabeta, Elirien Alturas, Rick Alvarado, Golam Amadeus, Kea Amarula, Ariella Amat, Popas Amat, xxjojxx Amat, Jamie Amdahl, Helyos Ames, julies Ames, Keisha Ames, Javz Amsterdam, Kathy Amsterdam, Twistaspliff Amsterdam, darian Anabuki, Dnali Anabuki, Wes Anaconda, Serra Anansi, Britney Anatine, pax Anatine, Ranya Anatine, sientaya Anatine, Siowen Anatine, Padu Andalso, Chanel Anderson, Donna Andrews, Trixie Angel, Macphisto Angelus, meQal Anna, Aznxer Antfarm, Karlo Antonelli, Maksimilian Antonelli, Vala Antonelli, Athoni Antonioni, klement Antwerp, lildeadgirl Antwerp, GeordieJohn Anubis, KatanaBlade Anubis, Diag Anzac, Lunarlie Anzac, Picker Apogee, Azuby Apparatchik, brianica Appin, SwedenArtSheepdogs Aquacade, CaSimone Aquitaine, Dexter Aquitaine, Pericat Aquitaine, Sunshine Araw, Bino Arbuckle, Evangeline Arcadia, Niles Argus, pe Argus, BenneDJezzerette Ariantho, Karmaticdragon Ariantho, Teren Aridian, Garcia Ariel, Ina Arkin, alva Arliss, Noriyoko Arliss, Harle Armistice, Avi Arrow, Ming Arrow, Rox Arten, Razitra Artizar, Mandy Asano, Ty Asano, Kristoff Asbrink, Skye Asbrink, Threasher Asbrink, Daniel Ash, Dion Ashby, Eva Ashby, Ravenal Ashby, TOPDIME Ashby, danielluh Ashton, Deb Ashton, ach Asp, cokeser Asp, lastping Asp, Posrednik Asp, Notypewell Astro, Nargus Asturias, SiRiS Asturias, yol Asturias, ZATZAi Asturias, Animus Asylum, Sang Asylum, SomethingReal Atkey, Dakota Atlanta, Irie Atlantis, Matt Attenborough, Nirva Attenborough, CaptJosh Au, Goren Auer, Jackamo Auer, Jonathan Auer, Tisdi Auer, Chris Auk, Raven Axon, Shawn Ay, TJ Ay, ares Ayres, Cazz Ayres, Eon Ayres, Laura Ayres, zoeba Ayres, Naomi Babcock, Eldrich Babeli, Adrianna Babenco, She Babenco, sterick Babenco, corto Babii, Dia Babii, EvilCutz Babii, Flooxx Babii, Girl Babii, Imraanos Babii, Iv Babii, Lizthebabe Babii, Torrence Babii, Chrystal Babii, Sara Bachman, dzb0 Bade, Doug Bagration, Hobbit Bagration, Abert Bailey, Bambi Bailey, EveNice Bailey, Kaliya Bailey, Kriz Bailey, Leen Bailey, Leonine Bailey, Minke Bailey, Nightjaxs Bailey, Peyton Bailey, Shan Bailey, Stevo Bailey, Tariv Bailey, cream Bailly, Ezekiel Bailly, Gianna Bailly, Hells Bain, Briauna Bainbridge, AnaSofia Bakalava, Jonas Bakalava, Micki Baker, Anita Balczo, Naomi Balczo, Nathan Balder, Bibi Balhaus, Sponz Balhaus, Ainsleigh Ballinger, Dimitry Ballinger, Miriam Ballinger, Rik Ballinger, Trey Ballinger, Zagor Ballinger, Zek Ballinger, Kilara Balnarring, Maya Balut, Franz Bamaisin, Manolo Bamboo, Yuki Bamboo, Oliver Bandit, Pirate Bandit, Outy Banjo, winkler Banjo, SabreWulf Banshee, Akeela Banting, Elke Banting, Arkesh Baral, Barber Barbarossa, Samantha Barbee, Aruk Barbosa, Ayahuasca Barbosa, Bastill Barbosa, Corleone Barbosa, Padrig Barbosa, Samakh Barbosa, seat Barbosa, Topper Barbosa, Thery Bardeen, Bridgitte Bardot, Nici Barley, Annie Barnard, Josse Barnard, DB Barnes, Kitty Barnett, Threshin Barnett, Amy Barnett, Scott Baron, Jeremy Barracuda, Verbuda Barragar, Daphne Barrett, Fenleab Barrett, Lindsey Barrett, Smiley Barry, Denise Barrymore, Manuela Barrymore, Nell Barrymore, Sensation Barrymore, BraadWorst Barth, XxRevelationxX Barthelmess, Fleur Bartlett, Marina Bartlett, Lucius Bartz, Mack Bartz, Astley Bascom, dolomite Bascom, Dags Basevi, Lena Basevi, crystal Basiat, SuezanneC Baskerville, Sweetheart Baskerville, Demi Bates, Demon Bates, kane Bates, Will Bates, ShadixBear Bathgate, Carlotta Batra, Bruce Batz, Silentborn Batz, Dominik Bauer, Logan Bauer, Boz Baxter, Camryn Baxter, diesus Baxter, Drett Baxter, Gazmanjones Baxter, Kiley Baxter, Schwenny Baxter, Shimboo Baxter, Stoffe Baxter, Diamond Baxter, Gruntos Baxter, BC Bayliss, Bibi Bayliss, Backly Beam, BigFoot Beam, JuJu Beam, nati Beam, Pelgrim Beam, ELLiebob Bean, LeatherElf1 Beat, Nikky Beat, Carl Beattie, Fe Beattie, sonoma Beatty, Henri Beauchamp, TimTam Beauchamp, Conrad Beaumont, Dieudonnee Beaumont, Kitten Beaumont, Lucilla Beaumont, Odina Beaumont, PCBRANDY Beaumont, PLASTOK Beaumont, Sheree Beaumont, Sweet Beaumont, Olivier Beaumont, Busybee Beaver, Chiheb Bechir, Caspian Beck, GoldenGamer Beck, icar Beck, Jigoes Beck, Matsumoto Beck, Millie Beck, Rhino Beck, Ronor Beck, ropland Beck, wai Beck, laurionna Beckenbauer, Jeffery Beckersted, Dominick Beckham, Druu Becloud, Holger Becloud, Duce Bedlam, Beach Beebe, Manicexpression Beebe, Nicolette Beebe, Feril Beeks, BillyJoe Beerbaum, Lola Beerbaum, Pimppdog Beerbaum, Baylee Beery, DrathnotT Behemoth, Malarthi Behemoth, phoenix Behemoth, Trinity Bekkers, Dioana Bellah, KissesRhawt Bellambi, Bream Bellman, Hazel Bellow, Milo Bellow, Corvette Beltran, Lefty Belvedere, Jaden Benavente, Bianca Bender, Jeremy Bender, Mercedes Benedek, Albert Benelli, Dodi Benelli, Emili Benelli, laurette Benelli, ninake Benelli, Evazion Benelli, Elaine Bennett, Izabella Bentham, Carol Bentley, Deedrick Benton, Joel Berblinger, Lord Berchot, Pele Berchot, Marimar Berchot, Melody Beresford, Brielle Bergbahn, chrissie Bergson, Kody Bergson, Bit Berjis, Kevin Bernal, Dorie Bernstein, mystic Berry, Razza Berry, Bella Bertone, Taylor Berzin, liz Bessie, Kekken Biberman, Nicolas Biddle, Halbert Bienenstich, terrycrow Bigwig, Jasmine Bijoux, Kala Bijoux, Dano Bikcin, enzo Bikcin, Angle Binder, Cuffs Binder, Roxtor Binder, Tom Binder, Agamemnon Bing, Chalander Bing, Gigi Bing, runeking3007 Bing, Monsieur Bingyi, Angelica Biondetti, Melissa Birge, reeneebob Birmingham, Anubis Bishop, Danica Bishop, Mowesy Bisiani, Marteas Biziou, Karla Bjornson, Roxie Bjornson, Travis Bjornson, Atlwolf Blabbermouth, Rice Black, Nathan Black, Amanda Blackmountain, Disstraction Blackthorne, Miriya Blackthorne, Teagan Blackthorne, Orko Blanchard, Neural Blankes, Random Blankes, Shaura Blazer, Nethermind Bliss, dayanne Boa, Denideny Boa, lecosutre Boa, naholc Boa, NITR0US Boa, Prana Boa, RS Boa, penelope Bobak, Bad Bobbysocks, Ryuujin Boccara, Joey Bock, Elkissa Bode, Annika Boehm, Babyblues Boffin, Snodude101101 Bogan, Dirk Bogart, Jily Bogart, Pompo Bombacci, Ascanio Bonetto, Bony Bonetto, Casanova Bonetto, Cuncittina Bonetto, Frede Bonetto, Ervee Bonne, Jolanda Bonne, Poppy Bonne, Becky Book, Bibi Book, Barney Boomslang, Sam Boomslang, Steeven Boorman, Rogue Borgnine, Summer Borgnine, Rafe Borrelly, Equitus Bosch, Peter van den Bosch, tessa Bosshart, Hermione Bossy, Mr Bossy, Rhiannon Bossy, Aspen Bossy, Marisela Bouchard, Tony Bouchard, Annita Boucher, Aster Boucher, Katy Boucher, Lisae Boucher, Router Boucher, Sneaky1 Boucher, Varak Boucher, DarkAlpha Bourne, Hastings Bournemouth, bend Bowie, Lucy Bowie, Casper Box, coolbimbo Box, Kittenna Box, Metaphor Box, Nemesis Box, Bell Boyd, Kelley Boyd, Sylar Boyd, WendyCat Boyd, Denis Boyle, Jennifer Boyle, melmuse Boyle, Alycia Bradley, jayne Bradley, Airie Braendle, Glitch Braess, Su Brando, Tybalt Brando, IntLibber Brautigan, Dante Breck, Carbon Breed, WitchFire Breed, Bella Brennan, erika Brenner, gaby Brenner, Talthybius Brevity, KitKat Brewster, Lindsey Breyer, Artemis Bright, Brigitte Bright, Donnie Bright, Lucas Bright, Oya Bright, Prentice Bright, Risa Bright, Starfire Bright, Beebo Brink, Marcus Brink, Emi Brissot, Ice Brodie, Luth Brodie, Sam Brodie, Chromal Brodsky, Tydomus Brodsky, Cage Brody, Darling Brody, Kurston Brody, Mike1A Brody, UserJesse Brody, Reese Brody, Faith Broek, Happy Broek, ShadowHunter Brokken, Jacey Brooks, Shake Brooks, Shary Brooks, Sigurd Brooks, Tate Brooks, Vanleen Brooks, BruTuS Broome, PastorD Broome, Sarita Broome, October Brotherhood, Elroy Brouwer, Neophyte Brouwer, Jebediah Brown, linda Brown, Schwartz Bruder, lupu Brule, Joshua Brynner, Linda Brynner, Southy Buckenburger, drifterr Bugaboo, Michelle Bumbo, Trixie Bumbo, Paul Bumi, Jitar Bunin, Kerian Bunin, Crystalmom Bunnyhug, Embrace Bunnyhug, Zues Burali, GiGi Burgess, Keith Burgess, Shawna Burgess, Bain Buridan, Sean Buridan, Chiccorosso Burke, Count Burks, Hinamori Burleigh, Atom Burma, Jasper Burma, Aleshanee Burnett, Dottie Burns, Ebro Burns, Skipper Burns, John Burns, Haroldthe Burrel, Big Burt, dubureau Burt, Keisha Burt, phill Burt, Janloo Burton, Madd Burton, Bowlalot Bury, Dreklore Bury, Jarek Bury, Jenni Bury, Lou Bury, Orlando Bury, Angel Butuzova, dodi Byrd, Enchtris Byrd, Tleva Caballero, Gayle Cabaret, Monique Cabaret, Adele Cagney, Cralyn Cagney, Caribbean Cahill, Darien Caldwell, Lily Caldwell, CFire Caldwell, Ciara Calhern, Karl Calhern, Cecil Calhoun, Tizzy Calliope, Hypatia Callisto, Raven Callisto, Fred Cameron, Meliana Cameron, Antonius Camus, Maddie Camus, Raskella Canadeo, Exotica Canadeo, Vessus Candour, Alexis Canetti, Silvio Canetti, Talia Canetti, bragan Canning, Charenthia Canning, Reeda Canning, Vannesh Cannoli, Changurr Cao, Chilli Cao, Dorian Cao, RosyLee Cao, steve319 Cao, Contamina Capalini, Cougard Capalini, Kirsti Capalini, Lindichka Capalini, Lyla Capalini, JohnMAC Carbenell, snake Carbenell, Capri Carbetta, Sophia Carducci, Kid Cardway, Icould Careless, Aurore Carlberg, Brumia Carlberg, Bruni Carlberg, Brandie Carlos, Jenny Carlos, Avalon Carmona, Moana Carmona, Ashelia Carnell, Rain Carnell, CJ Carnot, Madison Carnot, Julie Carpathea, HALOCAT Carr, coolmaria Carroll, karyme Carroll, Leila Carroll, Crisii Carter, cyrielle Carter, isidore Carter, Missi Carter, Shatara Carter, Tristan Carthage, Aemilia Case, Baby Case, Jenn Cassady, Kittygloom Cassady, Charlotte Cassavetes, Holly Cassavetes, Anthony Cassini, Supertell Cassini, Wietse Cassini, Just Cattaneo, Mandy Cattaneo, Aleicester Catteneo, arthuraleksandravicius Cavan, Maximus Cazalet, Quellin Ceawlin, dMetria Cela, Spidey Cela, Arcadia Ceres, wanderer Cerveau, Aaron Cerveau, Marky Chaffe, Stefani Chaffe, The Chaffe, Becca Chambers, Lexis Chambers, Inigo Chamerberlin, Shion Chandrayaan, Ibrisse Chantilly, MaryAnne Chantilly, Cool Chaparral, guy2 Chaplin, Iadwen Chaplin, Lillyann Chaplin, wllmn Chaplin, Marsha Chapman, Caspar Chapman, Dominique Charles, Chilly Charlton, Pammie Charming, Total Chastity, Arohee Chatnoir, Papillon Chatnoir, Barry Cheeky, coldFuSion Cheeky, Nyla Cheeky, Ryan Cheeky, Aggressor Cheetah, Ronald Cheevers, Michelle Chernov, Maggy Chestnut, Cam Chevalier, Eleonore Chevalier, Kelly Chevalier, Mauries Chevalier, Ozzy Chevalier, Rayvendell Chevalier, Swampy Chevalier, Cheesemuncher Chickenwing, Kaltezar Chickenwing, milespeed Chihuly, Coolkama Childs, Michelle Childs, Nicole Childs, SimonRaven Chippewa, Albert Choche, Annetha Christensen, Jennifer Christensen, Zell Christensen, Herman Christiansen, Haifeng Chu, Francis Chung, tyana Chung, Sundance Churchill, Anubis Cioc, Corpierro Cioc, Dwayne Cioc, Knibbel Cioc, Slowhand Citylights, PonygirlSarah Clapper, Jim Clark, Jacob Clark, Jo A Clark, Angelos Clary, Biffle Clary, lilly733 Clary, Rui Clary, William Clary, Otto Clave, Arahan Claveau, Neil Claxton, Mimi Claymore, Pete Claymore, Sam Clayton, Blank Cleanslate, Deckheard Cleanslate, Electron Cleanslate, Spirit Cleanslate, Willow Cleanslate, Kovu Cleaver, Bell Clellon, Covisha Clift, EBCY Clift, Iumi Cline, pizzaguy Clutterbuck, knightrider Clymer, Exia Coage, Brenda Coakes, Lindsay Coakes, Lyndka Cochrane, Ceinwen Coen, Oneil Coen, Mahogony Coffee, Mark Coffee, Lisbeth Cohen, Melayna Colasanti, holly Coldstream, Moon Cole, Shiden Coledale, Castalia Collingwood, JUNKIE Colman, Silver Colman, Stahi Columbia, SweetAbe Columbia, CC Columbo, Charity Colville, Isabeau Conacher, Deb Cone, emili0 Congrejo, MarioDaniel Congrejo, Jazzy Connell, Jenika Connolly, Cooper Conover, Garn Conover, Mara Conover, Myles Cooper, Angelina Coorara, Valentine Coppens, psyco Coppola, Tremleh Coppola, Venus Coppola, Chiana Cordeaux, Sensuality Cordeaux, Clarissa Cordoso, Methos Corinthian, Tylerferland Cork, Caleb Corleone, Montana Corleone, Sparkey Corleone, Zoey Corleone, Achtai Coronet, Count Coronet, Dweedle Coronet, jjccc Coronet, Ron Coronet, Caterina Cortes, Letitia Cortes, Marcella Cortes, Martinelli Cortes, Raven Cortes, Soopafly Cortes, Grazel Cosmo, Athena Cosmos, Cally Cosmos, Annyssa Cosmos, Bunny Costello, Zelitor Costello, Lionel Cournoyer, Sasha Cowen, Carl Crabe, Lyssa Craig, micke Craig, Mel Cramer, Tee Cramer, Avil Creeggan, Bunch Creeggan, CronoCloud Creeggan, NewYorkCityDJ Cremorne, Shalori Cremorne, Artik Crimson, Bliss Crimson, Daffodil Crimson, Raul Crimson, Shaoti Crimson, Trevor Crimson, Rex Cronon, Ace Crosby, Linnrenate Crosby, DaRealNeo Crossing, Wark Cruyff, Silver Csak, Eulalia Cuddihy, Lauralynne Cuddihy, Rammstig Cummings, Rita Cummings, Fremont Cunningham, Jinger Curie, RICX Curie, Betty Curry, Marissa Curtis, Mercurion Curtiss, Juan Cusack, Sanderman Cyclone, Marek Czervik, Alreania DaSilva, Dnel DaSilva, Seph DaSilva, Kelly Dabney, dorothyann07 Dae, Frax Dae, Frost Dae, Syryne Dae, Oddy Dae, 1Time Daehlie, Sinead Daehlie, TRACI Daehlie, Dante Daffodil, Limey Daffodil, stripey Daffodil, Atomik Dagger, Bloodsoaked Dagger, Coca Dagger, Colera Dagger, J4ck Dagger, Jaune Dagger, leigha Dagger, Silver1 Dagger, Alexander Dagmar, Simeon Dagmar, Dweezle Dagostino, Ginoo7 Dagostino, Joka Dagostino, Rachid Dagostino, Sinatra Dagostino, DR Dahlgren, Alexandra Daikon, Devious Dailey, Natalie Dailey, Sukit Dailey, Zoya Dailey, Nad Dal, Rudra Dal, Robert Dale, Coventina Dalgleish, Salvador Dalgleish, Anya Daligdig, Nyterious Daligdig, yvette Daligdig, Kylie Dallin, Angel Damask, Phantom Damask, QatanI Damdin, Bekka Damone, Pashin Damone, Vaekraun Damone, Zoraya Damone, elmoono Dana, Mary Dana, ml Dana, Rezzer Dancer, Shrug Dangle, Guttstein, Daniel, Bubba Daniels, Dinky Daniels, Kiana Daniels, marcel Daniels, Rosey Daniels, Sara Daniels, VictoriaRose Daniels, Ignacio Dannunzio, SlimD Dannunzio, williamae Dannunzio, Chriss Darkes, Digit Darkes, Tanooki Darkes, Bree Darling, Chasity Darling, Darra Darling, Val Darracq, Diana Darragh, Ryan Darragh, Bane Darrow, Bree Darrow, Ivy Darrow, cuddles Dassin, Leeloo Dassin, Dachine Daviau, Gyllian Daviau, Leben Daviau, Serioto Daviau, Willow Daviau, Allison David, JamieZel David, Todd David, Casey Davidson, LaNikki Davis, Whispering Dawn, Lady Dawson, Helen Dayton, Ryan Dayton, Ooh Dazy, Woopsy Dazy, Brighid DeCuir, eZekiel DeCuir, Link DeCuir, nath DeCuir, Rhys DeCuir, siliconegirl DeCuir, spring DeCuir, Iron DeCuir, Escort DeFarge, Archangelo DeSantis, Aubrey DeSantis, Gustav DeSantis, Hippy DeSantis, Ilana DeSantis, Sutara DeSantis, Undina DeSantis, Axienne DeVaux, Dana DeVaux, Kitty DeVaux, Mindy DeVaux, Krystal DeVinna, Krystalynn DeVinna, Magenta DeVinna, Manuela DeVinna, Spike Deakins, Debbes Dean, Korben Dean, Dogbert Debevec, Savannah Debs, emily Decatur, Heiko Decatur, Zorena Deckard, Andrea Decosta, Dolly Decosta, Esperenza Decosta, Kruppen Decosta, larrykin Decosta, PhoenixRose Decosta, Sophy Decosta, Twinsen Decosta, Vladimir Decosta, Duxster Deere, Maxim Deharo, Summerbreeze Deharo, Matti Deigan, DeeAnn Dejavu, Gina Dejavu, Shai Delacroix, alexis Delcon, Ashly Delcon, Kane Delcon, Dante Deledda, Lady Deledda, Jega Delgado, Alicia Delphin, Darek Deluca, Lestat Demain, Nuka Demain, Allissa Demar, Lilyanah Demar, Aeleen Demina, Blowing Demina, Kalm Demina, Sarias Demina, Skeddles Demina, Sweet Demina, Alida Demontrond, Redux Dengaku, J. Derby, Cristell Deschanel, Ivey Deschanel, SinaMaria Deschanel, Elisabeth Desideri, Monique Desideri, Bartiloux Desmoulins, Hazel Desmoulins, Isis Desmoulins, Phoenix Desmoulins, Jon Desmoulins, Dino Despres, Samantha Despres, Snowflake Despres, Bones Detritus, Neo Devoix, Bre Dharma, Showshawna Dharma, Mike DiPrima, Winter DiPrima, Gongree Diage, Azure Diamond, Styles Diamond, Maike Dibou, Klaus Dieffenbach, Xavier Dieffenbach, Lordfly Digeridoo, Selkit Diller, Tari Dilley, Kelly Dilweg, Werewolf Dingo, Darkharmony Dingson, Knud Dingson, Jewel Dinkin, Mecha Dinosaur, Savonna Dinova, Amina Diplomat, FuZzY Diqui, Crimson Divine, Lizbeth Divine, Cryptid Divisadero, Destiny Divisadero, Montsho Division, Gryphon Dix, Kittybird Dix, Hope Dixon, CadiWolf Dobbs, Darling Doboy, Nicole Docherty, Ralph Doctorow, Odo Dod, nik385 Doesburg, sam Doigts, Elea Dollinger, Miche Dollinger, Severina Dollinger, Eric Domela, Krysta Domela, Franky Donaldo, Duntroon Donburi, Tricia Donovan, Sabrina Doolittle, DeDe Doowangle, Dinghy Doowangle, Phoebe Doowangle, Ratzfatz Dorado, Jessalicious Dorance, RJaNator Dorance, Kalemika Dougall, Fi Douglas, Norelyn Douglas, Aerrett Dovgal, Wendy Dovgal, Alex Drago, MAGWolf Drago, Lupo Drake, Palanth Drake, Aryanna Draken, Drinkin Draken, Kaylan Draken, Maddy Draken, nixkuroi Draken, Thornpaw Draken, Sinjo Drakes, James001 Dryke, Nameless Dryke, Roberta Ducatillon, Helke Duettmann, Moni Duettmann, Kyla Duke, Esence Dulce, Manuella Dulce, Ric Dulce, Shannel Dulce, Xander Dumont, Lionna Dumouriez, Marko Duncan, Duncan, Lyre Dunia, Cyndari Dunn, Garth Dunn, Sugababe Duport, Taylorholic Durant, Vixie Durant, Julie Durant, Drew Dwi, Ribbon Dye, Michelle Dzieciol, shngy Dzieciol, Jeffrey Earp, Umbrella Ebi, Adi Eccleston, Bazzerbill Eccleston, Dragon Eccleston, chawna Eclipse, Minolin Eclipse, Valkyrie Eclipse, Joi Edelman, Alx Edman, Daniella Edman, Saskia Edman, Storm Edman, Cory Edo, Tommy Ehrler, Stephe Ehrler, Edred Einarmige, Hope Eldrich, Kai Eldrich, Winter Eldrich, Thunder Electric, Ezmerelda Electricteeth, Hostile Electricteeth, Kris Electricteeth, Loki Eliot, rudy2zday Eliot, Shaydin Eliot, Iris Ellison, Enigma Elswit, Tim Ely, Darkling Elytis, Delu Elytis, Happy Elytis, Jessica Elytis, Bernd Emmons, Kellie Emmons, Robbert Emmons, Bean Emoto, dick Encore, Andy Enfield, Fuzionor Engawa, Hethr Engel, RH Engel, Digital Enigma, Kahlest Enoch, Lex Enoch, Oran Enoch, Ryal Enoch, Wobmongle Enoch, Wyatt Enoch, Pea Enzyme, Antony Epin, Sapphire Epin, DBDigital Epsilon, Shoshana Epsilon, FallenAngel Erato, Renton Eretz, Mo Eriksen, 64Y80Y Eros, tommy Eros, Nicola Escher, Zak Escher, Salvatore Esposito, Quinevere Essex, Zed Essex, Fabian Etchegaray, Psyche Etoile, Byanex Etzel, CrimsonWings Eun, Deckard Eun, Arwen Eusebio, Anastacia Evans, buttonlynn Evans, Rose Evans, Romeo Evelyn, Sephiroth Everidge, Patriiick Ewing, Trey Ewing, Vivian Ewing, Xwing Ewing, Zha Ewry, SirZarath Excelsior, Zorrita Express, Hierophant Extraordinaire, Blanche Fabre, Annie Fackler, Wolfgang Fackler, Amy Faddoul, Shukran Fahid, Garth FairChang, Brooke Fairplay, TOmmy Fairplay, Vixen Fairplay, Bobby Fairweather, Darlean Fairymeadow, Gotobug Fairymeadow, Heathie Fairymeadow, Meleni Fairymeadow, Moon Fairymeadow, Odysseus Fairymeadow, rob Fairymeadow, Taylkusha Fairymeadow, Crystal Falcon, WhiteAngel Falcon, VetteMan Falken, Evilpony Fallon, Fernand Fapp, Sasuke Fapp, Roen Fardel, Dariush Fargis, Jenn Fargis, Mandy Farina, Kokoro Fasching, Madison Fasching, Ben Fassbinder, Leo Fastback, Rikky Faulds, STEEL Faulds, Equino Faulkland, Flynn Faulkland, High Faulkland, Arda Fauna, Elvis Faust, Benelli Federal, Forest Federko, Belle Fegte, Danny Feingold, Luc Feingold, Bing Fell, Darky Fellini, Jaze Fellini, Sacha Fellini, paulie Femto, Ynot Fenua, Fau Ferdinand, Soren Ferlinghetti, Meri Fermi, Boxter Ferraris, Danamea Ferraris, Duilho Ferraris, Fred33 Ferraris, LeekySean Ferraris, Letizia Ferraris, Marlowe Ferraris, Wanted Ferraris, Xavier Ferraris, Feff Ferrer, Thomas Ferris, Nakala Fetisov, Astrin Few, Chosen Few, Ahh Fiddlesticks, Chantal Fielding, Caleb Fierrens, Patrice Fierrens, sam Fieseler, NutZ Figaro, summer Figaro, Leumia Figgis, Mae Figtree, Maldavius Figtree, Ravovich Figtree, Morgana Fillion, Brett Finsbury, sofia Finsbury, Jazmina Firefly, sasha Fischer, william Fish, Nadia Fisher, StevenSDF Fisher, Carol A . Fisher, Dimitri Fisseux, Manni Fitzgerald, Freddie Fitzroy, Phineas Flagstaff, Ante Flan, Braden Flanagan, BrettEbay Flanagan, Echo Flanagan, Knute Flanagan, Kristjan Flanagan, LilyRose Flanagan, Meril Flanagan, Lulu Flasheart, Jolie Fleury, Clitoria Flint, Fifi Flintlock, Frostie Flora, Kitto Flora, Chriss Florio, Arlen Flossberg, Angel Fluffy, Emilyuk Fluffy, Frurry Fluno, Faedra Flytrap, Brieg Foden, Annette Fonda, Katina Fonda, Raymond Fonda, Marcos Fonzarelli, Yuri Fonzarelli, CrystalShard Foo, etoile16 Food, Kim Food, Kode Forager, Vodka Forager, Wendy Forager, Lucien Forcella, Maela Forcella, Olli Forcella, Violet Forcella, Clarissa Forder, darkdog Forder, Hans Forder, Jango3234 Forder, Olli Forder, Naryu Forester, FaustTiger Forte, Richie Forte, BMFC Forwzy, Erick Forwzy, SusNy Foss, Sanford Foulon, Iwana Fouquet, Kae Fox, Raudf Fox, Wolfie Fox, Phli Foxchase, Kityn Foxley, MollyBrown Foxley, Qua Frampton, Ice Franchini, Nicolas Franchini, Soizie Franciosa, Samson Francis, Nequam Frangilli, Andreas Frankfurter, PreWired Frankfurter, Diane Franklin, Cappy Frantisek, Romano Frascati, DeMits Frederix, Mel Fredriksson, Sune Fredriksson, Tina Fredriksson, Fastfreddy Freeloader, Sammar Freeman, Kitty Freund, Jorgen Friis, Zorin Frobozz, mdbobbitt Frobozz, Chris Frontenac, Foolish Frost, Asriazh Frye, Patti Frye, Phish Frye, Nobody Fugazi, Simba Fuhr, Snugglebunny Fuhr, fallendream Furse, Jamie Furst, Cherise Gagliano, Laura Gagliano, Gammy Gainey, Gazz Galatea, Govindira Galatea, Rizpah Galatea, Amber Galbraith, Mandy Galileo, william Galileo, David Gall, LoLa Galland, Zach Ganache, Casey Gandini, Edgar Gantenbein, Jonx Gao, Soso Gao, Madison Gardner, Silver Garfield, Michelle Garrigus, Nerdmaster Garrigus, Jarik Garsztka, Svoboda Garsztka, Salkin Gascoigne, Roger Gaspara, Buttlock Gasser, Pud Gasser, Zina Gasser, Prince Gausman, livingdead Ge, Josh Geesink, Tolly Geest, Georgina Geewhiz, Chris Geiger, Sabine Geiger, Samuel Geiger, Tristessa Geiger, Joe Gemini, Mielle Gemini, Misty Gentil, Sanna Georgette, Phoenix Gerhadsen, Mic Ghia, Salores Ghia, Loskobosko Giacomin, Susanne Giffen, Lazarus Giha, Micah Giha, Merry Gildea, Summer Gildea, Brittany Giles, Rayy Giles, sevron Giles, Gattz Gilman, Rori Gilmour, SunQueen Ginsberg, Rockwell Ginsberg, Intolerable Ginsburg, Junie Ginsburg, Enrico Giove, Krystal Giove, Annie Giovinazzo, Cat Gisel, Constantine Giugiaro, Io Giugiaro, Persimmon Gjellerup, Lorna Gladstone, Toby Gladstone, Dale Glass, Gellan Glenelg, EmmaBella Glimmer, louise Glimmer, Gianna Glitter, Melyissa Glitterbuck, Victoria Glushenko, Wolf Goalpost, Chris Gobo, Xerses Goff, Sturdus Goldblatt, Nigel Goldflake, Major Golding, Master Goldkey, Zho Golem, Stylez Gomez, Carlos Gomez, Alecydoss Gontermann, Skyler Goode, Valentine Goode, Odd Goodfellow, Dragyn Goodliffe, Hank Goodliffe, Livinda Goodliffe, Robertt Goodliffe, Daphne Goodnight, Sean Gorham, Ledje Gorky, Emma Gould, Amaze Grace, Lagerstone Graff, Harper Grainger, Andy Grant, Carrie Grant, LauraLOral Granville, AlphaOmega Graves, Ebon Graves, Kyrii Graves, Leeloo Graves, Bosco Gray, Dez Gray, Renegade Gray, Summer Gray, Aries Graysmark, Edian Graysmark, Scotty Grayson, Mantis Grebe, Kelly Green, cara Greene, Kimber Greene, Mystical Greene, Raven Greene, Soilent Greene, Matthew Greene, Soilent Greene, Roberta Greenfield, ShayLee Greenspan, Dax Greer, Angel Gregg, Kyleigh Gregg, Sophie Greggan, Deanna Gregoire, StylynProfylyn Gretzky, Farallon Greyskin, Kraal Griffith, Xavier Griffith, Jacomo Grigg, Sylvie Grizot, bodyman72 Grot, Damian Grot, MarieCaroline Grumiaux, Mozo Grumiaux, Oceane Grumiaux, Jadem Gruppman, Gracie Grut, Jennie Grut, Mhaijik Guillaume, Frog Gulick, RacerX Gullwing, Enktan Gully, Gilly Gully, Woozie Gumshoe, Teddy Gumsing, Stephane Gunawan, Alienbear Gupte, Boroondas Gupte, mcgeeb Gupte, Elise Guyot, Jamal Guyot, Lawyer Guyot, Thiago Guyot, Arwen Gymnast, denniswo1993 Gymnast, Lukes Gymnast, Miki Gymnast, Sizoark Gynoid, Markiss Haas, Pepper Haas, Arkanys Hadlee, Apollo Haight, Lord Haight, Fawn Hailey, Kaelin Hailey, Gaelle Halasy, ISIS Halberd, Meg Halberd, Zander Halberd, Arnold Halderman, Malarwen Hall, Ken Hall, Jonah2cd Hallard, Saii Hallard, Trixie Hallard, Doris Haller, Destina Halley, Susiee Hamilton, IBMTapeGuy Hammerer, Lighten Hammerer, VEVER Hammerer, Alison Hamsun, Fawn Hana, leah Hana, Darknite Hand, Emperors Hand, nefertiti71 Handrick, Rodney Handrick, Delerium Hannibal, leanhaumshee Hannya, jingle Hansen, Mattie Hansen, Terry Hansen, Vox Hansen, Filo Hapmouche, Gustavus Hapmouche, Nounouch Hapmouche, Adrian Harbinger, Kami Harbinger, StormCrow Harbinger, CherryBomb Hare, Den Hare, Omegasun Harford, ricky Harford, ricky Harford, Harley, Jenna Harley, Kristina Harley, Natasha Harlow, Hummer Harmison, Allen Harrington, Tessa Harrington, Joker Harris, Shanti Harris, Dagon Harrison, J0NATHAN Harrop, Kerinauu Hartunian, Kyentay Hartunian, Rav Hartunian, Ski Harvey, Tuesday Harvey, Xylo Hasp, Betina Hatfield, Gina Hatfield, Calamity Hathaway, Dorian Hathaway, Duncan Hathaway, Xavier Hathaway, Jack Hathor, Kamilah Hauptmann, Pam Havercamp, swift Havercamp, Griselda Hawes, kwanita Hawks, Ravenis Hawks, BenG Hax, el33t Hax, Juicy Hax, Macx Hax, Meta Hax, Mikka Hax, Mokona512 Hax, Mr8ball Hax, Prophet Hax, Rina Hax, Slober Hax, Starbuck Hax, Takehiro4 Hax, Kyle Hayashi, Ashrilyn Hayashida, Eriko Hayashida, August Hayek, Milton Hayek, Ronnie Hayes, Max Hazlehurst, Sorsaran Hazlehurst, Grath Hazlitt, Violet Hazlitt, April Heaney, Aquela Hearn, jefferey Heart, Kalyrra Heart, Marissa Heart, Taina Heart, TLC Heart, Tori Heart, Dana Hebert, Trimzi Hedges, AmazedBlue Hegel, Dagmar Heideman, r0bin Helsinki, Moira Henley, Ursa Henley, Joharr Hennah, Daviana Hennesy, GJ Hennesy, jens Hennesy, Karl Herber, mistydawn Herbst, Donatella Hermano, Robins Hermano, Ekib Hern, Greves Heron, Jagged Heron, Christel Herzbrun, le Herzog, Reverend Herzog, Elektra Hesse, SweetDesire Heston, Cotton Hicks, Zack Hicks, Kevyn Hienke, Tristan Hienzman, Devin Hill, Wendy Hill, Tensai Hilra, Valek Hin, Adolph Hinkle, Timothy Hinkle, YoCo Hird, Amber Hirvi, Dagon Hitchcock, Heather Hitchcock, Noah Hitchcock, Sianna Hock, Dominique Hofmann, Holly Hofmann, Ganador Holgado, Brookston Holiday, Davidd Holmer, Sam Holyoke, Alexander Homewood, atory Homewood, dabadguy Homewood, Ed Homewood, Huge Homewood, Meesha Homewood, tilstad Homewood, Cremi Honey, Laura Honey, Sandling Honey, Honey, Haos Honua, Vudu Hoodoo, Dallas Horsefly, Lucy Horton, SJ Horton, Homer Horwitz, naty Hotaling, Traceysvideos Hotger, DaQueenB Houston, Natasha Houston, Tia Houston, Hughes Howard, Meg Howe, Edward Howton, Falllen Howton, Pepto Hoyer, Sabrina Hoyer, LadyAbigail Hubbard, Kristopher Hudson, Nikita Hudson, Titus Hudson, XLR8RRICK Hudson, Holly Huffhines, Bella Hugo, Haole Hula, Sard Huldschinsky, Neran Hull, Anastasia Humphrey, October Hush, Silent Hush, Ctarr Huszar, ac14 Hutson, Dex Hutton, Fox Hwasung, Johanna Hyacinth, White Hyacinth, Adrianna Hyde, DJ Hyde, Ty Hyland, Adeline Hynes, Cathy Hynes, DeepSweet Hynes, Psykeeper Hynes, Sexy Hynes, Ares Hyun, Emperor Hyun, melodie Hyun, slayer Hyun, Puck Ida, Weary Ida, Anne Idler, Ruby Idora, Bryan Idziak, Six Igaly, elfi Independent, Spike Independent, Veilofunknown Independent, Bryndi Ingersoll, Ingrid Ingersoll, Noelyci Ingmann, Andrew Ingrassia, Dale Innis, Foxy Innis, Vern Innis, 111Mc Innis, Cloud Insoo, MEtoo Insoo, Quinn Iredell, Rebekah Iredell, Lucien Ireton, Maggie Ireton, Austin Ironclad, DavidJames Irwin, Roy Irwin, Xavier Irwin, Esmee Isbell, Miyu Ishii, Billy Islander, Misa Itamae, Magnum Iuga, Akasha Ivory, Juliana Ivory, WHITEMAGIC Ivory, Gazometr Ivory, Indigo Izumi, Kami Izumi, Salazar Jack, Gunslinger Jackalope, Sutton Jacks, Casandra Jackson, Dernard Jackson, Dougal Jacobs, Lone Jacobs, Sydney Jacobs, jefftlse Jacobus, jose007 Jacobus, justine Jacobus, LampLighter Jacobus, Micha Jacobus, Jadge Jacobus, Enchant Jacques, Victoria Jacques, Dreamweaver Jae, Gregoire James, Kizza James, Vienna James, Barry Jannings, Bianca Jannings, Gwen Jannings, Juappa Jannings, Paisley Jannings, Coos Jansma, Fernandinho Jansma, Griffioen Jansma, Jiire Jansma, IsisLynn Janus, Theobaise Janus, Conway Jarrico, DylanJr Jarrico, Quest Jarrico, erba Jarvis, Jeagerman Javelin, Alan Jay, Lopp Jay, harpo Jedburgh, Craig Jeffries, Alexis Jenns, Bimbie Jenns, XanXan Jervil, Alexander Jessop, Gelenas Jessop, RodneyLee Jessop, Tataniya Jessop, Amethyst Jetaime, Kooky Jetaime, Sapphire Jetaime, Tempest Jewel, Vampirella Jewel, Elia Jewell, Josey Jewell, Shaolin Jewell, Sheeba Jewell, Stefu Jewell, Uma Jewell, Rosslin Jiang, alex Jimenez, Forest Joffe, John Jogiches, Dyani Johin, Musashi Johin, Major Johnson, Dean Johnson, Peter Johnson, Thomas Carson Johnson, Janet Jones, Jason Jones, Bedo Jonze, Elaine Jorgensen, Osiloa Jorgensen, Mariah Jubilee, Sam Jubilee, Ada Jun, Chenak Jun, Ferris Jun, kelyane Jun, Takeshi Jun, Tommi Jun, Phoebe Juneau, Grace Juniper, icandi Juno, Kimo Junot, isha Juran, Orchid Juran, Torsten Juran, Krzywol Kaczmarek, Sakura Kagekiyo, Meni Kaiousei, Fritz Kakapo, Esdrael Kamachi, Kathy Kamenev, Darsuky Kaminski, Rebecca Kaminski, Digital Kaos, Kappa Kappa, Leah Kappa, Gapple Kappler, Cristalle Karami, Toledo Karas, Tina Karlfeldt, Angelina Karura, Samara Kasshiki, Kitty Katscher, Lonetree Katscher, Goldie Katsu, Shamir Katsu, Lacey Kavanagh, Scrooge Kavanagh, Faye Kawabata, Ninja Kawabata, Onimusho Kawaguichi, Brad Kazakov, Ida Keen, Jeff Kelley, Kyle Kelley, An Kellner, Cindy Kellner, Kean Kelly, Tony Kembla, KaliCat Kennedy, Fred Kenorland, Sharon Kent, Nils Kenzo, Rase Kenzo, Tammy Kenzo, Tyci Kenzo, chica Keon, Benja Kepler, Gust Kepler, KittyKatt Kerensky, anton Keynes, Ipenda Keynes, Malevolyn Keynes, Ayumi Khorana, Hoshi Kiama, Nekorina Kiama, Aurillius Kidd, Bare Kidd, Billboard Kidd, Blurple Kidd, Cade Kidd, Ekerilar Kidd, FFS Kidd, Lazarus Kidd, Lea Kidd, MidnightRush Kidd, Mittens Kidd, Morliona Kidd, Neilly Kidd, Kim Kienzle, RJ Kikuchiyo, Gail Kilara, Fish Kilby, zeelee Kindley, Montez King, Dax Kirkorian, Myoukitsune Kirkorian, Szandor Kirkorian, Cmtccmoi Kish, Kia Kish, DaQbet Kish, Coca Kit, Developer Kit, pronto Kit, Sunshine Kit, ssjkriccolo Kitchensink, Reisuki Kitsune, Tengu Kitsune, AngelEyes Kittinger, Devilish Kitty, Kitty, Panther Kitty, Daaneth Kivioq, Praseodymium Kivioq, Sonya Kivioq, Emily Kleene, Buejien Klees, Princess Klees, SaltySugar Klees, Parrish Kline, ProfessorKindly Kline, Chelsay Knibber, Victoria Knight, Raspitomaru Knopfli, Cocoanut Koala, Akiko Koba, Bryan Koba, dawood Koba, Izen Koba, Nebur Koba, Taran Koba, Pamela Koenig, Neo Koga, BlackOut Kohime, Jazzie Kohime, Naa Kohime, Seriuskid Kohime, Wandale Kohime, Zana Kohime, Zerosix Kohime, Maucat Koi, Dagmar Kojishi, Chroma Kolache, Icey Kolache, Kornscope Komachi, Bri Koolhaas, KamaSutra Koolhaas, Katya Koolhaas, Trylle Korda, Corrine Korobase, Navajo Korvin, Pasha Korvin, David Kostolany, quintin Kostolany, Tasha Kostolany, Amy Kotobide, Zaphod Kotobide, KYWLDCT Kovacs, LillyEliska Kralomoc, Joseph Krams, Fumon Kubo, LudwigVan Kubrick, Anagras Kuhn, Selina Kuhn, Tal Kuhn, Finora Kuncoro, Maya Kupferberg, Jana Kurelek, Shika Kuri, Yo0gy Kuri, Endo Kurosawa, Tatsuki Kurosawa, MrBill Kurri, Albert Kwak, Kwakkelde Kwak, Duckling Kwak, Kasey Kyger, Kaimi Kyomoon, Stelard Kyomoon, Kyo Kyong, Emm Laa, Keera Laasonen, Delvendez Laborde, Raban Laborde, Amodeus Labrada, Louisa Labrada, Sweeten Lacey, Fiachra Lach, Eliv Lachman, Flykiwi Lachman, Charlie Laffer, LarryS Laffer, Sasha Lafleur, OxLukexO Lagan, Shadow Lagan, Tilianna Lagan, Jaye Lahtoh, Davoid Lake, Fairlight Lake, Thomas Lake, Veronique Lalonde, Leticia Lambeau, Maleia Lambeau, Cross Lament, Drakon Lameth, Misch Lameth, Caeleigh Lamington, Nedrick Lamont, essayn Lamont, Dwayne Lancaster, Hiram Lancaster, Carlton Lane, Christo83 Lane, DOO Lane, Niket Lane, Roughtoe Lane, Taylor Lane, Ami Lang, Emily Lang, Ruadh Langwarrin, Sasha Lapointe, Garrett Laramide, TBA Lardner, Beverly Larkin, Marcoh Larsen, Vanessa Larsen, bjf25 Larsson, curL Larsson, Garsson Larsson, Jondolarr Larsson, Justicar Larsson, Quinn Larsson, redshoedave Larsson, Tod Larsson, lea Laryukov, Renate Laryukov, Benny Lassally, Khristen Lassard, Josh Latrell, Lacey Latrell, Shari Latrell, Casper Laughton, Kory Laughton, Lisa Launay, Sasha Launay, Areyn Laurasia, Crystaleen Laval, Moirae Laval, Sascha Laval, Slasha Laval, Tiberius Laval, Shadow Laviolette, Velarissa Laviolette, Zeus Laws, Snaptick Laxness, wtf Laxness, Carrie Laysan, Norton Lazarno, Candide LeMay, Dustin LeMay, Shelly LeMay, Antionette LeShelle, Hayden LeShelle, Kristian LeShelle, Monika LeShelle, Mysti LeShelle, Shaklin LeShelle, Shavaii LeShelle, Lord Leafblower, Kinjry Legend, UniqueRose Legend, Jonny Legien, Lillia Lehane, Renae Leigh, KeiAira Leigh, Casper Leinhardt, MiaLily Lelouch, Adriana Lemieux, Keiki Lemieux, Ginger Lemmon, Heather Lemmon, JohnnyMac Lemmon, Lenni Lemuria, Bubba Leonard, Spyder Leroy, Aral Levitt, DarionMonkee Levitt, Quiana Levitt, Angharad Lewellen, AngelEyes Lewis, Cookie Lewis, JonnyImpala Lewis, Ekka Li, Jesa Li, Anark Liebknecht, KUieTSToRm Lightcloud, Lincoln Lightfoot, Nicola Lightfoot, Shaman Lightstone, Nika Lightworker, April Lilliehook, Joi Lilliehook, Kimi Lilliehook, LAPDHOLLYWOOD2000 Lilliehook, Lindy Lilliehook, Shayne Lilliehook, Skywil Lilliehook, Neo Linden, Amber Linden, Guy Linden, Teeple Linden, Marck Lindman, NoSpy Lindman, Rahduhlac Lineker, Evangeline Ling, Kailani Ling, Karyll Ling, Lexus Ling, moon Ling, Wai Ling, Samantha Lingiuan, CyberonX Link, Laynie Link, SLurl Link, Aphrodisiack Lisle, Petunia Liveoak, Eithnie Llanfair, Jennifer Llanfair, Pami Llewelyn, Gwyneth Llewelyn, Kiten Lobo, Paul Lobo, Khrome Lock, Brett Logan, Dragger Lok, Pavig Lok, Sera Lok, May Loll, Lola Lollipop, SweetTasting Lollipop, Nikee London, Trinity London, Dogan Lonergan, Rod Longcloth, Excalibur Longstaff, Apolonique Loon, Austyn Loon, Danyhael Loon, Goreki Loon, Huligo Loon, Jaffred Loon, LouisS Loon, Luke Loon, mahee Loon, Ruthless Loon, Melina Loonie, rasta Lopez, Lydiah Lorentz, Stellar Losangeles, Blackie Lotus, Misha Lotus, Alysia Loudon, Grace Loudon, grumble Loudon, Kate Loudon, kimmie Loveless, LadyMacbrat Loveless, Ally Lovell, Dixii Lovell, Darb2rad Lowe, Lozzie Lowe, Trip Lowe, Andrek Lowell, Jaraziah Lowell, Lissa Lowell, Stryfe Lowell, Leland Lowell, Leonardo Lowey, Stagger Lowey, Strabo Lowey, Raen Lu, Laurie Lubezki, MissJean Lubezki, Lucia Lucero, Lee Ludd, Franchises Lulu, Jayden Lulu, Kitten Lulu, mona Lumet, Alienor Lumiere, Michi Lumin, Wolf Lumin, Grumpy Lumley, Sian Lumley, HamSuiJe Lumpen, Laguna Luna, Starbella Luna, Ashley Lundquist, Theosta Lunt, Cliothe Luo, Lincoln Lupino, Bronwyn Lurra, Mineki Lurra, MYMistress Lusch, Linnae Lusso, Natalie Lustre, Rose Luxemburg, Helena Lycia, AG Lykin, Lhlilith Lykin, Niko Lykin, Logan Lyne, Jacques Lytton, Kianeira MacDiarmid, Apple MacKay, Melissa MacKay, Bailey Mackenzie, Maxx Mackenzie, Rose Mackie, Ee Maculate, Gaetan Maculate, Ravarian Maculate, Adrian Maddaloni, yearning Maddaloni, Ava Maddux, Flezix Maddux, Karamel Madison, Allure Madonna, Mannie Madonna, Sitearm Madonna, Mario Madsen, Mitzy Madsen, Ben Maersk, Lillian Maertens, Turk Maertens, Stephanie Magnolia, Lonique Magojiro, WarKirby Magojiro, Loki Mahana, Vinny Mahana, Semiramis Mahina, Shadow Mahoney, Rissa Maidstone, Tynana Maidstone, Angel Majestic, Jeremy Majestic, StarFire Majestic, Tiara Majestic, One Maktoum, Lana Maladay, Marzipan Maladay, Missy Malaprop, Ordinal Malaprop, Void Malaprop, Natasha Malibu, Rygel Malick, Ali Maltz, Leena Maltz, Cage Mandala, Synthalor Mandelbrot, Zeppelin Mandelbrot, Esteban Manen, Kawaii Manga, Mailee Manga, Nathalie Manga, Yinato Manga, Mya Mantis, Madame Maracas, Maisa Maracas, Domino Marama, Panama Marama, Charm March, SallyWoelfin March, Markel Marchionne, AdriAnne Margulis, Edgware Marker, Tika Market, AiSenshi Market, Lizbeth Marlowe, Queue Marlowe, Joana Maroon, Grey Marquette, Adrianna Marquez, Jeremy Marquez, Shirley Marquez, Christian Marquez, Dax Mars, Dnate Mars, Xandi Mars, Sarah Marsi, Garmon Martin, Sean Martin, SignpostMarv Martin, Brittany Martinek, Sweet Martini, ElDraque Martov, Aminom Marvin, Edwin Marvin, Meatnik Marvin, Zanza Marx, bollit Masala, Nguai Masala, Satya Masala, team23 Mascot, Tyler Mason, NAM Massey, Minasojo Massiel, Gatto Mastroianni, Checho Masukami, SlavegirlPaula Masukami, Hellsing Matador, Femina Matahari, Leoki Matahari, Rosa Mathieson, Violet Mathieson, MikVik Mathilde, Jonathan Mathy, Ernesto Matova, Selenia Matova, Meltharas Matsukaze, lordneg Matzerath, Memnoch Matzerath, Dedric Mauriac, Kezz Mauriac, Wolruf Mauvaise, coyote Maverick, Martin Maxwell, jericka May, Jeza May, Mellony May, Lauri Mayfair, EnCore Mayne, revochen Mayne, amaya Mayo, Hellmanns Mayo, Jima Mayo, Kion Mayo, Kisho Mayo, Mo9a7i Mayo, Neobe Mayo, Salazar Mayo, Sat Mayo, Scotto Mayo, William Mayo, Gino McAllister, Masion McAllister, Wallace McAllister, DarlinNikki McAlpine, Hawk McAlpine, Inga McAlpine, Lex McArdle, Maggie McArdle, Joshua McCallister, Keegan McCallister, Bradford McCann, Ella McCann, Flox McCarey, Jezzie McCellan, David E . McClure, Cash McConachie, Cathal McConachie, Tad McConachie, Aodhan McDunnough, Drew McDunnough, Artie McFly, Minnie McGann, Sabine McGettigan, Poppet McGimsie, Carole McGuire, Tegwenn McKenna, Shaemus McLaglen, ShirleyM McLaglen, Dirty McLean, HoseQueen McLean, Billibob McLeod, Cari McLeod, Innes McLeod, Jaenae McLeod, Slate McLeod, Troy McLuhan, Anya McMahon, DoGGo McMahon, Hutch McMahon, Iras McMahon, Jian McMahon, Jimama McMahon, Kouki McMahon, Sioban McMahon, Akie McMillan, laika McMillan, Lauris McMillan, Marteze McMillan, Maye McMillan, Nicholas McMillan, Radikal McMillan, Tammi McMillan, Jax McNally, Arwyn Meadowbrook, Waterflower Meadowbrook, Ima Mechanique, Nber Medici, Chandra Meehan, Geo Meek, Earane Meiji, Jessica Meiklejohn, Emiko Meili, penelope Meili, Luz Melbourne, Marti Melnik, MenuBar Memorial, Aitor Mendes, Mona Mendes, Jay Menges, Kimmie Menges, Lennart Menges, Margaret Menges, Mikel Menjou, VzNevada Menoptra, Merselus Mensing, Leia Mercy, SAPPHIRE Mercy, Sofie Mercy, ozadakan Meriman, Sandycd Meriman, Washington1985 Meriman, Infiniview Merit, Nanashe Merkur, Ayahuasca Merlin, Craischen Merlin, devillover Merlin, Faer Merlin, Jarros Merlin, Jolie Merlin, Kejo Merlin, Mario4 Merlin, Sarah Merlin, Silas Merlin, Wizard01 Merlin, Telitha Merlin, Vrrgo Merlin, Rocky Merosi, Luxe Merrienboer, Lance Mertel, Angus Mesmer, MysElf Messmer, Lonny Miasma, Utopar Michinaga, MTC Mielziner, Enysy Mikita, Celeste Miles, Giovani Miles, Guli Miles, Mars Miles, Noah Miles, RobWest Miles, Subzero Miles, DALLAS Milestone, Jane Milev, Jesper Milev, MMz Milev, YumYum Milk, Belle Milland, Berri Milland, Joanne Milland, Vicky Miller, Samantha Miller, Calvin Millions, Envy Millions, Lusty Millions, Versu Millionsofus, AsteroidS Mills, Emixam Mills, Goodstuff Mills, Guntrinkyt Mills, Isabella Mills, Landen Mills, Noelle Mills, Sand Mills, Djarno Mills, Mandee Milner, Haika Milo, Mankud Milo, Slobodan Milosz, Eliezer Mimistrobell, Amoret Mineff, Little Ming, Mako Minogue, Mandee Minogue, Milena Minogue, Sylfie Minogue, Manon Mirabeau, Tygeria Mirabeau, leliel Mirihi, Cmdr Misfit, disisme Misfit, fangy Misfit, Grim Misfit, RedWolf Misfit, Michal Mishin, Robby Mission, Shawn Mission, Haravikk Mistral, Thom Mistral, Sertories Mitchell, Temporal Mitra, Bphero Mizser, Stolar Mohr, DarkWulf Mokeev, Nemo Mokeev, sharon Mokeev, Sech Molinari, lara Molinaro, MARIOS Molinaro, James Mommsen, Sierra Monnett, Joan Monstre, Cattra Montagne, Galadhriel Montagne, AnnaMarie Montgomery, Christine Montgomery, Mariah Montgomery, Shawna Montgomery, Jemima Moo, Jihashi Moo, Moonie Moo, Wiske Moo, Borgie Moody, DOA Moody, Makinzie Moody, Preciousse Moody, Bit Moody, Luna Moody, ziphren Moonflower, Axl Moonlight, FxyLdy Moonlight, Stormy Moonlight, Lichtje Moonsoo, Astryd Moore, Haze Moore, Walker Moore, wiseman Moore, Zak Moore, Mordechai Moose, JMM Morahan, Kayleigh Morahan, Cyndi Moran, Marcus Moreau, Kathy Morellet, Violet Morellet, Heather Morenz, Maggie Morgan, Newbie1canobe Morgan, Sumar Morgan, Bella Morico, Ornella Morigi, Eagle Morris, Amanda Morrison, Maeyanie Mosienko, Svetlana Mosienko, Trinity Mostel, Risa Mosuke, Falcon Mountain, NEWB Mountain, Windy Mountain, KittenAnne Mousehold, Minky Mousehold, Lawna Mower, Pure Moxie, webeagle Moy, Buckaroo Mu, Nye Mu, Kara Muir, Robert Muir, Criscad Muni, Jean Munro, Pranay Munro, Nobu Murakami, Shar Murakami, Yumi Murakami, Arrekusu Muromachi, Sasameyuki Muromachi, Usagi Musashi, Spiritfire Musketeer, Questyn Myhre, Myst Mysterio, Vincent Nacon, Fox Nadir, Morgana Nagorski, Sari Naheed, Yasmin Nakamichi, Aibyou Nakamura, Aluviel Nakamura, Kyriani Nakamura, Madeea Nakamura, Masao Nakamura, Misao Nakamura, Tammi Nakamura, Tanabata Nakamura, Nawtakune Nakatani, rich Nasu, Lev Nedkov, Coal Nelson, Shiharizad Nelson, Laurah Nemeth, Beladonna Nephilim, Lianna Nephilim, Seraph Nephilim, Sari Neruda, Tiberious Neruda, otakup0pe Neumann, Wilhelm Neumann, Chet Neurocam, Draconis Neurocam, Cenji Neutra, Lex Neva, Prokofy Neva, BC Nevadan, Seagel Neville, Judi Newall, Killian Newall, Si Newall, Roenik Newell, Jos Newman, Lynda Newman, MadCat Newman, Weaver Newman, Ian Newt, Ribblet Newt, ninjafoo Ng, Raideur Ng, William Niangao, Gao Niangao, Lori Nicholas, Pravda Nicholas, Evangeline Nichols, Joella Nico, Morpheus Nieder, Titzalina Nieder, Blaze Nielsen, Angelus Nielson, Lazaros Nikolaidis, lincoln Nikolaidis, Tiruviel Nikolaidis, Kenn Nilsson, Lib Nilsson, Jokyr Nimbus, Tateru Nino, Jyotsna Nishi, lloll Nishi, Roxas Nishi, Tuote Nishi, Katlene Niven, Kari Niven, Thegamer Nixdorf, May Noarlunga, Jo Noe, DesrAw Noel, Jacindia Noel, Jaz Noel, MelodyRose Noel, Mi Noel, Paden Noel, Ricky Noel, Sunno Noel, Ono Noh, Tuach Noh, Feras Nolan, Jane Nolan, Harald Nomad, Helen Nomura, Lolita Nomura, Richard Noonan, Aenea Nori, Aulin Normandy, Kat Normandy, Zebra North, Stephen Northport, Galare Novi, KittyMarie Novi, Soo Novi, Elia Nozaki, lynsey Nozaki, Rini Nozaki, Kinzo Nurmi, Yasmin Nurmi, Kyran Nyak, Lauren Nykvist, Karma Oates, Alice Obscure, Honeymoon Obscure, Mikhail Obscure, Origin Obscure, Dementia Obviate, Lucius Obviate, Mootly Obviate, TripleXXXTex Obviate, Vanessa Obviate, Vitis Obviate, Sieben Ochs, Avery Oddfellow, Clinton Oddfellow, Maczter Oddfellow, Sempervirens Oddfellow, Tashie Oddfellow, Wagahai Oddfellow, CarlinRae Odell, Johnny Odell, Liny Odell, Lucifer Odell, vanler Odets, Foxb Oe, Kiwini Oe, Natalie Oe, Eddy Ofarrel, Mylinn Ofeq, Roundabout Ogee, Bannock Ogg, Behemoth Ogre, Anju Oh, BlackCinders Oh, Canoe Oh, Crippy Oh, Dakotah Oh, Day Oh, Doo Oh, Feander Oh, Heady Oh, Job Oh, kyushudan Oh, Lila Oh, Luxura Oh, MrSim Oh, OHYES Oh, Oury Oh, Qyty Oh, Santa Oh, Svn Oh, Volta Oh, xepadd Oh, isla Oh, Angelina Ohara, Troy Oherlihy, Yasuragi Okame, Rephaim Okina, Sven Okonomi, benyamin Olaria, EvlDesire Oliver, Brightly Olivier, Renton Olivier, Gary Olson, Christopher Omega, Hamncheese Omlet, Joseph Omlet, Libuse Ondricek, luminye Onizuka, Miyuki Onmura, Toshiro Onmura, Hotaru Onomatopoeia, Isis Ophelia, Orchid Ophelia, Stumbelina Ophelia, Roberto Oppewall, Anthony Opus, Spaceman Opus, Vakis Oranos, Koop Orbit, Sammy Ormsby, Cal Orr, Usra Ostrich, Nikki Osumi, Ariel Otafuku, kevin Oto, CJ Oto, Ann Otoole, Patrice Otoole, Abyssin Otoro, Omega Otsuzum, Teravus Ousley, Straitjacket Overlord, Szegey Oxberger, LemonYellow Oxide, Tabitha Oxide, Rianne Ozsvar, Coyote Pace, Hare Pace, Dargon Pacer, Piero Padar, Zasha Padar, Chav Paderborn, Edison Paderborn, Otenth Paderborn, RC Paderborn, Sylvia Paderborn, Chandra Page, Lili Page, Raven Page, Web Page, AnneJoy Paine, DravenLee Paine, Isobella Paine, Larva Paine, Lushious Paine, Thomas42 Paine, Cesar Pakula, Federico Palen, Monica Palen, Diana Palmer, sense Palmer, Crazy Pangaea, Sacha Pangaea, Upinthe Panhandle, Simbiant Paperclip, Drea Paperdoll, Pannie Paperdoll, raymon Paperdoll, jaesung Papp, JohnJ Papp, Alec Paragon, Cliff Paris, Vertigo Paris, Blue Parisi, serena Parisi, JR Parker, Kora Parker, Prawnyloks Parker, Etheria Parrott, Tommy Parrott, Selaras Partridge, Sexy Partridge, Maegen Parvenu, Francie Pasternak, Mr Pasternak, Eloise Pasteur, sandhya2 Patel, Bruce Patton, Penny Patton, Dave Patton, Haole Pau, Andy Paul, LanNoire Paul, Nolte, Paul, Nicholi Pavlova, shadow Pawpaw, Cuffman Payne, Deseri Payne, Gypsy Paz, LupineFox Paz, Shy Peart, Tamara Peart, Pontias Peck, Robin Peel, Elum Pegler, Kotek Pekli, Pulp Pekli, Reaser Pencer, Caliandris Pendragon, Hiro Pendragon, Jopsy Pendragon, Darren Pennell, Mideon Pennell, Powell Pera, Stanley Pera, Tajma Pera, FlipperPA Peregrine, Jennyfur Peregrine, Alana Perenti, MaxPerfect Perenti, Revolution Perenti, MoonGazer Perhaps, Brooklyn Perinal, Shawk Pertwee, Drakior Perun, Charm Perway, Jubilee Pessoa, Riley Pessoa, Tristram Petion, Aline Petrov, Larry Petrov, PantzerHamzter Petshop, scott Petshop, Foxy Petunia, Inara Pey, Tony Pey, Brathak Pfeffer, Henrick Pfeffer, Jack Pfeffer, Marlo Pfeffer, Resi Pfeffer, Lum Pfohl, TACK Pfohl, rren Pfohl, Psyke Phaeton, Sangi Phaeton, Don Pharaoh, Topdog Pharaoh, Anderson Philbin, Philb Philbin, Ridge Phillips, Maximus Phlox, Careltje Phoenix, Winter Phoenix, Ummm Pickles, Piper Picnic, Loki Pico, Hawk Pidgeon, followmeimthe Piedpiper, Alin Piek, Ricky Piek, angelwithahintoflife Pierterson, Elsibeth Pierterson, Marod Pierterson, Noshi Pierterson, Shanel Pierterson, Natasha Pike, Joshua Pilote, Adeline Pinion, Miguel Pinion, Quinn Pinion, Peach Pink, Tisha Pink, Lulu Pink, alice Pinkerton, Getty Pinkerton, Apple Pinkney, Becky Pippen, Tam Pippen, sandra Pitney, Trish Pitney, Max Pitre, Hawk Pitts, Spritely Pixel, Chel Pixie, HotBuns Pixie, Mina Pixie, Mcplane Planer, simon Planer, Guy Plasma, Halogen Plasma, Mathias Plasma, Phill Plasma, White Platini, Phoenix Platthy, Gallia Plubeau, Corki Plunkett, PollyD Plunkett, Asalynda Pluto, Evgeniy Podolsky, OTTONE Pogelmann, Henry Poindexter, Phoebe Poitier, Rowan Poitier, Rigorus Poitier, Stephen Pollock, Mishka Pomeray, Kuatum Poole, Karina Popinjay, Francesca Poppy, Hot Poppy, Shelly Portello, Anthony Portsmouth, Ian Portsmouth, HackPatooey Posthorn, JohnnyD Posthorn, Madison Posthorn, Antitese Poulot, Uccello Poultry, Tanarus Pow, Frederic Prevost, Bill Priestly, Dit Priestly, Phil Priestman, Rachelle Priestman, Sage Priestman, Simone Prieto, Wundur Primbee, Jacob Primeau, Twilight Primeau, Beautifull Princess, Creamyyy Princess, Graciella Princess, Lyna Princess, Theo Prinz, Krono Pro, Don Proost, Games Prototype, Melissa Prunes, Pie Psaltery, Danger Pugilist, Lily Pussycat, LoL Pye, PITTACOS Pye, Prize Pyle, Reese Qian, Ash Qin, Jen Qinan, milesmess Qinan, Quino Quaggy, Starsitter Quality, Algeard Quamar, Flack Quartermass, Marcus Quartermass, Shaggy Quimby, Laura Quimby, Memir Quinn, Amy Quirk, Edge Qunhua, HeinzJoachim Qunhua, Tsing Qunhua, brooke Ra, Dael Ra, Knightsof Ra, Mayo Ra, Roger Raabe, Sharven Raabe, Sail Racer, Supra Racer, Ada Radius, Rob Raffke, Rayne Ragowski, Starfoxtj4 Rail, mantitaur2 Rainbow, Sparkly Rainbow, Andromeda Raine, musicteacher Rampal, Hoyle Rang, Hermione Ranger, jurnal Ranger, Horgus Rasmuson, Trend Rasmuson, Whoosh Rasmuson, Rascal Ratelle, Eriss Rau, Morugai Rau, Ozhika Rau, slave Rau, Awsoonn Rawley, Marie Rawley, Guy Raymaker, JAC Raymaker, PlanetThoughts Raymaker, Rogier Raymaker, Trident Raymaker, Xoren Raymaker, Ranaa Raymond, Rowena Rearwin, Londyn Reatequi, Neo Rebus, Bekka Redgrave, Etude Redgrave, Lyn Redgrave, Publicist Redgrave, Wingless Redgrave, Allie Ree, Jon Ree, Thyna Ree, Zi Ree, Todd Reed, RhaRha Rees, Alex Regent, Alexander Regent, Cat Rehula, Timoteo Reifsnider, Sirus Reiner, Trilobite Reisman, ali Reiter, Ruben Reiter, Fenrir Reitveld, EmpressNever Rejected, Maya Remblai, Kapu Ren, Atticus Renoir, catsrounds Renoir, Cedric Renoir, Julion Renoir, karman Renoir, Sim Renoir, Isabela Repine, MysticalCeCe Repine, Sissimaid Resistance, Tom Reuven, Beagle Revolution, Xin Revolution, Keex Rexroth, Ordos Reymont, Roz Reynolds, CJ Rezillo, Rena Rhea, Hiroaki Rhino, Curious Rhode, Lexy Rhode, Natriumcitrate Rhode, Toshi Rhode, Pam Ribble, Gia Richard, Gigly Richez, Hutton Richez, Renae Richez, Ronald Richez, Roxi Richez, Jimbo Richez, Josh Rident, Finncaev Riederer, Aeryn Riel, INK Rinkitink, Puck Rinkitink, Riki Rinkitink, Edoardo Ritt, Bibi Riva, Eche Riverview, helloau Riverview, Liam Roark, Angela Robertson, Jay Robson, Brooks Rocco, Marth Rocco, Mo Rocco, Wolf Rocco, dartagnan29 Rockett, marco Rockett, Monida Rockett, ortaga Rockett, Raziel Rockett, Anastasia Roelofs, Stormy Roentgen, Hector Roffo, Ricci Roffo, Tonio Roffo, Picaro Roffo, IvanTwin Rogers, Chrisje100 Rojyo, Rowana Rolland, Shine Rolls, Iris Ronmark, Jacques Ronmark, Phil Ronzoni, Keishii Roo, MattyMcHatton Roo, Kimika Rookwood, Prego Rosca, Rayne Rosca, Uber Rosca, Felix Rosenberg, Amethyst Rosencrans, Alejandro Rosenthal, Davian Rosenthal, Edgar Rosenthal, Seth Rosetta, Alustriel Rosewood, Arenae Rosewood, Fury Rosewood, Gwendelyn Rosewood, Kira Rosewood, liz Rosewood, Oriene Rosewood, Lashelle Rosse, Roodvosje Rosse, Rose Rosse, Rico Rosse, Jonah Rossini, Milordino Rossini, Sparrow Rossini, Yira Rossini, Zanah Rossini, zina Rossini, Francaldo Rotunno, Reckless Rotunno, Excel Rousselot, mica Rousselot, Lexie Rovio, Alexandra Rucker, Lilith Ruff, Stina Ruff, Aragorn Runo, Kragelund Runo, Rinziq Runo, ViRi Runo, Distilled1 Rush, Jordann Russell, Kryton Russell, Miyaki, Russell, Brent Russell, Revons Rutabaga, Rocky Rutabaga, FEZ Rutherford, Darcy Rutledge, Jo Ruttenberg, Odo Ruttenberg, Theodorrick Ruttenberg, Artix Ruxton, Armand Ryan, Zakeir Rydell, Cathy Ryder, McCall Ryder, Inarra Saarinen, Kai Sabena, Sarie Sabena, Alissa Sabre, Arcticfire Sabre, BamBam Sachertorte, kai Sachertorte, Umphrey Sachs, Mila Sadovnycha, Proxima Saenz, Lynne Sage, Cheloxchile2006 Saiman, Milo Saintlouis, Natasia Saintlouis, Trinity Saintlouis, Rollergirl Saiz, Nyoko Salome, Scandinavian Salomon, Agarash Salsman, Rayne Saltair, Horus Salubrius, Solta Salyut, Nicola Samiam, Aleg Sandell, angeltf Sands, Balkan Sands, Charmaign Sands, Check Sands, Damien Sands, Orika Sands, Other Sands, Padraic Sands, Sotos Sands, Taira Sands, Cloudia Sani, Carinthia Sansome, Allasandra Santos, Rosell Santos, Solanghe Sarlo, Ishara Sartre, Charles Sassoon, Damian Saule, Jesse Sautereau, Natalia Sawley, Billie Scaggs, Mordecai Scaggs, Roz Scaggs, Socaliwag Scaggs, Johannason Scarborough, Jim Schack, Norm Schack, Fatz Scheflo, MissKitten Schildhauer, Nelson Schmo, Werner Schnabel, Tammye Schneider, Frank Schneider, Funk Schnook, cleopatras Schnyder, mylife Schnyder, ScOrPiOn Schnyder, Count Schridde, Kircheis Schroeder, Julia Schulze, Anita Schwartzman, Cornelious Schwartzman, Etrius Schwartzman, Dr Scofield, Joe Scofield, RyanAva Scofield, Kira Scott, Six Seale, Sterremare Seale, Dallas Seaton, Star Seaton, Spurs Seattle, Elio Seelowe, Jaden Seelowe, Moira Seelowe, Teleio Seferis, Artemus Seifert, Gouranga Seiling, Alyrae Seitan, Grace Selene, Maureen Selene, amandaelisabeth Sellers, Chelsey Sellers, Fashion Sellers, Novellium Sellers, Kerutsen Sellery, Semolina Semaphore, ice Semple, Daisy Semyorka, Roxy Semyorka, DarkStar Senior, River Senyurt, Singular Seoul, James Seraph, Jesrad Seraph, Liv Serf, Tears Serf, Neon Serge, Magnum Serpentine, Jazzy Serra, Aiyana Serrurier, Coelacanth Seurat, Jean Severine, Landreu Severine, Gitana Sevier, Elizabell Sewell, johni Seymour, nayeli Shabazz, Talena Shabazz, Princess Shalala, Robbie Shamroy, Dimas Shan, Lancer Shan, Nae Shan, onlyyou Shan, Shango Shan, Spirit Shan, Jumpda Shark, DigiKatt Shaw, Steffi Shenlin, Afon Shepherd, Clair Shepherd, Eastern Shepherd, LadyLeah Shepherd, Lexis Shepherd, Siddhartha Shepherd, Taran Shepherd, Valentin Shepherd, Jieux Shepherd, Delicious Sheridan, LauraAnne Sheridan, Remco Sheridan, Aki Shichiroji, Todedoz Shichiroji, BlckCobra Shikami, Mary Shikami, Seven Shikami, Thomas Shikami, Szia Shilova, lisalove Shimada, Yoyo Shinobu, Tarrant Shipman, Kitsuribami Shirabyoshi, Amber Shirakawa, AmySue Shirakawa, Kanna Shirakawa, Shelectra Shirakawa, CJ Shojo, Felix Sholokhov, VonFoxFire Sholokhov, Renegade Shriner, Alexandra Shu, Bung Shu, Ddevine Shuftan, emmakael Shuftan, Skipper Shutt, Jaime Sicling, Ko Sicling, Lucien Sidek, Ulrich Sidran, Darlene Sieyes, Darling Sieyes, sparkles Sieyes, Mjren Silvera, Apotheus Silverman, HVX Silverstar, Nirven Silverstar, Rocco Silverstar, Tamar Silverstar, Rosie Simca, Drvid Simoni, Dragos Simons, barnowlgirl Sinatra, Cheyanne Sinatra, marilsdb Sinatra, Nanceee Sinatra, Quiet Sinatra, Vent Sinatra, Frosty Sinatra, Misty Singer, Katie Singh, Sydney Singh, Philo Sion, followingwaves Sirbu, Saya Sirbu, Don Sivocci, Danielle Skall, Hegemon Skall, JASMINE Skall, Mykal Skall, Dovryn Skall, Arathorn Slade, Artakan Slade, djsunz Slade, Eleana Slade, Erica Slade, Jupiter Slade, Kronikz Slade, Methosmv Slade, piro Slade, Snapeslove Slade, Sys Slade, TylerSnk Slade, Wylee Slade, ZirQ Slade, Xabax Slade, Malik Slapstick, Coug Sleeper, Kenny Sleeper, Lucia Slippery, Adrian Sloane, Alistair Sloane, Rysz Sloane, Angel Slocombe, PrinceDK Slunce, Flo Slunce, Tatiana Smagulov, badboy1331 Smalls, Brat Smalls, EDhardy Smalls, Lomgren Smalls, DonAmon Smirnov, Andrew Smith, Elliott Smith, Mikal Snakeankle, Esch Snoats, Eian Snook, Pavee Snook, floe Snookums, kramer Snookums, Rach Snookums, Jonboy Snye, fionn Soderstrom, miguel Soderstrom, Bellisima Sodwind, Dafydd Sodwind, Scott69 Sodwind, Shipper Sodwind, Ilianexsi Sojourner, Shirokuro Sojourner, The Sojourner, Wiccan Sojourner, Elijah Sol, Lara Sola, Vanilla Sola, Silvari Soleil, David23 Something, DolphPun Somme, Rhyph Somme, aewyn Sondergaard, Kali Sonic, Packard Sonic, Jayman Sonnenblume, Pippen Sonnenblume, Esichs Sonnerstein, Sylvia Sonoda, ASCLEPIUS Soon, Tecumseh Soon, Julia Soothsayer, Shadowspawn Soothsayer, Tindallia Soothsayer, RJ Source, Akemi Soy, Aln Soy, Aaron Soyer, Tsuno Soyinka, Oz Spade, Ellen Spark, karlynn Sparkle, Kaylie Sparkle, TruHeart Sparkle, Dave Sparrow, slyflower Sparrow, Flapjack Spatula, Cheyenne Spearmann, Jester Spearmann, JewelKicker Spearmann, Data Spectre, Rai Speculaas, Sin Speculaas, Thornne Speculaas, Ehdward Spengler, mo Spengler, Wesley Spengler, Datentyp Sperber, Niko Sperber, Giuseppe Spicoli, Snakeye Spicoli, Marcus Spire, Setori Spire, Crackervelli Spitteler, Naughty Spitteler, Studders101 Spitteler, Yojne Spitteler, ScaryMary Spitz, Geezer Spoonhammer, GutterBlood Spoonhammer, Tour Spoonhammer, Sheet Spotter, tree Sprawl, Kitty Sprocket, Alan Standish, Fox Standish, Clive Stanwell, Alexis Stapovic, Hippyjim Starbrook, Missy Starbrook, Thunder Starbrook, Babydoll Stardust, Birdy Stardust, Johannes Starostin, Ariana Starr, Funk Starr, eltee Statosky, Hanako Stawberry, Micheal Steadham, Blueman Steele, sugar Steele, Jennifer Steele, Golda Stein, Tyler Stein, Uber Stein, Bernd Steinhardt, Whisper Stella, Hjoerdis Stenvaag, Timmy Stepford, LaserFingers Steptoe, Athena Sterling, Selvina Sterling, Hunter Stern, Ocmer Sternberg, Jabath Steuart, Sylvia Steuben, Bracin Stevenson, Sammmy Stewart, Skeeter Stiglitz, Lily Stilman, Nisaa Stilman, Quick Stilman, Spaydar Stine, Unger Stine, Sherrade Stirling, Till Stirling, Juggernaut Stoklitsky, Meret Stonebender, Argent Stonecutter, Gearsawe Stonecutter, Kayla Stonecutter, Liquids Stonewall, Nevera Stooge, Matthew Stork, Sam Stork, Neotoy Story, AllieKat Stovall, Krystal Straaf, Kyrus Straaf, Laars Straaf, Niccia Straaf, Aloe Stradling, egbert Stradling, Lotus Stradling, SlyFox Stradling, Eristic Strangelove, Thaumata Strangelove, Valiant Strangelove, Salome Strangelove, Erica Strauss, Zinger Strauss, Gabrielle Street, Artistniko Streeter, Bruce82 Streeter, Builder Streeter, dast Streeter, Hans Streeter, Stilette Streeter, Darzus Strutt, Bluto Stubbs, Olivier Sturges, Kharie Su, Rexx Su, Vudu Suavage, Silverrain Sucettes, Siyu Suen, Zack Suen, Linnian Sugar, Sierra Sugar, Stacey Sugar, Jodie Suisei, Koto Sukra, Takira Sukra, Ravanne Sullivan, Rik Sullivan, Sofi Sullivan, Joffi Sumbula, BrightAngel Summers, Kiyana Summers, Eclipsed Sun, Shinshinto Sungsoo, Angel Sunset, Warord Suntzu, DalE Supply, ivan Supply, Frictionless Surface, Brightwing Surtees, David Surtees, Georges Susa, Caterina Susanti, Fatima Susanti, Owen Susanto, Caliburn Susanto, Kevin Susenko, Forseti Svarog, Kinga Svarog, Batman Swenholt, Flame Swenholt, Shyressa Swenholt, Earle Swenson, Harvey Swenson, Kevin Swenson, Anastasia Swindlehurst, Liz Swindlehurst, Swein Swindlehurst, Verrenus Swindlehurst, Christain Switchblade, Guy Szondi, Nonlucid Szondi, Sagmumu Szondi, XVenomX Szymborska, CaelThunderwing Tackleberry, Mitzi Tackleberry, Ayla Tae, Maya Tae, Princess Tae, Carsten Taft, Gigs Taggart, Aphrodite Tagore, Lynn Tagore, Jenna Taira, Zephora Taiyou, Rusmi Taka, Kaimen Takahe, Akina Takakura, Sabina Takakura, Tao Takashi, Cornelius Tal, Dolmere Talamasca, Kelindra Talamasca, Sabane Talamasca, Tod69 Talamasca, Bad Tamale, Kitchkinet Tamale, Dany Tammas, kym Tammas, Phoming Tammas, sasha Tammas, Alina Tamura, Janu Tamura, Karetta Tamura, Melli Tamura, Morina Tamura, Snake Tamura, Valentina Tamura, Rutain Tandino, Tracy Tani, Jolt Tank, Rachel Tapioca, Ilyara Tardis, Jaxx Tardis, Aaron Tardis, Sim Tatham, Tobi Taurog, Joey Tavoularis, John Taylor, Jeffrey Temin, Enabran Templar, Crymzon Tempura, Jehan Tendaze, Angel Tengu, Arctic Tenk, Ginevro Tenk, OolBatar Tenk, Sally Tenk, Storchi Tenk, Bloodsong Termagant, Cubey Terra, Lynn Terra, Niles Theas, Sterre Theas, Lost Thereian, Osprey Therian, Lukas Thetan, Larson Thibaud, Redd Thielt, Tana Thielt, Thongshaman Thirroul, Millie Thompson, Brooke Thurston, Lisa Thyben, Bengal Tiger, RavenAnn Tiger, Terrigo Tiger, Sable Till, Soraya Till, Zayn Till, Trixie Timtam, immortal Tiramisu, Matthew Todd, Watermelon Tokyo, Amily Toland, Prijian Toland, Wigger Toland, Wym Toland, Shaia Toll, harathoi Toman, EH Tomcat, Pawz Tomcat, nicky Tomsen, Olyntchen Tomsen, Siul Tomsen, Zukini Tomsen, Darkover Tone, JazzySweet Tone, Tea Tone, Shelly Toonie, Tristan Torgeson, Katie Tornado, manufr Torok, Drew Torres, Xavier Tosung, Benjamin Tower, TJ Tower, Coquine Tracy, Fintaya Tracy, Herman Tracy, killer Tracy, Marcel Tran, Cabal Trautman, Nadja Travanti, Steve Trenchard, Grimm Trenchmouth, Neogrinch Trenchmouth, Scarlet Trenton, input Trilam, Debbie Trilling, Dahlia Trimble, TrainingDay Trimble, Candy Tripp, FeelGood Tripp, Nate Tripp, Skalligrim Tripp, stimpy Tripp, Michael Tripsa, Orion Tristan, Sam Troell, Celebrity Trollop, MaidHeather Trollop, Roberto Trotter, Tipsey Troughton, Lucille Trudeau, Paul Trudeau, arthus Truffaut, Chambord Truffaut, Siss Truss, Boshiken Tsuki, Sindy Tsure, Dante Tucker, ImAOzGrl Tucker, Scott Tucker, BabyAlice Tulip, Bryce Tully, Pixie Tungl, Lyr Tuppakaka, Hawthorn Tuque, Omei Turnbull, Victor Tuxing, Cloe Twang, Twill Tymets, Andrew Tyson, Lyndyn Tzara, Ilyushin Tzedek このほかの大勢のみなさんにも感謝します。 -APR Copyright (C) 2000-2004 The Apache Software Foundation -Cg Copyright (C) 2002, NVIDIA Corporationa. -cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) + +APR Copyright (C) 2000-2004 The Apache Software Foundation +Cg Copyright (C) 2002, NVIDIA Corporationa. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). GL Copyright (C) 1999-2004 Brian Paul. @@ -20,10 +20,11 @@ OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) xmlrpc-epi Copyright (C) 2000 Epinions, Inc. -zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. +zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. + +無断複写・転載を禁じます。 詳細はlicenses.txtを参照してください。 -無断転写、複製、転載を禁じます。詳細は licenses.txt をご覧ください。 -これは誤作動ではなく、特徴です。 +スティーブはマジで休みが必要だc </text_editor> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_about_land.xml b/linden/indra/newview/skins/xui/ja/floater_about_land.xml index 7cd4ed9..5c04c96 100644 --- a/linden/indra/newview/skins/xui/ja/floater_about_land.xml +++ b/linden/indra/newview/skins/xui/ja/floater_about_land.xml @@ -1,85 +1,84 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floaterland" title="土地について"> +<floater name="floaterland" title="土地情報"> <tab_container name="landtab"> <panel label="一般" name="land_general_panel"> <text type="string" length="1" name="Name:"> - 名前: + 名前: </text> <text type="string" length="1" name="Description:"> - 説明: + 説明: </text> <text type="string" length="1" name="Owner:"> - 所有者: + オーナー: </text> <text type="string" length="1" name="OwnerText"> Leyla Linden </text> - <button label="プロファイル..." label_selected="プロファイル..." + <button label="プロフィール..." label_selected="プロフィール..." name="Profile..." /> <text type="string" length="1" name="Group:"> - グループ: + グループ: </text> <button label="設定..." label_selected="設定..." name="Set..." /> - <check_box label="グループに譲渡を許可" name="check deed" - tool_tip="グループとグループ所有の土地配分が、よりサポートされるように、オフィサーはこの土地をグループに譲渡できます。" /> - <button label="証書を作成して譲渡する..." - label_selected="証書を作成して譲渡する..." name="Deed..." - tool_tip="選択されたグループのオフィサーの場合にのみ、土地を譲渡することができます。" /> - <check_box label="譲渡により所有者が貢献する" name="check contib" - tool_tip="グループに土地が譲渡される際は、以前のオーナーは、それをサポートするために十分な土地配分を貢献します。" /> + <check_box label="グループへの譲渡を許可" name="check deed" + tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。" /> + <button label="譲渡..." label_selected="譲渡..." name="Deed..." + tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。" /> + <check_box label="オーナーが譲渡と共に寄付" name="check contrib" + tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。" /> <text type="string" length="1" name="For Sale:"> - 売り出し: + 売り出し中: </text> <text type="string" length="1" name="Not for sale."> - 販売対象外 + 販売対象外。 </text> <text type="string" length="1" name="For Sale: Price L$[PRICE]."> - 価格: L$[PRICE]. + 料金:L$[PRICE] </text> - <button label="土地を販売" label_selected="土地を販売" name="Sell Land..." /> + <button label="土地を販売..." label_selected="土地を販売..." + name="Sell Land..." /> <text type="string" length="1" name="For sale to"> 販売先:[BUYER] </text> <text type="string" length="1" name="Sell with landowners objects in parcel."> - 販売に含まれるオブジェクト + 販売に含めるオブジェクト。 </text> <text type="string" length="1" name="Selling with no objects in parcel."> - 販売に含まれないオブジェクト + 販売に含めないオブジェクト。 </text> <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale" /> <text type="string" length="1" name="Claimed:"> - 主張: + 要求: </text> <text type="string" length="1" name="DateClaimText"> - 2006年8月15日火曜日13:47:25 + 2006年8月15日火曜日13:47:25 </text> <text type="string" length="1" name="PriceLabel"> - エリア: + 面積: </text> <text type="string" length="1" name="PriceText"> 4048平方メートル </text> <text type="string" length="1" name="Traffic:"> - 交通: + 交通量: </text> <text type="string" length="1" name="DwellText"> - 0 + 誤 </text> <button label="土地を購入..." label_selected="土地を購入..." name="Buy Land..." /> - <button label="グループで購入..." label_selected="グループで購入..." - name="Buy For Group..." /> + <button label="グループ用に購入..." + label_selected="グループ用に購入..." name="Buy For Group..." /> <button label="パスを購入..." label_selected="パスを購入..." name="Buy Pass..." tool_tip="パスはこの土地への一時的なアクセスを許可します。" /> - <button label="土地を捨てる..." label_selected="土地を捨てる..." + <button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..." /> - <button label="土地を再要求する..." - label_selected="土地を再要求する..." name="Reclaim Land..." /> - <button label="Linden 売り出し..." label_selected="Linden 売り出し..." + <button label="土地開拓..." label_selected="土地開拓..." name="Reclaim Land..." /> + <button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." - tool_tip="土地は所有され、コンテンツが設定されている必要があり、すでに競売の対象になっていていません。" /> + tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。" /> <text name="new users only"> 新規ユーザーのみ </text> @@ -87,148 +86,159 @@ 誰でも </text> </panel> - <panel label="特権" name="land_covenant_panel"> + <panel label="約款" name="land_covenant_panel"> <text type="string" length="1" name="covenant_timestamp_text"> 最後の更新1969年12月31日水曜日16:00:00 </text> <text type="string" length="1" name="region_name_lbl"> - 地域: + 地域: </text> <text type="string" length="1" name="region_name_text"> Leyla </text> <text type="string" length="1" name="estate_name_lbl"> - 所有地: + 不動産: </text> <text type="string" length="1" name="estate_name_text"> - メイン・ランド + メインランド </text> <text type="string" length="1" name="estate_owner_lbl"> 不動産オーナー: </text> <text type="string" length="1" name="estate_owner_text"> - (なし) + (なし) </text> <text type="string" length="1" name="resellable_clause"> - この地域で購入した土地は、再販ができない可能性があります。 + この地域で購入した土地は、再販できないことがあります。 </text> <text type="string" length="1" name="changeable_clause"> - この地域で購入した土地は、統合/再分割ができない可能性があります。 + この地域で購入した土地は、統合/再分割できないことがあります。 </text> <text_editor type="string" length="1" name="covenant_editor"> - 本不動産には、約款の提供がありません。 + この不動産には約款がありません。 </text_editor> <text name="can_resell"> - この地域で購入した土地は、再販ができます。 + この地域で購入した土地は、再販できます。 </text> <text name="can_not_resell"> - この地域で購入した土地は、再販ができない可能性があります。 + この地域で購入した土地は、再販できないことがあります。 </text> <text name="can_change"> - この地域で購入した土地は、統合、または再分割ができます。 + この地域で購入した土地は、統合または再分割できます。 </text> <text name="can_not_change"> - この地域で購入した土地は、統合、または再分割ができない可能性があります。 + この地域で購入した土地は、統合/再分割できないことがあります。 </text> </panel> <panel label="オブジェクト" name="land_objects_panel"> <text type="string" length="1" name="Simulator primitive usage:"> - シュミレータの基本使用: + シミュレータの基本要素使用状況: </text> <text type="string" length="1" name="0 out of 0 available"> - 14055の内0(14055利用可能) + 14055のうち0(14055利用可能) </text> <text type="string" length="1" name="Primitives parcel supports:"> - 区画支援を基本要素: + 区画でサポートされる基本要素数: </text> <text type="string" length="1" name="object_contrib_text"> 926 </text> <text type="string" length="1" name="Primitives on parcel:"> - 区画を基本要素: + 区画上の基本要素数: </text> <text type="string" length="1" name="total_objects_text"> - 0 + 誤 </text> <text type="string" length="1" name="Owned by parcel owner:"> - 区画所有者によって所有: + 区画オーナーによる所有: </text> <text type="string" length="1" name="owner_objects_text"> - 0 + 誤 </text> <button label="表示" label_selected="表示" name="ShowOwner" /> - <button label="戻す..." label_selected="戻す..." name="ReturnOwner..." - tool_tip="オブジェクトを所有者に返却します" /> + <button label="返却..." label_selected="返却..." name="ReturnOwner..." + tool_tip="オブジェクトをオーナーに返却します" /> <text type="string" length="1" name="Set to group:"> - グループへ設定: + グループに設定: </text> <text type="string" length="1" name="group_objects_text"> - 0 + 誤 </text> <button label="表示" label_selected="表示" name="ShowGroup" /> - <button label="戻す..." label_selected="戻す..." name="ReturnGroup..." - tool_tip="オブジェクトを所有者に返却します" /> + <button label="返却..." label_selected="返却..." name="ReturnGroup..." + tool_tip="オブジェクトをオーナーに返却します" /> <text type="string" length="1" name="Owned by others:"> - 他の人によって所有: + 他人による所有: </text> <text type="string" length="1" name="other_objects_text"> - 0 + 誤 </text> <button label="表示" label_selected="表示" name="ShowOther" /> - <button label="戻す..." label_selected="戻す..." name="ReturnOther..." - tool_tip="オブジェクトを所有者に返却します" /> + <button label="返却..." label_selected="返却..." name="ReturnOther..." + tool_tip="オブジェクトをオーナーに返却します" /> <text type="string" length="1" name="Selected / sat upon:"> 選択済み/決定済み: </text> <text type="string" length="1" name="selected_objects_text"> - 0 + 誤 </text> - <text type="string" length="1" name="Autoreturn other resident&apos;s objects (minutes, 0 for off):"> - 他の居住者のオブジェクトの自動返却 (分、, オフようの0 ): + <text type="string" length="1" name="Autoreturn"> + 他の住人のオブジェクトの自動返却(分、オフの設定は0) </text> <text type="string" length="1" name="Object Owners:"> - オブジェクト の所有者: - </text> - <button label="リストをリフレッシュ" - label_selected="リストをリフレッシュ" name="Refresh List" /> - <button label="オブジェクトを戻す..." - label_selected="オブジェクトを戻す..." name="Return objects..." /> - <button label="" label_selected="" name="Type" - tool_tip="種類で振り分けます。" /> + オブジェクトのオーナー: + </text> + <button label="リスト更新" label_selected="リスト更新" name="Refresh List" /> + <button label="オブジェクトの返却..." + label_selected="オブジェクトの返却..." name="Return objects..." /> + <button label="" label_selected="" name="Type" tool_tip="種類で振り分け" /> <button label="名前" label_selected="名前" name="Name" - tool_tip="名前で振り分けます。" /> - <button label="数える" label_selected="数える" name="Count" - tool_tip="カウントで振り分けます。" /> + tool_tip="名前で振り分け" /> + <button label="カウント" label_selected="カウント" name="Count" + tool_tip="カウントで振り分け" /> </panel> <panel label="オプション" name="land_options_panel"> <text type="string" length="1" name="allow_label"> - 他の居住者に以下を許す: - </text> - <check_box label="オブジェクトを作成" name="edit objects check" /> - <check_box label="土地を編集" name="edit land check" /> - <check_box label="ランドマークを作成" name="check landmark" /> - <check_box label="グループスクリプトを起動" name="check group scripts" /> - <check_box label="飛ぶ" name="check fly" /> - <check_box label="他のスクリプトを起動" name="check other scripts" /> + 他の住人に以下を許可: + </text> + <check_box label="地形を編集" name="edit land check" /> + <check_box label="ランドマーク作成" name="check landmark" /> + <check_box label="飛行" name="check fly" /> + <text type="string" length="1" name="allow_label2"> + オブジェクトの作成: + </text> + <check_box label="すべての住人" name="edit objects check" /> + <check_box label="グループ" name="edit group objects check" /> + <text type="string" length="1" name="allow_label3"> + オブジェクト・エントリ: + </text> + <check_box label="すべての住人" name="all object entry check" /> + <check_box label="グループ" name="group object entry check" /> + <text type="string" length="1" name="allow_label4"> + スクリプト実行: + </text> + <check_box label="すべての住人" name="check other scripts" /> + <check_box label="グループ" name="check group scripts" /> <text type="string" length="1" name="land_options_label"> - 土地のオプション: + 土地オプション: </text> - <check_box label="安全(ダメージなし)" name="check safe" /> - <check_box label="プッシングを制限" name="PushRestrictCheck" - tool_tip="llPushObject は、区画オーナーのスクリプト、または、プッシュする者がスクリプトの所有者である場合のみ動きます。" /> - <check_box label="Show in Search > Places (L$30/week) under" name="ShowDirectoryCheck" /> + <check_box label="安全(ダメージなし)" name="check safe" /> + <check_box label="プッシュを制限" name="PushRestrictCheck" + tool_tip="llPushObjectが機能するのは、区画オーナーのスクリプトを通じて使用された場合か、またはプッシュ元がオーナーになっているスクリプトを通じて使用された場合だけです。" /> + <check_box label="「検索」>「場所」に表示(L$30/週)" + name="ShowDirectoryCheck" /> <combo_box name="land category"> <combo_item name="AnyCategory"> - どんなカテゴリでも + 全カテゴリー </combo_item> <combo_item name="LindenLocation"> - Lindenロケーション + Linden所在地 </combo_item> <combo_item name="Adult"> 成人 </combo_item> <combo_item name="Arts&Culture"> - アート & カルチャー + アート&カルチャー </combo_item> <combo_item name="Business"> ビジネス @@ -240,13 +250,13 @@ ゲーム </combo_item> <combo_item name="Hangout"> - 仲間 + たまり場 </combo_item> <combo_item name="NewcomerFriendly"> - 新参者に好意的 + 新住人に好意的 </combo_item> <combo_item name="Parks&Nature"> - 公園 & 自然 + 公園と自然 </combo_item> <combo_item name="Residential"> 住宅用 @@ -258,33 +268,32 @@ その他 </combo_item> </combo_box> - <check_box label="ウェブにリストを公表する" name="PublishCheck" - tool_tip="自分の区画情報をWeb上で公開します。" /> <check_box label="成人向けコンテンツ" name="MatureCheck" - tool_tip="あなたの区画情報は、成人向けであるとみなされます。" /> + tool_tip="あなたの区画情報またはコンテンツが成人向けと見なされています。" /> + <check_box label="リストをウェブ上で公開" name="PublishCheck" + tool_tip="自分の区画情報をウェブ上で公開します。" /> <button label="?" label_selected="?" name="?" /> <text type="string" length="1" name="Snapshot:"> - スナップショット: + スナップショット: </text> - <texture_picker label="" name="snapshot_ctrl" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="" name="snapshot_ctrl" tool_tip="写真をクリックして選択" /> <text type="string" length="1" name="Landing Point: (none)"> 着地点:(なし) </text> <button label="設定" label_selected="設定" name="Set" - tool_tip="あなたのアバターの位置で、到着地点を設定してください。この区画である必要があります。" /> - <button label="消す" label_selected="消す" name="Clear" - tool_tip="到着地点をクリアしてください。" /> + tool_tip="あなたのアバターのロケーションに着地点を設定してください。 この土地区画の中でなければなりません。" /> + <button label="クリア" label_selected="クリア" name="Clear" + tool_tip="着地点をクリアしてください。" /> <text type="string" length="1" name="Teleport Routing: "> - テレポートルーティング: + テレポート・ルート: </text> <combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land."> <combo_item type="string" length="1" name="Blocked"> - ふさいだ + ブロック済み </combo_item> <combo_item type="string" length="1" name="LandingPoint"> - 着陸地点 + 着地点 </combo_item> <combo_item type="string" length="1" name="Anywhere"> どこでも @@ -292,53 +301,52 @@ </combo_box> </panel> <panel label="メディア" name="land_media_panel"> - <check_box label="この区画の空間的な音を制限する" name="check sound local" /> + <check_box label="空間音響をこの区画だけに限定" name="check sound local" /> <text type="string" length="1" name="Music URL:"> - 音楽 URL: + ミュージックURL: </text> <text type="string" length="1" name="Media texture:"> メディア テクスチャー: </text> <text type="string" length="1" name="Replace this texture:"> - このテクスチャーの交換: + このテクスチャーを置換: </text> - <texture_picker label="" name="media texture" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="" name="media texture" tool_tip="写真をクリックして選択" /> <text type="string" length="1" name="with content from this URL:"> - このURLからのコンテンツつき: + この URLからのコンテンツ: </text> <check_box - label="自動基準コンテンツ (よりゆっくりで低い視覚的品質)" + label="コンテンツのスケールを自動設定(描画速度と画質が低下します)" name="media_auto_scale" - tool_tip="このオプションを確認することで、この区画のコンテンツを自動的に推定します。若干速度が遅く、視覚的に劣る可能性がありますが、他のテクスチャー測定および配置は必要ありません。" /> + tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。" /> </panel> <panel label="アクセス" name="land_access_panel"> <text type="string" length="1" name="Limit access to this parcel to:"> - この区画へのアクセスの限定: + この区画へのアクセスを制限: </text> <check_box label="グループ:(なし)" name="GroupCheck" /> <check_box label="アバター:(0リスト上、最大300)" name="AccessCheck" /> <button label="追加..." label_selected="追加..." name="Add..." /> - <button label="取り除く" label_selected="取り除く" name="Remove" /> - <check_box label="一時アクセスを許可するパスを売却:" name="PassCheck" /> - <spinner label="L$での価格:" name="PriceSpin" /> - <spinner label="アクセス時間:" name="HoursSpin" /> + <button label="削除" label_selected="削除" name="Remove" /> + <check_box label="一時アクセス用のパスを販売:" name="PassCheck" /> + <spinner label="L$建て価格:" name="PriceSpin" /> + <spinner label="アクセス時間:" name="HoursSpin" /> </panel> - <panel label="アクセス禁止" name="land_ban_panel"> + <panel label="禁止" name="land_ban_panel"> <check_box label="これらのアバターのアクセス禁止:(現在0、最大300)" name="LandBanCheck" /> <button label="追加..." label_selected="追加..." name="Add..." /> - <button label="取り除く" label_selected="取り除く" name="Remove" /> + <button label="削除" label_selected="削除" name="Remove" /> <text type="string" length="1" name="Deny by Payment Status:"> 支払い状況により拒否: </text> - <check_box label="支払い情報の登録がないものを否認" + <check_box label="支払い情報の登録がないものを拒否" name="DenyAnonymousCheck" /> - <check_box label="支払い情報の登録があるものを否認" + <check_box label="支払い情報の登録があるものを拒否" name="DenyIdentifiedCheck" /> - <check_box label="支払い情報が使用されているものを否認" + <check_box label="支払い情報が使用されているものを拒否" name="DenyTransactedCheck" /> </panel> </tab_container> diff --git a/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml b/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml index cb0450d..283fd9e 100644 --- a/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml +++ b/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml @@ -1,116 +1,116 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Animation Preview" title=""> <text name="name_label"> - 名前: + 名前: </text> <text name="description_label"> - 説明: + 説明: </text> <spinner label="優先順位" name="priority" - tool_tip="このアニメーションにより、上書き可能な他のアニメーションを制御します。" /> + tool_tip="このアニメーションで上書き可能な他のアニメーションを制御します。" /> <text name="preview_label"> - 全てを再検討 + 同時進行行動 </text> <combo_box label="" name="preview_base_anim" - tool_tip="Use this to test your animation behavior while your avatar performs common actions."> + tool_tip="アバターが普通の行動をするときのアニメーションの動きをテストするためにこれを使います。"> <combo_item name="Standing"> - 立っている + 立つ </combo_item> <combo_item name="Walking"> 歩く </combo_item> <combo_item name="Sitting"> - 着席 + 座る </combo_item> <combo_item name="Flying"> 飛行 </combo_item> </combo_box> <check_box label="ループ" name="loop_check" - tool_tip="このアニメーションを繰り返します。" /> - <spinner label="In(%)" name="loop_in_point" - tool_tip="アニメーションのループが戻るポイントを設定します。" /> - <spinner label="アウト(%)" name="loop_out_point" - tool_tip="アニメーションのループを終了するポイントを設定します。" /> + tool_tip="このアニメーションをループ再生します。" /> + <spinner label="イン(%)" name="loop_in_point" + tool_tip="アニメーションのループ復帰点を設定します。" /> + <spinner label="アウト(%)" name="loop_out_point" + tool_tip="アニメーションのループ終了点を設定します。" /> <text name="hand_label"> - 手のポーズ + 手の動き </text> <combo_box label="" name="hand_pose_combo" - tool_tip="Controls what hands do during animation."> + tool_tip="アニメーションの手の動きをコントロールします。"> <combo_item name="Spread"> - 広げる + 広がる </combo_item> <combo_item name="Relaxed"> - くつろいだ + リラックス </combo_item> <combo_item name="PointBoth"> 両方を指す </combo_item> <combo_item name="Fist"> - 最初 + 拳 </combo_item> <combo_item name="RelaxedLeft"> - 左にゆったり + リラックス左 </combo_item> <combo_item name="PointLeft"> 左を指す </combo_item> <combo_item name="FistLeft"> - 最初を左 + 拳左 </combo_item> <combo_item name="RelaxedRight"> - 右にゆったり + リラックス右 </combo_item> <combo_item name="PointRight"> 右を指す </combo_item> <combo_item name="FistRight"> - 最初を右 + 拳右 </combo_item> <combo_item name="SaluteRight"> - 右に敬礼 + 敬礼右 </combo_item> <combo_item name="Typing"> - タイピング + 入力する </combo_item> <combo_item name="PeaceRight"> - 平和の権利 + ピース・サイン右 </combo_item> </combo_box> <text name="emote_label"> 表現 </text> <combo_box label="" name="emote_combo" - tool_tip="Controls what face does during animation."> + tool_tip="アニメーションの顔を表情をコントロールします。"> <combo_item name="[None]"> - [なし] + [None] </combo_item> <combo_item name="Aaaaah"> - ああああー + アーーーーー </combo_item> <combo_item name="Afraid"> - 恐れる + 怖れ </combo_item> <combo_item name="Angry"> - 怒る + 怒り </combo_item> <combo_item name="BigSmile"> 満面の笑み </combo_item> <combo_item name="Bored"> - 退屈した + 退屈 </combo_item> <combo_item name="Cry"> 泣く </combo_item> <combo_item name="Disdain"> - 軽蔑 + 侮蔑 </combo_item> <combo_item name="Embarrassed"> - 恥ずかしい + 困惑 </combo_item> <combo_item name="Frown"> - 眉をひそめる + しかめっ面 </combo_item> <combo_item name="Kiss"> キス @@ -122,7 +122,7 @@ Plllppt </combo_item> <combo_item name="Repulsed"> - 拒絶した + 嫌悪感 </combo_item> <combo_item name="Sad"> 悲しい @@ -131,32 +131,31 @@ 肩をすくめる </combo_item> <combo_item name="Smile"> - 笑う + 笑み </combo_item> <combo_item name="Surprise"> - 驚く + 驚き </combo_item> <combo_item name="Wink"> - まばたきする + ウィンク </combo_item> <combo_item name="Worry"> - 心配する + 心配 </combo_item> </combo_box> - <spinner label="ゆっくり入る (秒)" name="ease_in_time" - tool_tip="アニメーションの取り込みにかかる時間(秒)" /> - <spinner label="ゆっくり出る (秒)" name="ease_out_time" - tool_tip="アニメーションがなじむのにかかる時間(秒)" /> + <spinner label="フェーズイン(秒)" name="ease_in_time" + tool_tip="アニメーションのブレンド・イン時間(秒)" /> + <spinner label="フェーズアウト(秒)" name="ease_out_time" + tool_tip="アニメーションのブレンド・アウト時間(秒)" /> <button label="" name="play_btn" tool_tip="アニメーションの再生/一時停止" /> - <button label="" name="stop_btn" - tool_tip="アニメーションの再生を停止します。" /> + <button label="" name="stop_btn" tool_tip="アニメーションの再生を停止" /> <slider label="" name="playback_slider" /> <text name="bad_animation_text"> - アニメーションファイルを読むことが不可能 - - Poser 4からエクスポートされたBVHファイルを推奨しました。 + アニメーション・ファイルを読み込めません。 + + Poser 4からエクスポートされたBVHファイルを推奨します。 </text> - <button label="取消" name="cancel_btn" /> - <button label="アップロード(L$[AMOUNT])" name="ok_btn" /> + <button label="取り消し" name="cancel_btn" /> + <button label="アップロードL$[AMOUNT]" name="ok_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_auction.xml b/linden/indra/newview/skins/xui/ja/floater_auction.xml index 9a65b50..ba34ec4 100644 --- a/linden/indra/newview/skins/xui/ja/floater_auction.xml +++ b/linden/indra/newview/skins/xui/ja/floater_auction.xml @@ -1,18 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_auction" title="Linden 土地売り出しの開始"> - <check_box label="黄色の選択フェンスを含む" name="fence_check" /> - <combo_box name="saletype_combo"> - <combo_item name="Auction"> - オークション - </combo_item> - <combo_item name="FirstLand"> - 最初の土地 - </combo_item> - </combo_box> +<floater name="floater_auction" title="リンデンの土地売買開始"> + <check_box label="黄色の選択フェンスを含める" name="fence_check" /> <button label="スナップショット" label_selected="スナップショット" name="snapshot_btn" /> <button label="OK" label_selected="OK" name="ok_btn" /> <text name="already for sale"> - すでに販売対象となっている区画は、競売にかけることができません。 + 売り出し中の区画は、オークションに出品できません。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml b/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml index aa6e40a..71d5643 100644 --- a/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml +++ b/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="avatarpicker" title="人選"> +<floater name="avatarpicker" title="住人を選択"> <text name="Type part of the person's name:"> - 人名の一部を記入してください: + 住人の名前の一部を入力してください。 </text> - <button label="見つける" label_selected="見つける" name="Find" /> + <button label="検索" label_selected="検索" name="Find" /> <text name="Or select a calling card:"> - または、コーリングカードを選択: + またはコーリング・カードを選択: </text> <button label="選択" label_selected="選択" name="Select" /> <button label="閉じる" label_selected="閉じる" name="Close" /> <text name="NotFound"> - 『[TEXT]』が見つかりませんでした + '[TEXT]'が見つかりません。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml b/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml index ebbcd32..7ae4b6c 100644 --- a/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml +++ b/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml @@ -1,26 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="avatar_texture_debug" title="Avatar Textures"> +<floater name="avatar_texture_debug" title="アバター・テクスチャー"> <text name=""> - Baked Textures + 構築されたテクスチャー </text> <text name=""> - Composite Textures + 合成テクスチャー </text> <texture_picker label="頭" name="baked_head" /> <texture_picker label="メイクアップ" name="head_bodypaint" /> <texture_picker label="髪" name="hair" /> - <button label="Dump" label_selected="Dump" name="Dump" /> - <texture_picker label="目" name="baked_eyes" /> - <texture_picker label="Eye" name="eye_texture" /> - <texture_picker label="Upper Body" name="baked_upper_body" /> - <texture_picker label="Upper Body Tattoo" name="upper_bodypaint" /> - <texture_picker label="下着" name="undershirt" /> + <button label="捨てる" label_selected="捨てる" name="Dump" /> + <texture_picker label="眼" name="baked_eyes" /> + <texture_picker label="眼" name="eye_texture" /> + <texture_picker label="上半身" name="baked_upper_body" /> + <texture_picker label="上半身のタトゥー" name="upper_bodypaint" /> + <texture_picker label="(下着の)シャツ" name="undershirt" /> <texture_picker label="手袋" name="gloves" /> <texture_picker label="シャツ" name="shirt" /> - <texture_picker label="Upper Jacket" name="upper_jacket" /> - <texture_picker label="Lower Body" name="baked_lower_body" /> - <texture_picker label="Lower Body Tattoo" name="lower_bodypaint" /> - <texture_picker label="パンツ" name="underpants" /> + <texture_picker label="上半身のジャケット" name="upper_jacket" /> + <texture_picker label="下半身" name="baked_lower_body" /> + <texture_picker label="下半身のタトゥー" name="lower_bodypaint" /> + <texture_picker label="(下着の)パンツ" name="underpants" /> <texture_picker label="靴下" name="socks" /> <texture_picker label="靴" name="shoes" /> <texture_picker label="ズボン" name="pants" /> diff --git a/linden/indra/newview/skins/xui/ja/floater_build_options.xml b/linden/indra/newview/skins/xui/ja/floater_build_options.xml index a437edb..49348aa 100644 --- a/linden/indra/newview/skins/xui/ja/floater_build_options.xml +++ b/linden/indra/newview/skins/xui/ja/floater_build_options.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="クリッドオプション"> - <spinner label="グリッドユニット (メートル)" name="GridResolution" /> - <spinner label="グリッドの大きさ (メートル)" name="GridDrawSize" /> - <check_box label="サブユニットのスナッピングを有効にする" - name="GridSubUnit" /> +<floater name="build options floater" title="グリッドのオプション"> + <spinner label="グリッド単位(メートル)" name="GridResolution" /> + <spinner label="グリッド範囲(メートル)" name="GridDrawSize" /> + <check_box label="サブユニット・スナッピングを有効化" name="GridSubUnit" /> + <check_box label="断面を表示" name="GridCrossSection" /> <slider label="グリッドの不透明度" name="GridOpacity" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_bumps.xml b/linden/indra/newview/skins/xui/ja/floater_bumps.xml index 1f06f93..89748b4 100644 --- a/linden/indra/newview/skins/xui/ja/floater_bumps.xml +++ b/linden/indra/newview/skins/xui/ja/floater_bumps.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_bumps" title="バンプ、プッシュ、およびヒット"> +<floater name="floater_bumps" title="ぶつかる、押す、および当たる"> <text name="none_detected"> - 検知無し + 検出なし </text> <text name="bump"> - [TIME][FIRST][LAST]が、あなたにぶつかりました。 + [TIME] [FIRST] [LAST]が、あなたにぶつかりました。 </text> <text name="llpushobject"> - [TIME][FIRST][LAST]が、スクリプトであなたをプッシュしました。 + [TIME] [FIRST] [LAST]が、スクリプトであなたをプッシュしました。 </text> <text name="selected_object_collide"> - [TIME][FIRST][LAST]が、オブジェクトであなたを打ちました。 + [TIME] [FIRST] [LAST]が、オブジェクトをあなたに当てました。 </text> <text name="scripted_object_collide"> - [TIME][FIRST][LAST]が、スクリプトを含むオブジェクトであなたを打ちました。 + [TIME] [FIRST] [LAST]が、スクリプト・オブジェクトをあなたに当てました。 </text> <text name="physical_object_collide"> - [TIME][FIRST][LAST]が、物理的オブジェクトであなたを打ちました。 + [TIME] [FIRST] [LAST]が、物理オブジェクトをあなたに当てました。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml b/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml index b13619e..6e882b9 100644 --- a/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml +++ b/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_buy_contents" title="コンテンツの購入"> +<floater name="floater_buy_contents" title="コンテンツを購入"> <text name="contains_text"> - [NAME]含むのは: + [NAME]の内容: </text> <text name="buy_text"> - [NAME]からL$[AMOUNT]を購入しますか? + コンテンツを[NAME]からL$[AMOUNT]で購入しますか? </text> - <button label="取消" label_selected="取消" name="cancel_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> <button label="購入" label_selected="購入" name="buy_btn" /> - <check_box label="今衣類を着る" name="wear_check" /> + <check_box label="今すぐ服を着る" name="wear_check" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml b/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml index 87b348f..3991d09 100644 --- a/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml +++ b/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml @@ -1,61 +1,62 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="貨幣の購入"> +<floater name="buy currency" title="貨幣購入"> <text name="info_buying"> - 購入貨幣: + 貨幣を購入: </text> <text name="info_cannot_buy"> 現在購入不可: </text> <text name="info_need_more"> - さらに通貨が必要です: + さらにお金が必要です: </text> <text name="error_message"> - 何かが正しくない。 + 何か変です。 </text> - <button label="ウェブサイトに移動" name="error_web" /> + <button label="ウェブ・サイトに移動" name="error_web" /> <text name="contacting"> - LindeXと接触中… + LindeXとコンタクト中… </text> <text name="buy_action_unknown"> - 為替交換上でL$を購入 + LindeX通貨両替でL$を購入 </text> <text name="buy_action"> - [NAME]L$[PRICE] + [NAME] L$ [PRICE] </text> <text name="currency_action"> - L$で購入 + L$購入 </text> <line_editor name="currency_amt"> 1234 </line_editor> <text name="currency_est"> - 約US$[USD] + 約US$ [USD] </text> <text name="balance_label"> - あなたにあるのは、 + 現在所有しているのは </text> <text name="balance_amount"> - L$[AMT] + L$ [AMT] </text> <text name="buying_label"> - 購入しています + あなたは購しようとしています </text> <text name="buying_amount"> - L$[AMT] + L$ [AMT] </text> <text name="total_label"> - あなたの残高は + あなたの残高は </text> <text name="total_amount"> - L$[AMT] + L$ [AMT] </text> <text name="purchase_warning_repurchase"> - この購入を確認するために、通貨だけで購入します。 -あなたはまたオペレーションを試みる必要があります。 + この購買の確認では、通貨だけを購入します。 +再操作が必要になります。 </text> <text name="purchase_warning_notenough"> - 十分な通貨を購入していません。購入金額を増やしてください。 + あなたが買うリンデン・ドルでは足りません。 +購入額を増やしてください。 </text> <button label="購入" name="buy_btn" /> - <button label="取消" name="cancel_btn" /> + <button label="取り消し" name="cancel_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_land.xml b/linden/indra/newview/skins/xui/ja/floater_buy_land.xml index d8e236d..b229cdd 100644 --- a/linden/indra/newview/skins/xui/ja/floater_buy_land.xml +++ b/linden/indra/newview/skins/xui/ja/floater_buy_land.xml @@ -1,109 +1,111 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy land" title="土地の購入"> +<floater name="buy land" title="土地を購入"> <text name="region_name_label"> - 地域: + 地域: </text> <text name="region_name_text"> - (未知) + (不明) </text> <text name="estate_name_label"> - 所有地: + 不動産: </text> <text name="estate_name_text"> - (未知) + (不明) </text> <text name="estate_owner_label"> 不動産オーナー: </text> <text name="estate_owner_text"> - (未知) + (不明) </text> <text name="resellable_changeable_label"> この地域で購入した土地: </text> <text name="resellable_clause"> - この地域で購入した土地は、再販できるかどうかわかりません。 + この地域で購入した土地は、再販が可能な場合とそうでない場合があります。 </text> <text name="changeable_clause"> 統合または再分割される可能性も、されない可能性もあります。 </text> <text name="covenant_text"> - 不動産約款に同意する必要があります: + 不動産約款に同意してください: </text> <text_editor name="covenant_editor"> - ローディング... + ロード中... </text_editor> <check_box label="上記の約款に同意します。" name="agree_covenant" /> <text name="info_parcel_label"> 区画: </text> <text name="info_parcel"> - Scotopteryx 138,204 + Scotopteryx138,204 </text> <text name="info_size_label"> - 規模: + サイズ: </text> <text name="info_size"> - 1024 平方メーター + 1024平方メートル </text> <text name="info_price_label"> 価格: </text> <text name="info_price"> - L$ 1500, オブジェクトが含まれた + L$1500、オブジェクト込み </text> <text name="info_action"> - この土地を購入することは以下です: + この土地を買うと: </text> <text name="error_message"> - 何かが正しくない。 + 何か変です。 </text> - <button label="ウェブサイトに移動" name="error_web" /> + <button label="ウェブ・サイトに移動" name="error_web" /> <text name="account_action"> - プレミアメンバーシップにあなたをアップグレードします。 + プレミアム・メンバーにアップグレード </text> <text name="account_reason"> - プレミアメンバーだけが土地を所有してよい。 + 土地を保有できるのはプレミアム・メンバーだけです。 </text> <combo_box name="account_level"> <combo_item name="US$9.95/month,billedmonthly"> - 月払いで、US$9.95/月 + 月額9.95米ドル、月払い </combo_item> <combo_item name="US$7.50/month,billedquarterly"> - 三ヶ月払いで、US$7.50/月 + 月額7.50米ドル、年4回払い </combo_item> <combo_item name="US$6.00/month,billedannually"> - 年払いで、US$6/月 + 月額6.00米ドル、年払い </combo_item> </combo_box> <text name="land_use_action"> - US$ 40/月毎にあなたの月毎の土地使用料金をあげます。 + 毎月の土地使用料をUS$40に引き上げます。 </text> <text name="land_use_reason"> - あなたは 1,309 平方メーターの土地を保持しています。 -この区画は512平方メーターの土地です。 + あなたには1,309平方メートルの土地があります。 +この区画は 512平方メートルです。 </text> <text name="purchase_action"> - 土地代としてJoe一家にL$4000 を支払います + Joe ResidentにL$4000支払って土地を購入 </text> <text name="currency_reason"> - あなたは L$2,100を持っています。 + 所持金は L$2,100です。 </text> <text name="currency_action"> - 追加L$で購入 + 追加でL$の購入 </text> <line_editor name="currency_amt"> 1000 </line_editor> <text name="currency_est"> - for approx. US$ [AMOUNT2] + 約US$ [AMOUNT2] </text> <text name="currency_balance"> - あなたは L$2,100を持っています。 + 所持金は L$2,100です。 </text> - <check_box label="グループでの支払いを止める" name="remove_contribution" /> + <check_box + label="[AMOUNT]平方メートルの貢献面積をグループから取り除く" + name="remove_contribution" /> <button label="購入" name="buy_btn" /> - <button label="取消" name="cancel_btn" /> + <button label="取り消し" name="cancel_btn" /> <text name="can_resell"> 再販可能 </text> @@ -117,56 +119,58 @@ 統合/再分割不可能 </text> <text name="cant_buy_for_group"> - あなたにはアクティブなグループのために土地を購入する権限がありません。 + あなたはアクティブなグループ用の土地購入を許可されていません。 </text> <text name="no_land_selected"> - 土地が選択されていない + 土地が選択されていません。 </text> <text name="multiple_parcels_selected"> - 複数の異なった区画を選択しました。これより小さなエリアを選択してください。 + 複数の区域が選択されています。 +選択領域を狭めてみてください。 </text> <text name="no_permission"> - あなたにはアクティブなグループのために土地を購入する権限がありません。 + あなたはアクティブなグループ用の土地購入を許可されていません。 </text> <text name="parcel_not_for_sale"> - 選択された区画は、販売対象ではありません。 + 選択された区画は販売対象外です。 </text> <text name="group_already_owns"> - グループはすでにその区画を所有しています。 + グループはすでにこの区画を所有しています。 </text> <text name="you_already_own"> - あなたは、すでに区画を所有しています。 + あなたはすでにこの区画を所有しています。 </text> <text name="set_to_sell_to_other"> - 選択された区画は、他の団体への販売が決定されています。 + 選択された区画は、他の人への販売が決まっています。 </text> <text name="no_public_land"> - 選択されたエリアには、公共の土地はありません。 + 選択された地域に、公共の土地はありません。 </text> <text name="not_owned_by_you"> - 他の使用者に所有された土地が選択されています。これより小さなエリアを選択してください。 + 選択した土地は、他のユーザーが所有しています。 +選択領域を狭めてみてください。 </text> <text name="for_first_time_group"> - 本土地は初めて土地購入をする人のために確保されています。 -グループのために購入することはできません。 + これは初めて土地を購入する人用の土地です。 +グループ用には購入できません。 </text> <text name="for_first_time"> - 本土地は初めて土地購入をする人のために確保されています。 -あなたは、すでに土地を所有しています。 + これは初めて土地を購入する人用の土地です。 +あなたはすでに土地を持っています。 </text> <text name="processing"> - Processing your purchase... + 購入処理中... -(This may take a minute or two.) +(数分かかることがあります) </text> <text name="fetching_error"> - 土地購入情報を入手中に、エラーが発生しました。 + 土地購入の情報入手中にエラーが起きました。 </text> <text name="buying_will"> - この土地を購入することは以下です: + この土地を買うと: </text> <text name="buying_for_group"> - グループのための土地を購入する + グループ用に土地を購入: </text> <text name="cannot_buy_now"> 現在購入不可: @@ -178,54 +182,51 @@ 一切必要なし </text> <text name="must_upgrade"> - 土地を所有するには、あなたのアカウントをアップグレードする必要があります。 + アカウントをアップグレードしないと、土地を所有できません。 </text> <text name="cant_own_land"> - あなたのアカウントは、土地所有が可能です。 - </text> - <text name="first_purchase"> - これは、あなたの初めての土地購入になり、『ファースト・ランド』区画を購入できる唯一の機会です。 - </text> - <text name="first_time_but_not_first_land"> - これは、あなたの初めての土地購入になりますが、ここは初めての購入者のために確保されている区画ではありません。より安い『ファースト・ランド』区画を、検索機能で探すことができます。 + あなたのアカウントで土地を所有できます。 </text> <text name="land_holdings"> - あなたは[BUYER]平方メートルの土地を保持しています。 + あなたは [BUYER] 平方メートルの土地を所有しています。 </text> <text name="pay_to_for_land"> - この土地代として、[SELLER]にL$[AMOUNT]を支払う + この土地の代金として、[SELLER]にL$[AMOUNT]を支払う </text> <text name="buy_for_US"> - Buy L$ [AMOUNT] for approx. US$ [AMOUNT2] , + 約US$ [AMOUNT2]でL$ [AMOUNT]を購入 </text> <text name="parcel_meters"> - この区画は[AMOUNT]平方メートルです。 + この区画は [AMOUNT] 平方メートルあります。 </text> <text name="premium_land"> - この土地は一等地なため、[AMOUNT]平方メートルの価格になります。 + この土地はプレミアムなので、 [AMOUNT] 平方メートル として請求されます。 </text> <text name="discounted_land"> - この土地は値下げされ、[AMOUNT]平方メートルの価格になります。 + この土地は値下げされ、[AMOUNT]平方メートルとして請求されます。 </text> <text name="meters_supports_object"> - [AMOUNT]平方メートルは、[AMOUNT2]オブジェクトをサポートします。 + [AMOUNT]平方メートルであれば、 +[AMOUNT2]個のオブジェクトがサポートされます。 </text> <text name="sold_with_objects"> - オブジェクトと共に販売された + オブジェクトと共に販売済み </text> <text name="insufficient_land_credits"> - グループ[GROUP]は購入完了前に、本区画をカバーするのに十分な資金提供と土地利用クレジットを必要とします。 + この [GROUP] が区画の購入手続きを完了するには、 +価格に見合うだけの寄付された土地の利用実績が +必要です。 </text> <text name="have_enough_lindens"> - あなたはL$[AMOUNT]を所有しているため、この土地の購入には十分です。 + あなたの所持する L$ [AMOUNT]で、この土地を購入できます。 </text> <text name="not_enough_lindens"> - あなたはL$[AMOUNT]しか所有しておらず、さらにL$[AMOUNT2]が必要です。 + あなたの所持金は L$ [AMOUNT]だけで、あとL$ [AMOUNT2] 必要です。 </text> <text name="balance_left"> - 購入後、あなたの残額はL$[AMOUNT]になります。 + 購入後、あなたの残額はL$[AMOUNT]になります。 </text> <text name="balance_needed"> - この土地を入手するには、少なくともL$[AMOUNT]を購入する必要があります。 + この土地を買うには、少なくとも L$ [AMOUNT] を購入する必要があります。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_object.xml b/linden/indra/newview/skins/xui/ja/floater_buy_object.xml index 69b9fde..0f4bf51 100644 --- a/linden/indra/newview/skins/xui/ja/floater_buy_object.xml +++ b/linden/indra/newview/skins/xui/ja/floater_buy_object.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="オブジェクトのコピーの購入"> +<floater name="contents" title="オブジェクトのコピーを購入"> <text name="contents_text"> - そしてそのコンテンツ: + およびそのコンテンツ: </text> <text name="buy_text"> - [NAME]からL$[AMOUNT]を購入しますか? + コンテンツを[NAME]からL$[AMOUNT]で購入しますか? </text> - <button label="取消" label_selected="取消" name="cancel_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> <button label="購入" label_selected="購入" name="buy_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_chat_history.xml b/linden/indra/newview/skins/xui/ja/floater_chat_history.xml index 20a7790..b6e7b4b 100644 --- a/linden/indra/newview/skins/xui/ja/floater_chat_history.xml +++ b/linden/indra/newview/skins/xui/ja/floater_chat_history.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="chat floater" title="チャットの履歴"> - <button label="居住者をミュート..." - label_selected="居住者をミュート..." name="Mute resident" /> - <check_box label="ミュートされたテキストを表示" name="show mutes" /> +<floater name="chat floater" title="チャット履歴"> + <button label="チャット" name="Chat" /> + <button label="ミュート" name="Mute resident" /> + <check_box label="ミュートされたテキストを表示" name="show mutes" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_choose_group.xml b/linden/indra/newview/skins/xui/ja/floater_choose_group.xml index 1406b38..08c91f1 100644 --- a/linden/indra/newview/skins/xui/ja/floater_choose_group.xml +++ b/linden/indra/newview/skins/xui/ja/floater_choose_group.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="groups" title="グループ"> <text name="groupdesc"> - グループを選択: + グループを選択: </text> <button label="OK" label_selected="OK" name="OK" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_clothing.xml b/linden/indra/newview/skins/xui/ja/floater_clothing.xml index 2b5bb5c..5a47a09 100644 --- a/linden/indra/newview/skins/xui/ja/floater_clothing.xml +++ b/linden/indra/newview/skins/xui/ja/floater_clothing.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="clothing" title="衣類"> +<floater name="clothing" title="服"> <scroll_list name="clothing_list"> <column label="" name="icon" /> <column label="Name" name="name" /> </scroll_list> - <button label="取り除く" name="take_off_btn" /> - <button label="着る" name="wear_btn" /> + <button label="取り外す" name="take_off_btn" /> + <button label="装着" name="wear_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_color_picker.xml b/linden/indra/newview/skins/xui/ja/floater_color_picker.xml index ba051d3..8047e49 100644 --- a/linden/indra/newview/skins/xui/ja/floater_color_picker.xml +++ b/linden/indra/newview/skins/xui/ja/floater_color_picker.xml @@ -1,31 +1,31 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="ColorPicker" title="色ピッカー"> +<floater name="ColorPicker" title="カラー・ピッカー"> <text name="r_val_text"> - 赤: + 赤: </text> <text name="g_val_text"> - グリーン: + 緑: </text> <text name="b_val_text"> - 青: + 青: </text> <text name="h_val_text"> - 色合い: + 色相: </text> <text name="s_val_text"> - Sat: + 色調: </text> <text name="l_val_text"> - Lum: + 輝度: </text> - <check_box label="即座に適用" name="apply_immediate" /> + <check_box label="ただちに適用" name="apply_immediate" /> <button label="" label_selected="" name="color_pipette" /> - <button label="取消" label_selected="取消" name="cancel_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> <button label="選択" label_selected="選択" name="select_btn" /> <text name="Current color:"> - 現在の色: + 現在の色: </text> <text name="(Drag below to save.)"> - (保存するために下にドラッグ) + ドラッグして保存 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_critical.xml b/linden/indra/newview/skins/xui/ja/floater_critical.xml index 9d14939..39f6ee8 100644 --- a/linden/indra/newview/skins/xui/ja/floater_critical.xml +++ b/linden/indra/newview/skins/xui/ja/floater_critical.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=" "> - <button label="継続" label_selected="継続" name="Continue" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="続行" label_selected="続行" name="Continue" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <text name="tos_title"> - 重要なメッセージ + クリティカル・メッセージ </text> <text name="tos_heading"> - 注意深く次のTerms of Serviceを読んでください。 + 次のメッセージを注意深くお読みください。 </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/linden/indra/newview/skins/xui/ja/floater_customize.xml b/linden/indra/newview/skins/xui/ja/floater_customize.xml index 4564843..9310d97 100644 --- a/linden/indra/newview/skins/xui/ja/floater_customize.xml +++ b/linden/indra/newview/skins/xui/ja/floater_customize.xml @@ -1,464 +1,467 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater customize" title="容姿"> <tab_container name="customize tab container"> - <panel label="ボディ・パーツ" /> + <panel label="身体部位" /> <panel label="形" name="Shape"> - <button label="新しい形を作成" label_selected="新しい形を作成" - name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> - <button label="保存" label_selected="保存" name="Save" /> - <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> <button label="身体" label_selected="身体" name="Body" /> <button label="頭" label_selected="頭" name="Head" /> - <button label="目" label_selected="目" name="Eyes" /> + <button label="眼" label_selected="眼" name="Eyes" /> <button label="耳" label_selected="耳" name="Ears" /> <button label="鼻" label_selected="鼻" name="Nose" /> <button label="口" label_selected="口" name="Mouth" /> <button label="あご" label_selected="あご" name="Chin" /> <button label="胴体" label_selected="胴体" name="Torso" /> <button label="両脚" label_selected="両脚" name="Legs" /> + <radio_group name="sex radio"> + <radio_item type="string" length="1" name="radio"> + 女性 + </radio_item> + <radio_item type="string" length="1" name="radio2"> + 男性 + </radio_item> + </radio_group> <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい体型をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい形を持ち物からアバターにドラッグして装着しましょう。完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> - <radio_group name="sex radio"> - <radio_item type="string" length="1" name="radio"> - 女性 - </radio_item> - <radio_item type="string" length="1" name="radio2"> - 男性 - </radio_item> - </radio_group> - </panel> - <panel label="スキン" name="Skin"> - <button label="新しいスキンを作成" - label_selected="新しいスキンを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + <button label="新しい形を作成" label_selected="新しい形を作成" + name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> - <button label="肌の色" label_selected="肌の色" name="Skin Color" /> + </panel> + <panel label="スキン" name="Skin"> + <button label="スキンの色" label_selected="スキンの色" name="Skin Color" /> <button label="顔の細部" label_selected="顔の細部" name="Face Detail" /> <button label="メイクアップ" label_selected="メイクアップ" name="Makeup" /> <button label="身体細部" label_selected="身体細部" name="Body Detail" /> - <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しいスキンをアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しいスキンを持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 - </text> - <texture_picker label="頭部の刺青" name="Head Tattoos" - tool_tip="クリックして写真を選択してください。" /> - <texture_picker label="上部の刺青" name="Upper Tattoos" - tool_tip="クリックして写真を選択してください。" /> - <texture_picker label="下部の刺青" name="Lower Tattoos" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="髪" name="Hair"> - <button label="新しい髪を作成" label_selected="新しい髪を作成" - name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + あなたはこの服の修正を許されていません。 + </text> + <texture_picker label="頭部のタトゥー" name="Head Tattoos" + tool_tip="写真をクリックして選択" /> + <texture_picker label="上半身のタトゥー" name="Upper Tattoos" + tool_tip="写真をクリックして選択" /> + <texture_picker label="下部のタトゥー" name="Lower Tattoos" + tool_tip="写真をクリックして選択" /> + <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> + <button label="新しいスキンを作成" + label_selected="新しいスキンを作成" name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="髪" name="Hair"> <button label="色" label_selected="色" name="Color" /> <button label="スタイル" label_selected="スタイル" name="Style" /> <button label="眉毛" label_selected="眉毛" name="Eyebrows" /> - <button label="顔の" label_selected="顔の" name="Facial" /> - <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> + <button label="顔" label_selected="顔" name="Facial" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい髪型をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい髪型を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> <texture_picker label="テクスチャー" name="Texture" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="目" name="Eyes"> - <button label="新しい眼を作成" label_selected="新しい眼を作成" + tool_tip="写真をクリックして選択" /> + <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> + <button label="新しい髪を作成" label_selected="新しい髪を作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> - <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="眼" name="Eyes"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - 新しい眼をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい眼を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> - <texture_picker label="虹彩" name="Iris" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="虹彩" name="Iris" tool_tip="写真をクリックして選択" /> + <button label="ランダム化" label_selected="ランダム化" name="Randomize" /> + <button label="新しい眼を作成" label_selected="新しい眼を作成" + name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> + <button label="保存" label_selected="保存" name="Save" /> + <button label="別名で保存" label_selected="別名で保存" name="Save As" /> + <button label="戻す" label_selected="戻す" name="Revert" /> </panel> - <panel label="洋服" /> + <panel label="服" /> <panel label="シャツ" name="Shirt"> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> + <color_swatch label="色/明暗" name="Color/Tint" + tool_tip="カラー・ピッカーをクリックして開く" /> <button label="新しいシャツを作成" label_selected="新しいシャツを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しいシャツをアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しいシャツを持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> - <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> </panel> <panel label="ズボン" name="Pants"> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> + <color_swatch label="色/明暗" name="Color/Tint" + tool_tip="カラー・ピッカーをクリックして開く" /> <button label="新しいズボンを作成" label_selected="新しいズボンを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい手袋をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しいズボンを持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> - <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> </panel> <panel label="靴" name="Shoes"> - <button label="新しい靴を作成" label_selected="新しい靴を作成" - name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> - <button label="保存" label_selected="保存" name="Save" /> - <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい靴をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい靴を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="靴下" name="Socks"> - <button label="新しい靴下を作成" label_selected="新しい靴下を作成" + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しい靴を作成" label_selected="新しい靴を作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="靴下" name="Socks"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい靴下をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい靴下を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="ジャケット" name="Jacket"> - <button label="新しいジャケットを作成" - label_selected="新しいジャケットを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しい靴下を作成" label_selected="新しい靴下を作成" + name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="上着" name="Jacket"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しいジャケットをアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい上着を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> - <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="上部生地" name="Upper Fabric" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="上半身の生地" name="Upper Fabric" + tool_tip="写真をクリックして選択" /> <texture_picker label="下層生地" name="Lower Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="手袋" name="Gloves"> - <button label="新しい手袋を作成" label_selected="新しい手袋を作成" - name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + tool_tip="写真をクリックして選択" /> + <color_swatch label="色/明暗" name="Color/Tint" + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しい上着を作成" + label_selected="新しい上着を作成" name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="手袋" name="Gloves"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい手袋をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい手袋を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="下着" name="Undershirt"> - <button label="新しい下着のシャツを作成" - label_selected="新しい下着のシャツを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しい手袋を作成" label_selected="新しい手袋を作成" + name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="下着シャツ" name="Undershirt"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しい下着をアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しい下着を持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="パンツ" name="Underpants"> - <button label="新しいパンツを作成" - label_selected="新しいパンツを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しい下着シャツを作成" + label_selected="新しい下着シャツを作成" name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="下着パンツ" name="Underpants"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しいパンツをアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しいパンツを持ち物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> - </panel> - <panel label="スカート" name="Skirt"> - <button label="新しいスカートを作成" - label_selected="新しいスカートを作成" name="Create New" /> - <button label="取り除く" label_selected="取り除く" name="Take Off" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="新しいパンツを作成" + label_selected="新しいパンツを作成" name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> <button label="保存" label_selected="保存" name="Save" /> <button label="別名で保存" label_selected="別名で保存" name="Save As" /> - <button label="復帰" label_selected="復帰" name="Revert" /> + <button label="戻す" label_selected="戻す" name="Revert" /> + </panel> + <panel label="スカート" name="Skirt"> <text type="string" length="1" name="title"> [DESC] </text> <text type="string" length="1" name="title_no_modify"> - [DESC]:修正不可能 + [DESC]: 修正できません。 </text> <text type="string" length="1" name="title_loading"> - [DESC]:ロード中… + [DESC]: ロード中... </text> <text type="string" length="1" name="title_not_worn"> - [DESC]:装着されない + [DESC]: 未装着。 </text> <text type="string" length="1" name="path"> - [PATH]に存在 + [PATH]に所在 </text> <text type="string" length="1" name="not worn instructions"> - あなたの持ち物から、新しいスカートをアバターにドラッグして装着しましょう。新たに一から作製して、装着する事も出来ます。 + 新しいスカートを持物からアバターにドラッグして装着しましょう。 + 完全に新規の状態から作成して装着することもできます。 </text> <text type="string" length="1" name="no modify instructions"> - あなたには装着可能に修正する権限がありません。 + あなたはこの服の修正を許されていません。 </text> + <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択" /> <color_swatch label="色/明暗" name="Color/Tint" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <texture_picker label="生地" name="Fabric" - tool_tip="クリックして写真を選択してください。" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <button label="スカートを作成" + label_selected="スカートを作成" name="Create New" /> + <button label="取り外す" label_selected="取り外す" name="Take Off" /> + <button label="保存" label_selected="保存" name="Save" /> + <button label="別名で保存" label_selected="別名で保存" name="Save As" /> + <button label="戻す" label_selected="戻す" name="Revert" /> </panel> </tab_container> - <button label="服装の作製" label_selected="服装の作製" name="Make Outfit" /> - <button label="全て保存" label_selected="全て保存" name="Save All" /> + <button label="服装を作成" label_selected="服装を作成" name="Make Outfit" /> + <button label="すべて保存" label_selected="すべて保存" name="Save All" /> <button label="閉じる" label_selected="閉じる" name="Close" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_directory.xml b/linden/indra/newview/skins/xui/ja/floater_directory.xml index f4d0093..402aeed 100644 --- a/linden/indra/newview/skins/xui/ja/floater_directory.xml +++ b/linden/indra/newview/skins/xui/ja/floater_directory.xml @@ -1,238 +1,233 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="directory" title="検索"> <tab_container name="Directory Tabs"> - <panel label="全て" name="all_panel"> - <scroll_list name="results"> - <column label="" name="icon" /> - <column label="Name" name="name" /> - <column label="Price" name="price" /> - <column label="Time (PDT)" name="date" /> - <column label="Time" name="time" /> - <column label="Traffic" name="dwell" /> - <column label="Area" name="area" /> - <column label="L$/sq.m" name="per_meter" /> - <column label="Online" name="online" /> - <column label="Members" name="members" /> - </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + <panel label="すべて" name="all_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <text name="find"> - 見つける: + 検索: </text> <button label="検索" label_selected="検索" name="Search" /> - <check_box label="成人向けコンテンツを含む" name="incmature" /> - </panel> - <panel label="分類" name="classified_panel"> + <check_box label="成人向けコンテンツを含める" name="incmature" /> <scroll_list name="results"> <column label="" name="icon" /> - <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Price" name="price" /> + <column label="名前" name="name" /> + <column label="価格" name="price" /> + <column label="時間 (PT)" name="date" /> + <column label="時間" name="time" /> + <column label="トラフィック" name="dwell" /> + <column label="面積" name="area" /> + <column label="L$/sq.m" name="per_meter" /> + <column label="オンライン" name="online" /> + <column label="メンバー" name="members" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="クラシファイド広告" name="classified_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <text name="find"> - 見つける: + 検索: </text> - <check_box label="成人向けコンテンツを含む" name="incmature" /> + <check_box label="成人向けコンテンツを含める" name="incmature" /> <combo_box name="Category"> <combo_item name="AnyCategory"> - どんなカテゴリでも + 全カテゴリー </combo_item> <combo_item name="Shopping"> ショッピング </combo_item> <combo_item name="LandRental"> - 土地賃貸 + 借地 </combo_item> <combo_item name="PropertyRental"> - 所有地賃貸 + 貸物件 </combo_item> <combo_item name="SpecialAttraction"> 特別なアトラクション </combo_item> <combo_item name="NewProducts"> - 新しい製品 + 新製品 </combo_item> <combo_item name="Employment"> 雇用 </combo_item> <combo_item name="Wanted"> - 望んだ + 求人 </combo_item> <combo_item name="Service"> サービス </combo_item> <combo_item name="Personal"> - 個人の + 個人 </combo_item> </combo_box> <button label="検索" label_selected="検索" name="Search" /> - <button label="広告を出す..." label_selected="広告を出す..." + <button label="広告を載せる..." label_selected="広告を載せる..." name="Place an Ad..." /> <button label="削除" label_selected="削除" name="Delete" /> - </panel> - <panel label="イベント" name="events_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Time (PDT)" name="date" /> - <column label="" name="event_id" /> - <column label="Time" name="time" /> + <column label="名前" name="name" /> + <column label="価格" name="price" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="イベント" name="events_panel"> <radio_group name="date_mode"> <radio_item name="current"> - 新着事項の通知 + 進行中と近日予定 </radio_item> <radio_item name="date"> 日付 </radio_item> </radio_group> - <button label="<<" label_selected="<<" name="<<" - tool_tip="一日戻る" /> + <button label="<< " label_selected="<< " name="<<" + tool_tip="1日前に戻る" /> <text name="date_text"> 6/6 </text> - <button label=">>" label_selected=">>" name=">>" - tool_tip="一日進む" /> + <button label=">> " label_selected=">> " name=">>" + tool_tip="1日先に進む" /> <button label="今日" label_selected="今日" name="Today" - tool_tip="今日のイベントを表示します。" /> + tool_tip="今日のイベントを表示" /> <text name="text"> - カテゴリ: + カテゴリー: </text> <text name="text2"> - 名前/説明: + 名前/説明: </text> <combo_box name="category combo"> <combo_item name="All"> - 全て + すべて </combo_item> <combo_item name="Discussion"> - 話し合い + ディスカッション </combo_item> <combo_item name="Sports"> スポーツ </combo_item> <combo_item name="LiveMusic"> - 生の音楽 + 生演奏 </combo_item> <combo_item name="Commercial"> - 取引の + 商業目的 </combo_item> <combo_item name="Nightlife/Entertainment"> - 夜遊び/娯楽 + 夜遊び/エンターテインメント </combo_item> <combo_item name="Games/Contests"> - ゲーム/内容 + ゲーム/コンテスト </combo_item> <combo_item name="Pageants"> - ペジェントショー + ショー </combo_item> <combo_item name="Education"> 教育 </combo_item> <combo_item name="ArtsandCulture"> - 芸術と文化 + アートとカルチャー </combo_item> <combo_item name="Charity/SupportGroups"> - チャリティー/支援グループ + チャリティ/サポート・グループ </combo_item> <combo_item name="Miscellaneous"> - 種々雑多 + その他 </combo_item> </combo_box> - <check_box label="成人向けを表示" name="incmature" /> + <check_box label="成人を表示" name="incmature" /> <button label="検索" label_selected="検索" name="Search" tool_tip="検索" /> <button label="削除" label_selected="削除" name="Delete" /> - </panel> - <panel label="人気スポット" name="popular_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Traffic" name="dwell" /> + <column label="名前" name="name" /> + <column label="時間 (PT)" name="date" /> + <column label="" name="event_id" /> + <column label="時間" name="time" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> - <check_box label="写真付きで場所を見せるだけ" name="incpictures" /> - <check_box label="成人向け地域の場所を含む" name="incmature" /> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> + </panel> + <panel label="人気のある場所" name="popular_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> + <check_box label="写真のある場所だけ表示" name="incpictures" /> + <check_box label="成人向けコンテンツのある区画を含める" name="incmature" /> <text name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there."> - 交通量や、そこで人々が過ごす時間から計測して、これらは世界で一番人気のある場所です。 + 交通量や人々の滞在時間から見て、これらは世界でも +大変人気のある場所です。 </text> - </panel> - <panel label="土地売買" name="land_sales_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="L$ Price" name="price" /> - <column label="Area" name="area" /> - <column label="L$/sq.m" name="per_meter" /> + <column label="名前" name="name" /> + <column label="トラフィック" name="dwell" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="土地の販売" name="land_sales_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <combo_box name="type"> <combo_item name="AllTypes"> - 全てのタイプ + 全種類 </combo_item> <combo_item name="Auction"> オークション </combo_item> - <combo_item name="ForSale"> - 売り出し + <combo_item name="MainlandSales"> + 売り出し – メインランド </combo_item> - <combo_item name="FirstLand"> - 最初の土地 + <combo_item name="EstateSales"> + 売り出し – 不動産 </combo_item> </combo_box> <combo_box name="rating"> <combo_item name="PG&Mature"> - PG & Mature + PGと成人 </combo_item> <combo_item name="PGonly"> - PG のみ + PGのみ </combo_item> <combo_item name="Matureonly"> - 成人のみ + 成人専用 </combo_item> </combo_box> <check_box label="価格 <= L$" name="pricecheck" /> - <check_box label="エリア > = 平方メーター" name="areacheck" /> + <check_box label="面積>=平方メートル" name="areacheck" /> <button label="検索" label_selected="検索" name="Search" /> <text name="land"> - 土地はLinden ドル(L$)で直接か、またはL$ またはUS$によるオークションで購入できます。 -直接購入するには、その土地を訪れ、そしてタイトルバー上の場所の名前をクリックします。 + 土地はL$で直接買うか、L$建またはUS$建のオークションで買えます。 +直接購買は土地に行きタイトル・バーの土地の名前をクリックしてください。 </text> - </panel> - <panel label="場所" name="places_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Traffic" name="dwell" /> + <column label="名前" name="name" /> + <column label="L$ 価格" name="price" /> + <column label="面積" name="area" /> + <column label="L$/sq.m" name="per_meter" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="場所" name="places_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <text name="find"> - 見つける: + 検索: </text> - <check_box label="成人向け地域の場所を含む" name="incmature" /> + <check_box label="成人向けコンテンツのある区画を含める" name="incmature" /> <combo_box name="Category"> <combo_item name="AnyCategory"> - どんなカテゴリでも + 全カテゴリー </combo_item> <combo_item name="LindenLocation"> - Lindenロケーション + Linden所在地 </combo_item> <combo_item name="Adult"> 成人 </combo_item> <combo_item name="Arts&Culture"> - アート & カルチャー + アート&カルチャー </combo_item> <combo_item name="Business"> ビジネス @@ -244,13 +239,13 @@ ゲーム </combo_item> <combo_item name="Hangout"> - 仲間 + たまり場 </combo_item> <combo_item name="NewcomerFriendly"> - 新参者に好意的 + 新住人に好意的 </combo_item> <combo_item name="Parks&Nature"> - 公園 & 自然 + 公園と自然 </combo_item> <combo_item name="Residential"> 住宅用 @@ -263,35 +258,41 @@ </combo_item> </combo_box> <button label="検索" label_selected="検索" name="Search" /> - </panel> - <panel label="住人" name="people_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Online" name="online" /> + <column label="名前" name="name" /> + <column label="トラフィック" name="dwell" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="人々" name="people_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <text name="find"> - 見つける: + 検索: </text> - <check_box label="オンライン" name="online check" /> <button label="検索" label_selected="検索" name="Search" /> - </panel> - <panel label="グループ" name="groups_panel"> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Members" name="members" /> + <column label="名前" name="name" /> </scroll_list> - <button label="<前の" label_selected="<前の" name="< Prev" /> - <button label="次の>" label_selected="次の>" name="Next >" /> + </panel> + <panel label="グループ" name="groups_panel"> + <button label="<以前" label_selected="<以前" name="< Prev" /> + <button label="次へ>" label_selected="次へ>" name="Next >" /> <text name="find"> - 見つける: + 検索: </text> <button label="検索" label_selected="検索" name="Search" /> + <check_box label="成人向けグループを含める" name="incmature" /> + <scroll_list name="results"> + <column label="" name="icon" /> + <column label="" name="type" /> + <column label="名前" name="name" /> + <column label="メンバー" name="members" /> + <column label="" name="score" /> + </scroll_list> </panel> </tab_container> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_friends.xml b/linden/indra/newview/skins/xui/ja/floater_friends.xml index 1cbbd27..7a858a8 100644 --- a/linden/indra/newview/skins/xui/ja/floater_friends.xml +++ b/linden/indra/newview/skins/xui/ja/floater_friends.xml @@ -1,19 +1,34 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="friends" title="友達"> - <button label="プロファイル..." name="profile_btn" - tool_tip="写真、グループ、およびその他の情報を表示します。" /> - <button label="テレポートを提供する..." name="offer_teleport_btn" - tool_tip="このフレンドに、あなたの現在のロケーションまでのテレポートを申し出ます。" /> +<floater name="friends" title="フレンド"> + <scroll_list name="friend_list" + tool_tip="Shiftキーまたは Control キーを押しながら複数のフレンドをクリックして選択する"> + <column label="名前" name="friend_name" /> + </scroll_list> + <panel name="rights_container"> + <text name="friend_name_label"> + フレンドを選択して権限を変更... + </text> + <check_box label="オンライン・ステータスの確認を許可する" + name="online_status_cb" + tool_tip="あなたのオンライン・ステータスをこのフレンドがコーリング・カードまたはフレンド・リストで確認できるようにするかどうかを指定" /> + <check_box label="自分を地図の上に示す" name="map_status_cb" + tool_tip="あなたのロケーションをこのフレンドが地図上で確認できるようにするかどうかを指定" /> + <check_box label="オブジェクトの修正を許可する" name="modify_status_cb" + tool_tip="このフレンドにオブジェクトの修正を許可するかどうかを指定" /> + <text name="process_rights_label"> + 権限の変更処理中... + </text> + </panel> + <button label="IM" name="im_btn" + tool_tip="インスタント・メッセージを開始" /> + <button label="テレポート" name="offer_teleport_btn" + tool_tip="このフレンドに、あなたの現在のロケーションへのテレポートを贈ります。" /> <button label="追加..." name="add_btn" - tool_tip="居住者にフレンドシップを申請します。" /> + tool_tip="住人にフレンドシップを贈ります。" /> + <button label="プロフィール" name="profile_btn" + tool_tip="写真、グループ、およびその他の情報を表示" /> <button label="支払い..." name="pay_btn" - tool_tip="この友人にLindenドル(L$)を与える" /> - <button label="取り除く..." name="remove_btn" - tool_tip="この人物をフレンドリストから外します。" /> - <button label="IM..." name="im_btn" - tool_tip="インスタント・メッセージを開始します。" /> - <button label="Modify Rightsを与える..." name="grant_btn" - tool_tip="あなたのオブジェクトの修正をこのユーザに許可します。" /> - <button label="修正権を無効にする" name="revoke_btn" - tool_tip="あなたのオブジェクトの修正をこのユーザに許可します。" /> + tool_tip="リンデン・ドル(L$)をフレンドに贈る" /> + <button label="削除..." name="remove_btn" + tool_tip="この人物をフレンド・リストから削除" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_gesture.xml b/linden/indra/newview/skins/xui/ja/floater_gesture.xml index 0ef9cab..1a412c4 100644 --- a/linden/indra/newview/skins/xui/ja/floater_gesture.xml +++ b/linden/indra/newview/skins/xui/ja/floater_gesture.xml @@ -1,18 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="活発な身振り"> +<floater name="gestures" title="アクティブ・ジェスチャー"> <text name="help_label"> - トリガの語句をチャットするか、またはアニメーション -と音の演奏のためのキーを押します。 + フレーズの使用またはキーを押して動画と音を再生します。 </text> <scroll_list name="gesture_list"> - <column label="Trigger" name="trigger" /> - <column label="Key" name="shortcut" /> + <column label="トリガ" name="trigger" /> + <column label="キー" name="shortcut" /> <column label="" name="key" /> - <column label="Name" name="name" /> + <column label="名前" name="name" /> </scroll_list> - <button label="新しい" name="new_gesture_btn" /> - <button label="在庫目録" name="inventory_btn" /> + <button label="新規" name="new_gesture_btn" /> + <button label="持ち物" name="inventory_btn" /> <button label="編集" name="edit_btn" /> - <button label="遊ぶ" name="play_btn" /> + <button label="再生" name="play_btn" /> <button label="停止" name="stop_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_god_tools.xml b/linden/indra/newview/skins/xui/ja/floater_god_tools.xml index d8769ec..7524356 100644 --- a/linden/indra/newview/skins/xui/ja/floater_god_tools.xml +++ b/linden/indra/newview/skins/xui/ja/floater_god_tools.xml @@ -2,10 +2,11 @@ <floater name="godtools floater" title="ゴッド・ツール"> <tab_container name="GodTools Tabs"> <panel label="グリッド" name="grid"> - <button label="全てのユーザを追い出す" - label_selected="全てのユーザを追い出す" name="Kick all users" /> - <button label="本地域の地図の公示性キャッシュを削除" - label_selected="本地域の地図の公示性キャッシュを削除" + <button label="すべてのユーザーを追い出す" + label_selected="すべてのユーザーを追い出す" + name="Kick all users" /> + <button label="この地域の地図の表示キャッシュを消去" + label_selected="この地域の地図の表示キャッシュを消去" name="Flush This Region's Map Visibility Caches" /> </panel> <panel label="地域" name="region"> @@ -14,30 +15,31 @@ </text> <check_box label="準備" name="check prelude" tool_tip="この設定により、この地域の準備をします。" /> - <check_box label="固定の太陽" name="check fixed sun" - tool_tip="太陽位置を固定(地域/不動産>領域のように" /> + <check_box label="太陽固定" name="check fixed sun" + tool_tip="太陽位置を固定([地域/不動産]>[地形]の場合と同様)" /> <check_box label="テレポートのホームをリセット" name="check reset home" - tool_tip="居住者テレポートの際は、居住者のホームを目的地位置にリセットしてください。" /> + tool_tip="住人がテレポートで去ったとき、彼らのホームを目的地にリセットする。" /> <check_box label="可視" name="check visible" tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。" /> <check_box label="ダメージ" name="check damage" - tool_tip="この設定により、地域内でのダメージを有効にします。" /> + tool_tip="この設定により、この地域内でダメージを有効化します。" /> <check_box label="トラフィック・トラッキングをブロック" name="block dwell" - tool_tip="この設定により、地域内でのトラフィックを計算しないようにします。" /> - <check_box label="フロック土地形成" name="block terraform" - tool_tip="この設定により、地域内での土地整備を無効にします。" /> + tool_tip="この設定により、この地域内のトラフィック計算をオフにします。" /> + <check_box label="土地整備をブロック" name="block terraform" + tool_tip="この設定により、この地域内での土地整備を禁止" /> <check_box label="サンドボックス" name="is sandbox" - tool_tip="ここがサンドボックス地域かどうか、トグルします。" /> - <button label="土地を焼く" label_selected="土地を焼く" name="Bake Terrain" - tool_tip="現在の領域をデフォルトとして保存します。" /> - <button label="領域を復帰" label_selected="領域を復帰" name="Revert Terrain" - tool_tip="現在の領域をデフォルトと入れ替える。" /> - <button label="領域を交換しあう" label_selected="領域を交換しあう" - name="Swap Terrain" - tool_tip="現在の領域をデフォルトと入れ替えます。" /> + tool_tip="これがサンドボックス地域でも切り替え" /> + <button label="地形を構築する" label_selected="地形を構築する" + name="Bake Terrain" + tool_tip="現在の地形をデフォルトとして保存します。" /> + <button label="地形を元に戻す" label_selected="地形を元に戻す" + name="Revert Terrain" + tool_tip="現在の地形をデフォルトに置換します。" /> + <button label="地形を交換" label_selected="地形を交換" name="Swap Terrain" + tool_tip="現在の地形をデフォルトと入れ替えます。" /> <text name="estate id"> - 不動産ID: + 不動産ID: </text> <text name="parent id"> 親ID: @@ -51,69 +53,71 @@ <line_editor name="gridposy" tool_tip="これは、この地域のグリッドyの位置です。" /> <text name="Redirect to Grid: "> - グリッドに再案内する: + グリッドにリダイレクト: </text> <text name="billable factor text"> - 請求できる要因: + 請求率: </text> <text name="land cost text"> - 平方メートル当たりL$: + 平方メートル当たりL$: </text> - <button label="リフレッシュ" label_selected="リフレッシュ" name="Refresh" - tool_tip="ここをクリックして、上記の情報をリフレッシュしてください。" /> + <button label="更新" label_selected="更新" name="Refresh" + tool_tip="上記の情報を更新するには、ここをクリックします。" /> <button label="適用" label_selected="適用" name="Apply" - tool_tip="ここをクリックして、上記の変更を適用してください。" /> + tool_tip="上記の変更を適用するには、ここをクリックします。" /> <button label="地域を選択" label_selected="地域を選択" name="Select Region" - tool_tip="土地ツールで全体地域を選択してください。" /> + tool_tip="土地ツールで地域全体を選択してください。" /> <button label="ただちに自動保存する" label_selected="ただちに自動保存する" name="Autosave now" - tool_tip="Gzip状態を自動保存ディレクトリーに保存しくてださい。" /> + tool_tip="Gzip状態を自動保存ディレクトリに保存します。" /> </panel> <panel label="オブジェクト" name="objects"> <text name="Sim Name:"> シム名: </text> <text name="region name"> - ウェールズ語 + ウェルシュ </text> - <check_box label="スクリプトを無効にする" name="disable scripts" - tool_tip="この設定により、地域内の全てのスクリプトを無効にします。" /> - <check_box label="衝突を無効にする" name="disable collisions" - tool_tip="この設定により、地域内で非エージェントの衝突を無効にします。" /> - <check_box label="フィジックスを無効にする" name="disable physics" - tool_tip="この設定により、地域内の全ての物理的作用を無効にします。" /> + <check_box label="スクリプトを無効化" name="disable scripts" + tool_tip="この設定により、この地域内のスクリプトをすべて無効化" /> + <check_box label="衝突を無効化" name="disable collisions" + tool_tip="この設定により、この地域内の非エージェント衝突を無効化" /> + <check_box label="物理作用を無効化" name="disable physics" + tool_tip="この設定により、この地域内の物理的作用をすべて無効化" /> <button label="適用" label_selected="適用" name="Apply" - tool_tip="ここをクリックして、上記の変更を適用してください。" /> + tool_tip="上記の変更を適用するには、ここをクリックします。" /> <button label="対象の設定" label_selected="対象の設定" name="Set Target" tool_tip="オブジェクト削除の対象となるアバターを設定してください。" /> <text name="target_avatar_name"> - (対象無し) + (対象なし) </text> <button - label="他の土地における対象のスクリプトを含むオブジェクトを削除" - label_selected="他の土地における対象のスクリプトを含むオブジェクトを削除" + label="他の土地における対象のスクリプト・オブジェクトを削除" + label_selected="他の土地における対象のスクリプト・オブジェクトを削除" name="Delete Target's Scripted Objects On Others Land" - tool_tip="本地域において対象が所有していない全てのスクリプトを含むオブジェクトを削除してください。(コピー禁止)オブジェクトは返却されます。" /> + tool_tip="この地域において対象が所有していないスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" /> <button - label="『全て』の土地における対象のスクリプトを含むオブジェクトを削除" - label_selected="『全て』の土地における対象のスクリプトを含むオブジェクトを削除" + label="「すべての」土地における対象のスクリプト・オブジェクトを削除" + label_selected="「すべての」土地における対象のスクリプト・オブジェクトを削除" name="Delete Target's Scripted Objects On *Any* Land" - tool_tip="本地域において対象が所有している全てのスクリプトを含むオブジェクトを削除してください。(コピー禁止)オブジェクトは戻されます。" /> - <button label="対象オブジェクトの『全て』を削除" - label_selected="対象オブジェクトの『全て』を削除" + tool_tip="この地域において対象が所有しているスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" /> + <button label="対象のオブジェクトを「すべて」削除" + label_selected="対象のオブジェクトを「すべて」削除" name="Delete *ALL* Of Target's Objects" - tool_tip="本地域において対象が所有している全てのオブジェクトを削除してください。(コピー禁止)オブジェクトは返却されます。" /> - <button label="上部コライダーを得る" - label_selected="上部コライダーを得る" name="Get Top Colliders" - tool_tip="もっとも位相の狭いコールバックを経験しているオブジェクトのリストを入手します。" /> - <button label="上部スクリプトを得る" - label_selected="上部スクリプトを得る" name="Get Top Scripts" - tool_tip="スクリプトの起動に一番時間を費やしているオブジェクトのリストを入手します。" /> + tool_tip="この地域において対象が所有しているオブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" /> + <button label="トップ・コライダーを取得" + label_selected="トップ・コライダーを取得" + name="Get Top Colliders" + tool_tip="最も段階の狭いコールバックが発生したオブジェクトのリストを取得します。" /> + <button label="トップ・スクリプトを取得" + label_selected="トップ・スクリプトを取得" + name="Get Top Scripts" + tool_tip="スクリプトの起動に最も時間を費やしているオブジェクトのリストを取得します。" /> <button label="スクリプト・ダイジェスト" label_selected="スクリプト・ダイジェスト" name="Scripts digest" - tool_tip="全てのスクリプト、および利用頻度のリストを入手します。" /> + tool_tip="すべてのスクリプトとそれらの使用回数のリストを取得します。" /> </panel> - <panel label="リクエスト" name="request"> + <panel label="要求" name="request"> <text name="Destination:"> 目的地: </text> @@ -136,10 +140,10 @@ スクリプト<回数>、<オプション・パターン> </combo_item> <combo_item name="objects<pattern>"> - オブジェクト<模様> + オブジェクト<パターン> </combo_item> <combo_item name="rez<asset_id>"> - <asset_id>を表示 + rez <asset_id> </combo_item> </combo_box> <text name="Parameter:"> diff --git a/linden/indra/newview/skins/xui/ja/floater_group_info.xml b/linden/indra/newview/skins/xui/ja/floater_group_info.xml index 3b01350..9330ca0 100644 --- a/linden/indra/newview/skins/xui/ja/floater_group_info.xml +++ b/linden/indra/newview/skins/xui/ja/floater_group_info.xml @@ -1,78 +1,78 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="groupinfo" title="Lindens - グループ情報"> +<floater name="groupinfo" title="Linden家 – [グループ情報]"> <tab_container name="tab"> <panel label="一般" name="gen"> <text name="title_box"> - グループ: + グループ情報 </text> <text name="txt"> - グループはあなたの友達と一緒に協力するには楽しい方法です。 + グループを活用すれば、フレンドたちとのコラボレーションを楽しく進めることができます。 </text> <text name="txt2"> - グループは役職、記章と投票権をあなたに持たせます。 + グループには、タイトル、記章、投票システムがあります。 </text> <text name="txt3"> - だれでもグループを作成してよいです。各個人は15 グループまで属してよいです。 + グループは誰にでも作成できます。 各人が所属できるグループの最大数は15です。 </text> <text name="txt4"> - グループは少なくとも3人の活動中のメンバーを持つ必要があります。 + グループをアクティブに保つには、3人以上のメンバーが必要です。 </text> <text name="group_create_text"> - グループの価格 L$100を作成 + グループ作成にはL$100かかります。 </text> <text name="lbl"> - 名前: + 名前: </text> <text name="founder_label"> - 創始者: + 創設者: </text> <text name="lbl2"> - 支部: + 特権: </text> - <check_box label="グループリストの中に表示" name="sho" /> - <check_box label="グループリストにメンバーを表示" name="sho_mem" /> - <check_box label="ウェブ上に公表する。" name="allow_publish" - tool_tip="自分のプロファイル情報をWeb上で公開します。" /> + <check_box label="グループ・リストに表示" name="sho" /> + <check_box label="グループ・リストに会員を表示" name="sho_mem" /> + <check_box label="ウェブ上で公開" name="allow_publish" + tool_tip="自分のプロファイル情報をウェブ上で公開します。" /> <button label="?" label_selected="?" name="publish_help_btn" /> <check_box label="成人" name="mature" - tool_tip="あなたのプロフィール情報は、成人向けであるとみなされます。" /> + tool_tip="あなたのプロファイル情報は成人向けと見なされています。" /> </panel> - <panel label="タイトル" name="tit"> + <panel label="肩書き" name="tit"> <text name="txt"> - グループでの役職 + グループ・タイトル </text> <text name="txt2"> - グループは特別な役職を持つことができるオフィサーとメンバーの両方を持つことができます。 + グループには、オフィサーとメンバーを含めることができ、その両方に特別なタイトルを持たせることができます。 </text> <text name="txt3"> - これらの職名は、世界中、チャットの中、そしてIM中での彼らの名前の前に現れます。 + これらの肩書きは、世界やチャットやIMで、名前の前に表示されます。 </text> <text name="lbl"> - オフィサーの役職: + オフィサーの肩書き: </text> <text name="lbl2"> - メンバーの役職: + メンバー・タイトル: </text> <text name="lbl3"> - グループの記章を設定するためにあなたの在庫目録のそとにテクスチャーをドラックする。 + テクスチャーを持ち物の外にドラッグし、グループの記章を設定します。 </text> - <texture_picker name="insig" tool_tip="クリックして写真を選択してください。" /> + <texture_picker name="insig" tool_tip="写真をクリックして選択" /> </panel> <panel label="メンバー" name="mem"> <text name="txt"> - グループメンバー + グループ・メンバー </text> <text name="txt2"> - 現在のグループオフィサーとメンバー + 現在のグループのオフィサーとメンバー </text> <text name="txt3"> - 名前をクリックして、メンバープロファイルを見る。 + メンバーのプロフィールを表示するには、名前をクリックします。 </text> <text name="lbl"> - オフィサー: + オフィサー: </text> <text name="members_label"> - メンバー: + メンバー: </text> <button label="メンバーを追放" label_selected="メンバーを追放" name="eject_member_btn" /> @@ -84,197 +84,196 @@ グループ選挙 </text> <text name="instructions"> - Start Election ボタンを押して、新しい選挙を始めます。 -候補者はすべてオフィサーでないグループメンバーが含まれています。 + [選挙開始]ボタンを押すと、新しい選挙が開始されます。 +候補者には、オフィサー以外の全メンバーが含まれます。 </text> <text name="lbl"> - 候補: + 候補者: </text> <button label="投票" label_selected="投票" name="btn_vote" /> - <button label="慎む" label_selected="慎む" name="btn_abstain" /> - <button label="選挙を開始" label_selected="選挙を開始" - name="btn_start_election" /> + <button label="やめる" label_selected="やめる" name="btn_abstain" /> + <button label="選挙開始" label_selected="選挙開始" name="btn_start_election" /> <text name="lbl2"> - 定数: + 定足数: </text> <spinner name="quorum" tool_tip="選挙結果取りまとめに必要な全投票者メンバー数#" /> <text name="quorum_text"> - 111 人の総グループメンバーの内 + グループ・メンバー総数111のうち。 </text> <text name="lbl3"> - 大多数: + 多数派: </text> <radio_group name="majority" tool_tip="Majority of total votes needed to win."> <radio_item name="radio"> - 過半数 + 単純過半数 </radio_item> <radio_item name="radio2"> - 2/3 Majority + 2/3以上の多数 </radio_item> <radio_item name="radio3"> - 満場一致 + 全員一致 </radio_item> </radio_group> <text name="duration_lbl"> - 持続時間: + 継続期間: </text> <spinner name="duration" tool_tip="残りの選挙日数#" /> <text name="duration_days"> - 日 + 日数 </text> <text name="start_lbl"> - 選挙開始: + 選挙開始: </text> <text name="end_lbl"> - 選挙終了: + 選挙終了: </text> </panel> <panel label="提案" name="panel_group_proposals"> <text name="txt"> - グループの提案 + グループの問題提起 </text> <text name="instructions"> - 進行中の提案はありません。 -Create Proposal ボタンを押して、新しい提案を作成します。 + 現在、有効な問題提起はありません。 [問題提起を作成]ボタンをクリックして、新しい +問題を提起してください。 </text> <text name="proposal_lbl"> - 提案: + 提案: </text> <button label="はい" label_selected="はい" name="btn_yes" /> <button label="いいえ" label_selected="いいえ" name="btn_no" /> - <button label="慎む" label_selected="慎む" name="btn_abstain" /> - <button label="リストを見る" label_selected="リストを見る" + <button label="やめる" label_selected="やめる" name="btn_abstain" /> + <button label="リストを表示" label_selected="リストを表示" name="btn_view_list" /> - <button label="項目を見る" label_selected="項目を見る" name="btn_view_item" /> + <button label="アイテムを表示" label_selected="アイテムを表示" + name="btn_view_item" /> <button label="提案を作成" label_selected="提案を作成" name="btn_proposal" /> <button label="提出" label_selected="提出" name="btn_submit" /> <text name="quorum_lbl"> - 定数: + 定足数: </text> <spinner name="quorum" tool_tip="選挙結果取りまとめに必要な全投票者メンバー数#" /> <text name="quorum_text"> - 111 人の総グループメンバーの内 + グループ・メンバー総数111のうち。 </text> <text name="majority_lbl"> - 大多数: + 多数派: </text> <radio_group name="majority" tool_tip="Majority of total votes needed to win."> <radio_item name="radio"> - 過半数 + 単純過半数 </radio_item> <radio_item name="radio2"> - 2/3 Majority + 2/3以上の多数 </radio_item> <radio_item name="radio3"> - 満場一致 + 全員一致 </radio_item> </radio_group> <text name="duration_lbl"> - 持続時間: + 継続期間: </text> <spinner name="duration" tool_tip="残りの選挙日数#" /> <text name="duration_text"> - 日 + 日数 </text> <text name="start_lbl"> - 投票開始: + 投票開始: </text> <text name="end_lbl"> - 投票終了: + 投票終了: </text> </panel> <panel label="履歴" name="History"> <text name="txt"> - グループの投票履歴 + グループ投票履歴 </text> <text name="instructions"> - あなたは、この投票を選択することによって過去のグループ投票の結果をみても良いです。 + 投票終了を選択すると、グループの過去の投票結果を表示できます。 </text> <text name="instructions2"> - View Itemを押す。 + [アイテムを表示]を押します。 </text> <text name="history_list_lbl"> - 過去の投票: + 過去の投票: </text> <text name="vote_text_lbl"> - 投票の結果: + 投票結果: </text> - <button label="リストを見る" label_selected="リストを見る" + <button label="リストを表示" label_selected="リストを表示" name="btn_view_list" /> - <button label="項目を見る" label_selected="項目を見る" name="btn_view_item" /> + <button label="アイテムを表示" label_selected="アイテムを表示" + name="btn_view_item" /> </panel> </tab_container> </panel> <panel label="招待" name="inv"> <text name="txt"> - Group Invitations + グループ招待 </text> <text name="txt2"> - 招待状はインターネットメッセージを介して送られます。 + 招待状がインスタント・メッセージで送られます。 </text> <text name="txt3"> - 追加ボタンをクリックして、リストに使用者を追加します。 + ユーザーをリストに加えるには、追加ボタンを押します。 </text> <text name="lbl"> - オフィサー: + オフィサー: </text> <button label="オフィサーを追加..." label_selected="オフィサーを追加..." name="add_officer_btn" /> - <button label="選択されたものを取り除く" - label_selected="選択されたものを取り除く" - name="remove_officer_btn" /> + <button label="選択したものを削除" + label_selected="選択したものを削除" name="remove_officer_btn" /> <text name="lbl2"> - メンバー: + メンバー: </text> <button label="メンバーを追加..." label_selected="メンバーを追加..." name="add_member_btn" /> - <button label="選択されたものを取り除く" - label_selected="選択されたものを取り除く" - name="remove_member_btn" /> + <button label="選択したものを削除" + label_selected="選択したものを削除" name="remove_member_btn" /> <text name="lbl3"> - 料金をサインアップ: + 参加費用: </text> - <check_box label="公開登録(招待状は必要なし)" name="open" /> + <check_box label="会員募集(招待不要)" name="open" /> </panel> <panel label="土地" name="land"> <text name="txt"> - グループが所有する土地 + グループの保有地 </text> <text name="lbl"> - Total Contributed Land: + 寄付された土地の合計 </text> <button label="地図..." label_selected="地図..." name="map_btn" /> <text name="lbl2"> - Total Land In Use: + 土地利用の合計: </text> <text name="lbl3"> - 土地の使用可能性: + 利用可の土地: </text> - <button label="寄与を設定" label_selected="寄与を設定" name="set_contrib_btn" /> + <button label="貢献を設定" label_selected="貢献を設定" name="set_contrib_btn" /> <text name="warning_label"> - 警告: グループは広すぎる土地を保持しています。グループメンバーはもっと寄与する必要があります。 + 警告: グループは土地を持ちすぎています。 グループのメンバーは、寄付を増やしてください。 </text> </panel> - <panel label="金銭" name="mon"> + <panel label="お金" name="mon"> <tab_container name="group money history tab"> - <panel label="設計" name="money panel" /> + <panel label="計画" name="money panel" /> <panel label="詳細" name="money panel2"> - <button label="<以前の" label_selected="<以前の" name="< Earlier" + <button label="<前" label_selected="<前" name="< Earlier" tool_tip="時間を戻す" /> - <button label="後で>" label_selected="後で>" name="Later >" + <button label="あとで>" label_selected="あとで>" name="Later >" tool_tip="時間を進める" /> </panel> - <panel label="売り上げ" name="money panel3"> - <button label="<以前の" label_selected="<以前の" name="< Earlier" + <panel label="販売" name="money panel3"> + <button label="<前" label_selected="<前" name="< Earlier" tool_tip="時間を戻す" /> - <button label="後で>" label_selected="後で>" name="Later >" + <button label="あとで>" label_selected="あとで>" name="Later >" tool_tip="時間を進める" /> </panel> </tab_container> </panel> </tab_container> <button label="OK" label_selected="OK" name="OK" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_groups.xml b/linden/indra/newview/skins/xui/ja/floater_groups.xml index 2dbdfb6..b3d7fbb 100644 --- a/linden/indra/newview/skins/xui/ja/floater_groups.xml +++ b/linden/indra/newview/skins/xui/ja/floater_groups.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="groups" title="グループ"> <text name="groupdesc"> - あなたの現在の活動グループは太字で表わされます。 + 現在のアクティブ・グループを太字表示。 </text> <text name="groupcount"> - あなたは[COUNT]グループに所属しています。(最大[MAX]) + あなたの所属グループ数: [COUNT] (上限数 [MAX]) </text> - <button label="有効にする" label_selected="有効にする" name="Activate" /> + <button label="アクティブ" label_selected="アクティブ" name="Activate" /> <button label="情報" label_selected="情報" name="Info" /> - <button label="去る" label_selected="去る" name="Leave" /> - <button label="生成" label_selected="生成" name="Create" /> + <button label="立ち去る" label_selected="立ち去る" name="Leave" /> + <button label="作成" label_selected="作成" name="Create" /> <button label="検索..." label_selected="検索..." name="Search..." /> <button label="閉じる" label_selected="閉じる" name="Close" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_html.xml b/linden/indra/newview/skins/xui/ja/floater_html.xml index 82692d7..7a5d740 100644 --- a/linden/indra/newview/skins/xui/ja/floater_html.xml +++ b/linden/indra/newview/skins/xui/ja/floater_html.xml @@ -1,12 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="html" title="ウェブブラウザ"> - <button label="戻る" name="back_btn" /> - <button label="転送" name="forward_btn" /> - <button label="再ロード" name="reload_btn" /> - <button label="停止" name="stop_btn" /> - <button label="ホーム" name="home_btn" /> - <button label="移動" name="go_btn" /> - <text name="status_text"> - 進行中のテキストはここに行きます +<floater name="htmlfloater" title=""> + <button label="閉じる" name="close_btn" /> + <text name="in-world_help_title"> + インワールド・ヘルプ: + </text> + <text name="in-world_help_url"> + http://www.secondlife.com/app/support/inworld.html + </text> + <text name="additional_help_title"> + 追加ヘルプ + </text> + <text name="additional_help_url"> + http://www.secondlife.com/app/support/support.html </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_html_help.xml b/linden/indra/newview/skins/xui/ja/floater_html_help.xml index 93d69c0..9b13474 100644 --- a/linden/indra/newview/skins/xui/ja/floater_html_help.xml +++ b/linden/indra/newview/skins/xui/ja/floater_html_help.xml @@ -5,6 +5,6 @@ <button label="転送" name="forward_btn" /> <button label="閉じる" name="close_btn" /> <text name="status_text"> - 終了 + 完了 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_im.xml b/linden/indra/newview/skins/xui/ja/floater_im.xml index dd099dc..78d5dd2 100644 --- a/linden/indra/newview/skins/xui/ja/floater_im.xml +++ b/linden/indra/newview/skins/xui/ja/floater_im.xml @@ -1,9 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="im_floater" title="インスタント・メッセージ"> <text name="only_user_message"> - あなたが、本セッションの唯一のユーザーです。 + このセッションにいるユーザーはあなただけです。 </text> <text name="offline_message"> - [FIRST][LAST]はオフラインです + [FIRST] [LAST]はオフラインです。 + </text> + <text name="generic_request_error"> + 要求中にエラーが発生しました。後でもう一度試してください。 + </text> + <text name="insufficient_perms_error"> + あなたには充分な権限がありません。 + </text> + <text name="user_no_help"> + リクエストされたユーザーは、もうヘルプセッションにはいません。 + </text> + <text name="add_session_event"> + ...とのチャット・セッションにエージェントを追加中... + </text> + <text name="message_session_event"> + IMチャット・セッションの相手 + </text> + <text name="teleport_session_event"> + のクリエーターにテレポート + </text> + <text name="removed_from_group"> + あなたはグループから削除されました。 </text> </multi_floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_image_preview.xml b/linden/indra/newview/skins/xui/ja/floater_image_preview.xml index 3fdb33f..69f59ba 100644 --- a/linden/indra/newview/skins/xui/ja/floater_image_preview.xml +++ b/linden/indra/newview/skins/xui/ja/floater_image_preview.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Image Preview" title=""> <text name="name_label"> - 名前: + 名前: </text> <text name="description_label"> - 説明: + 説明: </text> <text name="preview_label"> - 以下としてイメージを再検討: + イメージのプレビュー: </text> - <combo_box label="衣類のタイプ" name="clothing_type_combo"> + <combo_box label="服の種類" name="clothing_type_combo"> <combo_item name="Image"> - イメージ + 画像 </combo_item> <combo_item name="Hair"> 髪 @@ -39,10 +39,10 @@ </combo_item> </combo_box> <text name="bad_image_text"> - イメージを読むことが不可能です。 - - 24 ビット Targaとしてイメージを保存することを試みます(.tga)。 + 画像を読み込めません。 + + 24ビット Targa (.tga)として画像を保存してみてください。 </text> - <button label="取消" name="cancel_btn" /> - <button label="アップロード(L$[AMOUNT])" name="ok_btn" /> + <button label="取り消し" name="cancel_btn" /> + <button label="アップロードL$[AMOUNT]" name="ok_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_import.xml b/linden/indra/newview/skins/xui/ja/floater_import.xml index 00a1332..8da31b8 100644 --- a/linden/indra/newview/skins/xui/ja/floater_import.xml +++ b/linden/indra/newview/skins/xui/ja/floater_import.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Import" title=""> <text name="name_label"> - 名前: + 名前: </text> <text name="description_label"> - 説明: + 説明: </text> <text name="preview_label"> - アップロードのためのファイル: + アップロードするファイル: </text> - <button label="取消" name="cancel_btn" /> - <button label="アップロード (L$10)" name="ok_btn" /> + <button label="取り消し" name="cancel_btn" /> + <button label="アップロード(L$10)" name="ok_btn" /> <text name="preview_label2"> - イメージの再検討: + 画像プレビュー: </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_instant_message.xml b/linden/indra/newview/skins/xui/ja/floater_instant_message.xml index 74926b8..6779407 100644 --- a/linden/indra/newview/skins/xui/ja/floater_instant_message.xml +++ b/linden/indra/newview/skins/xui/ja/floater_instant_message.xml @@ -1,15 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater label="(未知)" name="im_floater" title="(未知)"> - <button label="プロファイル..." label_selected="プロファイル..." +<floater label="(不明)" name="im_floater" title="(不明)"> + <line_editor label="IMを開始するには、ここをクリックします。" + name="chat_editor" /> + <button label="テレポート" label_selected="テレポート" name="teleport_btn" /> + <button label="プロフィール" label_selected="プロフィール" name="profile_btn" /> <button label="閉じる" label_selected="閉じる" name="close_btn" /> <text name="live_help_dialog"> - ***ようこそライブ・ヘルプへ! ここでは仲間である皆さんに、すばらしいボランティア達がSecond Lifeのサポートをします!*** まず初めにF1を押し、SLヘルプページをチェックしてください。 そこで回答が見つからない場合は質問を入力し、手の空いたヘルパーが応答するまで、数分お持ちください。 終了するまで、ライブ・ヘルプは閉じないでください。返答がない場合は時間をおいて、再度、試みてください。 注意:ライブ・ヘルパーは『Linden』が苗字である場合を除き、Lindenの従業員ではないため、回答は非公式なものとみなします。 + ***ヘルプリクエストへようこそ*** +まずF1キーを押すか、または知識ベース(http://secondlife.com/knowledgebase/)にアクセスしてSLヘルプページを開いてください。 +回答が見つからなければ、質問を入力してヘルパーの手が空くまで、数分程度お待ちください。 +-=-=- 応答時間は一定ではなく、特にピークタイムは大きく変動します。-=-=- </text> <text name="title_string"> - Instant Message with [NAME] + [NAME]とインスタント・メッセージ </text> <text name="typing_start_string"> - [NAME] is typing... + [NAME]は入力中... + </text> + <text name="session_start_string"> + [NAME]とのセッションを開始します。お待ちください。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory.xml b/linden/indra/newview/skins/xui/ja/floater_inventory.xml index dcd7013..d7390d0 100644 --- a/linden/indra/newview/skins/xui/ja/floater_inventory.xml +++ b/linden/indra/newview/skins/xui/ja/floater_inventory.xml @@ -1,24 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory" title="在庫目録"> +<floater name="Inventory" title="持ち物"> <tab_container name="inventory filter tabs"> <inventory_panel label="All Items" name="All Items" /> <inventory_panel label="Recent Items" name="Recent Items" /> </tab_container> <menu_bar name="Inventory Menu"> <menu label="ファイル" name="File"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> <menu_item_call label="開く" name="Open" /> - <menu_item_call label="新しいウインドウ" name="New Window" /> - <menu_item_call label="フィルターを表示" name="Show Filters" /> - <menu_item_call label="全てのフォルダーを閉じる" name="Close All Folders" /> + <menu_item_call label="新しいウィンドウ" name="New Window" /> + <menu_item_call label="フィルタを表示" name="Show Filters" /> + <menu_item_call label="すべてのフォルダを閉じる" name="Close All Folders" /> <menu_item_call label="ゴミ箱を空にする" name="Empty Trash" /> </menu> - <menu label="生成" name="Create"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> - <menu_item_call label="新しいフォルダー" name="New Folder" /> + <menu label="作成" name="Create"> + <menu_item_call label="新しいフォルダ" name="New Folder" /> <menu_item_call label="新しいスクリプト" name="New Script" /> <menu_item_call label="新しいノート" name="New Note" /> - <menu_item_call label="新しいジェスチャ" name="New Gesture" /> + <menu_item_call label="新しいジェスチャー" name="New Gesture" /> <menu name="New Clothes"> <menu_item_call label="新しいシャツ" name="New Shirt" /> <menu_item_call label="新しいズボン" name="New Pants" /> @@ -32,19 +30,17 @@ </menu> <menu name="New Body Parts"> <menu_item_call label="新しい形" name="New Shape" /> - <menu_item_call label="新しい皮膚" name="New Skin" /> + <menu_item_call label="新しいスキン" name="New Skin" /> <menu_item_call label="新しい髪" name="New Hair" /> <menu_item_call label="新しい眼" name="New Eyes" /> </menu> </menu> - <menu label="Sort" name="Sort"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> - <menu_item_check label="名前で" name="By Name" /> - <menu_item_check label="日付で" name="By Date" /> - <menu_item_check label="常にフォルダーは名前順" name="Folders Always By Name" /> + <menu label="振り分け" name="Sort"> + <menu_item_check label="名前" name="By Name" /> + <menu_item_check label="日付" name="By Date" /> + <menu_item_check label="フォルダは常に名前順" name="Folders Always By Name" /> </menu> - <menu label="Filters" name="Filters"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu label="フィルタ" name="Filters"> <menu_item_check label="現状を修正" name="Modify Current" /> <menu_item_call label="現状をリセット" name="Reset Current" /> </menu> diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml b/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml index 9b53c5d..04d5b7e 100644 --- a/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml +++ b/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml @@ -1,37 +1,37 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="在庫目録項目の提案"> +<floater name="item properties" title="持ち物アイテムのプロパティ"> <text name="LabelItemNameTitle"> - 名前: + 名前: </text> <text name="LabelItemDescTitle"> - 説明: + 説明: </text> <text name="LabelCreatorTitle"> - 創作者: + クリエーター </text> <text name="LabelCreatorName"> Nicole Linden </text> - <button label="プロファイル..." label_selected="" name="BtnCreator" /> + <button label="プロフィール..." label_selected="" name="BtnCreator" /> <text name="LabelOwnerTitle"> - 所有者: + オーナー: </text> <text name="LabelOwnerName"> Thrax Linden </text> - <button label="プロファイル..." label_selected="" name="BtnOwner" /> + <button label="プロフィール..." label_selected="" name="BtnOwner" /> <text name="LabelAcquiredTitle"> - 獲得: + 入手: </text> <text name="LabelAcquiredDate"> - 2006年 5月 24日水曜日12:50:46 + 2006年5月24日水曜日12:50:46 </text> <text name="OwnerLabel"> - あなたは可能: + できることは: </text> - <check_box label="変更" name="CheckOwnerModify" /> + <check_box label="修正" name="CheckOwnerModify" /> <check_box label="コピー" name="CheckOwnerCopy" /> - <check_box label="転売/寄贈" name="CheckOwnerTransfer" /> + <check_box label="再販/プレゼント" name="CheckOwnerTransfer" /> <text name="BaseMaskDebug"> B: </text> @@ -45,20 +45,20 @@ E: </text> <text name="NextMaskDebug"> - N: + N: </text> - <check_box label="グループで共有" name="CheckShareWithGroup" /> - <check_box label="全てにコピーを許可" name="CheckEveryoneCopy" /> + <check_box label="グループ分担" name="CheckShareWithGroup" /> + <check_box label="誰に対してもコピーを許可" name="CheckEveryoneCopy" /> <text name="NextOwnerLabel"> - 次の所有者が可能: + 次のオーナーが実行できる操作: </text> - <check_box label="変更" name="CheckNextOwnerModify" /> + <check_box label="修正" name="CheckNextOwnerModify" /> <check_box label="コピー" name="CheckNextOwnerCopy" /> - <check_box label="転売/寄贈" name="CheckNextOwnerTransfer" /> + <check_box label="再販/プレゼント" name="CheckNextOwnerTransfer" /> <text name="SaleLabel"> - 項目を作る: + アイテムにマーク: </text> - <check_box label="売り出し" name="CheckPurchase" /> + <check_box label="売り出し中" name="CheckPurchase" /> <radio_group name="RadioSaleType"> <radio_item name="radio"> オリジナル @@ -68,6 +68,6 @@ </radio_item> </radio_group> <text name="TextPrice"> - 価格: L$ + 料金:L$ </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml b/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml index 0626d82..92475aa 100644 --- a/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml +++ b/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Inventory Finder" title="持ち物_最近のアイテム"> +<floater name="Inventory Finder" title="inventory_recent_items"> <check_box label="アニメーション" name="check_animation" /> - <check_box label="名刺" name="check_calling_card" /> - <check_box label="衣類" name="check_clothing" /> + <check_box label="コーリング・カード" name="check_calling_card" /> + <check_box label="服" name="check_clothing" /> <check_box label="ジェスチャー" name="check_gesture" /> <check_box label="ランドマーク" name="check_landmark" /> <check_box label="ノートカード" name="check_notecard" /> @@ -11,14 +11,14 @@ <check_box label="サウンド" name="check_sound" /> <check_box label="テクスチャー" name="check_texture" /> <check_box label="スナップショット" name="check_snapshot" /> - <button label="全て" label_selected="全て" name="All" /> + <button label="すべて" label_selected="すべて" name="All" /> <button label="なし" label_selected="なし" name="None" /> - <check_box label="常にフォルダーを表示" name="check_show_empty" /> - <check_box label="ログオフ以来" name="check_since_logoff" /> + <check_box label="常にフォルダを表示" name="check_show_empty" /> + <check_box label="ログオフ以降" name="check_since_logoff" /> <text type="string" length="1" name="- OR -"> -または- </text> - <spinner label="時間前" name="spin_hours_ago" /> - <spinner label="日前" name="spin_days_ago" /> + <spinner label="経過時間" name="spin_hours_ago" /> + <spinner label="経過日数" name="spin_days_ago" /> <button label="閉じる" label_selected="閉じる" name="Close" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml b/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml index f61ccd3..32b9e3e 100644 --- a/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml +++ b/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="land holdings floater" title="私の土地"> +<floater name="land holdings floater" title="自分の土地"> <scroll_list name="parcel list"> <column label="Name" name="name" /> <column label="Location" name="location" /> @@ -10,30 +10,30 @@ tool_tip="この土地の中心にテレポート" /> <button label="地図上に表示" label_selected="地図上に表示" name="Show on Map" - tool_tip="世界地図にこの土地を表示します。" /> + tool_tip="この土地を世界地図に表示します。" /> <text name="contrib_label"> - あなたのグループに寄贈: + あなたのグループへの貢献: </text> <scroll_list name="grant list"> <column label="Group" name="group" /> <column label="Area" name="area" /> </scroll_list> <text name="allowed_label"> - 土地保有者に現行の支払い計画を許可: + 現在の支払いプランでの許可された保有地: </text> <text name="allowed_text"> - 0 平方メーター + 0平方メートル </text> <text name="current_label"> - 現在の土地保有者: + 現在の保有地: </text> <text name="current_text"> - 0 平方メーター + 0平方メートル </text> <text name="available_label"> - 土地の購入ように使用可能: + 土地購入可: </text> <text name="available_text"> - 0 平方メーター + 0平方メートル </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml b/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml index 715ca47..60ffe6e 100644 --- a/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml +++ b/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="script ed float" title="スクリプト:新しいスクリプト"> <button label="リセット" label_selected="リセット" name="Reset" /> - <check_box label="起動中" name="running" /> + <check_box label="実行中" name="running" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_moveview.xml b/linden/indra/newview/skins/xui/ja/floater_moveview.xml index 23221e3..c40a1d9 100644 --- a/linden/indra/newview/skins/xui/ja/floater_moveview.xml +++ b/linden/indra/newview/skins/xui/ja/floater_moveview.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="move floater" title=""> - <button label="" label_selected="" name="turn left btn" tool_tip="左折" /> - <button label="" label_selected="" name="turn right btn" tool_tip="右折" /> + <button label="" label_selected="" name="turn left btn" tool_tip="左に曲がる" /> + <button label="" label_selected="" name="turn right btn" tool_tip="右に曲がる" /> <button label="" label_selected="" name="move up btn" - tool_tip="ジャンプ、または上昇" /> + tool_tip="ジャンプまたは上昇" /> <button label="" label_selected="" name="move down btn" - tool_tip="クラウチング、または下降" /> - <button label="飛ぶ" label_selected="飛ぶ" name="fly btn" - tool_tip="飛行を開始または停止します。" /> + tool_tip="しゃがむまたは下降" /> + <button label="飛行" label_selected="飛行" name="fly btn" + tool_tip="飛行を開始または停止" /> <joystick_slide name="slide left btn" tool_tip="左に移動" /> <joystick_slide name="slide right btn" tool_tip="右に移動" /> - <joystick_turn name="forward btn" tool_tip="前進" /> - <joystick_turn name="backward btn" tool_tip="後進" /> + <joystick_turn name="forward btn" tool_tip="前に移動" /> + <joystick_turn name="backward btn" tool_tip="後ろに移動" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_mute.xml b/linden/indra/newview/skins/xui/ja/floater_mute.xml index 68a8cbb..506bdd2 100644 --- a/linden/indra/newview/skins/xui/ja/floater_mute.xml +++ b/linden/indra/newview/skins/xui/ja/floater_mute.xml @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="mute floater" - title="ミュートされた居住者およびオブジェクト"> + title="ミュートされた住人およびオブジェクト"> <scroll_list name="mutes" tool_tip="List of currently muted residents" /> - <button label="居住者をミュート..." - label_selected="居住者をミュート..." name="Mute resident..." - tool_tip="居住者のミュートを選択します。" /> - <button label="オブジェクト名でミュートする" - label_selected="オブジェクト名でミュートする" + <button label="住人をミュート..." label_selected="住人をミュート..." + name="Mute resident..." tool_tip="ミュートする住人を選択" /> + <button label="オブジェクトを名前でミュート..." + label_selected="オブジェクトを名前でミュート..." name="Mute object by name..." /> <button label="ミュートしない" label_selected="ミュートしない" name="Unmute" - tool_tip="ミュートリストから居住者またはオブジェクトを外します。" /> + tool_tip="住人またはオブジェクトをミュート・リストから削除" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_name_description.xml b/linden/indra/newview/skins/xui/ja/floater_name_description.xml index 839ce43..5e38a8a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_name_description.xml +++ b/linden/indra/newview/skins/xui/ja/floater_name_description.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Name/Description" title=""> <text name="name_label"> - 名前: + 名前: </text> <text name="description_label"> - 説明: + 説明: </text> - <button label="取消" name="cancel_btn" /> - <button label="アップロード (L$10)" name="ok_btn" /> + <button label="取り消し" name="cancel_btn" /> + <button label="アップロード(L$10)" name="ok_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_new_im.xml b/linden/indra/newview/skins/xui/ja/floater_new_im.xml index 57c5d70..d87b79c 100644 --- a/linden/indra/newview/skins/xui/ja/floater_new_im.xml +++ b/linden/indra/newview/skins/xui/ja/floater_new_im.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater label="新しいIM" name="New IM" title="新しいIM"> - <button label="スタート" label_selected="スタート" name="start_btn" /> + <button label="開始" label_selected="開始" name="start_btn" /> <button label="閉じる" label_selected="閉じる" name="close_btn" /> <text name="name_format"> - [FIRST][LAST] + [FIRST] [LAST] </text> <text name="online_descriptor"> (オンライン) diff --git a/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml index 41dfed4..231d12a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml +++ b/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=" "> <button label="保存" label_selected="保存" name="Save" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <check_box label="形" name="checkbox_Shape" /> <check_box label="スキン" name="checkbox_Skin" /> <check_box label="髪" name="checkbox_Hair" /> - <check_box label="目" name="checkbox_Eyes" /> - <check_box label="服をフォルダー名と同じにする" name="rename" /> + <check_box label="眼" name="checkbox_Eyes" /> + <check_box label="服をフォルダと同じ名前に変更" name="rename" /> <check_box label="シャツ" name="checkbox_Shirt" /> <check_box label="ズボン" name="checkbox_Pants" /> <check_box label="靴" name="checkbox_Shoes" /> <check_box label="靴下" name="checkbox_Socks" /> <check_box label="ジャケット" name="checkbox_Jacket" /> <check_box label="手袋" name="checkbox_Gloves" /> - <check_box label="下着" name="checkbox_Undershirt" /> - <check_box label="パンツ" name="checkbox_Underpants" /> + <check_box label="(下着の)シャツ" name="checkbox_Undershirt" /> + <check_box label="(下着の)パンツ" name="checkbox_Underpants" /> <check_box label="スカート" name="checkbox_Skirt" /> <check_box label="胸" name="checkbox_Chest" /> <check_box label="頭骨" name="checkbox_Skull" /> @@ -48,25 +48,28 @@ <check_box label="右胸筋" name="checkbox_Right Pec" /> <check_box label="センター2" name="checkbox_Center 2" /> <check_box label="右上部" name="checkbox_Top Right" /> - <check_box label="上部" name="checkbox_Top" /> + <check_box label="トップ" name="checkbox_Top" /> <check_box label="左上部" name="checkbox_Top Left" /> <check_box label="センター" name="checkbox_Center" /> <check_box label="左下" name="checkbox_Bottom Left" /> <check_box label="下部" name="checkbox_Bottom" /> <check_box label="右下" name="checkbox_Bottom Right" /> <text type="string" length="1" name="Make New Outfit"> - 新しい服装をつくる + 新しい服装を作成 </text> <text type="string" length="1" name="Outfits are folders that contain clothing and body parts. Drag an outfit folder onto your avatar to put it on. "Make New Outfit" makes a new folder and saves copies of the items you are now wearing into it."> - 服装は、服と身体部位を含むフォルダーです。装着するには、服装フォルダーをアバターにドラッグしてください。 -『新しい服装作成』は、新しいフォルダーを作成し、現在装着しているアイテムのコピーを保存します。 + 服装フォルダには、服と身体部位が含まれます。 +服などを装着するには、服装フォルダをアバターにドラッグします。 + +[新しい服装を作成]では、新しいフォルダを作成し、 +現在装着しているアイテムのコピーを保存します。 </text> <text type="string" length="1" name="Folder name:"> - フォルダー名: + フォルダ名: </text> <text type="string" length="1" name="Items to include in outfit:"> - 服装に含むアイテム: + 服装に含めるアイテム: </text> <text type="string" length="1" name="Body Parts:"> 身体部位: @@ -75,7 +78,7 @@ 服: </text> <text type="string" length="1" name="Attachments:"> - 付属品: + 添付物: </text> <text type="string" length="1" name="Options:"> オプション: diff --git a/linden/indra/newview/skins/xui/ja/floater_openobject.xml b/linden/indra/newview/skins/xui/ja/floater_openobject.xml index 588b72d..3abda50 100644 --- a/linden/indra/newview/skins/xui/ja/floater_openobject.xml +++ b/linden/indra/newview/skins/xui/ja/floater_openobject.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="オブジェクト・コンテンツ"> <text type="string" length="1" name="object_name"> - [DESC]: + [DESC]: </text> <button label="持ち物にコピー" label_selected="持ち物にコピー" name="copy_to_inventory_button" /> - <button label="コピーし、装着" label_selected="コピーし、装着" + <button label="コピーして装着" label_selected="コピーして装着" name="copy_and_wear_button" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_pay.xml b/linden/indra/newview/skins/xui/ja/floater_pay.xml index 8f8c50f..114cb90 100644 --- a/linden/indra/newview/skins/xui/ja/floater_pay.xml +++ b/linden/indra/newview/skins/xui/ja/floater_pay.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <button label="L$1" label_selected="L$1" name="fastpay 1" /> - <button label="L$5" label_selected="L$5" name="fastpay 5" /> - <button label="L$10" label_selected="L$10" name="fastpay 10" /> - <button label="L$20" label_selected="L$20" name="fastpay 20" /> + <button label="L$1" label_selected="L$1" name="fastpay 1" /> + <button label="L$5" label_selected="L$5" name="fastpay 5" /> + <button label="L$10" label_selected="L$10" name="fastpay 10" /> + <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="支払い" label_selected="支払い" name="pay btn" /> - <button label="取消" label_selected="取消" name="cancel btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel btn" /> <text type="string" length="1" name="payee_label"> - 居住者に支払い: + 支払い先: </text> <text type="string" length="1" name="payee_name"> - [FIRST][LAST] + [FIRST] [LAST] </text> <text type="string" length="1" name="fastpay text"> - 一発払い: + 一括払い: </text> <text type="string" length="1" name="amount text"> 金額: diff --git a/linden/indra/newview/skins/xui/ja/floater_pay_object.xml b/linden/indra/newview/skins/xui/ja/floater_pay_object.xml index cf0e5c5..6ad9c7c 100644 --- a/linden/indra/newview/skins/xui/ja/floater_pay_object.xml +++ b/linden/indra/newview/skins/xui/ja/floater_pay_object.xml @@ -1,30 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> <text type="string" length="1" name="payee_group"> - 支払いグループ: + グループへの支払い: </text> <text type="string" length="1" name="payee_resident"> - 居住者に支払い: + 住人への支払い: </text> <text type="string" length="1" name="payee_name"> - [FIRST][LAST] + [FIRST] [LAST] </text> <text type="string" length="1" name="object_name_label"> - オブジェクト経由: + オブジェクトを介して: </text> <text type="string" length="1" name="object_name_text"> - … + ... </text> <text type="string" length="1" name="fastpay text"> - 一発払い: + 一括払い: </text> <text type="string" length="1" name="amount text"> 金額: </text> - <button label="L$1" label_selected="L$1" name="fastpay 1" /> - <button label="L$5" label_selected="L$5" name="fastpay 5" /> - <button label="L$10" label_selected="L$10" name="fastpay 10" /> - <button label="L$20" label_selected="L$20" name="fastpay 20" /> + <button label="L$1" label_selected="L$1" name="fastpay 1" /> + <button label="L$5" label_selected="L$5" name="fastpay 5" /> + <button label="L$10" label_selected="L$10" name="fastpay 10" /> + <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="支払い" label_selected="支払い" name="pay btn" /> - <button label="取消" label_selected="取消" name="cancel btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_postcard.xml b/linden/indra/newview/skins/xui/ja/floater_postcard.xml index dbdaf33..283e674 100644 --- a/linden/indra/newview/skins/xui/ja/floater_postcard.xml +++ b/linden/indra/newview/skins/xui/ja/floater_postcard.xml @@ -1,28 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Postcard" title="ポストカードの送信"> +<floater name="Postcard" title="ポストカードを送る"> <text name="to_label"> - 受領者のEメール: + 住人の電子メール: </text> <text name="from_label"> - あなたのEメール: + あなたのEメール:: </text> <text name="name_label"> - あなたの名前: + あなたの名前: </text> <text name="subject_label"> - 主体: + 件名: </text> <text name="msg_label"> - Mメッセージ: + メッセージ: </text> - <check_box label="ウェブ上に公表する。" name="allow_publish_check" - tool_tip="このポストカードをWeb上で公開します。" /> + <check_box label="ウェブ上で公開" name="allow_publish_check" + tool_tip="このポストカードをウェブ上で公開します。" /> <check_box label="成人向けコンテンツ" name="mature_check" - tool_tip="このポストカードには、成人向け内容が含まれます。" /> + tool_tip="このポストカードには成人向け内容が含まれます。" /> <button label="?" name="publish_help_btn" /> <text name="fine_print"> - あなたのポストカードの受領者がSLに加入した場合には、あなたは紹介ボーナルをもらえます。 + あなたのポストカードの受信者がSLに参加すると、あなたは紹介ボーナスを受け取ります。 </text> - <button label="取消" name="cancel_btn" /> + <button label="取り消し" name="cancel_btn" /> <button label="送信" name="send_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preferences.xml b/linden/indra/newview/skins/xui/ja/floater_preferences.xml index d3dbf32..f454940 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preferences.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preferences.xml @@ -1,7 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Preferences" title="嗜好"> - <button label="…に関して" label_selected="…に関して" name="About..." /> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater name="Preferences" title="環境設定"> <button label="OK" label_selected="OK" name="OK" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <button label="適用" label_selected="適用" name="Apply" /> + <button label="詳細情報" label_selected="詳細情報" + name="About..." /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml b/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml index ff8d2e8..dfb90f2 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview anim" title="アニメーション:ラテン・サルサ19"> +<floater name="preview_anim"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> - <button label="世界でプレイ" label_selected="停止" name="Anim play btn" - tool_tip="他の人が見ることができるように、このアニメーションを再生します。" /> - <button label="ローカルでプレイ" label_selected="停止" - name="Anim audition btn" - tool_tip="あなたのみが見ることができるように、このアニメーションを再生します。" /> + <button label="世界で再生" label_selected="停止" name="Anim play btn" + tool_tip="このアニメーションを他の人も見ることができるように再生します。" /> + <button label="ローカルに再生" label_selected="停止" name="Anim audition btn" + tool_tip="このアニメーションを自分専用に再生します。" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml index e25f5ea..5ca4550 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview texture" title="上部土壌"> - <button label="持ち物にコピー" label_selected="持ち物にコピー" - name="Copy To Inventory" /> +<floater name="preview_texture"> + <button label="持ち物にコピー" name="Copy To Inventory" /> <text type="string" length="1" name="dimensions"> - 採寸:[WIDTH]×[HEIGHT] + 寸法:[HEIGHT]x[WIDTH] </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml b/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml index f50f898..544669c 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Linden Land, Da Boom (154, 135, 35)" - title=" Linden Land, Da Boom (154, 135, 35)"> +<floater name="existing_landmark_preview"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> <button label="テレポート" label_selected="" name="Teleport btn" /> <button label="地図上に表示" label_selected="" name="Show on Map btn" /> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml index 7d10829..a92400a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gesture" title="ジェスチャー"> +<floater name="gesture_preview"> <text name="desc_label"> - 説明: + 説明: </text> <text name="trigger_label"> - トリガー: + トリガー: </text> <text name="replace_text" - tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture!"> - 入れ替える: + tool_tip="トリガー・ワードをこれらの単語に置き換えます。 たとえば、トリガー'hello'を'Howdy'に置換すると、'I wanted to say hello'というチャット文が'I wanted to say howdy'に変わり、ジェスチャーにも置換が反映されます。"> + 置換: </text> <line_editor name="replace_editor" - tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture" /> + tool_tip="トリガー・ワードをこれらの単語に置き換えます。 たとえば、トリガー'hello'を'Howdy'に置換すると、'I wanted to say hello'というチャット文が'I wanted to say howdy'に変わり、ジェスチャーにも置換が反映されます。" /> <text name="key_label"> - ショートカットキー: + ショートカット・キー: </text> <combo_box label="なし" name="modifier_combo" /> <combo_box label="なし" name="key_combo" /> @@ -21,27 +21,28 @@ ライブラリ: </text> <text> - 工程: + 手順: </text> <button label="追加>>" name="add_btn" /> <button label="上に移動" name="up_btn" /> <button label="下に移動" name="down_btn" /> - <button label="取り除く" name="delete_btn" /> + <button label="削除" name="delete_btn" /> <text name="help_label"> - あなたが待機ステップを追加しない限りは、全てのステップは同時に行われます。 + 待機ステップを追加しない限り、 +すべてのステップが同時に行われます。 </text> <radio_group name="animation_trigger_type"> <radio_item> - スタート + 開始 </radio_item> <radio_item> 停止 </radio_item> </radio_group> - <check_box label="アニメーションが終わるまで" name="wait_anim_check" /> - <check_box label="秒単位の時間" name="wait_time_check" /> + <check_box label="アニメーションが完了するまで" name="wait_anim_check" /> + <check_box label="秒表示の時間" name="wait_time_check" /> <check_box label="アクティブ" name="active_check" - tool_tip="Active gestures can be triggered by chatting their trigger phrases or pressing their hot keys. Gestures usually become inactive when there is a key binding conflict." /> + tool_tip="アクティブ・ジェスチャーは、トリガー・フレーズを使うか、またはホット・キーを押すことによってトリガーできます。 1つのショートカット・キーに2つ以上のジェスチャーが割り当てられた場合、そのジェスチャーは両方ともアクティブではなくなります。" /> <button label="プレビュー" name="preview_btn" /> <button label="保存" name="save_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml index 4869ad6..152f3b0 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml @@ -1,10 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Linden Land, Da Boom (155, 136, 35)" - title=" Linden Land, Da Boom (155, 136, 35)"> +<floater name="landmark_preview"> <button label="テレポート" label_selected="" name="Teleport btn" /> <button label="地図上に表示" label_selected="" name="Show on Map btn" /> - <button label="廃棄" label_selected="" name="Discard btn" /> + <button label="破棄" label_selected="" name="Discard btn" /> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml index 989c8b2..0ba3013 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml @@ -2,9 +2,9 @@ <floater name="preview notecard" title="メモ:"> <button label="保存" label_selected="保存" name="Save" /> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> <text_editor type="string" length="1" name="Notecard Editor"> - ローディング... + ロード中... </text_editor> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml index 427f1b0..d56d221 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview notecard" title="メモ:あなたの容姿を変更、Part 2"> +<floater name="preview_notecard"> <text_editor type="string" length="1" name="Notecard Editor"> - ローディング... + ロード中... </text_editor> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> - <button label="保つ" label_selected="保つ" name="Keep" /> - <button label="廃棄" label_selected="廃棄" name="Discard" /> + <button label="維持" label_selected="維持" name="Keep" /> + <button label="破棄" label_selected="破棄" name="Discard" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml b/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml index efd5d32..d455d4c 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview sound" title="サウンド:ブーイング(女性)2"> +<floater name="preview_sound"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> - <button label="世界でプレイ" label_selected="世界でプレイ" - name="Sound play btn" - tool_tip="他の人が聞くことができるように、このサウンドを再生します。" /> - <button label="ローカルでプレイ" label_selected="ローカルでプレイ" + <button label="世界で再生" label_selected="世界で再生" name="Sound play btn" + tool_tip="このサウンドを他の人も聞くことができるように再生します。" /> + <button label="ローカルに再生" label_selected="ローカルに再生" name="Sound audition btn" - tool_tip="あなたのみが聞くことができるように、このサウンドを再生します。" /> + tool_tip="このサウンドを自分専用に再生します。" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml index 0eb6e37..affcc51 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml @@ -1,10 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview texture" - title="テクスチャー:スクラッチ済みのグレー金属"> +<floater name="preview_texture"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> <text type="string" length="1" name="dimensions"> - 採寸:[WIDTH]×[HEIGHT] + 寸法:[HEIGHT]x[WIDTH] </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml index 6dd5249..1cf2d8e 100644 --- a/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml +++ b/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview texture" title="テクスチャー:slhand"> +<floater name="preview_texture"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> - <button label="保つ" label_selected="保つ" name="Keep" /> - <button label="廃棄" label_selected="廃棄" name="Discard" /> + <button label="維持" label_selected="維持" name="Keep" /> + <button label="破棄" label_selected="破棄" name="Discard" /> <text type="string" length="1" name="dimensions"> - 採寸:[WIDTH]×[HEIGHT] + 寸法:[HEIGHT]x[WIDTH] </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml b/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml index 073c6f1..eb1362b 100644 --- a/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml +++ b/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="price_for_listing" title="案内広告の表示"> +<floater name="price_for_listing" title="クラシファイド広告掲載"> <text name="explanation_text"> - あなたの案内広告はそれが表示された日付 -から一週間乗ります。 + クラシファイド広告は1週間に +わたり、掲載されます。 -案内広告リストでのあなたの広告の位置は -あなたがいくら支払うことを選択したかに関わります。 -最も高く支払われた広告はリストのトップに行き、 -そして検索でもより頻繁に現れます。 +広告の掲載順は、支払う広告料に +よります。広告料が最も高い広告が +最初に掲載され、検索結果でも +上位に表示されます。 </text> <text name="price_text"> - 広告用の価格(L$): + 広告料金(L$): </text> <button label="価格を設定" name="set_price_btn" /> - <button label="取消" name="cancel_btn" /> + <button label="取り消し" name="cancel_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_profile.xml b/linden/indra/newview/skins/xui/ja/floater_profile.xml index b88fe4b..6ba8988 100644 --- a/linden/indra/newview/skins/xui/ja/floater_profile.xml +++ b/linden/indra/newview/skins/xui/ja/floater_profile.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="avatarinfo" title="プロファイル" /> +<floater name="avatarinfo" title="プロフィール" /> diff --git a/linden/indra/newview/skins/xui/ja/floater_rate.xml b/linden/indra/newview/skins/xui/ja/floater_rate.xml index 83bd4b8..7d26296 100644 --- a/linden/indra/newview/skins/xui/ja/floater_rate.xml +++ b/linden/indra/newview/skins/xui/ja/floater_rate.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="rate" title="あなたのJeska Lindenへの評価"> +<floater name="rate" title="Jeska Lindenに対するあなたの評価"> <radio_group name="behavior"> <radio_item type="string" length="1" name="Positive"> ポジティブ </radio_item> <radio_item type="string" length="1" name="No Rating"> - 無評価 + 評価なし </radio_item> </radio_group> <radio_group name="appearance"> @@ -13,7 +13,7 @@ ポジティブ </radio_item> <radio_item type="string" length="1" name="No Rating"> - 無評価 + 評価なし </radio_item> </radio_group> <radio_group name="building"> @@ -21,24 +21,24 @@ ポジティブ </radio_item> <radio_item type="string" length="1" name="No Rating"> - 無評価 + 評価なし </radio_item> </radio_group> <button label="OK" label_selected="OK" name="OK" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <text type="string" length="1" name="Overall behavior:"> - 全体的な態度: + 全体的な行動: </text> <text type="string" length="1" name="Skill at appearance (clothing and attachments):"> - 容姿のスキル (服、装飾品): + 容姿のスキル(服と装飾品): </text> <text type="string" length="1" name="Skill at building:"> 建造物のスキル: </text> <text type="string" length="1" name="Message:"> - Mメッセージ: + メッセージ: </text> <text type="string" length="1" name="cost"> - 費用:各評価を変更するにはL$[COST] 全体費用:L$[TOTAL] + 費用:各評価を変更するにはL$[TOTAL] 全体費用:L$[COST]. </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml b/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml index fe3e0a0..7f3a7f2 100644 --- a/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml +++ b/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml @@ -1,26 +1,37 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_report_abuse" title="悪用の報告"> +<floater name="floater_report_abuse" title="嫌がらせの報告"> <text name="reporter_title"> - レポータ: + 報告者: </text> <text name="sim_title"> - シュミレータ: + 地域: </text> <text name="pos_title"> - 位置: + 位置: </text> <texture_picker label="作業中..." name="screenshot" /> - <check_box label="スクリーンショットを含む" name="screen_check" /> + <check_box label="スクリーンショットを含める" name="screen_check" /> + <button label="" label_selected="" name="pick_btn" + tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定" /> + <text name="select_object_label"> + ボタンを使ってオブジェクトを選択: + </text> + <text name="object_name_label"> + 名前: + </text> + <text name="owner_name_label"> + オーナー: + </text> <combo_box name="category_combo" tool_tip="Category -- select the category that best describes this report"> <combo_item name="Selectcategory"> - カテゴリを選択 + カテゴリーを選択 </combo_item> <combo_item name="Intolerance"> 非許容 </combo_item> <combo_item name="Harassment"> - ハラスメント + 嫌がらせ </combo_item> <combo_item name="Assault"> 攻撃 @@ -41,37 +52,28 @@ その他 </combo_item> </combo_box> - <button label="" label_selected="" name="pick_btn" - tool_tip="オブジェクト・ピッカー-本報告の題材となるオブジェクトを特定" /> - <text name="select_object_label"> - ボタンをクリックしてからオブジェクト: - </text> - <text name="object_name_label"> - 名前: - </text> - <text name="owner_name_label"> - 所有者: - </text> <text name="abuser_name_title"> - 嫌がらせを行為者名: + 迷惑ユーザーの名前: </text> <button label="選択" label_selected="" name="select_abuser" - tool_tip="リストから嫌がらせ実行者名を選択してください。" /> + tool_tip="嫌がらせをした人の名前をリストから選択してください。" /> <text name="abuser_name_title2"> - 嫌がらせ箇所: + 嫌がらせの起きた場所: </text> <text name="sum_title"> - まとめ: + 概要: </text> <text name="dscr_title"> - 詳細: + 詳細: </text> <text name="bug_aviso"> - 日付、ロケーション、嫌がらせ特徴、関連する会話/IMテキストに関し、明確にしてください。また、可能であれば、オブジェクトを選択してください。 + 日付、ロケーション、嫌がらせの性質、関連する会話や +IMテキストを示し可能な場合はオブジェクトを選択します。 </text> <text name="incomplete_title"> - 注意:未完成の報告は調査されません。 + 注意:不完全な報告は調査されません。 </text> - <button label="悪用の報告" label_selected="悪用の報告" name="send_btn" /> - <button label="取消" label_selected="取消" name="cancel_btn" /> + <button label="嫌がらせの報告" label_selected="嫌がらせの報告" + name="send_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_report_bug.xml b/linden/indra/newview/skins/xui/ja/floater_report_bug.xml index 4c01e02..7558d57 100644 --- a/linden/indra/newview/skins/xui/ja/floater_report_bug.xml +++ b/linden/indra/newview/skins/xui/ja/floater_report_bug.xml @@ -1,70 +1,70 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="bug_reporter" title="バグの報告"> <text name="reporter_title"> - レポータ: + 報告者: </text> <text name="sim_title"> - シュミレータ: + シミュレータ: </text> <text name="pos_title"> - 位置: + 位置: </text> <text name="select_object_label"> - ボタンをクリックしてから、オブジェクトを選択してください: + ボタンを使ってオブジェクトを選択: </text> <button label="" label_selected="" name="pick_btn" - tool_tip="オブジェクト・ピッカー-本報告の題材となるオブジェクトを特定" /> + tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定" /> <text name="object_name_label"> - 名前: + 名前: </text> <text name="owner_name_label"> - 所有者: + オーナー: </text> - <check_box label="スクリーンショットを含む" name="screen_check" /> + <check_box label="スクリーンショットを含める" name="screen_check" /> <texture_picker label="作業中..." name="screenshot" /> <text name="category_label"> - カテゴリ: + カテゴリー: </text> <combo_box name="category_combo" tool_tip="Category -- select the category that best describes this report"> <combo_item name="Selectcategory"> - カテゴリを選択 + カテゴリーを選択 </combo_item> <combo_item name="Building"> - ビルディング + 建造物 </combo_item> <combo_item name="Character"> - 性格 + キャラクター </combo_item> <combo_item name="Chat/IM"> - チャット/IM + チャット/IM </combo_item> <combo_item name="Documentation"> - 文書化 + 文書 </combo_item> <combo_item name="Exploit"> - 開拓する + 開発する </combo_item> <combo_item name="Graphics"> - グラフィックス + 表示 </combo_item> <combo_item name="Inventory"> - 在庫目録 + 持ち物 </combo_item> <combo_item name="Lag"> - 遅延 + ラグ </combo_item> <combo_item name="MissingContent"> - 紛失コンテント + コンテンツなし </combo_item> <combo_item name="LindenDollars(L$)"> リンデン・ドル(L$) </combo_item> <combo_item name="Permissions"> - 許可 + 権限 </combo_item> <combo_item name="Physics"> - 物理学 + 物理的作用 </combo_item> <combo_item name="Script"> スクリプト @@ -73,33 +73,33 @@ 音 </combo_item> <combo_item name="Stipends"> - 固定給 + 給金 </combo_item> <combo_item name="Userinterface"> - ユーザーインターフェース + ユーザー・インターフェース </combo_item> <combo_item name="Miscellaneous"> - 種々雑多 + その他 </combo_item> </combo_box> <text name="sum_title"> - まとめ: + 概要: </text> <text name="dscr_title"> - 詳細: + 詳細:(できるだけ詳しい情報を提供してください) </text> <text_editor name="details_edit"> - バグを再生するステップ: + バグを再現する手順: -観察された結果: +観察結果: -期待された結果: +予測結果: </text_editor> <text name="bug_aviso"> - If this bug allows you to do something you should not be able -to do, especially if it impacts performance or security, please -select the 'Exploit' category. Thank you! + 補足:レポートが不完全である場合は調査されません。 +このバグによって本来できないことが可能になる場合、特にパフォーマンスやセキュリティに影響を与える場合には、 +[違反]カテゴリーを選択してください。よろしくお願いします。 </text> <button label="バグの報告" label_selected="バグの報告" name="send_btn" /> - <button label="取消" label_selected="取消" name="cancel_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_script_debug.xml b/linden/indra/newview/skins/xui/ja/floater_script_debug.xml index c5148bc..0c53d05 100644 --- a/linden/indra/newview/skins/xui/ja/floater_script_debug.xml +++ b/linden/indra/newview/skins/xui/ja/floater_script_debug.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<multi_floater name="script debug floater" title="スクリプトエラー/警告"> +<multi_floater name="script debug floater" title="スクリプト・エラー/警告"> <tab_container name="Preview Tabs"> <floater label="スクリプト" name="all_scripts" title="[All scripts]" /> </tab_container> diff --git a/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml b/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml index f0863a4..1e56220 100644 --- a/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml +++ b/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="script panel"> - <button label="保存" label_selected="保存" name="Save_btn" /> <text_editor type="string" length="1" name="Script Editor"> - ローディング... + ロード中... </text_editor> + <button label="保存" label_selected="保存" name="Save_btn" /> <menu_bar name="script_menu"> <menu name="File"> <menu_item_call label="保存" name="Save" /> - <menu_item_call label="全ての変更を取り消す" name="Revert All Changes" /> + <menu_item_call label="すべての変更を元に戻す" name="Revert All Changes" /> </menu> <menu name="Edit"> <menu_item_call label="元に戻す" name="Undo" /> @@ -17,13 +17,14 @@ <menu_item_call label="コピー" name="Copy" /> <menu_item_call label="貼り付け" name="Paste" /> <menu_item_separator label="-----------" name="separator2" /> - <menu_item_call label="全てを選択" name="Select All" /> - <menu_item_call label="選定しない" name="Deselect" /> + <menu_item_call label="すべてを選択" name="Select All" /> + <menu_item_call label="選択解除" name="Deselect" /> <menu_item_separator label="-----------" name="separator3" /> - <menu_item_call label="検索/置換" name="Search / Replace..." /> + <menu_item_call label="検索/置換..." name="Search / Replace..." /> </menu> <menu name="Help"> - <menu_item_call label="ヘルプ" name="Help..." /> + <menu_item_call label="ヘルプ..." name="Help..." /> + <menu_item_call label="LSL Wikiヘルプ..." name="LSL Wiki Help..." /> </menu> </menu_bar> </panel> diff --git a/linden/indra/newview/skins/xui/ja/floater_script_preview.xml b/linden/indra/newview/skins/xui/ja/floater_script_preview.xml index 6495b1c..4cf4851 100644 --- a/linden/indra/newview/skins/xui/ja/floater_script_preview.xml +++ b/linden/indra/newview/skins/xui/ja/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="スクリプト:回転スクリプト"> <text type="string" length="1" name="desc txt"> - 説明: + 説明: </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_script_queue.xml b/linden/indra/newview/skins/xui/ja/floater_script_queue.xml index 2f21b34..7c4979a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_script_queue.xml +++ b/linden/indra/newview/skins/xui/ja/floater_script_queue.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="queue" title="進捗の再設定"> +<floater name="queue" title="進捗のリセット"> <button label="閉じる" label_selected="閉じる" name="close" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_script_search.xml b/linden/indra/newview/skins/xui/ja/floater_script_search.xml index 306798b..2accc0f 100644 --- a/linden/indra/newview/skins/xui/ja/floater_script_search.xml +++ b/linden/indra/newview/skins/xui/ja/floater_script_search.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="script search" title="スクリプト検索"> - <check_box label="大文字や小文字の区別をしない" name="case_text" /> + <check_box label="大文字と小文字を区別しない" name="case_text" /> <button label="検索" label_selected="検索" name="search_btn" /> - <button label="入れ替える" label_selected="入れ替える" name="replace_btn" /> - <button label="全てを交換" label_selected="全てを交換" name="replace_all_btn" /> + <button label="置換" label_selected="置換" name="replace_btn" /> + <button label="すべて置換" label_selected="すべて置換" name="replace_all_btn" /> <text type="string" length="1" name="txt"> 検索 </text> <text type="string" length="1" name="txt2"> - 入れ替える + 置換 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_sell_land.xml b/linden/indra/newview/skins/xui/ja/floater_sell_land.xml index 4032918..4b8650a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_sell_land.xml +++ b/linden/indra/newview/skins/xui/ja/floater_sell_land.xml @@ -7,35 +7,35 @@ 区画名 </text> <text name="info_size_label"> - 規模: + サイズ: </text> <text name="info_size"> [AREA]平方メートル </text> <text name="info_action"> - 本区画を販売するには: + この区画を販売するには: </text> <text name="price_label"> - 価格を決定: + 価格を設定: </text> <text name="price_text"> この土地に対する適切な価格を選択してください。 </text> <text name="price_ld"> - L$ + L$ </text> <text name="price_per_m"> - (一平方メートル当たりL$[PER_METER]) + (1平方メートル当たりL$ [PER_METER]) </text> <text name="sell_to_label"> - 土地販売先: + 土地の販売先: </text> <text name="sell_to_text"> - 誰にでも販売するのか、特定の購入者に販売するのか選択してください。 + 誰にでも販売するか、特定の購入者にのみ販売するかを選択してください。 </text> <combo_box name="sell_to"> <combo_item name="--selectone--"> - --一つを選択-- + --1つ選択-- </combo_item> <combo_item name="Anyone"> 誰でも @@ -44,25 +44,25 @@ 特定ユーザー: </combo_item> </combo_box> - <button label="選択" name="sell_to_select_agent" /> + <button label="選択..." name="sell_to_select_agent" /> <text name="sell_objects_label"> - 土地と一緒にオブジェクトも売りますか? + 土地と共にオブジェクトを販売しますか? </text> <text name="sell_objects_text"> - Land owner's transferable objects on parcel will change ownership. + 区画上にある土地オーナーの譲渡可能なオブジェクトは、所有権が変更されます。 </text> <radio_group name="sell_objects"> <radio_item name="no"> - いいえ、オブジェクトの所有権を維持します + いいえ、オブジェクト所有権を保持します </radio_item> <radio_item name="yes"> - はい、オブジェクトを土地ごと売却します + はい、土地と一緒にオブジェクトを売ります。 </radio_item> </radio_group> <button label="オブジェクトを表示" name="show_objects" /> <text name="nag_message_label"> - 一言メモ:返品・交換は出来ません。 + 注意:返品や交換はできません。 </text> <button label="売り地の設定" name="sell_btn" /> - <button label="取消" name="cancel_btn" /> + <button label="取り消し" name="cancel_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml b/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml index 30ef985..1de3763 100644 --- a/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml +++ b/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml @@ -2,14 +2,16 @@ <floater name="settings_debug" title="デバッグ設定"> <combo_box name="boolean_combo"> <combo_item name="TRUE"> - 正解 + 正 </combo_item> <combo_item name="FALSE"> - 誤り + 誤 </combo_item> </combo_box> + <color_swatch label="色" name="color_swatch" /> <spinner label="x" name="val_spinner_1" /> <spinner label="x" name="val_spinner_2" /> <spinner label="x" name="val_spinner_3" /> <spinner label="x" name="val_spinner_4" /> + <button label="デフォルトにリセット" name="default_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_snapshot.xml b/linden/indra/newview/skins/xui/ja/floater_snapshot.xml index 6a2a2af..e94d585 100644 --- a/linden/indra/newview/skins/xui/ja/floater_snapshot.xml +++ b/linden/indra/newview/skins/xui/ja/floater_snapshot.xml @@ -1,23 +1,23 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="Snapshot" title="スナップショットの再検討"> +<floater name="Snapshot" title="プレビュー"> <text name="type_label"> - 何がしたいですか。 + 何をしたいですか? </text> - <radio_group label="スナップショットのタイプ" name="snapshot_type_radio"> + <radio_group label="スナップショット・タイプ" name="snapshot_type_radio"> <radio_item name="postcard"> - ポストカードを送る + ポストカード送信 </radio_item> <radio_item name="texture"> - スナップショットをアップロードする + アップロード </radio_item> <radio_item name="local"> - スナップショットをハードディスクに保存 + ハード・ドライブに保存 </radio_item> </radio_group> <text name="type_label2"> - どんな寸法のイメージが必要ですか。 + どんな大きさの画像が必要ですか? </text> - <combo_box label="解決" name="postcard_size_combo"> + <combo_box label="解像度" name="postcard_size_combo"> <combo_item name="640x480"> 640x480 </combo_item> @@ -34,24 +34,24 @@ カスタム </combo_item> </combo_box> - <combo_box label="解決" name="texture_size_combo"> + <combo_box label="解像度" name="texture_size_combo"> <combo_item name="CurrentWindow"> 現在のウィンドウ </combo_item> <combo_item name="Small(128x128)"> - 小型 (128x128) + 小(128x128) </combo_item> <combo_item name="Medium(256x256)"> - 中型 (256x256) + 中(256x256) </combo_item> <combo_item name="Large(512x512)"> - 大型 (512x512) + 大(512x512) </combo_item> <combo_item name="Custom"> カスタム </combo_item> </combo_box> - <combo_box label="解決" name="local_size_combo"> + <combo_box label="解像度" name="local_size_combo"> <combo_item name="CurrentWindow"> 現在のウィンドウ </combo_item> @@ -79,11 +79,11 @@ </combo_box> <spinner label="幅" name="snapshot_width" /> <spinner label="高さ" name="snapshot_height" /> - <slider label="画像の品質" name="image_quality_slider" /> + <slider label="画質" name="image_quality_slider" /> <text name="layer_type_label"> - 獲得: + キャプチャ: </text> - <combo_box label="画像層" name="layer_types"> + <combo_box label="画像レイヤー" name="layer_types"> <combo_item name="Colors"> 色 </combo_item> @@ -91,24 +91,24 @@ 深さ </combo_item> <combo_item name="ObjectMattes"> - オグジェクト・マット + オグジェクトのつや消し </combo_item> </combo_box> <text name="file_size_label"> - ファイルサイズ:[SIZE] + ファイル サイズ:[SIZE] </text> - <check_box label="スナップショットでインタフェースを表示" + <check_box label="インタフェースを表示" name="ui_check" /> - <check_box label="HUDオブジェクトをスナップショットで表示" + <check_box label="HUD オブジェクトを表示" name="hud_check" /> - <check_box label="保存した後開いたままにする" name="keep_open_check" /> - <check_box label="特定のアスペクト比を維持する" name="keep_aspect_check" /> - <check_box label="フレームを凍結(フル画面プレビュー)" + <check_box label="保存後も開いた状態を保持" name="keep_open_check" /> + <check_box label="指定の縦横比を保持" name="keep_aspect_check" /> + <check_box label="フレームをフリーズ(全画面)" name="freeze_frame_check" /> <button label="新しいスナップショット" name="new_snapshot_btn" /> <check_box label="自動スナップショット" name="auto_snapshot_check" /> - <button label="アップロード (L$10)" name="upload_btn" /> + <button label="アップロードL$10" name="upload_btn" /> <button label="送信" name="send_btn" /> <button label="保存" name="save_btn" /> - <button label="廃棄" name="discard_btn" /> + <button label="破棄" name="discard_btn" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml b/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml index 05040ed..2faa30a 100644 --- a/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml +++ b/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Name/Description" title="sound.wav"> <text name="name_label"> - 名前: + 名前: </text> <text name="description_label"> - 説明: + 説明: </text> - <button label="取消" label_selected="取消" name="cancel_btn" /> - <button label="アップロード (L$10)" label_selected="アップロード (L$10)" - name="ok_btn" /> + <button label="取り消し" label_selected="取り消し" name="cancel_btn" /> + <button label="アップロードL$10" + label_selected="アップロードL$10" name="ok_btn" /> <text name="text"> - ビットレート (kbps): + ビットレート(kbps): </text> <radio_group name="bitrate"> <radio_item name="32"> diff --git a/linden/indra/newview/skins/xui/ja/floater_telehub.xml b/linden/indra/newview/skins/xui/ja/floater_telehub.xml index fda2bce..9570d40 100644 --- a/linden/indra/newview/skins/xui/ja/floater_telehub.xml +++ b/linden/indra/newview/skins/xui/ja/floater_telehub.xml @@ -1,28 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="telehub" title="テレハブ"> <text name="status_text_connected"> - [OBJECT]に接続されたテレハブ + 物体[OBJECT]に接続されたテレハブ </text> <text name="status_text_not_connected"> - テレハブが接続されていない + テレハブ未接続 </text> <text name="help_text_connected"> - 除外するには『切断』をクリックしてください。 + [切断]をクリックして削除します。 </text> <text name="help_text_not_connected"> - オブジェクトを選択し、『テレハブに接続』をクリックしてください。 + 物体を選択し[テレハブの接続」をクリックする </text> - <button label="テレハブに接続" name="connect_btn" /> + <button label="テレハブの接続" name="connect_btn" /> <button label="切断" name="disconnect_btn" /> <text name="spawn_points_text"> - 産卵ポイント (位置, オブジェクトではない: + 出現地点(物体ではなく位置) </text> - <button label="子供を追加" name="add_spawn_point_btn" /> - <button label="子供を取り除く" name="remove_spawn_point_btn" /> + <button label="出現位置を追加" name="add_spawn_point_btn" /> + <button label="出現地点を削除" name="remove_spawn_point_btn" /> <text name="spawn_point_help"> - オブジェクトを選択し、Addをクリックし位置を指定する。 -それからオブジェクトを移動または削除してもよい。 -位置はテレハブセンターに相対している。 -リストの項目を選択し、世界中の位置を示します。 + 物体を選択し[追加]をクリックし位置を指定。 +物体を移動または削除できる。 +位置はテレハブ・センターが基準の相対位置。 +リスト内品目を選択しワールド内位置を示す。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml b/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml index e9b2a0c..871a5c3 100644 --- a/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml +++ b/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="texture picker" title="ピック:テクスチャー"> +<floater name="texture picker" title="選択:テクスチャー"> <text type="string" length="1" name="Multiple"> - 複数の + 複数 </text> <text type="string" length="1" name="unknown"> - 採寸:512×512 + 寸法:512~512 </text> - <button label="デフォルト" label_selected="デフォルト" name="Default" /> + <button label="デフォルト" label_selected="デフォルト" name="Default" /> <button label="なし" label_selected="なし" name="None" /> <button label="ブランク" label_selected="ブランク" name="Blank" /> - <check_box label="フォルダーを表示" name="show_folders_check" /> - <check_box label="即座に適用" name="apply_immediate_check" /> + <check_box label="フォルダを表示" name="show_folders_check" /> + <check_box label="ただちに適用" name="apply_immediate_check" /> <button label="" label_selected="" name="Pipette" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <button label="選択" label_selected="選択" name="Select" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_tools.xml b/linden/indra/newview/skins/xui/ja/floater_tools.xml index 3644b8b..d60ff80 100644 --- a/linden/indra/newview/skins/xui/ja/floater_tools.xml +++ b/linden/indra/newview/skins/xui/ja/floater_tools.xml @@ -6,7 +6,7 @@ </text> <button label="" label_selected="" name="button move" /> <text name="tool label2"> - 移動する + 移動 </text> <button label="" label_selected="" name="button edit" /> <text name="tool label3"> @@ -14,32 +14,33 @@ </text> <button label="" label_selected="" name="button create" /> <text name="tool label4"> - 生成 + 作成 </text> <button label="" label_selected="" name="button land" /> <text name="tool label5"> 土地 </text> - <check_box label="拡大" name="radio zoom" /> + <check_box label="ズーム" name="radio zoom" /> <check_box label="軌跡(Ctrl)" name="radio orbit" /> - <check_box label="パンする(Ctrl-Shift)" name="radio pan" /> - <check_box label="移動する" name="radio move" /> + <check_box label="パン(Ctrl+Shift)" name="radio pan" /> + <check_box label="移動" name="radio move" /> <check_box label="持ち上げる(Ctrl)" name="radio lift" /> - <check_box label="スピンする(Ctrl-Shift)" name="radio spin" /> + <check_box label="スピン(Ctrl+Shift)" name="radio spin" /> <check_box label="位置" name="radio position" /> - <check_box label="回転する(Ctrl)" name="radio rotate" /> - <check_box label="引き伸ばす(Ctrl-Shift)" name="radio stretch" /> - <check_box label="テクスチャを選択" name="radio select face" /> - <check_box label="リンクされたパートを編集" name="checkbox edit linked parts" /> - <check_box label="グリッドを使用" name="checkbox snap to grid" /> - <button label="オプション" label_selected="オプション" name="Options..." /> - <check_box label="両側から引き伸ばす" name="checkbox uniform" /> - <check_box label="テクスチャを引き伸ばす" name="checkbox stretch textures" /> + <check_box label="回転(Ctrl)" name="radio rotate" /> + <check_box label="引伸ばす(Ctrl+Shift)" name="radio stretch" /> + <check_box label="テクスチャーを選択" name="radio select face" /> + <check_box label="リンク部位を編集" name="checkbox edit linked parts" /> + <check_box label="グリッド使用" name="checkbox snap to grid" /> + <button label="オプション..." label_selected="オプション..." + name="Options..." /> + <check_box label="両側を引伸ばす" name="checkbox uniform" /> + <check_box label="テクスチャーを引伸ばす" name="checkbox stretch textures" /> <text name="text ruler mode"> - ルーラーモード: + ルーラー・モード: </text> <text name="text status"> - ドラッグは移動、シフトドラッグでコピー + 移動するにはドラッグ、コピーするにはShiftキーを押しながらドラッグ </text> <combo_box name="combobox grid mode"> <combo_item name="World"> @@ -62,97 +63,94 @@ <button label="" label_selected="" name="ToolHemiCone" /> <button label="" label_selected="" name="ToolSphere" /> <button label="" label_selected="" name="ToolHemiSphere" /> - <check_box label="選択をコピー" name="checkbox copy selection" /> + <check_box label="選択内容をコピー" name="checkbox copy selection" /> <button label="" label_selected="" name="ToolTorus" /> <button label="" label_selected="" name="ToolTube" /> <button label="" label_selected="" name="ToolRing" /> <button label="" label_selected="" name="ToolTree" /> <button label="" label_selected="" name="ToolGrass" /> <check_box label="選択したツールを保持" name="checkbox sticky" /> - <check_box label="センターコピー" name="checkbox copy centers" /> - <check_box label="コピーを回転します。" name="checkbox copy rotates" /> + <check_box label="コピーを中心にする" name="checkbox copy centers" /> + <check_box label="コピーを回転" name="checkbox copy rotates" /> <check_box label="土地を選択" name="radio select land" /> <check_box label="土地をならす" name="radio flatten" /> <check_box label="土地を隆起させる" name="radio raise" /> <check_box label="低地" name="radio lower" /> <check_box label="土地を滑らかにする" name="radio smooth" /> <check_box label="土地を荒らす" name="radio noise" /> - <check_box label="土地の状態を戻す" name="radio revert" /> + <check_box label="土地を元に戻す" name="radio revert" /> <combo_box name="combobox brush size"> <combo_item name="Small"> 小 </combo_item> <combo_item name="Medium"> - 中間 + 中 </combo_item> <combo_item name="Large"> 大 </combo_item> </combo_box> - <button label="適用する" label_selected="適用する" - name="button apply to selection" - tool_tip="選択した土地を修正します。" /> - <check_box label="所有者を表示" name="checkbox show owners" /> - <button label="全表示>>" name="button more" - tool_tip="アドバンス・オプション" /> - <button label="<<簡易" name="button less" - tool_tip="アドバンス・オプション" /> + <button label="選択対象に適用" label_selected="選択対象に適用" + name="button apply to selection" tool_tip="選択した土地を修正" /> + <check_box label="オーナーを表示" name="checkbox show owners" /> + <button label="全表示>>" name="button more" tool_tip="高度なオプション" /> + <button label="<<簡易" name="button less" tool_tip="高度なオプション" /> <tab_container name="Object Info Tabs"> <panel label="一般" name="General"> <text name="Name:"> - 名前: + 名前: </text> <text name="Description:"> - 説明: + 説明: </text> <text name="Creator:"> - 創作者: + クリエーター </text> <text name="Creator Name"> Thrax Linden </text> - <button label="プロファイル..." label_selected="プロファイル..." + <button label="プロフィール..." label_selected="プロフィール..." name="button creator profile" /> <text name="Owner:"> - 所有者: + オーナー: </text> <text name="Owner Name"> Thrax Linden </text> - <button label="プロファイル..." label_selected="プロファイル..." + <button label="プロフィール..." label_selected="プロフィール..." name="button owner profile" /> <text name="Group:"> - グループ: + グループ: </text> <text name="Group Name Proxy"> - The Lindens + Linden家 </text> <button label="設定..." label_selected="設定..." name="button set group" /> <text name="prim info"> - 1オブジェクト、1基本要素 + 1オブジェクト、1プリム </text> <text name="Permissions:"> - 許可: + 権限 </text> <text name="perm_modify"> - このオブジェクトを修正することができます。 + このオブジェクトは修正できます。 </text> - <check_box label="グループで共有" name="checkbox share with group" - tool_tip="グループメンバーに移動、修正、コピー、削除を許可します。" /> + <check_box label="グループ分担" name="checkbox share with group" + tool_tip="グループ・メンバーに対して移動、修正、コピー、削除を許可" /> <text name="text deed continued"> - 証書を作成して譲渡する... + 譲渡... </text> <text name="text deed"> - 譲渡する + 譲渡 </text> - <button label="証書を作成して譲渡する..." - label_selected="証書を作成して譲渡する..." name="button deed" + <button label="譲渡..." label_selected="譲渡..." name="button deed" tool_tip="グループ共有のオブジェクトは、グループ・オフィサーにより譲渡可能です。" /> - <check_box label="誰でも移動を許可" name="checkbox allow everyone move" /> - <check_box label="全てにコピーを許可" name="checkbox allow everyone copy" /> - <check_box label="売り出し" name="checkbox for sale" /> + <check_box label="誰に対しても移動を許可" name="checkbox allow everyone move" /> + <check_box label="誰に対してもコピーを許可" + name="checkbox allow everyone copy" /> + <check_box label="売り出し中" name="checkbox for sale" /> <text name="Price: L$"> - 価格: L$ + 料金:L$ </text> <radio_group name="sale type"> <radio_item name="Original"> @@ -166,26 +164,26 @@ </radio_item> </radio_group> <text name="Next owner can:"> - 次の所有者が可能: + 次のオーナーが実行できる操作: </text> - <check_box label="変更" name="checkbox next owner can modify" /> + <check_box label="修正" name="checkbox next owner can modify" /> <check_box label="コピー" name="checkbox next owner can copy" /> - <check_box label="転売/寄贈" name="checkbox next owner can transfer" /> + <check_box label="再販/プレゼント" name="checkbox next owner can transfer" /> <text name="label click action"> - 左クリックだった場合: + 左クリックすると: </text> <combo_box name="clickaction"> <combo_item name="Touch/grab(default)"> - 触る/掴む(デフォルト) + 触る/つかむ (デフォルト) </combo_item> <combo_item name="Sitonobject"> オブジェクトに座る </combo_item> <combo_item name="Buyobject"> - オブジエクトの購入 + オブジェクトを購入 </combo_item> <combo_item name="Payobject"> - オブジェクトの代金を払う + オブジェクトへの支払い </combo_item> <combo_item name="Open"> 開く @@ -204,42 +202,42 @@ E: </text> <text name="N:"> - N: + N: </text> <text name="F:"> F: </text> <text name="text modify info 1"> - このオブジェクトを修正することができます。 + このオブジェクトは修正できます。 </text> <text name="text modify info 2"> - これらのオブジェクトを修正することができます。 + これらのオブジェクトは修正できます。 </text> <text name="text modify info 3"> - このオブジェクトを修正することができません。 + このオブジェクトは修正できません。 </text> <text name="text modify info 4"> - これらのオブジェクトを修正することができません。 + これらのオブジェクトは修正できません。 </text> <text name="text modify warning"> - 許可を設定するには、オブジェクト全体を選択する必要があります。 + 権限を設定するには、オブジェクト全体を選択する必要があります。 </text> </panel> <panel label="オブジェクト" name="Object"> <text name="select_single"> - パラメーターを編集するには、一つの基本要素のみ選択してください。 + パラメーターを編集するには、基本要素を1つだけ選択してください。 </text> <text name="edit_object"> オブジェクトのパラメーターを編集: </text> - <check_box label="ロックされる" name="checkbox locked" - tool_tip="オブジェクトの移動または削除を防止します。構築中に意図しない編集を避けるために、しばしば有効です。" /> + <check_box label="ロック済み" name="checkbox locked" + tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。" /> <check_box label="物理" name="Physical Checkbox Ctrl" - tool_tip="重力によりオブジェクトが押され、影響を受けることを許可します。" /> - <check_box label="一時的" name="Temporary Checkbox Ctrl" + tool_tip="オブジェクトに対する重力の作用と影響を有効にする" /> + <check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="作成1分後にオブジェクトを削除" /> <check_box label="ファントム" name="Phantom Checkbox Ctrl" - tool_tip="オブジェクトが他のオブジェクト、またはアバターと衝突を回避させる。" /> + tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避" /> <text name="label position"> 位置(メートル) </text> @@ -247,7 +245,7 @@ <spinner label="Y" name="Pos Y" /> <spinner label="Z" name="Pos Z" /> <text name="label size"> - 規模(メートル) + サイズ(メートル) </text> <spinner label="X" name="Scale X" /> <spinner label="Y" name="Scale Y" /> @@ -285,7 +283,7 @@ </combo_item> </combo_box> <text name="label basetype"> - 建造物ブロックタイプ + 建造物ブロック・タイプ </text> <combo_box name="comboBaseType"> <combo_item name="Box"> @@ -311,12 +309,12 @@ </combo_item> </combo_box> <text name="text cut"> - パス・カット開始と終了 + パス・カットの始点と終点 </text> <spinner label="B" name="cut begin" /> <spinner label="E" name="cut end" /> <text name="text hollow"> - 中空の形 + 中空 </text> <text name="text skew"> 傾斜 @@ -339,7 +337,7 @@ </combo_item> </combo_box> <text name="text twist"> - 捻りの開始および終了 + ひねりの始まりと終わり </text> <spinner label="B" name="Twist Begin" /> <spinner label="E" name="Twist End" /> @@ -357,10 +355,10 @@ <spinner label="X" name="Shear X" /> <spinner label="Y" name="Shear Y" /> <text name="advanced_cut"> - プロファイルカット開始および終了 + プロフィール・カットの始点と終点 </text> <text name="advanced_dimple"> - さざなみのはじめと終わり + さざなみの始点と終点 </text> <spinner label="B" name="Path Limit Begin" /> <spinner label="E" name="Path Limit End" /> @@ -378,39 +376,39 @@ </panel> <panel label="特徴" name="Features"> <text name="select_single"> - 特徴を編集するには、一つの基本要素のみ選択してください。 + 特徴を編集するには、基本要素を1つだけ選択してください。 </text> <text name="edit_object"> オブジェクトの特徴を編集: </text> <check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" - tool_tip="Z軸についてオブジェクトが折れ曲がることを許可します。(クライアント側のみ)" /> + tool_tip="Z軸を中心とするオブジェクトの折れ曲がりを有効にする (クライアント側のみ)" /> <spinner label="柔軟性" name="FlexNumSections" /> <spinner label="重力" name="FlexGravity" /> <spinner label="ドラッグ" name="FlexFriction" /> <spinner label="風" name="FlexWind" /> <spinner label="緊張" name="FlexTension" /> - <spinner label="フォースX" name="FlexForceX" /> - <spinner label="フォースY" name="FlexForceY" /> - <spinner label="フォースZ" name="FlexForceZ" /> - <check_box label="軽い" name="Light Checkbox Ctrl" + <spinner label="X軸方向の力" name="FlexForceX" /> + <spinner label="Y軸方向の力" name="FlexForceY" /> + <spinner label="Z軸方向の力" name="FlexForceZ" /> + <check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光" /> <text name="label color"> 色 </text> <color_swatch label="" name="colorswatch" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <spinner label="強さ" name="Light Intensity" /> + tool_tip="カラー・ピッカーをクリックして開く" /> + <spinner label="輝度" name="Light Intensity" /> <spinner label="半径" name="Light Radius" /> <spinner label="弱まる" name="Light Falloff" /> </panel> <panel label="テクスチャー" name="Texture"> <texture_picker label="テクスチャー" name="texture control" - tool_tip="クリックして写真を選択してください。" /> + tool_tip="写真をクリックして選択" /> <color_swatch label="色" name="colorswatch" - tool_tip="クリックしてカラーピッカーを開けてください。" /> + tool_tip="カラー・ピッカーをクリックして開く" /> <text name="color trans"> - 透明度 % + 透過度 % </text> <check_box label="明るさ全開" name="checkbox fullbright" /> <text name="tex gen"> @@ -432,13 +430,13 @@ なし </combo_item> <combo_item name="Low"> - 低い + 低 </combo_item> <combo_item name="Medium"> - 中間 + 中 </combo_item> <combo_item name="High"> - 高い + 高 </combo_item> </combo_box> <text name="label bumpiness"> @@ -458,13 +456,13 @@ 木目調 </combo_item> <combo_item name="bark"> - 樹皮 + 木の皮 </combo_item> <combo_item name="bricks"> レンガ </combo_item> <combo_item name="checker"> - チェック + チェッカー </combo_item> <combo_item name="concrete"> コンクリート @@ -482,7 +480,7 @@ 砂利 </combo_item> <combo_item name="petridish"> - ペトリディッシュ + ペトリ </combo_item> <combo_item name="siding"> 羽目板 @@ -497,57 +495,60 @@ 吸い込み </combo_item> <combo_item name="weave"> - 織り + 織目 </combo_item> </combo_box> <text name="tex scale"> - フェース毎に繰り返す + 顔ごとに繰り返す </text> <spinner label="水平(U)" name="TexScaleU" /> <check_box label="反転" name="checkbox flip s" /> - <spinner label="垂直(V)" name="TexScaleV" /> + <spinner label="垂直 (V)" name="TexScaleV" /> <check_box label="反転" name="checkbox flip t" /> <text name="tex rotate"> 回転(度) </text> <text name="string repeats per meter"> - メートル毎に繰り返す + メートルごとに繰り返す </text> <text name="string repeats per face"> - フェース毎に繰り返す + 顔ごとに繰り返す </text> <text name="rpt"> - メートル毎に繰り返す + メートルごとに繰り返す </text> <button label="適用" label_selected="適用" name="button apply" /> <text name="tex offset"> ずれ </text> <spinner label="水平(U)" name="TexOffsetU" /> - <spinner label="垂直(V)" name="TexOffsetV" /> + <spinner label="垂直 (V)" name="TexOffsetV" /> <text name="textbox autofix"> - メディア・テクスチャーを揃えてください。(はじめに読み込む必要があります) + メディア・テクスチャーを揃える +(最初にロードすること) </text> <button label="揃える" label_selected="揃える" name="button align" /> </panel> - <panel label="内容" name="Contents"> - <button label="新しいスクリプト" label_selected="新しいスクリプト" - name="button new script" /> + <panel label="コンテンツ" name="Contents"> + <button label="新しいスクリプト..." + label_selected="新しいスクリプト..." name="button new script" /> </panel> </tab_container> <panel name="land info panel"> <text name="label_area_price"> - 価格:[AREA]平方メートルあたりL$[PRICE] + 価格:[AREA]平方メートルあたりL$[PRICE] </text> <text name="label_area"> - エリア:[AREA]平方メートル + 面積:[AREA]平方メートル </text> <button label="土地を購入..." label_selected="土地を購入..." name="button buy land" /> - <button label="土地を捨てる..." label_selected="土地を捨てる..." + <button label="土地を放棄..." label_selected="土地を放棄..." name="button abandon land" /> - <button label="再分割" label_selected="再分割" name="button subdivide land" /> - <button label="参加する" label_selected="参加する" name="button join land" /> - <button label="土地情報" label_selected="土地情報" name="button about land" /> + <button label="再分割..." label_selected="再分割..." name="button subdivide land" /> + <button label="参加する..." label_selected="参加する..." + name="button join land" /> + <button label="土地情報..." label_selected="土地情報..." + name="button about land" /> </panel> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_top_objects.xml b/linden/indra/newview/skins/xui/ja/floater_top_objects.xml index 9a25562..879e2d8 100644 --- a/linden/indra/newview/skins/xui/ja/floater_top_objects.xml +++ b/linden/indra/newview/skins/xui/ja/floater_top_objects.xml @@ -1,36 +1,36 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="top_objects" title="ローディング..."> +<floater name="top_objects" title="ロード中..."> <text name="title_text"> - ローディング... + ロード中... </text> <scroll_list name="objects_list"> - <column label="Score" name="score" /> - <column label="Name" name="name" /> - <column label="Owner" name="owner" /> - <column label="Location" name="location" /> + <column label="数" name="score" /> + <column label="名前" name="name" /> + <column label="所有者" name="owner" /> + <column label="ロケーション" name="location" /> </scroll_list> <text name="id_text"> - オブジェクト ID:: + 物体ID: </text> - <button label="ビーコンを表示" name="show_beacon_btn" /> + <button label="標識を表示" name="show_beacon_btn" /> <text name="obj_name_text"> - オブジェクト名: + 物体名: </text> - <button label="フィルター" name="filter_object_btn" /> + <button label="フィルタ" name="filter_object_btn" /> <text name="owner_name_text"> 所有者名: </text> - <button label="フィルター" name="filter_owner_btn" /> - <button label="選択されたものを戻す" name="return_selected_btn" /> - <button label="すべて戻す" name="return_all_btn" /> - <button label="選択したものを無効にする" name="disable_selected_btn" /> - <button label="全て無効にする" name="disable_all_btn" /> - <button label="リフレッシュ" name="refresh_btn" /> + <button label="フィルタ" name="filter_owner_btn" /> + <button label="選択内容を返却" name="return_selected_btn" /> + <button label="すべて返却" name="return_all_btn" /> + <button label="選択内容を無効化" name="disable_selected_btn" /> + <button label="すべて無効化" name="disable_all_btn" /> + <button label="更新" name="refresh_btn" /> <text name="top_scripts_title"> - 上部スクリプト + トップ・スクリプト </text> <text name="top_scripts_text"> - [COUNT]スクリプトは全体で[TIME]分かかります + [COUNT]スクリプト全体の実行時間は[TIME]ミリ秒。 </text> <text name="scripts_score_label"> 時間 @@ -39,12 +39,12 @@ 上部コライダー </text> <text name="top_colliders_text"> - 上部[COUNT]のオブジェクトは、多くの潜在的な衝突を経験しています。 + 上位[COUNT]個の物体は多くの衝突可能性があります。 </text> <text name="colliders_score_label"> - 得点 + 数 </text> <text name="none_descriptor"> - 何も見つかりませんでした + 何も見つかりませんでした。 </text> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_tos.xml b/linden/indra/newview/skins/xui/ja/floater_tos.xml index 1ceb1c4..ee01a2b 100644 --- a/linden/indra/newview/skins/xui/ja/floater_tos.xml +++ b/linden/indra/newview/skins/xui/ja/floater_tos.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=" "> - <button label="継続" label_selected="継続" name="Continue" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="続行" label_selected="続行" name="Continue" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <radio_group name="tos_agreement"> <radio_item name="radio_disagree"> - サービス規約に同意しません + 利用規約に同意しません </radio_item> <radio_item name="radio_agree"> - サービス規約に同意します + 利用規約に同意します </radio_item> </radio_group> <text name="tos_title"> - Terms of Service Agreement + 利用規約 </text> <text name="tos_heading"> - 注意深く次のTerms of Serviceを読んでください。Second Lifeにロクインを続ける場合には、 -この同意を受け入れる必要があります。 + 以下の利用規約を注意深くお読みください。 SecondLifeへログインするには、 +規約に同意しなければなりません。 </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml b/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml index 044e4a6..8286d29 100644 --- a/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml +++ b/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=" "> <button label="保存" label_selected="保存" name="Save" /> - <button label="取消" label_selected="取消" name="Cancel" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> <text type="string" length="1" name="Save item as:"> - 別名で保存: + アイテムを別名で保存: </text> <line_editor name="name ed"> - 新しい[DESC] + 新規[DESC] </line_editor> </floater> diff --git a/linden/indra/newview/skins/xui/ja/floater_world_map.xml b/linden/indra/newview/skins/xui/ja/floater_world_map.xml index 7977123..0b3f6e4 100644 --- a/linden/indra/newview/skins/xui/ja/floater_world_map.xml +++ b/linden/indra/newview/skins/xui/ja/floater_world_map.xml @@ -2,10 +2,10 @@ <floater name="worldmap" title="世界地図"> <tab_container name="maptab"> <panel label="オブジェクト" name="objects_mapview" /> - <panel label="土地" name="terrain_mapview" /> + <panel label="地形" name="terrain_mapview" /> </tab_container> <text name="land_for_sale_label"> - 土地の売り出し + 売り出し中の土地 </text> <text name="auction_label"> オークション @@ -16,10 +16,10 @@ <text name="home_label"> ホーム </text> - <button label="ホームに移動" label_selected="ホームに移動" name="Go Home" - tool_tip="ホームにテレポート" /> + <button label="ホームへ" label_selected="ホームへ" name="Go Home" + tool_tip="自分のホームにテレポート" /> <text name="classifieds_label"> - 分類 + クラシファイド広告 </text> <check_box label=" " name="class_chk" /> <text name="person_label"> @@ -35,11 +35,11 @@ </text> <check_box label=" " name="telehubchk" /> <text name="popular_label"> - 評判がいい + 人気 </text> <check_box label=" " name="popular_chk" /> <text name="land_for_sale_label2"> - 土地の売り出し + 売り出し中の土地 </text> <check_box label=" " name="land_for_sale_chk" /> <text name="events_label"> @@ -50,21 +50,21 @@ イベント(M) </text> <check_box label=" " name="event_mature_chk" /> - <combo_box label="私の友達" name="friend combo" tool_tip="Friend to Show on Map"> + <combo_box label="自分のフレンド" name="friend combo" + tool_tip="Friend to Show on Map"> <combo_item name="none_selected"> - 私の友達 + 自分のフレンド </combo_item> </combo_box> - <combo_box label="私のランドマーク" name="landmark combo" + <combo_box label="自分のランドマーク" name="landmark combo" tool_tip="Landmark to Show on Map"> <combo_item name="none_selected"> - 私のランドマーク + 自分のランドマーク </combo_item> </combo_box> - <line_editor name="location" tool_tip="地域名をタイプします。"> - 地域名で検索 - </line_editor> - <button label="検索" label_selected=">" name="DoSearch" tool_tip="地域検索" /> + <line_editor label="地域名で検索" name="location" + tool_tip="地域名を入力してください。" /> + <button label="検索" name="DoSearch" tool_tip="地域検索" /> <text name="search_label"> 検索結果: </text> @@ -73,20 +73,22 @@ <column label="" name="sim_name" /> </scroll_list> <text name="location_label"> - 位置: + ロケーション: </text> - <spinner name="spin x" tool_tip="地図上表示されるロケーションのX軸" /> - <spinner name="spin y" tool_tip="地図上表示されるロケーションのY軸" /> - <spinner name="spin z" tool_tip="地図上表示されるロケーションのZ軸" /> + <spinner name="spin x" tool_tip="地図上に表示される位置のX座標" /> + <spinner name="spin y" tool_tip="地図上に表示される位置のY座標" /> + <spinner name="spin z" tool_tip="地図上に表示される位置のZ座標" /> <button label="テレポート" label_selected="テレポート" name="Teleport" - tool_tip="選択ロケーションにテレポート" /> - <button label="宛先を表示" label_selected="宛先を表示" + tool_tip="選択されたロケーションにテレポート" /> + <button label="目的地を表示" label_selected="目的地を表示" name="Show Destination" - tool_tip="選択ロケーションを地図の中心にする" /> - <button label="消す" label_selected="消す" name="Clear" - tool_tip="トラッキングを停止します。" /> - <button label="自分の位置を表示" label_selected="自分の位置を表示" + tool_tip="選択したロケーションを地図の中心にする" /> + <button label="クリア" label_selected="クリア" name="Clear" + tool_tip="トラッキングを停止" /> + <button label="現在地を表示" label_selected="現在地を表示" name="Show My Location" tool_tip="あなたのアバターのロケーションを地図の中心にする" /> - <slider label="拡大" name="zoom slider" /> + <button label="SLURLをクリップボードにコピー" name="copy_slurl" + tool_tip="現在地をSLURLとしてコピーし、ウェブで使用" /> + <slider label="ズーム" name="zoom slider" /> </floater> diff --git a/linden/indra/newview/skins/xui/ja/menu_inventory.xml b/linden/indra/newview/skins/xui/ja/menu_inventory.xml index 03cf428..7c1d910 100644 --- a/linden/indra/newview/skins/xui/ja/menu_inventory.xml +++ b/linden/indra/newview/skins/xui/ja/menu_inventory.xml @@ -2,15 +2,16 @@ <menu name="Popup"> <menu_item_call label="購入" name="Task Buy" /> <menu_item_call label="開く" name="Task Open" /> - <menu_item_call label="遊ぶ" name="Task Play" /> - <menu_item_call label="土地" name="Task Properties" /> - <menu_item_call label="名前をつけ直す" name="Task Rename" /> + <menu_item_call label="再生" name="Task Play" /> + <menu_item_call label="プロパティ" name="Task Properties" /> + <menu_item_call label="名前の変更" name="Task Rename" /> <menu_item_call label="削除" name="Task Remove" /> <menu_item_call label="ゴミ箱を空にする" name="Empty Trash" /> - <menu_item_call label="新しいフォルダー" name="New Folder" /> + <menu_item_call label="遺失物フォルダを空にする" name="Empty Lost And Found" /> + <menu_item_call label="新しいフォルダ" name="New Folder" /> <menu_item_call label="新しいスクリプト" name="New Script" /> <menu_item_call label="新しいノート" name="New Note" /> - <menu_item_call label="新しいジェスチャ" name="New Gesture" /> + <menu_item_call label="新しいジェスチャー" name="New Gesture" /> <menu name="New Clothes"> <menu_item_call label="新しいシャツ" name="New Shirt" /> <menu_item_call label="新しいズボン" name="New Pants" /> @@ -24,44 +25,42 @@ </menu> <menu name="New Body Parts"> <menu_item_call label="新しい形" name="New Shape" /> - <menu_item_call label="新しい皮膚" name="New Skin" /> + <menu_item_call label="新しいスキン" name="New Skin" /> <menu_item_call label="新しい髪" name="New Hair" /> <menu_item_call label="新しい眼" name="New Eyes" /> </menu> <menu_item_call label="開く" name="Landmark Open" /> <menu_item_call label="開く" name="Animation Open" /> <menu_item_call label="開く" name="Sound Open" /> - <menu_item_call label="アイテムを取り除く。" name="Purge Item" /> + <menu_item_call label="アイテムを除外" name="Purge Item" /> <menu_item_call label="アイテムを復元" name="Restore Item" /> <menu_item_call label="開く" name="Open" /> - <menu_item_call label="土地" name="Properties" /> - <menu_item_call label="名前をつけ直す" name="Rename" /> + <menu_item_call label="プロパティ" name="Properties" /> + <menu_item_call label="名前の変更" name="Rename" /> <menu_item_call label="資産UUIDをコピー" name="Copy Asset UUID" /> <menu_item_call label="コピー" name="Copy" /> <menu_item_call label="貼り付け" name="Paste" /> <menu_item_call label="削除" name="Delete" /> <menu_item_call label="服装に追加" name="Add To Outfit" /> - <menu_item_call label="着替える" name="Replace Outfit" /> + <menu_item_call label="服装を置換" name="Replace Outfit" /> <menu_item_call label="アイテムを取り外す" name="Take Off Items" /> - <menu_item_call label="フォルダー内のオンラインの連絡先にIM" - name="IM Online Contacts In Folder" /> - <menu_item_call label="フォルダー内の全ての連絡先にIM" - name="IM All Contacts In Folder" /> - <menu_item_call label="遊ぶ" name="Sound Play" /> - <menu_item_call label="ランドマークにテレポートする" name="Teleport To Landmark" /> - <menu_item_call label="世界でプレイ" name="Animation Play" /> - <menu_item_call label="ローカルでプレイ" name="Animation Audition" /> + <menu_item_call label="会議チャット開始" name="Conference Chat Folder" /> + <menu_item_call label="再生" name="Sound Play" /> + <menu_item_call label="ランドマークにテレポート" name="Teleport To Landmark" /> + <menu_item_call label="世界で再生" name="Animation Play" /> + <menu_item_call label="ローカルに再生" name="Animation Audition" /> <menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message" /> - <menu_item_call label="テレポートを提供する..." name="Offer Teleport..." /> - <menu_item_call label="有効にする" name="Activate" /> - <menu_item_call label="アクテイベートしない" name="Deactivate" /> + <menu_item_call label="テレポートを贈る..." name="Offer Teleport..." /> + <menu_item_call label="会議チャット開始" name="Conference Chat" /> + <menu_item_call label="アクティブ" name="Activate" /> + <menu_item_call label="非アクティブ" name="Deactivate" /> <menu_item_call label="自分から取り外す" name="Detach From Yourself" /> - <menu_item_call label="着る" name="Object Wear" /> + <menu_item_call label="装着" name="Object Wear" /> <menu label="添付先" name="Attach To" /> <menu label="HUDに添付" name="Attach To HUD" /> - <menu_item_call label="着る" name="Wearable Wear" /> + <menu_item_call label="装着" name="Wearable Wear" /> <menu_item_call label="編集" name="Wearable Edit" /> - <menu_item_call label="取り除く" name="Take Off" /> + <menu_item_call label="取り外す" name="Take Off" /> <menu_item_call label="--オプションなし--" name="--no options--" /> </menu> diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml index 385db68..0b84492 100644 --- a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml +++ b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml @@ -1,15 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <pie_menu name="Avatar Pie"> - <menu_item_call label="プロファイル..." name="Profile..." /> + <menu_item_call label="プロフィール..." name="Profile..." /> <menu_item_call label="ミュート" name="Avatar Mute" /> - <menu_item_call label="行く" name="Go To" /> + <menu_item_call label="移動先" name="Go To" /> + <menu_item_call label="評価" name="Rate" /> <menu_item_call label="フレンドを追加" name="Add Friend" /> <menu_item_call label="支払い..." name="Pay..." /> - <pie_menu label="さらに>" name="More >"> - <menu_item_call label="凍結" name="Freeze..." /> - <menu_item_call label="カードをあげる" name="Give Card" /> - <menu_item_call label="追放する" name="Eject..." /> - <menu_item_call label="Debug..." name="Debug..." /> + <pie_menu label="詳細>" name="More >"> + <menu_item_call label="フリーズ..." name="Freeze..." /> + <menu_item_call label="カードを贈る" name="Give Card" /> + <menu_item_call label="追放..." name="Eject..." /> + <menu_item_call label="デバッグ..." name="Debug..." /> + <menu_item_call label="検査" name="Object Inspect" /> </pie_menu> - <menu_item_call label="IMを送信" name="Send IM..." /> + <menu_item_call label="IMを送信..." name="Send IM..." /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_land.xml b/linden/indra/newview/skins/xui/ja/menu_pie_land.xml index 8b9a527..8e9c571 100644 --- a/linden/indra/newview/skins/xui/ja/menu_pie_land.xml +++ b/linden/indra/newview/skins/xui/ja/menu_pie_land.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <pie_menu name="Land Pie"> - <menu_item_call label="土地情報" name="About Land..." /> - <menu_item_call label="生成" name="Create" /> - <menu_item_call label="ここへ行く" name="Go Here" /> + <menu_item_call label="土地情報..." name="About Land..." /> + <menu_item_call label="作成" name="Create" /> + <menu_item_call label="ここへ来る" name="Go Here" /> <menu_item_call label="ここに座る" name="Sit Here" /> <menu_item_call label="パスを購入..." name="Land Buy Pass" /> - <menu_item_call label="土地を編集" name="Edit Terrain" /> + <menu_item_call label="地形を編集" name="Edit Terrain" /> <menu_item_call label="土地を購入..." name="Land Buy" /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml index 883a79b..64a8190 100644 --- a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml +++ b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml @@ -1,23 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <pie_menu name="Object Pie"> <menu_item_call label="開く" name="Open" /> - <menu_item_call label="生成" name="Create" /> + <menu_item_call label="作成" name="Create" /> <menu_item_call label="触る" name="Object Touch" /> <menu_item_call label="ここに座る" name="Object Sit" /> - <menu_item_call label="とる" name="Pie Object Take" /> + <menu_item_call label="取る" name="Pie Object Take" /> <menu_item_call label="支払い..." name="Pay..." /> - <pie_menu label="さらに>" name="More >"> + <pie_menu label="詳細>" name="More >"> <menu_item_call label="削除" name="Delete" /> - <menu_item_call label="着る" name="Wear" /> - <menu_item_call label="コピーをとる" name="Take Copy" /> + <menu_item_call label="装着" name="Wear" /> + <menu_item_call label="コピーを取る" name="Take Copy" /> <pie_menu label="HUDを添付>" name="Object Attach HUD" /> <pie_menu label="添付>" name="Object Attach" /> - <menu_item_call label="戻す..." name="Return..." /> - <pie_menu label="さらに>" name="Rate Menu"> - <menu_item_call label="嫌がらせの報告" name="Report Abuse..." /> + <menu_item_call label="返却..." name="Return..." /> + <pie_menu label="詳細>" name="Rate Menu"> + <menu_item_call label="オーナーを評価..." name="Rate Owner..." /> + <menu_item_call label="嫌がらせの報告..." name="Report Abuse..." /> + <menu_item_call label="クリエーターを評価..." name="Rate Creator..." /> <menu_item_call label="ミュート" name="Object Mute" /> + <menu_item_call label="検査" name="Object Inspect" /> </pie_menu> - <menu_item_call label="購入" name="Buy..." /> + <menu_item_call label="購入..." name="Buy..." /> </pie_menu> - <menu_item_call label="編集" name="Edit..." /> + <menu_item_call label="編集..." name="Edit..." /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_self.xml b/linden/indra/newview/skins/xui/ja/menu_pie_self.xml index d6c3a73..8ffa8bb 100644 --- a/linden/indra/newview/skins/xui/ja/menu_pie_self.xml +++ b/linden/indra/newview/skins/xui/ja/menu_pie_self.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <pie_menu name="Self Pie"> - <menu_item_call label="プロファイル..." name="Profile..." /> - <menu_item_call label="グループ" name="Groups..." /> - <menu_item_call label="行く" name="Go..." /> + <menu_item_call label="プロフィール..." name="Profile..." /> + <menu_item_call label="グループ..." name="Groups..." /> + <menu_item_call label="移動..." name="Go..." /> <menu_item_call label="立ち上がる" name="Stand Up" /> - <menu_item_call label="フレンド" name="Friends..." /> + <menu_item_call label="フレンド..." name="Friends..." /> <menu_item_call label="ジェスチャー…" name="Gestures..." /> - <pie_menu label="取り外す" name="Take Off >"> + <pie_menu label="取り外す>" name="Take Off >"> <pie_menu label="服>" name="Clothes >"> <menu_item_call label="シャツ" name="Shirt" /> <menu_item_call label="ズボン" name="Pants" /> @@ -14,16 +14,16 @@ <menu_item_call label="靴下" name="Socks" /> <menu_item_call label="ジャケット" name="Jacket" /> <menu_item_call label="手袋" name="Gloves" /> - <pie_menu label="さらに>" name="More >"> - <menu_item_call label="下着" name="Self Undershirt" /> - <menu_item_call label="全ての服" name="All Clothes" /> - <menu_item_call label="パンツ" name="Self Underpants" /> + <pie_menu label="詳細>" name="More >"> + <menu_item_call label="(下着の)シャツ" name="Self Undershirt" /> + <menu_item_call label="すべての服" name="All Clothes" /> + <menu_item_call label="(下着の)パンツ" name="Self Underpants" /> </pie_menu> <menu_item_call label="スカート" name="Skirt" /> </pie_menu> <pie_menu label="HUD>" name="Object Detach HUD" /> <pie_menu label="取り外す>" name="Object Detach" /> - <menu_item_call label="全てを取り外す" name="Detach All" /> + <menu_item_call label="すべて取り外す" name="Detach All" /> </pie_menu> - <menu_item_call label="容姿" name="Appearance..." /> + <menu_item_call label="容姿..." name="Appearance..." /> </pie_menu> diff --git a/linden/indra/newview/skins/xui/ja/menu_viewer.xml b/linden/indra/newview/skins/xui/ja/menu_viewer.xml index 0dac342..137fea8 100644 --- a/linden/indra/newview/skins/xui/ja/menu_viewer.xml +++ b/linden/indra/newview/skins/xui/ja/menu_viewer.xml @@ -2,24 +2,24 @@ <menu_bar name="Main Menu"> <menu label="ファイル" name="File"> <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> - <menu_item_call label="画像をアップロード(L$[COST])" name="Upload Image" /> - <menu_item_call label="サウンドをアップロード(L$[COST])" name="Upload Sound" /> - <menu_item_call label="アニメーションをアップロード(L$[COST])" + <menu_item_call label="画像をアップロード(L$[COST])..." name="Upload Image" /> + <menu_item_call label="サウンドをアップロード(L$[COST])..." name="Upload Sound" /> + <menu_item_call label="アニメーションをアップロード(L$[COST])..." name="Upload Animation" /> <menu_item_call label="大量アップロード(L$[COST]/ファイル)…" name="Bulk Upload" /> <menu_item_separator label="-----------" name="separator" /> <menu_item_call label="ウィンドウを閉じる" name="Close Window" /> <menu_item_separator label="-----------" name="separator2" /> - <menu_item_call label="テクスチャーを保存" name="Save Texture As..." /> + <menu_item_call label="テクスチャーを別名で保存..." name="Save Texture As..." /> <menu_item_separator label="-----------" name="separator3" /> <menu_item_call label="スナップショットを取る" name="Take Snapshot" /> <menu_item_call label="スナップショットをディスクに保存" name="Snapshot to Disk" /> <menu_item_separator label="-----------" name="separator4" /> - <menu_item_call label="ディスクに動画を開始/停止" name="Start/Stop Movie to Disk" /> - <menu label="ウィンドウのサイズを指定する" name="Set Window Size"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu_item_call label="ディスクへの録画を開始/停止" + name="Start/Stop Movie to Disk" /> + <menu label="ウィンドウ・サイズを設定" name="Set Window Size"> <menu_item_call label="320x240" name="320x240" /> <menu_item_call label="640x480" name="640x480" /> <menu_item_call label="800x600" name="800x600" /> @@ -31,7 +31,6 @@ <menu_item_call label="終了" name="Quit" /> </menu> <menu label="編集" name="Edit"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> <menu_item_call label="元に戻す" name="Undo" /> <menu_item_call label="やり直し" name="Redo" /> <menu_item_separator label="-----------" name="separator" /> @@ -42,94 +41,88 @@ <menu_item_separator label="-----------" name="separator2" /> <menu_item_call label="検索..." name="Search..." /> <menu_item_separator label="-----------" name="separator3" /> - <menu_item_call label="全てを選択" name="Select All" /> - <menu_item_call label="選定しない" name="Deselect" /> + <menu_item_call label="すべてを選択" name="Select All" /> + <menu_item_call label="選択解除" name="Deselect" /> <menu_item_separator label="-----------" name="separator4" /> <menu_item_call label="複製" name="Duplicate" /> <menu_item_separator label="-----------" name="separator5" /> - <menu label="オブジェクトの装着" name="Attach Object" /> + <menu label="オブジェクトを装着" name="Attach Object" /> <menu label="オブジェクトを取り外す" name="Detach Object" /> - <menu label="洋服を脱ぐ" name="Take Off Clothing"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu label="服を脱ぐ" name="Take Off Clothing"> <menu_item_call label="シャツ" name="Shirt" /> <menu_item_call label="ズボン" name="Pants" /> <menu_item_call label="靴" name="Shoes" /> <menu_item_call label="靴下" name="Socks" /> <menu_item_call label="ジャケット" name="Jacket" /> <menu_item_call label="手袋" name="Gloves" /> - <menu_item_call label="下着" name="Menu Undershirt" /> - <menu_item_call label="パンツ" name="Menu Underpants" /> + <menu_item_call label="(下着の)シャツ" name="Menu Undershirt" /> + <menu_item_call label="(下着の)パンツ" name="Menu Underpants" /> <menu_item_call label="スカート" name="Skirt" /> - <menu_item_call label="全ての服" name="All Clothes" /> + <menu_item_call label="すべての服" name="All Clothes" /> </menu> <menu_item_separator label="-----------" name="separator6" /> <menu_item_call label="ジェスチャー…" name="Gestures..." /> - <menu_item_call label="プロファイル..." name="Profile..." /> - <menu_item_call label="容姿" name="Appearance..." /> + <menu_item_call label="プロフィール..." name="Profile..." /> + <menu_item_call label="容姿..." name="Appearance..." /> <menu_item_separator label="-----------" name="separator7" /> - <menu_item_check label="フレンド" name="Friends..." /> - <menu_item_call label="グループ" name="Groups..." /> + <menu_item_check label="フレンド..." name="Friends..." /> + <menu_item_call label="グループ..." name="Groups..." /> <menu_item_separator label="-----------" name="separator8" /> - <menu_item_call label="好み..." name="Preferences..." /> + <menu_item_call label="環境設定..." name="Preferences..." /> </menu> <menu label="ビュー" name="View"> <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> <menu_item_call label="マウスルック" name="Mouselook" /> - <menu_item_check label="立てる" name="Build" /> + <menu_item_check label="建造" name="Build" /> <menu_item_call label="表示をリセット" name="Reset View" /> - <menu_item_call label="最後のチャットの閲覧" name="Look at Last Chatter" /> + <menu_item_call label="最後のチャットを閲覧" name="Look at Last Chatter" /> <menu_item_separator label="-----------" name="separator" /> <menu_item_check label="ツールバー" name="Toolbar" /> - <menu_item_check label="チャットの履歴" name="Chat History" /> + <menu_item_check label="チャット履歴" name="Chat History" /> <menu_item_check label="インスタント・メッセージ" name="Instant Message" /> - <menu_item_call label="在庫目録" name="Inventory" /> + <menu_item_call label="持ち物" name="Inventory" /> <menu_item_check label="リストをミュート" name="Mute List" /> <menu_item_separator label="-----------" name="separator2" /> - <menu_item_check label="カメラ制御" name="Camera Controls" /> - <menu_item_check label="移動制御" name="Movement Controls" /> + <menu_item_check label="カメラ・コントロール" name="Camera Controls" /> + <menu_item_check label="移動コントロール" name="Movement Controls" /> <menu_item_check label="世界地図" name="World Map" /> - <menu_item_check label="小さい地図" name="Mini-Map" /> + <menu_item_check label="ミニマップ" name="Mini-Map" /> <menu_item_separator label="-----------" name="separator3" /> <menu_item_check label="統計バー" name="Statistics Bar" /> <menu_item_check label="土地境界線" name="Property Lines" /> - <menu_item_check label="土地所有者" name="Land Owners" /> + <menu_item_check label="土地オーナー" name="Land Owners" /> <menu_item_separator label="-----------" name="separator4" /> - <menu label="ホバー・ティップ" name="Hover Tips"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu label="ホバリング・ヒント" name="Hover Tips"> <menu_item_check label="ヒントを表示" name="Show Tips" /> <menu_item_separator label="-----------" name="separator" /> - <menu_item_check label="土地情報" name="Land Tips" /> - <menu_item_check label="全てのオブジェクトに関する情報" + <menu_item_check label="土地のヒント" name="Land Tips" /> + <menu_item_check label="すべてのオブジェクトに関するヒント" name="Tips On All Objects" /> </menu> - <menu_item_check label="Altは、物理を表示" name="Alt Shows Physical" /> - <menu_item_check label="トランスパレントをハイライト" name="Highlight Transparent" /> - <menu label="標識" name="Beacons"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> - <menu_item_check label="スクリプトを含むオブジェクト" name="Scripted Objects" /> + <menu_item_check label="Alt キー:オブジェクト表示" name="Alt Shows Physical" /> + <menu_item_check label="透明オブジェクトを強調表示" name="Highlight Transparent" /> + <menu label="ビーコン" name="Beacons"> + <menu_item_check label="スクリプト・オブジェクト" name="Scripted Objects" /> <menu_item_check label="物理的オブジェクト" name="Physical Objects" /> <menu_item_check label="音源" name="Sound Sources" /> <menu_item_check label="パーティクル源" name="Particle Sources" /> <menu_item_separator label="-----------" name="separator" /> <menu_item_check label="パーティクルを隠す" name="Hide Particles" /> </menu> - <menu_item_check label="HUD添付物を表示する" name="Show HUD Attachments" /> + <menu_item_check label="HUD添付物を表示" name="Show HUD Attachments" /> <menu_item_separator label="-----------" name="separator5" /> <menu_item_call label="拡大" name="Zoom In" /> - <menu_item_call label="デフォルトの拡大" name="Zoom Default" /> + <menu_item_call label="デフォルトを拡大" name="Zoom Default" /> <menu_item_call label="縮小" name="Zoom Out" /> <menu_item_separator label="-----------" name="separator6" /> - <menu label="その他" name="More"> - <menu_item_call label="フル画面をトグルする" name="Toggle Fullscreen" /> - <menu_item_call label="UI規模をデフォルトに設定" name="Set UI Size to Default" /> - </menu> + <menu_item_call label="[全画面表示]" name="Toggle Fullscreen" /> + <menu_item_call label="UIサイズをデフォルトに設定" name="Set UI Size to Default" /> </menu> <menu label="世界" name="World"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> <menu_item_call label="チャット" name="Chat" /> <menu_item_call label="ジェスチャーの開始" name="Start Gesture" /> <menu_item_check label="常に走る" name="Always Run" /> - <menu_item_check label="飛ぶ" name="Fly" /> + <menu_item_check label="飛行" name="Fly" /> <menu_item_separator label="-----------" name="separator" /> <menu_item_call label="ここにランドマークを作成" name="Create Landmark Here" /> <menu_item_call label="ホームをここに設定" name="Set Home to Here" /> @@ -137,19 +130,18 @@ <menu_item_call label="ホームにテレポート" name="Teleport Home" /> <menu_item_separator label="-----------" name="separator3" /> <menu_item_call label="退席中に設定" name="Set Away" /> - <menu_item_call label="取り込み中に設定" name="Set Busy" /> + <menu_item_call label="ビジーに設定" name="Set Busy" /> <menu_item_separator label="-----------" name="separator4" /> - <menu_item_call label="口座履歴" name="Account History..." /> - <menu_item_call label="自分の口座の管理" name="Manage My Account..." /> - <menu_item_call label="L$の購入" name="Buy and Sell L$..." /> + <menu_item_call label="口座履歴..." name="Account History..." /> + <menu_item_call label="自分の口座の管理..." name="Manage My Account..." /> + <menu_item_call label="L$(リンデン・ドル)を購入" name="Buy and Sell L$..." /> <menu_item_separator label="-----------" name="separator5" /> - <menu_item_call label="自分の土地" name="My Land..." /> - <menu_item_call label="土地情報" name="About Land..." /> + <menu_item_call label="自分の土地..." name="My Land..." /> + <menu_item_call label="土地情報..." name="About Land..." /> <menu_item_call label="土地を購入..." name="Buy Land..." /> - <menu_item_call label="地域/不動産" name="Region/Estate..." /> + <menu_item_call label="地域/不動産..." name="Region/Estate..." /> <menu_item_separator label="-----------" name="separator6" /> - <menu label="太陽を調節する" name="Force Sun"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu label="太陽を調整する" name="Force Sun"> <menu_item_call label="日の出" name="Sunrise" /> <menu_item_call label="正午" name="Noon" /> <menu_item_call label="日没" name="Sunset" /> @@ -158,14 +150,12 @@ <menu_item_call label="地域デフォルトに戻す" name="Revert to Region Default" /> </menu> </menu> - <menu label="ツールを選ぶ" name="Tools"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> - <menu label="ツールを選ぶ" name="Select Tool"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> + <menu label="ツール" name="Tools"> + <menu label="選択ツール" name="Select Tool"> <menu_item_call label="フォーカス" name="Focus" /> - <menu_item_call label="移動する" name="Move" /> + <menu_item_call label="移動" name="Move" /> <menu_item_call label="編集" name="Edit" /> - <menu_item_call label="生成" name="Create" /> + <menu_item_call label="作成" name="Create" /> <menu_item_call label="土地" name="Land" /> </menu> <menu_item_separator label="-----------" name="separator" /> @@ -177,58 +167,58 @@ <menu_item_check label="ライト半径一覧を表示" name="Show Light Radius for Selection" /> <menu_item_check label="選択ビームを表示" name="Show Selection Beam" /> <menu_item_separator label="-----------" name="separator2" /> - <menu_item_check label="グリッドにスナップする" name="Snap to Grid" /> - <menu_item_call label="オブジェクトXYをグリッドにスナップする" + <menu_item_check label="グリッドにスナップ" name="Snap to Grid" /> + <menu_item_call label="オブジェクトXYをグリッドにスナップ" name="Snap Object XY to Grid" /> - <menu_item_call label="グリッド用に選択を使用" name="Use Selection for Grid" /> - <menu_item_call label="グリッドのオプション" name="Grid Options..." /> + <menu_item_call label="グリッド用に[選択]を使用" name="Use Selection for Grid" /> + <menu_item_call label="グリッドのオプション..." name="Grid Options..." /> <menu_item_separator label="-----------" name="separator3" /> <menu_item_call label="リンク" name="Link" /> <menu_item_call label="リンクしない" name="Unlink" /> <menu_item_separator label="-----------" name="separator4" /> - <menu_item_call label="全てのアニメーションの停止" name="Stop All Animations" /> + <menu_item_call label="アニメーションをすべて停止" name="Stop All Animations" /> <menu_item_separator label="-----------" name="separator5" /> <menu_item_call label="選択をフォーカス" name="Focus on Selection" /> - <menu_item_call label="選択範囲をズーム" name="Zoom to Selection" /> + <menu_item_call label="選択範囲にズームイン" name="Zoom to Selection" /> <menu_item_call label="オブジェクトを購入" name="Menu Object Take" /> - <menu_item_call label="コピーをとる" name="Take Copy" /> - <menu_item_call label="持ち物にオブジェクトを戻して保存" + <menu_item_call label="コピーを取る" name="Take Copy" /> + <menu_item_call label="オブジェクトを持ち物に戻して保存" name="Save Object Back to My Inventory" /> <menu_item_call - label="オブジェクト・コンテンツにオブジェクトを戻して保存" + label="オブジェクトをオブジェクト・コンテンツに戻して保存" name="Save Object Back to Object Contents" /> <menu_item_separator label="-----------" name="separator6" /> - <menu_item_call label="スクリプト警告/エラー・ウィンドウの表示" + <menu_item_call label="スクリプト警告/エラー・ウィンドウを表示" name="Show Script Warning/Error Window" /> - <menu_item_call label="選択されたスクリプトを再編集" + <menu_item_call label="選択したスクリプトを再コンパイル" name="Recompile Scripts in Selection" /> - <menu_item_call label="選択されたスクリプトをリセット" + <menu_item_call label="選択したスクリプトをリセット" name="Reset Scripts in Selection" /> - <menu_item_call label="選択されたスクリプトを起動する" + <menu_item_call label="選択したスクリプトを起動する" name="Set Scripts to Running in Selection" /> - <menu_item_call label="選択されたスクリプトを起動しない" + <menu_item_call label="選択したスクリプトを起動しない" name="Set Scripts to Not Running in Selection" /> + <menu_item_separator label="-----------" name="separator6" /> + <menu_item_call label="バグの報告..." name="Report Bug..." /> </menu> <menu label="ヘルプ" name="Help"> - <tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" /> <menu_item_call label="Second Life ヘルプ" name="Second Life Help" /> - <menu_item_call label="知識ベース" name="Knowledge Base..." /> - <menu_item_call label="ライブ・ヘルプ" name="Live Help..." /> + <menu_item_call label="インワールド・ヘルプ:" name="In-World Help" /> + <menu_item_call label="追加ヘルプ" name="Additional Help" /> <menu_item_separator label="-----------" name="separator" /> - <menu_item_call label="オフィシャルLindenブログ" name="Official Linden Blog..." /> + <menu_item_call label="オフィシャルLindenブログ..." name="Official Linden Blog..." /> <menu_item_separator label="-----------" name="separator2" /> - <menu_item_call label="スクリプト・ガイド" name="Scripting Guide..." /> - <menu_item_call label="スクリプトWiki" name="Scripting Wiki..." /> + <menu_item_call label="スクリプト・ガイド..." name="Scripting Guide..." /> + <menu_item_call label="スクリプト・ポータル..." name="Scripting Portal..." /> <menu_item_separator label="-----------" name="separator3" /> - <menu_item_call label="今日のメッセージ" name="Message of the Day..." /> + <menu_item_call label="本日のメッセージ..." name="Message of the Day..." /> <menu_item_separator label="-----------" name="separator4" /> - <menu_item_call label="嫌がらせの報告" name="Report Abuse..." /> - <menu_item_call label="ぶつかる、押す、および当たる" + <menu_item_call label="嫌がらせの報告..." name="Report Abuse..." /> + <menu_item_call label="ぶつかる、押す、および当たる..." name="Bumps, Pushes &amp; Hits..." /> <menu_item_separator label="-----------" name="separator5" /> - <menu_item_call label="バグの報告" name="Report Bug..." /> - <menu_item_call label="ノートをリリース" name="Release Notes..." /> + <menu_item_call label="リリースノート..." name="Release Notes..." /> <menu_item_separator label="-----------" name="separator6" /> - <menu_item_call label="Second Lifeに関して" name="About Second Life..." /> + <menu_item_call label="Second Lifeについて" name="About Second Life..." /> </menu> </menu_bar> diff --git a/linden/indra/newview/skins/xui/ja/notify.xml b/linden/indra/newview/skins/xui/ja/notify.xml index 6c5253f..50273bf 100644 --- a/linden/indra/newview/skins/xui/ja/notify.xml +++ b/linden/indra/newview/skins/xui/ja/notify.xml @@ -22,87 +22,92 @@ </notify> <notify name="ReplacedMissingWearable"> <message name="message"> - 紛失した服/身体部位をデフォルトに置き換えます + 欠落している服/身体部位をデフォルトに置換します。 </message> </notify> <notify name="FriendOnline"> <message name="message"> - [FIRST][LAST]がオンラインになりました + [FIRST] [LAST]はオンラインです。 </message> </notify> <notify name="FriendOffline"> <message name="message"> - [FIRST][LAST]がオフラインになりました + [FIRST] [LAST]はオフラインです。 </message> </notify> <notify name="AddSelfFriend"> <message name="message"> - You cannot add yourself as a friend. + 自分自身をフレンドにはできません。 </message> </notify> <notify name="UploadingAuctionSnapshot"> <message name="message"> - ゲーム内とWebサイトのスナップショットをアップロードしています…(5分程度かかります) + インワールドとウェブ・サイトのスナップショットをアップロード中です... +(所要時間:約5分) </message> </notify> <notify name="UploadPayment"> <message name="message"> - You paid L$[AMOUNT] to upload. + アップロードに L$[AMOUNT] 支払いました。 </message> </notify> <notify name="UploadingSnapshot"> <message name="message"> - ゲーム内のスナップショットをアップロードしています…(1分程度かかります) + インワールドのスナップショットをアップロード中... +(所要時間:約1分) </message> </notify> <notify name="UploadWebSnapshotDone"> <message name="message"> - ウェブサイトのスナップショットのアップロード済み + Web site snapshot upload done. </message> </notify> <notify name="UploadSnapshotDone"> <message name="message"> - ゲーム内スナップショットのアップロード済み + インワールドでのスナップショットのアップロードが完了しました。 </message> </notify> <notify name="TerrainDownloaded"> <message name="message"> - Terrain.rawをダウンロード済み + raw地形がダウンロードされました </message> </notify> <notify name="InMaxGroups"> <message name="message"> - あなたの所属しているグループ数が上限に達しました。新たなグループを作成する前に、最低一つのグループから脱退する必要があります。 + あなたはすでに最大限の数のグループに属しています。 1つのグループから抜けないと新しいグループを作ることはできません。 </message> </notify> <notify name="GestureMissing"> <message name="message"> - ジェスチャーがデータベースにありません + ジェスチャーがデータベースにありません。 </message> </notify> <notify name="UnableToLoadGesture"> <message name="message"> - ジェスチャーを読み込むことができません。再度、試みてください。 + ジェスチャーをロードできません。 +もう一度試してください。 </message> </notify> <notify name="InventoryLoaded"> <message name="message"> - あなたの持ち物が読み込まれます。 + 持ち物がロードされました。 </message> </notify> <notify name="LandmarkMissing"> <message name="message"> - データベースにランドマークがありません + データベースにランドマークがありません。 </message> </notify> <notify name="UnableToLoadLandmark"> <message name="message"> - ランドマークを読み込むことができません。再度、試みてください。 + ランドマークをロードできません。 もう一度試してください。 </message> </notify> <notify name="CapsKeyOn"> <message name="message"> - あなたのCaps Lockキーがオンになっています。あなたの入力するパスワードに影響を与えるため、オフにすることを推奨します。 + コンピューターの Caps Lockキーが +有効になっています。パスワード入力に +影響するので解除しましょう。 </message> </notify> <notify name="NotecardMissing"> @@ -112,12 +117,13 @@ </notify> <notify name="NotecardNoPermissions"> <message name="message"> - ノートカード閲覧のための許可が不十分です。 + ノートカードを閲覧するには権限が不十分です。 </message> </notify> <notify name="UnableToLoadNotecard"> <message name="message"> - ノートカードを読み込むことができません。再度、試みてください。 + ノートカードをロードできません。 +もう一度試してください。 </message> </notify> <notify name="ScriptMissing"> @@ -127,112 +133,120 @@ </notify> <notify name="ScriptNoPermissions"> <message name="message"> - スクリプト閲覧のための許可が不十分です。 + スクリプトを閲覧するには権限が不十分です。 </message> </notify> <notify name="UnableToLoadScript"> <message name="message"> - スクリプトを読み込むことができません。再度、試みてください。 + スクリプトをロードできません。 もう一度試してください。 </message> </notify> <notify name="IncompleteInventory"> <message name="message"> - あなたが提供する完全なコンテンツは、まだローカルでは利用できません。しばらくしてから、再度、これらのアイテムを提供してください。 + あなたの提供するコンテンツは、この場所ではまだ +全部揃いません。 少ししてから、もう一度 +試してください。 </message> </notify> <notify name="CannotModifyProtectedCategories"> <message name="message"> - 保護されたカテゴリの修正はできません + 保護されたカテゴリーは修正できません。 </message> </notify> <notify name="CannotRemoveProtectedCategories"> <message name="message"> - 保護されたカテゴリの移動はできません + 保護されたカテゴリーは削除できません。 </message> </notify> <notify name="OfferedCard"> <message name="message"> - [FIRST][LAST]にコーリングカードをあげました。 + あなたは[FIRST] [LAST]にコーリング・カードを贈りました。 </message> </notify> <notify name="OfferedFriendship"> <message name="message"> - [FIRST][LAST]にフレンドシップを申し込みました。 + あなたは[FIRST] [LAST]にフレンドシップを贈りました。 </message> </notify> <notify name="UnableToBuyWhileDownloading"> <message name="message"> - オブジェクトのデータをダウンロードしている最中は、購入することができません。再度、試みてください。 + オブジェクトデータのダウンロード中は購入できません。 +もう一度試してください。 </message> </notify> <notify name="UnableToLinkWhileDownloading"> <message name="message"> - オブジェクト・データをダウンロード中は、リンクできません。再度、試みてください。 + オブジェクトデータのウンロード中はリンクできません。 +もう一度試してください。 </message> </notify> <notify name="CannotBuyObjectsFromDifferentOwners"> <message name="message"> - 同時に、異なった所有者のオブジェクトを購入することはできません。単一のオブジェクトを選択してください。 + 複数のオーナーから同時にオブジェクトを購入することはできません。 +単一のオブジェクトを選択してください。 </message> </notify> <notify name="ObjectNotForSale"> <message name="message"> - オブジェクトは販売対象ではありません + オブジェクトは販売対象ではありません。 </message> </notify> <notify name="EnteringGodMode"> <message name="message"> - レベル[LEVEL]の God Modeに入りました。 + レベル[LEVEL]のゴッド・モードに入ります </message> </notify> <notify name="LeavingGodMode"> <message name="message"> - レベル[LEVEL]のGod Modeを離脱します。 + レベル[LEVEL]のゴッド・モードを解除 </message> </notify> <notify name="CopyFailed"> <message name="message"> - あなたにはコピー許可がなかったため、コピーできませんでした。 + コピー権限がないため、コピーが失敗しました。 </message> </notify> <notify name="InventoryAccepted"> <message name="message"> - [NAME]は渡された持ち物を受け取りました。 + [NAME]は、持ち物の提供を受け入れました。 </message> </notify> <notify name="InventoryDeclined"> <message name="message"> - [NAME]は渡された持ち物を却下しました + [NAME]は、持ち物の提供を断りました。 </message> </notify> <notify name="ObjectMessage"> <message name="message"> - [NAME][MESSAGE] + [NAME]: [MESSAGE] </message> </notify> <notify name="CallingCardAccepted"> <message name="message"> - あなたのコーリングカードは受け取られました + コーリング・カードが受理されました。 </message> </notify> <notify name="CallingCardDeclined"> <message name="message"> - あなたのコーリングカードは却下されました + コーリング・カードが拒否されました。 </message> </notify> <notify name="TeleportToLandmark"> <message name="message"> - 今、あなたは、本土に到達しました 『[NAME]』と言うロケーションにテレポートするには、画面右下にある持ち物ボタンをクリックし、ランドマークフォルダーを選択してください。ランドマークをダブルクリックし、そこに行くためにテレポートをしてください。 + メインランドに到達しました。画面右下にある[持ち物]ボタンをクリックし、[ランドマーク]フォルダを選択すると、ロケーション[NAME]にテレポートすることができます。 +ランドマークをダブルクリックした後、[テレポート]をクリックして、そのロケーションに移動してください。 </message> </notify> <notify name="TeleportToPerson"> <message name="message"> - 今、あなたはメイン・ランドに到達しました。 住人の『[NAME]』と接触するのには、画面右下にある持ち物ボタンをクリックし、コーリング・カード・フォルダーを選択してください。カードをダブルクリックし、インスタント・メッセージをクリックし、メッセージを送信してください。 + メインランドに到着しました。画面右下にある[持ち物ボタン]をクリックし、[コーリング・カード]フォルダを選択すると、住人[NAME]とコンタクトできます。 +カードをダブルクリックした後、[インスタント・メッセージ]をクリックしてメッセージを送信してください。 </message> </notify> <notify name="CantSelectLandFromMultipleRegions"> <message name="message"> - サーバの境界を越えて土地を選択するこはできません。もっと小さな土地を選択してください。 + サーバーの境界を越えて土地を選択することできません。 +もっと小さな土地を選択してください。 </message> </notify> <notify name="GenerticNotify"> @@ -242,26 +256,26 @@ </notify> <notify name="GroupVote"> <message name="message"> - [NAME]は投票の申請をしています: + [NAME] は投票の申請をしています: [MESSAGE] </message> <option name="VoteNow"> - 今すぐ投票 + 今すぐ投票する </option> <option name="Later"> - 後ほど + あとで </option> </notify> <notify name="GroupElection"> <message name="message"> - [NAME]は選挙をはじめました: + [NAME] は選挙を始めました: [MESSAGE] </message> <option name="VoteNow"> - 今すぐ投票 + 今すぐ投票する </option> <option name="Later"> - 後ほど + あとで </option> </notify> <notify name="SystemMessage"> @@ -271,7 +285,7 @@ </notify> <notify name="EventNotification"> <message name="message"> - Event Notification: + イベント通知: [NAME] [DATE] @@ -280,126 +294,139 @@ テレポート </option> <option name="Description"> - 説明: + 説明 </option> <option name="Cancel"> - 取消 + 取り消し </option> </notify> <notify name="TransferObjectsHighlighted"> <message name="message"> - ハイライトされた全てのオブジェクトが、本区画の購入者に譲渡されます。 -譲渡される樹木や植物は、ハイライトされません。 + この区画上に存在するオブジェクトのうち、この区画の購入者に譲渡されるオブジェクトがすべて強調表示されます。 + + +*譲渡される樹木や植物は、強調表示されません。 </message> <option name="Done"> - 終了 + 完了 </option> </notify> <notify name="DeactivatedGesturesTrigger"> <message name="message"> - 同じトリガーでアクティベートされないジェスチャー: + 同じトリガーでアクティブにしないジェスチャー: [NAMES] </message> </notify> <notify name="InventoryNetworkCorruption"> <message name="message"> - ネットワークが不安定なため、持ち物を読み込むことができませんでした。これは、ネットワーク接続が悪いことを示しています。 + ネットワーク障害のため、持ち物を読み込むことができませんでした。 これは、ネットワーク接続に問題があることを示しています。 </message> </notify> <notify name="NoQuickTime"> <message name="message"> - Apple社のQuickTimeがあなたのシステムにインストールされていないようです。 -ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)で、QuickTime Playerをインストールしてください。 + Apple社のQuickTimeがシステムにインストールされていないと思われます。 +ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)にアクセスして、QuickTime Playerをインストールしてください。 </message> </notify> <notify name="OwnedObjectsReturned"> <message name="message"> - 選択された土地上にあった、あなた所有のオブジェクトは、あなたの持ち物に返却されました。 + 選択された土地の区画上にあったあなたのオブジェクトは +あなたの持ち物に返却されました。 </message> </notify> <notify name="OtherObjectsReturned"> <message name="message"> - 選択された土地上にあった、[FIRST][LAST]所有のオブジェクトは、彼/彼女の持ち物に返却されました。 + 選択されている土地の区画上にあった + [FIRST] [LAST]が所有するオブジェクトは +オーナーの持ち物に返却されました。 </message> </notify> <notify name="OtherObjectsReturned2"> <message name="message"> - 選択された土地上にあった、居住者『[NAME]』所有のオブジェクトは、所有者に返却されました。 + 選択された土地の区画上にあり、住人の +[NAME]の所有だったオブジェクトは +オーナーに返却されました。 </message> </notify> <notify name="GroupObjectsReturned"> <message name="message"> - 選択された土地上にあった、グループ[GROUPNAME]共有のオブジェクトは、それぞれの所有者の持ち物に返却されました。譲渡可能なオブジェクトは、以前の所有者に返却されました。グループに譲渡された譲渡不可能なオブジェクトは、削除されました。 + 選択されている区画上にあり、[GROUPNAME] というグループと共有だったオブジェクトは、オーナーの持ち物に返却されました。 +譲渡されていた譲渡可能なオブジェクトは、前のオーナーに返却されました。 +グループに譲渡されていた譲渡不可能なオブジェクトは、削除されました。 </message> </notify> <notify name="UnOwnedObjectsReturned"> <message name="message"> - 選択された土地上にあった、あなたが所有していないオブジェクトは、所有者に返却されました。 + 選択された土地の区画上にあり、あなたの所有で「なかった」オブジェクトは、本来のオーナーに返却されました。 </message> </notify> <notify name="NotSafe"> <message name="message"> - この土地はダメージが有効に設定されています。 (『安全ではない』) -怪我をする可能性があります。もし、あなたが死亡した場合は、あなたのホームに転送されます。 + この土地はダメージが有効(「安全ではない」)に設定されています。 +ケガをするかもしれません。 命を落とした場合は、ホームにテレポートされます。 </message> </notify> <notify name="NoFly"> <message name="message"> - この土地では、飛行が無効に設定されています。 (『飛行禁止』) -ここでは、飛行できません。 + この土地は飛行が無効(「飛行禁止」)に設定されています。 +ここで飛ぶことはできません。 </message> </notify> <notify name="PushRestricted"> <message name="message"> - 本土地は、『ll PushObject制限』が設定されています。土地のオーナー以外、ここで他者をプッシュすることができません。 + この土地は「llPushObjectを制限」です。 +土地所有者でない限り、ここで他人をプッシュすることはできません。 </message> </notify> <notify name="NoBuild"> <message name="message"> - この土地は建造無効に設定されています。(『建造不可』) -ここでは、オブジェクトを形成することはできません。 + この土地は建造無効(「建造不可」)に設定されています。 +ここでオブジェクトを作ることはできません。 </message> </notify> <notify name="ScriptsStopped"> <message name="message"> - 管理者により、本地域でのスクリプトが一時的に停止しました + 管理者がこの地域内のスクリプトを一時停止させました。 </message> </notify> <notify name="ScriptsNotRunning"> <message name="message"> - 本地域は、いかなるスクリプトも起動しません。 + この地域はスクリプトを1つも起動していません。 </message> </notify> <notify name="NoOutsideScripts"> <message name="message"> - この土地では、外部スクリプトが無効に設定されています。(『外部スクリプト禁止』)土地オーナーに属する物を除き、スクリプトは起動しません。 + この土地では外部スクリプトが無効に設定されています。 +(「外部スクリプト禁止」) +土地所有者以外のスクリプトは起動できません。 </message> </notify> <notify name="ApproveURL"> <message name="message"> - オブジェクトは表面上に以下のウェブページの表示を希望しています:[URL] + オブジェクトの表面には、以下のウェブ・ページが表示されます: +[URL] </message> <option name="LoadPage"> - ページを読み込む + ページをロード </option> <option name="Don'tLoad"> - 読み込み禁止 + ロードしない </option> </notify> <notify name="ClaimPublicLand"> <message name="message"> - あなたがいる地域の公共の土地を主張することのみできます。 + 自分がいる地域でのみ公共の土地を獲得できます。 </message> </notify> <notify name="ObjectGiveItem"> <message name="message"> - [FIRST][LAST]により所有されているオブジェクトの[OBJECTFROMNAME]が、あなたに『[OBJECTNAME]』という[OBJECTTYPE]を与えました + [FIRST] [LAST]により所有されているオブジェクト[OBJECTFROMNAME]が、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を与えました。 </message> <option name="Keep"> - 保つ + 維持 </option> <option name="Discard"> - 廃棄 + 破棄 </option> <option name="Mute"> ミュート @@ -407,13 +434,13 @@ </notify> <notify name="ObjectGiveItemUnknownUser"> <message name="message"> - (未知のユーザー)により所有されているオブジェクトの[OBJECTFROMNAME]が、あなたに『[OBJECTNAME]』という[OBJECTTYPE]を与えました。 + (未知のユーザー)により所有されているオブジェクト[OBJECTFROMNAME]が、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を与えました。 </message> <option name="Keep"> - 保つ + 維持 </option> <option name="Discard"> - 廃棄 + 破棄 </option> <option name="Mute"> ミュート @@ -421,13 +448,13 @@ </notify> <notify name="UserGiveItem"> <message name="message"> - [NAME]は、あなたに『[OBJECTNAME]』という[OBJECTTYPE]を与えました。 + [NAME]は、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を与えました。 </message> <option name="Keep"> - 保つ + 維持 </option> <option name="Discard"> - 廃棄 + 破棄 </option> <option name="Mute"> ミュート @@ -447,49 +474,56 @@ 参加 </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="JoinGroupOfficerNoFee"> <message name="message"> - [NAME]は、あなたをオフィサーとしてグループに招待しています。参加費用はかかりません。 + [NAME]は、あなたをオフィサー +としてグループに招待しています。 +参加費用はかかりません。 + [MESSAGE] </message> <option name="Join"> 参加 </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="JoinGroupMember"> <message name="message"> - [NAME]は、あなたを一般メンバーとしてグループに招待しています。グループへの参加費用はL$[COST]です。 + [NAME]は、あなたを一般メンバーとしてグループに招待しています。 +グループへの参加費用はL$[COST] +です。 [MESSAGE] </message> <option name="Join"> 参加 </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="JoinGroupMemberNoFee"> <message name="message"> - [NAME]は、あなたを一般メンバーとしてグループに招待しています。参加費用はかかりません。 + [NAME]は、あなたを一般メンバーとしてグループに招待しています。 +参加費用はかかりません。 + [MESSAGE] </message> <option name="Join"> 参加 </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="OfferTeleport"> <message name="message"> - [NAME] has offered to teleport you -to his or her location: + [NAME]はあなたをテレポート +で呼び寄せようとしています: [MESSAGE] </message> @@ -497,7 +531,7 @@ to his or her location: テレポート </option> <option name="Cancel"> - 取消 + 取り消し </option> </notify> <notify name="GotoURL"> @@ -506,110 +540,115 @@ to his or her location: [URL] </message> <option name="Later"> - 後ほど + あとで </option> <option name="GoNow..."> - 今すぐ行く + 今すぐ行く... </option> </notify> <notify name="OfferFriendship"> <message name="message"> - [NAME] is offering friendship. + [NAME] は、フレンドシップを贈っています。 - By default, you will be able to -see each other's online status. + デフォルトでお互いのオンライン・ステータスを見ることができるようになります。 </message> <option name="Accept"> 受け入れる </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="FriendshipAccepted"> <message name="message"> - [NAME]はフレンドシップを受け入れました。 + [NAME]は、フレンドシップを受け入れました。 </message> </notify> <notify name="FriendshipDeclined"> <message name="message"> - [NAME]はフレンドシップを却下しました + [NAME]は、フレンドシップを断りました。 </message> </notify> <notify name="OfferCallingCard"> <message name="message"> - [FIRST][LAST]がコーリングカードを申し出ています。これにより、あなたの持ち物にブックマークが追加され、この居住者にすばやくIMすることができます。 + [FIRST] [LAST]がコーリング・カードを贈っています。 +これにより、あなたの持ち物にブックマークが追加され、 +この住人にすばやくIMすることができます。 </message> <option name="Accept"> 受け入れる </option> <option name="Decline"> - 断わる + 辞退 </option> </notify> <notify name="RegionRestartMinutes"> <message name="message"> - この地域は[MINUTES]分以内に再起動をします。このまま留まった場合は、ログアウトさせられます。 + この地域は[MINUTES]分後にリスタートされます。 +この地域の外に出ないと、強制ログアウトになります。 </message> </notify> <notify name="RegionRestartSeconds"> <message name="message"> - この地域は[SECONDS]秒以内に再起動をします。このまま留まった場合、ログアウトさせられます。 + この地域は[SECONDS]秒後にリスタートされます。 +この地域の外に出ないと、強制ログアウトになります。 </message> </notify> <notify name="LoadWebPage"> <message name="message"> - ウェブページ[URL]を読み込みますか? + ウェブ・ページ[URL]をロードしますか? + [MESSAGE] -オブジェクトから: [OBJECTNAME], 所有者:[NAME] + +ロード元のオブジェクト:[OBJECTNAME]、オーナー:[NAME]? </message> <option name="Gotopage"> - ページに行く + ページに移動 </option> <option name="Cancel"> - 取消 + 取り消し </option> </notify> <notify name="FailedToLoadWearableUnnamed"> <message name="message"> - [TYPE]を読み込めませんでした。 -あなたが購入した本アイテムの販売者に通知してください。 + [TYPE]をロードできませんでした。 +このアイテムを購入した販売者に通知してください。 </message> </notify> <notify name="FailedToLoadWearable"> <message name="message"> - [DESC]という名の[TYPE]を読み込めませんでした。 -あなたが購入した本アイテムの販売者に通知してください。 + [DESC]という名前の[TYPE]をロードできませんでした。 +本アイテムを購入した販売者に通知してください。 </message> </notify> <notify name="FailedToFindWearableUnnamed"> <message name="message"> - データベースに[TYPE]が見つかりませんでした + データベースに[TYPE]が見つかりませんでした。 </message> </notify> <notify name="FailedToFindWearable"> <message name="message"> - データベースに[DESC]という名の[TYPE]が見つかりませんでした + データベースに[DESC]という名前の[TYPE]が見つかりませんでした。 </message> </notify> <notify name="ScriptTakeMoney"> <message name="message"> - Take Linden dollars (L$) from you + Lindenドル(L$)を徴収します。 </message> </notify> <notify name="ActOnControlInputs"> <message name="message"> - あなたの制御入力に従い行動してください + 制御入力に対応 </message> </notify> <notify name="RemapControlInputs"> <message name="message"> - あなたのコントロール入力を再対応させてください。 + コントロール入力の再マッピング </message> </notify> <notify name="AnimateYourAvatar"> <message name="message"> - あなたのアバターのをアニメーションします + アバターに動きをつける </message> </notify> <notify name="AttachToYourAvatar"> @@ -619,27 +658,27 @@ see each other's online status. </notify> <notify name="ReleaseOwnership"> <message name="message"> - 所有権をリリースし、公開してください。 + 所有権を解放して公共地に </message> </notify> <notify name="LinkAndDelink"> <message name="message"> - 他のオブジェクトとのリンク、またはリンク解除を行います。 + 他のオブジェクトとのリンクの設定と解除 </message> </notify> <notify name="AddAndRemoveJoints"> <message name="message"> - 他のオブジェクトとのジョイントの追加、削除をしてください。 + 他のオブジェクトとのジョイントの追加と削除 </message> </notify> <notify name="ChangePermissions"> <message name="message"> - 許可を変更 + 権限を変更 </message> </notify> <notify name="TrackYourCamera"> <message name="message"> - カメラを追跡してください + カメラで追跡してください </message> </notify> <notify name="ControlYourCamera"> @@ -649,10 +688,10 @@ see each other's online status. </notify> <notify name="ScriptQuestion"> <message name="message"> - '[OBJECTNAME]', an object owned by '[NAME]', would like to: - + '[NAME]'が所有するオブジェクト'[OBJECTNAME]'を: + [QUESTIONS] -Is this OK? +よろしいですか? </message> <option name="Yes"> はい @@ -663,8 +702,8 @@ Is this OK? </notify> <notify name="ScriptDialog"> <message name="message"> - [FIRST][LAST]の』[TITLE] -『[MESSAGE] + [FIRST] [LAST]'の'[TITLE]' +[MESSAGE] </message> <option name="Ignore"> 無視する @@ -672,8 +711,8 @@ Is this OK? </notify> <notify name="ScriptDialogGroup"> <message name="message"> - [GROUPNAME]の『[TITLE] -『[MESSAGE] + [GROUPNAME]'の'[TITLE]' +[MESSAGE] </message> <option name="Ignore"> 無視する @@ -681,80 +720,102 @@ Is this OK? </notify> <notify name="FirstBalanceIncrease"> <message name="message"> - You just received L$[AMOUNT]. -Objects and other users may give you L$. -Your balance is shown in the -upper-right corner of the screen. + 今、L$[AMOUNT]を受け取りました。 +オブジェクトと他のユーザーがあなたにお金を払う +かもしれません。あなたの残高は +画面の右上に表示されています。 </message> </notify> <notify name="FirstBalanceDecrease"> <message name="message"> - たった今、L$[AMOUNT]を支払いました。 -L$残額は画面右上角に表示されます。 + 今、L$[AMOUNT]を支払いました。 +あなたの残高は画面の右上に +表示されています。 </message> </notify> <notify name="FirstSit"> <message name="message"> あなたは座っています。 -矢印キー(またはAWSD)を使用し、表示を切り替えてください。立ち上がる際は『立ち上がる』ボタンを押してください。 +矢印(または AWSD)のキーを使って視点を変えます。 +立ち上がるには[立ち上がる]をクリックします。 </message> </notify> <notify name="FirstMap"> <message name="message"> - 地図をスクロールするには、クリックしドラッグしてください。 -ダブルクリックでテレポートします。 -右のコントロールを使用し、物を見つけ、異なる背景を表示してください + 地図をスクロールするには、クリックしてドラッグします。 +テレポートするには、ダブルクリックします。 +右側のコントロールを使用すると、物を見つけたり、 +別の背景を表示することができます。 </message> </notify> <notify name="FirstBuild"> <message name="message"> - あなたは[SECOND_LIFE]のいくつかのエリアに、新たなオブジェクトを作製することが出来ます。左上部のツールを使用し、CtrlまたはAltを押し続け、すばやくツールを切り換えてみてください。Escを押して、構築を中止します。 + [SECOND_LIFE]には、新しいオブジェクトを作ることができる地域があります。 +作成には画面上部左のツールが使え、Ctrl キーや + Alt キーを押したままにすれば素早くツールを切り替えられます。 + Escキーを押すと、作成は終了します。 </message> </notify> <notify name="FirstLeftClickNoHit"> <message name="message"> - 左クリックは特別なオブジェクトへの干渉に使用します。マウス・ポインタが手のマークに変わると、オブジェクトに対しての動作が行えます。 右クリックは、常にあなたの動作メニューを表示します。 + 左クリックにより、特別なオブジェクトを操作できます。 +マウス・ポインタが手のマークに変わる場合、 +ポイントしているオブジェクトを操作できます。 +右クリックにより、実行可能な操作のメニューが表示されます。 </message> </notify> <notify name="FirstTeleport"> <message name="message"> - あなたはテレポートしました。 現在、あなたの目的地に一番近いインフォ・ハブにいます。あなたの目的地は、背の高い赤い目印でマークされています。 + あなたはたった今、テレポートしました。 +あなたの目的地に一番近いインフォハブにいます。 +目的地は、背の高い赤い標識で示されています。 </message> </notify> <notify name="FirstOverrideKeys"> <message name="message"> - オブジェクトにより、あなたの移動キーが操作されます。 矢印キー、もしくはAWSDで、動作を確かめてください。いくつかのオブジェクト(例、銃)を使用する場合、マウスルックに移行する必要があります。マウスルックへの移行は『M』を押してください。 + あなたの移動キーをオブジェクトが操作しています。 +矢印かAWSDのキーで動作を確認してください。 +銃などのオブジェクトだと、マウスルックに移行する必要があります。 +Mキーを押して移行します。 </message> </notify> <notify name="FirstAppearance"> <message name="message"> - あなたは自分の容姿を変更しています。 回転や拡大表示するには、矢印キーを使用してください。 作業後、あなたの容姿を保存する場合は『全て保存』を押して、終了してください。 自分の容姿は、好きなだけ変更することが出来ます。 + あなたは容姿を編集中です。 +回転、ズームするには矢印キーを使います。 +編集が終わったら[全てを保存]をクリックして +容姿を保存し、終了します。 +容姿の編集は何度でも行えます。 </message> </notify> <notify name="FirstInventory"> <message name="message"> - これは、あなたの持ち物一覧です。オブジェクト、ノートカード、洋服、その他あなたが所有する物が含まれます。 -*オブジェクトや格納フォルダーを、自分自身にドラッグすることで装着できます。 -*オブジェクトを地面にドラッグすることで、世界に出現させることができます。 -*ノートカードを読むには、ダブルクリックしてください。 + これは、オブジェクト、ノートカード、服、その他の所有物がすべて入った持ち物です。 +*オブジェクトや服装フォルダを装着するには、マウスでアバターにドラッグします。 +*オブジェクトを世界に持ち込むには、地面の上にドラッグします。 +*ノートカードを読むには、ダブルクリックします。 </message> </notify> <notify name="FirstSandbox"> <message name="message"> - ここはサンドボックス地域です。 -あなたが作成したオブジェクトは、エリアを離れた後に削除される可能性があります。また、ここでは太平洋時間の午前[TIME]時から[HOURS]時間毎に、地域内のオブジェクトが消去されます。 -サンドボックス地域には、通常の地域と区別する為のサインがあります。 + ここはサンドボックスです。 +あなたがここで作ったオブジェクトはあなたが +立ち去った後、削除されるかもしれません。サンドボックスは定期的に清掃されます。詳細については、画面上部、地域名の隣の情報を参照してください。 + +サンドボックスは一般的でなく、目印のサインがついています。. </message> </notify> <notify name="FirstFlexible"> <message name="message"> - 本オブジェクトはフレキシブルです。 フレキシブル・オブジェクトは、物理的でないこともあり、フレキシブルのチェックボックで解除されるまで、ファントム属性で存在します。 + このオブジェクトは フレキシブルです。 +フレキシブル・チェックボックスのチェックが外されるまでは、オブジェクトは +物理的でなくファントムでなければなりません。 </message> </notify> <notify name="MaxListSelectMessage"> <message name="message"> - You may only select up to [MAX_SELECT] items -from this list. + このリストから、 [MAX_SELECT] 個までのアイテムを +選択できます。 </message> </notify> </notifications> diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar.xml b/linden/indra/newview/skins/xui/ja/panel_avatar.xml index 1def618..3a63a84 100644 --- a/linden/indra/newview/skins/xui/ja/panel_avatar.xml +++ b/linden/indra/newview/skins/xui/ja/panel_avatar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="Panel Avatar"> <tab_container name="tab"> - <panel label="セカンド・ライフ" name="2nd Life"> + <panel label="セカンドライフ" name="2nd Life"> <text name="CaptionTextAcctInfo"> [ACCTTYPE] [PAYMENTINFO] </text> <text name="AcctTypeResident"> - 居住者 + 住人 </text> <text name="AcctTypeTrial"> トライアル @@ -16,165 +16,166 @@ 特権メンバー </text> <text name="AcctTypeEmployee"> - Linden Lab 従業員 + Linden Lab従業員 </text> <text name="PaymentInfoUsed"> - 支払い情報が使用されている + 使用する支払い情報 </text> <text name="PaymentInfoOnFile"> - 支払い情報の登録がある + 支払い情報登録済み </text> <text name="NoPaymentInfoOnFile"> - 支払い情報の登録がない + 支払い情報未登録 </text> <text name="Name:"> - 名前: + 名前: </text> <text name="online_yes"> - オンライン:はい - </text> - <text name="online_no"> - オンライン:いいえ - </text> - <text name="online_unknown"> - オンライン:不明 + 現在オンライン中 </text> <text name="label"> - ボーン + 生年月日: </text> <text name="label2"> - アカウント: + アカウント: </text> <text name="partner_label" - tool_tip="Second Lifeパートナーです。設定についての詳細は、www.secondlife.com/partnerを参照してください。"> - パートナー: + tool_tip="Second Lifeパートナーです。 設定方法の詳細については、www.secondlife.com/partnerを参照してください。"> + パートナー: </text> + <button label="?" label_selected="?" name="partner_help" /> <line_editor name="partner_edit" - tool_tip="Second Lifeパートナーです。設定についての詳細は、www.secondlife.com/partnerを参照してください。"> - [FIRST][LAST] + tool_tip="Second Lifeパートナーです。 設定方法の詳細については、www.secondlife.com/partnerを参照してください。"> + [FIRST] [LAST] </line_editor> <text name="Photo:"> - 写真: + 写真: </text> - <texture_picker label="" name="img" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="" name="img" tool_tip="写真をクリックして選択" /> <text name="Ratings:"> - 率: + 評価: </text> <text name="Groups:"> - グループ: + グループ: </text> <text name="About:"> - ついて: + 情報: </text> <text name="(500 chars)"> - (500 文字) + (500字) </text> <text name="Give item:"> - 項目を与える: + 品目を贈る: </text> <text name="Give inventory" - tool_tip="アイテムをあげる場合は、ここに持ち物からドロップします。"> - ここに在庫目録の項目を落とします。 + tool_tip="この人に持ち物品目を与えるには、ここにドロップします"> + 持ち物アイテムをここにドロップします </text> - <check_box label="ウェブ上に公表する。" name="allow_publish" - tool_tip="自分のプロファイル情報をWeb上で公開します。" /> + <check_box label="ウェブ上で公開" name="allow_publish" + tool_tip="自分のプロファイル情報をウェブ上で公開します。" /> <button label="?" label_selected="?" name="?" /> <button label="地図上に表示" label_selected="地図上に表示" name="Show on Map" /> - <button label="テレポートを提供する..." - label_selected="テレポートを提供する..." name="Offer Teleport..." /> + <button label="テレポートを贈る..." + label_selected="テレポートを贈る..." name="Offer Teleport..." /> + <button label="評価..." label_selected="評価..." name="Rate..." /> <button label="支払い..." label_selected="支払い..." name="Pay..." /> - <button label="インスタントメッセージ..." - label_selected="インスタントメッセージ..." + <button label="インスタント・メッセージ..." + label_selected="インスタント・メッセージ..." name="Instant Message..." /> <button label="ミュート" label_selected="ミュート" name="Mute" /> </panel> <panel label="ウェブ" name="WebProfile"> <button label="ホーム" label_selected="ホーム" name="home" /> - <button label="Load" label_selected="Load" name="load" - tool_tip="Load this profile page with embedded web browser." /> - <button label="Open..." label_selected="Open..." name="open" - tool_tip="Open this profile page in your default external web browser." /> + <button label="ロード" label_selected="ロード" name="load" + tool_tip="プロファイル・ページを内蔵ブラウザーでロードします。" /> + <button label="開く..." label_selected="開く..." name="open" + tool_tip="プロフィール・ページをデフォルトの外部ブラウザーで開く" /> <button label="?" label_selected="?" name="web_profile_help" /> - <check_box label="Automatically load web profiles" name="auto_load" - tool_tip="Automatically load ALL profile webpages without asking first." /> + <check_box label="ウェブ・プロフィール自動ロード" name="auto_load" + tool_tip="プロフィールにあるすべてのウェブ・ページを確認なしで自動的にロードする" /> <text name="status_text"> - 終了 + 完了 </text> </panel> <panel label="興味" name="Interests"> <text name="I Want To:"> - 私の望み: + したいこと: </text> - <check_box label="立てる" name="chk0" /> - <check_box label="エクスプローラ" name="chk1" /> + <check_box label="作成する" name="chk0" /> + <check_box label="探検する" name="chk1" /> <check_box label="会う" name="chk2" /> <check_box label="雇用される" name="chk6" /> <check_box label="グループ" name="chk3" /> - <check_box label="購入" name="chk4" /> - <check_box label="売却" name="chk5" /> - <check_box label="借りる" name="chk7" /> + <check_box label="購入する" name="chk4" /> + <check_box label="販売する" name="chk5" /> + <check_box label="雇用する" name="chk7" /> <text name="Skills:"> - 技能: + スキル: </text> <check_box label="テクスチャー" name="schk0" /> - <check_box label="アーキテクチャ" name="schk1" /> - <check_box label="イベントの計画" name="schk2" /> - <check_box label="モデル化" name="schk3" /> - <check_box label="スクリプト化" name="schk4" /> - <check_box label="カスタムキャラクター" name="schk5" /> + <check_box label="アーキテクチャ" name="schk1" /> + <check_box label="イベント計画" name="schk2" /> + <check_box label="モデル" name="schk3" /> + <check_box label="スクリプト" name="schk4" /> + <check_box label="カスタム・キャラクター" name="schk5" /> <text name="Languages:"> - Languages: + 言語: </text> </panel> - <panel label="写真" name="Picks"> + <panel label="ピック" name="Picks"> <text name="Tell everyone about your favorite places in Second Life."> - Second Lifeの中のあなたのお気に入りの場所についてみんなに話してください。 + Second Lifeのお気入りの場所を皆に話してください </text> <button label="新規..." label_selected="新規..." name="New..." /> <button label="削除..." label_selected="削除..." name="Delete..." /> + <text name="loading_text"> + ロード中... + </text> </panel> - <panel label="案内広告" name="Classified"> + <panel label="クラシファイド広告" name="Classified"> <text name="Place an ad in Second Life's classified listings."> - Second Lifeの案内広告のリストに広告を載せます。 + SecondLifeのクラシファイドリストに広告を載せます。 </text> <button label="新規..." label_selected="新規..." name="New..." /> <button label="削除..." label_selected="削除..." name="Delete..." /> + <text name="loading_text"> + ロード中... + </text> </panel> - <panel label="ファースト・ライフ" name="1st Life"> + <panel label="リアルライフ" name="1st Life"> <text name="Photo:"> - 写真: + 写真: </text> - <texture_picker label="" name="img" - tool_tip="クリックして写真を選択してください。" /> + <texture_picker label="" name="img" tool_tip="写真をクリックして選択" /> <text name="Info:"> - 情報: + 情報: </text> <text name="(250 chars)"> - (250 文字) + (250字) </text> </panel> - <panel label="一言メモ" name="My Notes"> + <panel label="私の記録" name="My Notes"> <text name="label"> - Use this space to record your notes about this person. Keep track -of trades in progress, joint projects, etc. Only you can see these -notes. This person cannot see them, nor can other people. + このスペースに、この人物に関するメモを記録します。 進行中の取引、 +共同プロジェクトなどを記録。メモを見ることができるのは +あなただけです。 本人を含めた他の人は、メモを見ることができません。 </text> </panel> </tab_container> <button label="OK" label_selected="OK" name="OK" /> - <button label="取消" label_selected="取消" name="Cancel" /> - <button label="追い出す" label_selected="追い出す" name="Kick" /> - <button label="静止する" label_selected="静止する" name="Freeze" - tool_tip="この居住者の動きおよび会話を停止します。" /> - <button label="静止を解除する" label_selected="静止を解除する" - name="Unfreeze" tool_tip="居住者を解凍" /> + <button label="取り消し" label_selected="取り消し" name="Cancel" /> + <button label="キック" label_selected="キック" name="Kick" /> + <button label="フリーズ" label_selected="フリーズ" name="Freeze" + tool_tip="この住人の動きと会話を停止します。" /> + <button label="解凍" label_selected="解凍" name="Unfreeze" + tool_tip="住人のフリーズを解除" /> <button label="CSR" label_selected="CSR" name="csr_btn" - tool_tip="この居住者のカスタマーサービスツールを開きます。" /> + tool_tip="この住人のカスタマー・サービス・ツールを開きます。" /> <text name="ShowOnMapNonFriend"> 地図上でロケーションを表示します。 -あなたが相手とフレンド登録を行ってないため、表示できません。 +あなたが相手とフレンドシップを交わしていないため、 +表示できません。 </text> <text name="ShowOnMapFriendOffline"> 地図上でロケーションを表示します。 @@ -187,9 +188,10 @@ notes. This person cannot see them, nor can other people. あなたのロケーションに強制テレポート </text> <text name="TeleportPrelude"> - あなたのロケーションにテレポートを申し出ます。オリエンテーション・アイランドを去るまでは無効です。 + あなたのロケーションへのテレポートを贈ります。 +あなたがオリエンテーション・アイランドを去るまで無効です。 </text> <text name="TeleportNormal"> - あなたのロケーションへテレポートを申し出ます。 + あなたのロケーションへのテレポートを贈ります。 </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml b/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml index 7ac999a..5c2aad8 100644 --- a/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml +++ b/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Classified" title="案内広告"> +<panel name="Classified" title="クラシファイド広告"> <line_editor name="given_name_editor" tool_tip="名前は、句読点でなく、文字または数字で始める必要があります。" /> <line_editor name="location_editor" - tool_tip="あなたのアバターの現在の位置で、クラシファイド用の地点の設定をしてください。" /> + tool_tip="クラシファイド広告用のロケーションをあなたの現在位置に設定してください。" /> <button label="場所を設定" name="set_location_btn" /> <button label="テレポート" name="classified_teleport_btn" /> <button label="地図" name="classified_map_btn" /> <combo_box label="" name="classified_category_combo" /> <check_box label="成人" name="classified_mature_check" /> <text name="classified_info_text" - tool_tip="広告代を増額するほど、リストの上位に現れます。"> - 広告掲載済み:発行はされていない + tool_tip="広告料を多く払うほど、広告の掲載順は上がります。"> + 広告掲載:未発行 </text> <text name="click_through_text" - tool_tip="本クラシファイドが掲載されてからの、各ボタンにおけるクリック数合計"> - クリック: + tool_tip="このクラシファイド広告掲載以降の、各ボタンの総クリック数"> + クリック: </text> - <button label="公表する..." name="classified_update_btn" /> - <check_box label="週毎の自動更新" name="auto_renew_check" /> + <button label="公開..." name="classified_update_btn" /> + <check_box label="毎週自動更新" name="auto_renew_check" /> <text name="ad_placed_paid"> - Ad placed: [DATE], Paid L$[AMT] for listing. + 広告掲載:[DATE]、L$[AMT] 支払い済み </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml b/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml index 791786f..a897e61 100644 --- a/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml +++ b/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Pick" title="ピック"> - <button label="場所を設定" name="set_location_btn" /> +<panel name="Pick" title="選択"> + <button label="ロケーションを設定" name="set_location_btn" /> <button label="テレポート" name="pick_teleport_btn" /> <button label="地図上に表示" name="pick_map_btn" /> <text name="sort_order_text"> - 仕分け: + 振り分け: </text> - <check_box label="有効" name="enabled_check" /> + <check_box label="有効化" name="enabled_check" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml b/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml index fd669ea..6e1af21 100644 --- a/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml +++ b/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml @@ -1,10 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="chat"> - <button label="履歴" label_selected="履歴" name="History" /> - <line_editor name="Chat Editor" - tool_tip="話すにはEnterを押し、叫ぶにはCtrl-Enterを押します。" /> - <button label="言う" label_selected="言う" name="Say" /> - <button label="叫ぶ" label_selected="叫ぶ" name="Shout" /> + <button label="履歴" label_selected="履歴" name="History" + tool_tip="過去の発言を表示するには、ここをクリック" /> + <line_editor label="チャットを開始するには、ここをクリックします。" + name="Chat Editor" + tool_tip="話すにはEnterを押し、叫ぶにはCtrl+Enterを押します。" /> + <button label="発言" label_selected="発言" name="Say" tool_tip="(Enter)" /> + <button label="叫ぶ" label_selected="叫ぶ" name="Shout" tool_tip="(Ctrl-Enter)" /> <combo_box label="ジェスチャー" name="Gesture"> <combo_item name="Gestures"> ジェスチャー diff --git a/linden/indra/newview/skins/xui/ja/panel_classified.xml b/linden/indra/newview/skins/xui/ja/panel_classified.xml index 8638d25..f7d04de 100644 --- a/linden/indra/newview/skins/xui/ja/panel_classified.xml +++ b/linden/indra/newview/skins/xui/ja/panel_classified.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Classified" title="案内広告"> +<panel name="Classified" title="クラシファイド広告"> <line_editor name="given_name_editor" tool_tip="名前は、句読点でなく、文字または数字で始める必要があります。" /> <line_editor name="location_editor" - tool_tip="あなたのアバターの現在の位置で、クラシファイド用の地点の設定をしてください。" /> + tool_tip="クラシファイド広告用のロケーションをあなたの現在位置に設定してください。" /> <button label="設定" name="set_location_btn" /> <button label="テレポート" name="classified_teleport_btn" /> <button label="地図上に表示" name="classified_map_btn" /> - <button label="プロファイル" name="classified_profile_btn" /> + <button label="プロフィール" name="classified_profile_btn" /> <check_box label="成人" name="classified_mature_check" /> <combo_box label="" name="classified_category_combo" /> - <button label="アップデート" name="classified_update_btn" /> + <button label="更新" name="classified_update_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_event.xml b/linden/indra/newview/skins/xui/ja/panel_event.xml index d883387..f654c14 100644 --- a/linden/indra/newview/skins/xui/ja/panel_event.xml +++ b/linden/indra/newview/skins/xui/ja/panel_event.xml @@ -1,58 +1,58 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="Event" title="イベント"> <text name="event_name_label"> - 名前: + 名前: </text> <text name="event_name"> - (なし) + (なし) </text> <text name="event_category_label"> - タイプ: + 入力する: </text> <text name="event_category"> - (なし) + (なし) </text> <text name="event_mature_label"> - 成人向けコンテンツ: + 成人向けコンテンツ: </text> <text name="event_mature"> - (未知) + (不明) </text> <text name="event_date_label"> - 日付: + 日付: </text> <text name="event_date"> - (なし) + (なし) </text> <text name="event_duration_label"> - イベント持続時間: + イベント期間: </text> <text name="event_duration"> - (なし) + (なし) </text> <text name="event_runby_label"> - よて動く: + 実行者/物: </text> <text name="event_runby"> - (なし) + (なし) </text> <text name="event_location_label"> - 位置: + ロケーション: </text> <text name="event_location"> - (なし) + (なし) </text> <text name="event_cover_label"> - カバーチャージ: + カバー・チャージ: </text> <text name="event_cover"> - (なし) + (なし) </text> <text name="event_desc_label"> - 説明: + 説明: </text> <button label="テレポート" name="teleport_btn" /> <button label="地図上に表示" name="map_btn" /> - <button label="通知する" name="notify_btn" /> - <button label="イベントを作成.." name="create_event_btn" /> + <button label="通知" name="notify_btn" /> + <button label="イベント作成..." name="create_event_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_group.xml b/linden/indra/newview/skins/xui/ja/panel_group.xml index a784d5f..ae1aa3a 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group.xml @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="GroupInfo" title="グループ情報"> <text name="default_needs_apply_text"> - 現在のタブにおける未適用の変更があります。 + 現在のタブに、未適用の変更があります。 </text> <text name="want_apply_text"> これらの変更を適用しますか? </text> <button label="適用" label_selected="適用" name="btn_apply" /> - <button label="取消" label_selected="取消" name="btn_cancel" /> + <button label="取消し" label_selected="取消し" name="btn_cancel" /> <button label="OK" label_selected="OK" name="btn_ok" /> - <button label="サーバからリフレッシュする" - label_selected="サーバからリフレッシュする" name="btn_refresh" /> + <button label="更新" label_selected="サーバーから更新" name="btn_refresh" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_group_finder.xml b/linden/indra/newview/skins/xui/ja/panel_group_finder.xml index f3b4f39..e4c51c7 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_finder.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_finder.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="GroupInfoFinder" title="グループ情報ファインダー"> +<panel name="GroupInfoFinder" title="グループ情報ファインダ"> <text name="default_needs_apply_text"> - 現在のタブにおける未適用の変更があります。 + 現在のタブに、未適用の変更があります。 </text> <text name="want_apply_text"> これらの変更を適用しますか? diff --git a/linden/indra/newview/skins/xui/ja/panel_group_general.xml b/linden/indra/newview/skins/xui/ja/panel_group_general.xml index 329b421..4f896a9 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_general.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_general.xml @@ -1,15 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="一般" name="general_tab"> <text name="help_text"> - 『一般タブ』には、このグループに関する一般情報、オーナーや可視メンバーのリスト、一般的なグループ嗜好、およびメンバーのオプションが含まれます。 -オプション上でマウスを動かすと、さらにヘルプが得られます。 + [一般]タブには、このグループに関する +一般情報、オーナーと表示可能なメンバーのリスト +一般的な[グループ環境設定]、メンバーのオプションが含まれます。 + +オプションの上でマウスカーソルを動かすと、ヘルプ情報を得られます。 </text> <button label="?" label_selected="?" name="help_button" /> <line_editor name="group_name_editor"> - あなたの新しいグループ名を記入してください + 新しいグループ名をここに入力してください。 </line_editor> <text name="group_name"> - あなたの新しいグループ名を記入してください + 新しいグループ名をここに入力してください。 </text> <text name="prepend_founded_by"> 創設者 @@ -21,18 +24,18 @@ グループ特権 </text> <texture_picker label="グループ記章" name="insignia" - tool_tip="クリックして写真を選択してください。" /> + tool_tip="写真をクリックして選択" /> <text_editor name="charter"> グループ特権 </text_editor> - <button label="参加する(L$0)" label_selected="参加する(L$0)" + <button label="参加する(L$0)" label_selected="参加する(L$0)" name="join_button" /> <button label="詳細表示" label_selected="詳細表示" name="info_button" /> <text> オーナーと可視メンバー </text> <text> - (オーナーは太字で表示されています) + (オーナーは太字) </text> <name_list name="visible_members"> <column label="Member Name" name="name" /> @@ -40,35 +43,36 @@ <column label="Last Login" name="online" /> </name_list> <text name="incomplete_member_data_str"> - メンバーデータを検索 + メンバー・データを検索 </text> <text name="confirm_group_create_str"> - このグループを形成するにはL$100かかります。本当に、本当に、本当にL$100を費やして、このグループを作りますか? + このグループの作成にはL$100かかります。 +このグループの作成にL$100ものお金をかけてもかまいませんか? 慎重に判断してください。 </text> <text> - グループ嗜好 + グループの環境設定 </text> <panel name="preferences_container"> - <check_box label="グループリストの中に表示" name="show_in_group_list" - tool_tip="Sets whether this group shows up in the Search Groups window and in member profiles." /> - <check_box label="ウェブ上に公表する。" name="publish_on_web" - tool_tip="このグループの情報がウェブ上で公開されるかどうかの設定をします。" /> - <check_box label="公開登録" name="open_enrollement" - tool_tip="Sets whether this group allows new members to join without being invited." /> + <check_box label="グループ・リストに表示" name="show_in_group_list" + tool_tip="このグループを「検索グループ」ウィンドウとメンバーのプロフィールに表示するかどうかを指定します。" /> + <check_box label="ウェブ上で公開" name="publish_on_web" + tool_tip="このグループの情報をウェブ上で公開できるようにするかどうかを指定します。" /> + <check_box label="会員募集" name="open_enrollement" + tool_tip="このグループに招待状なしで新しいメンバーを受け入れるかどうかを指定します。" /> <check_box label="入会費:L$" name="check_enrollment_fee" - tool_tip="グループ参加に入会費が必要かどうかの設定をします。" /> + tool_tip="このグループへの参加に入会費を必須とするかどうかを指定します。" /> <spinner name="spin_enrollment_fee" - tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." /> - <check_box label="成人" name="mature" - tool_tip="あなたのグループ情報が成人向けかどうかを設定します。" /> + tool_tip="「入会費」がチェックされている場合、新規会員は入会時にこの費用を支払う必要があります。" /> + <check_box label="成人向グループ" name="mature" + tool_tip="あなたのグループ情報が成人向けとみなされるかどうかを指定します。" /> <panel name="title_container"> <text name="active_title_label"> - 自分のアクティブ・タイトル + 私のアクティブ・タイトル </text> <combo_box name="active_title" tool_tip="Sets the title that appears in your avatar's name tag when this group is active." /> </panel> <check_box label="グループ通知を受信" name="receive_notices" - tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you." /> + tool_tip="グループからの通知をあなたが受信するかどうかを指定します。 このグループがスパム行為をしている場合は、このボックスのチェックを外してください。" /> </panel> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_group_invite.xml b/linden/indra/newview/skins/xui/ja/panel_group_invite.xml index 948166f..cd6b780 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_invite.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_invite.xml @@ -1,18 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="メンバーを招待する" name="invite_panel"> +<panel label="メンバーを招待" name="invite_panel"> <text> - あなたのグループに、一度に複数の人を招待することができます。『リストから人を選ぶ』をクリックして、作業を始めます。 + 複数の住人を選択して、グループに +招待できます。 [リストから +人を選ぶ]をクリックしてください。 </text> - <button label="選考者を公開" name="add_button" tool_tip="" /> + <button label="リストから人を選ぶ" name="add_button" tool_tip="" /> <name_list name="invitee_list" - tool_tip="Hold the Ctrl key and click resident names to multi-select." /> - <button label="リストから選択されたものを除外" name="remove_button" - tool_tip="上記で選択された居住者を招待リストから外します。" /> + tool_tip="複数の住人を選択するには、Ctrlキーを押しながら住人名をクリックします。" /> + <button label="リストから選択したものを削除" name="remove_button" + tool_tip="上で選択した居住者を招待リストから削除します。" /> <text> - 割り当てる役割を選択してください: + 割り当て先の役割を選択: </text> <combo_box name="role_name" tool_tip="Choose from the list of Roles you are allowed to assign members to." /> <button label="招待を送信" name="ok_button" /> - <button label="取消" name="cancel_button" /> + <button label="取り消し" name="cancel_button" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml b/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml index 9cdd86e..362d810 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml @@ -1,17 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="土地 & L$" name="land_money_tab"> +<panel label="土地とL$" name="land_money_tab"> <text name="help_text"> - グループが所有している土地は、資金援助詳細とともに一覧化されます。土地利用の合計が、全体の資金援助と同等または以下になると警告が現れます。プランニング、詳細、販売タブは、グループ財政に関する情報を提供します。 + グループ所有の区画が資金提供の詳細と共にリストに示されます。 + 土地利用の合計が、 +資金提供の合計以下になるまで警告が表示されます。 + プランニング、詳細、販売の各タブには、 +グループ財政に関する情報が表示されます。 </text> <button label="?" name="help_button" /> <text name="cant_view_group_land_text"> - あなたにはグループ所有の土地を閲覧する権限がありません。 + あなたはグループ所有の土地表示を許されていません。 </text> <text name="cant_view_group_accounting_text"> - あなたにはグループ会計情報を閲覧する権限がありません。 + あなたはグループの会計情報の表示を許されていません。 </text> <text name="group_land_heading"> - グループが所有する土地 + グループの保有地 </text> <scroll_list name="group_parcel_list"> <column label="Parcel Name" name="name" /> @@ -22,40 +26,40 @@ <button label="地図上に表示" label_selected="地図上に表示" name="map_button" /> <text name="total_contributed_land_label"> - 資金提供合計: + 寄付総額: </text> <text name="total_contributed_land_value"> - 0 平方メーター + 0平方メートル </text> <text name="total_land_in_use_label"> - Total Land In Use: + 土地利用の合計: </text> <text name="total_land_in_use_value"> - 0 平方メーター + 0平方メートル </text> <text name="land_available_label"> - 土地の使用可能性: + 利用可の土地: </text> <text name="land_available_value"> - 0 平方メーター + 0平方メートル </text> <text name="your_contribution_label"> あなたの貢献: </text> <text name="your_contribution_max_value_append"> - 平方メートル + 平方メートル </text> <text name="your_contribution_max_value"> (待機中) </text> <text name="group_over_limit_text"> - 使用されている土地をサポートするために、グループのメンバーは、さらなる土地のクレジットを貢献する必要があります。 + 使用中の土地をサポートするには、グループ・メンバーがさらに多くの土地クレジットを提供する必要があります。 </text> <text name="group_money_heading"> - グループL$ + グループL$ </text> <tab_container name="group_money_tab_container"> - <panel label="設計" name="group_money_planning_tab"> + <panel label="計画" name="group_money_planning_tab"> <text_editor name="group_money_planning_text"> 計算中… </text_editor> @@ -64,18 +68,18 @@ <text_editor name="group_money_details_text"> 計算中… </text_editor> - <button label="<以前の" label_selected="<以前の" - name="earlier_details_button" tool_tip="時間を戻す" /> - <button label="後で>" label_selected="後で>" name="later_details_button" + <button label="<前" label_selected="<前" name="earlier_details_button" + tool_tip="時間を戻す" /> + <button label="あとで>" label_selected="あとで>" name="later_details_button" tool_tip="時間を進める" /> </panel> - <panel label="売り上げ" name="group_money_sales_tab"> + <panel label="販売" name="group_money_sales_tab"> <text_editor name="group_money_sales_text"> 計算中… </text_editor> - <button label="<以前の" label_selected="<以前の" - name="earlier_sales_button" tool_tip="時間を戻す" /> - <button label="後で>" label_selected="後で>" name="later_sales_button" + <button label="<前" label_selected="<前" name="earlier_sales_button" + tool_tip="時間を戻す" /> + <button label="あとで>" label_selected="あとで>" name="later_sales_button" tool_tip="時間を進める" /> </panel> </tab_container> 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 a15ca14..b5fe45c 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml @@ -1,18 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Notices" name="notices_tab"> +<panel label="通知" name="notices_tab"> <text name="help_text"> - 通知は、メッセージや添付アイテムを送信してグループ内の意思伝達を早く行える手段です。通知は受信アビリティがある役割のグループメンバーにのみ発信されます。一般タブで通知をオフに設定できます。 + 通知機能を使うと、グループ内ですばやく情報を伝達できます。 +複数のあて先にメッセージを送信できるほか、 +必要に応じてアイテムをメッセージに添付することもできます。 通知は、 +受信アビリティがある役割のグループ・メンバーにのみ配信されます。 + 通知をオフにするには、一般タブを使います。 </text> <text name="no_notices_text"> - 過去の通知がありません。 + 過去の通知はありません。 </text> <button label="?" label_selected="?" name="help_button" /> <text name="lbl"> グループ通知アーカイブ </text> <text name="lbl2"> - 通知は30日間保存されます。閲覧したい通知をクリックしてください。 -『リストをリフレッシュ』のボタンをクリックして、新しい通知を受信してください。 + 通知は、30日間保存されます。 閲覧したい通知をクリックしてください。 +新着の通知をチェックするには、[更新]ボタンをクリックします。 </text> <scroll_list name="notice_list"> <column label="" name="icon" /> @@ -21,47 +25,48 @@ <column label="Date" name="date" /> </scroll_list> <text name="notice_list_none_found"> - 何も見つかりませんでした + 何も見つかりませんでした。 </text> <button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice" /> - <button label="リストをリフレッシュ" - label_selected="リストをリフレッシュ" name="refresh_notices" /> + <button label="更新" label_selected="リスト更新" name="refresh_notices" /> <panel label="新しい通知を作成" name="panel_create_new_notice"> <text name="lbl"> 通知を作成 </text> <text name="lbl2"> - 通知を送信するには、題名を入力してください。 -あなたの持ち物からパネルにドラッグすることにより、この通知にアイテムを一つ付加することができます。添付されたアイテムは、コピーおよび譲渡可能でなければなりません。また、フォルダーを送信することはできません。 + 通知を送るには、件名を入力します。 持ち物のアイテムを +1つ、このパネルにドラッグして、通知に添付 +できます。 添付できるのは、コピー、譲渡可能なアイテムで、 +フォルダーに送ることはできません。 </text> <text name="lbl3"> - 主体: + 件名: </text> <text name="lbl4"> - Mメッセージ: + メッセージ: </text> <text name="lbl5"> 添付: </text> - <button label="添付物の削除" label_selected="添付物の削除" + <button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment" /> <button label="通知を送信" label_selected="通知を送信" name="send_notice" /> - <panel name="drop_target2" + <panel name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." /> </panel> - <panel label="過去の通知を見る" name="panel_view_past_notice"> + <panel label="過去の通知を表示" name="panel_view_past_notice"> <text name="lbl"> アーカイブ通知 </text> <text name="lbl2"> - 新しい通知を送信するには、上の『新しい通知を作成』ボタンをクリックします。 + 新しい通知の送信は、上の[新しい通知を作成する]をクリックしてください。 </text> <text name="lbl3"> - 主体: + 件名: </text> <text name="lbl4"> - Mメッセージ: + メッセージ: </text> <button label="添付物を開く" label_selected="添付物を開く" name="open_attachment" /> diff --git a/linden/indra/newview/skins/xui/ja/panel_group_roles.xml b/linden/indra/newview/skins/xui/ja/panel_group_roles.xml index 3a266b4..b86928f 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_roles.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_roles.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="メンバーと役割" name="roles_tab"> <text name="default_needs_apply_text"> - 現在のサブ・タブにおける未適用の変更があります。 + 現在のサブタブに、未適用の変更があります。 </text> <text name="want_apply_text"> これらの変更を適用しますか? </text> <text name="cant_delete_role"> - 『全員』と『オーナー』の役割は、特別なため削除することができません。 + 「全員」と「オーナー」は特別な役割なので、削除できません。 </text> <button label="?" name="help_button" /> <panel name="members_header"> @@ -15,7 +15,8 @@ メンバーと役割 </text> <text name="static2"> - グループメンバーは、アビリティとともに役割が割り当てられます。これらの設定は、さらに大きな組織のために柔軟性をもたせ、簡単にカスタマイズすることもできます。 + グループ・メンバーには、役割と能力が割り当てられます。 この設定は、 +組織の規模に応じて柔軟かつ容易にカスタマイズできます。 </text> </panel> <panel name="roles_header"> @@ -23,80 +24,87 @@ 役割 </text> <text name="role_properties_modifiable"> - 下記の役割を選択してください。名前、説明、メンバーのタイトルを修正することができます。 + 下にある役割を選択してください。 役割の名前、説明、メンバー・タイトルを修正することができます。 </text> <text name="role_properties_not_modifiable"> - 不動産、メンバー、および許可されたアビリティを見るには、下記の役割を選択してください + 下にある役割を選択すると、役割のプロパティ、メンバー、および許可された能力を確認できます。 </text> <text name="role_actions_modifiable"> - 役割にアビリティを割り当てることもできます。 + あなたは役割に能力を割り当てることもできます。 </text> <text name="role_actions_not_modifiable"> - 割り当てられたアビリティの閲覧は可能ですが、修正はできません。 + あなたは能力を表示することはできますが、修正したり割り当てることはできません。 </text> </panel> <panel name="actions_header"> <text name="static"> - アビリティ + 能力 </text> <text name="static2"> - アビリティの説明、また、どの役割およびメンバーがそのアビリティを実行できるかを閲覧することができます。 + 能力の説明、どの役割とメンバーがその能力を実行できるかを +表示できます。 </text> </panel> <tab_container name="roles_tab_container"> <panel label="メンバー" name="members_sub_tab" tool_tip="Members"> <button label="検索" name="search_button" /> - <button label="全てを表示" name="show_all_button" /> + <button label="すべてを表示" name="show_all_button" /> <name_list name="member_list"> - <column label="Member Name" name="name" /> + <column label="メンバー名" name="name" /> <column label="Donated Tier" name="donated" /> - <column label="Last Login" name="online" /> + <column label="前回のログイン" name="online" /> </name_list> - <button label="新しい人を招待" name="member_invite" /> + <button label="新しい人を招待..." name="member_invite" /> <button label="グループから追放" name="member_eject" /> <text name="help_text"> - コントロールキーを押したまま名前をクリックすることにより、メンバーに割り当てた役割を追加したり、外したり、または、複数のメンバーを選択することができます。 + あなたはメンバーに割り当てられた役割を付加、削除できます。 + Ctrlキーを押しながらメンバー名をクリックすると + 複数の人を選択できます。 </text> </panel> <panel label="役割" name="roles_sub_tab"> <button label="検索" name="search_button" /> - <button label="全てを表示" name="show_all_button" /> + <button label="すべてを表示" name="show_all_button" /> <scroll_list name="role_list"> - <column label="Role Name" name="name" /> + <column label="役割名" name="name" /> <column label="Title" name="title" /> - <column label="Members" name="members" /> + <column label="メンバー" name="members" /> </scroll_list> - <button label="新しい役割の作成" name="role_create" /> + <button label="新しい役割を作成..." name="role_create" /> <button label="役割を削除" name="role_delete" /> <text name="help_text"> - 役割には、タイトルと行使できるアビリティのリストがあります。メンバーは、一つ以上の役割に属することができます。一つのグループは、『全員』と『オーナー』の役割を含んだ10の役割を持つことができます。 + 役割にはタイトルがあり、メンバーが行使可能な +能力のリストが定義されます。 メンバーは、 +1つまたは複数の役割に属することができます。 1つのグループに対し、 +「全員」と「オーナー」の役割を含めて最高で10の役割を持たせることができます。 </text> </panel> - <panel label="アビリティ" name="actions_sub_tab"> + <panel label="能力" name="actions_sub_tab"> <button label="検索" name="search_button" /> - <button label="全てを表示" name="show_all_button" /> - <scroll_list name="action_list" tool_tip="Select an Ability to view more details."> + <button label="すべてを表示" name="show_all_button" /> + <scroll_list name="action_list" tool_tip="能力を選択して詳細を表示します。"> <column label="" name="icon" /> <column label="" name="action" /> </scroll_list> <text name="help_text"> - アビリティは、グループ内で役割のあるメンバーの、特定の操作を可能にします。幅広いバラエティのアビリティが用意されています。 + このグループ内で役割を与えられているメンバーが実行できる操作は、 +能力によって決まります。 さまざまな能力が用意されています。 </text> </panel> </tab_container> <panel name="members_footer"> <text name="static"> - 割り当てられた役割 + 割当られた役割 </text> <text name="static2"> - 許可されたアビリティ + 許可された能力 </text> <scroll_list name="member_assigned_roles"> <column label="" name="checkbox" /> <column label="" name="role" /> </scroll_list> <scroll_list name="member_allowed_actions" - tool_tip="For Details of each Allowed Ability see the Abilities tab."> + tool_tip="許可された能力の詳細は「能力」タブをご覧ください。"> <column label="" name="icon" /> <column label="" name="action" /> </scroll_list> @@ -106,13 +114,13 @@ 名前 </text> <text name="static2"> - 説明: + 説明 </text> <line_editor name="role_name"> 従業員 </line_editor> <text name="static3"> - タイトル + 肩書き </text> <line_editor name="role_title"> (待機中) @@ -121,16 +129,16 @@ (待機中) </text_editor> <text name="static4"> - 任命されたメンバー + 割当られたメンバー </text> <text name="static5" - tool_tip="現在選択されている役割が遂行する可能なアビリティのリスト"> - 許可されたアビリティ + tool_tip="現在選択されている役割で実行できる能力のリスト"> + 許可された能力 </text> <check_box label="メンバーが可視状態" name="role_visible_in_list" - tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." /> + tool_tip="この役割のメンバーをグループ外の人の一般タブに表示するかどうかを設定します。" /> <scroll_list name="role_allowed_actions" - tool_tip="For Details of each Allowed Ability see the Abilities tab."> + tool_tip="許可された能力の詳細は「能力」タブをご覧ください。"> <column label="" name="icon" /> <column label="" name="checkbox" /> <column label="" name="action" /> @@ -138,16 +146,16 @@ </panel> <panel name="actions_footer"> <text name="static"> - 説明: + 説明 </text> <text_editor name="action_description"> - これは『グループからメンバーを追放』のアビリティです。オーナーのみ、他のオーナーを追放できます。 + これは「グループからメンバーを追放する」能力です。 オーナーを追放できるのは、別のオーナーだけです。 </text_editor> <text name="static2"> - アビリティを伴う役割 + 役割と能力 </text> <text name="static3"> - アビリティのあるメンバー + 能力のあるメンバー </text> </panel> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_group_voting.xml b/linden/indra/newview/skins/xui/ja/panel_group_voting.xml index c0ca9a0..7b9beac 100644 --- a/linden/indra/newview/skins/xui/ja/panel_group_voting.xml +++ b/linden/indra/newview/skins/xui/ja/panel_group_voting.xml @@ -1,14 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Proposals" name="voting_tab"> +<panel label="提案" name="voting_tab"> <text name="help_text"> - グループ提案は、グループが何をしたいのか、どう思うかなどの意識調査のために使用することができます。あなたに適切な権限があれば、提案を作成したり、有効な提案に対し投票したり、古い提案を閲覧したりすることができます。 + グループの問題提起は、 +グループが何をしたいのか、 +特定のことがらに関してどう思うかなどの意識調査のために使用することができます。 あなたに適切な権限があれば、 +問題提起を作成したり、 +公開中の問題提起に対し投票したり、古い問題提起を閲覧したりすることができます。 </text> <button label="?" name="help_button" /> <text name="proposal_header"> - グループ提案を開く + 公開中のグループ問題提起 </text> <text name="proposals_header_view_txt"> - グループ提案を開く + 公開中のグループ問題提起 </text> <text name="proposals_header_create_txt"> 提案を作成 @@ -17,64 +21,64 @@ 提案投票 </text> <text name="empty_proposal_txt"> - あなたが作成しようとしている提案は空白です。作成前に提案を記入してください。 + あなたが作成しようとしている問題提起は白紙です。 作成する前に、提起する問題を記入してください。 </text> <text name="proposal_instructions"> - 投票したい提案をダブルクリックします。新しい提案を作成するには作成ボタンを押します。 + 投票したい提案をダブルクリックします。新しい提案を作成する場合は、[提案を作成]をクリックします。 </text> <text name="proposal_lbl"> - 提案: + 提案: </text> <button label="提案を作成" label_selected="提案を作成" name="btn_proposal" /> - <button label="提案の閲覧" label_selected="提案の閲覧" + <button label="提案を表示" label_selected="提案を表示" name="btn_view_proposal_item" /> - <button label="リストを見る" label_selected="リストを見る" + <button label="リストを表示" label_selected="リストを表示" name="btn_view_proposal_list" /> <text name="quorum_lbl"> - 定数: + 定足数: </text> <spinner name="quorum" tool_tip="選挙結果取りまとめに必要な全投票者メンバー数#" /> <text name="quorum_text"> - Xの総グループメンバーの内 + 総グループ・メンバー総数xのうち。 </text> <text name="duration_lbl"> - 持続時間: + 継続期間: </text> <spinner name="duration" tool_tip="残りの選挙日数#" /> <text name="duration_text"> - 日 + 日数 </text> <radio_group name="majority" tool_tip="Majority of total votes needed to win."> - 単に大多数 - 大多数の2/3 + 単純過半数 + 2/3以上の多数 満場一致 </radio_group> <text name="start_lbl"> - 投票開始: + 投票開始: </text> <text name="end_lbl"> - 投票終了: + 投票終了: </text> <button label="提案の提出" label_selected="提案の提出" name="btn_submit" /> - <button label="取消" label_selected="取消" name="btn_cancel" /> + <button label="取り消し" label_selected="取り消し" name="btn_cancel" /> <button label="はい" label_selected="はい" name="btn_yes" /> <button label="いいえ" label_selected="いいえ" name="btn_no" /> - <button label="慎む" label_selected="慎む" name="btn_abstain" /> + <button label="やめる" label_selected="やめる" name="btn_abstain" /> <text name="txt"> - グループの投票履歴 + グループ投票履歴 </text> <text name="instructions"> - 結果を閲覧するには、過去の投票や現在の一つを選択し、ダブルクリックしてアイテムを閲覧を開きます。 + 結果を確認するには、[過去の投票]をダブルクリックするか、いずれかの投票を選択した後、[アイテムを表示]をクリックします。 </text> <text name="history_list_lbl"> 過去の投票 投票終了 </text> - <button label="項目を見る" label_selected="項目を見る" + <button label="アイテムを表示" label_selected="アイテムを表示" name="btn_view_history_item" /> <text name="vote_text_lbl"> - 投票の結果: + 投票結果: </text> - <button label="リストを見る" label_selected="リストを見る" + <button label="リストを表示" label_selected="リストを表示" name="btn_view_history_list" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml b/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml index c11ffc2..dc8d01d 100644 --- a/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml +++ b/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml @@ -1,39 +1,39 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Covenant" title="特権"> +<panel name="Covenant" title="約款"> <text name="region_name_lbl"> - 地域: + 地域: </text> <text name="region_name_text"> - (未知) + (不明) </text> <text name="estate_name_lbl"> - 所有地: + 不動産: </text> <text name="estate_name_text"> - (未知) + (不明) </text> <text name="estate_owner_lbl"> 不動産オーナー: </text> <text name="estate_owner_text"> - (未知) + (不明) </text> <text name="resellable_clause"> - この地域で購入した土地は、再販できるかどうかわかりません。 + この地域で購入した土地は、再販が可能な場合とそうでない場合があります。 </text> <text name="changeable_clause"> - この地域で購入した土地は、統合/再分割ができるかどうかわかりません。 + この地域で購入した土地は、統合/再分割が可能な場合とそうでない場合があります。 </text> <text name="can_resell"> - この地域で購入した土地は、再販ができます。 + この地域で購入した土地は、再販できます。 </text> <text name="can_not_resell"> - この地域で購入した土地は、再販ができない可能性があります。 + この地域で購入した土地は、再販できないことがあります。 </text> <text name="can_change"> - この地域で購入した土地は、統合、または再分割ができます。 + この地域で購入した土地は、統合または再分割できます。 </text> <text name="can_not_change"> - この地域で購入した土地は、統合、または再分割ができない可能性があります。 + この地域で購入した土地は、統合/再分割できないことがあります。 </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_login.xml b/linden/indra/newview/skins/xui/ja/panel_login.xml index 2b68724..f00512f 100644 --- a/linden/indra/newview/skins/xui/ja/panel_login.xml +++ b/linden/indra/newview/skins/xui/ja/panel_login.xml @@ -4,36 +4,36 @@ http://secondlife.com/app/login/ </text> <text name="first_name_text"> - 名: + ファーストネーム: </text> <text name="last_name_text"> - 姓: + ラストネーム: </text> <text name="password_text"> - パスワード: + パスワード: </text> <text name="start_location_text"> - 開始位置: + 開始ロケーション: </text> <combo_box name="start_location_combo"> <combo_item name="MyHome"> - 私のホーム + 自宅(ホーム) </combo_item> <combo_item name="MyLastLocation"> - 私の最後の位置 + 最後のロケーション </combo_item> - <combo_item name="<Typeregionname>"> - <Type region name> + <combo_item name="Typeregionname"> + <地域の名前入力> </combo_item> </combo_box> - <check_box label="パスワードを記憶する" name="remember_check" /> + <check_box label="パスワードを記憶" name="remember_check" /> <text name="full_screen_text"> - ビューワーはログインした時にフルスクリーンで表示されます。 + ログイン時にはフルスクリーン表示になります </text> - <button label="新しいアカウント..." - label_selected="新しいアカウント..." name="new_account_btn" /> + <button label="新規アカウント..." label_selected="新規アカウント..." + name="new_account_btn" /> + <button label="環境設定..." label_selected="環境設定..." name="preferences_btn" /> <button label="接続" label_selected="接続" name="connect_btn" /> - <button label="好み..." label_selected="好み..." name="preferences_btn" /> <button label="終了" label_selected="終了" name="quit_btn" /> <text name="version_text"> 1.23.4 (5) diff --git a/linden/indra/newview/skins/xui/ja/panel_media_remote.xml b/linden/indra/newview/skins/xui/ja/panel_media_remote.xml index eebb181..57f54a3 100644 --- a/linden/indra/newview/skins/xui/ja/panel_media_remote.xml +++ b/linden/indra/newview/skins/xui/ja/panel_media_remote.xml @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="music_remote"> - <text type="string" length="1" name="text"> - ムービー・コントロール + <text type="string" length="6" name="text"> + ムービー </text> - <button label="" label_selected="" name="stop_btn" - tool_tip="メディアを停止します。" /> + <volume_slider name="volume_slider" + tool_tip="このスライダーでボリュームを調整" /> + <button label="" label_selected="" name="stop_btn" tool_tip="メディアを停止" /> <button label="" label_selected="" name="play_btn" - tool_tip="メディア・ストリームを再生します。" /> + tool_tip="メディア・ストリームを再生" /> <button label="" label_selected="" name="pause_btn" - tool_tip="メデイア・ストリームを一時停止します。" /> - <volume_slider name="volume_slider" - tool_tip="このスライダーを利用し、ボリュームを変えてください。" /> + tool_tip="メデイア・ストリームを一時停止" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml b/linden/indra/newview/skins/xui/ja/panel_music_remote.xml index 653732c..be4545a 100644 --- a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml +++ b/linden/indra/newview/skins/xui/ja/panel_music_remote.xml @@ -1,14 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="music_remote"> - <text type="string" length="1" name="text"> - ミュージック・コントロール + <text type="string" length="6" name="text"> + ミュージック </text> - <button label="" label_selected="" name="stop_btn" - tool_tip="メディアを停止します。" /> + <volume_slider name="volume_slider" + tool_tip="このスライダーでボリュームを調整" /> + <button label="" label_selected="" name="stop_btn" tool_tip="メディアを停止" /> <button label="" label_selected="" name="play_btn" - tool_tip="メディア・ストリームを再生します。" /> + tool_tip="メディア・ストリームを再生" /> <button label="" label_selected="" name="pause_btn" - tool_tip="メデイア・ストリームを一時停止します。" /> - <volume_slider name="volume_slider" - tool_tip="このスライダーを利用し、ボリュームを変えてください。" /> + tool_tip="メデイア・ストリームを一時停止" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml index 6559425..4b07515 100644 --- a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml +++ b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="overlay"> <button label="受信済みIM" label_selected="受信済みIM" name="IM Received" - tool_tip="インスタント・メッセージが保留になっています。ここをクリックして、IMを見てください。" /> - <button label="取り込み中の解除" label_selected="取り込み中の解除" + tool_tip="保留中のIMが1通あります。 クリックすると表示されます。" /> + <button label="ビジーの解除" label_selected="ビジーの解除" name="Set Not Busy" - tool_tip="『チャット』と『IM』ボタンが隠れています。ここをクリックして『取り込み中』を解除してください。" /> - <button label="キーをはなす" label_selected="キーをはなす" - name="Release Keys" - tool_tip="スクリプトが、あなたのキーを制御しています。ここをクリックして解除してください。" /> + tool_tip="「チャット」と「IM」が非表示になっています。 ここをクリックしてビジー・モードを解除してください。" /> + <button label="キーを解放" label_selected="キーを解放" name="Release Keys" + tool_tip="キーがスクリプトによりロックされています。 解除するには、ここをクリックしてください。" /> <button label="マウスルック" label_selected="マウスルック" name="Mouselook" - tool_tip="見え方を操作するのにマウスを使用してください。銃器を持っている場合、クリックすると発射されます。" /> + tool_tip="視界の移動にマウスを使用。 銃を持っているときは、クリックで発砲" /> <button label="立ち上がる" label_selected="立ち上がる" name="Stand Up" - tool_tip="ここをクリックして、立ち上がってください。" /> + tool_tip="立ち上がるには、ここをクリックします。" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_place.xml b/linden/indra/newview/skins/xui/ja/panel_place.xml index 94520eb..6c1851e 100644 --- a/linden/indra/newview/skins/xui/ja/panel_place.xml +++ b/linden/indra/newview/skins/xui/ja/panel_place.xml @@ -2,5 +2,5 @@ <panel name="Place" title="場所"> <button label="テレポート" name="teleport_btn" /> <button label="地図上に表示" name="map_btn" /> - <button label="入札..." name="auction_btn" /> + <button label="賭ける..." name="auction_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_place_small.xml b/linden/indra/newview/skins/xui/ja/panel_place_small.xml index 94520eb..6c1851e 100644 --- a/linden/indra/newview/skins/xui/ja/panel_place_small.xml +++ b/linden/indra/newview/skins/xui/ja/panel_place_small.xml @@ -2,5 +2,5 @@ <panel name="Place" title="場所"> <button label="テレポート" name="teleport_btn" /> <button label="地図上に表示" name="map_btn" /> - <button label="入札..." name="auction_btn" /> + <button label="賭ける..." name="auction_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml index 5185835..7f693e1 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml @@ -1,59 +1,57 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="オーディオ & ビデオ" name="Media panel"> +<panel label="音声とビデオ" name="Media panel"> <text type="string" length="1" name="muting_text"> - ミューティング: + ミュート: </text> <check_box label="オーディオをミュート" name="disable audio" /> <check_box - label="ウインドウが最小化された時にオーデイオをミュート" + label="ウィンドウが最小化されたときにオーディオをミュート" name="mute_when_minimized" /> <text type="string" length="1" name="streaming_text"> ストリーミング: </text> - <check_box - label="ストリーミング・ミュージックが有効な場合は再生。 (さらなるバンド幅を使用)" + <check_box label="音楽がある場合再生する(通信が重くなる)" name="streaming_music" /> - <check_box - label="ストリーミングビデオが有効な場合を再生。 (さらなるバンド幅を使用)" + <check_box label="動画がある場合再生する(通信が重くなる)" name="streaming_video" /> <text type="string" length="1" name="system_volume_text"> - サウンドエフェクト: + サウンド効果: </text> <text type="string" length="1" name="wind_volume_text"> - 風量: + 風の音量: </text> <text type="string" length="1" name="footsteps_volume_text"> - 歩幅量: + 足音: </text> <text type="string" length="1" name="ui_volume_text"> - UI量: + UI音量: </text> - <spinner label="L$変更基準点" name="L$ Change Threshold" /> + <spinner label="L$変更基準点" name="L$ Change Threshold" /> <spinner label="健康変化基準点" name="Health Change Threshold" /> <text type="string" length="1" name="doppler_effect_text"> ドップラー効果: </text> <text type="string" length="1" name="distance_factor_text"> - 遠隔要因: + 距離係数: </text> <text type="string" length="1" name="rolloff_factor_text"> - 脱線要因: + ロールオフ: </text> <text type="string" length="1" name="default_upload_bitrate_text"> - Bitrateをデフォルトアップロード: + デフォルトUL速度: </text> <radio_group name="bitrate"> <radio_item type="string" length="1" name="32kbps"> - 32 kbps + 32kbps </radio_item> <radio_item type="string" length="1" name="64kbps"> - 64 kbps + 64kbps </radio_item> <radio_item type="string" length="1" name="96kbps"> - 96 kbps + 96kbps </radio_item> <radio_item type="string" length="1" name="128kbps"> - 128 kbps + 128kbps </radio_item> </radio_group> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml index 8247355..3ea0999 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml @@ -1,59 +1,59 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="チャット" name="chat"> <text type="string" length="1" name="text_box"> - チャットのフォントサイズ: + チャットのフォント: </text> <radio_group name="chat font size"> <radio_item type="string" length="1" name="radio"> 小 </radio_item> <radio_item type="string" length="1" name="radio2"> - 中間 + 中 </radio_item> <radio_item type="string" length="1" name="radio3"> 大 </radio_item> </radio_group> <text type="string" length="1" name="text_box2"> - チャットの色: + チャット・カラー: </text> - <color_swatch label="システム" name="system" /> - <color_swatch label="使用者" name="users" /> - <color_swatch label="オブジェクト" name="objects" /> - <color_swatch label="バブル" name="background" /> - <color_swatch label="URLs" name="links" /> + <color_swatch label="システム" name="system" /> + <color_swatch label="ユーザー" name="users" /> + <color_swatch label="物体" name="objects" /> + <color_swatch label="吹出し" name="background" /> + <color_swatch label="URL" name="links" /> <text type="string" length="1" name="text_box3"> - チャットのコンソール: + チャット・コンソール: </text> - <spinner label="チャットがフェードするまでの時間" name="fade_chat_time" /> + <spinner label="フェード" name="fade_chat_time" /> <text type="string" length="1" name="text_box4"> - (秒) + (秒後) </text> <text type="string" length="1" name="text_box5"> - (# ライン) + (行数) </text> <slider label="不透明度" name="console_opacity" /> <text type="string" length="1" name="text_box6"> - チャットのオプション: + チャット・オプション </text> - <check_box label="チャットでは全スクリーン幅を使用します(再起動後)" + <check_box label="チャットに全画面幅を使用(再起動後)" name="chat_full_width_check" /> - <check_box label="戻るを押した後チャットを閉じる" + <check_box label="Enterキーを押した後チャットを閉じる" name="close_chat_on_return_check" /> - <check_box label="チャット中はアバターを矢印キーで移動します" + <check_box + label="チャット中は、いつでも矢印キーでアバターを移動可能" name="arrow_keys_move_avatar_check" /> <check_box label="チャットにタイムスタンプを表示" name="show_timestamps_check" /> <text type="string" length="1" name="text_box7"> - バブルチャット: + チャットの吹き出し: </text> - <check_box label="チャットバブルを表示" name="bubble_text_chat" /> + <check_box label="チャットの吹き出しを表示" name="bubble_text_chat" /> <slider label="不透明度" name="bubble_chat_opacity" /> <text type="string" length="1" name="text_box8"> - スクリプトのエラー: + スクリプト・エラー: </text> - <check_box - label="通常チャットとしてスクリプトのエラーと警告を表示" + <check_box label="スクリプト・エラーと警告をチャット同様に表示" name="script_errors_as_chat" /> <color_swatch label="色" name="script_error" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml index bd820ab..dac17d1 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml @@ -1,26 +1,46 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="一般" name="general_panel"> - <check_box label="ログイン画面でスタート地点を表示" + <combo_box name="location_combobox"> + <combo_item name="MyHome"> + 自宅(ホーム) + </combo_item> + <combo_item name="MyLastLocation"> + 最後のロケーション + </combo_item> + </combo_box> + <check_box label="ログイン画面に開始ロケーションを表示" name="show_location_checkbox" /> - <check_box label="スクリーン上で自分の名前を隠す" - name="show_my_name_checkbox" /> + <radio_group name="fade_out_radio"> + <radio_item type="string" length="1" name="Never"> + なし + </radio_item> + <radio_item type="string" length="1" name="Temporarily"> + 一時的に表示 + </radio_item> + <radio_item type="string" length="1" name="Always"> + いつも + </radio_item> + </radio_group> + <check_box label="画面上で自分の名前を隠す" name="show_my_name_checkbox" /> <check_box label="自分のグループ・タイトルを隠す" name="show_my_title_checkbox" /> <check_box label="小さなアバター名" name="small_avatar_names_checkbox" /> - <check_box label="オンラインフレンド通知を表示" + <color_swatch label="" name="effect_color_swatch" + tool_tip="カラー・ピッカーをクリックして開く" /> + <spinner label="退席までのタイムアウト:" name="afk_timeout_spinner" /> + <check_box label="オンライン・フレンド通知を表示" name="friends_online_notify_checkbox" /> - <check_box label="ミニマップを回転します。" name="rotate_mini_map_checkbox" /> - <check_box label="リンデン・ドル(L$) での収支があった場合に通知する" + <check_box label="ミニマップを回転" name="rotate_mini_map_checkbox" /> + <check_box label="リンデン・ドル(L$)の支払い/受け取りを通知" name="notify_money_change_checkbox" /> - <check_box - label="次回起動時にグラフィック・ハードウェアを自動検出" + <check_box label="次回起動時グラフィックカード自動検出" name="probe_hardware_checkbox" - tool_tip="Second Lifeは、あなたのハードウェアに基き、いくつかのグラフィック設定を自動的に構成します。新しいハードウェアをインストールした場合は、Second Lifeに再度検知させるようにしてください。" /> - <check_box label="デフォルトシステムのカラー選択を使用" + tool_tip="Second Lifeは、あなたのハードウェアに基づいて、いくつかのグラフィック設定を自動的に構成します。 新しいハードウェアをインストールした場合は、Second Lifeに再度検出させるようにしてください。" /> + <check_box label="デフォルト・システムのカラー選択を使用" name="use_system_color_picker_checkbox" - tool_tip="Second Lifeに内臓されているカラー・ピッカーの代わりに、デフォルト・システムのものを利用します。" /> + tool_tip="Second Life内蔵でない、デフォルト・システムのカラー選択を使用" /> <text type="string" length="1" name="start_location_textbox"> - 開始位置: + 開始ロケーション: </text> <text type="string" length="1" name="show_names_textbox"> 名前を表示: @@ -38,51 +58,49 @@ 言語: </text> <text type="string" length="1" name="language_textbox2"> - (Requires restart for full effect) + (完全に反映するには再起動が必要) </text> - <radio_group name="fade_out_radio"> - <radio_item type="string" length="1" name="Never"> - 常に行わない - </radio_item> - <radio_item type="string" length="1" name="Temporarily"> - 一時的に表示 - </radio_item> - <radio_item type="string" length="1" name="Always"> - 常時 - </radio_item> - </radio_group> - <color_swatch label="" name="effect_color_swatch" - tool_tip="クリックしてカラーピッカーを開けてください。" /> - <spinner label="退席までのタイムアウト" name="afk_timeout_spinner" /> <text name="region_name_prompt"> - <Type region name> + <地域の名前入力> </text> <combo_box name="crash_behavior_combobox"> <combo_item type="string" length="1" name="Askbeforesending"> - 送る前に尋ねる + 送る前に確認する </combo_item> <combo_item type="string" length="1" name="Alwayssend"> 常に送信 </combo_item> <combo_item type="string" length="1" name="Neversend"> - 送付しない + 送信しない </combo_item> </combo_box> <combo_box name="language_combobox"> + <combo_item type="string" length="1" name="System Default Language"> + システム・デフォルト + </combo_item> <combo_item type="string" length="1" name="English"> - 英語 (English) + 英語 + </combo_item> + <combo_item type="string" length="1" name="Chinese"> + 中国語 - ベータ </combo_item> <combo_item type="string" length="1" name="Deutsch(German)"> - Deutsch (German) + ドイツ語 - ベータ + </combo_item> + <combo_item type="string" length="1" name="French"> + フランス語 - ベータ </combo_item> <combo_item type="string" length="1" name="(Japanese)"> - 日本語 (Japanese) + 日本語 (日本語) – ベータ版 </combo_item> <combo_item type="string" length="1" name="(Korean)"> - 한국어 (Korean) + 한국어 (韓国語) – ベータ版 </combo_item> - <combo_item type="string" length="1" name="Chinese"> - 中国語 + <combo_item type="string" length="1" name="Portugese"> + ポルトガル語 - ベータ + </combo_item> + <combo_item type="string" length="1" name="Spanish"> + スペイン語 - ベータ </combo_item> </combo_box> </panel> 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 028babd..5ac0c95 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml @@ -1,5 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="グラフィックス" name="Display panel"> +<panel label="表示" name="Display panel"> + <text type="string" length="1" name="text"> + 表示解像度: + </text> + <check_box label="ウィンドウ内で実行" name="windowed mode" /> + <text type="string" length="1" name="Fullscreen Aspect Ratio:"> + 全画面の縦横比: + </text> + <text type="string" length="1" name="(width / height)"> + (幅/高さ) + </text> <combo_box name="aspect_ratio"> <combo_item type="string" length="1" name="4:3(StandardCRT)"> 4:3(標準CRT) @@ -11,17 +21,9 @@ 16:9(ワイドスクリ-ン) </combo_item> </combo_box> - <text type="string" length="1" name="text"> - 表示解像度: - </text> - <text type="string" length="1" name="Fullscreen Aspect Ratio:"> - 全画面率: - </text> - <text type="string" length="1" name="(width / height)"> - (幅/高さ) - </text> + <check_box label="自動検出" name="aspect_auto_detect" /> <text type="string" length="1" name="UI Size:"> - UI規模: + UIサイズ: </text> <text type="string" length="1" name="(meters, lower is faster)"> (メートル、低いほど速い) @@ -29,15 +31,13 @@ <text type="string" length="1" name="text2"> 表示オプション: </text> - <check_box label="ウィンドウ内で起動" name="windowed mode" /> - <check_box label="自動検出" name="aspect_auto_detect" /> <check_box label="解像度単独スケールを使用" name="ui_auto_scale" /> - <check_box label="マウス・ルックでアバターを表示" name="avfp" /> <spinner label="描画距離:" name="draw_distance" /> + <check_box label="アバターをマウスルックで表示" name="avfp" /> <text name="resolution_format"> - [RES_X]×[RES_Y] + [RES_X] x [RES_Y] </text> <text name="aspect_ratio_text"> - [NUM]:[DEN] + [NUM]:[DEN] </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml index 4bb7813..5d14b43 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml @@ -1,57 +1,57 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="グラフィック詳細" name="Display panel 3"> +<panel label="グラフィック1" name="Display panel 3"> <text type="string" length="1" name="text"> - 色合い: + シェーダー: </text> - <check_box label="凸凹表示や輝きを有効にする" name="bumpshiny" /> - <check_box label="水の波紋を有効にします。" name="ripple" /> + <check_box label="バンプマップと輝きを有効にする" name="bumpshiny" /> + <check_box label="水の波紋を有効化" name="ripple" /> <check_box label="アバターVertexプログラム" name="avatarvp" /> <text type="string" length="1" name="Avatar Rendering:"> - アバター・レンダリング: + アバターの描画: </text> <radio_group name="Avatar Appearance"> <radio_item type="string" length="1" name="Normal"> - 通常 + ノーマル </radio_item> <radio_item type="string" length="1" name="Bump"> - 凹凸表示 + バンプマップ </radio_item> <radio_item type="string" length="1" name="Cloth"> - 凹凸表示 & 生地素材の表示 + バンプマップと服 </radio_item> </radio_group> <text type="string" length="1" name="Lighting Detail:"> - ライティング細部: + ライティング詳細: </text> <radio_group name="lighting detail radio"> <radio_item type="string" length="1" name="SunMoon"> - 陽光と月光のみ + 太陽と月のみ </radio_item> <radio_item type="string" length="1" name="LocalLights"> - ローカル・ライトの近く + 近隣のローカル・ライト </radio_item> </radio_group> <text type="string" length="1" name="Terrain Detail:"> - 領域詳細: + 地形詳細: </text> <radio_group name="terrain detail radio"> <radio_item type="string" length="1" name="0"> - 低い + 低 </radio_item> <radio_item type="string" length="1" name="2"> - 高い + 高 </radio_item> </radio_group> <text type="string" length="1" name="Object Mesh Detail:"> - オブジェクト・メッシュ詳細: + オブジェクトメッシュ: </text> <text type="string" length="1" name="Flexible Mesh Detail:"> - フレキシブル・メッシュ詳細: + フレキシブルメッシュ: </text> <text type="string" length="1" name="Tree Mesh Detail:"> - 樹木メッシュ詳細: + 樹木メッシュ: </text> <text type="string" length="1" name="Avatar Mesh Detail:"> - アバター・メッシュ詳細: + アバターメッシュ: </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml index 07afa5c..542e580 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml @@ -1,27 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="アドバンス・グラフィック" name="Display panel 2"> +<panel label="グラフィック2" name="Display panel 2"> <text type="string" length="1" name="Filtering:"> フィルタリング: </text> - <check_box label="異方的フィルタリング(有効時はよりおそい)" + <check_box + label="異方的フィルタリング(有効にすると速度が低下します)" name="ani" /> <spinner label="ガンマ:" name="gamma" /> <text type="string" length="1" name="(brightness, lower is brighter)"> - (明るさ、低いほど明るい、0=デフォルトとして使用) + 0=デフォルト値(最も明るい) </text> <spinner label="夜の明るさ:" name="nighttime_brightness" /> <text type="string" length="1" name="(higher is brighter, 1.0 is default)"> (高いほど明るい、1.0がデフォルト) </text> - <text type="string" length="1" name="AGP Graphics Card:"> - AGPグラフィックカード: + <text type="string" length="1" name="Enable VBO:"> + VBOを有効化: </text> - <check_box - label="AGPを有効にする(AGPグラッフィク・カード使用時に速い)" - name="agp" - tool_tip="標準的PCIグラフィック・カードを使用する場合、この設定を有効にすることで性能を低下させ、より多くのメモリを使用する可能性があります。" /> + <check_box label="OpenGL Vertex Buffer オブジェクトを有効化" name="vbo" + tool_tip="一部のOpenGLドライバは、これを有効化するとクラッシュすることがあります。" /> <text type="string" length="1" name="Graphics Card Memory:"> - グラフィックカードメモリ: + グラフィックメモリ: </text> <radio_group name="video card memory radio"> <radio_item type="string" length="1" name="radio"> @@ -43,10 +42,10 @@ 512MB </radio_item> </radio_group> - <spinner label="霧距離率:" name="fog" /> + <spinner label="霧/視界率:" name="fog" /> <spinner label="最大パーティクル数:" name="particles" /> <spinner label="服装合成限度:" name="comp limit" - tool_tip="最近変更された服装の回数の表示" /> + tool_tip="服装の変更を過去何回まで表示するか" /> <text type="string" length="1" name="(lower is faster)"> (低いほど速い) </text> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml index 225d137..692ea4c 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml @@ -1,19 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="IM" name="im"> +<panel label="コミュニケーション" name="im"> <text type="string" length="1" name="text_box"> - IMのオプション: + オンライン状態: + </text> + <check_box label="オンライン・ステータスをフレンドにのみ見せる" + name="online_visibility" /> + <text type="string" length="1" name="text_box2"> + IMオプション: </text> <text name="log_in_to_change"> - 変更するのにログインする + 変更時にログイン </text> - <check_box label="IMを電子メールに送信([EMAIL])" name="send_im_to_email" /> - <check_box label="チャット履歴に IMを含む" name="include_im_in_chat_history" /> + <check_box label="IMを電子メール([EMAIL])へ送信" name="send_im_to_email" /> + <check_box label="チャット履歴にIMを含める" name="include_im_in_chat_history" /> <check_box label="IMにタイムスタンプを表示" name="show_timestamps_check" /> - <check_box label="Log Instant Messages" name="log_instant_messages" /> - <check_box label="Log Chat" name="log_chat" /> - <check_box label="Show end of last IM conversation" name="log_show_history" /> - <button label="Change Path" label_selected="Change Path" name="log_path_button" /> - <text type="string" length="1" name="text_box2"> - 使用中モードの応答: + <check_box label="IMを記録" name="log_instant_messages" /> + <check_box label="チャットを記録" name="log_chat" /> + <check_box label="最後のIM会話の末尾を表示" name="log_show_history" /> + <button label="パス変更" label_selected="パス変更" name="log_path_button" /> + <text type="string" length="1" name="text_box3"> + ビジー・モード応答: </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml index ce361d2..d116f88 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="インプット & カメラ" name="Input panel"> +<panel label="操作とカメラ" name="Input panel"> <text type="string" length="1" name=" Mouselook Options:"> - マウスルック・オプション: + マウスルック </text> <text type="string" length="1" name=" Mouse Sensitivity:"> - マウス感度: + 感度: </text> + <check_box label="上下を反転" name="invert mouse" /> <text type="string" length="1" name=" Auto Fly Options:"> 自動飛行オプション: </text> + <check_box label="上下矢印キーの長押しで飛行/着地" name="automatic fly" /> <text type="string" length="1" name=" Camera Options:"> - カメラオプション: + カメラ・オプション: </text> <text type="string" length="1" name="Camera Springiness:"> - カメラ起拱点: + カメラ応答性: </text> - <check_box label="マウスを反転" name="invert mouse" /> - <check_box label="上下矢印キーの長押しで飛行/着地" name="automatic fly" /> - <check_box label="自動編集カメラ移動" name="edit camera movement" - tool_tip="編集モードの開始/終了時は、自動カメラ・ポジショニングを使用します。" /> - <check_box label="自動容姿カメラ移動" name="appearance camera movement" - tool_tip="編集モード中は、自動カメラポジショニングを使用します。" /> + <check_box label="編集カメラの自動移動" name="edit camera movement" + tool_tip="編集モードの開始、終了時はカメラ自動位置調整を使用" /> + <check_box label="容姿カメラの自動移動" name="appearance camera movement" + tool_tip="編集モードでは、カメラ自動位置調整を使用" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml index 3d0e048..ec7db5a 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml @@ -1,28 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="ネットワーク" name="network"> <text type="string" length="1" name="text_box"> - M最大バンド幅 + 最大帯域幅: </text> <text type="string" length="1" name="text_box2"> - kbps (毎秒kビット) + Kbps </text> - <text type="string" length="1" name="text_box3"> - デスクシャシーサイズ + <text type="string" length="1" name="cache_size_label_l"> + キャッシュ(MB): </text> - <radio_group name="disk cache"> - <radio_item type="string" length="1" name="radio"> - 50 MB - </radio_item> - <radio_item type="string" length="1" name="radio2"> - 200 MB - </radio_item> - <radio_item type="string" length="1" name="radio3"> - 500 MB - </radio_item> - <radio_item type="string" length="1" name="radio4"> - 1000 MB - </radio_item> - </radio_group> - <button label="キャッシュを消す" label_selected="キャッシュを消す" - name="clear_cache" /> + <button label="クリア" name="clear_cache" /> + <text type="string" length="1" name="cache_location_label"> + キャッシュの場所: + </text> + <button label="設定" label_selected="設定" name="set_cache" /> + <button label="リセット" label_selected="設定" name="reset_cache" /> + <check_box label="カスタム・ポート接続" name="connection_port_enabled" /> + <spinner label="ポート番号:" name="connection_port" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml index 97eba4e..d6cd09a 100644 --- a/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml +++ b/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="目的" name="popups"> +<panel label="ポップアップ" name="popups"> <text type="string" length="1" name="text_box"> - ポップアップを見せない: + ポップアップを表示しない: </text> - <button label="このポップアップを有効にする" - label_selected="このポップアップを有効にする" + <button label="これは表示する" label_selected="これは表示する" name="enable_popup" /> <text type="string" length="1" name="text_box2"> - ポップアップを見せる: + ポップアップを表示: </text> - <button label="'次回表示する'ダイアログをリセット..." - label_selected="'次回表示する'ダイアログをリセット..." + <button label="「次回表示」ダイアログリセット..." + label_selected="「次回表示」ダイアログリセット..." name="reset_dialogs_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml b/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml index 4e569b0..551a5aa 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml @@ -1,50 +1,51 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="特権" name="Covenant"> +<panel label="約款" name="Covenant"> <text name="covenant_help_text"> - 不動産の全ての区画において約款情報に対する変更は表示されます + 約款情報に対する変更は、不動産内のすべての区画に示されます。 </text> <text name="region_name_lbl"> - 地域: + 地域: </text> <text name="region_name_text"> - (未知) + (不明) </text> <text name="estate_name_lbl"> - 所有地: + 不動産: </text> <text name="estate_name_text"> - (未知) + (不明) </text> <text name="covenent_instructions"> - 不動産約款を変更するには、ノートカードをドラッグしドロップしてください。 + ノートカードをドラッグ&ドロップして +この不動産の約款を変更します。 </text> <button label="?" name="covenant_help" /> <button label="リセット" name="reset_covenant" /> <text name="estate_owner_lbl"> - 不動産オーナー: + 不動産所有者: </text> <text name="estate_owner_text"> - (未知) + (不明) </text> <text name="resellable_clause"> - この地域で購入した土地は、再販できるかどうかわかりません。 + この地域で購入した土地は再販が可能な場合と不可能な場合があります。 </text> <text name="changeable_clause"> - この地域で購入した土地は、統合/再分割ができるかどうかわかりません。 + この地域で購入した土地は統合/再分割が可能な場合と不可能な場合があります。 </text> <text_editor name="covenant_editor"> - ローディング... + ロード中... </text_editor> <text name="can_resell"> - この地域で購入した土地は、再販ができます。 + この地域で購入した土地は、再販できます。 </text> <text name="can_not_resell"> - この地域で購入した土地は、再販ができない可能性があります。 + この地域の購入地は再販できないことがあります。 </text> <text name="can_change"> - この地域で購入した土地は、統合、または再分割ができます。 + この地域の購入地は統合または再分割できます。 </text> <text name="can_not_change"> - この地域で購入した土地は、統合、または再分割ができない可能性があります。 + この地域の購入地は統合/再分割できないことがあります。 </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_debug.xml b/linden/indra/newview/skins/xui/ja/panel_region_debug.xml index 5afdb0f..d5d1dbc 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_debug.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_debug.xml @@ -1,37 +1,35 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="デバグ" name="Debug"> +<panel label="デバッグ" name="Debug"> <text name="region_text_lbl"> - 地域: + 地域: </text> <text name="region_text"> 未知 </text> - <check_box label="スクリプトを無効にする" name="disable_scripts_check" - tool_tip="この地域の全てのスクリプトを無効" /> + <check_box label="スクリプト無効化" name="disable_scripts_check" + tool_tip="この地域のスクリプトをすべて無効化" /> <button label="?" name="disable_scripts_help" /> - <check_box label="衝突を無効にする" name="disable_collisions_check" - tool_tip="この地域の非アバター衝突を無効" /> + <check_box label="衝突を無効化" name="disable_collisions_check" + tool_tip="この地域の非アバター衝突を無効化" /> <button label="?" name="disable_collisions_help" /> - <check_box label="フィジックスを無効にする" name="disable_physics_check" - tool_tip="この地域の全ての物理的作用を無効" /> + <check_box label="物理作用を無効化" name="disable_physics_check" + tool_tip="この地域の物理作用をすべて無効化" /> <button label="?" name="disable_physics_help" /> <button label="適用" name="apply_btn" /> <button label="アバターを選択..." name="choose_avatar_btn" /> - <button - label="他の人達の土地にアバターのスクリプト化したオブジェクトを戻す" + <button label="人の土地のアバター・スクリプト・オブジェクトを返却" name="return_scripted_other_land_btn" /> - <button - label="アバター全員のスクリプト化したオブジェクトを戻す" + <button label="アバターのスクリプト・オブジェクトをすべて返却" name="return_scripted_all_btn" /> - <button label="Top Collidersを得る..." name="top_colliders_btn" - tool_tip="最も衝突経験がある可能性の高いオブジェクトのリスト" /> + <button label="上部コライダー取得" name="top_colliders_btn" + tool_tip="衝突する可能性が最も高いオブジェクトのリスト" /> <button label="?" name="top_colliders_help" /> - <button label="Top Scriptsを得る..." name="top_scripts_btn" - tool_tip="スクリプト起動に最も時間を費やしているオブジェクトのリスト" /> + <button label="上部スクリプト取得" name="top_scripts_btn" + tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト" /> <button label="?" name="top_scripts_help" /> - <button label="地域を再起動" name="restart_btn" - tool_tip="2分間のカウント後、地域を再始動します。" /> + <button label="地域再起動" name="restart_btn" + tool_tip="2分間のカウントダウン後、地域を再起動" /> <button label="?" name="restart_help" /> - <button label="再起動を取消" name="cancel_restart_btn" + <button label="再起動取消" name="cancel_restart_btn" tool_tip="地域の再始動の取り消し" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_estate.xml b/linden/indra/newview/skins/xui/ja/panel_region_estate.xml index 3378d89..6777d53 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_estate.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_estate.xml @@ -1,64 +1,65 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="所有地" name="Estate"> +<panel label="不動産" name="Estate"> <text name="estate_help_text"> - このタブの設定の変更はこの所有地のすべての地域に影響します。 + このタブの設定変更で、不動産内の全地域に変更が反映されます。 </text> <text name="estate_text"> - 所有地: + 不動産: </text> <text name="estate_name"> - (未知) + (不明) </text> <text name="owner_text"> - 所有者: + 所有者: </text> <text name="estate_owner"> - (未知) + (不明) </text> <text name="estate_manager_label"> - 所有地マネージャ: + 不動産マネージャー: </text> <button label="?" name="estate_manager_help" /> <button label="追加..." name="add_estate_manager_btn" /> - <button label="取り除く..." name="remove_estate_manager_btn" /> - <check_box label="Global Timeを使用" name="use_global_time_check" /> + <button label="削除..." name="remove_estate_manager_btn" /> + <check_box label="世界時間を使用" name="use_global_time_check" /> <button label="?" name="use_global_time_help" /> - <check_box label="固定の太陽" name="fixed_sun_check" /> + <check_box label="太陽固定" name="fixed_sun_check" /> <button label="?" name="fixed_sun_help" /> - <slider label="位相" name="sun_hour_slider" /> - <check_box label="本土から見える" name="externally_visible_check" /> + <slider label="段階" name="sun_hour_slider" /> + <check_box label="パブリック・アクセス" name="externally_visible_check" /> <button label="?" name="externally_visible_help" /> - <check_box label="ここから本土が見える" name="mainland_visible_check" /> - <button label="?" name="mainland_visible_help" /> <check_box label="直接テレポートを許可" name="allow_direct_teleport" /> <button label="?" name="allow_direct_teleport_help" /> <text name="region_text_lbl"> 支払い状況によりアクセスを拒否: </text> - <check_box label="支払い情報の登録がないものを否認" name="deny_anonymous" /> - <check_box label="支払い情報の登録があるものを否認" name="deny_identified" /> - <check_box label="支払い情報が使用されているものを否認" + <check_box label="支払情報登録がないものを拒否" name="deny_anonymous" /> + <check_box label="支払情報登録があるものを拒否" name="deny_identified" /> + <check_box label="使用されている支払情報を拒否" name="deny_transacted" /> + <text name="abuse_email_text"> + [Abuse E-mail Beta] + </text> <button label="適用" name="apply_btn" /> <text name="allow_resident_label"> - 居住者に許可: + 許可された住人: </text> <button label="?" name="allow_resident_help" /> <button label="追加..." name="add_allowed_avatar_btn" /> - <button label="取り除く..." name="remove_allowed_avatar_btn" /> + <button label="削除..." name="remove_allowed_avatar_btn" /> <text name="allow_group_label"> - グループに許可: + 許可されたグループ: </text> <button label="?" name="allow_group_help" /> <button label="追加..." name="add_allowed_group_btn" /> - <button label="取り除く..." name="remove_allowed_group_btn" /> + <button label="削除..." name="remove_allowed_group_btn" /> <text name="ban_resident_label"> - 居住者に禁止: + 禁止された住人 </text> <button label="?" name="ban_resident_help" /> <button label="追加..." name="add_banned_avatar_btn" /> - <button label="取り除く..." name="remove_banned_avatar_btn" /> - <button label="所有地にメッセージを送信..." name="message_estate_btn" /> - <button label="所有地から使用者を追い出す..." + <button label="削除..." name="remove_banned_avatar_btn" /> + <button label="メッセージを不動産へ送信..." name="message_estate_btn" /> + <button label="土地からユーザーを追い出す..." name="kick_user_from_estate_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_general.xml b/linden/indra/newview/skins/xui/ja/panel_region_general.xml index 25d6f4d..2a1cc65 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_general.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_general.xml @@ -1,29 +1,29 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="地域" name="General"> <text name="region_text_lbl"> - 地域: + 地域: </text> <text name="region_text"> 未知 </text> - <check_box label="フロック土地形成" name="block_terraform_check" /> + <check_box label="土地整備をブロック" name="block_terraform_check" /> <button label="?" name="terraform_help" /> - <check_box label="ブロックフライ" name="block_fly_check" /> + <check_box label="飛行をブロック" name="block_fly_check" /> <button label="?" name="fly_help" /> <check_box label="損害を許可" name="allow_damage_check" /> <button label="?" name="damage_help" /> - <check_box label="プッシングを制限" name="restrict_pushobject" /> + <check_box label="プッシュを制限" name="restrict_pushobject" /> <button label="?" name="restrict_pushobject_help" /> <check_box label="土地の再販を許可" name="allow_land_resell_check" /> <button label="?" name="land_resell_help" /> <check_box label="区画統合/分割を許可" name="allow_parcel_changes_check" /> <button label="?" name="parcel_changes_help" /> - <spinner label="エージェントの制限" name="agent_limit_spin" /> + <spinner label="人物の制限" name="agent_limit_spin" /> <button label="?" name="agent_limit_help" /> - <spinner label="オブジェクトボーナス" name="object_bonus_spin" /> + <spinner label="物体ボーナス" name="object_bonus_spin" /> <button label="?" name="object_bonus_help" /> - <text label="年齢制限" name="access_text"> - 年齢制限: + <text label="成人指定" name="access_text"> + 成人指定: </text> <combo_box label="成人" name="access_combo"> <combo_item name="PG"> @@ -35,10 +35,8 @@ </combo_box> <button label="?" name="access_help" /> <button label="適用" name="apply_btn" /> - <button label="ホームのひとりの使用者にテレポートする..." - name="kick_btn" /> - <button label="ホームの使用者全員にテレポートする..." - name="kick_all_btn" /> - <button label="地域にメッセージを送信..." name="im_btn" /> - <button label="テレハブを管理する..." name="manage_telehub_btn" /> + <button label="ユーザー1人ホームテレポート" name="kick_btn" /> + <button label="ユーザー全員ホームテレポート" name="kick_all_btn" /> + <button label="メッセージを領域へ送信..." name="im_btn" /> + <button label="テレハブの管理..." name="manage_telehub_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml b/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml index 80e1420..d77f974 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml @@ -1,30 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="土地" name="Terrain"> +<panel label="地形" name="Terrain"> <text name="region_text_lbl"> - 地域: + 地域: </text> <text name="region_text"> 未知 </text> - <spinner label="水の高さ" name="water_height_spin" /> + <spinner label="水面の高さ" name="water_height_spin" /> <button label="?" name="water_height_help" /> - <spinner label="土地の上限値" name="terrain_raise_spin" /> + <spinner label="地形の上昇限度" name="terrain_raise_spin" /> <button label="?" name="terrain_raise_help" /> - <spinner label="土地の下限値" name="terrain_lower_spin" /> + <spinner label="地形の下降限度" name="terrain_lower_spin" /> <button label="?" name="terrain_lower_help" /> - <check_box label="Estate Sunを使用" name="use_estate_sun_check" /> + <check_box label="不動産太陽使用" name="use_estate_sun_check" /> <button label="?" name="use_estate_sun_help" /> - <check_box label="固定の太陽" name="fixed_sun_check" /> + <check_box label="太陽固定" name="fixed_sun_check" /> <button label="?" name="fixed_sun_help" /> - <slider label="位相" name="sun_hour_slider" /> + <slider label="段階" name="sun_hour_slider" /> <button label="適用" name="apply_btn" /> - <button label="RAW地形のダウンロード..." name="download_raw_btn" - tool_tip="不動産オーナーのみ利用可能です。管理者は利用できません。" /> + <button label="RAW地形ダウンロード..." name="download_raw_btn" + tool_tip="不動産オーナーのみ利用可能、管理者は利用不可" /> <button label="?" name="download_raw_help" /> - <button label="RAW地形のアップロード..." name="upload_raw_btn" - tool_tip="不動産オーナーのみ利用可能です。管理者は利用できません。" /> + <button label="RAW地形アップロード..." name="upload_raw_btn" + tool_tip="不動産オーナーのみ利用可能、管理者は利用不可" /> <button label="?" name="upload_raw_help" /> - <button label="土地を焼く" name="bake_terrain_btn" - tool_tip="現在の領域を境界を上昇/下降させる中間点として設定してください。" /> + <button label="地形の構築" name="bake_terrain_btn" + tool_tip="現在の地形を上昇/下降範囲の中間点として設定" /> <button label="?" name="bake_terrain_help" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_region_texture.xml b/linden/indra/newview/skins/xui/ja/panel_region_texture.xml index e3590d1..6527f0f 100644 --- a/linden/indra/newview/skins/xui/ja/panel_region_texture.xml +++ b/linden/indra/newview/skins/xui/ja/panel_region_texture.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="グラウンドテクスチャー" name="Textures"> +<panel label="地面テクスチャー" name="Textures"> <text name="region_text_lbl"> - 地域: + 地域: </text> <text name="region_text"> 未知 </text> - <text name="base_texture_text"> - 基本テクスチャー (128x128を要求, 24 ビット .tga ファイル) + <text name="detail_texture_text"> + 地形のテクスチャー (512x512、24ビット .tgaファイルが必要) </text> <text name="height_text_lbl"> - 1 (低) + 1(低) </text> <text name="height_text_lbl2"> 2 @@ -19,54 +19,39 @@ 3 </text> <text name="height_text_lbl4"> - 4 (高) - </text> - <text name="detail_texture_text"> - 詳細テクスチャー (128x128を要求, 24 ビット .tga ファイル) + 4(高) </text> <text name="height_text_lbl5"> - 1 (低) + テクスチャー標高範囲 </text> <text name="height_text_lbl6"> - 2 + 南西 </text> <text name="height_text_lbl7"> - 3 + 北西 </text> <text name="height_text_lbl8"> - 4 (高) + 南東 </text> <text name="height_text_lbl9"> - Texture Elevation Ranges + 北東 </text> + <spinner label="低" name="height_start_spin_0" /> + <spinner label="低" name="height_start_spin_1" /> + <spinner label="低" name="height_start_spin_2" /> + <spinner label="低" name="height_start_spin_3" /> + <spinner label="高" name="height_range_spin_0" /> + <spinner label="高" name="height_range_spin_1" /> + <spinner label="高" name="height_range_spin_2" /> + <spinner label="高" name="height_range_spin_3" /> <text name="height_text_lbl10"> - 南西 + これらの数字は、上記のテクスチャーをブレンドする範囲を表します。 </text> <text name="height_text_lbl11"> - 北西 + 計測の単位はメートルで、「低」の値はテクスチャー#1の表示高さの最大値です。 </text> <text name="height_text_lbl12"> - 南東 - </text> - <text name="height_text_lbl13"> - 北東 - </text> - <spinner label="低い" name="height_start_spin_0" /> - <spinner label="低い" name="height_start_spin_1" /> - <spinner label="低い" name="height_start_spin_2" /> - <spinner label="低い" name="height_start_spin_3" /> - <spinner label="高い" name="height_range_spin_0" /> - <spinner label="高い" name="height_range_spin_1" /> - <spinner label="高い" name="height_range_spin_2" /> - <spinner label="高い" name="height_range_spin_3" /> - <text name="height_text_lbl14"> - これらの価値は、上記のテクスチャーのためのブレンドの範囲を表わしています。 - </text> - <text name="height_text_lbl15"> - Mメーターで測り、LOW 値は、Texture #1のMAXIMUM の高さです。 - </text> - <text name="height_text_lbl16"> - そしてHIGH の値はTexture #4のMINIMUMの高さです。 + そして「高」の値はテクスチャー#4の高さの下限となります。 </text> <button label="適用" name="apply_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml b/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml index fe5fd12..b7e334d 100644 --- a/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml +++ b/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> <text type="string" length="1" name="Loading..."> - ローディング... + ロード中... </text> <text type="string" length="1" name="Loading...2"> - ローディング... + ロード中... </text> <button label="" label_selected="" name="less" /> <button label="" label_selected="" name="more" /> diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml b/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml index 75c57c2..34a1a0d 100644 --- a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml +++ b/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml @@ -1,59 +1,58 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="chat" title="会話"> <text> - チャットのフォントサイズ: + チャットのフォント: </text> <radio_group name="chat font size"> <radio_item> 小 </radio_item> <radio_item> - 中間 + 中 </radio_item> <radio_item> 大 </radio_item> </radio_group> <text> - チャットの色: + チャット・カラー: </text> <color_swatch label="システム" name="system" /> - <color_swatch label="使用者" name="users" /> + <color_swatch label="ユーザー" name="users" /> <color_swatch label="オブジェクト" name="objects" /> - <color_swatch label="バブル" name="background" /> + <color_swatch label="吹き出し" name="background" /> <text> - チャットのコンソール: + チャット・コンソール: </text> - <spinner label="チャットがフェードするまでの時間" name="fade_chat_time" /> + <spinner label="フェード" name="fade_chat_time" /> <text> - (秒) + (秒後) </text> <spinner label="" name="max_chat_count" /> <text> - (# ライン) + (行数) </text> <slider label="不透明度" name="console_opacity" /> <text> - チャットのオプション: + チャット・オプション </text> - <check_box label="チャットでは全スクリーン幅を使用します(再起動後)" + <check_box label="チャットに全画面幅を使用(再起動後)" name="chat_full_width_check" /> - <check_box label="戻るを押した後チャットを閉じる" + <check_box label="Enterキーを押した後チャットを閉じる" name="close_chat_on_return_check" /> - <check_box label="チャット中はアバターを矢印キーで移動します" + <check_box label="チャット中は、矢印キーでアバターを移動可能" name="arrow_keys_move_avatar_check" /> <check_box label="チャットにタイムスタンプを表示" name="show_timestamps_check" /> <text> - バブルチャット: + チャットの吹き出し: </text> - <check_box label="チャットバブルを表示" name="bubble_text_chat" /> + <check_box label="チャットの吹き出しを表示" name="bubble_text_chat" /> <slider label="不透明度" name="bubble_chat_opacity" /> <text> - スクリプトのエラー: + スクリプト・エラー: </text> - <check_box - label="通常チャットとしてスクリプトのエラーと警告を表示" + <check_box label="スクリプト・エラーと警告をチャット同様に表示" name="script_errors_as_chat" /> <color_swatch label="色" name="script_error" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml b/linden/indra/newview/skins/xui/ja/panel_settings_im.xml index 11aec21..39b9b5e 100644 --- a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml +++ b/linden/indra/newview/skins/xui/ja/panel_settings_im.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="im" title="IM"> <text> - IMのオプション: + IMオプション: </text> - <check_box label="Eメールに IMを送信" name="send_im_to_email" - tool_tip="secondlife.comであなたのEメールのアドレスを変更" /> - <check_box label="チャット履歴に IMを含む" name="include_im_in_chat_history" /> + <check_box label="IMを電子メールへ送信" name="send_im_to_email" + tool_tip="secondlife.com上の電子メール・アドレスを変更" /> + <check_box label="チャット履歴にIMを含める" name="include_im_in_chat_history" /> <check_box label="IMにタイムスタンプを表示" name="show_timestamps_check" /> <text> - 使用中モードの応答: + ビジー・モード応答: </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml index 8d86da7..b4c481d 100644 --- a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml +++ b/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="目的" name="popups" title="目的"> +<panel label="ポップアップ" name="popups" title="ポップアップ"> <text> - ポップアップを見せない: + ポップアップを表示しない: </text> - <button label="このポップアップを有効にする" name="enable_popup" /> + <button label="これは表示する" name="enable_popup" /> <text> - ポップアップを見せる: + ポップアップを表示: </text> - <button label="'次回表示する'ダイアログをリセット..." + <button label="「次回表示」ダイアログリセット..." name="reset_dialogs_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml b/linden/indra/newview/skins/xui/ja/panel_settings_network.xml index 076cd51..65fe03d 100644 --- a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml +++ b/linden/indra/newview/skins/xui/ja/panel_settings_network.xml @@ -1,59 +1,58 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="network" title="ネットワーク"> <text> - M最大バンド幅 + 最大帯域幅: </text> <slider label="" name="max_bandwidth" /> <text> - kbps (毎秒kビット) + Kbps </text> <text> - デスクシャシーサイズ + ディスク・キャッシュのサイズ: </text> <radio_group name="disk cache"> <radio_item> - 50 MB + 50MB </radio_item> <radio_item> - 200 MB + 200MB </radio_item> <radio_item> - 500 MB + 500MB </radio_item> <radio_item> - 1000 MB + 100MB </radio_item> </radio_group> - <button label="キャッシュを消す" name="clear_cache" /> + <button label="クリア" name="clear_cache" /> <text> - プロキシの構成: + プロキシー構成: </text> <check_box label="プロキシを使用" name="proxy_enabled" - tool_tip="プロキシ構成を指定する" /> + tool_tip="プロキシーの構成を指定" /> <text> - プロキシ: + プロキシー: </text> <line_editor name="proxy_address" - tool_tip="あなたが使用したいプロキシの名前あるいはIPアドレス" /> + tool_tip="使用するプロキシの名前またはIPアドレス" /> <text> - ポート: + ポート: </text> - <line_editor name="proxy_port" - tool_tip="あなたが使用したいプロキシのポート番号" /> + <line_editor name="proxy_port" tool_tip="使用するプロキシのポート番号" /> <text> - ソックス: + 靴下: </text> <radio_group name="socks_4_5"> <radio_item> - Socks v4 + 靴下v4 </radio_item> <radio_item> - Socks v5 + 靴下v5 </radio_item> </radio_group> <text> - プロキシなし: + プロキシーがありません: </text> <line_editor name="proxy_exclusions" - tool_tip="あなたが使用したいプロキシの名前あるいはIPアドレス" /> + tool_tip="プロキシを使用しない名前またはIPアドレス" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml b/linden/indra/newview/skins/xui/ja/panel_settings_web.xml index 334f7a4..35ea206 100644 --- a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml +++ b/linden/indra/newview/skins/xui/ja/panel_settings_web.xml @@ -1,55 +1,54 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="web" title="ウェブ"> <check_box - label="外部ウェブブラウザを使用(Firefox, Safari, Internet Explorer)" + label="外部のウェブ・ブラウザー(Firefox, Safari, Internet Explorer)を使用" name="external_browser_check" - tool_tip="ヘルプ、Webリンクなどのために、外部Webブラウザを使用します。¥nフル画面で実行している場合には推奨できません。" /> + tool_tip="ヘルプ、ウェブリンクなどに、外部のウェブ・ブラウザーを使用。\nフルスクリーン起動時には推奨されない。" /> <text> - ホームページをブラウズ: + ブラウザーのホーム・ページ: </text> <line_editor name="home_page" - tool_tip="初めて訪れるウェブページでは、あなたはSecond Lifeのブラウザを開き使用します。" /> + tool_tip="初めてSecond Lifeブラウザーを開くために訪れるウェブ・ページ" /> <text> - プロキシの構成: + プロキシー構成: </text> - <check_box label="内部ウェブブラウザにプロキシを使用" + <check_box label="内部ウェブ・ブラウザーにプロキシを使用" name="proxy_enabled" - tool_tip="内部Web Browserようにプロキシ構成を指定する" /> + tool_tip="内蔵ブラウザー用のプロキシー構成を指定" /> <text> - プロキシ: + プロキシー: </text> <line_editor name="proxy_address" - tool_tip="あなたが使用したいプロキシの名前あるいはIPアドレス" /> + tool_tip="使用するプロキシの名前またはIPアドレス" /> <text> - ポート: + ポート: </text> - <line_editor name="proxy_port" - tool_tip="あなたが使用したいプロキシのポート番号" /> + <line_editor name="proxy_port" tool_tip="使用するプロキシのポート番号" /> <text> - ソックス: + 靴下: </text> <radio_group name="socks_4_5"> <radio_item> - Socks v4 + 靴下v4 </radio_item> <radio_item> - Socks v5 + 靴下v5 </radio_item> </radio_group> <text> - プロキシなし: + 次に対応するプロキシーがありません: </text> <line_editor name="proxy_exclusions" - tool_tip="あなたが使用したいプロキシの名前あるいはIPアドレス" /> + tool_tip="プロキシを使用しない名前またはIPアドレス" /> <check_box - label="オブジェクト上にウェブページを表示(経験的に, 再起動が必要)" + label="オブジェクトに関するウェブ・ページを表示(実験中、再起動要)" name="web_pages_on_prims_check" /> <text> - 信頼されたサイト: -(ロクインして見る) + 信用できるサイト: +(ログインして表示する) </text> <button label="追加" name="add_trusted" /> <line_editor name="trusted_site_entry" - tool_tip="信頼されたリストに追加するためのサイト" /> - <button label="取り除く" name="rem_trusted" /> + tool_tip="このサイトを信頼できるサイトのリストに追加する。" /> + <button label="削除" name="rem_trusted" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_status_bar.xml b/linden/indra/newview/skins/xui/ja/panel_status_bar.xml index 35f04c9..e8052bb 100644 --- a/linden/indra/newview/skins/xui/ja/panel_status_bar.xml +++ b/linden/indra/newview/skins/xui/ja/panel_status_bar.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="status"> <text type="string" length="1" name="ParcelNameText" - tool_tip="Name of land parcel on which you are standing. Click for About Land."> - ここに区画名を記入 + tool_tip="あなたが立っている土地区画の名前。 「土地情報」をクリックしてください。"> + 区画名はここです </text> <text type="string" length="1" name="BalanceText" tool_tip="口座残高"> - L$ + L$ </text> - <button label="" label_selected="" name="buycurrency" tool_tip="通貨の購入" /> - <text type="string" length="12" name="TimeText" tool_tip="現時刻(太平洋時)"> + <button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入" /> + <text type="string" length="12" name="TimeText" tool_tip="現在時刻(太平洋時)"> 12:00 AM </text> <button label="" label_selected="" name="scriptout" @@ -18,15 +18,14 @@ 100% </text> <button label="" label_selected="" name="fly" tool_tip="飛行禁止" /> - <button label="" label_selected="" name="build" tool_tip="建造禁止" /> - <button label="" label_selected="" name="scripts" tool_tip="スクリプト禁止" /> - <button label="" label_selected="" name="restrictpush" - tool_tip="llPushObjectを制限します。" /> - <button label="" label_selected="" name="buyland" tool_tip="この区画の購入" /> + <button label="" label_selected="" name="build" tool_tip="作成禁止" /> + <button label="" label_selected="" name="scripts" tool_tip="スクリプトなし" /> + <button label="" label_selected="" name="restrictpush" tool_tip="llPushObjectを制限" /> + <button label="" label_selected="" name="buyland" tool_tip="この区画を購入" /> <text name="packet_loss_tooltip"> - パケット紛失 + パケット損失 </text> <text name="bandwidth_tooltip"> - バンド幅 + 帯域幅 </text> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml index 189e5a3..49c3cb2 100644 --- a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml +++ b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml @@ -1,22 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="panel_toolbar"> <button label="IM" name="im_btn" - tool_tip="あなたの友達へインスタントメッセージ" /> + tool_tip="フレンドとインスタント・メッセージ" /> <button label="チャット" name="chat_btn" - tool_tip="近くの人と話をしてみてください。 会話内容を見るには、『チャット』、そして『履歴』をクリックしてください。" /> - <button label="友達" name="friends_btn" - tool_tip="仲間を見つけ、そしてコミュニケーションします。" /> - <button label="飛ぶ" label_selected="Stop Flying" name="fly_btn" - tool_tip="E/C or PgUp/PgDnを使用し、上下に飛行する。" /> + tool_tip="近くの人と話をします。 (Enter)" /> + <button label="フレンド" name="friends_btn" + tool_tip="フレンドを探して会話する" /> + <button label="飛行" label_selected="飛行を停止" name="fly_btn" + tool_tip="飛行開始。 EキーまたはPageUpキーで上昇、CキーまたはPageDownキーで下降。" /> <button label="スナップショット" name="snapshot_btn" - tool_tip="ディスクか持ち物にスクリーンショットを保存します。" /> + tool_tip="スクリーンショットをディスクまたは持ち物に保存します。" /> <button label="検索" name="directory_btn" - tool_tip="場所、イベント、人々、そして、もっと色々見つけてください。" /> - <button label="立てる" name="build_btn" - tool_tip="新しいオブジェクトを作成" /> - <button label="小さい地図" name="radar_btn" - tool_tip="あなたの周りのエリアの地図。 (Ctrl-Shift-M)" /> - <button label="地図" name="map_btn" tool_tip="世界の地図。 (Ctrl-M)" /> - <button label="在庫目録" name="inventory_btn" - tool_tip="あなたの項目. (Ctrl-I)" /> + tool_tip="場所、イベント、人など、さまざまな対象を検索できます。" /> + <button label="建造" name="build_btn" tool_tip="オブジェクト新規作成" /> + <button label="ミニマップ" name="radar_btn" + tool_tip="あなたの周辺領域の地図。 (Ctrl+Shift+M)" /> + <button label="地図" name="map_btn" tool_tip="世界地図。 (Ctrl+Enter)" /> + <button label="持ち物" name="inventory_btn" + tool_tip="あなたのアイテム。 (Ctrl-I)" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/panel_top_pick.xml b/linden/indra/newview/skins/xui/ja/panel_top_pick.xml index 40f6fbf..1fa150b 100644 --- a/linden/indra/newview/skins/xui/ja/panel_top_pick.xml +++ b/linden/indra/newview/skins/xui/ja/panel_top_pick.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Pick" title="ピック"> +<panel name="Pick" title="選択"> <button label="設定" name="set_location_btn" /> <button label="テレポート" name="pick_teleport_btn" /> <button label="地図上に表示" name="pick_map_btn" /> <text name="sort_order_text"> - 仕分け: + 振り分け: </text> - <check_box label="有効" name="enabled_check" /> + <check_box label="有効化" name="enabled_check" /> </panel> diff --git a/linden/indra/newview/skins/xui/ja/role_actions.xml b/linden/indra/newview/skins/xui/ja/role_actions.xml index c5fe1b7..dc3010d 100644 --- a/linden/indra/newview/skins/xui/ja/role_actions.xml +++ b/linden/indra/newview/skins/xui/ja/role_actions.xml @@ -1,187 +1,184 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <role_actions> <action_set - description="これらのアビリティには、グループメンバーの追加、排除、および招待無しで新メンバーを参加させる権限が含まれます。" + description="これらの能力には、グループ・メンバーを追加、排除し、招待状なしに新メンバーの参加を認める権限が含まれます。" name="Membership"> - <action description="グループに人を招待" - longdescription="Invite People to this Group using the 'Invite New Person...' button in the Members & Roles tab > Members sub-tab." + <action description="このグループに人を招待" + longdescription="グループに人を招待するには、[メンバーと役割]タブ>[メンバー]サブタブの[新しい人を招待...]ボタンを使います。" name="member invite" /> - <action description="グループからメンバーを追放" - longdescription="Eject Members from this Group using the 'Eject From Group' button in the Members & Roles tab > Members sub-tab. An Owner can eject anyone except another Owner. If you're not an Owner, a Member can be ejected from a group if, and only if, they're only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the 'Remove Members from Roles' Ability." + <action description="メンバーをこのグループから追放" + longdescription="メンバーをこのグループから追放するには、[メンバーと役割]タブ > [役割]サブタブの[グループから追放]を使います。 オーナーは、他のオーナー以外の任意のメンバーを追放できます。 オーナーでないユーザーがグループからメンバーを追放できるのは、そのメンバーが「全員」の役割にのみ所属しており、他の役割に所属していない場合だけです。 役割からメンバーを除外するには、「役割からメンバーを除外」能力を有している必要があります。" name="member eject" /> - <action - description="『自由に入会』に切り替え、『参加費用』を変更" - longdescription="Toggle 'Open Enrollment' to let new Members join without an invitation, and change 'Signup Fee' in the Group Preferences section of the General tab." + <action description="[会員募集]に切り替え、[入会費]を変更。" + longdescription="招待状なしに新メンバーが加入できるように[会員募集]に切り替え、[一般]タブの[グループ環境設定]セクションから[入会費]を変更します。" name="member options" /> </action_set> <action_set - description="これらのアビリティには、グループ役割を追加、排除、変更、そして役割へのメンバーの追加、排除、更に役割へアビリティを割り当てる権限が含まれます。" + description="これらの能力には、グループ内の役割を追加、削除、変更し、役割にメンバーを追加、削除し、さらに役割へ能力を割り当てる権限が含まれます。" name="Roles"> <action description="新しい役割を作成" - longdescription="Create new Roles in the Members & Roles tab > Roles sub-tab." + longdescription="[メンバーと役割]タブ > [役割]サブタブで新しい役割を作成" name="role create" /> - <action description="役割の削除" - longdescription="Delete Roles in the Members & Roles tab > Roles sub-tab." + <action description="役割を削除" + longdescription="役割を削除するには、メンバーと役割タブ > 役割サブタブを使います。" name="role delete" /> <action description="役割名、タイトル、説明を変更" - longdescription="Change Role names, titles, and descriptions at the bottom of the the Members & Roles tab > Roles sub-tab after selecting a Role." + longdescription="役割名、タイトル、説明を変更するには、役割を選択した後、[メンバーと役割]タブ > [役割]サブタブの下部分を使います。" name="role properties" /> - <action description="割り当て人の役割にメンバーを割り当てる" - longdescription="Assign Members to Roles in the Assigned Roles section of the Members & Roles tab > Members sub-tab. A member with this power can only add members to a role the assigner is already in." + <action description="メンバーを割り当て人の役割に割り当てる" + longdescription="メンバーを割り当て人の役割に割り当てるには、[メンバーと役割]タブ>[役割]サブタブの割り当てられた役割セクションを使います。 この能力を持つメンバーは、割り当て人が現在所属している役割に対してのみメンバーを追加できます。" name="role assign member limited" /> - <action description="いずれかの役割にメンバーを割り当てる" - longdescription="Assign Members to Any Role in the Assigned Roles section of the Members & Roles tab > Members sub-tab. *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--to Roles that have more powers than they currently have, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." + <action description="メンバーを任意の役割に割り当てる" + longdescription="メンバーを任意の役割に割り当てるには、[メンバーと役割]タブ>[役割]サブタブの割り当てられた役割セクションを使います。 *警告* この能力を持つ役割のメンバーは、自分自身や他のメンバーを現在の役割よりも強力な役割に割り当てることができます。このため、オーナー以外のメンバーに対して、オーナーに近いパワーを与えることも可能です。 この能力の割り当ては、そのことを理解した上で行ってください。" name="role assign member" /> - <action description="役割からメンバーを除外" - longdescription="Remove Members from Roles in the Assigned Roles section of the Members & Roles tab > Members sub-tab. Owners can't be removed." + <action description="役割からメンバーを解除" + longdescription="メンバーを役割から解除するには、[メンバーと役割]タブ>[メンバー]サブタブの[割り当てられた役割]セクションを使います。 オーナーは解除できません。" name="role remove member" /> - <action - description="役割におけるアビリティの割り当て、排除を行う" - longdescription="Assign and Remove Abilities in Roles in the Allowed Abilities section of the Members & Roles tab > Roles sub-tab. *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--all Abilities, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." + <action description="役割の能力の割り当てと解除" + longdescription="役割の能力の割り当てと解除は、[メンバーと役割]タブ>[役割]サブタブの許可された能力セクションで行います。 *警告* この能力を持つ役割のメンバーは、すべての能力を自分自身や他のメンバーに割り当てることができます。このため、オーナー以外のメンバーに対して、オーナーに近いパワーを持たせることも可能です。 この能力の割り当ては、そのことを理解した上で行ってください。" name="role change actions" /> </action_set> <action_set - description="これらのアビリティには、公開性、特権、記章等の本グループの特徴を修正する権限が含まれます。" + description="これらの能力には、グループの公開性や憲章、記章の変更といった、グループのアイデンティティを修正する権限が含まれます。" name="Group Identity"> <action - description="特権、記章、『Web上で公開』、およびグループ情報内で可視のメンバーを変更" - longdescription="Change Charter, Insignia, 'Publish on the Web', and which members are publicly visible in Group Information. This is done in the General tab." + description="特権、記章、「Web上で公開」、およびグループ情報内で可視のメンバーを変更。" + longdescription="特権、記章、「Web上で公開」、およびグループ情報内で可視のメンバーを変更します。 この操作には、一般タブを使用します。" name="group change identity" /> </action_set> <action_set - description="これらのアビリティには、このブループの所有する土地の譲渡、修正、販売する権限が含まれます。土地に関する情報は、地面を右クリックし、『土地情報』を選択するか、メニューバーの『区画情報』をクリックします。" + description="これらの能力には、グループ所有の土地を譲渡、修正、販売する権限が含まれます。 [土地情報]のウィンドウを開くには、地面を右クリックして[土地情報]を選択するか、メニューバーの[区画情報]をクリックします。" name="Parcel Management"> - <action description="グループに土地譲渡、購入を行う" - longdescription="Deed land and buy land for group. This is done in About Land > General tab." + <action description="グループ用の土地の譲渡と購入" + longdescription="グループ用の土地の譲渡と購入を行います。 この操作には、土地情報画面 > 一般タブを使います。" name="land deed" /> - <action description="Governor Lindenに土地を受け渡す" - longdescription="Abandon land to Governor Linden. *WARNING* Any Member in a Role with this Ability can abandon group-owned land in About Land > General tab, reverting it to Linden ownership without a sale! Be sure you know what you're doing before assigning this Ability." + <action description="Linden総督に土地を明け渡す" + longdescription="Linden総督に土地を明け渡します。 *警告* この能力を持つ役割のメンバーは、[土地情報]>[一般]でグループ所有の土地を放棄して、売り上げなしでLinden総督に明け渡すことができます。 この能力の割り当ては、そのことを理解した上で行ってください。" name="land release" /> <action description="売り地情報の設定" - longdescription="Set land for sale info. *WARNING* Any Member in a Role with this Ability can sell group-owned land in About Land > General tab as they wish! Be sure you know what you're doing before assigning this Ability." + longdescription="売り地情報を設定します。 *警告* この能力を持つ役割のメンバーは、[土地情報]>[一般]タブでグループ所有の土地を自分の思いどおりに販売することができます。 この能力の割り当ては、そのことを理解した上で行ってください。" name="land set sale info" /> - <action description="区画の再分割、および統合" - longdescription="Subdivide and join parcels. This is done by right-clicking the ground, 'Edit Terrain', and dragging your mouse on the land to make a selection. To subdivide, select what you want to split and click 'Subdivide...'. To join, select two or more contiguous parcels and click 'Join...'. " + <action description="区画の再分割と統合" + longdescription="区画を再分割および統合します。 この操作を実行するには、地面を右クリックして[地形を編集]を選択し、土地の上でマウスをドラッグして範囲を選択します。 再分割するには、分割対象を選択した後、[再分割...]をクリックします。 統合するには、複数の隣接する区画を選択した後、[統合...]をクリックします。" name="land divide join" /> </action_set> <action_set - description="これらのアビリティには、区画名、公開設定、検索ディレクトリへの登録、着陸地点およびTPルートのオプションを変更する権限が含まれます。" + description="これらの能力には、区画名、公開設定、検索ディレクトリへの登録、着地点ならびにTPルートのオプションを変更する権限が含まれます。" name="Parcel Identity"> - <action - description="『場所検索に表示』に切り替え、カテゴリを設定" - longdescription="Toggle 'Show in Find Places' and setting a parcel's category in About Land > Options tab." + <action description="[場所検索に表示]に切り替え、カテゴリーを設定" + longdescription="[場所検索に表示]に切り替え、[土地情報]>[オプション]タブでカテゴリーを設定" name="land find places" /> - <action description="区画名、説明、『Web上で公開』の設定を変更" - longdescription="Change parcel name, description, and 'Publish on the Web' settings. This is done in About Land > Options tab." + <action description="区画名、説明、「Web上で公開」の設定を変更" + longdescription="区画名、説明、「Web上で公開」の設定を変更。 この操作には、[土地情報] > [オプション]タブを使います。" name="land change identity" /> - <action description="着陸地点、テレポート・ルートを設定" - longdescription="On a group-owned parcel, Members in a Role with this Ability can set a landing point to specify where incoming teleports arrive, and also set teleport routing for further control. This is done in About Land > Options tab." + <action description="着地点およびテレポート・ルートを設定" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画上で着地点を設定することにより外部からのテレポートの到着位置を指定できると共に、テレポート・ルートを設定して細かく制御することができます。 この操作は、[土地情報]>[オプション]タブで行います。" name="land set landing point" /> </action_set> <action_set - description="これらのアビリティには、『オブジェクトの作成』『土地編集』および音楽とメディアの設定等の区画オプションに関する権限が含まれます。" + description="これらの能力には、[オブジェクトを作成]、[地形を編集]、音楽とメディアの設定など、区画のオプションに関連する権限が含まれます。" name="Parcel Settings"> - <action description="音楽、メディア設定を変更" - longdescription="Change streaming music and movie settings in About Land > Media tab." + <action description="音楽とメディアの設定を変更" + longdescription="ストリーミング・ミュージックと動画の設定を変更するには、[土地情報] > [メディア]タブを使います。" name="land change media" /> - <action description="『土地編集』に切り替える" - longdescription="Toggle 'Edit Terrain'. *WARNING* About Land > Options tab > Edit Terrain allows anyone to terraform your land's shape, and place and move Linden plants. Be sure you know what you're doing before assigning this Ability. Editing terrain is toggled in About Land > Options tab." + <action description="[地形を編集]に切り替え" + longdescription="[地形を編集]に切り替えます。 *警告* [土地情報]>[オプション]>[地形を編集]の順で進むと、誰でもあなたの土地の形の整備や、リンデンプラントの設置、移動ができます。 この能力を割り振る前に、このことをよく理解しておいてください。 [土地情報]>[オプション]タブから[地形を編集]に切り替えられます。" name="land edit" /> <action - description="土地に関する色々>オプション設定に切り替える" - longdescription="Toggle 'Safe (no damage)', 'Fly', and allow other Residents to: 'Create Objects', 'Edit Terrain', 'Create Landmarks', and 'Run Scripts' on group-owned land in About Land > Options tab." + description="[土地情報]>[オプション]タブ内のさまざまな設定を切り替え" + longdescription="[安全(ダメージなし)]、[飛ぶ]に切り替え、[土地情報]>[オプション]タブから、 他の住人がグループ所有の土地で[オブジェクトを作成]、[地形を編集]、[ランドマークを作成]、[スクリプトを実行]できるようにします。" name="land options" /> </action_set> <action_set - description="これらのアビリティには、メンバーが、グループ所有区画に関する制限を通過することができる権限が含まれます。" + description="これらの能力には、グループ所有の区画に関する規制を迂回することを、メンバーに許可する権限が含まれます。" name="Parcel Powers"> - <action description="常に『土地のエディット』を許可" - longdescription="Members in a Role with this Ability can edit terrain on a group-owned parcel, even if it's turned off in About Land > Options tab." + <action description="常に「地形を編集」を許可" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画上で地形を編集することができます。その区画が[土地情報]>[オプション]タブでオフになっていても、地形の編集が可能です。" name="land allow edit land" /> - <action description="常に『飛行』を許可" - longdescription="Members in a Role with this Ability can fly on a group-owned parcel, even if it's turned off in About Land > Options tab." + <action description="常に「飛行」を許可" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画上を飛行することができます。その区画が[土地情報]>[オプション]タブでオフになっていても、飛行が可能です。" name="land allow fly" /> - <action description="常に『オブジェクト作成』を許可" - longdescription="Members in a Role with this Ability can create objects on a group-owned parcel, even if it's turned off in About Land > Options tab." + <action description="常に「オブジェクト作成」を許可" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画上にオブジェクトを作成することができます。その区画が[土地情報]>[オプション]タブでオフになっていても、オブジェクトの作成が可能です。" name="land allow create" /> - <action description="常に『ランドマーク作成』を許可" - longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it's turned off in About Land > Options tab." + <action description="常に「ランドマークを作成」を許可" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画上にランドマークを作成することができます。その区画が[土地情報]>[オプション]タブでオフになっていても、ランドマークの作成が可能です。" name="land allow landmark" /> - <action description="グループの土地に『ホーム設定』を許可" - longdescription="Members in a Role with this Ability can use World menu > Set Home to Here on a group parcel (either land set or deeded to this group)." + <action description="グループの土地への「ホーム設定」を許可" + longdescription="この能力を持つ役割のメンバーは、[ワールド]メニュー>[ホームをここに設定]を使用して、このグループに譲渡された区画をホームに設定することができます。" name="land allow set home" /> </action_set> <action_set - description="これらのアビリティには、居住者の凍結、追放を含む、グループ所有区画へのアクセスの許可や制限の権限が含まれます。" + description="これらの能力には、住人の凍結や追放を含む、グループ所有の区画へのアクセスを許可、制限する権限が含まれます。" name="Parcel Access"> - <action description="区画アクセスリストの管理" - longdescription="Manage parcel Access lists in About Land > Access tab." + <action description="区画アクセス・リストの管理" + longdescription="区画アクセス・リストの管理は、[土地情報]>[アクセス]タブで行います。" name="land manage allowed" /> <action description="区画禁止リストの管理" - longdescription="Manage parcel Ban lists in About Land > Ban tab." + longdescription="区画禁止リストの管理は、[土地情報]>[禁止]タブで行います。" name="land manage banned" /> - <action description="区画の『許可証販売』の設定を変更" - longdescription="Change parcel 'Sell passes...' settings in About Land > Access tab." + <action description="区画の「パス販売」の設定を変更" + longdescription="区画の「パス販売」の設定を変更するには、[土地情報] > [アクセス]タブを使います。" name="land manage passes" /> - <action description="区画上の居住者を凍結と追放" - longdescription="Members in a Role with this Ability can handle an unwelcome Resident on a group-owned parcel by right-clicking them, More >, and selecting 'Eject...' or 'Freeze...'." + <action description="区画上の住人の追放と凍結" + longdescription="この能力を持つ役割のメンバーは、グループ所有の区画に問題のある住人がいる場合に、右クリック・メニューから[詳細>]を選択し、[追放...]または[フリーズ...]を選択することにより、その住人を処理することができます。" name="land admin" /> </action_set> <action_set - description="これらのアビリティには、メンバーが、オブジェクトの返却、Linden製植物の設置と移動の権限が含まれます。これはメンバーがゴミ処理や景観造りを行う際に便利ですが、返却したオブジェクトは元に戻せない為、充分な注意が必要です。" + description="これらの能力には、オブジェクトの返却、リンデンプラントの設置や移動を、メンバーに許可する権限が含まれます。 これはメンバーがゴミ処理や景観作成をする際に便利ですが、返却したオブジェクトは元に戻せないので、注意して行いましょう。" name="Parcel Content"> - <action description="グループ所有オブジェクトの返還" - longdescription="Return objects on group-owned parcels that are owned by the group in About Land > Objects tab." + <action description="グループ所有オブジェクトの返却" + longdescription="グループ所有の区画上のオブジェクトのうち、グループ所有のオブジェクトを返却するには、[土地情報]>[オブジェクト]タブを使います。" name="land return group owned" /> - <action description="グループで設置したオブジェクトを返還" - longdescription="Return objects on group-owned parcels that are set to the group in About Land > Objects tab." + <action description="グループに設定されているオブジェクトを返却" + longdescription="グループ所有の区画上のオブジェクトのうち、グループに設定されているオブジェクトを返却するには、[土地情報]>[オブジェクト]タブを使います。" name="land return group set" /> - <action description="非グループ・オブジェクトの返還" - longdescription="Return objects on group-owned parcels that are non-group in About Land > Objects tab." + <action description="非グループ・オブジェクトの返却" + longdescription="グループ所有の区画上のオブジェクトのうち、グループ以外のオブジェクトを返却するには、[土地情報]>[オブジェクト]タブを使います。" name="land return non group" /> - <action description="Linden製の植物を使用して景観作製" - longdescription="Landscaping ability to place and move Linden trees, plants, and grasses. These items can be found in your inventory's Library > Objects folder or they can be created via the Build button." + <action description="Linden製の植物を使用して景観作成" + longdescription="景観作成能力により、リンデン製の樹木、植物、草を配置および移動することができます。 これらのアイテムは、自分の持ち物のライブラリ>オブジェクト・フォルダから検索できるほか、「作成」ボタンで作成することもできます。" name="land gardening" /> </action_set> <action_set - description="These Abilities include powers to deed, modify, and sell group-owned objects. These changes are done in the Edit Tools > General Tab. Right-click an object and Edit to see its settings. " + description="これらの能力には、グループ所有のオブジェクトを譲渡、修正、販売する権限が含まれます。 こうした変更は、[編集ツール]>[一般]タブで行われます。 オブジェクトを右クリックして[編集]を開くと、設定内容を表示できます。" name="Object Management"> - <action description="グループへオブジェクトを譲渡" - longdescription="Deed objects to group in the Edit Tools > General Tab." + <action description="グループにオブジェクトを譲渡" + longdescription="グループにオブジェクトを譲渡するには、編集ツール>一般タブを使います。" name="object deed" /> <action description="グループ所有オブジェクトの操作(移動、コピー、修正)" - longdescription="Manipulate (move, copy, modify) group-owned objects in the Edit Tools > General Tab." + longdescription="グループ所有オブジェクトの操作(移動、コピー、修正)は、[編集ツール]>[一般]タブで行います。" name="object manipulate" /> <action description="グループ所有オブジェクトを販売可能に設定" - longdescription="Set group-owned objects for sale in the Edit Tools > General tab." + longdescription="グループ所有オブジェクトを販売可能に設定にするには、[編集ツール]>[一般]タブを使います。" name="object set sale" /> </action_set> <action_set - description="これらのアビリティには、メンバーにグループ負債の支払いやグループ配当の受領を行わせる権限を含みます。グループ口座履歴へのアクセスを制限することもできます。" + description="これらの能力には、メンバーに、グループの負債の支払いと利子受け取りを要求する権限、グループ口座履歴へのアクセスを制限する権限が含まれます。" name="Accounting"> <action description="グループ負債の返済とグループ配当の受領" - longdescription="Members in a Role with this Ability will automatically pay group liabilities and receive group dividends. This means they will receive a portion of group-owned land sales which are distributed daily, as well as contribute towards things like parcel listing fees. " + longdescription="この能力を持つ役割のメンバーについては、グループ負債の支払いとグループ配当の受け取りが自動的に行われます。 つまり、これらのメンバーは、毎日配当されるグループ所有の土地の売り上げ金の一部を受け取ると共に、区画の広告費などを負担することになります。" name="accounting accountable" /> </action_set> <action_set - description="これらのアビリティには、メンバーのグループ通知を送信、受け取り、閲覧ができる権限が含まれます。" + description="これらの能力には、グループ通知の送信、受信、表示をメンバーに許可する権限が含まれます。" name="Notices"> <action description="通知を送信" - longdescription="Members in a Role with this Ability can send Notices in Group Information > Notices tab." + longdescription="この能力を持つ役割のメンバーは、[グループ情報]>[通知]タブで通知を送信することができます。" name="notices send" /> - <action description="通知と過去の通知の閲覧" - longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group Information > Notices tab." + <action description="通知の受信と過去の通知の閲覧" + longdescription="この能力を持つ役割のメンバーは、通知を受け取ることができ、[グループ情報]>[通知]タブで過去の通知を閲覧することができます。" name="notices receive" /> </action_set> <action_set - description="これらのアビリティには、メンバーが、提案の作成、投票、そして投票履歴を閲覧ができる権限が含まれます。" + description="これらの能力には、提案の作成と投票、投票履歴の表示をメンバーに許可する権限が含まれます。" name="Proposals"> <action description="提案を作成" - longdescription="Members in a Role with this Ability can create proposals to be voted on in Group Information > Proposals tab." + longdescription="この能力を持つ役割のメンバーは、投票の対象となる問題提起を[グループ情報]>[問題提起]タブ上で作成することができます。" name="proposal start" /> - <action description="提案に投票" - longdescription="Members in a Role with this Ability can vote on proposals in Group Information > Proposals tab." + <action description="問題提起に投票する" + longdescription="この能力を持つ役割のメンバーは、グループ情報>提案タブで提案に投票することができます。" name="proposal vote" /> </action_set> </role_actions> diff --git a/linden/indra/newview/skins/xui/ja/untranslated.xml b/linden/indra/newview/skins/xui/ja/untranslated.xml index 27ecfdb..b5fbf58 100644 Binary files a/linden/indra/newview/skins/xui/ja/untranslated.xml and b/linden/indra/newview/skins/xui/ja/untranslated.xml differ diff --git a/linden/indra/newview/skins/xui/ko/alerts.xml b/linden/indra/newview/skins/xui/ko/alerts.xml index 88df4f3..f4908ed 100644 --- a/linden/indra/newview/skins/xui/ko/alerts.xml +++ b/linden/indra/newview/skins/xui/ko/alerts.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <alerts> <alert name="MissingAlert"> - <message name="message"> + <messagename="message"> alerts.xml에 [ALERT_NAME]이(가) 없습니다. </message> <option name="OK"> @@ -18,7 +18,7 @@ 확인 </option> </alert> - <alert name="MOTD" title="오늘의 메시지"> + <alert name="MOTD" title="오늘 메시지"> <message name="message"> [MOTD] </message> @@ -826,7 +826,7 @@ www.secondlife.com으로 이동하여 새로운 계정을 만드시겠습니까? </alert> <alert name="ResetShowNextTimeDialogs"> <message name="message"> - 나중에 알림' 초기화 + '나중에 알림' 대화 재설정? </message> <option name="OK"> 확인 @@ -3094,7 +3094,7 @@ Applications 폴더에 다운로드하시겠습니까? 받으면 귀하의 다른 용무 중 응답이 답변 됩니다. 모든 텔리포트 및 아이템 제공이 거부됩니다. </message> <ignore name="ignore"> - 부재중 모드를 설정할 때 + 통화중 모드를 설정할 때 </ignore> <option name="OK"> 확인 @@ -3487,9 +3487,9 @@ Applications 폴더에 다운로드하시겠습니까? </alert> <alert name="PublishClassified"> <message name="message"> - 잊지 말 것: 광고 수수료는 환불 되지 않음. + 기억할 것: 광고 수수료는 환불 되지 않음. -광고를 L$[AMOUNT] 지금 게재 하시겠습니까? +광고를 L$[AMOUNT]에 지금 게재 하시겠습니까? </message> <option name="Publish"> 게시하기 @@ -3713,7 +3713,7 @@ Simulation 성능이 느려질 수 있습니다. 물리적으로 20 ms 이상 </alert> <alert name="HelpRegionRestart" title="지역 재시작"> <message name="message"> - 잠시 기다린 후 이 지역을 실행하는 서버 처리를 재시작 합니다.지역의 모든 주민들은 + 잠시 기다린 후 이 지역을 실행하는 서버 처리를 재시작 합니다. 지역의 모든 주민들은 연결 해제됩니다.지역이 해당 지역 데이터를 저장하고 90 초 이내에 돌아 와야 합니다. diff --git a/linden/indra/newview/skins/xui/ko/floater_about.xml b/linden/indra/newview/skins/xui/ko/floater_about.xml index ec0e1a4..8f25c67 100644 --- a/linden/indra/newview/skins/xui/ko/floater_about.xml +++ b/linden/indra/newview/skins/xui/ko/floater_about.xml @@ -22,7 +22,7 @@ SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. -All rights reserved. 자세한 내용은 licenses.txt를 참조하십시오. +저작권 보유됨. 자세한 내용은 licenses.txt를 참조하십시오. </text_editor> </floater> diff --git a/linden/indra/newview/skins/xui/ko/floater_about_land.xml b/linden/indra/newview/skins/xui/ko/floater_about_land.xml index 8c189a0..de13c7f 100644 --- a/linden/indra/newview/skins/xui/ko/floater_about_land.xml +++ b/linden/indra/newview/skins/xui/ko/floater_about_land.xml @@ -23,13 +23,13 @@ tool_tip="그룹 운영진은 이 토지가 그룹의 토지 할당으로 유지되도록 해당 토지를 그룹에 양도할 수 있습니다." /> <button label="양도..." label_selected="양도..." name="Deed..." tool_tip="사용자가 선택된 그룹의 운영진일 경우에만 토지를 양도할 수 있습니다." /> - <check_box label="소유주가 양도로 기여" name="check contrib" + <check_box label="소유주가 양도로 기부" name="check contrib" tool_tip="토지가 그룹에 양도되면, 이전 소유주는 해당 토지를 그룹을 지원하기에 충분한 토지 할당분을 기부한 셈입니다." /> <text type="string" length="1" name="For Sale:"> 판매 여부: </text> <text type="string" length="1" name="Not for sale."> - 비매용. + 비매용 </text> <text type="string" length="1" name="For Sale: Price L$[PRICE]."> 가격: L$[PRICE]. @@ -111,10 +111,10 @@ 이 지역에서 구매한 토지는 재판매 할 수 없습니다. </text> <text type="string" length="1" name="changeable_clause"> - 이 지역에서 구매한 토지는 결합/분할 불가능 합니다. + 이 지역에서 구매한 토지는 결합/분할이 불가능 합니다. </text> <text_editor type="string" length="1" name="covenant_editor"> - 이 사유지에 대해 제공된시행 규칙이 없습니다. + 이 사유지에 대해 제공된 시행 규칙이 없습니다. </text_editor> <text name="can_resell"> 이 지역에서 구매한 토지는 재판매 할 수 있습니다. @@ -123,10 +123,10 @@ 이 지역에서 구매한 토지는 재판매 할 수 없습니다. </text> <text name="can_change"> - 이 지역에서 구매한 토지는 결합 또는 분할 가능 합니다. + 이 지역에서 구매한 토지는 결합/분할이 가능 합니다. </text> <text name="can_not_change"> - 이 지역에서 구매한 토지는 결합 또는 분할 불가능 합니다. + 이 지역에서 구매한 토지는 결합 또는 분할이 </text> </panel> <panel label="오브젝트" name="land_objects_panel"> @@ -187,7 +187,7 @@ <text type="string" length="1" name="Object Owners:"> 오브젝트 소유주: </text> - <button label="목록 새로 고침" label_selected="목록 새로 고침" + <button label="목록 고침" label_selected="목록 고침" name="Refresh List" /> <button label="오브젝트 반환…" label_selected="오브젝트 반환…" name="Return objects..." /> @@ -222,7 +222,7 @@ <text type="string" length="1" name="land_options_label"> 토지 옵션: </text> - <check_box label="안전(데미지 없음)" name="check safe" /> + <check_box label="안전(손상 없음)" name="check safe" /> <check_box label="밀기 한정" name="PushRestrictCheck" tool_tip="llPushObject기능은 구획 소유주 스크립트이거나 기능 구현자가 스크립트 소유자인 경우에만 작동합니다." /> <check_box label="검색 > 장소(L$30/주)에 보이기" name="ShowDirectoryCheck" /> @@ -288,7 +288,7 @@ 텔레포트 착신 전환: </text> <combo_box name="landing type" - tool_tip="Teleport Routing -- select how to handle teleports onto your land."> + tool_tip="텔레포트 착신 전환 -- 텔레포터들을 도착지로 어떻게 핸들할지 선택"> <combo_item type="string" length="1" name="Blocked"> 금지됨 </combo_item> @@ -310,12 +310,12 @@ 텍스처: </text> <text type="string" length="1" name="Replace this texture:"> - 이 텍스처를 대체함: + 이 텍스처를: </text> <texture_picker label="" name="media texture" tool_tip="그림을 선택하려면 클릭 하십시오." /> <text type="string" length="1" name="with content from this URL:"> - 이 URL의 컨텐츠로 교체: + 다음 URL의 컨텐츠로 교체: </text> <check_box label="컨텐츠 자동 크기 조절 (속도 및 시각 품질 저하)" name="media_auto_scale" @@ -334,15 +334,15 @@ <spinner label="사용시간:" name="HoursSpin" /> </panel> <panel label="차단" name="land_ban_panel"> - <check_box label="차단된 아바타: (0개 나열, 최대 300개)" name="LandBanCheck" /> + <check_box label="다음의 아바타 차단: (0개 나열, 최대 300개)" name="LandBanCheck" /> <button label="추가..." label_selected="추가..." name="Add..." /> <button label="제거" label_selected="제거" name="Remove" /> <text type="string" length="1" name="Deny by Payment Status:"> 지불 상태별로 출입 거부 </text> - <check_box label="결제수단 미등록자 출입 거부" name="DenyAnonymousCheck" /> - <check_box label="결제수단 등록자 출입 거부" name="DenyIdentifiedCheck" /> - <check_box label="결제수단 사용자 출입 거부" name="DenyTransactedCheck" /> + <check_box label="미등록자 출입 거부" name="DenyAnonymousCheck" /> + <check_box label="등록자 출입 거부" name="DenyIdentifiedCheck" /> + <check_box label="사용자 출입 거부" name="DenyTransactedCheck" /> </panel> </tab_container> </floater> diff --git a/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml b/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml index cbf13ec..710e0cc 100644 --- a/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml +++ b/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml @@ -40,106 +40,106 @@ 펼치기 </combo_item> <combo_item name="Relaxed"> - 릴렉스 + 힘빼기 </combo_item> <combo_item name="PointBoth"> - 점(양쪽) + 가리키기(양쪽) </combo_item> <combo_item name="Fist"> - 주먹 + 주먹쥐기 </combo_item> <combo_item name="RelaxedLeft"> - 릴렉스(좌) + 힘빼기(좌) </combo_item> <combo_item name="PointLeft"> - 점(좌) + 가리키기(좌) </combo_item> <combo_item name="FistLeft"> - 왼쪽 주먹 + 주먹쥐기(좌) </combo_item> <combo_item name="RelaxedRight"> - 릴렉스(우) + 힘빼기(우) </combo_item> <combo_item name="PointRight"> - 점(우) + 가리키기(우) </combo_item> <combo_item name="FistRight"> - 오른쪽 주먹 + 주먹쥐기(우) </combo_item> <combo_item name="SaluteRight"> - 경의에 관한 권리 + 경례(우) </combo_item> <combo_item name="Typing"> - 입력 + 타이프하기 </combo_item> <combo_item name="PeaceRight"> - 평화에 대한 권리 + 승리 사인(우) </combo_item> </combo_box> <text name="emote_label"> - 표현 + 표정 </text> <combo_box label="" name="emote_combo" tool_tip="Controls what face does during animation."> <combo_item name="[None]"> - [None] + [없음] </combo_item> <combo_item name="Aaaaah"> 아- </combo_item> <combo_item name="Afraid"> - 두려움 + 두려워하기 </combo_item> <combo_item name="Angry"> - 화남 + 화내기 </combo_item> <combo_item name="BigSmile"> - 활짝 웃음 + 활짝 웃기 </combo_item> <combo_item name="Bored"> - 지루함 + 지루해하기 </combo_item> <combo_item name="Cry"> 울기 </combo_item> <combo_item name="Disdain"> - 경멸 + 경멸하기 </combo_item> <combo_item name="Embarrassed"> - 당황함 + 당황해하기 </combo_item> <combo_item name="Frown"> - 표정 찡그림 + 찡그리기 </combo_item> <combo_item name="Kiss"> - 키스 + 키스하기 </combo_item> <combo_item name="Laugh"> - 웃음 + 웃기 </combo_item> <combo_item name="Plllppt"> Plllppt </combo_item> <combo_item name="Repulsed"> - 거절됨 + 거부되기 </combo_item> <combo_item name="Sad"> - 슬픔 + 슬퍼하기 </combo_item> <combo_item name="Shrug"> - 어깨를 으쓱하기 + 어깨 으쓱하기 </combo_item> <combo_item name="Smile"> - 미소 + 미소짓기 </combo_item> <combo_item name="Surprise"> - 놀람 + 놀라기 </combo_item> <combo_item name="Wink"> - 윙크 + 윙크하기 </combo_item> <combo_item name="Worry"> - 걱정 + 걱정하기 </combo_item> </combo_box> <spinner label="점점 가까이(초)" name="ease_in_time" diff --git a/linden/indra/newview/skins/xui/ko/floater_avatar_textures.xml b/linden/indra/newview/skins/xui/ko/floater_avatar_textures.xml index 7d75972..6450a23 100644 --- a/linden/indra/newview/skins/xui/ko/floater_avatar_textures.xml +++ b/linden/indra/newview/skins/xui/ko/floater_avatar_textures.xml @@ -8,7 +8,7 @@ </text> <texture_picker label="머리" name="baked_head" /> <texture_picker label="메이크업" name="head_bodypaint" /> - <texture_picker label="헤어" name="hair" /> + <texture_picker label="머리카락" name="hair" /> <button label="덤프" label_selected="덤프" name="Dump" /> <texture_picker label="눈" name="baked_eyes" /> <texture_picker label="눈" name="eye_texture" /> @@ -18,8 +18,8 @@ <texture_picker label="장갑" name="gloves" /> <texture_picker label="셔츠" name="shirt" /> <texture_picker label="상의 재킷" name="upper_jacket" /> - <texture_picker label="하반신" name="baked_lower_body" /> - <texture_picker label="하반신 문신" name="lower_bodypaint" /> + <texture_picker label="하체" name="baked_lower_body" /> + <texture_picker label="하체 문신" name="lower_bodypaint" /> <texture_picker label="내의(하)" name="underpants" /> <texture_picker label="양말" name="socks" /> <texture_picker label="신발" name="shoes" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_clothing.xml b/linden/indra/newview/skins/xui/ko/floater_clothing.xml index 8c17b7d..d13f35b 100644 --- a/linden/indra/newview/skins/xui/ko/floater_clothing.xml +++ b/linden/indra/newview/skins/xui/ko/floater_clothing.xml @@ -2,7 +2,7 @@ <floater name="clothing" title="옷"> <scroll_list name="clothing_list"> <column label="" name="icon" /> - <column label="Name" name="name" /> + <column label="이름" name="name" /> </scroll_list> <button label="벗기" name="take_off_btn" /> <button label="착용" name="wear_btn" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_color_picker.xml b/linden/indra/newview/skins/xui/ko/floater_color_picker.xml index 78fb662..bae7b0c 100644 --- a/linden/indra/newview/skins/xui/ko/floater_color_picker.xml +++ b/linden/indra/newview/skins/xui/ko/floater_color_picker.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="ColorPicker" title="색 관리기"> <text name="r_val_text"> - 적색: + 빨강색: </text> <text name="g_val_text"> - 녹색: + 초록색: </text> <text name="b_val_text"> 파란색: diff --git a/linden/indra/newview/skins/xui/ko/floater_customize.xml b/linden/indra/newview/skins/xui/ko/floater_customize.xml index 9c29b1e..2267eb0 100644 --- a/linden/indra/newview/skins/xui/ko/floater_customize.xml +++ b/linden/indra/newview/skins/xui/ko/floater_customize.xml @@ -95,7 +95,7 @@ name="Save As" /> <button label="되돌리기" label_selected="되돌리기" name="Revert" /> </panel> - <panel label="헤어" name="Hair"> + <panel label="머리카락" name="Hair"> <button label="색" label_selected="색" name="Color" /> <button label="스타일" label_selected="스타일" name="Style" /> <button label="눈썹" label_selected="눈썹" name="Eyebrows" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_directory.xml b/linden/indra/newview/skins/xui/ko/floater_directory.xml index 4bc5b3e..82bc778 100644 --- a/linden/indra/newview/skins/xui/ko/floater_directory.xml +++ b/linden/indra/newview/skins/xui/ko/floater_directory.xml @@ -11,15 +11,15 @@ <check_box label="성인용 컨텐츠 포함" name="incmature" /> <scroll_list name="results"> <column label="" name="icon" /> - <column label="Name" name="name" /> - <column label="Price" name="price" /> - <column label="Time (PT)" name="date" /> - <column label="Time" name="time" /> - <column label="Traffic" name="dwell" /> - <column label="Area" name="area" /> - <column label="L$/sq.m" name="per_meter" /> - <column label="Online" name="online" /> - <column label="Members" name="members" /> + <column label="이름" name="name" /> + <column label="가격" name="price" /> + <column label="시간(PT)" name="date" /> + <column label="시간" name="time" /> + <column label="교통" name="dwell" /> + <column label="면적" name="area" /> + <column label="L$/sq. m." name="per_meter" /> + <column label="온라인" name="online" /> + <column label="회원" name="members" /> </scroll_list> </panel> <panel label="광고" name="classified_panel"> @@ -49,10 +49,10 @@ 신제품 </combo_item> <combo_item name="Employment"> - 일자리 + 구직 </combo_item> <combo_item name="Wanted"> - 모집 + 고용 </combo_item> <combo_item name="Service"> 서비스 @@ -68,8 +68,8 @@ <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Price" name="price" /> + <column label="이름" name="name" /> + <column label="가격" name="price" /> </scroll_list> </panel> <panel label="이벤트" name="events_panel"> @@ -140,10 +140,10 @@ <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Time (PT)" name="date" /> + <column label="이름" name="name" /> + <column label="시간 (PT)" name="date" /> <column label="" name="event_id" /> - <column label="Time" name="time" /> + <column label="시간" name="time" /> </scroll_list> <button label="< 이전" label_selected="< 이전" name="< Prev" /> <button label="다음 >" label_selected="다음 >" name="Next >" /> @@ -155,13 +155,13 @@ <check_box label="성인용 컨텐츠 구획 포함" name="incmature" /> <text name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there."> - 본 장소들은 통행량(사람들이 해당 장소에서 보내는 시간을 기준)에 따른 가장 인기 있는 장소들입니다. + 본 장소들은 통행량(머무는 시간 기준)에 따른 가장 인기 있는 장소들입니다. </text> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Traffic" name="dwell" /> + <column label="시간" name="name" /> + <column label="교통" name="dwell" /> </scroll_list> </panel> <panel label="토지 매물" name="land_sales_panel"> @@ -196,16 +196,16 @@ <check_box label="면적>=sq.m." name="areacheck" /> <button label="검색" label_selected="검색" name="Search" /> <text name="land"> - 토지는 린든 달러(L$)로 직접 구매, 또는 린든 달러(L$)나 US$로 경매하여 구매할 수 있습니다. -직접 구매하려면, 토지를 방문하여 타이틀 바에 있는 장소 이름을 클릭 하십시오! + 토지는 L$로 직매하거나, L$나 US$로 경매하여 구매할 수 있습니다. +직매하려면, 토지를 방문하여 타이틀 바에 있는 장소 이름을 클릭 하십시오! </text> <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="L$ Price" name="price" /> - <column label="Area" name="area" /> - <column label="L$/sq.m" name="per_meter" /> + <column label="이름" name="name" /> + <column label="L$ 가격" name="price" /> + <column label="면적" name="area" /> + <column label="L$/sq.m." name="per_meter" /> </scroll_list> </panel> <panel label="장소" name="places_panel"> @@ -260,8 +260,8 @@ <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Traffic" name="dwell" /> + <column label="이름" name="name" /> + <column label="교통" name="dwell" /> </scroll_list> </panel> <panel label="사람" name="people_panel"> @@ -274,7 +274,7 @@ <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> + <column label="이름" name="name" /> </scroll_list> </panel> <panel label="그룹" name="groups_panel"> @@ -288,8 +288,8 @@ <scroll_list name="results"> <column label="" name="icon" /> <column label="" name="type" /> - <column label="Name" name="name" /> - <column label="Members" name="members" /> + <column label="이름" name="name" /> + <column label="회원" name="members" /> <column label="" name="score" /> </scroll_list> </panel> diff --git a/linden/indra/newview/skins/xui/ko/floater_friends.xml b/linden/indra/newview/skins/xui/ko/floater_friends.xml index 64ccf19..d42776f 100644 --- a/linden/indra/newview/skins/xui/ko/floater_friends.xml +++ b/linden/indra/newview/skins/xui/ko/floater_friends.xml @@ -1,33 +1,33 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="friends" title="친구"> <scroll_list name="friend_list" - tool_tip="Hold shift or control while clicking to select multiple friends"> - <column label="Name" name="friend_name" /> + tool_tip="다수의 친구를 선택하려면 선택하는 동안 shift나 Ctrl를 누르십시오."> + <column label="이름" name="friend_name" /> </scroll_list> <panel name="rights_container"> <text name="friend_name_label"> 친구를 선택하여 권한 변경… </text> - <check_box label="내 온라인 상태를 확인할 수 있습니다." + <check_box label="온라인 상태를 확인할 수 있습니다." name="online_status_cb" - tool_tip="이 친구가 친구 목록이나 통화 카드에서 내 온라인 상태를 확인 가능한지 여부를 설정합니다." /> - <check_box label="지도에서 내 위치를 확인할 수 있습니다." + tool_tip="친구가 친구 목록이나 통화 카드에서 내 온라인 상태를 확인 가능한지 여부를 설정합니다." /> + <check_box label="지도에서 위치를 확인할 수 있습니다." name="map_status_cb" - tool_tip="이 친구가 지도에서 내 위치를 확인 가능한지 여부를 설정합니다." /> - <check_box label="내 오브젝트를 수정할 수 있습니다." name="modify_status_cb" - tool_tip="이 친구가 내 오브젝트를 수정할 수 있는지 여부를 설정합니다." /> + tool_tip="친구가 지도에서 내 위치를 확인 가능한지 여부를 설정합니다." /> + <check_box label="오브젝트를 수정할 수 있습니다." name="modify_status_cb" + tool_tip="친구가 내 오브젝트를 수정할 수 있는지 여부를 설정합니다." /> <text name="process_rights_label"> 권한 변경 중… </text> </panel> <button label="메신저" name="im_btn" tool_tip="메신저 세션 열기" /> <button label="텔리포트..." name="offer_teleport_btn" - tool_tip="이 친구에게 내 현재 위치로 텔리포트를 제공함" /> + tool_tip="친구에게 내 현재 위치로 텔리포트를 제공함" /> <button label="추가..." name="add_btn" tool_tip="주민에게 우정 제공" /> <button label="프로필" name="profile_btn" tool_tip="그림, 그룹 및 기타 정보 표시" /> <button label="지불…" name="pay_btn" - tool_tip="이 친구에게 린든 달러(L$) 주기" /> + tool_tip="친구에게 린든 달러(L$) 주기" /> <button label="제거…" name="remove_btn" tool_tip="이 사람을 내 친구 목록에서 삭제" /> </floater> diff --git a/linden/indra/newview/skins/xui/ko/floater_gesture.xml b/linden/indra/newview/skins/xui/ko/floater_gesture.xml index 85e2272..65487cb 100644 --- a/linden/indra/newview/skins/xui/ko/floater_gesture.xml +++ b/linden/indra/newview/skins/xui/ko/floater_gesture.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="gestures" title="사용중인 제스처"> <text name="help_label"> - 채팅 창에 바로가기 문구를 입력하거나 키를 눌러 애니메이션 및 -사운드를 재생합니다. + 채팅 창에 문구를 입력/키를 눌러 애니메이션 및 사운드 재생 + </text> <scroll_list name="gesture_list"> - <column label="Trigger" name="trigger" /> - <column label="Key" name="shortcut" /> - <column label="" name="key" /> - <column label="Name" name="name" /> + <column label="트리거" name="trigger" /> + <column label="키" name="shortcut" /> + <column label="키" name="key" /> + <column label="이름" name="name" /> </scroll_list> <button label="신규" name="new_gesture_btn" /> <button label="인벤토리" name="inventory_btn" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_group_info.xml b/linden/indra/newview/skins/xui/ko/floater_group_info.xml index 658dc7e..1a4f1a7 100644 --- a/linden/indra/newview/skins/xui/ko/floater_group_info.xml +++ b/linden/indra/newview/skins/xui/ko/floater_group_info.xml @@ -139,8 +139,8 @@ <text name="proposal_lbl"> 제안: </text> - <button label="예" label_selected="예" name="btn_yes" /> - <button label="아니오" label_selected="아니오" name="btn_no" /> + <button label="예스" label_selected="예스" name="btn_yes" /> + <button label="노우" label_selected="노우" name="btn_no" /> <button label="기권" label_selected="기권" name="btn_abstain" /> <button label="목록 보기" label_selected="목록 보기" name="btn_view_list" /> <button label="아이템 보기" label_selected="아이템 보기" name="btn_view_item" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_groups.xml b/linden/indra/newview/skins/xui/ko/floater_groups.xml index 4e3b247..d75b51b 100644 --- a/linden/indra/newview/skins/xui/ko/floater_groups.xml +++ b/linden/indra/newview/skins/xui/ko/floater_groups.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="groups" title="그룹"> <text name="groupdesc"> - 현재 활동 중인 그룹은 굵은 글씨로 표시됩니다. + 현재 활동중인 그룹은 굵은 글씨로 표시됩니다. </text> <text name="groupcount"> - [COUNT] 그룹(최대 [MAX])에 속해 있습니다. + [COUNT]개의 그룹(최대 [MAX])에 속해 있습니다. </text> <button label="활성화" label_selected="활성화" name="Activate" /> <button label="정보" label_selected="정보" name="Info" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_image_preview.xml b/linden/indra/newview/skins/xui/ko/floater_image_preview.xml index 8cfa403..350b324 100644 --- a/linden/indra/newview/skins/xui/ko/floater_image_preview.xml +++ b/linden/indra/newview/skins/xui/ko/floater_image_preview.xml @@ -14,7 +14,7 @@ 이미지 </combo_item> <combo_item name="Hair"> - 헤어 + 머리카락 </combo_item> <combo_item name="FemaleHead"> 여성 머리 @@ -44,7 +44,7 @@ <text name="bad_image_text"> 이미지 파일을 읽을 수 없습니다. - 이미지를 24비트 Targa(.tga)로 저장해보십시오. + 이미지를 24비트 Targa(.tga)로 저장하십시오. </text> <button label="취소" name="cancel_btn" /> <button label="업로드(L$[AMOUNT])" name="ok_btn" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_inventory.xml b/linden/indra/newview/skins/xui/ko/floater_inventory.xml index 16f0125..7821e60 100644 --- a/linden/indra/newview/skins/xui/ko/floater_inventory.xml +++ b/linden/indra/newview/skins/xui/ko/floater_inventory.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Inventory" title="인벤토리"> <tab_container name="inventory filter tabs"> - <inventory_panel label="All Items" name="All Items" /> - <inventory_panel label="Recent Items" name="Recent Items" /> + <inventory_panel label="모든 아이템" name="All Items" /> + <inventory_panel label="최근 아이템" name="Recent Items" /> </tab_container> <menu_bar name="Inventory Menu"> <menu label="파일" name="File"> @@ -31,7 +31,7 @@ <menu name="New Body Parts"> <menu_item_call label="새 모습" name="New Shape" /> <menu_item_call label="새 피부" name="New Skin" /> - <menu_item_call label="새 헤어" name="New Hair" /> + <menu_item_call label="새 머리카락" name="New Hair" /> <menu_item_call label="새 눈" name="New Eyes" /> </menu> </menu> diff --git a/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml b/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml index 9f762ac..7b05697 100644 --- a/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml +++ b/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml @@ -14,7 +14,7 @@ <button label="모두" label_selected="모두" name="All" /> <button label="없음" label_selected="없음" name="None" /> <check_box label="항상 폴더 표시" name="check_show_empty" /> - <check_box label="로그오프 후 경과 시간" name="check_since_logoff" /> + <check_box label="로그오프이후" name="check_since_logoff" /> <text type="string" length="1" name="- OR -"> - 또는 - </text> diff --git a/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml b/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml index 9779e39..59c818b 100644 --- a/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml +++ b/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="land holdings floater" title="내 토지"> <scroll_list name="parcel list"> - <column label="Name" name="name" /> - <column label="Location" name="location" /> - <column label="Area" name="area" /> + <column label="이름" name="name" /> + <column label="위치" name="location" /> + <column label="면적" name="area" /> <column label="" name="hidden" /> </scroll_list> <button label="텔리포트" label_selected="텔리포트" name="Teleport" @@ -14,8 +14,8 @@ 귀하의 그룹에 대한 기부: </text> <scroll_list name="grant list"> - <column label="Group" name="group" /> - <column label="Area" name="area" /> + <column label="그룹" name="group" /> + <column label="면적" name="area" /> </scroll_list> <text name="allowed_label"> 현재 결제수단으로 허용되는 토지 보유량: diff --git a/linden/indra/newview/skins/xui/ko/floater_mute.xml b/linden/indra/newview/skins/xui/ko/floater_mute.xml index eddcef8..6acc4ce 100644 --- a/linden/indra/newview/skins/xui/ko/floater_mute.xml +++ b/linden/indra/newview/skins/xui/ko/floater_mute.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="mute floater" title="주민 및 오브젝트 차단"> - <scroll_list name="mutes" tool_tip="List of currently muted residents" /> + <scroll_list name="mutes" tool_tip="현재 차단된 주민들" /> <button label="차단할 주민" label_selected="차단할 주민" name="Mute resident..." tool_tip="차단할 주민 선택" /> <button label="차단할 오브젝트" label_selected="차단할 오브젝트" diff --git a/linden/indra/newview/skins/xui/ko/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/xui/ko/floater_new_outfit_dialog.xml index 79da40b..9a6cc46 100644 --- a/linden/indra/newview/skins/xui/ko/floater_new_outfit_dialog.xml +++ b/linden/indra/newview/skins/xui/ko/floater_new_outfit_dialog.xml @@ -4,7 +4,7 @@ <button label="취소" label_selected="취소" name="Cancel" /> <check_box label="외형" name="checkbox_Shape" /> <check_box label="피부" name="checkbox_Skin" /> - <check_box label="헤어" name="checkbox_Hair" /> + <check_box label="머리카락" name="checkbox_Hair" /> <check_box label="눈" name="checkbox_Eyes" /> <check_box label="폴더 이름으로 의상 이름 변경" name="rename" /> <check_box label="셔츠" name="checkbox_Shirt" /> @@ -44,8 +44,8 @@ <check_box label="왼쪽 허벅지" name="checkbox_L Upper Leg" /> <check_box label="왼쪽 종아리" name="checkbox_L Lower Leg" /> <check_box label="복부" name="checkbox_Stomach" /> - <check_box label="왼쪽 가슴 근육" name="checkbox_Left Pec" /> - <check_box label="오른쪽 가슴 근육" name="checkbox_Right Pec" /> + <check_box label="왼가슴 근육" name="checkbox_Left Pec" /> + <check_box label="오른가슴 근육" name="checkbox_Right Pec" /> <check_box label="중앙 2" name="checkbox_Center 2" /> <check_box label="오른쪽 상단" name="checkbox_Top Right" /> <check_box label="상단" name="checkbox_Top" /> diff --git a/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml index 67b792d..4adc77f 100644 --- a/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml +++ b/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml @@ -28,8 +28,8 @@ <button label="아래로 이동" name="down_btn" /> <button label="제거" name="delete_btn" /> <text name="help_label"> - 사용자가 대기 단계를 추가하지 않는 한 -모든 단계는 동시에 발생합니다. + 사용자가 대기단계를 추가하지 않는 +한 모든단계는 동시에 발생합니다. </text> <radio_group name="animation_trigger_type"> <radio_item> diff --git a/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml b/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml index 4aa7cea..2b04ceb 100644 --- a/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml +++ b/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml @@ -14,7 +14,7 @@ <button label="" label_selected="" name="pick_btn" tool_tip="오브젝트 피커 - 오브젝트를 본 보고서의 주제로 식별함" /> <text name="select_object_label"> - 버튼을 클릭한 후 오브젝트를 클릭 하십시오: + 버튼클릭후 오브젝트 클릭: </text> <text name="object_name_label"> 이름: @@ -23,7 +23,7 @@ 소유자: </text> <combo_box name="category_combo" - tool_tip="Category -- select the category that best describes this report"> + tool_tip="카테고리 -- 이 리포트를 가장 잘 설명하는 카테고리 선택함"> <combo_item name="Selectcategory"> 카테고리 선택 </combo_item> @@ -64,10 +64,10 @@ 요약: </text> <text name="dscr_title"> - 세부사항: + 세부: </text> <text name="bug_aviso"> - 날짜, 위치, 악용 종류, 관련 채팅/메신저 텍스트 등에 대해 + 날짜, 위치, 악용 종류, 관련 채팅/메신저 텍스트 등에 대해 자세히 적고 가능하다면 오브젝트를 선택하십시오. </text> <text name="incomplete_title"> diff --git a/linden/indra/newview/skins/xui/ko/floater_report_bug.xml b/linden/indra/newview/skins/xui/ko/floater_report_bug.xml index ec9779e..2b1a6e7 100644 --- a/linden/indra/newview/skins/xui/ko/floater_report_bug.xml +++ b/linden/indra/newview/skins/xui/ko/floater_report_bug.xml @@ -4,13 +4,13 @@ 신고자: </text> <text name="sim_title"> - 시뮬레이터: + 씸: </text> <text name="pos_title"> 위치: </text> <text name="select_object_label"> - 버튼 및 선택할 오브젝트를 차례로 클릭하십시오: + 버튼과 오브젝트를 차례로 클릭함: </text> <button label="" label_selected="" name="pick_btn" tool_tip="오브젝트 피커 - 오브젝트를 본 보고서의 주제로 식별함" /> @@ -21,12 +21,12 @@ 소유자: </text> <check_box label="스크린샷 포함" name="screen_check" /> - <texture_picker label="작업 중..." name="screenshot" /> + <texture_picker label="작업 중..." name="스크린샷" /> <text name="category_label"> 카테고리: </text> <combo_box name="category_combo" - tool_tip="Category -- select the category that best describes this report"> + tool_tip="카테고리 -- 이 리포트를 가장 잘 설명하는 카테고리 선택함"> <combo_item name="Selectcategory"> 카테고리 선택 </combo_item> diff --git a/linden/indra/newview/skins/xui/ko/floater_script_debug.xml b/linden/indra/newview/skins/xui/ko/floater_script_debug.xml index 86eb10c..d4b5d3f 100644 --- a/linden/indra/newview/skins/xui/ko/floater_script_debug.xml +++ b/linden/indra/newview/skins/xui/ko/floater_script_debug.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <multi_floater name="script debug floater" title="스크립트 오류/경고"> <tab_container name="Preview Tabs"> - <floater label="스크립트" name="all_scripts" title="[All scripts]" /> + <floater label="스크립트" name="all_scripts" title="[모든 스크립트]" /> </tab_container> </multi_floater> diff --git a/linden/indra/newview/skins/xui/ko/floater_snapshot.xml b/linden/indra/newview/skins/xui/ko/floater_snapshot.xml index e4702da..17be6f4 100644 --- a/linden/indra/newview/skins/xui/ko/floater_snapshot.xml +++ b/linden/indra/newview/skins/xui/ko/floater_snapshot.xml @@ -5,13 +5,13 @@ </text> <radio_group label="스냅샷 유형" name="snapshot_type_radio"> <radio_item name="postcard"> - 보내기 + 엽서 보내기 </radio_item> <radio_item name="texture"> 스냅샷 업로드 </radio_item> <radio_item name="local"> - 저장하기 + 하드 드라이브에 저장하기 </radio_item> </radio_group> <text name="type_label2"> diff --git a/linden/indra/newview/skins/xui/ko/floater_telehub.xml b/linden/indra/newview/skins/xui/ko/floater_telehub.xml index 439018e..f73d939 100644 --- a/linden/indra/newview/skins/xui/ko/floater_telehub.xml +++ b/linden/indra/newview/skins/xui/ko/floater_telehub.xml @@ -10,7 +10,7 @@ 삭제하려면 '연결 해제'를 클릭합니다. </text> <text name="help_text_not_connected"> - 오브젝트를 선택하고 텔리허브 연결을 클릭하십시오. + 오브젝트를 선택하고 텔리허브 연결을 클릭: </text> <button label="텔레허브 연결" name="connect_btn" /> <button label="연결 해제" name="disconnect_btn" /> @@ -23,6 +23,6 @@ 오브젝트를 선택하고 추가를 클릭하여 위치를 정합니다. 그런 다음, 오브젝트를 이동, 삭제할 수 있습니다. 위치는 텔리허브 센터에 따라 상대적입니다. -월드 위치를 표시하기 위해 목록의 항목을 선택합니다. +월드 위치를 표시하려면 목록항목을 선택합니다. </text> </floater> diff --git a/linden/indra/newview/skins/xui/ko/floater_world_map.xml b/linden/indra/newview/skins/xui/ko/floater_world_map.xml index abe0e3f..d26562f 100644 --- a/linden/indra/newview/skins/xui/ko/floater_world_map.xml +++ b/linden/indra/newview/skins/xui/ko/floater_world_map.xml @@ -52,7 +52,7 @@ <check_box label=" " name="event_mature_chk" /> <combo_box label="내 친구들" name="friend combo" tool_tip="Friend to Show on Map"> <combo_item name="none_selected"> - 내 친구들 + 친구들 </combo_item> </combo_box> <combo_box label="내 랜드마크" name="landmark combo" diff --git a/linden/indra/newview/skins/xui/ko/menu_inventory.xml b/linden/indra/newview/skins/xui/ko/menu_inventory.xml index dcf71d2..7765bfe 100644 --- a/linden/indra/newview/skins/xui/ko/menu_inventory.xml +++ b/linden/indra/newview/skins/xui/ko/menu_inventory.xml @@ -26,7 +26,7 @@ <menu name="New Body Parts"> <menu_item_call label="새 모습" name="New Shape" /> <menu_item_call label="새 피부" name="New Skin" /> - <menu_item_call label="새 헤어" name="New Hair" /> + <menu_item_call label="새 머리카락" name="New Hair" /> <menu_item_call label="새 눈" name="New Eyes" /> </menu> <menu_item_call label="열기" name="Landmark Open" /> diff --git a/linden/indra/newview/skins/xui/ko/menu_pie_self.xml b/linden/indra/newview/skins/xui/ko/menu_pie_self.xml index 8c09290..f759701 100644 --- a/linden/indra/newview/skins/xui/ko/menu_pie_self.xml +++ b/linden/indra/newview/skins/xui/ko/menu_pie_self.xml @@ -2,9 +2,9 @@ <pie_menu name="Self Pie"> <menu_item_call label="프로필…" name="Profile..." /> <menu_item_call label="그룹…" name="Groups..." /> - <menu_item_call label="이동¡¦" name="Go..." /> + <menu_item_call label="이동…" name="Go..." /> <menu_item_call label="서기" name="Stand Up" /> - <menu_item_call label="친구" name="Friends..." /> + <menu_item_call label="친구…" name="Friends..." /> <menu_item_call label="제스처…" name="Gestures..." /> <pie_menu label="벗기 >" name="Take Off >"> <pie_menu label="의상 >" name="Clothes >"> diff --git a/linden/indra/newview/skins/xui/ko/menu_viewer.xml b/linden/indra/newview/skins/xui/ko/menu_viewer.xml index b82118d..54d0948 100644 --- a/linden/indra/newview/skins/xui/ko/menu_viewer.xml +++ b/linden/indra/newview/skins/xui/ko/menu_viewer.xml @@ -100,9 +100,9 @@ <menu_item_check label="스크립트된 오브젝트" name="Scripted Objects" /> <menu_item_check label="물리 엔진 오브젝트" name="Physical Objects" /> <menu_item_check label="사운드" name="Sound Sources" /> - <menu_item_check label="파티클" name="Particle Sources" /> + <menu_item_check label="입자" name="Particle Sources" /> <menu_item_separator label="-----------" name="separator" /> - <menu_item_check label="파티클 숨기기" name="Hide Particles" /> + <menu_item_check label="입자 숨기기" name="Hide Particles" /> </menu> <menu_item_check label="착용 HUD 보기" name="Show HUD Attachments" /> <menu_item_separator label="-----------" name="separator5" /> @@ -207,7 +207,7 @@ <menu_item_separator label="-----------" name="separator3" /> <menu_item_call label="오늘의 메시지" name="Message of the Day..." /> <menu_item_separator label="-----------" name="separator4" /> - <menu_item_call label="신고하기…" name="Report Abuse..." /> + <menu_item_call label="악용 신고하기…" name="Report Abuse..." /> <menu_item_call label="밀기, 타격 등 감지" name="Bumps, Pushes &amp; Hits..." /> <menu_item_separator label="-----------" name="separator5" /> <menu_item_call label="출시 정보" name="Release Notes..." /> diff --git a/linden/indra/newview/skins/xui/ko/notify.xml b/linden/indra/newview/skins/xui/ko/notify.xml index dccdcdd..d09cec0 100644 --- a/linden/indra/newview/skins/xui/ko/notify.xml +++ b/linden/indra/newview/skins/xui/ko/notify.xml @@ -794,7 +794,7 @@ Ctrl 또는 Alt 키를 누른 상태에서 신속하게 도구를 전환하십 <message name="message"> 이곳은 오브젝트, 참고카드, 기타 소유물을 보관하는 인벤토리 입니다. * 오브젝트 또는 복장 폴더를 입으려면 자신의 아바타로 드래그합니다. -* 오브젝트를 인벤토리로 부터 꺼내려면 땅으로 드래그합니다. +* 오브젝트를 인벤토리로 부터 꺼내려면 바닥으로 드래그합니다. * 노트 카드를 읽으려면 더블클릭합니다. </message> </notify> diff --git a/linden/indra/newview/skins/xui/ko/panel_avatar.xml b/linden/indra/newview/skins/xui/ko/panel_avatar.xml index baf1a04..47d5a22 100644 --- a/linden/indra/newview/skins/xui/ko/panel_avatar.xml +++ b/linden/indra/newview/skins/xui/ko/panel_avatar.xml @@ -34,7 +34,7 @@ 현재 온라인 </text> <text name="label"> - 탄생: + 출생: </text> <text name="label2"> 계정: @@ -97,7 +97,7 @@ </panel> <panel label="관심사항" name="Interests"> <text name="I Want To:"> - 내 관심사: + 관심사: </text> <check_box label="만들기" name="chk0" /> <check_box label="탐험" name="chk1" /> @@ -108,7 +108,7 @@ <check_box label="판매" name="chk5" /> <check_box label="고용" name="chk7" /> <text name="Skills:"> - 내 기술: + 기술: </text> <check_box label="텍스처" name="schk0" /> <check_box label="건축" name="schk1" /> @@ -122,7 +122,7 @@ </panel> <panel label="관심장소" name="Picks"> <text name="Tell everyone about your favorite places in Second Life."> - 세컨드라이프에서 가장 즐겨찾는 장소에 대해 알려주십시오. + 세컨드라이프에서 가장 즐겨찾는 장소를 알려주십시오. </text> <button label="신규…" label_selected="신규…" name="New..." /> <button label="삭제..." label_selected="삭제..." name="Delete..." /> @@ -155,8 +155,8 @@ <panel label="나의 메모" name="My Notes"> <text name="label"> 이 공란을 사용하여 이 사람에 관한 참고 정보를 기록합니다. 진행 중인 -거래, 공동 프로젝트 등을 추적합니다. 사용자는 이러한 -참고 정보만 볼 수 있습니다. 이 사람은 참고 정보를 볼 수 없으며 다른 사람들도 마찬가지입니다. +거래, 공동 프로젝트 등을 추적합니다. 사용자만이 이러한 참고 정보를 +볼 수 있습니다. 이 사람이나 다른 사람은 참고 정보를 볼 수 없습니다. </text> </panel> </tab_container> diff --git a/linden/indra/newview/skins/xui/ko/panel_group_general.xml b/linden/indra/newview/skins/xui/ko/panel_group_general.xml index d427ddb..20a83b5 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_general.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_general.xml @@ -9,10 +9,10 @@ </text> <button label="?" label_selected="?" name="help_button" /> <line_editor name="group_name_editor"> - 새 그룹 이름을 여기에 입력 + 새 그룹 이름 입력 </line_editor> <text name="group_name"> - 새 그룹 이름을 여기에 입력 + 새 그룹 이름 입력 </text> <text name="prepend_founded_by"> 설립자 @@ -37,9 +37,9 @@ (소유주는 굵은 글씨로 표시) </text> <name_list name="visible_members"> - <column label="Member Name" name="name" /> - <column label="Title" name="title" /> - <column label="Last Login" name="online" /> + <column label="회원 이름" name="name" /> + <column label="타이틀" name="title" /> + <column label="마지막 로그인" name="online" /> </name_list> <text name="incomplete_member_data_str"> 회원 데이터를 가져오는 중 @@ -66,10 +66,10 @@ tool_tip="그룹 정보를 성인 전용으로 간주할지를 여부를 설정합니다." /> <panel name="title_container"> <text name="active_title_label"> - 보여질 타이틀 + 활성화된 타이틀 </text> <combo_box name="active_title" - tool_tip="Sets the title that appears in your avatar's name tag when this group is active." /> + tool_tip="이 그룹이 활성화되었을 때 아바타의 이름 택에 타이틀이 보이도록 설정합니다." /> </panel> <check_box label="그룹 공지 수령" name="receive_notices" tool_tip="그룹으로부터 공지를 수신할지를 여부를 설정합니다. 본 그룹이 스팸 메일을 보낼 경우 이 상자를 선택 해제합니다." /> 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 47a39f7..8d1f853 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml @@ -14,7 +14,7 @@ 할당할 역할을 선택 하십시오: </text> <combo_box name="role_name" - tool_tip="Choose from the list of Roles you are allowed to assign members to." /> + tool_tip="회원을 할당할 수 있게 허가된 역할 목록에서 선택합니다." /> <button label="초대장 전송" name="ok_button" /> <button label="취소" name="cancel_button" /> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml b/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml index 77f9301..dacabea 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml @@ -17,9 +17,9 @@ 그룹 소유 토지 </text> <scroll_list name="group_parcel_list"> - <column label="Parcel Name" name="name" /> - <column label="Region" name="location" /> - <column label="Area" name="area" /> + <column label="토지 이름" name="name" /> + <column label="지역" name="location" /> + <column label="면적" name="area" /> <column label="" name="hidden" /> </scroll_list> <button label="지도에 표시" label_selected="지도에 표시" name="map_button" /> 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 9682eea..7edb35b 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml @@ -21,9 +21,9 @@ </text> <scroll_list name="notice_list"> <column label="" name="icon" /> - <column label="Subject" name="subject" /> - <column label="From" name="from" /> - <column label="Date" name="date" /> + <column label="제목" name="subject" /> + <column label="부터" name="from" /> + <column label="날짜" name="date" /> </scroll_list> <text name="notice_list_none_found"> 발견되지 않음. @@ -37,10 +37,10 @@ 공지 만들기 </text> <text name="lbl2"> - 공지를 전송하려면 제목을 입력해야 합니다. 인벤토리에서 이 창으로 -아이템을 드래그하여 공지 작성창에 단일 아이템을 첨부할 수 -있습니다. 첨부한 아이템은 복사 및 전송할 수 있지만 -전체 폴더를 전송할 수는 없습니다. + 공지를 전송하려면 제목을 입력해야 합니다. 인벤토리에서 +이 창으로 아이템을 드래그하여 공지 작성창에 단일 아이템을 +첨부할 수 있습니다. 첨부한 아이템은 복사 및 전송할 +수 있지만 전체 폴더를 전송할 수는 없습니다. </text> <text name="lbl3"> 제목: @@ -55,7 +55,7 @@ name="remove_attachment" /> <button label="공지 전송" label_selected="공지 전송" name="send_notice" /> <panel name="drop_target" - tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." /> + tool_tip="인벤토리 아이템을 공지와 함께 보내려면 메시지 박스로 드래그하십시오. 공지와 함께 보내려면 복사와 전송할 권리를 허가받아야 합니다." /> </panel> <panel label="과거 공지 보기" name="panel_view_past_notice"> <text name="lbl"> diff --git a/linden/indra/newview/skins/xui/ko/panel_group_roles.xml b/linden/indra/newview/skins/xui/ko/panel_group_roles.xml index 0a9070a..2cbc3f5 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_roles.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_roles.xml @@ -50,12 +50,12 @@ <button label="검색" name="search_button" /> <button label="모두 표시" name="show_all_button" /> <name_list name="member_list"> - <column label="Member Name" name="name" /> - <column label="Donated Tier" name="donated" /> - <column label="Last Login" name="online" /> + <column label="회원 이름" name="name" /> + <column label="기부된 토지층 " name="donated" /> + <column label="마지막 로그인" name="online" /> </name_list> <button label="새로운 사람 초대…" name="member_invite" /> - <button label="그룹에서 강퇴" name="member_eject" /> + <button label="그룹에서 퇴출" name="member_eject" /> <text name="help_text"> 회원에게 할당된 역할을 추가 또는 제거할 수 있습니다. Ctrl 키를 누른 상태로 해당하는 회원 이름을 클릭하면 @@ -66,9 +66,9 @@ <button label="검색" name="search_button" /> <button label="모두 표시" name="show_all_button" /> <scroll_list name="role_list"> - <column label="Role Name" name="name" /> - <column label="Title" name="title" /> - <column label="Members" name="members" /> + <column label="역할 이름" name="name" /> + <column label="타이틀" name="title" /> + <column label="회원" name="members" /> </scroll_list> <button label="새 역할 생성 …" name="role_create" /> <button label="역할 삭제" name="role_delete" /> @@ -81,7 +81,7 @@ <panel label="권한" name="actions_sub_tab"> <button label="검색" name="search_button" /> <button label="모두 표시" name="show_all_button" /> - <scroll_list name="action_list" tool_tip="Select an Ability to view more details."> + <scroll_list name="action_list" tool_tip="자세한 사항을 보려면 권한 탭을 선택하십시오."> <column label="" name="icon" /> <column label="" name="action" /> </scroll_list> @@ -103,7 +103,7 @@ <column label="" name="role" /> </scroll_list> <scroll_list name="member_allowed_actions" - tool_tip="For Details of each Allowed Ability see the Abilities tab."> + tool_tip="개개의 허용된 권한 세부사항은 권한 탭을 참고하십시오."> <column label="" name="icon" /> <column label="" name="action" /> </scroll_list> @@ -137,7 +137,7 @@ <check_box label="회원이 표시되었습니다." name="role_visible_in_list" tool_tip="역할의 회원이 일반 탭에서 그룹 밖의 사람들에게 보이는지 여부를 설정합니다." /> <scroll_list name="role_allowed_actions" - tool_tip="For Details of each Allowed Ability see the Abilities tab."> + tool_tip="개개의 허용된 권한 세부사항은 권한 탭을 참고하십시오."> <column label="" name="icon" /> <column label="" name="checkbox" /> <column label="" name="action" /> diff --git a/linden/indra/newview/skins/xui/ko/panel_group_voting.xml b/linden/indra/newview/skins/xui/ko/panel_group_voting.xml index d18865a..53070b3 100644 --- a/linden/indra/newview/skins/xui/ko/panel_group_voting.xml +++ b/linden/indra/newview/skins/xui/ko/panel_group_voting.xml @@ -21,7 +21,7 @@ 제안 투표 </text> <text name="empty_proposal_txt"> - 만들려는 제안은 비어 있습니다. 제안을 만들기 전에 작성하셔야 합니다. + 작성하고자 하는 제안이 비어 있습니다. 제안을 하기전에 작성하셔야 합니다. </text> <text name="proposal_instructions"> 투표하려는 제안을 더블 클릭하거나 만들기를 눌러 새로운 제안을 생성합니다. @@ -49,7 +49,7 @@ <text name="duration_text"> 일 </text> - <radio_group name="majority" tool_tip="Majority of total votes needed to win."> + <radio_group name="majority" tool_tip="전체중 과반수가 이기게 됩니다."> 단순 과반수 2/3 과반수 만장일치 @@ -62,14 +62,14 @@ </text> <button label="제안 제출" label_selected="제안 제출" name="btn_submit" /> <button label="취소" label_selected="취소" name="btn_cancel" /> - <button label="예" label_selected="예" name="btn_yes" /> - <button label="아니오" label_selected="아니오" name="btn_no" /> + <button label="예스" label_selected="예스" name="btn_yes" /> + <button label="노우" label_selected="노우" name="btn_no" /> <button label="기권" label_selected="기권" name="btn_abstain" /> <text name="txt"> 그룹 투표 기록 </text> <text name="instructions"> - 지난 투표를 더블 클릭하거나 하나를 선택하고 결과보기를 클릭하여 결과를 봅니다. + 과거의 투표를 더블 클릭하거나 하나를 선택하고 아이템보기를 클릭합니다. </text> <text name="history_list_lbl"> 과거의 투표 투표 종료 diff --git a/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml b/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml index 1dc1268..550ae3f 100644 --- a/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml +++ b/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml @@ -19,10 +19,10 @@ (알 수 없음) </text> <text name="resellable_clause"> - 이 지역에서 구매한 토지는 재판매 할 수 없는 경우도 있습니다. + 이 지역에서 구매한 토지는 재판매 할 수 없을 수도 있습니다. </text> <text name="changeable_clause"> - 이 지역에서 구매한 토지는 결합 또는 분할 할 수 없는 경우도 있습니다. + 이 지역에서 구매한 토지는 결합/분할 할 수 없을 수도 있습니다. </text> <text name="can_resell"> 이 지역에서 구매한 토지는 재판매 할 수 있습니다. diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml index fd6e8b3..17f738f 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml @@ -24,8 +24,8 @@ <text type="string" length="1" name="ui_volume_text"> 메뉴 효과음: </text> - <spinner label="L$ 변화 알림" name="L$ Change Threshold" /> - <spinner label="건강변화 알림" name="Health Change Threshold" /> + <spinner label="L$ 변화 시작" name="L$ Change Threshold" /> + <spinner label="건강변화 시작" name="Health Change Threshold" /> <text type="string" length="1" name="doppler_effect_text"> 도플러 효과: </text> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml index 358d551..93a36de 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml @@ -15,19 +15,19 @@ </radio_item> </radio_group> <text type="string" length="1" name="text_box2"> - 글자 색: + 채팅색: </text> <color_swatch label="시스템" name="system" /> <color_swatch label="사용자" name="users" /> <color_swatch label="오브젝트" name="objects" /> - <color_swatch label="말풍선" name="background" /> + <color_swatch label="물방울" name="background" /> <color_swatch label="URL" name="links" /> <text type="string" length="1" name="text_box3"> 콘솔: </text> <spinner label="채팅창 사라짐" name="fade_chat_time" /> <text type="string" length="1" name="text_box4"> - (초) + (초뒤) </text> <text type="string" length="1" name="text_box5"> (#행) @@ -37,14 +37,14 @@ 옵션: </text> <check_box label="전체화면 사용(재시작 필요)" name="chat_full_width_check" /> - <check_box label="Enter 키 누른 후 채팅창 닫기" name="close_chat_on_return_check" /> - <check_box label="화살표 키는 채팅시 아바타를 움직이는데 사용" + <check_box label="enter키 누른 후 채팅창 닫기" name="close_chat_on_return_check" /> + <check_box label="화살표 키는 채팅시 항상 아바타를 움직이는데 사용" name="arrow_keys_move_avatar_check" /> <check_box label="채팅 시간 표시하기" name="show_timestamps_check" /> <text type="string" length="1" name="text_box7"> - 말풍선 채팅: + 물방울 채팅: </text> - <check_box label="말풍선 표시하기" name="bubble_text_chat" /> + <check_box label="채팅 물방울 표시하기" name="bubble_text_chat" /> <slider label="투명도" name="bubble_chat_opacity" /> <text type="string" length="1" name="text_box8"> 스크립트 오류: diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml index d6bfebf..6746cb2 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml @@ -20,19 +20,19 @@ 항상 </radio_item> </radio_group> - <check_box label="내 화면에서 내 이름 숨기기" name="show_my_name_checkbox" /> - <check_box label="내 그룹명 숨기기" name="show_my_title_checkbox" /> + <check_box label="화면에서 이름 숨기기" name="show_my_name_checkbox" /> + <check_box label="그룹명 숨기기" name="show_my_title_checkbox" /> <check_box label="작은 아바타 이름" name="small_avatar_names_checkbox" /> <color_swatch label="" name="effect_color_swatch" tool_tip="색 관리기를 열려면 클릭 하십시오." /> <spinner label="자리비움 시간초과:" name="afk_timeout_spinner" /> <check_box label="온라인 친구 보여주기" name="friends_online_notify_checkbox" /> <check_box label="미니 지도 회전" name="rotate_mini_map_checkbox" /> - <check_box label="L$ 지출과 기부 알려주기" name="notify_money_change_checkbox" /> + <check_box label="L$(Linden Dollars) 지출과 기부 알려주기" name="notify_money_change_checkbox" /> <check_box label="다음 시작할 때 그래픽 하드웨어 자동 감지" name="probe_hardware_checkbox" tool_tip="세컨드라이프는 사용자의 하드웨어에 따라 일부 그래픽 설정을 자동으로 구성합니다. 새로운 하드웨어를 설치하려는 경우, 세컨드라이프가 이를 다시 감지하도록 해야 합니다." /> - <check_box label="시스템 색 관리 사용" name="use_system_color_picker_checkbox" + <check_box label="시스템 기본색 관리 사용" name="use_system_color_picker_checkbox" tool_tip="세컨드라이프에서 제공하는 것 대신 기본 시스템 색관리를 사용합니다." /> <text type="string" length="1" name="start_location_textbox"> 시작 위치: @@ -41,7 +41,7 @@ 이름 표시: </text> <text type="string" length="1" name="effects_color_textbox"> - 내 효과를 위한 색상: + 색상 효과: </text> <text type="string" length="1" name="seconds_textbox"> 초 @@ -53,7 +53,7 @@ 언어: </text> <text type="string" length="1" name="language_textbox2"> - (재시동 필요) + (다시 시작하십시오.) </text> <text name="region_name_prompt"> <지역명 입력> @@ -86,16 +86,16 @@ 불어(French) – 베타 </combo_item> <combo_item type="string" length="1" name="(Japanese)"> - 일본어 (Japanese) - Beta + 일본어 (Japanese) - 베타 </combo_item> <combo_item type="string" length="1" name="(Korean)"> - 한국어 (Korean) - Beta + 한국어 (Korean) - 베타 </combo_item> <combo_item type="string" length="1" name="Portugese"> 포르투갈어 –베타 </combo_item> <combo_item type="string" length="1" name="Spanish"> - Español (스페인어) - 베타 + 스페인어 (Español) - 베타 </combo_item> </combo_box> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml index 06c3ec1..142f7c8 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="그래픽 디테일" name="Display panel 3"> +<panel label="그래픽 세부사항" name="Display panel 3"> <text type="string" length="1" name="text"> 쉐이더: </text> <check_box label="범프매핑 및 광택 보이기" name="bumpshiny" /> <check_box label="잔물결 보이기" name="ripple" /> - <check_box label="아바타 버텍스 프로그램" name="avatarvp" /> + <check_box label="아바타 버텍스 프로그램 보이기" name="avatarvp" /> <text type="string" length="1" name="Avatar Rendering:"> 아바타 렌더링: </text> @@ -43,15 +43,15 @@ </radio_item> </radio_group> <text type="string" length="1" name="Object Mesh Detail:"> - 오브젝트 메쉬 디테일: + 오브젝트 그물 세부사항: </text> <text type="string" length="1" name="Flexible Mesh Detail:"> - 플렉시블 메쉬 디테일: + 신축적 그물 세부사항: </text> <text type="string" length="1" name="Tree Mesh Detail:"> - 나무 메쉬 디테일: + 나무 그물 세부사항: </text> <text type="string" length="1" name="Avatar Mesh Detail:"> - 아바타 메쉬 디테일: + 아바타 그물 세부사항: </text> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml index c03812d..7eca4c4 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml @@ -41,7 +41,7 @@ </radio_item> </radio_group> <spinner label="안개 농도:" name="fog" /> - <spinner label="최대 파티클 수:" name="particles" /> + <spinner label="최대 입자수:" name="particles" /> <spinner label="복장 구성 제한:" name="comp limit" tool_tip="디스플레이할 최근 변경 복장의 수" /> <text type="string" length="1" name="(lower is faster)"> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml index 54e2dac..ffdeee6 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="메신저" name="im"> <text type="string" length="1" name="text_box"> - 프로필 온라인 상태: + 온라인 상태 프로필: </text> - <check_box label="친구들에게 내 온라인 상태 알림" name="online_visibility" /> + <check_box label="친구들에게만 온라인 상태 알림" name="online_visibility" /> <text type="string" length="1" name="text_box2"> 메신저 옵션: </text> @@ -15,9 +15,9 @@ <check_box label="메신저에 채팅 시간 표시하기" name="show_timestamps_check" /> <check_box label="메신저 쪽지 저장" name="log_instant_messages" /> <check_box label="채팅 저장" name="log_chat" /> - <check_box label="지난 대화 보여주기" name="log_show_history" /> + <check_box label="마지막 대화 내역 보여주기" name="log_show_history" /> <button label="경로 변경" label_selected="경로 변경" name="log_path_button" /> <text type="string" length="1" name="text_box3"> - 부재중 답변: + 통화중 답변 모드: </text> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml index befc9b4..c5aef21 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="입력장치/카메라" name="Input panel"> + <panel label="인풋&카메라" name="Input panel"> <text type="string" length="1" name=" Mouselook Options:"> 1인칭 시점 옵션: </text> @@ -17,9 +17,9 @@ <text type="string" length="1" name="Camera Springiness:"> 카메라 신축성: </text> - <check_box label="자동편집 카메라 움직임" name="edit camera movement" + <check_box label="자동편집 카메라 설정" name="edit camera movement" tool_tip="편집 모드를 시작하거나 종료할 때 카메라 자동 위치 설정 사용" /> - <check_box label="내 모습 변경시 카메라 자동 설정" + <check_box label="자동 움직임 포착 카메라 설정" name="appearance camera movement" tool_tip="편집 모드일 때 카메라 자동 위치 설정 사용" /> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml index e1210fb..06539d7 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml @@ -14,7 +14,7 @@ 디스크 캐시 위치: </text> <button label="설정" label_selected="설정" name="set_cache" /> - <button label="초기화" label_selected="설정" name="reset_cache" /> + <button label="재설정" label_selected="설정" name="reset_cache" /> <check_box label="사용자 지정 포트" name="connection_port_enabled" /> <spinner label="포트 번호:" name="connection_port" /> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml index 87b9c1e..0e26606 100644 --- a/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml +++ b/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml @@ -5,9 +5,9 @@ </text> <button label="팝업 보기" label_selected="팝업 보기" name="enable_popup" /> <text type="string" length="1" name="text_box2"> - 허용된 팝업: + 제공된 노트카드, 텍스쳐, 랜드마크: </text> - <button label="나중에 알림' 초기화…" - label_selected="나중에 알림' 초기화…" + <button label="'다음에 생략' 모든대화 표시…" + label_selected="모든 '다음에 보이기' 메시지 재설정합니까?" name="reset_dialogs_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_region_debug.xml b/linden/indra/newview/skins/xui/ko/panel_region_debug.xml index abe8d8d..11998fe 100644 --- a/linden/indra/newview/skins/xui/ko/panel_region_debug.xml +++ b/linden/indra/newview/skins/xui/ko/panel_region_debug.xml @@ -17,8 +17,8 @@ <button label="?" name="disable_physics_help" /> <button label="적용" name="apply_btn" /> <button label="아바타 선택..." name="choose_avatar_btn" /> - <button label="스크립트 오브젝트 제거" name="return_scripted_other_land_btn" /> - <button label="모든 스크립트 오브젝트 제거" name="return_scripted_all_btn" /> + <button label="타인 토지에서 아바타 스크립트 오브젝트 반환" name="return_scripted_other_land_btn" /> + <button label="모든 아바타 스크립트 오브젝트 반환" name="return_scripted_all_btn" /> <button label="대용량 콜라이더 보기…" name="top_colliders_btn" tool_tip="충돌 가능한 최상위 오브젝트 목록" /> <button label="?" name="top_colliders_help" /> diff --git a/linden/indra/newview/skins/xui/ko/panel_region_general.xml b/linden/indra/newview/skins/xui/ko/panel_region_general.xml index 69b8b30..adb9083 100644 --- a/linden/indra/newview/skins/xui/ko/panel_region_general.xml +++ b/linden/indra/newview/skins/xui/ko/panel_region_general.xml @@ -35,8 +35,8 @@ </combo_box> <button label="?" name="access_help" /> <button label="적용" name="apply_btn" /> - <button label="한 명의 사용자를 홈으로 텔리포트..." name="kick_btn" /> - <button label="모든 사용자를 홈으로 텔리포트..." name="kick_all_btn" /> + <button label="1명의 사용자 홈으로 텔리포트..." name="kick_btn" /> + <button label="모든 사용자 홈으로 텔리포트..." name="kick_all_btn" /> <button label="사유지에 메시지 보내기…" name="im_btn" /> <button label="텔레허브 관리…" name="manage_telehub_btn" /> </panel> diff --git a/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml b/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml index 4cc8f57..774d333 100644 --- a/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml +++ b/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml @@ -12,7 +12,7 @@ <button label="?" name="terrain_raise_help" /> <spinner label="지형 깊이 제한" name="terrain_lower_spin" /> <button label="?" name="terrain_lower_help" /> - <check_box label="사유지 전용 태양 사용" name="use_estate_sun_check" /> + <check_box label="사유지 태양 사용" name="use_estate_sun_check" /> <button label="?" name="use_estate_sun_help" /> <check_box label="태양 고정" name="fixed_sun_check" /> <button label="?" name="fixed_sun_help" /> diff --git a/linden/indra/newview/skins/xui/ko/panel_region_texture.xml b/linden/indra/newview/skins/xui/ko/panel_region_texture.xml index 6443b36..855e0c2 100644 --- a/linden/indra/newview/skins/xui/ko/panel_region_texture.xml +++ b/linden/indra/newview/skins/xui/ko/panel_region_texture.xml @@ -48,7 +48,7 @@ 이 값들은 위 텍스처의 혼합 범위를 나타냅니다. </text> <text name="height_text_lbl11"> - 미터법으로 측정하여 최저 값은 텍스처 1번의 최고 높이이임 + 미터법으로 측정하여 최저 값은 텍스처 1번의 최고 높이임 </text> <text name="height_text_lbl12"> 최고 값은 텍스처 4번의 최저 높이입니다. diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp index 48108bd..9bfa373 100644 --- a/linden/indra/newview/viewer.cpp +++ b/linden/indra/newview/viewer.cpp @@ -205,7 +205,6 @@ #include "llviewerbuild.h" #include "llviewercamera.h" #include "llviewercontrol.h" -#include "llviewerjointmesh.h" #include "llviewerimagelist.h" #include "llviewerkeyboard.h" #include "llviewermenu.h" @@ -322,6 +321,9 @@ LLString gDisabledMessage; BOOL gHideLinks = FALSE; // This is whether or not we are connect to a production grid. +// HACK/TEMP - the code that used to set this based on the userserver selection +// is gone, so there is no code that currently sets this to TRUE. Since we don't +// want to ship as "FALSE", hardcoding it to TRUE for now. Please fix. BOOL gInProductionGrid = FALSE; //#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac @@ -929,6 +931,11 @@ int main( int argc, char **argv ) } } + if (!strcmp(gUserServerName, gUserServerDomainName[USERSERVER_AGNI].mName)) + { + gInProductionGrid = TRUE; + } + // // Start of the application // @@ -966,7 +973,6 @@ int main( int argc, char **argv ) // Set up some defaults... gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE); gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE); - gUserServer.setPort(DEFAULT_USER_SERVER_PORT); ///////////////////////////////////////// // @@ -1078,10 +1084,8 @@ int main( int argc, char **argv ) // Initialize apple menubar and various callbacks init_apple_menu(gSecondLife.c_str()); -#if __ppc__ // If the CPU doesn't have Altivec (i.e. it's not at least a G4), don't go any further. - // Only test PowerPC - all Intel Macs have SSE. - if(!gSysCPU.hasAltivec()) + if(!gSysCPU.hasSSE()) { std::ostringstream msg; msg << gSecondLife << " requires a processor with AltiVec (G4 or later)."; @@ -1092,7 +1096,6 @@ int main( int argc, char **argv ) remove_marker_file(); return 1; } -#endif #endif // LL_DARWIN @@ -3101,36 +3104,7 @@ void user_logout() LLMessageSystem* msg = gMessageSystem; if (msg) { -/* if (gSavedSettings.getBOOL("LoggedIn") ) - { - // bleah - we can't use llinfos inside a signal handler - //llinfos << "Sending logout message" << llendl; - - msg->newMessage("LogoutDemand"); - msg->nextBlockFast(_PREHASH_LogoutBlock); - msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID ); - msg->sendMessage(gUserServer); -*/ gSavedSettings.setBOOL("LoggedIn", FALSE); -// } - /* This message has been removed and functionality moved into logoutrequest - - if (gAgent.getRegion()) - { - msg->newMessageFast(_PREHASH_AgentQuit); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - gAgent.sendMessage(); - } - */ - - // Go through all of the regions we know about... -/* if (gWorldp) - { - gWorldp->disconnectRegions(); - }*/ - } gDoneLogout = TRUE; } @@ -3404,15 +3378,7 @@ void update_statistics(U32 frame_count) gViewerStats->mTexturePacketsStat.addValue(LLViewerImageList::sTexturePackets); - cdp = gMessageSystem->mCircuitInfo.findCircuit(gUserServer); - if (cdp) - { - gViewerStats->mUserserverPingStat.addValue(cdp->getPingDelay()); - } - else - { - gViewerStats->mUserserverPingStat.addValue(10000); - } + gViewerStats->mUserserverPingStat.addValue(0); // userserver doesn't exist, therefore ping time is always awesome // log when the LibXUL (aka Mozilla) widget is used and opened so we can monitor framerate changes #if LL_LIBXUL_ENABLED @@ -4998,89 +4964,6 @@ class LLRenderLightingDetailListener: public LLSimpleListener }; static LLRenderLightingDetailListener render_lighting_detail_listener; - -//------------------------------------------------------------------- -//------------------------------------------------------------------- -// Vector Performance Options -//------------------------------------------------------------------- -//------------------------------------------------------------------- - -// Initially, we test the performance of the vectorization code, then -// turn it off if it ends up being slower. JC -BOOL gVectorizePerfTest = TRUE; -BOOL gVectorizeEnable = FALSE; -U32 gVectorizeProcessor = 0; -BOOL gVectorizeSkin = FALSE; - -void update_vector_performances(void) -{ - char *vp; - - switch(gVectorizeProcessor) - { - case 2: vp = "SSE2"; break; // *TODO: replace the magic #s - case 1: vp = "SSE"; break; - default: vp = "COMPILER DEFAULT"; break; - } - llinfos << "Vectorization : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; - llinfos << "Vector Processor : " << vp << llendl ; - llinfos << "Vectorized Skinning : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; - - if(gVectorizeEnable && gVectorizeSkin) - { - switch(gVectorizeProcessor) - { - case 2: - LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2; - break; - case 1: - LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE; - break; - default: - LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized; - break; - } - } - else - { - LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal; - } -} - - -class LLVectorizationEnableListener: public LLSimpleListener -{ - bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) - { - gVectorizeEnable = event->getValue().asBoolean(); - update_vector_performances(); - return true; - } -}; -static LLVectorizationEnableListener vectorization_enable_listener; - -class LLVectorizeSkinListener: public LLSimpleListener -{ - bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) - { - gVectorizeSkin = event->getValue().asBoolean(); - update_vector_performances(); - return true; - } -}; -static LLVectorizeSkinListener vectorize_skin_listener; - -class LLVectorProcessorListener: public LLSimpleListener -{ - bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) - { - gVectorizeProcessor = event->getValue().asInteger(); - update_vector_performances(); - return true; - } -}; -static LLVectorProcessorListener vector_processor_listener; - // Use these strictly for things that are constructed at startup, // or for things that are performance critical. JC void saved_settings_to_globals() @@ -5132,38 +5015,6 @@ void saved_settings_to_globals() gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard"); LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); - if (gSysCPU.hasAltivec()) - { - gSavedSettings.setBOOL("VectorizeEnable", TRUE ); - gSavedSettings.setU32("VectorizeProcessor", 0 ); - } - else - if (gSysCPU.hasSSE2()) - { - gSavedSettings.setBOOL("VectorizeEnable", TRUE ); - gSavedSettings.setU32("VectorizeProcessor", 2 ); - } - else - if (gSysCPU.hasSSE()) - { - gSavedSettings.setBOOL("VectorizeEnable", TRUE ); - gSavedSettings.setU32("VectorizeProcessor", 1 ); - } - else - { - // Don't bother testing or running if CPU doesn't support it. JC - gSavedSettings.setBOOL("VectorizePerfTest", FALSE ); - gSavedSettings.setBOOL("VectorizeEnable", FALSE ); - gSavedSettings.setU32("VectorizeProcessor", 0 ); - gSavedSettings.setBOOL("VectorizeSkin", FALSE); - } - - gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest"); - gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable"); - gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor"); - gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin"); - update_vector_performances(); - // Into a global in case we corrupt the list on crash. gCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING); @@ -5210,9 +5061,6 @@ void saved_settings_to_globals() gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener); gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener); gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener); - gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener); - gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener); - gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener); // gAgent.init() also loads from saved settings. } @@ -5828,28 +5676,10 @@ int parse_args(int argc, char **argv) gUserServerChoice = USERSERVER_OTHER; ip_string.assign( argv[j] ); LLString::trim(ip_string); - gUserServer.setHostByName( ip_string.c_str() ); snprintf(gUserServerName, MAX_STRING, "%s", ip_string.c_str()); /* Flawfinder: ignore */ } gConnectToSomething = TRUE; } - else if (!strcmp(argv[j], "-space") && (++j < argc)) - { - if (!strcmp(argv[j], "-")) - { - gUserServerChoice = USERSERVER_LOCAL; - } - else - { - gUserServerChoice = USERSERVER_OTHER; - ip_string.assign( argv[j] ); - LLString::trim(ip_string); - gUserServer.setAddress( ip_string.c_str() ); - } - gConnectToSomething = TRUE; - - llinfos << "Argument -space is deprecated, use -user instead" << llendl; - } else if (!strcmp(argv[j], "-loginuri") && (++j < argc)) { gLoginURIs.push_back(utf8str_trim(argv[j])); @@ -5921,7 +5751,6 @@ int parse_args(int argc, char **argv) else if (!strcmp(argv[j], "-local")) { gConnectToSomething = FALSE; - gUserServer.invalidate(); gRunLocal = TRUE; } else if(!strcmp(argv[j], "-noinvlib")) @@ -6345,7 +6174,6 @@ void disconnect_viewer(void *) gWorldp = NULL; cleanup_xfer_manager(); - gUserServer.invalidate(); gDisconnected = TRUE; } diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py index e66af2a..ccd6c6e 100755 --- a/linden/indra/newview/viewer_manifest.py +++ b/linden/indra/newview/viewer_manifest.py @@ -40,6 +40,7 @@ class ViewerManifest(LLManifest): super(ViewerManifest, self).construct() self.exclude("*.svn*") self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg") + self.path(src="../../etc/message.xml", dst="app_settings/message.xml") if self.prefix(src="app_settings"): self.exclude("logcontrol.xml") diff --git a/linden/indra/test/MacTester.xcodeproj/project.pbxproj b/linden/indra/test/MacTester.xcodeproj/project.pbxproj index 76bdc0a..1aad040 100644 --- a/linden/indra/test/MacTester.xcodeproj/project.pbxproj +++ b/linden/indra/test/MacTester.xcodeproj/project.pbxproj @@ -241,7 +241,7 @@ 38A8BF620A18C31D00814862 /* metaproperty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = metaproperty.cpp; sourceTree = "<group>"; }; 38A8BF690A18C38800814862 /* reflective.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = reflective.h; sourceTree = "<group>"; }; 38A8BF740A18C42900814862 /* reflective.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reflective.cpp; sourceTree = "<group>"; }; - 8DD76F6C0486A84900D96B5E /* MacTester */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = MacTester; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DD76F6C0486A84900D96B5E /* MacTester */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = MacTester; sourceTree = BUILT_PRODUCTS_DIR; }; 91469E7F0B4486F20009E8F9 /* llmime.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmime.cpp; sourceTree = "<group>"; }; 91469E800B4486F20009E8F9 /* llmime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmime.h; sourceTree = "<group>"; }; 91469E830B44870B0009E8F9 /* llmime_tut.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmime_tut.cpp; sourceTree = "<group>"; }; diff --git a/linden/indra/test/blowfish.pl b/linden/indra/test/blowfish.pl index 7940d87..30f41dc 100755 --- a/linden/indra/test/blowfish.pl +++ b/linden/indra/test/blowfish.pl @@ -1,4 +1,9 @@ #!/usr/bin/perl +# +# Test Perl Crypt::CBC Blowfish algorithm and initial parameter settings +# for compatibility with OpenSSL's Blowfish algorithm/settings. +# +# Used by outbound LSL email (openssl C library) and mailglue (Perl library) use strict; use warnings; diff --git a/linden/indra/test/files.lst b/linden/indra/test/files.lst index 74f8879..8063bfd 100644 --- a/linden/indra/test/files.lst +++ b/linden/indra/test/files.lst @@ -4,24 +4,45 @@ test/io.cpp test/llapp_tut.cpp test/llbase64_tut.cpp test/llblowfish_tut.cpp +test/llbuffer_tut.cpp +test/lldate_tut.cpp test/llerror_tut.cpp +test/llhost_tut.cpp test/llhttpclient_tut.cpp test/llhttpnode_tut.cpp test/llinventoryparcel_tut.cpp test/lliohttpserver_tut.cpp +test/lljoint_tut.cpp test/llmime_tut.cpp test/llmessageconfig_tut.cpp +test/llmessagetemplateparser_tut.cpp +test/llnamevalue_tut.cpp +test/llpermissions_tut.cpp test/llpipeutil.cpp +test/llquaternion_tut.cpp test/llrandom_tut.cpp +test/llsaleinfo_tut.cpp test/llsdmessagebuilder_tut.cpp test/llsdmessagereader_tut.cpp test/llsd_new_tut.cpp test/llsdserialize_tut.cpp +test/llsdutil_tut.cpp test/llservicebuilder_tut.cpp +test/llstreamtools_tut.cpp +test/lltemplatemessagebuilder_tut.cpp test/lltiming_tut.cpp test/lltut.cpp test/lluri_tut.cpp +test/lluuidhashmap_tut.cpp test/llxfer_tut.cpp test/math.cpp +test/message_tut.cpp test/reflection_tut.cpp test/test.cpp +test/v2math_tut.cpp +test/v3color_tut.cpp +test/v3dmath_tut.cpp +test/v3math_tut.cpp +test/v4color_tut.cpp +test/v4coloru_tut.cpp +test/v4math_tut.cpp diff --git a/linden/indra/test/inventory.cpp b/linden/indra/test/inventory.cpp index 0539910..944647f 100644 --- a/linden/indra/test/inventory.cpp +++ b/linden/indra/test/inventory.cpp @@ -28,12 +28,6 @@ * COMPLETENESS OR PERFORMANCE. */ -/** - * - * THOROUGH_DESCRIPTION of inventory.cpp - * - */ - #include "linden_common.h" #include "lltut.h" #include "llinventory.h" @@ -102,67 +96,438 @@ namespace tut typedef inventory_test::object inventory_object; tut::inventory_test inv("llinventory"); +//***class LLInventoryType***// + + template<> template<> void inventory_object::test<1>() { + LLInventoryType::EType retType = LLInventoryType::lookup("sound"); + ensure("1.LLInventoryType::lookup(char*) failed", retType == LLInventoryType::IT_SOUND); + + retType = LLInventoryType::lookup("snapshot"); + ensure("2.LLInventoryType::lookup(char*) failed", retType == LLInventoryType::IT_SNAPSHOT); + } + + template<> template<> + void inventory_object::test<2>() + { + const char* retType = LLInventoryType::lookup(LLInventoryType::IT_CALLINGCARD); + ensure("1.LLInventoryType::lookup(EType) failed", 0 == strcmp(retType, "callcard")); + + retType = LLInventoryType::lookup(LLInventoryType::IT_LANDMARK); + ensure("2.LLInventoryType::lookup(EType) failed", 0 == strcmp(retType, "landmark")); + + } + + template<> template<> + void inventory_object::test<3>() + { + static const char* retType = LLInventoryType::lookupHumanReadable(LLInventoryType::IT_CALLINGCARD); + ensure("1.LLInventoryType::lookupHumanReadable(EType) failed", 0 == strcmp(retType, "calling card")); + + retType = LLInventoryType::lookupHumanReadable(LLInventoryType::IT_LANDMARK); + ensure("2.LLInventoryType::lookupHumanReadable(EType) failed", 0 == strcmp(retType, "landmark")); + } + + template<> template<> + void inventory_object::test<4>() + { + static LLInventoryType::EType retType = LLInventoryType::defaultForAssetType(LLAssetType::AT_TEXTURE); + ensure("1.LLInventoryType::defaultForAssetType(LLAssetType EType) failed", retType == LLInventoryType::IT_TEXTURE); + + retType = LLInventoryType::defaultForAssetType(LLAssetType::AT_LANDMARK); + ensure("2.LLInventoryType::defaultForAssetType(LLAssetType EType) failed", retType == LLInventoryType::IT_LANDMARK); + } + +//*****class LLInventoryItem*****// + + template<> template<> + void inventory_object::test<5>() + { LLPointer<LLInventoryItem> src = create_random_inventory_item(); LLSD sd = ll_create_sd_from_inventory_item(src); //llinfos << "sd: " << *sd << llendl; - LLPointer<LLInventoryItem> dst; + LLPointer<LLInventoryItem> dst = ll_create_item_from_sd(sd); + ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID()); + ensure_equals("3.name::getName() failed", dst->getName(), src->getName()); + ensure_equals("4.type::getType() failed", dst->getType(), src->getType()); + + ensure_equals("5.permissions::getPermissions() failed", dst->getPermissions(), src->getPermissions()); + ensure_equals("6.description::getDescription() failed", dst->getDescription(), src->getDescription()); + ensure_equals("7.sale type::getSaleType() failed", dst->getSaleInfo().getSaleType(), src->getSaleInfo().getSaleType()); + ensure_equals("8.sale price::getSalePrice() failed", dst->getSaleInfo().getSalePrice(), src->getSaleInfo().getSalePrice()); + ensure_equals("9.asset id::getAssetUUID() failed", dst->getAssetUUID(), src->getAssetUUID()); + ensure_equals("10.inventory type::getInventoryType() failed", dst->getInventoryType(), src->getInventoryType()); + ensure_equals("11.flags::getFlags() failed", dst->getFlags(), src->getFlags()); + ensure_equals("12.creation::getCreationDate() failed", dst->getCreationDate(), src->getCreationDate()); + + LLUUID new_item_id, new_parent_id; + new_item_id.generate(); + src->setUUID(new_item_id); + + new_parent_id.generate(); + src->setParent(new_parent_id); + + LLString new_name = "LindenLab"; + src->rename(new_name); + + src->setType(LLAssetType::AT_SOUND); + + LLUUID new_asset_id; + new_asset_id.generate(); + + src->setAssetUUID(new_asset_id); + LLString new_desc = "SecondLife Testing"; + src->setDescription(new_desc); + + S32 new_price = rand(); + LLSaleInfo new_sale_info(LLSaleInfo::FS_COPY, new_price); + src->setSaleInfo(new_sale_info); + + U32 new_flags = rand(); + S32 new_creation = time(NULL); + + LLPermissions new_perm; + + LLUUID new_creator_id; + new_creator_id.generate(); + + LLUUID new_owner_id; + new_owner_id.generate(); + + LLUUID last_owner_id; + last_owner_id.generate(); + + LLUUID new_group_id; + new_group_id.generate(); + new_perm.init(new_creator_id, new_owner_id, last_owner_id, new_group_id); + new_perm.initMasks(PERM_ALL, PERM_ALL, PERM_COPY, PERM_COPY, PERM_MODIFY | PERM_COPY); + src->setPermissions(new_perm); + + src->setInventoryType(LLInventoryType::IT_SOUND); + src->setFlags(new_flags); + src->setCreationDate(new_creation); + + sd = ll_create_sd_from_inventory_item(src); + //llinfos << "sd: " << *sd << llendl; dst = ll_create_item_from_sd(sd); - ensure_equals("item id", dst->getUUID(), src->getUUID()); - ensure_equals("parent", dst->getParentUUID(), src->getParentUUID()); - ensure_equals("name", dst->getName(), src->getName()); - ensure_equals("type", dst->getType(), src->getType()); - ensure_equals( - "permissions", - dst->getPermissions(), - src->getPermissions()); - ensure_equals( - "description", - dst->getDescription(), - src->getDescription()); - ensure_equals( - "sale type", - dst->getSaleInfo().getSaleType(), - src->getSaleInfo().getSaleType()); - ensure_equals( - "sale price", - dst->getSaleInfo().getSalePrice(), - src->getSaleInfo().getSalePrice()); - ensure_equals("asset id", dst->getAssetUUID(), src->getAssetUUID()); - ensure_equals( - "inventory type", - dst->getInventoryType(), - src->getInventoryType()); - ensure_equals("flags", dst->getFlags(), src->getFlags()); - ensure_equals( - "creation", - dst->getCreationDate(), - src->getCreationDate()); + ensure_equals("13.item id::getUUID() failed", dst->getUUID(), src->getUUID()); + ensure_equals("14.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID()); + ensure_equals("15.name::getName() failed", dst->getName(), src->getName()); + ensure_equals("16.type::getType() failed", dst->getType(), src->getType()); + + ensure_equals("17.permissions::getPermissions() failed", dst->getPermissions(), src->getPermissions()); + ensure_equals("18.description::getDescription() failed", dst->getDescription(), src->getDescription()); + ensure_equals("19.sale type::getSaleType() failed type", dst->getSaleInfo().getSaleType(), src->getSaleInfo().getSaleType()); + ensure_equals("20.sale price::getSalePrice() failed price", dst->getSaleInfo().getSalePrice(), src->getSaleInfo().getSalePrice()); + ensure_equals("21.asset id::getAssetUUID() failed id", dst->getAssetUUID(), src->getAssetUUID()); + ensure_equals("22.inventory type::getInventoryType() failed type", dst->getInventoryType(), src->getInventoryType()); + ensure_equals("23.flags::getFlags() failed", dst->getFlags(), src->getFlags()); + ensure_equals("24.creation::getCreationDate() failed", dst->getCreationDate(), src->getCreationDate()); + } template<> template<> - void inventory_object::test<2>() + void inventory_object::test<6>() + { + LLPointer<LLInventoryItem> src = create_random_inventory_item(); + + LLUUID new_item_id, new_parent_id; + new_item_id.generate(); + src->setUUID(new_item_id); + + new_parent_id.generate(); + src->setParent(new_parent_id); + + LLString new_name = "LindenLab"; + src->rename(new_name); + + src->setType(LLAssetType::AT_SOUND); + + LLUUID new_asset_id; + new_asset_id.generate(); + + src->setAssetUUID(new_asset_id); + LLString new_desc = "SecondLife Testing"; + src->setDescription(new_desc); + + S32 new_price = rand(); + LLSaleInfo new_sale_info(LLSaleInfo::FS_COPY, new_price); + src->setSaleInfo(new_sale_info); + + U32 new_flags = rand(); + S32 new_creation = time(NULL); + + LLPermissions new_perm; + + LLUUID new_creator_id; + new_creator_id.generate(); + + LLUUID new_owner_id; + new_owner_id.generate(); + + LLUUID last_owner_id; + last_owner_id.generate(); + + LLUUID new_group_id; + new_group_id.generate(); + new_perm.init(new_creator_id, new_owner_id, last_owner_id, new_group_id); + new_perm.initMasks(PERM_ALL, PERM_ALL, PERM_COPY, PERM_COPY, PERM_MODIFY | PERM_COPY); + src->setPermissions(new_perm); + + src->setInventoryType(LLInventoryType::IT_SOUND); + src->setFlags(new_flags); + src->setCreationDate(new_creation); + + LLSD sd = ll_create_sd_from_inventory_item(src); + LLPointer<LLInventoryItem> dst = ll_create_item_from_sd(sd); + + + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + src1->copy(src); + src1->clone(src); + + ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src1->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src1->getParentUUID()); + ensure_equals("3.name::getName() failed", dst->getName(), src1->getName()); + ensure_equals("4.type::getType() failed", dst->getType(), src1->getType()); + + ensure_equals("5.permissions::getPermissions() failed", dst->getPermissions(), src1->getPermissions()); + ensure_equals("6.description::getDescription() failed", dst->getDescription(), src1->getDescription()); + ensure_equals("7.sale type::getSaleType() failed type", dst->getSaleInfo().getSaleType(), src1->getSaleInfo().getSaleType()); + ensure_equals("8.sale price::getSalePrice() failed price", dst->getSaleInfo().getSalePrice(), src1->getSaleInfo().getSalePrice()); + ensure_equals("9.asset id::getAssetUUID() failed id", dst->getAssetUUID(), src1->getAssetUUID()); + ensure_equals("10.inventory type::getInventoryType() failed type", dst->getInventoryType(), src1->getInventoryType()); + ensure_equals("11.flags::getFlags() failed", dst->getFlags(), src1->getFlags()); + ensure_equals("12.creation::getCreationDate() failed", dst->getCreationDate(), src1->getCreationDate()); + + LLPointer<LLInventoryItem> src2; + src1->clone(src2); + + ensure_not_equals("13.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("14.parent::getParentUUID() failed", src2->getParentUUID(), src1->getParentUUID()); + ensure_equals("15.name::getName() failed", src2->getName(), src1->getName()); + ensure_equals("16.type::getType() failed", src2->getType(), src1->getType()); + + ensure_equals("17.permissions::getPermissions() failed", src2->getPermissions(), src1->getPermissions()); + ensure_equals("18.description::getDescription() failed", src2->getDescription(), src1->getDescription()); + ensure_equals("19.sale type::getSaleType() failed type", src2->getSaleInfo().getSaleType(), src1->getSaleInfo().getSaleType()); + ensure_equals("20.sale price::getSalePrice() failed price", src2->getSaleInfo().getSalePrice(), src1->getSaleInfo().getSalePrice()); + ensure_equals("21.asset id::getAssetUUID() failed id", src2->getAssetUUID(), src1->getAssetUUID()); + ensure_equals("22.inventory type::getInventoryType() failed type", src2->getInventoryType(), src1->getInventoryType()); + ensure_equals("23.flags::getFlags() failed", src2->getFlags(), src1->getFlags()); + ensure_equals("24.creation::getCreationDate() failed", src2->getCreationDate(), src1->getCreationDate()); + + + } + + template<> template<> + void inventory_object::test<7>() + { + FILE* fp = fopen("linden_file.dat","w+"); + if(!fp) + { + llerrs << "file could not be opened\n" << llendl; + return; + } + + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + src1->exportFile(fp, TRUE); + fclose(fp); + + LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); + fp = fopen("linden_file.dat","r+"); + if(!fp) + { + llerrs << "file could not be opened\n" << llendl; + return; + } + + src2->importFile(fp); + fclose(fp); + + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions()); + ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); + ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID()); + ensure_equals("6.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType()); + ensure_equals("8.name::getName() failed", src1->getName(), src2->getName()); + ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription()); + ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate()); + + } + + template<> template<> + void inventory_object::test<8>() + { + + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + + std::ostringstream ostream; + src1->exportLegacyStream(ostream, TRUE); + + std::istringstream istream(ostream.str()); + LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); + src2->importLegacyStream(istream); + + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions()); + ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); + ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID()); + ensure_equals("6.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType()); + ensure_equals("8.name::getName() failed", src1->getName(), src2->getName()); + ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription()); + ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate()); + + + } + + template<> template<> + void inventory_object::test<9>() + { +// exportFileXML seg-faults for some reason. LLXMLNode is teh suck. +#if 0 + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + LLXMLNode* x_node = src1->exportFileXML(TRUE); + + LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); + src2->importXML(x_node); + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions()); + ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); + ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID()); + ensure_equals("6.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType()); + ensure_equals("8.name::getName() failed", src1->getName(), src2->getName()); + ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription()); + ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate()); +#endif + } + + template<> template<> + void inventory_object::test<10>() + { + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + U8* bin_bucket = new U8[300]; + S32 bin_bucket_size = src1->packBinaryBucket(bin_bucket, NULL); + + LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); + src2->unpackBinaryBucket(bin_bucket, bin_bucket_size); + + ensure_equals("1.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); + ensure_equals("2.sale type::getSaleType() failed type", src1->getSaleInfo().getSaleType(), src2->getSaleInfo().getSaleType()); + ensure_equals("3.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("4.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType()); + ensure_equals("5.name::getName() failed", src1->getName(), src2->getName()); + ensure_equals("6.description::getDescription() failed", src1->getDescription(), src2->getDescription()); + ensure_equals("7.flags::getFlags() failed", src1->getFlags(), src2->getFlags()); + + } + + template<> template<> + void inventory_object::test<11>() + { + LLPointer<LLInventoryItem> src1 = create_random_inventory_item(); + LLSD retSd = src1->asLLSD(); + LLPointer<LLInventoryItem> src2 = new LLInventoryItem(); + src2->fromLLSD(retSd); + + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions()); + ensure_equals("4.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID()); + ensure_equals("5.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("6.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType()); + ensure_equals("7.flags::getFlags() failed", src1->getFlags(), src2->getFlags()); + ensure_equals("8.sale type::getSaleType() failed type", src1->getSaleInfo().getSaleType(), src2->getSaleInfo().getSaleType()); + ensure_equals("9.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice()); + ensure_equals("10.name::getName() failed", src1->getName(), src2->getName()); + ensure_equals("11.description::getDescription() failed", src1->getDescription(), src2->getDescription()); + + + skip_fail("12.creation::getCreationDate()"); + ensure_equals("12.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate()); + } + +//******class LLInventoryCategory*******// + + template<> template<> + void inventory_object::test<12>() { LLPointer<LLInventoryCategory> src = create_random_inventory_cat(); LLSD sd = ll_create_sd_from_inventory_category(src); LLPointer<LLInventoryCategory> dst = ll_create_category_from_sd(sd); - ensure_equals("item id", dst->getUUID(), src->getUUID()); - ensure_equals("parent", dst->getParentUUID(), src->getParentUUID()); - ensure_equals("name", dst->getName(), src->getName()); - ensure_equals("type", dst->getType(), src->getType()); - ensure_equals( - "preferred type", - dst->getPreferredType(), - src->getPreferredType()); + + ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID()); + ensure_equals("3.name::getName() failed", dst->getName(), src->getName()); + ensure_equals("4.type::getType() failed", dst->getType(), src->getType()); + ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType()); + + src->setPreferredType( LLAssetType::AT_TEXTURE); + sd = ll_create_sd_from_inventory_category(src); + dst = ll_create_category_from_sd(sd); + ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType()); + + } -/* template<> template<> - void inventory_object::test<3>() + void inventory_object::test<13>() + { + FILE* fp = fopen("linden_file.dat","w"); + if(!fp) + { + llerrs << "file coudnt be opened\n" << llendl; + return; + } + + LLPointer<LLInventoryCategory> src1 = create_random_inventory_cat(); + src1->exportFile(fp, TRUE); + fclose(fp); + + LLPointer<LLInventoryCategory> src2 = new LLInventoryCategory(); + fp = fopen("linden_file.dat","r"); + if(!fp) + { + llerrs << "file coudnt be opened\n" << llendl; + return; + } + + src2->importFile(fp); + fclose(fp); + + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("4.preferred type::getPreferredType() failed", src1->getPreferredType(), src2->getPreferredType()); + ensure_equals("5.name::getName() failed", src1->getName(), src2->getName()); + } + + template<> template<> + void inventory_object::test<14>() { + LLPointer<LLInventoryCategory> src1 = create_random_inventory_cat(); + + std::ostringstream ostream; + src1->exportLegacyStream(ostream, TRUE); + + std::istringstream istream(ostream.str()); + LLPointer<LLInventoryCategory> src2 = new LLInventoryCategory(); + src2->importLegacyStream(istream); + + ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID()); + ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID()); + ensure_equals("3.type::getType() failed", src1->getType(), src2->getType()); + ensure_equals("4.preferred type::getPreferredType() failed", src1->getPreferredType(), src2->getPreferredType()); + ensure_equals("5.name::getName() failed", src1->getName(), src2->getName()); } -*/ } diff --git a/linden/indra/test/llbitpack_tut.cpp b/linden/indra/test/llbitpack_tut.cpp index 1040a96..71e4a4d 100644 --- a/linden/indra/test/llbitpack_tut.cpp +++ b/linden/indra/test/llbitpack_tut.cpp @@ -1,11 +1,12 @@ /** * @file llbitpack_tut.cpp * @author Adroit - * @date February 2007 + * @date 2007-02 * @brief llstreamtools test cases. * * Copyright (c) 2007-2007, Linden Research, Inc. * + * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement diff --git a/linden/indra/test/llbuffer_tut.cpp b/linden/indra/test/llbuffer_tut.cpp new file mode 100644 index 0000000..bf58abb --- /dev/null +++ b/linden/indra/test/llbuffer_tut.cpp @@ -0,0 +1,270 @@ +/** + * @file llbuffer_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief llbuffer test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "llbuffer.h" +#include "llmemtype.h" + +namespace tut +{ + struct buffer + { + }; + + typedef test_group<buffer> buffer_t; + typedef buffer_t::object buffer_object_t; + tut::buffer_t tut_buffer("buffer"); + + template<> template<> + void buffer_object_t::test<1>() + { + LLChannelDescriptors channelDescriptors; + ensure("in() and out() functions Failed", (0 == channelDescriptors.in() && 1 == channelDescriptors.out())); + + S32 val = 50; + LLChannelDescriptors channelDescriptors1(val); + ensure("LLChannelDescriptors in() and out() functions Failed", (50 == channelDescriptors1.in() && 51 == channelDescriptors1.out())); + } + + template<> template<> + void buffer_object_t::test<2>() + { + LLSegment segment; + ensure("LLSegment get functions failed", (0 == segment.getChannel() && NULL == segment.data() && 0 == segment.size())); + segment.setChannel(50); + ensure_equals("LLSegment setChannel() function failed", segment.getChannel(), 50); + ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(50))); + } + + template<> template<> + void buffer_object_t::test<3>() + { + S32 channel = 30; + const char str[] = "SecondLife"; + S32 len = sizeof(str); + LLSegment segment(channel, (U8*)str, len); + ensure("LLSegment get functions failed", (30 == segment.getChannel() && len == segment.size() && (U8*)str == segment.data())); + ensure_memory_matches("LLSegment::data() failed", segment.data(), segment.size(), (U8*)str, len); + ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(channel))); + } + + template<> template<> + void buffer_object_t::test<4>() + { + S32 channel = 50; + S32 bigSize = 16384*2; + char str[] = "SecondLife"; + S32 smallSize = sizeof(str); + + LLSegment segment; + LLHeapBuffer buf; // use default size of DEFAULT_HEAP_BUFFER_SIZE = 16384 + + S32 requestSize; + + requestSize = 16384-1; + ensure("1. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize); + // second request for remainign 1 byte + + requestSize = 1; + ensure("2. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize); + + // it should fail now. + requestSize = 1; + ensure("3. LLHeapBuffer createSegment failed", (FALSE == buf.createSegment(channel, requestSize, segment))); + + LLHeapBuffer buf1(bigSize); + + // requst for more than default size but less than total sizeit should fail now. + requestSize = 16384 + 1; + ensure("4. LLHeapBuffer createSegment failed", (TRUE == buf1.createSegment(channel, requestSize, segment)) && segment.size() == requestSize); + + LLHeapBuffer buf2((U8*) str, smallSize); + requestSize = smallSize; + ensure("5. LLHeapBuffer createSegment failed", (TRUE == buf2.createSegment(channel, requestSize, segment)) && segment.size() == requestSize && memcmp(segment.data(), (U8*) str, requestSize) == 0); + requestSize = smallSize+1; + ensure("6. LLHeapBuffer createSegment failed", (FALSE == buf2.createSegment(channel, requestSize, segment))); + } + + //makeChannelConsumer() + template<> template<> + void buffer_object_t::test<5>() + { + LLChannelDescriptors inchannelDescriptors(20); + LLChannelDescriptors outchannelDescriptors = LLBufferArray::makeChannelConsumer(inchannelDescriptors); + ensure("LLBufferArray::makeChannelConsumer() function Failed", (21 == outchannelDescriptors.in())); + } + + template<> template<> + void buffer_object_t::test<6>() + { + LLBufferArray bufferArray; + const char array[] = "SecondLife"; + S32 len = strlen(array); + LLChannelDescriptors channelDescriptors = bufferArray.nextChannel(); + bufferArray.append(channelDescriptors.in(), (U8*)array, len); + S32 count = bufferArray.countAfter(channelDescriptors.in(), NULL); + ensure_equals("Appended size is:", count, len); + } + + //append() and prepend() + template<> template<> + void buffer_object_t::test<7>() + { + LLBufferArray bufferArray; + const char array[] = "SecondLife"; + S32 len = strlen(array); + const char array1[] = "LindenLabs"; + S32 len1 = strlen(array1); + + std::string str(array1); + str.append(array); + + LLChannelDescriptors channelDescriptors = bufferArray.nextChannel(); + bufferArray.append(channelDescriptors.in(), (U8*)array, len); + bufferArray.prepend(channelDescriptors.in(), (U8*)array1, len1); + char buf[100]; + S32 len2 = 20; + bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2); + ensure_equals("readAfter length failed", len2, 20); + + buf[len2] = '\0'; + ensure_equals("readAfter/prepend/append failed", buf, str); + } + + //append() + template<> template<> + void buffer_object_t::test<8>() + { + LLBufferArray bufferArray; + const char array[] = "SecondLife"; + S32 len = strlen(array); + const char array1[] = "LindenLabs"; + S32 len1 = strlen(array1); + + std::string str(array); + str.append(array1); + + LLChannelDescriptors channelDescriptors = bufferArray.nextChannel(); + bufferArray.append(channelDescriptors.in(), (U8*)array, len); + bufferArray.append(channelDescriptors.in(), (U8*)array1, len1); + char buf[100]; + S32 len2 = 20; + bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2); + ensure_equals("readAfter length failed", len2, 20); + + buf[len2] = '\0'; + ensure_equals("readAfter/append/append failed", buf, str); + } + + template<> template<> + void buffer_object_t::test<9>() + { + LLBufferArray bufferArray; + const char array[] = "SecondLife"; + S32 len = strlen(array) + 1; + std::string str(array); + LLChannelDescriptors channelDescriptors = bufferArray.nextChannel(); + bufferArray.append(channelDescriptors.in(), (U8*)array, len); + LLBufferArray bufferArray1; + ensure("Contents are not copied and the source buffer is not empty", (1 == bufferArray1.takeContents(bufferArray))); + + char buf[100]; + S32 len2 = len; + bufferArray1.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2); + ensure_equals("takeContents failed to copy", buf, str); + } + + //seek() + template<> template<> + void buffer_object_t::test<10>() + { + const char array[] = "SecondLife is a Virtual World"; + S32 len = strlen(array); + LLBufferArray bufferArray; + bufferArray.append(0, (U8*)array, len); + + char buf[255]; + S32 len1 = 16; + U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1); + buf[len1] = '\0'; + last = bufferArray.seek(0, last, -2); + + len1 = 15; + last = bufferArray.readAfter(0, last, (U8*)buf, len1); + buf[len1] = '\0'; + std::string str(buf); + ensure_equals("Seek does'nt worked", str, std::string("a Virtual World")); + } + + template<> template<> + void buffer_object_t::test<11>() + { + const char array[] = "SecondLife is a Virtual World"; + S32 len = strlen(array); + LLBufferArray bufferArray; + bufferArray.append(0, (U8*)array, len); + + char buf[255]; + S32 len1 = 10; + U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1); + bufferArray.splitAfter(last); + LLBufferArray::segment_iterator_t iterator = bufferArray.beginSegment(); + ++iterator; + std::string str(((char*)(*iterator).data()), (*iterator).size()); + ensure_equals("Strings are not equal;splitAfter() operation failed", str, std::string(" is a Virtual World")); + } + + //makeSegment()->eraseSegment() + template<> template<> + void buffer_object_t::test<12>() + { + LLBufferArray bufferArray; + LLChannelDescriptors channelDescriptors; + LLBufferArray::segment_iterator_t it; + S32 length = 1000; + it = bufferArray.makeSegment(channelDescriptors.out(), length); + ensure("makeSegment() function failed", (it != bufferArray.endSegment())); + ensure("eraseSegment() function failed", bufferArray.eraseSegment(it)); + ensure("eraseSegment() begin/end should now be same", bufferArray.beginSegment() == bufferArray.endSegment()); + } + + // constructSegmentAfter() + template<> template<> + void buffer_object_t::test<13>() + { + LLBufferArray bufferArray; + LLBufferArray::segment_iterator_t it; + LLSegment segment; + LLBufferArray::segment_iterator_t end = bufferArray.endSegment(); + it = bufferArray.constructSegmentAfter(NULL, segment); + ensure("constructSegmentAfter() function failed", (it == end)); + } +} diff --git a/linden/indra/test/lldatapacker_tut.cpp b/linden/indra/test/lldatapacker_tut.cpp index 71def35..1c2a10e 100644 --- a/linden/indra/test/lldatapacker_tut.cpp +++ b/linden/indra/test/lldatapacker_tut.cpp @@ -1,11 +1,12 @@ /** * @file lldatapacker_tut.cpp * @author Adroit - * @date February 2007 + * @date 2007-02 * @brief LLDataPacker test cases. * * Copyright (c) 2007-2007, Linden Research, Inc. * + * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement diff --git a/linden/indra/test/lldate_tut.cpp b/linden/indra/test/lldate_tut.cpp new file mode 100644 index 0000000..f8813e3 --- /dev/null +++ b/linden/indra/test/lldate_tut.cpp @@ -0,0 +1,206 @@ +/** + * @file lldate_tut.cpp + * @author Adroit + * @date 2007-02 + * @brief LLDate test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "linden_common.h" +#include "lldate.h" + +#define VALID_DATE "2003-04-30T04:00:00Z" +#define VALID_DATE_LEAP "2004-02-29T04:00:00Z" +#define VALID_DATE_HOUR_BOUNDARY "2003-04-30T23:59:59Z" + +// invalid format +#define INVALID_DATE_MISSING_YEAR "-04-30T22:59:59Z" +#define INVALID_DATE_MISSING_MONTH "1900-0430T22:59:59Z" +#define INVALID_DATE_MISSING_DATE "1900-0430-T22:59:59Z" +#define INVALID_DATE_MISSING_T "1900-04-30-22:59:59Z" +#define INVALID_DATE_MISSING_HOUR "1900-04-30T:59:59Z" +#define INVALID_DATE_MISSING_MIN "1900-04-30T01::59Z" +#define INVALID_DATE_MISSING_SEC "1900-04-30T01:59Z" +#define INVALID_DATE_MISSING_Z "1900-04-30T01:59:23" +#define INVALID_DATE_EMPTY "" + +// invalid values +// apr 1.1.1 seems to not care about constraining the date to valid +// dates. Put these back when the parser checks. +#define LL_DATE_PARSER_CHECKS_BOUNDARY 0 +//#define INVALID_DATE_24HOUR_BOUNDARY "2003-04-30T24:00:00Z" +//#define INVALID_DATE_LEAP "2003-04-29T04:00:00Z" +//#define INVALID_DATE_HOUR "2003-04-30T24:59:59Z" +//#define INVALID_DATE_MIN "2003-04-30T22:69:59Z" +//#define INVALID_DATE_SEC "2003-04-30T22:59:69Z" +//#define INVALID_DATE_YEAR "0-04-30T22:59:59Z" +//#define INVALID_DATE_MONTH "2003-13-30T22:59:59Z" +//#define INVALID_DATE_DAY "2003-04-35T22:59:59Z" + +namespace tut +{ + struct date_test + { + + }; + typedef test_group<date_test> date_test_t; + typedef date_test_t::object date_test_object_t; + tut::date_test_t tut_date_test("date_test"); + + /* format validation */ + template<> template<> + void date_test_object_t::test<1>() + { + LLDate date(VALID_DATE); + std::string expected_string; + bool result; + expected_string = VALID_DATE; + ensure_equals("Valid Date failed" , expected_string, date.asString()); + + result = date.fromString(VALID_DATE_LEAP); + expected_string = VALID_DATE_LEAP; + ensure_equals("VALID_DATE_LEAP failed" , expected_string, date.asString()); + + result = date.fromString(VALID_DATE_HOUR_BOUNDARY); + expected_string = VALID_DATE_HOUR_BOUNDARY; + ensure_equals("VALID_DATE_HOUR_BOUNDARY failed" , expected_string, date.asString()); + + result = date.fromString(INVALID_DATE_MISSING_YEAR); + ensure_equals("INVALID_DATE_MISSING_YEAR should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_MONTH); + ensure_equals("INVALID_DATE_MISSING_MONTH should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_DATE); + ensure_equals("INVALID_DATE_MISSING_DATE should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_T); + ensure_equals("INVALID_DATE_MISSING_T should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_HOUR); + ensure_equals("INVALID_DATE_MISSING_HOUR should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_MIN); + ensure_equals("INVALID_DATE_MISSING_MIN should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_SEC); + ensure_equals("INVALID_DATE_MISSING_SEC should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MISSING_Z); + ensure_equals("INVALID_DATE_MISSING_Z should have failed" , result, false); + + result = date.fromString(INVALID_DATE_EMPTY); + ensure_equals("INVALID_DATE_EMPTY should have failed" , result, false); + } + + /* Invalid Value Handling */ + template<> template<> + void date_test_object_t::test<2>() + { +#if LL_DATE_PARSER_CHECKS_BOUNDARY + LLDate date; + std::string expected_string; + bool result; + + result = date.fromString(INVALID_DATE_24HOUR_BOUNDARY); + ensure_equals("INVALID_DATE_24HOUR_BOUNDARY should have failed" , result, false); + ensure_equals("INVALID_DATE_24HOUR_BOUNDARY date still set to old value on failure!" , date.secondsSinceEpoch(), 0); + + result = date.fromString(INVALID_DATE_LEAP); + ensure_equals("INVALID_DATE_LEAP should have failed" , result, false); + + result = date.fromString(INVALID_DATE_HOUR); + ensure_equals("INVALID_DATE_HOUR should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MIN); + ensure_equals("INVALID_DATE_MIN should have failed" , result, false); + + result = date.fromString(INVALID_DATE_SEC); + ensure_equals("INVALID_DATE_SEC should have failed" , result, false); + + result = date.fromString(INVALID_DATE_YEAR); + ensure_equals("INVALID_DATE_YEAR should have failed" , result, false); + + result = date.fromString(INVALID_DATE_MONTH); + ensure_equals("INVALID_DATE_MONTH should have failed" , result, false); + + result = date.fromString(INVALID_DATE_DAY); + ensure_equals("INVALID_DATE_DAY should have failed" , result, false); +#endif + } + + /* API checks */ + template<> template<> + void date_test_object_t::test<3>() + { + LLDate date; + std::istringstream stream(VALID_DATE); + std::string expected_string = VALID_DATE; + date.fromStream(stream); + ensure_equals("fromStream failed", date.asString(), expected_string); + } + + template<> template<> + void date_test_object_t::test<4>() + { + LLDate date1(VALID_DATE); + LLDate date2(date1); + ensure_equals("LLDate(const LLDate& date) constructor failed", date1.asString(), date2.asString()); + } + + template<> template<> + void date_test_object_t::test<5>() + { + LLDate date1(VALID_DATE); + LLDate date2(date1.secondsSinceEpoch()); + ensure_equals("secondsSinceEpoch not equal",date1.secondsSinceEpoch(), date2.secondsSinceEpoch()); + ensure_equals("LLDate created using secondsSinceEpoch not equal", date1.asString(), date2.asString()); + } + + template<> template<> + void date_test_object_t::test<6>() + { + LLDate date(VALID_DATE); + std::ostringstream stream; + stream << date; + std::string expected_str = VALID_DATE; + ensure_equals("ostringstream failed", expected_str, stream.str()); + } + + template<> template<> + void date_test_object_t::test<7>() + { + LLDate date; + std::istringstream stream(VALID_DATE); + stream >> date; + std::string expected_str = VALID_DATE; + std::ostringstream out_stream; + out_stream << date; + + ensure_equals("<< failed", date.asString(),expected_str); + ensure_equals("<< to >> failed", stream.str(),out_stream.str()); + } +} diff --git a/linden/indra/test/llhost_tut.cpp b/linden/indra/test/llhost_tut.cpp new file mode 100644 index 0000000..01f3079 --- /dev/null +++ b/linden/indra/test/llhost_tut.cpp @@ -0,0 +1,237 @@ +/** + * @file llhost_tut.cpp + * @author Adroit + * @date 2007-02 + * @brief llhost test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "llhost.h" + +namespace tut +{ + struct host_data + { + }; + typedef test_group<host_data> host_test; + typedef host_test::object host_object; + tut::host_test host_testcase("llhost"); + + + template<> template<> + void host_object::test<1>() + { + LLHost host; + ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk()); + } + template<> template<> + void host_object::test<2>() + { + U32 ip_addr = 0xc098017d; + U32 port = 8080; + LLHost host(ip_addr, port); + ensure("IP address is invalid", ip_addr == host.getAddress()); + ensure("Port Number is invalid", port == host.getPort()); + ensure("IP address and port number both should be ok", host.isOk()); + } + + template<> template<> + void host_object::test<3>() + { + const char* str = "192.168.1.1"; + U32 port = 8080; + LLHost host(str, port); + ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str))); + ensure("Port Number is invalid", (port == host.getPort())); + } + + template<> template<> + void host_object::test<4>() + { + U32 ip = ip_string_to_u32("192.168.1.1"); + U32 port = 22; + U64 ip_port = (((U64) ip) << 32) | port; + LLHost host(ip_port); + ensure("IP address is invalid", ip == host.getAddress()); + ensure("Port Number is invalid", port == host.getPort()); + } + + template<> template<> + void host_object::test<5>() + { + std::string ip_port_string = "192.168.1.1:8080"; + U32 ip = ip_string_to_u32("192.168.1.1"); + U32 port = 8080; + + LLHost host(ip_port_string.c_str()); + ensure("IP address from IP:port is invalid", ip == host.getAddress()); + ensure("Port Number from from IP:port is invalid", port == host.getPort()); + } + + template<> template<> + void host_object::test<6>() + { + U32 ip = 0xc098017d, port = 8080; + LLHost host; + host.set(ip,port); + ensure("IP address is invalid", (ip == host.getAddress())); + ensure("Port Number is invalid", (port == host.getPort())); + } + + template<> template<> + void host_object::test<7>() + { + const char* str = "192.168.1.1"; + U32 port = 8080, ip; + LLHost host; + host.set(str,port); + ip = ip_string_to_u32(str); + ensure("IP address is invalid", (ip == host.getAddress())); + ensure("Port Number is invalid", (port == host.getPort())); + + str = "64.233.187.99"; + ip = ip_string_to_u32(str); + host.setAddress(str); + ensure("IP address is invalid", (ip == host.getAddress())); + + ip = 0xc098017b; + host.setAddress(ip); + ensure("IP address is invalid", (ip == host.getAddress())); + // should still use the old port + ensure("Port Number is invalid", (port == host.getPort())); + + port = 8084; + host.setPort(port); + ensure("Port Number is invalid", (port == host.getPort())); + // should still use the old address + ensure("IP address is invalid", (ip == host.getAddress())); + } + + template<> template<> + void host_object::test<8>() + { + char buffer[50]; + char buffer1[50]; + const char* str = "192.168.1.1"; + U32 port = 8080; + LLHost host; + host.set(str,port); + host.getString(buffer, 50); + ensure("Function Failed", (0 == strcmp("192.168.1.1:8080", buffer))); + + host.getIPString(buffer1, 50); + ensure("Function Failed", (0 == strcmp(str, buffer1))); + + std::string ip_string = host.getIPString(); + ensure("Function Failed", (0 == strcmp(str, buffer1))); + + std::string ip_string_port = host.getIPandPort(); + ensure("Function Failed", (0 == strcmp("192.168.1.1:8080", buffer))); + } + + +// getHostName() and setHostByName + template<> template<> + void host_object::test<9>() + { + std::string hostStr = "google.com"; + char buffer[50] = {0}; + LLHost host; + host.setHostByName(hostStr.c_str()); + host.getHostName(buffer, 50); + // reverse DNS will likely result in appending of some + // sub-domain to the main hostname. so look for + // the main domain name and not do the exact compare + ensure("getHostName failed", (NULL != strstr(buffer, hostStr.c_str()))); + + LLString hostname = host.getHostName(); + ensure("getHostName failed", (NULL != strstr(hostname.c_str(), hostStr.c_str()))); + } + +// setHostByName for dotted IP + template<> template<> + void host_object::test<10>() + { + std::string hostStr = "64.233.167.99"; + LLHost host; + host.setHostByName(hostStr.c_str()); + ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str())); + } + + template<> template<> + void host_object::test<11>() + { + LLHost host1(0xc098017d, 8080); + LLHost host2 = host1; + ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress())); + ensure("Both port numbers are not same", (host1.getPort() == host2.getPort())); + } + + template<> template<> + void host_object::test<12>() + { + LLHost host1("192.168.1.1", 8080); + std::string str1 = "192.168.1.1:8080"; + std::ostringstream stream; + stream << host1; + ensure("Operator << failed", ( stream.str()== str1)); + + // There is no istream >> llhost operator. + //std::istringstream is(stream.str()); + //LLHost host2; + //is >> host2; + //ensure("Operator >> failed. Not compatible with <<", host1 == host2); + } + + // operators ==, !=, < + template<> template<> + void host_object::test<13>() + { + U32 ip_addr = 0xc098017d; + U32 port = 8080; + LLHost host1(ip_addr, port); + LLHost host2(ip_addr, port); + ensure("operator== failed", host1 == host2); + + // change port + host2.setPort(7070); + ensure("operator!= failed", host1 != host2); + + // set port back to 8080 and change IP address now + host2.setPort(8080); + host2.setAddress(ip_addr+10); + ensure("operator!= failed", host1 != host2); + + ensure("operator< failed", host1 < host2); + + // set IP address back to same value and change port + host2.setAddress(ip_addr); + host2.setPort(host1.getPort() + 10); + ensure("operator< failed", host1 < host2); + } +} diff --git a/linden/indra/test/lljoint_tut.cpp b/linden/indra/test/lljoint_tut.cpp new file mode 100644 index 0000000..5be81ae --- /dev/null +++ b/linden/indra/test/lljoint_tut.cpp @@ -0,0 +1,244 @@ +/** + * @file lljoint_tut.cpp + * @author Adroit + * @date 2007=-03 + * @brief lljoint test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#ifdef THIS_DOESNT_LINK +// THIS DOESN'T LINK! + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "m4math.h" +#include "v3math.h" +#include "lljoint.h" + + +namespace tut +{ + struct lljoint_data + { + }; + typedef test_group<lljoint_data> lljoint_test; + typedef lljoint_test::object lljoint_object; + tut::lljoint_test lljoint_testcase("lljoint"); + + template<> template<> + void lljoint_object::test<1>() + { + LLJoint lljoint; + LLJoint* jnt = lljoint.getParent(); + ensure("getParent() failed ", (NULL == jnt)); + ensure("getRoot() failed ", (&lljoint == lljoint.getRoot())); + } + + template<> template<> + void lljoint_object::test<2>() + { + std::string str = "LLJoint"; + LLJoint parent(str), child; + child.setup(str, &parent); + LLJoint* jnt = child.getParent(); + ensure("setup() failed ", (&parent == jnt)); + } + + template<> template<> + void lljoint_object::test<3>() + { + LLJoint parent, child; + std::string str = "LLJoint"; + child.setup(str, &parent); + LLJoint* jnt = parent.findJoint(str); + ensure("findJoint() failed ", (&child == jnt)); + } + + template<> template<> + void lljoint_object::test<4>() + { + LLJoint parent; + std::string str1 = "LLJoint", str2; + parent.setName(str1); + str2 = parent.getName(); + ensure("setName() failed ", (str1 == str2)); + } + + template<> template<> + void lljoint_object::test<5>() + { + LLJoint lljoint; + LLVector3 vec3(2.3f,30.f,10.f); + lljoint.setPosition(vec3); + LLVector3 pos = lljoint.getPosition(); + ensure("setPosition()/getPosition() failed ", (vec3 == pos)); + } + + template<> template<> + void lljoint_object::test<6>() + { + LLJoint lljoint; + LLVector3 vec3(2.3f,30.f,10.f); + lljoint.setWorldPosition(vec3); + LLVector3 pos = lljoint.getWorldPosition(); + ensure("1:setWorldPosition()/getWorldPosition() failed ", (vec3 == pos)); + LLVector3 lastPos = lljoint.getLastWorldPosition(); + ensure("2:getLastWorldPosition failed ", (vec3 == lastPos)); + } + + template<> template<> + void lljoint_object::test<7>() + { + LLJoint lljoint("LLJoint"); + LLQuaternion q(2.3f,30.f,10.f,1.f); + lljoint.setRotation(q); + LLQuaternion rot = lljoint.getRotation(); + ensure("setRotation()/getRotation() failed ", (q == rot)); + } + template<> template<> + void lljoint_object::test<8>() + { + LLJoint lljoint("LLJoint"); + LLQuaternion q(2.3f,30.f,10.f,1.f); + lljoint.setWorldRotation(q); + LLQuaternion rot = lljoint.getWorldRotation(); + ensure("1:setWorldRotation()/getWorldRotation() failed ", (q == rot)); + LLQuaternion lastRot = lljoint.getLastWorldRotation(); + ensure("2:getLastWorldRotation failed ", (q == lastRot)); + } + + template<> template<> + void lljoint_object::test<9>() + { + LLJoint lljoint; + LLVector3 vec3(2.3f,30.f,10.f); + lljoint.setScale(vec3); + LLVector3 scale = lljoint.getScale(); + ensure("setScale()/getScale failed ", (vec3 == scale)); + } + + template<> template<> + void lljoint_object::test<10>() + { + LLJoint lljoint("LLJoint"); + LLMatrix4 mat; + mat.identity(); + lljoint.setWorldMatrix(mat);//giving warning setWorldMatrix not correctly implemented; + LLMatrix4 mat4 = lljoint.getWorldMatrix(); + ensure("setWorldMatrix()/getWorldMatrix failed ", (mat4 == mat)); + } + + template<> template<> + void lljoint_object::test<11>() + { + LLJoint lljoint("parent"); + S32 joint_num = 12; + lljoint.setJointNum(joint_num); + S32 jointNum = lljoint.getJointNum(); + ensure("setJointNum()/getJointNum failed ", (jointNum == joint_num)); + } + + template<> template<> + void lljoint_object::test<12>() + { + LLJoint lljoint; + LLVector3 vec3(2.3f,30.f,10.f); + lljoint.setSkinOffset(vec3); + LLVector3 offset = lljoint.getSkinOffset(); + ensure("1:setSkinOffset()/getSkinOffset() failed ", (vec3 == offset)); + } + + template<> template<> + void lljoint_object::test<13>() + { + LLJoint lljointgp("gparent"); + LLJoint lljoint("parent"); + LLJoint lljoint1("child1"); + lljoint.addChild(&lljoint1); + LLJoint lljoint2("child2"); + lljoint.addChild(&lljoint2); + LLJoint lljoint3("child3"); + lljoint.addChild(&lljoint3); + + LLJoint* jnt = NULL; + jnt = lljoint2.getParent(); + ensure("addChild() failed ", (&lljoint == jnt)); + LLJoint* jnt1 = lljoint.findJoint("child3"); + ensure("findJoint() failed ", (&lljoint3 == jnt1)); + lljoint.removeChild(&lljoint3); + LLJoint* jnt2 = lljoint.findJoint("child3"); + ensure("removeChild() failed ", (NULL == jnt2)); + + lljointgp.addChild(&lljoint); + ensure("GetParent() failed ", (&lljoint== lljoint2.getParent())); + ensure("getRoot() failed ", (&lljointgp == lljoint2.getRoot())); + + ensure("getRoot() failed ", &lljoint1 == lljoint.findJoint("child1")); + + lljointgp.removeAllChildren(); + // parent removed from grandparent - so should not be able to locate child + ensure("removeAllChildren() failed ", (NULL == lljointgp.findJoint("child1"))); + // it should still exist in parent though + ensure("removeAllChildren() failed ", (&lljoint1 == lljoint.findJoint("child1"))); + } + + template<> template<> + void lljoint_object::test<14>() + { + LLJoint lljointgp("gparent"); + + LLJoint llparent1("parent1"); + LLJoint llparent2("parent2"); + + LLJoint llchild("child1"); + LLJoint lladoptedchild("child2"); + llparent1.addChild(&llchild); + llparent1.addChild(&lladoptedchild); + + llparent2.addChild(&lladoptedchild); + ensure("1. addChild failed to remove prior parent", lladoptedchild.getParent() == &llparent2); + ensure("2. addChild failed to remove prior parent", llparent1.findJoint("child2") == NULL); + } + + + //* + Test cases for the following not added. They perform operations + on underlying LLXformMatrix and LLVector3 elements which have + been unit tested separately. + Unit Testing these functions will basically require re-implementing + logic of these function in the test case itself + + 1) void WorldMatrixChildren(); + 2) void updateWorldMatrixParent(); + 3) void updateWorldPRSParent(); + 4) void updateWorldMatrix(); + 5) LLXformMatrix *getXform() { return &mXform; } + 6) void setConstraintSilhouette(LLDynamicArray<LLVector3>& silhouette); + 7) void clampRotation(LLQuaternion old_rot, LLQuaternion new_rot); + + //* +} +#endif // THIS_DOESNT_LINK diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp index 1d11cbf..cc2a0a2 100644 --- a/linden/indra/test/llmessageconfig_tut.cpp +++ b/linden/indra/test/llmessageconfig_tut.cpp @@ -32,41 +32,46 @@ #include "llmessageconfig.h" #include "llsdserialize.h" #include "llfile.h" +#include "lldir.h" #include "lltimer.h" #include "llframetimer.h" namespace tut { - ///var/tmp/babbage/dev/message-liberation/etc - static const char file_name[] = "/tmp/message.xml"; - static const long refreshRateMillis = 6000; - struct LLMessageConfigTestData { + std::string mTestConfigDir; - LLSD getCurrentConfig() + LLMessageConfigTestData() { - LLSD data; - // store aside the current config to overwrite the test ones - // when the test finishes - llifstream in_file(file_name); - if (in_file.is_open()) - { - LLSDSerialize::fromXML(data, in_file); - } - return data; + // generate temp dir + mTestConfigDir = "/tmp/llmessage-config-test"; + LLFile::mkdir(mTestConfigDir.c_str()); + + LLMessageConfig::initClass("simulator", mTestConfigDir); + } + + ~LLMessageConfigTestData() + { + // rm contents of temp dir + gDirUtilp->deleteFilesInDir(mTestConfigDir, "*"); + // rm temp dir + LLFile::rmdir(mTestConfigDir.c_str()); } + void reloadConfig(const LLSD& config) + { + LLMessageConfig::useConfig(config); + } + void writeConfigFile(const LLSD& config) { - LLMessageConfig::initClass("simulator", "/tmp"); - llofstream file(file_name); + std::string configFile = mTestConfigDir + "/message.xml"; + llofstream file(configFile.c_str()); if (file.is_open()) { LLSDSerialize::toPrettyXML(config, file); } file.close(); - ms_sleep(refreshRateMillis); - LLFrameTimer::updateFrameTime(); } }; @@ -78,150 +83,116 @@ namespace tut void LLMessageConfigTestObject::test<1>() // tests server defaults { - LLSD config_backup = getCurrentConfig(); LLSD config; config["serverDefaults"]["simulator"] = "template"; - writeConfigFile(config); - ensure_equals("Ensure server default is not llsd", - LLMessageConfig::isServerDefaultBuilderLLSD(), - false); - ensure_equals("Ensure server default is template", - LLMessageConfig::isServerDefaultBuilderTemplate(), - true); - writeConfigFile(config_backup); + reloadConfig(config); + ensure_equals("Ensure server default is not template", + LLMessageConfig::getServerDefaultFlavor(), + LLMessageConfig::TEMPLATE_FLAVOR); } template<> template<> void LLMessageConfigTestObject::test<2>() - // tests message builders + // tests message flavors { - LLSD config_backup = getCurrentConfig(); LLSD config; config["serverDefaults"]["simulator"] = "template"; - config["messages"]["msg1"]["builder"] = "template"; - config["messages"]["msg2"]["builder"] = "llsd"; - writeConfigFile(config); - ensure_equals("Ensure msg template builder not llsd", - LLMessageConfig::isMessageBuiltLLSD("msg1"), - false); - ensure_equals("Ensure msg template builder", - LLMessageConfig::isMessageBuiltTemplate("msg1"), - true); - ensure_equals("Ensure msg llsd builder", - LLMessageConfig::isMessageBuiltLLSD("msg2"), - true); - ensure_equals("Ensure msg llsd builder not template", - LLMessageConfig::isMessageBuiltTemplate("msg2"), - false); - writeConfigFile(config_backup); + config["messages"]["msg1"]["flavor"] = "template"; + config["messages"]["msg2"]["flavor"] = "llsd"; + reloadConfig(config); + ensure_equals("Ensure msg template flavor", + LLMessageConfig::getMessageFlavor("msg1"), + LLMessageConfig::TEMPLATE_FLAVOR); + ensure_equals("Ensure msg llsd flavor", + LLMessageConfig::getMessageFlavor("msg2"), + LLMessageConfig::LLSD_FLAVOR); } template<> template<> void LLMessageConfigTestObject::test<4>() - // tests message builder defaults + // tests message flavor defaults { - LLSD config_backup = getCurrentConfig(); LLSD config; config["serverDefaults"]["simulator"] = "llsd"; config["messages"]["msg1"]["trusted-sender"] = true; - writeConfigFile(config); - ensure_equals("Ensure missing message defaults to server builder, not template", - LLMessageConfig::isMessageBuiltTemplate("Test"), - false); - ensure_equals("Ensure missing message default to server builder llsd", - LLMessageConfig::isMessageBuiltLLSD("Test"), - true); - ensure_equals("Ensure missing builder defaults to server builder, not template", - LLMessageConfig::isMessageBuiltTemplate("msg1"), - false); - ensure_equals("Ensure missing builder default to server builder llsd", - LLMessageConfig::isMessageBuiltLLSD("msg1"), - true); - - ensure_equals("Ensure server default is not llsd", - LLMessageConfig::isServerDefaultBuilderLLSD(), - true); - ensure_equals("Ensure server default is template", - LLMessageConfig::isServerDefaultBuilderTemplate(), - false); - - writeConfigFile(config_backup); + reloadConfig(config); + ensure_equals("Ensure missing message gives no flavor", + LLMessageConfig::getMessageFlavor("Test"), + LLMessageConfig::NO_FLAVOR); + ensure_equals("Ensure missing flavor is NO_FLAVOR even with sender trustedness set", + LLMessageConfig::getMessageFlavor("msg1"), + LLMessageConfig::NO_FLAVOR); + ensure_equals("Ensure server default is llsd", + LLMessageConfig::getServerDefaultFlavor(), + LLMessageConfig::LLSD_FLAVOR); } template<> template<> void LLMessageConfigTestObject::test<3>() // tests trusted/untrusted senders { - LLSD config_backup = getCurrentConfig(); LLSD config; config["serverDefaults"]["simulator"] = "template"; - config["messages"]["msg1"]["builder"] = "llsd"; + config["messages"]["msg1"]["flavor"] = "llsd"; config["messages"]["msg1"]["trusted-sender"] = false; - config["messages"]["msg2"]["builder"] = "llsd"; + config["messages"]["msg2"]["flavor"] = "llsd"; config["messages"]["msg2"]["trusted-sender"] = true; - writeConfigFile(config); - ensure_equals("Ensure untrusted is not trusted", - LLMessageConfig::isMessageTrusted("msg1"), - false); + reloadConfig(config); ensure_equals("Ensure untrusted is untrusted", - LLMessageConfig::isValidUntrustedMessage("msg1"), - true); + LLMessageConfig::getSenderTrustedness("msg1"), + LLMessageConfig::UNTRUSTED); ensure_equals("Ensure trusted is trusted", - LLMessageConfig::isMessageTrusted("msg2"), - true); - ensure_equals("Ensure trusted is not untrusted", - LLMessageConfig::isValidUntrustedMessage("msg2"), - false); - writeConfigFile(config_backup); + LLMessageConfig::getSenderTrustedness("msg2"), + LLMessageConfig::TRUSTED); + ensure_equals("Ensure missing trustedness is NOT_SET", + LLMessageConfig::getSenderTrustedness("msg3"), + LLMessageConfig::NOT_SET); } template<> template<> void LLMessageConfigTestObject::test<5>() - // tests trusted/untrusted without flag, only builder + // tests trusted/untrusted without flag, only flavor { - LLSD config_backup = getCurrentConfig(); LLSD config; config["serverDefaults"]["simulator"] = "template"; - config["messages"]["msg1"]["builder"] = "llsd"; - writeConfigFile(config); - ensure_equals("Ensure missing trusted is not trusted", - LLMessageConfig::isMessageTrusted("msg1"), - false); - ensure_equals("Ensure missing trusted is not untrusted", - LLMessageConfig::isValidUntrustedMessage("msg1"), - false); - writeConfigFile(config_backup); + config["messages"]["msg1"]["flavor"] = "llsd"; + reloadConfig(config); + ensure_equals("Ensure msg1 exists, has llsd flavor", + LLMessageConfig::getMessageFlavor("msg1"), + LLMessageConfig::LLSD_FLAVOR); + ensure_equals("Ensure missing trusted is not set", + LLMessageConfig::getSenderTrustedness("msg1"), + LLMessageConfig::NOT_SET); } template<> template<> void LLMessageConfigTestObject::test<6>() - // tests message builder defaults { - LLSD config_backup = getCurrentConfig(); LLSD config; - config["serverDefaults"]["simulator"] = "template"; - config["messages"]["msg1"]["trusted-sender"] = true; - writeConfigFile(config); - ensure_equals("Ensure missing message defaults to server builder, not template", - LLMessageConfig::isMessageBuiltTemplate("Test"), - true); - ensure_equals("Ensure missing message default to server builder llsd", - LLMessageConfig::isMessageBuiltLLSD("Test"), - false); - ensure_equals("Ensure missing builder defaults to server builder, not template", - LLMessageConfig::isMessageBuiltTemplate("msg1"), + config["capBans"]["MapLayer"] = true; + config["capBans"]["MapLayerGod"] = false; + reloadConfig(config); + ensure_equals("Ensure cap ban true MapLayer", + LLMessageConfig::isCapBanned("MapLayer"), true); - ensure_equals("Ensure missing builder default to server builder llsd", - LLMessageConfig::isMessageBuiltLLSD("msg1"), + ensure_equals("Ensure cap ban false", + LLMessageConfig::isCapBanned("MapLayerGod"), false); + } - ensure_equals("Ensure server default is not llsd", - LLMessageConfig::isServerDefaultBuilderLLSD(), - false); - ensure_equals("Ensure server default is template", - LLMessageConfig::isServerDefaultBuilderTemplate(), - true); + template<> template<> + void LLMessageConfigTestObject::test<7>() + // tests that config changes are picked up/refreshed periodically + { + LLSD config; + config["serverDefaults"]["simulator"] = "llsd"; + writeConfigFile(config); - writeConfigFile(config_backup); + // wait for it to reload after N seconds + ms_sleep(6*1000); + LLFrameTimer::updateFrameTime(); + ensure_equals("Ensure reload after 6 seconds", + LLMessageConfig::getServerDefaultFlavor(), + LLMessageConfig::LLSD_FLAVOR); } } diff --git a/linden/indra/test/llmessagetemplateparser_tut.cpp b/linden/indra/test/llmessagetemplateparser_tut.cpp new file mode 100644 index 0000000..74b4c55 --- /dev/null +++ b/linden/indra/test/llmessagetemplateparser_tut.cpp @@ -0,0 +1,370 @@ +/** + * @file llmessagetemplateparser_tut.cpp + * @date April 2007 + * @brief LLMessageTemplateParser unit tests + * + * Copyright (c) 2006-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "llmessagetemplateparser.h" + +namespace tut +{ + struct LLMessageTemplateParserTestData { + LLMessageTemplateParserTestData() : mMessage("unset message") + { + } + + ~LLMessageTemplateParserTestData() + { + } + + void ensure_next(LLTemplateTokenizer & tokens, + std::string value, + U32 line) + { + std::string next = tokens.next(); + ensure_equals(mMessage + " token matches", next, value); + ensure_equals(mMessage + " line matches", tokens.line(), line); + } + + char * prehash(const char * name) + { + return gMessageStringTable.getString(name); + } + + void ensure_block_attributes(std::string identifier, + const LLMessageTemplate * message, + const char * name, + EMsgBlockType type, + S32 number, + S32 total_size) + { + const LLMessageBlock * block = message->getBlock(prehash(name)); + identifier = identifier + ":" + message->mName + ":" + name + " block"; + ensure(identifier + " exists", block != NULL); + ensure_equals(identifier + " name", block->mName, prehash(name)); + ensure_equals(identifier + " type", block->mType, type); + ensure_equals(identifier + " number", block->mNumber, number); + ensure_equals(identifier + " total size", block->mTotalSize, total_size); + } + + void ensure_variable_attributes(std::string identifier, + const LLMessageBlock * block, + const char * name, + EMsgVariableType type, + S32 size) + { + const LLMessageVariable * var = block->getVariable(prehash(name)); + identifier = identifier + ":" + block->mName + ":" + name + " variable"; + ensure(identifier + " exists", var != NULL); + ensure_equals( + identifier + " name", var->getName(), prehash(name)); + ensure_equals( + identifier + " type", var->getType(), type); + ensure_equals(identifier + " size", var->getSize(), size); + } + + std::string mMessage; + + }; + + typedef test_group<LLMessageTemplateParserTestData> LLMessageTemplateParserTestGroup; + typedef LLMessageTemplateParserTestGroup::object LLMessageTemplateParserTestObject; + LLMessageTemplateParserTestGroup llMessageTemplateParserTestGroup("LLMessageTemplateParser"); + + template<> template<> + void LLMessageTemplateParserTestObject::test<1>() + // tests tokenizer constructor and next methods + { + mMessage = "test method 1 walkthrough"; + LLTemplateTokenizer tokens("first line\nnext\t line\n\nfourth"); + ensure_next(tokens, "first", 1); + ensure_next(tokens, "line", 1); + ensure_next(tokens, "next", 2); + ensure_next(tokens, "line", 2); + ensure_next(tokens, "fourth", 4); + + tokens = LLTemplateTokenizer("\n\t{ \t Test1 Fixed \n 523 }\n\n"); + ensure(tokens.want("{")); + ensure_next(tokens, "Test1", 2); + ensure_next(tokens, "Fixed", 2); + ensure_next(tokens, "523", 3); + ensure(tokens.want("}")); + + tokens = LLTemplateTokenizer("first line\nnext\t line\n\nfourth"); + ensure(tokens.want("first")); + ensure_next(tokens, "line", 1); + ensure_next(tokens, "next", 2); + ensure_next(tokens, "line", 2); + ensure(tokens.want("fourth")); + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<2>() + // tests tokenizer want method + { + // *NOTE: order matters + LLTemplateTokenizer tokens("first line\nnext\t line\n\nfourth"); + ensure_equals("wants first token", tokens.want("first"), true); + ensure_equals("doesn't want blar token", tokens.want("blar"), false); + ensure_equals("wants line token", tokens.want("line"), true); + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<3>() + // tests tokenizer eof methods + { + LLTemplateTokenizer tokens("single\n\n"); + ensure_equals("is not at eof at beginning", tokens.atEOF(), false); + ensure_equals("doesn't want eof", tokens.wantEOF(), false); + ensure_equals("wants the first token just to consume it", + tokens.want("single"), true); + ensure_equals("is not at eof in middle", tokens.atEOF(), false); + ensure_equals("wants eof", tokens.wantEOF(), true); + ensure_equals("is at eof at end", tokens.atEOF(), true); + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<4>() + // tests variable parsing method + { + LLTemplateTokenizer tokens(std::string("{ Test0 \n\t\n U32 \n\n }")); + LLMessageVariable * var = LLTemplateParser::parseVariable(tokens); + + ensure("test0 var parsed", var != 0); + ensure_equals("name of variable", std::string(var->getName()), std::string("Test0")); + ensure_equals("type of variable is U32", var->getType(), MVT_U32); + ensure_equals("size of variable", var->getSize(), 4); + + delete var; + + std::string message_string("\n\t{ \t Test1 Fixed \n 523 }\n\n"); + tokens = LLTemplateTokenizer(message_string); + var = LLTemplateParser::parseVariable(tokens); + + ensure("test1 var parsed", var != 0); + ensure_equals("name of variable", std::string(var->getName()), std::string("Test1")); + ensure_equals("type of variable is Fixed", var->getType(), MVT_FIXED); + ensure_equals("size of variable", var->getSize(), 523); + + delete var; + + // *NOTE: the parsers call llerrs on invalid input, so we can't really + // test that :-( + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<5>() + // tests block parsing method + { + LLTemplateTokenizer tokens("{ BlockA Single { VarX F32 } }"); + LLMessageBlock * block = LLTemplateParser::parseBlock(tokens); + + ensure("blockA block parsed", block != 0); + ensure_equals("name of block", std::string(block->mName), std::string("BlockA")); + ensure_equals("type of block is Single", block->mType, MBT_SINGLE); + ensure_equals("total size of block", block->mTotalSize, 4); + ensure_equals("number of block defaults to 1", block->mNumber, 1); + ensure_equals("variable type of VarX is F32", + block->getVariableType(prehash("VarX")), MVT_F32); + ensure_equals("variable size of VarX", + block->getVariableSize(prehash("VarX")), 4); + + delete block; + + tokens = LLTemplateTokenizer("{ Stuff Variable { Id LLUUID } }"); + block = LLTemplateParser::parseBlock(tokens); + + ensure("stuff block parsed", block != 0); + ensure_equals("name of block", std::string(block->mName), std::string("Stuff")); + ensure_equals("type of block is Multiple", block->mType, MBT_VARIABLE); + ensure_equals("total size of block", block->mTotalSize, 16); + ensure_equals("number of block defaults to 1", block->mNumber, 1); + ensure_equals("variable type of Id is LLUUID", + block->getVariableType(prehash("Id")), MVT_LLUUID); + ensure_equals("variable size of Id", + block->getVariableSize(prehash("Id")), 16); + + delete block; + + tokens = LLTemplateTokenizer("{ Stuff2 Multiple 45 { Shid LLVector3d } }"); + block = LLTemplateParser::parseBlock(tokens); + + ensure("stuff2 block parsed", block != 0); + ensure_equals("name of block", std::string(block->mName), std::string("Stuff2")); + ensure_equals("type of block is Multiple", block->mType, MBT_MULTIPLE); + ensure_equals("total size of block", block->mTotalSize, 24); + ensure_equals("number of blocks", block->mNumber, 45); + ensure_equals("variable type of Shid is Vector3d", + block->getVariableType(prehash("Shid")), MVT_LLVector3d); + ensure_equals("variable size of Shid", + block->getVariableSize(prehash("Shid")), 24); + + delete block; + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<6>() + // tests message parsing method on a simple message + { + std::string message_skel( + "{\n" + "TestMessage Low 1 NotTrusted Zerocoded\n" + "// comment \n" + " {\n" + "TestBlock1 Single\n" + " { Test1 U32 }\n" + " }\n" + " {\n" + " NeighborBlock Multiple 4\n" + " { Test0 U32 }\n" + " { Test1 U32 }\n" + " { Test2 U32 }\n" + " }\n" + "}"); + LLTemplateTokenizer tokens(message_skel); + LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens); + + ensure("simple message parsed", message != 0); + ensure_equals("name of message", std::string(message->mName), std::string("TestMessage")); + ensure_equals("frequency is Low", message->mFrequency, MFT_LOW); + ensure_equals("trust is untrusted", message->mTrust, MT_NOTRUST); + ensure_equals("message number", message->mMessageNumber, (U32)((255 << 24) | (255 << 16) | 1)); + ensure_equals("message encoding is zerocoded", message->mEncoding, ME_ZEROCODED); + ensure_equals("message deprecation is notdeprecated", message->mDeprecation, MD_NOTDEPRECATED); + + LLMessageBlock * block = message->getBlock(prehash("NonexistantBlock")); + ensure("Nonexistant block does not exist", block == 0); + + delete message; + } + + template<> template<> + void LLMessageTemplateParserTestObject::test<7>() + // tests message parsing method on a deprecated message + { + std::string message_skel( + "{\n" + "TestMessageDeprecated High 34 Trusted Unencoded Deprecated\n" + " {\n" + "TestBlock2 Single\n" + " { Test2 S32 }\n" + " }\n" + "}"); + LLTemplateTokenizer tokens(message_skel); + LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens); + + ensure("deprecated message parsed", message != 0); + ensure_equals("name of message", std::string(message->mName), std::string("TestMessageDeprecated")); + ensure_equals("frequency is High", message->mFrequency, MFT_HIGH); + ensure_equals("trust is trusted", message->mTrust, MT_TRUST); + ensure_equals("message number", message->mMessageNumber, (U32)34); + ensure_equals("message encoding is unencoded", message->mEncoding, ME_UNENCODED); + ensure_equals("message deprecation is deprecated", message->mDeprecation, MD_DEPRECATED); + + delete message; + } + + void LLMessageTemplateParserTestObject::test<8>() + // tests message parsing on RezMultipleAttachmentsFromInv, a possibly-faulty message + { + std::string message_skel( + "{\n\ + RezMultipleAttachmentsFromInv Low 452 NotTrusted Zerocoded\n\ + {\n\ + AgentData Single\n\ + { AgentID LLUUID }\n\ + { SessionID LLUUID }\n\ + } \n\ + {\n\ + HeaderData Single\n\ + { CompoundMsgID LLUUID } // All messages a single \"compound msg\" must have the same id\n\ + { TotalObjects U8 }\n\ + { FirstDetachAll BOOL }\n\ + }\n\ + {\n\ + ObjectData Variable // 1 to 4 of these per packet\n\ + { ItemID LLUUID }\n\ + { OwnerID LLUUID }\n\ + { AttachmentPt U8 } // 0 for default\n\ + { ItemFlags U32 }\n\ + { GroupMask U32 }\n\ + { EveryoneMask U32 }\n\ + { NextOwnerMask U32 }\n\ + { Name Variable 1 }\n\ + { Description Variable 1 }\n\ + }\n\ + }\n\ + "); + LLTemplateTokenizer tokens(message_skel); + LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens); + + ensure("RezMultipleAttachmentsFromInv message parsed", message != 0); + ensure_equals("name of message", message->mName, prehash("RezMultipleAttachmentsFromInv")); + ensure_equals("frequency is low", message->mFrequency, MFT_LOW); + ensure_equals("trust is not trusted", message->mTrust, MT_NOTRUST); + ensure_equals("message number", message->mMessageNumber, (U32)((255 << 24) | (255 << 16) | 452)); + ensure_equals("message encoding is zerocoded", message->mEncoding, ME_ZEROCODED); + + ensure_block_attributes( + "RMAFI", message, "AgentData", MBT_SINGLE, 1, 16+16); + LLMessageBlock * block = message->getBlock(prehash("AgentData")); + ensure_variable_attributes("RMAFI", + block, "AgentID", MVT_LLUUID, 16); + ensure_variable_attributes("RMAFI", + block, "SessionID", MVT_LLUUID, 16); + + ensure_block_attributes( + "RMAFI", message, "HeaderData", MBT_SINGLE, 1, 16+1+1); + block = message->getBlock(prehash("HeaderData")); + ensure_variable_attributes( + "RMAFI", block, "CompoundMsgID", MVT_LLUUID, 16); + ensure_variable_attributes( + "RMAFI", block, "TotalObjects", MVT_U8, 1); + ensure_variable_attributes( + "RMAFI", block, "FirstDetachAll", MVT_BOOL, 1); + + + ensure_block_attributes( + "RMAFI", message, "ObjectData", MBT_VARIABLE, 1, -1); + block = message->getBlock(prehash("ObjectData")); + ensure_variable_attributes("RMAFI", block, "ItemID", MVT_LLUUID, 16); + ensure_variable_attributes("RMAFI", block, "OwnerID", MVT_LLUUID, 16); + ensure_variable_attributes("RMAFI", block, "AttachmentPt", MVT_U8, 1); + ensure_variable_attributes("RMAFI", block, "ItemFlags", MVT_U32, 4); + ensure_variable_attributes("RMAFI", block, "GroupMask", MVT_U32, 4); + ensure_variable_attributes("RMAFI", block, "EveryoneMask", MVT_U32, 4); + ensure_variable_attributes("RMAFI", block, "NextOwnerMask", MVT_U32, 4); + ensure_variable_attributes("RMAFI", block, "Name", MVT_VARIABLE, 1); + ensure_variable_attributes("RMAFI", block, "Description", MVT_VARIABLE, 1); + + delete message; + } + + + +} diff --git a/linden/indra/test/llnamevalue_tut.cpp b/linden/indra/test/llnamevalue_tut.cpp new file mode 100644 index 0000000..77e5ff2 --- /dev/null +++ b/linden/indra/test/llnamevalue_tut.cpp @@ -0,0 +1,848 @@ +/** + * @file llnamevalue_tut.cpp + * @author Adroit + * @date 2007-02 + * @brief LLNameValue unit test + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "lltut.h" +#include "linden_common.h" +#include "llnamevalue.h" +#include "llsdserialize.h" + +namespace tut +{ + struct namevalue_test + { + namevalue_test() + { + mExpectedNameValueReference.string = NULL; + mExpectedNameValueType = NVT_NULL; + mCallbackCount = 0; + } + + ~namevalue_test() + { + reset(); + }; + + void reset() + { + switch(mExpectedNameValueType) + { + case NVT_STRING: + case NVT_ASSET: + delete [] mExpectedNameValueReference.string; + mExpectedNameValueReference.string = NULL; + break; + case NVT_F32: + delete mExpectedNameValueReference.f32; + mExpectedNameValueReference.f32 = NULL; + break; + case NVT_S32: + delete mExpectedNameValueReference.s32; + mExpectedNameValueReference.s32 = NULL; + break; + case NVT_U32: + delete mExpectedNameValueReference.u32; + mExpectedNameValueReference.u32 = NULL; + break; + case NVT_VEC3: + delete mExpectedNameValueReference.vec3; + mExpectedNameValueReference.vec3 = NULL; + break; + case NVT_U64: + delete mExpectedNameValueReference.u64; + mExpectedNameValueReference.u64 = NULL; + default: + break; + } + + mExpectedNameValueType = NVT_NULL; + mCallbackCount = 0; + } + + void setExpectedResult(ENameValueType type, void* value) + { + reset(); + mExpectedNameValueType = type; + switch(type) + { + case NVT_STRING: + case NVT_ASSET: + mExpectedNameValueReference.string = new char[strlen((const char*) value)+1]; + strcpy(mExpectedNameValueReference.string, (const char*) value); + break; + case NVT_F32: + mExpectedNameValueReference.f32 = new F32(*((F32*) value)); + break; + case NVT_S32: + mExpectedNameValueReference.s32 = new S32(*((S32*) value)); + break; + case NVT_U32: + mExpectedNameValueReference.u32 = new U32(*((U32*) value)); + break; + case NVT_VEC3: + mExpectedNameValueReference.vec3 = new LLVector3(*((LLVector3*) value)); + break; + case NVT_U64: + mExpectedNameValueReference.u64 = new U64(*((U64*) value)); + default: + break; + } + } + + void verifyChange(LLNameValue* changed) + { + std::string str = ""; + str += "Expected Value of type: "; + str += NameValueTypeStrings[mExpectedNameValueType]; + str += "not equal"; + + switch(mExpectedNameValueType) + { + case NVT_STRING: + ensure_memory_matches(str.c_str(), changed->getString(), strlen(changed->getString()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string)); + break; + case NVT_ASSET: + ensure_memory_matches(str.c_str(), changed->getAsset(), strlen(changed->getAsset()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string)); + break; + case NVT_F32: + ensure(str, *(changed->getF32()) == *mExpectedNameValueReference.f32); + break; + case NVT_S32: + ensure(str, *(changed->getS32()) == *mExpectedNameValueReference.s32); + break; + case NVT_U32: + ensure(str, *(changed->getU32()) == *mExpectedNameValueReference.u32); + break; + case NVT_VEC3: + ensure(str, *(changed->getVec3()) == *mExpectedNameValueReference.vec3); + break; + case NVT_U64: + ensure(str, *(changed->getU64()) == *mExpectedNameValueReference.u64); + break; + default: + break; + } + } + + void HandleCallback(LLNameValue* changed) + { + mCallbackCount++; + verifyChange(changed); + ensure("Callback called more than once", mCallbackCount == 1); + } + + static void NameValueCallbackFunction(LLNameValue* changed, void** data) + { + namevalue_test* pNameValue = (namevalue_test*)data; + pNameValue->HandleCallback(changed); + } + + ENameValueType mExpectedNameValueType; + UNameValueReference mExpectedNameValueReference; + int mCallbackCount; + }; + typedef test_group<namevalue_test> namevalue_t; + typedef namevalue_t::object namevalue_object_t; + tut::namevalue_t tut_namevalue("namevalue_test"); + + + template<> template<> + void namevalue_object_t::test<1>() + { + // LLNameValue() + LLNameValue nValue; + ensure("mName should have been NULL", nValue.mName == NULL); + ensure("getTypeEnum failed",nValue.getTypeEnum() == NVT_NULL); + ensure("getClassEnum failed",nValue.getClassEnum() == NVC_NULL); + ensure("getSendtoEnum failed",nValue.getSendtoEnum() == NVS_NULL); + + LLNameValue nValue1(" SecondLife ASSET RW SIM 232324343"); + + } + + // LLNameValue(const char* data); + // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, const char* nvsendto, + // TNameValueCallback nvcb = NULL, void** user_data = NULL); + template<> template<> + void namevalue_object_t::test<2>() + { + LLNameValue nValue(" SecondLife ASSET RW S 232324343"); + ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife"))); + ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET); + ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE); + ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM); + ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343"))); + ensure("sendToData or sendToViewer failed", !nValue.sendToData() && !nValue.sendToViewer()); + + LLNameValue nValue1("\n\r SecondLife_1 STRING READ_WRITE SIM 232324343"); + ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife_1"))); + ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING); + ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE); + ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM); + ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343"))); + ensure("1. sendToData or sendToViewer failed", !nValue1.sendToData() && !nValue1.sendToViewer()); + + LLNameValue nValue2("SecondLife", "23.5", "F32", "R", "DS"); + ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32); + ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY); + ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_DATA_SIM); + ensure("2. getF32 failed", *nValue2.getF32() == 23.5f); + ensure("2. sendToData or sendToViewer failed", nValue2.sendToData() && !nValue2.sendToViewer()); + + LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY", "SIM_SPACE"); + ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32); + ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY); + ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_DATA_SIM); + ensure("3. getS32 failed", *nValue3.getS32() == -43456787); + ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer()); + + LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB", "SV"); + LLVector3 llvec4(1.0, 2.0, 3.0); + ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); + ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); + ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER); + ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4); + ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer()); + + LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK", "SIM_VIEWER"); + LLVector3 llvec5(-1.0f, 2.4f, 3); + ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3); + ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK); + ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER); + ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5); + ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer()); + + LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK", "DSV"); + ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); + ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); + ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER); + ensure("6. getU32 failed", *nValue6.getU32() == 89764323); + ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer()); + + LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK", "SIM_SPACE_VIEWER"); + U64 u64_7 = U64L(89764323323232); + ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); + ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); + ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER); + ensure("7. getU32 failed", *nValue7.getU64() == u64_7); + ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer()); + } + + // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, + // TNameValueCallback nvcb = NULL, void** user_data = NULL); + template<> template<> + void namevalue_object_t::test<3>() + { + LLNameValue nValue("SecondLife", "232324343", "ASSET", "READ_WRITE"); + ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife"))); + ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET); + ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE); + ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM); + ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343"))); + + LLNameValue nValue1("SecondLife", "232324343", "STRING", "READ_WRITE"); + ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife"))); + ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING); + ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE); + ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM); + ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343"))); + + LLNameValue nValue2("SecondLife", "23.5", "F32", "R"); + ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32); + ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY); + ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM); + ensure("2. getF32 failed", *nValue2.getF32() == 23.5f); + + LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY"); + ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32); + ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY); + ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM); + ensure("3. getS32 failed", *nValue3.getS32() == -43456787); + + LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB"); + LLVector3 llvec4(1.0, 2.0, 3.0); + ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); + ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); + ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM); + ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4); + + LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK"); + LLVector3 llvec5(-1.0f, 2.4f, 3); + ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3); + ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK); + ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM); + ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5); + + LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK"); + ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); + ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); + ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM); + ensure("6. getU32 failed", *nValue6.getU32() == 89764323); + + LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK"); + U64 u64_7 = U64L(89764323323232); + ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); + ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); + ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM); + ensure("7. getU32 failed", *nValue7.getU64() == u64_7); + } + + // LLNameValue(const char* name, const char* type, const char* nvclass, + // TNameValueCallback nvcb = NULL, void** user_data = NULL); + template<> template<> + void namevalue_object_t::test<4>() + { + LLNameValue nValue("SecondLife", "STRING", "READ_WRITE"); + ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife"))); + ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_STRING); + ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE); + ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM); + + LLNameValue nValue1("SecondLife", "ASSET", "READ_WRITE"); + ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife"))); + ensure("1. getTypeEnum for RW failed", nValue1.getTypeEnum() == NVT_ASSET); + ensure("1. getClassEnum for RW failed", nValue1.getClassEnum() == NVC_READ_WRITE); + ensure("1. getSendtoEnum for RW failed", nValue1.getSendtoEnum() == NVS_SIM); + + LLNameValue nValue2("SecondLife", "F32", "READ_ONLY"); + ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32); + ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY); + ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM); + + LLNameValue nValue3("SecondLife", "S32", "READ_ONLY"); + ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32); + ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY); + ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM); + + skip_fail("NVC_CALLBACK does not parse."); + + LLNameValue nValue4("SecondLife", "VEC3", "CALLBACK"); + ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3); + ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK); + ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM); + + LLNameValue nValue6("SecondLife", "U32", "CALLBACK"); + ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32); + ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK); + ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM); + + LLNameValue nValue7("SecondLife", "U64", "CALLBACK"); + ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64); + ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK); + ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM); + } + + template<> template<> + void namevalue_object_t::test<5>() + { + skip_fail("callback will be called more than once."); + LLNameValue nValue("SecondLife", "This is a test", "STRING", "CB", "SIM", NameValueCallbackFunction, (void**) this); + + ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test"))); + reset(); + + setExpectedResult(NVT_STRING, (void*)"New Value"); + nValue.setString("New Value"); + ensure("String nonzero failed", nValue.nonzero() == TRUE); + reset(); + setExpectedResult(NVT_STRING, (void*)""); + nValue.setString(""); + ensure("String nonzero failed", nValue.nonzero() == FALSE); + reset(); + } + + template<> template<> + void namevalue_object_t::test<6>() + { + skip_fail("callback will be called more than once."); + LLNameValue nValue("SecondLife", "This is a test", "ASSET", "CALLBACK", "S", NameValueCallbackFunction, (void**) this); + ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); + reset(); + + setExpectedResult(NVT_ASSET, (void*)"New Value"); + nValue.setAsset("New Value"); + reset(); + } + + template<> template<> + void namevalue_object_t::test<7>() + { + skip_fail("callback will be called more than once."); + LLNameValue nValue("SecondLife", "555555", "F32", "CB", "SIM", NameValueCallbackFunction, (void**) this); + + ensure("getF32 failed",*nValue.getF32() == 555555.f); + reset(); + + F32 fVal = 0.1f; + setExpectedResult(NVT_F32, &fVal); + nValue.setF32(fVal); + + fVal = -11111.1f; + setExpectedResult(NVT_F32, &fVal); + nValue.setF32(fVal); + ensure("F32 nonzero failed", nValue.nonzero() == TRUE); + reset(); + + fVal = 0.; + setExpectedResult(NVT_F32, &fVal); + nValue.setF32(fVal); + ensure("F32 nonzero failed", nValue.nonzero() == FALSE); + reset(); + } + + template<> template<> + void namevalue_object_t::test<8>() + { + skip_fail("callback will be called more than once."); + LLNameValue nValue("SecondLife", "-5555", "S32", "CB", "SIM", NameValueCallbackFunction, (void**) this); + + ensure("getS32 failed", *nValue.getS32() == -5555); + reset(); + + S32 sVal = 0x7FFFFFFF; + setExpectedResult(NVT_S32, &sVal); + nValue.setS32(sVal); + + sVal = -0x7FFFFFFF; + setExpectedResult(NVT_S32, &sVal); + nValue.setS32(sVal); + ensure("S32 nonzero failed", nValue.nonzero() == TRUE); + reset(); + + sVal = 0; + setExpectedResult(NVT_S32, &sVal); + nValue.setS32(sVal); + ensure("S32 nonzero failed", nValue.nonzero() == FALSE); + reset(); + } + + template<> template<> + void namevalue_object_t::test<9>() + { + LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "CB", "SIM", NameValueCallbackFunction, (void**) this); + LLVector3 vecExpected(-3, 2, 1); + LLVector3 vec; + nValue.getVec3(vec); + ensure("getVec3 failed", vec == vecExpected); + reset(); + + vecExpected.setVec(2, -1, 0); + setExpectedResult(NVT_VEC3, &vecExpected); + nValue.setVec3(vecExpected); + ensure("VEC3 nonzero failed", nValue.nonzero() == TRUE); + reset(); + + vecExpected.setVec(0, 0, 0); + setExpectedResult(NVT_VEC3, &vecExpected); + nValue.setVec3(vecExpected); + ensure("VEC3 nonzero failed", nValue.nonzero() == FALSE); + reset(); + } + + template<> template<> + void namevalue_object_t::test<10>() + { + LLNameValue nValue("SecondLife", "12345678", "U32", "CB", "SIM", NameValueCallbackFunction, (void**) this); + + ensure("getU32 failed",*nValue.getU32() == 12345678); + + U32 val = 0xFFFFFFFF; + setExpectedResult(NVT_U32, &val); + nValue.setU32(val); + ensure("U32 nonzero failed", nValue.nonzero() == TRUE); + reset(); + + val = 0; + setExpectedResult(NVT_U32, &val); + nValue.setU32(val); + ensure("U32 nonzero failed", nValue.nonzero() == FALSE); + reset(); + } + + template<> template<> + void namevalue_object_t::test<11>() + { + skip_fail("incomplete support for U64."); + LLNameValue nValue("SecondLife", "44444444444", "U64", "CB", "SIM", NameValueCallbackFunction, (void**) this); + + ensure("getU64 failed",*nValue.getU64() == U64L(44444444444)); + ensure("U64 nonzero failed", nValue.nonzero() == TRUE); + + // there is no LLNameValue::setU64() + } + + template<> template<> + void namevalue_object_t::test<12>() + { + LLNameValue nValue("SecondLife F32 RW SIM -333.337600"); + F32 val = nValue.magnitude(); + ensure_equals("F32 magnitude failed", val, 333.337600f); + + LLNameValue nValue1("SecondLife STRING RW SIM 3300"); + val = nValue1.magnitude(); + ensure_equals("STRING magnitude failed",val,4.0f); + + LLNameValue nValue2("SecondLife S32 RW SIM -3300"); + val = nValue2.magnitude(); + ensure_equals("S32 magnitude failed", val, 3300.); + + LLNameValue nValue3("SecondLife U32 RW SIM 3300"); + val = nValue3.magnitude(); + ensure_equals("U32 magnitude failed", val, 3300.); + + LLNameValue nValue4("SecondLife VEC3 RW SIM <1,2,3>"); + LLVector3 vec(1,2,3); + val = nValue4.magnitude(); + ensure_equals("VEC3 magnitude failed", val, vec.magVec()); + + skip_fail("incomplete support for U64."); + LLNameValue nValue5("SecondLife U64 RW SIM 12345"); + val = nValue5.magnitude(); + ensure_equals("U62 magnitude failed", val, 12345); + } + + template<> template<> + void namevalue_object_t::test<13>() + { + skip_fail("incomplete support for U64."); + LLNameValue nValue("SecondLife U64 RW DSV 44444444444"); + std::string ret_str = nValue.printNameValue(); + + ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444"); + + LLNameValue nValue1(ret_str.c_str()); + ensure_equals("Serialization of printNameValue failed", nValue, nValue1); + } + + template<> template<> + void namevalue_object_t::test<14>() + { + LLNameValue nValue("SecondLife STRING RW DSV 44444444444"); + std::string ret_str = nValue.printData(); + ensure_equals("1:printData failed",ret_str,"44444444444"); + + LLNameValue nValue1("SecondLife S32 RW DSV 44444"); + ret_str = nValue1.printData(); + ensure_equals("2:printData failed",ret_str,"44444"); + } + + template<> template<> + void namevalue_object_t::test<15>() + { + LLNameValue nValue("SecodLife STRING RW SIM 22222"); + std::ostringstream stream1,stream2,stream3, stream4, stream5; + stream1 << nValue; + ensure_equals("STRING << failed",stream1.str(),"22222"); + + LLNameValue nValue1("SecodLife F32 RW SIM 22222"); + stream2 << nValue1; + ensure_equals("F32 << failed",stream2.str(),"22222"); + + LLNameValue nValue2("SecodLife S32 RW SIM 22222"); + stream3<< nValue2; + ensure_equals("S32 << failed",stream3.str(),"22222"); + + LLNameValue nValue3("SecodLife U32 RW SIM 122222"); + stream4<< nValue3; + ensure_equals("U32 << failed",stream4.str(),"122222"); + + skip_fail("incomplete support for U64."); + LLNameValue nValue4("SecodLife U64 RW SIM 22222"); + stream5<< nValue4; + ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222")); + } + + template<> template<> + void namevalue_object_t::test<16>() + { + LLNameValue nValue1("SecondLife STRING RW DSV 44444"); + LLNameValue nValue2("SecondLife STRING RW SIM 33333"); + LLNameValue nValue3("SecondLife"); + nValue3 = nValue1 + nValue2; + ensure("1:operator+ failed",(0==strcmp(nValue3.getString(),"4444433333"))); + + LLNameValue nValue4("SecondLife F32 R DSV 44444"); + LLNameValue nValue5("SecondLife F32 RW SIM 33333"); + LLNameValue nValue6("SecondLife"); + nValue6 = nValue4 + nValue5; + ensure_equals("2:operator+ failed",*nValue6.getF32(),77777.0); + + LLNameValue nValue7("SecondLife F32 R DSV 44444"); + LLNameValue nValue8("SecondLife S32 RW SIM 33333"); + LLNameValue nValue9("SecondLife F32"); + nValue9 = nValue7 + nValue8; + ensure_equals("3:operator+ failed",*nValue9.getF32(),77777.0); + + LLNameValue nValue10("SecondLife VEC3 RW SIM <4, 4, 4>"); + LLNameValue nValue11("SecondLife VEC3 RW SV <3, 3, 3>"); + LLNameValue nValue12("SecondLife VEC3"); + nValue12 = nValue10 + nValue11; + LLVector3 vec(7,7,7); + ensure_equals("4:operator+ failed",*nValue12.getVec3(), vec); + } + + template<> template<> + void namevalue_object_t::test<17>() + { + LLNameValue nValue7(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue8(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue9(" SecondLife F32"); + nValue9 = nValue7 - nValue8; + ensure_equals("1:operator- failed",*nValue9.getF32(),-11111.f); + + LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>"); + LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>"); + LLNameValue nValue12(" SecondLife VEC3"); + LLVector3 vec(-1,-1,-1); + nValue12 = nValue10 - nValue11; + ensure_equals("2:operator- failed",*nValue12.getVec3(), vec); + } + + template<> template<> + void namevalue_object_t::test<18>() + { + + LLNameValue nValue1(" SecondLife F32 RW SIM 22222"); + LLNameValue nValue2(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue3(" SecondLife F32"); + nValue3 = nValue1 * nValue2; + ensure_equals("1:operator* failed",*nValue3.getF32(),740725926.f); + + LLNameValue nValue4(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue5(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue6(" SecondLife F32"); + nValue6 = nValue4 * nValue5; + ensure_equals("2:operator* failed",*nValue6.getF32(),740725926.f); + + LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>"); + LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>"); + LLNameValue nValue12(" SecondLife F32"); + LLVector3 vec1(2,2,2); + LLVector3 vec2(3,3,3); + nValue12 = nValue10 * nValue11; + ensure_equals("2:operator* failed",*nValue12.getF32(), (vec1 * vec2)); + } + + template<> template<> + void namevalue_object_t::test<19>() + { + LLNameValue nValue1(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue2(" Virtual F32 RW SIM 44444"); + LLNameValue nValue3(" SecondLife F32"); + nValue3 = nValue1 / nValue2; + ensure_equals("1:operator/ failed",*nValue3.getF32(),0.5); + + LLNameValue nValue4(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue5(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue6(" SecondLife F32"); + nValue6 = nValue4 / nValue5; + ensure_equals("2:operator/ failed",*nValue6.getF32(),1.5); + } + + template<> template<> + void namevalue_object_t::test<20>() + { + LLNameValue nValue1(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue2(" Virtual S32 RW SIM 33333"); + LLNameValue nValue3(" SecondLife S32"); + nValue3 = nValue1 % nValue2; + ensure_equals("1:operator% failed",*nValue3.getS32(),22222); + + LLNameValue nValue4(" SecondLife U32 RW SIM 3"); + LLNameValue nValue5(" SecondLife S32 RW SIM 2"); + LLNameValue nValue6(" SecondLife S32"); + nValue6 = nValue4 % nValue5; + ensure_equals("2:operator% failed",*nValue6.getS32(),1); + + LLNameValue nValue10(" SecondLife VEC3 RW SIM <4, 5, 6>"); + LLNameValue nValue11(" SecondLife VEC3 RW SIM <1, 2, 3>"); + LLNameValue nValue12(" SecondLife VEC3"); + LLVector3 vec1(4,5,6); + LLVector3 vec2(1,2,3); + LLVector3 vec3(vec1 % vec2); + nValue12 = nValue10 % nValue11; + ensure_equals("5:operator% failed",*nValue12.getVec3(), vec3); + } + + template<> template<> + void namevalue_object_t::test<21>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 22222"); + LLNameValue nValue2(" Virtual STRING RW SIM 22222"); + ensure("1:operator== failed", nValue1 == nValue2); + + LLNameValue nValue3(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + ensure("2:operator== failed",!(nValue3 == nValue4)); + + LLNameValue nValue5(" SecondLife STRING RW SIM 22222"); + LLNameValue nValue6(" Virtual STRING RW SIM 33333"); + ensure("3:operator== failed",!(nValue5 == nValue6)); + + LLNameValue nValue7(" SecondLife VEC3 RW SIM <2, 2, 2>"); + LLNameValue nValue8(" Virtual VEC3 RW SIM <2, 2, 2>"); + ensure("4:operator== failed",(nValue7 == nValue8)); + } + + template<> template<> + void namevalue_object_t::test<22>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 22222"); + LLNameValue nValue2(" Virtual STRING RW SIM 33333"); + bool b_ret = (nValue1 <= nValue2) ? 1 : 0; + ensure("1:operator<= failed",(1==b_ret)); + + LLNameValue nValue3(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + b_ret = (nValue3 <= nValue4) ? 1 : 0; + ensure("2:operator<= failed",(0==b_ret)); + } + + template<> template<> + void namevalue_object_t::test<23>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 22222"); + LLNameValue nValue2(" Virtual STRING RW SIM 33333"); + bool b_ret = (nValue1 >= nValue2) ? 1 : 0; + ensure("operator>= failed",!b_ret); + + LLNameValue nValue3(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + b_ret = (nValue3 >= nValue4) ? 1 : 0; + ensure("2:operator<= failed",b_ret); + + } + + template<> template<> + void namevalue_object_t::test<24>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 33333"); + LLNameValue nValue2(" Virtual STRING RW SIM 33333"); + bool b_ret = (nValue1 < nValue2) ? 1 : 0; + ensure("operator< failed",!b_ret); + + LLNameValue nValue3(" SecondLife F32 RW SIM 11111"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + b_ret = (nValue3 < nValue4) ? 1 : 0; + ensure("2:operator< failed",b_ret); + + } + + template<> template<> + void namevalue_object_t::test<25>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 33333"); + LLNameValue nValue2(" Virtual STRING RW SIM 33333"); + bool b_ret = (nValue1 > nValue2) ? 1 : 0; + ensure("1:operator> failed",!b_ret); + + LLNameValue nValue3(" SecondLife F32 RW SIM 11111"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + b_ret = (nValue3 > nValue4) ? 1 : 0; + ensure("2:operator> failed",!b_ret); + + LLNameValue nValue5(" SecondLife S32 RW SIM 22222"); + LLNameValue nValue6(" Virtual F32 RW SIM 11111"); + b_ret = (nValue5 > nValue6) ? 1 : 0; + ensure("3:operator> failed",b_ret); + } + + template<> template<> + void namevalue_object_t::test<26>() + { + LLNameValue nValue1(" SecondLife STRING RW SIM 33333"); + LLNameValue nValue2(" Virtual STRING RW SIM 33333"); + bool b_ret = (nValue1 != nValue2) ? 1 : 0; + ensure("1:operator!= failed",!b_ret); + + LLNameValue nValue3(" SecondLife F32 RW SIM 11111"); + LLNameValue nValue4(" Virtual F32 RW SIM 22222"); + b_ret = (nValue3 != nValue4) ? 1 : 0; + ensure("2:operator!= failed",b_ret); + + } + + + template<> template<> + void namevalue_object_t::test<27>() + { + LLNameValue nValue1(" SecondLife F32 RW SIM 33333"); + LLNameValue nValue2("Virtual"); + nValue2 = -nValue1; + ensure_equals("1:operator unary- failed",*nValue2.getF32(), -33333.f); + + LLNameValue nValue3(" SecondLife U32 RW SIM 11111"); + LLNameValue nValue4("Virtual S32"); + nValue4 = -nValue3; + ensure_equals("2:operator unary- failed",*nValue4.getS32(), -11111); + + LLNameValue nValue5(" SecondLife VEC3 RW SIM <1, 1, 1>"); + LLNameValue nValue6("Virtual VEC3"); + LLVector3 vec(-1, -1, -1); + nValue6 = -nValue5; + ensure_equals("3:operator unary- failed",*nValue6.getVec3(), vec); + } + + template<> template<> + void namevalue_object_t::test<28>() + { + LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S", NameValueCallbackFunction, (void**) this); + + ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); + // this should not have updated as it is read only. + nValue.setAsset("New Value should not be updated"); + ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test"))); + + LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S", NameValueCallbackFunction, (void**) this); + // this should not have updated as it is read only. + nValue1.setU32(4567); + ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234); + + LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S", NameValueCallbackFunction, (void**) this); + // this should not have updated as it is read only. + nValue2.setS32(4567); + ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234); + + LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S", NameValueCallbackFunction, (void**) this); + // this should not have updated as it is read only. + nValue3.setF32(4567); + ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234); + nValue3 = nValue3 * 2; + ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234); + + LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S", NameValueCallbackFunction, (void**) this); + // this should not have updated as it is read only. + LLVector3 vec(4,5,6); + nValue3.setVec3(vec); + LLVector3 vec1(1,2,3); + ensure("setVec3 on ReadOnly failed", *nValue4.getVec3() == vec1); + + // cant test for U64 as no set64 exists nor any operators support U64 type + } +} diff --git a/linden/indra/test/llpermissions_tut.cpp b/linden/indra/test/llpermissions_tut.cpp new file mode 100644 index 0000000..0c9082b --- /dev/null +++ b/linden/indra/test/llpermissions_tut.cpp @@ -0,0 +1,553 @@ +/** + * @file llpermissions_tut.cpp + * @author Adroit + * @date March 2007 + * @brief llpermissions test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "message.h" +#include "llpermissions.h" + + +namespace tut +{ + struct permission + { + }; + typedef test_group<permission> permission_t; + typedef permission_t::object permission_object_t; + tut::permission_t tut_permission("permission"); + + template<> template<> + void permission_object_t::test<1>() + { + LLPermissions permissions; + LLUUID uuid = permissions.getCreator(); + LLUUID uuid1 = permissions.getOwner(); + LLUUID uuid2 = permissions.getGroup(); + LLUUID uuid3 = permissions.getLastOwner(); + + ensure("LLPermission Get Functions failed", (uuid == LLUUID::null && uuid1 == LLUUID::null && + uuid2 == LLUUID::null && uuid3 == LLUUID::null)); + ensure("LLPermission Get Functions failed", (permissions.getMaskBase() == PERM_ALL && permissions.getMaskOwner() == PERM_ALL && + permissions.getMaskGroup() == PERM_ALL && permissions.getMaskEveryone() == PERM_ALL && permissions.getMaskNextOwner() == PERM_ALL)); + ensure("Ownership functions failed", (permissions.isGroupOwned() == FALSE && permissions.isOwned() == FALSE)); + } + + template<> template<> + void permission_object_t::test<2>() + { + LLPermissions permissions; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + permissions.init(creator, owner, lastOwner, group); + + ensure_equals("init/getCreator():failed to return the creator ", creator, permissions.getCreator()); + ensure_equals("init/getOwner():failed to return the owner ", owner, permissions.getOwner()); + ensure_equals("init/getLastOwner():failed to return the group ", lastOwner, permissions.getLastOwner()); + ensure_equals("init/getGroup():failed to return the group ", group, permissions.getGroup()); + } + + template<> template<> + void permission_object_t::test<3>() + { + LLPermissions permissions; + U32 base = PERM_ALL; + U32 owner = PERM_ITEM_UNRESTRICTED; //PERM_ITEM_UNRESTRICTED = PERM_MODIFY | PERM_COPY | PERM_TRANSFER; + U32 group = PERM_TRANSFER | PERM_MOVE | PERM_COPY|PERM_MODIFY; + U32 everyone = PERM_TRANSFER | PERM_MOVE | PERM_MODIFY; + U32 next = PERM_NONE; + + U32 fixedbase = base; + U32 fixedowner = PERM_ITEM_UNRESTRICTED; //owner & fixedbase + U32 fixedgroup = PERM_ITEM_UNRESTRICTED; // no PERM_MOVE as owner does not have that perm either + U32 fixedeveryone = PERM_TRANSFER; // no PERM_MOVE. Everyone can never modify. + U32 fixednext = PERM_NONE; + + permissions.initMasks(base, owner, everyone, group, next); // will fix perms if not allowed. + ensure_equals("initMasks/getMaskBase():failed to return the MaskBase ", fixedbase, permissions.getMaskBase()); + ensure_equals("initMasks/getMaskOwner():failed to return the MaskOwner ", fixedowner, permissions.getMaskOwner()); + ensure_equals("initMasks/getMaskEveryone():failed to return the MaskGroup ", fixedgroup, permissions.getMaskGroup()); + ensure_equals("initMasks/getMaskEveryone():failed to return the MaskEveryone ", fixedeveryone, permissions.getMaskEveryone()); + ensure_equals("initMasks/getMaskNextOwner():failed to return the MaskNext ", fixednext, permissions.getMaskNextOwner()); + + // explictly set should maintain the values + permissions.setMaskBase(base); //no fixing + ensure_equals("setMaskBase/getMaskBase():failed to return the MaskBase ", base, permissions.getMaskBase()); + + permissions.setMaskOwner(owner); + ensure_equals("setMaskOwner/getMaskOwner():failed to return the MaskOwner ", owner, permissions.getMaskOwner()); + + permissions.setMaskEveryone(everyone); + ensure_equals("setMaskEveryone/getMaskEveryone():failed to return the MaskEveryone ", everyone, permissions.getMaskEveryone()); + + permissions.setMaskGroup(group); + ensure_equals("setMaskGroup/getMaskEveryone():failed to return the MaskGroup ", group, permissions.getMaskGroup()); + + permissions.setMaskNext(next); + ensure_equals("setMaskNext/getMaskNextOwner():failed to return the MaskNext ", next, permissions.getMaskNextOwner()); + + // further tests can be added to ensure perms for owner/group/everyone etc. get properly fixed. + // code however suggests that there is no explict check if the perms are correct and the user of this + // class is expected to know how to use them correctly. skipping further test cases for now for various + // perm combinations. + } + + template<> template<> + void permission_object_t::test<4>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm1.init(creator,owner,lastOwner,group); + perm.set(perm1); + ensure("set():failed to set ", (creator == perm.getCreator()) && (owner == perm.getOwner())&& + (lastOwner == perm.getLastOwner())&& (group == perm.getGroup())); + } + + template<> template<> + void permission_object_t::test<5>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm1.init(creator,owner,lastOwner,group); + + U32 base = PERM_TRANSFER; + U32 ownerp = PERM_TRANSFER; + U32 groupp = PERM_TRANSFER; + U32 everyone = PERM_TRANSFER; + U32 next = PERM_NONE; + + perm1.initMasks(base, ownerp, everyone, groupp, next); + + base = PERM_ALL; + ownerp = PERM_ITEM_UNRESTRICTED; //PERM_ITEM_UNRESTRICTED = PERM_MODIFY | PERM_COPY | PERM_TRANSFER; + groupp = PERM_TRANSFER | PERM_COPY|PERM_MODIFY; + everyone = PERM_TRANSFER; + next = PERM_NONE; + + perm.init(creator,owner,lastOwner,group); + perm.initMasks(base, ownerp, everyone, groupp, next); + + // restrict permissions by accumulation + perm.accumulate(perm1); + + U32 fixedbase = PERM_TRANSFER | PERM_MOVE; + U32 fixedowner = PERM_TRANSFER; + U32 fixedgroup = PERM_TRANSFER; + U32 fixedeveryone = PERM_TRANSFER; + U32 fixednext = PERM_NONE; + + ensure_equals("accumulate failed ", fixedbase, perm.getMaskBase()); + ensure_equals("accumulate failed ", fixedowner, perm.getMaskOwner()); + ensure_equals("accumulate failed ", fixedgroup, perm.getMaskGroup()); + ensure_equals("accumulate failed ", fixedeveryone, perm.getMaskEveryone()); + ensure_equals("accumulate failed ", fixednext, perm.getMaskNextOwner()); + } + + template<> template<> + void permission_object_t::test<6>() + { + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + ensure_equals("getSafeOwner:failed ", owner,perm.getSafeOwner()); + + ///NULL Owner + perm.init(creator,LLUUID::null,lastOwner,group); + ensure_equals("getSafeOwner:failed ", group, perm.getSafeOwner()); + } + + template<> template<> + void permission_object_t::test<7>() + { + LLPermissions perm1; + LLUUID uuid; + BOOL is_group_owned = FALSE; + ensure("1:getOwnership:failed ", (FALSE == perm1.getOwnership(uuid,is_group_owned))); + + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + perm.getOwnership(uuid,is_group_owned); + ensure("2:getOwnership:failed ", ((uuid == owner) && (FALSE == is_group_owned))); + + perm.init(creator,LLUUID::null,lastOwner,group); + perm.getOwnership(uuid,is_group_owned); + ensure("3:getOwnership:failed ", ((uuid == group) && (TRUE == is_group_owned))); + } + + template<> template<> + void permission_object_t::test<8>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + perm1.init(creator,owner,lastOwner,group); + ensure_equals("getCRC32:failed ", perm.getCRC32(),perm1.getCRC32()); + } + + template<> template<> + void permission_object_t::test<9>() + { + LLPermissions perm; + LLUUID agent("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + bool is_atomic = TRUE; + ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(agent,owner,group,is_atomic))); + + LLUUID owner2("68edcf47-ccd7-45b8-9f90-1649d7f12807"); + LLUUID group2("9c8eca51-53d5-42a7-bb58-cef070395db9"); + + // cant change - agent need to be current owner + ensure("setOwnerAndGroup():failed ", (FALSE == perm.setOwnerAndGroup(agent,owner2,group2,is_atomic))); + + // should be able to change - agent and owner same as current owner + ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(owner,owner,group2,is_atomic))); + } + + template<> template<> + void permission_object_t::test<10>() + { + LLPermissions perm; + LLUUID agent; + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + ensure("deedToGroup():failed ", (TRUE == perm.deedToGroup(agent,group))); + } + template<> template<> + void permission_object_t::test<11>() + { + LLPermissions perm; + LLUUID agent; + BOOL set = 1; + U32 bits = PERM_TRANSFER | PERM_MODIFY; + ensure("setBaseBits():failed ", (TRUE == perm.setBaseBits(agent, set, bits))); + ensure("setOwnerBits():failed ", (TRUE == perm.setOwnerBits(agent, set, bits))); + + LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8"); + ensure("setBaseBits():failed ", (FALSE == perm.setBaseBits(agent1, set, bits))); + ensure("setOwnerBits():failed ", (FALSE == perm.setOwnerBits(agent1, set, bits))); + } + + template<> template<> + void permission_object_t::test<12>() + { + LLPermissions perm; + LLUUID agent; + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + BOOL set = 1; + U32 bits = 10; + ensure("setGroupBits():failed ", (TRUE == perm.setGroupBits(agent,group, set, bits))); + ensure("setEveryoneBits():failed ", (TRUE == perm.setEveryoneBits(agent,group, set, bits))); + ensure("setNextOwnerBits():failed ", (TRUE == perm.setNextOwnerBits(agent,group, set, bits))); + + LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + ensure("setGroupBits():failed ", (FALSE == perm.setGroupBits(agent1,group, set, bits))); + ensure("setEveryoneBits():failed ", (FALSE == perm.setEveryoneBits(agent1,group, set, bits))); + ensure("setNextOwnerBits():failed ", (FALSE == perm.setNextOwnerBits(agent1,group, set, bits))); + } + + template<> template<> + void permission_object_t::test<13>() + { + LLPermissions perm; + LLUUID agent; + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + U32 bits = 10; + ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent,group))); + + LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + perm.init(creator,owner,lastOwner,group); + ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent1,group))); + } + + template<> template<> + void permission_object_t::test<14>() + { + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner; + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + LLUUID agent; + ensure("1:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent))); + ensure("2:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent,group))); + + U32 val1 = 0x7FFFFFFF; + S32 sVal = 1 << 14; + sVal = val1 & sVal; + LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8"); + ensure("3:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1))); + ensure("4:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1,group))); + } + + template<> template<> + void permission_object_t::test<15>() + { + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner; + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + LLUUID agent; + ensure("1:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent))); + ensure("2:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent,group))); + + U32 val1 = 0x7FFFFFFF; + S32 sVal = 1 << 15; + sVal = val1 & sVal; + LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8"); + ensure("3:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1))); + ensure("4:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1,group))); + } + + template<> template<> + void permission_object_t::test<16>() + { + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner; + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + LLUUID agent; + ensure("1:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent))); + ensure("2:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent,group))); + + U32 val1 = 0x7FFFFFFF; + S32 sVal = 1 << 19; + sVal = val1 & sVal; + LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8"); + ensure("3:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1))); + ensure("4:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1,group))); + } + + template<> template<> + void permission_object_t::test<17>() + { + LLPermissions perm; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner; + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + LLUUID agent; + ensure("1:allowMoveBy():failed ", (TRUE == perm.allowTransferTo(agent))); + + perm.init(creator,owner,lastOwner,group); + U32 val1 = 0x7FFFFFFF; + S32 sVal = 1 << 13; + sVal = val1 & sVal; + ensure("2:allowMoveBy():failed ", (sVal == perm.allowTransferTo(agent))); + } + + template<> template<> + void permission_object_t::test<18>() + { + LLPermissions perm,perm1; + ensure("1:Operator==:failed ", perm == perm1); + + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + perm = perm1; + ensure("2:Operator==:failed ", perm == perm1); + } + + template<> template<> + void permission_object_t::test<19>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + ensure("2:Operator==:failed ", perm != perm1); + } + + template<> template<> + void permission_object_t::test<20>() + { + FILE* fp = fopen("linden_file.dat","w+"); + if(!fp) + { + llerrs << "file coudnt be opened\n" << llendl; + return; + } + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + + U32 base = PERM_TRANSFER | PERM_COPY; + U32 ownerp = PERM_TRANSFER; + U32 groupp = PERM_TRANSFER; + U32 everyone = PERM_TRANSFER; + U32 next = PERM_NONE; + + perm.initMasks(base, ownerp, everyone, groupp, next); + + perm.exportFile(fp); + fclose(fp); + fp = fopen("linden_file.dat","r+"); + if(!fp) + { + llerrs << "file coudnt be opened\n" << llendl; + return; + } + perm1.importFile(fp); + fclose(fp); + ensure("exportFile()/importFile():failed to export and import the data ", perm1 == perm); +} + + template<> template<> + void permission_object_t::test<21>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + + U32 base = PERM_TRANSFER | PERM_COPY; + U32 ownerp = PERM_TRANSFER; + U32 groupp = PERM_TRANSFER; + U32 everyone = PERM_TRANSFER; + U32 next = PERM_NONE; + + perm.initMasks(base, ownerp, everyone, groupp, next); + + std::ostringstream ostream; + perm.exportLegacyStream(ostream); + std::istringstream istream(ostream.str()); + perm1.importLegacyStream(istream); + + ensure("exportLegacyStream()/importLegacyStream():failed to export and import the data ", perm1 == perm); + } + + template<> template<> + void permission_object_t::test<22>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + LLXMLNode* xml_node = perm.exportFileXML(); + perm1.importXML(xml_node); + ensure("exportFileXML()/importXML():failed to export and import the data ", perm1 == perm); + } + + template<> template<> + void permission_object_t::test<23>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + std::ostringstream stream1, stream2; + stream1 << perm; + perm1.init(creator,owner,lastOwner,group); + stream2 << perm1; + ensure("1:operator << failed",(stream1.str() == stream2.str())); + } + + template<> template<> + void permission_object_t::test<24>() + { + LLPermissions perm,perm1; + LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e"); + LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806"); + LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); + LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8"); + perm.init(creator,owner,lastOwner,group); + + U32 base = PERM_TRANSFER | PERM_COPY; + U32 ownerp = PERM_TRANSFER; + U32 groupp = PERM_TRANSFER; + U32 everyone = PERM_TRANSFER; + U32 next = PERM_NONE; + + perm.initMasks(base, ownerp, everyone, groupp, next); + + LLSD sd = ll_create_sd_from_permissions(perm); + perm1 = ll_permissions_from_sd(sd); + ensure_equals("ll_permissions_from_sd() and ll_create_sd_from_permissions()functions failed", perm, perm1); + } + + template<> template<> + void permission_object_t::test<25>() + { + LLAggregatePermissions AggrPermission; + LLAggregatePermissions AggrPermission1; + ensure("getU8() function failed", (AggrPermission.getU8() == 0)); + ensure("isEmpty() function failed", (AggrPermission.isEmpty() == TRUE)); + AggrPermission.getValue(PERM_TRANSFER); + ensure_equals("getValue() function failed", AggrPermission.getValue(PERM_TRANSFER), 0x00); + + AggrPermission.aggregate(PERM_ITEM_UNRESTRICTED); + ensure("aggregate() function failed", (AggrPermission.isEmpty() == FALSE)); + + AggrPermission1.aggregate(AggrPermission); + ensure("aggregate() function failed", (AggrPermission1.isEmpty() == FALSE)); + + std::ostringstream stream1; + stream1 << AggrPermission; + ensure("operator<< failed", (stream1.str() == "{PI_COPY=All, PI_MODIFY=All, PI_TRANSFER=All}")); + } +} diff --git a/linden/indra/test/llquaternion_tut.cpp b/linden/indra/test/llquaternion_tut.cpp new file mode 100644 index 0000000..f64e87a --- /dev/null +++ b/linden/indra/test/llquaternion_tut.cpp @@ -0,0 +1,665 @@ +/** + * @file llquaternion_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief Test cases of llquaternion.h + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "llmath.h" +#include "lltut.h" +#include "linden_common.h" +#include "llquaternion.h" +#include "v4math.h" +#include "v3math.h" +#include "v3dmath.h" +#include "m4math.h" +#include "m3math.h" +#include "math.h" + +namespace tut +{ + struct llquat_test + { + }; + typedef test_group<llquat_test> llquat_test_t; + typedef llquat_test_t::object llquat_test_object_t; + tut::llquat_test_t tut_llquat_test("llquat"); + + //test case for LLQuaternion::LLQuaternion(void) fn. + template<> template<> + void llquat_test_object_t::test<1>() + { + LLQuaternion llquat; + ensure("LLQuaternion::LLQuaternion() failed", 0.f == llquat.mQ[0] && + 0.f == llquat.mQ[1] && + 0.f == llquat.mQ[2] && + 1.f == llquat.mQ[3]); + } + + //test case for explicit LLQuaternion(const LLMatrix4 &mat) fn. + template<> template<> + void llquat_test_object_t::test<2>() + { + LLMatrix4 llmat; + LLVector4 vector1(2.0f, 1.0f, 3.0f, 6.0f); + LLVector4 vector2(5.0f, 6.0f, 0.0f, 1.0f); + LLVector4 vector3(2.0f, 1.0f, 2.0f, 9.0f); + LLVector4 vector4(3.0f, 8.0f, 1.0f, 5.0f); + + llmat.initRows(vector1, vector2, vector3, vector4); + ensure("explicit LLQuaternion(const LLMatrix4 &mat) failed", 2.0f == llmat.mMatrix[0][0] && + 1.0f == llmat.mMatrix[0][1] && + 3.0f == llmat.mMatrix[0][2] && + 6.0f == llmat.mMatrix[0][3] && + 5.0f == llmat.mMatrix[1][0] && + 6.0f == llmat.mMatrix[1][1] && + 0.0f == llmat.mMatrix[1][2] && + 1.0f == llmat.mMatrix[1][3] && + 2.0f == llmat.mMatrix[2][0] && + 1.0f == llmat.mMatrix[2][1] && + 2.0f == llmat.mMatrix[2][2] && + 9.0f == llmat.mMatrix[2][3] && + 3.0f == llmat.mMatrix[3][0] && + 8.0f == llmat.mMatrix[3][1] && + 1.0f == llmat.mMatrix[3][2] && + 5.0f == llmat.mMatrix[3][3]); + } + + template<> template<> + void llquat_test_object_t::test<3>() + { + LLMatrix3 llmat; + + LLVector3 vect1(3.4028234660000000f , 234.56f, 4234.442234f); + LLVector3 vect2(741.434f, 23.00034f, 6567.223423f); + LLVector3 vect3(566.003034f, 12.98705f, 234.764423f); + llmat.setRows(vect1, vect2, vect3); + + ensure("LLMatrix3::setRows fn failed.", 3.4028234660000000f == llmat.mMatrix[0][0] && + 234.56f == llmat.mMatrix[0][1] && + 4234.442234f == llmat.mMatrix[0][2] && + 741.434f == llmat.mMatrix[1][0] && + 23.00034f == llmat.mMatrix[1][1] && + 6567.223423f == llmat.mMatrix[1][2] && + 566.003034f == llmat.mMatrix[2][0] && + 12.98705f == llmat.mMatrix[2][1] && + 234.764423f == llmat.mMatrix[2][2]); + } + + //test case for LLQuaternion(F32 x, F32 y, F32 z, F32 w), setQuatInit() and normQuat() fns. + template<> template<> + void llquat_test_object_t::test<4>() + { + F32 x_val = 3.0f; + F32 y_val = 2.0f; + F32 z_val = 6.0f; + F32 w_val = 1.0f; + + LLQuaternion res_quat; + res_quat.setQuatInit(x_val, y_val, z_val, w_val); + res_quat.normQuat(); + + ensure("LLQuaternion::normQuat() fn failed", + is_approx_equal(0.42426407f, res_quat.mQ[0]) && + is_approx_equal(0.28284273f, res_quat.mQ[1]) && + is_approx_equal(0.84852815f, res_quat.mQ[2]) && + is_approx_equal(0.14142136f, res_quat.mQ[3])); + + x_val = 0.0f; + y_val = 0.0f; + z_val = 0.0f; + w_val = 0.0f; + + res_quat.setQuatInit(x_val, y_val, z_val, w_val); + res_quat.normQuat(); + + ensure("LLQuaternion::normQuat() fn. failed.", + is_approx_equal(0.0f, res_quat.mQ[0]) && + is_approx_equal(0.0f, res_quat.mQ[1]) && + is_approx_equal(0.0f, res_quat.mQ[2]) && + is_approx_equal(1.0f, res_quat.mQ[3])); + + + ensure("LLQuaternion::normQuat() fn. failed.", + is_approx_equal(0.0f, res_quat.mQ[0]) && + is_approx_equal(0.0f, res_quat.mQ[1]) && + is_approx_equal(0.0f, res_quat.mQ[2]) && + is_approx_equal(1.0f, res_quat.mQ[3])); + } + + //test case for conjQuat() and transQuat() fns. + template<> template<> + void llquat_test_object_t::test<5>() + { + F32 x_val = 3.0f; + F32 y_val = 2.0f; + F32 z_val = 6.0f; + F32 w_val = 1.0f; + + LLQuaternion res_quat; + LLQuaternion result, result1; + result1 = result = res_quat.setQuatInit(x_val, y_val, z_val, w_val); + + result.conjQuat(); + result1.transQuat(); + + ensure("LLQuaternion::conjQuat and LLQuaternion::transQuat failed ", + is_approx_equal(result1.mQ[0], result.mQ[0]) && + is_approx_equal(result1.mQ[1], result.mQ[1]) && + is_approx_equal(result1.mQ[2], result.mQ[2])); + + } + + //test case for dot(const LLQuaternion &a, const LLQuaternion &b) fn. + template<> template<> + void llquat_test_object_t::test<6>() + { + LLQuaternion quat1(3.0f, 2.0f, 6.0f, 0.0f), quat2(1.0f, 1.0f, 1.0f, 1.0f); + ensure("1. The two values are different", llround(12.000000f, 2) == llround(dot(quat1, quat2), 2)); + + LLQuaternion quat0(3.0f, 9.334f, 34.5f, 23.0f), quat(34.5f, 23.23f, 2.0f, 45.5f); + ensure("2. The two values are different", llround(1435.828807f, 2) == llround(dot(quat0, quat), 2)); + } + + //test case for LLQuaternion &LLQuaternion::constrain(F32 radians) fn. + template<> template<> + void llquat_test_object_t::test<7>() + { + F32 radian = 60.0f; + LLQuaternion quat(3.0f, 2.0f, 6.0f, 0.0f); + LLQuaternion quat1; + quat1 = quat.constrain(radian); + ensure("1. LLQuaternion::constrain(F32 radians) failed", + is_approx_equal_fraction(-0.423442f, quat1.mQ[0], 8) && + is_approx_equal_fraction(-0.282295f, quat1.mQ[1], 8) && + is_approx_equal_fraction(-0.846884f, quat1.mQ[2], 8) && + is_approx_equal_fraction(0.154251f, quat1.mQ[3], 8)); + + + radian = 30.0f; + LLQuaternion quat0(37.50f, 12.0f, 86.023f, 40.32f); + quat1 = quat0.constrain(radian); + + ensure("2. LLQuaternion::constrain(F32 radians) failed", + is_approx_equal_fraction(37.500000f, quat1.mQ[0], 8) && + is_approx_equal_fraction(12.0000f, quat1.mQ[1], 8) && + is_approx_equal_fraction(86.0230f, quat1.mQ[2], 8) && + is_approx_equal_fraction(40.320000f, quat1.mQ[3], 8)); + } + + template<> template<> + void llquat_test_object_t::test<8>() + { + F32 value1 = 15.0f; + LLQuaternion quat1(1.0f, 2.0f, 4.0f, 1.0f); + LLQuaternion quat2(4.0f, 3.0f, 6.5f, 9.7f); + LLQuaternion res_lerp, res_slerp, res_nlerp; + + //test case for lerp(F32 t, const LLQuaternion &q) fn. + res_lerp = lerp(value1, quat1); + ensure("1. LLQuaternion lerp(F32 t, const LLQuaternion &q) failed", + is_approx_equal_fraction(0.181355f, res_lerp.mQ[0], 16) && + is_approx_equal_fraction(0.362711f, res_lerp.mQ[1], 16) && + is_approx_equal_fraction(0.725423f, res_lerp.mQ[2], 16) && + is_approx_equal_fraction(0.556158f, res_lerp.mQ[3], 16)); + + //test case for lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) fn. + res_lerp = lerp(value1, quat1, quat2); + ensure("2. LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) failed", + is_approx_equal_fraction(0.314306f, res_lerp.mQ[0], 16) && + is_approx_equal_fraction(0.116156f, res_lerp.mQ[1], 16) && + is_approx_equal_fraction(0.283559f, res_lerp.mQ[2], 16) && + is_approx_equal_fraction(0.898506f, res_lerp.mQ[3], 16)); + + //test case for slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) fn. + res_slerp = slerp(value1, quat1, quat2); + ensure("3. LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b) failed", + is_approx_equal_fraction(46.000f, res_slerp.mQ[0], 16) && + is_approx_equal_fraction(17.00f, res_slerp.mQ[1], 16) && + is_approx_equal_fraction(41.5f, res_slerp.mQ[2], 16) && + is_approx_equal_fraction(131.5f, res_slerp.mQ[3], 16)); + + //test case for nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) fn. + res_nlerp = nlerp(value1, quat1, quat2); + ensure("4. LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) failed", + is_approx_equal_fraction(0.314306f, res_nlerp.mQ[0], 16) && + is_approx_equal_fraction(0.116157f, res_nlerp.mQ[1], 16) && + is_approx_equal_fraction(0.283559f, res_nlerp.mQ[2], 16) && + is_approx_equal_fraction(0.898506f, res_nlerp.mQ[3], 16)); + + //test case for nlerp(F32 t, const LLQuaternion &q) fn. + res_slerp = slerp(value1, quat1); + ensure("5. LLQuaternion slerp(F32 t, const LLQuaternion &q) failed", + is_approx_equal_fraction(1.0f, res_slerp.mQ[0], 16) && + is_approx_equal_fraction(2.0f, res_slerp.mQ[1], 16) && + is_approx_equal_fraction(4.0000f, res_slerp.mQ[2], 16) && + is_approx_equal_fraction(1.000f, res_slerp.mQ[3], 16)); + + LLQuaternion quat3(2.0f, 1.0f, 5.5f, 10.5f); + LLQuaternion res_nlerp1; + value1 = 100.0f; + res_nlerp1 = nlerp(value1, quat3); + ensure("6. LLQuaternion nlerp(F32 t, const LLQuaternion &q) failed", + is_approx_equal_fraction(0.268245f, res_nlerp1.mQ[0], 16) && is_approx_equal_fraction(0.134122f, res_nlerp1.mQ[1], 2) && + is_approx_equal_fraction(0.737673f, res_nlerp1.mQ[2], 16) && + is_approx_equal_fraction(0.604892f, res_nlerp1.mQ[3], 16)); + + //test case for lerp(F32 t, const LLQuaternion &q) fn. + res_lerp = lerp(value1, quat2); + ensure("7. LLQuaternion lerp(F32 t, const LLQuaternion &q) failed", + is_approx_equal_fraction(0.404867f, res_lerp.mQ[0], 16) && + is_approx_equal_fraction(0.303650f, res_lerp.mQ[1], 16) && + is_approx_equal_fraction(0.657909f, res_lerp.mQ[2], 16) && + is_approx_equal_fraction(0.557704f, res_lerp.mQ[3], 16)); + + } + + template<> template<> + void llquat_test_object_t::test<9>() + { + //test case for LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) fn + LLQuaternion quat1(1.0f, 2.5f, 3.5f, 5.5f); + LLQuaternion quat2(4.0f, 3.0f, 5.0f, 1.0f); + LLQuaternion result = quat1 * quat2; + ensure("1. LLQuaternion Operator* failed", (21.0f == result.mQ[0]) && + (10.0f == result.mQ[1]) && + (38.0f == result.mQ[2]) && + (-23.5f == result.mQ[3])); + + LLQuaternion quat3(2341.340f, 2352.345f, 233.25f, 7645.5f); + LLQuaternion quat4(674.067f, 893.0897f, 578.0f, 231.0f); + result = quat3 * quat4; + ensure("2. LLQuaternion Operator* failed", (4543086.5f == result.mQ[0]) && + (8567578.0f == result.mQ[1]) && + (3967591.25f == result.mQ[2]) && + (-2047783.25f == result.mQ[3])); + + //inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b)fn. + result = quat1 + quat2; + ensure("3. LLQuaternion operator+ failed", (5.0f == result.mQ[0]) && + (5.5f == result.mQ[1]) && + (8.5f == result.mQ[2]) && + (6.5f == result.mQ[3])); + + result = quat3 + quat4; + ensure( + "4. LLQuaternion operator+ failed", + is_approx_equal(3015.407227f, result.mQ[0]) && + is_approx_equal(3245.434570f, result.mQ[1]) && + (811.25f == result.mQ[2]) && + (7876.5f == result.mQ[3])); + + //inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) fn + result = quat1 - quat2; + ensure( + "5. LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) failed", + (-3.0f == result.mQ[0]) && + (-0.5f == result.mQ[1]) && + (-1.5f == result.mQ[2]) && + (4.5f == result.mQ[3])); + + result = quat3 - quat4; + ensure( + "6. LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) failed", + is_approx_equal(1667.273071f, result.mQ[0]) && + is_approx_equal(1459.255249f, result.mQ[1]) && + (-344.75f == result.mQ[2]) && + (7414.50f == result.mQ[3])); + } + + //test case for LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) fn. + template<> template<> + void llquat_test_object_t::test<10>() + { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif + LLVector4 vect(12.0f, 5.0f, 60.0f, 75.1f); + LLQuaternion quat(2323.034f, 23.5f, 673.23f, 57667.5f); + LLVector4 result = vect * quat; + ensure( + "1. LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) failed", + (39928406016.0f == result.mV[0]) && + (1457801728.0f == result.mV[1]) && + (200580612096.0f == result.mV[2]) && + (75.099998f == result.mV[3])); + + LLVector4 vect1(22.0f, 45.0f, 40.0f, 78.1f); + LLQuaternion quat1(2.034f, 45.5f, 37.23f, 7.5f); + result = vect1 * quat1; + ensure( + "2. LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) failed", + is_approx_equal(-58153.5390f, result.mV[0]) && + (183787.8125f == result.mV[1]) && + (116864.164063f == result.mV[2]) && + (78.099998f == result.mV[3])); + } + + //test case for LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) fn. + template<> template<> + void llquat_test_object_t::test<11>() + { + LLVector3 vect(12.0f, 5.0f, 60.0f); + LLQuaternion quat(23.5f, 6.5f, 3.23f, 56.5f); + LLVector3 result = vect * quat; + ensure( + "1. LLVEctor3 operator*(const LLVector3 &a, const LLQuaternion &rot) failed", + is_approx_equal(97182.953125f,result.mV[0]) && + is_approx_equal(-135405.640625f, result.mV[1]) && + is_approx_equal(162986.140f, result.mV[2])); + + LLVector3 vect1(5.0f, 40.0f, 78.1f); + LLQuaternion quat1(2.034f, 45.5f, 37.23f, 7.5f); + result = vect1 * quat1; + ensure( + "2. LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) failed", + is_approx_equal(33217.703f, result.mV[0]) && + is_approx_equal(295383.8125f, result.mV[1]) && + is_approx_equal(84718.140f, result.mV[2])); + } + + //test case for LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) fn. + template<> template<> + void llquat_test_object_t::test<12>() + { + LLVector3d vect(-2.0f, 5.0f, -6.0f); + LLQuaternion quat(-3.5f, 4.5f, 3.5f, 6.5f); + LLVector3d result = vect * quat; + ensure( + "1. LLVEctor3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed ", + (-633.0f == result.mdV[0]) && + (-300.0f == result.mdV[1]) && + (-36.0f == result.mdV[2])); + + LLVector3d vect1(5.0f, -4.5f, 8.21f); + LLQuaternion quat1(2.0f, 4.5f, -7.2f, 9.5f); + result = vect1 * quat1; + ensure( + "2. LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed", + is_approx_equal_fraction(-120.29f, (F32) result.mdV[0], 8) && + is_approx_equal_fraction(-1683.958f, (F32) result.mdV[1], 8) && + is_approx_equal_fraction(516.56f, (F32) result.mdV[2], 8)); + + LLVector3d vect2(2.0f, 3.5f, 1.1f); + LLQuaternion quat2(1.0f, 4.0f, 2.0f, 5.0f); + result = vect2 * quat2; + ensure( + "3. LLvector3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed", + is_approx_equal_fraction(18.400001f, (F32) result.mdV[0], 8) && + is_approx_equal_fraction(188.6f, (F32) result.mdV[1], 8) && + is_approx_equal_fraction(32.20f, (F32) result.mdV[2], 8)); + } + + //test case for inline LLQuaternion operator-(const LLQuaternion &a) fn. + template<> template<> + void llquat_test_object_t::test<13>() + { + LLQuaternion quat(23.5f, 34.5f, 16723.4f, 324.7f); + LLQuaternion result = -quat; + ensure( + "1. LLQuaternion operator-(const LLQuaternion &a) failed", + (-23.5f == result.mQ[0]) && + (-34.5f == result.mQ[1]) && + (-16723.4f == result.mQ[2]) && + (-324.7f == result.mQ[3])); + + LLQuaternion quat1(-3.5f, -34.5f, -16.4f, -154.7f); + result = -quat1; + ensure( + "2. LLQuaternion operator-(const LLQuaternion &a) failed.", + (3.5f == result.mQ[0]) && + (34.5f == result.mQ[1]) && + (16.4f == result.mQ[2]) && + (154.7f == result.mQ[3])); + } + + //test case for inline LLQuaternion operator*(F32 a, const LLQuaternion &q) and + //inline LLQuaternion operator*(F32 a, const LLQuaternion &q) fns. + template<> template<> + void llquat_test_object_t::test<14>() + { + LLQuaternion quat_value(9.0f, 8.0f, 7.0f, 6.0f); + F32 a =3.5f; + LLQuaternion result = a * quat_value; + LLQuaternion result1 = quat_value * a; + + ensure( + "1. LLQuaternion operator* failed", + (result.mQ[0] == result1.mQ[0]) && + (result.mQ[1] == result1.mQ[1]) && + (result.mQ[2] == result1.mQ[2]) && + (result.mQ[3] == result1.mQ[3])); + + + LLQuaternion quat_val(9454.0f, 43568.3450f, 456343247.0343f, 2346.03434f); + a =-3324.3445f; + result = a * quat_val; + result1 = quat_val * a; + + ensure( + "2. LLQuaternion operator* failed", + (result.mQ[0] == result1.mQ[0]) && + (result.mQ[1] == result1.mQ[1]) && + (result.mQ[2] == result1.mQ[2]) && + (result.mQ[3] == result1.mQ[3])); + } + + template<> template<> + void llquat_test_object_t::test<15>() + { + // test cases for inline LLQuaternion operator~(const LLQuaternion &a) + LLQuaternion quat_val(2323.634f, -43535.4f, 3455.88f, -32232.45f); + LLQuaternion result = ~quat_val; + ensure( + "1. LLQuaternion operator~(const LLQuaternion &a) failed ", + (-2323.634f == result.mQ[0]) && + (43535.4f == result.mQ[1]) && + (-3455.88f == result.mQ[2]) && + (-32232.45f == result.mQ[3])); + + //test case for inline bool LLQuaternion::operator==(const LLQuaternion &b) const + LLQuaternion quat_val1(2323.634f, -43535.4f, 3455.88f, -32232.45f); + LLQuaternion quat_val2(2323.634f, -43535.4f, 3455.88f, -32232.45f); + ensure( + "2. LLQuaternion::operator==(const LLQuaternion &b) failed", + quat_val1 == quat_val2); + } + + template<> template<> + void llquat_test_object_t::test<16>() + { + //test case for inline bool LLQuaternion::operator!=(const LLQuaternion &b) const + LLQuaternion quat_val1(2323.634f, -43535.4f, 3455.88f, -32232.45f); + LLQuaternion quat_val2(0, -43535.4f, 3455.88f, -32232.45f); + ensure("LLQuaternion::operator!=(const LLQuaternion &b) failed", quat_val1 != quat_val2); + } + + template<> template<> + void llquat_test_object_t::test<17>() + { + //test case for LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) + F32 x = 2.0f; + F32 y = 1.0f; + F32 z = 3.0f; + + LLQuaternion result = mayaQ(x, y, z, LLQuaternion::XYZ); + ensure( + "1. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XYZ", + is_approx_equal_fraction(0.0172174f, result.mQ[0], 16) && + is_approx_equal_fraction(0.009179f, result.mQ[1], 16) && + is_approx_equal_fraction(0.026020f, result.mQ[2], 16) && + is_approx_equal_fraction(0.999471f, result.mQ[3], 16)); + + LLQuaternion result1 = mayaQ(x, y, z, LLQuaternion::YZX); + ensure( + "2. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XYZ", + is_approx_equal_fraction(0.017217f, result1.mQ[0], 16) && + is_approx_equal_fraction(0.008265f, result1.mQ[1], 16) && + is_approx_equal_fraction(0.026324f, result1.mQ[2], 16) && + is_approx_equal_fraction(0.999471f, result1.mQ[3], 16)); + + LLQuaternion result2 = mayaQ(x, y, z, LLQuaternion::ZXY); + ensure( + "3. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for ZXY", + is_approx_equal_fraction(0.017674f, result2.mQ[0], 16) && + is_approx_equal_fraction(0.008265f, result2.mQ[1], 16) && + is_approx_equal_fraction(0.026020f, result2.mQ[2], 16) && + is_approx_equal_fraction(0.999471f, result2.mQ[3], 16)); + + LLQuaternion result3 = mayaQ(x, y, z, LLQuaternion::XZY); + ensure( + "4. TLLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XZY", + is_approx_equal_fraction(0.017674f, result3.mQ[0], 16) && + is_approx_equal_fraction(0.009179f, result3.mQ[1], 16) && + is_approx_equal_fraction(0.026020f, result3.mQ[2], 16) && + is_approx_equal_fraction(0.999463f, result3.mQ[3], 16)); + + LLQuaternion result4 = mayaQ(x, y, z, LLQuaternion::YXZ); + ensure( + "5. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for YXZ", + is_approx_equal_fraction(0.017217f, result4.mQ[0], 16) && + is_approx_equal_fraction(0.009179f, result4.mQ[1], 16) && + is_approx_equal_fraction(0.026324f, result4.mQ[2], 16) && + is_approx_equal_fraction(0.999463f, result4.mQ[3], 16)); + + LLQuaternion result5 = mayaQ(x, y, z, LLQuaternion::ZYX); + ensure( + "6. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for ZYX", + is_approx_equal_fraction(0.017674f, result5.mQ[0], 16) && + is_approx_equal_fraction(0.008265f, result5.mQ[1], 16) && + is_approx_equal_fraction(0.026324f, result5.mQ[2], 16) && + is_approx_equal_fraction(0.999463f, result5.mQ[3], 16)); + } + + template<> template<> + void llquat_test_object_t::test<18>() + { + // test case for friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) fn + LLQuaternion a(1.0f, 1.0f, 1.0f, 1.0f); + std::ostringstream result_value; + result_value << a; + ensure_equals("1. Operator << failed", result_value.str(), "{ 1, 1, 1, 1 }"); + + LLQuaternion b(-31.034f, 231.2340f, 3451.344320f, -341.0f); + std::ostringstream result_value1; + result_value1 << b; + ensure_equals("2. Operator << failed", result_value1.str(), "{ -31.034, 231.234, 3451.34, -341 }"); + + LLQuaternion c(1.0f, 2.2f, 3.3f, 4.4f); + result_value << c; + ensure_equals("3. Operator << failed", result_value.str(), "{ 1, 1, 1, 1 }{ 1, 2.2, 3.3, 4.4 }"); + + } + + template<> template<> + void llquat_test_object_t::test<19>() + { + //test case for const char *OrderToString( const LLQuaternion::Order order ) fn + const char* result = OrderToString(LLQuaternion::XYZ); + ensure("1. OrderToString failed for XYZ", (0 == strcmp("XYZ", result))); + + result = OrderToString(LLQuaternion::YZX); + ensure("2. OrderToString failed for YZX", (0 == strcmp("YZX", result))); + + result = OrderToString(LLQuaternion::ZXY); + ensure( + "3. OrderToString failed for ZXY", + (0 == strcmp("ZXY", result)) && + (0 != strcmp("XYZ", result)) && + (0 != strcmp("YXZ", result)) && + (0 != strcmp("ZYX", result)) && + (0 != strcmp("XYZ", result))); + + result = OrderToString(LLQuaternion::XZY); + ensure("4. OrderToString failed for XZY", (0 == strcmp("XZY", result))); + + result = OrderToString(LLQuaternion::ZYX); + ensure("5. OrderToString failed for ZYX", (0 == strcmp("ZYX", result))); + + result = OrderToString(LLQuaternion::YXZ); + ensure("6.OrderToString failed for YXZ", (0 == strcmp("YXZ", result))); + } + + template<> template<> + void llquat_test_object_t::test<20>() + { + //test case for LLQuaternion::Order StringToOrder( const char *str ) fn + int result = StringToOrder("XYZ"); + ensure("1. LLQuaternion::Order StringToOrder(const char *str ) failed for XYZ", 0 == result); + + result = StringToOrder("YZX"); + ensure("2. LLQuaternion::Order StringToOrder(const char *str) failed for YZX", 1 == result); + + result = StringToOrder("ZXY"); + ensure("3. LLQuaternion::Order StringToOrder(const char *str) failed for ZXY", 2 == result); + + result = StringToOrder("XZY"); + ensure("4. LLQuaternion::Order StringToOrder(const char *str) failed for XZY", 3 == result); + + result = StringToOrder("YXZ"); + ensure("5. LLQuaternion::Order StringToOrder(const char *str) failed for YXZ", 4 == result); + + result = StringToOrder("ZYX"); + ensure("6. LLQuaternion::Order StringToOrder(const char *str) failed for ZYX", 5 == result); + + } + + template<> template<> + void llquat_test_object_t::test<21>() + { + //void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const fn + F32 angle_value = 90.0f; + LLVector3 vect(12.0f, 4.0f, 1.0f); + LLQuaternion llquat(angle_value, vect); + llquat.getAngleAxis(&angle_value, vect); + ensure( + "LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) failed", + is_approx_equal_fraction(2.035406f, angle_value, 16) && + is_approx_equal_fraction(0.315244f, vect.mV[1], 16) && + is_approx_equal_fraction(0.078811f, vect.mV[2], 16) && + is_approx_equal_fraction(0.945733f, vect.mV[0], 16)); + } + + template<> template<> + void llquat_test_object_t::test<22>() + { + //test case for void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const fn + F32 roll = -12.0f; + F32 pitch = -22.43f; + F32 yaw = 11.0f; + + LLQuaternion llquat; + llquat.getEulerAngles(&roll, &pitch, &yaw); + ensure( + "LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) failed", + is_approx_equal(0.000f, llquat.mQ[0]) && + is_approx_equal(0.000f, llquat.mQ[1]) && + is_approx_equal(0.000f, llquat.mQ[2]) && + is_approx_equal(1.000f, llquat.mQ[3])); + } + +} diff --git a/linden/indra/test/llsaleinfo_tut.cpp b/linden/indra/test/llsaleinfo_tut.cpp new file mode 100644 index 0000000..9dc7f77 --- /dev/null +++ b/linden/indra/test/llsaleinfo_tut.cpp @@ -0,0 +1,248 @@ +/** + * @file LLSaleInfo_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief Test cases of llsaleinfo.h + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "llsaleinfo.h" + +namespace tut +{ + struct llsaleinfo_tut + { + }; + typedef test_group<llsaleinfo_tut> llsaleinfo_tut_t; + typedef llsaleinfo_tut_t::object llsaleinfo_test_t; + tut::llsaleinfo_tut_t tut_llsaleinfo_test("llsaleinfo"); + + template<> template<> + void llsaleinfo_test_t::test<1>() + { + //test case for getSaleType(), getSalePrice(), getCRC32() fn. + //test case for setSaleType(), setSalePrice() fn. + + S32 sale_price = 10000; + LLSaleInfo llsaleinfo(LLSaleInfo::FS_COPY, sale_price); + char* sale= "copy"; + + LLSD llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo); + LLSaleInfo saleinfo1 = ll_sale_info_from_sd(llsd_obj1); + + ensure("1. The getSaleType() fn failed", LLSaleInfo::FS_COPY == llsaleinfo.getSaleType()); + ensure("2. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale()); + ensure("3. The getSalePrice() fn failed", sale_price == llsaleinfo.getSalePrice()); + ensure("4. The getCRC32() fn failed", 235833404 == llsaleinfo.getCRC32()); + ensure("5. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_COPY == llsaleinfo.lookup(sale)); + ensure_equals("6. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("7. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType()); + + llsaleinfo.setSalePrice(10000000); + llsaleinfo.setSaleType(LLSaleInfo::FS_ORIGINAL); + sale = "cntn"; + llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo); + saleinfo1 = ll_sale_info_from_sd(llsd_obj1); + + ensure("8. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_ORIGINAL == llsaleinfo.getSaleType()); + ensure("9. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale()); + ensure("10. The getSalePrice() fn failed", 10000000 == llsaleinfo.getSalePrice()); + ensure("11. The getCRC32() fn failed", 127911702 == llsaleinfo.getCRC32()); + ensure("12. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_CONTENTS == llsaleinfo.lookup(sale)); + ensure_equals("13. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("14. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType()); + + llsaleinfo.setSalePrice(55000550); + llsaleinfo.setSaleType(LLSaleInfo::FS_CONTENTS); + sale = "orig"; + llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo); + saleinfo1 = ll_sale_info_from_sd(llsd_obj1); + + ensure("15. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_CONTENTS == llsaleinfo.getSaleType()); + ensure("16. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale()); + ensure("17. The getSalePrice() fn failed", 55000550 == llsaleinfo.getSalePrice()); + ensure("18. The getCRC32() fn failed", 408735656 == llsaleinfo.getCRC32()); + ensure("19. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_ORIGINAL == llsaleinfo.lookup(sale)); + ensure_equals("20. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("21. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType()); + + llsaleinfo.setSalePrice(-6432); + llsaleinfo.setSaleType(LLSaleInfo::FS_NOT); + sale = "not"; + llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo); + saleinfo1 = ll_sale_info_from_sd(llsd_obj1); + + ensure("22. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_NOT == llsaleinfo.getSaleType()); + ensure("23. LLSaleInfo::isForSale() fn failed", FALSE == llsaleinfo.isForSale()); + ensure("24. The getSalePrice() fn failed", 0 == llsaleinfo.getSalePrice()); + ensure("25. The getCRC32() fn failed", 0 == llsaleinfo.getCRC32()); + ensure("26. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_NOT == llsaleinfo.lookup(sale)); + ensure_equals("27. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("28. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType()); + } + + template<> template<> + void llsaleinfo_test_t::test<2>() + { + + FILE* fp = fopen("linden_file.dat","w+"); + if(!fp) + { + llerrs << "file could not be opened\n" << llendl; + return; + } + + S32 sale_price = 43500; + LLSaleInfo llsaleinfo(LLSaleInfo::FS_COPY, sale_price); + + llsaleinfo.exportFile(fp); + fclose(fp); + + LLSaleInfo llsaleinfo1; + U32 perm_mask; + BOOL has_perm_mask; + fp = fopen("linden_file.dat","r"); + + if(!fp) + { + llerrs << "file coudnt be opened\n" << llendl; + return; + } + + llsaleinfo1.importFile(fp, has_perm_mask, perm_mask); + fclose(fp); + + ensure("importFile() fn failed ", llsaleinfo.getSaleType() == llsaleinfo1.getSaleType() && + llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice()); + } + + template<> template<> + void llsaleinfo_test_t::test<3>() + { + S32 sale_price = 525452; + LLSaleInfo llsaleinfo(LLSaleInfo::FS_ORIGINAL, sale_price); + + std::ostringstream ostream; + llsaleinfo.exportLegacyStream(ostream); + + std::istringstream istream(ostream.str()); + LLSaleInfo llsaleinfo1; + U32 perm_mask = 0; + BOOL has_perm_mask = FALSE; + llsaleinfo1.importLegacyStream(istream, has_perm_mask, perm_mask); + + ensure("importLegacyStream() fn failed ", llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice() && + llsaleinfo.getSaleType() == llsaleinfo1.getSaleType()); + } + + template<> template<> + void llsaleinfo_test_t::test<4>() + { +// LLXMLNode is teh suck. +#if 0 + S32 sale_price = 23445; + LLSaleInfo saleinfo(LLSaleInfo::FS_CONTENTS, sale_price); + + LLXMLNode* x_node = saleinfo.exportFileXML(); + + LLSaleInfo saleinfo1(LLSaleInfo::FS_NOT, 0); + + saleinfo1.importXML(x_node); + ensure_equals("1.importXML() fn failed", saleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("2.importXML() fn failed", saleinfo.getSaleType(), saleinfo1.getSaleType()); +#endif + } + + template<> template<> + void llsaleinfo_test_t::test<5>() + { + S32 sale_price = 99000; + LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price); + + LLSD sd_result = saleinfo.asLLSD(); + + U32 perm_mask = 0 ; + BOOL has_perm_mask = FALSE; + + LLSaleInfo saleinfo1; + saleinfo1.fromLLSD( sd_result, has_perm_mask, perm_mask); + + ensure_equals("asLLSD and fromLLSD failed", saleinfo.getSalePrice(), saleinfo1.getSalePrice()); + ensure_equals("asLLSD and fromLLSD failed", saleinfo.getSaleType(), saleinfo1.getSaleType()); + } + + //static EForSale lookup(const char* name) fn test + template<> template<> + void llsaleinfo_test_t::test<6>() + { + S32 sale_price = 233223; + LLSaleInfo::EForSale ret_type = LLSaleInfo::lookup("orig"); + + ensure_equals("lookup(const char* name) fn failed", ret_type, LLSaleInfo::FS_ORIGINAL); + + LLSaleInfo saleinfo(LLSaleInfo::FS_COPY, sale_price); + const char* result = LLSaleInfo::lookup(LLSaleInfo::FS_COPY); + ensure("char* lookup(EForSale type) fn failed", 0 == strcmp("copy", result)); + } + + //void LLSaleInfo::accumulate(const LLSaleInfo& sale_info) fn test + template<> template<> + void llsaleinfo_test_t::test<7>() + { + S32 sale_price = 20; + LLSaleInfo saleinfo(LLSaleInfo::FS_COPY, sale_price); + LLSaleInfo saleinfo1(LLSaleInfo::FS_COPY, sale_price); + saleinfo1.accumulate(saleinfo); + ensure_equals("LLSaleInfo::accumulate(const LLSaleInfo& sale_info) fn failed", saleinfo1.getSalePrice(), 40); + + } + + // test cases of bool operator==(const LLSaleInfo &rhs) fn + // test case of bool operator!=(const LLSaleInfo &rhs) fn + template<> template<> + void llsaleinfo_test_t::test<8>() + { + S32 sale_price = 55000; + LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price); + LLSaleInfo saleinfoequal(LLSaleInfo::FS_ORIGINAL, sale_price); + LLSaleInfo saleinfonotequal(LLSaleInfo::FS_ORIGINAL, sale_price*2); + + ensure("operator == fn. failed", true == (saleinfo == saleinfoequal)); + ensure("operator != fn. failed", true == (saleinfo != saleinfonotequal)); + } + + template<> template<> + void llsaleinfo_test_t::test<9>() + { + + //TBD: void LLSaleInfo::packMessage(LLMessageSystem* msg) const + //TBD: void LLSaleInfo::unpackMessage(LLMessageSystem* msg, const char* block) + //TBD: void LLSaleInfo::unpackMultiMessage(LLMessageSystem* msg, const char* block, S32 block_num) + } + +} diff --git a/linden/indra/test/llsdmessagebuilder_tut.cpp b/linden/indra/test/llsdmessagebuilder_tut.cpp index d48584a..95a49dd 100755 --- a/linden/indra/test/llsdmessagebuilder_tut.cpp +++ b/linden/indra/test/llsdmessagebuilder_tut.cpp @@ -134,7 +134,7 @@ namespace tut void LLSDMessageBuilderTestObject::test<7>() // F32 { - F32 outValue, inValue = 121.44; + F32 outValue, inValue = 121.44f; LLSDMessageBuilder builder = defaultBuilder(); builder.addF32("var", inValue); LLSDMessageReader reader = setReader(builder); diff --git a/linden/indra/test/llsdmessagereader_tut.cpp b/linden/indra/test/llsdmessagereader_tut.cpp index 707cf31..5b644d0 100755 --- a/linden/indra/test/llsdmessagereader_tut.cpp +++ b/linden/indra/test/llsdmessagereader_tut.cpp @@ -30,6 +30,7 @@ #include <tut/tut.h> #include "lltut.h" +#include "message.h" #include "llsdmessagereader.h" #include "llsdutil.h" @@ -41,7 +42,7 @@ namespace tut const std::string& expected_name) { LLSDMessageReader msg; - msg.setMessage(msg_name, msg_data); + msg.setMessage(gMessageStringTable.getString(msg_name.c_str()), msg_data); ensure_equals("Ensure name", std::string(msg.getMessageName()), expected_name); } @@ -189,7 +190,7 @@ namespace tut void LLSDMessageReaderTestObject::test<9>() // F32 { - F32 outValue, inValue = 121.44; + F32 outValue, inValue = 121.44f; LLSDMessageReader msg = testType(inValue); msg.getF32("block", "var", outValue); ensure_equals("Ensure F32", outValue, inValue); @@ -317,4 +318,3 @@ namespace tut ensure_equals("Ensure Binary", outValue, inValue); } } - diff --git a/linden/indra/test/llsdtraits.h b/linden/indra/test/llsdtraits.h index 2e6a96a..84fc1fe 100644 --- a/linden/indra/test/llsdtraits.h +++ b/linden/indra/test/llsdtraits.h @@ -1,3 +1,31 @@ +/** + * @file llsdtraits.h + * @brief Unit test helpers + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LLSDTRAITS_H #define LLSDTRAITS_H diff --git a/linden/indra/test/llsdutil_tut.cpp b/linden/indra/test/llsdutil_tut.cpp new file mode 100644 index 0000000..bb5d7fd --- /dev/null +++ b/linden/indra/test/llsdutil_tut.cpp @@ -0,0 +1,152 @@ +/** + * @file llsdutil_tut.cpp + * @author Adroit + * @date 2007-02 + * @brief LLSD conversion routines test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "linden_common.h" +#include "lltut.h" +#include "v3color.h" +#include "v4math.h" +#include "m4math.h" +#include "llsdutil.h" + + +namespace tut +{ + struct llsdutil_data + { + }; + typedef test_group<llsdutil_data> llsdutil_test;; + typedef llsdutil_test::object llsdutil_object; + tut::llsdutil_test tutil("llsdutil"); + + template<> template<> + void llsdutil_object::test<1>() + { + LLSD sd; + U64 valueIn , valueOut; + valueIn = U64L(0xFEDCBA9876543210); + sd = ll_sd_from_U64(valueIn); + valueOut = ll_U64_from_sd(sd); + ensure_equals("U64 valueIn->sd->valueOut", valueIn, valueOut); + } + + template<> template<> + void llsdutil_object::test<2>() + { + LLSD sd; + U32 valueIn, valueOut; + valueIn = 0x87654321; + sd = ll_sd_from_U32(valueIn); + valueOut = ll_U32_from_sd(sd); + ensure_equals("U32 valueIn->sd->valueOut", valueIn, valueOut); + } + + template<> template<> + void llsdutil_object::test<3>() + { + U32 valueIn, valueOut; + valueIn = 0x87654321; + LLSD sd; + sd = ll_sd_from_ipaddr(valueIn); + valueOut = ll_ipaddr_from_sd(sd); + ensure_equals("valueIn->sd->valueOut", valueIn, valueOut); + } + + template<> template<> + void llsdutil_object::test<4>() + { + LLSD sd; + LLVector3 vec1(-1.0, 2.0, -3.0); + sd = ll_sd_from_vector3(vec1); + LLVector3 vec2 = ll_vector3_from_sd(sd); + ensure_equals("vector3 -> sd -> vector3: 1", vec1, vec2); + + LLVector3 vec3(sd); + ensure_equals("vector3 -> sd -> vector3: 2", vec1, vec3); + + sd.clear(); + vec1.setVec(0., 0., 0.); + sd = ll_sd_from_vector3(vec1); + vec2 = ll_vector3_from_sd(sd); + ensure_equals("vector3 -> sd -> vector3: 3", vec1, vec2); + sd.clear(); + } + + template<> template<> + void llsdutil_object::test<5>() + { + LLSD sd; + LLVector3d vec1((F64)(U64L(0xFEDCBA9876543210) << 2), -1., 0); + sd = ll_sd_from_vector3d(vec1); + LLVector3d vec2 = ll_vector3d_from_sd(sd); + ensure_equals("vector3d -> sd -> vector3d: 1", vec1, vec2); + + LLVector3d vec3(sd); + ensure_equals("vector3d -> sd -> vector3d : 2", vec1, vec3); + } + + template<> template<> + void llsdutil_object::test<6>() + { + LLSD sd; + LLVector2 vec((F32) -3., (F32) 4.2); + sd = ll_sd_from_vector2(vec); + LLVector2 vec1 = ll_vector2_from_sd(sd); + ensure_equals("vector2 -> sd -> vector2", vec, vec1); + + LLSD sd2 = ll_sd_from_vector2(vec1); + ensure_equals("sd -> vector2 -> sd: 2", sd, sd2); + } + + template<> template<> + void llsdutil_object::test<7>() + { + LLSD sd; + LLQuaternion quat((F32) 1., (F32) -0.98, (F32) 2.3, (F32) 0xffff); + sd = ll_sd_from_quaternion(quat); + LLQuaternion quat1 = ll_quaternion_from_sd(sd); + ensure_equals("LLQuaternion -> sd -> LLQuaternion", quat, quat1); + + LLSD sd2 = ll_sd_from_quaternion(quat1); + ensure_equals("sd -> LLQuaternion -> sd ", sd, sd2); + } + + template<> template<> + void llsdutil_object::test<8>() + { + LLSD sd; + LLColor4 c(1.0f, 2.2f, 4.0f, 7.f); + sd = ll_sd_from_color4(c); + LLColor4 c1 =ll_color4_from_sd(sd); + ensure_equals("LLColor4 -> sd -> LLColor4", c, c1); + + LLSD sd1 = ll_sd_from_color4(c1); + ensure_equals("sd -> LLColor4 -> sd", sd, sd1); + } +} diff --git a/linden/indra/test/llstreamtools_tut.cpp b/linden/indra/test/llstreamtools_tut.cpp new file mode 100644 index 0000000..aea2e4f --- /dev/null +++ b/linden/indra/test/llstreamtools_tut.cpp @@ -0,0 +1,928 @@ +/** + * @file llstreamtools_tut.cpp + * @author Adroit + * @date February 2007 + * @brief llstreamtools test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include <fstream> +#include "llstreamtools.h" +#include "lltut.h" + + +namespace tut +{ + struct streamtools_data + { + }; + typedef test_group<streamtools_data> streamtools_test; + typedef streamtools_test::object streamtools_object; + tut::streamtools_test streamtools_testcase("streamtools"); + + //test cases for skip_whitespace() + template<> template<> + void streamtools_object::test<1>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + + is.str(str = ""); + ensure("skip_whitespace: empty string", (false == skip_whitespace(is))); + + is.clear(); + is.str(str = " SecondLife is a 3D World"); + skip_whitespace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World"; + ensure_equals("skip_whitespace: space", arr, expected_result); + + is.clear(); + is.str(str = "\t \tSecondLife is a 3D World"); + skip_whitespace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World"; + ensure_equals("skip_whitespace: space and tabs", arr, expected_result); + + is.clear(); + is.str(str = "\t \tSecondLife is a 3D World "); + skip_whitespace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World "; + ensure_equals("skip_whitespace: space at end", arr, expected_result); + + is.clear(); + is.str(str = "\t \r\nSecondLife is a 3D World"); + skip_whitespace(is); + is.get(arr, 255, '\0'); + expected_result = "\r\nSecondLife is a 3D World"; + ensure_equals("skip_whitespace: space at end", arr, expected_result); + } + + //testcases for skip_emptyspaces() + template<> template<> + void streamtools_object::test<2>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = " \tSecondLife is a 3D World.\n"); + skip_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World.\n"; + ensure_equals("skip_emptyspace: space and tabs", arr, expected_result); + + is.clear(); + is.str(str = " \t\r\n \r SecondLife is a 3D World.\n"); + skip_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World.\n"; + ensure_equals("skip_emptyspace: space, tabs, carriage return, newline", arr, expected_result); + + is.clear(); + is.str(str = ""); + ret = skip_emptyspace(is); + is.get(arr, 255, '\0'); + ensure("skip_emptyspace: empty string", ret == false); + + is.clear(); + is.str(str = " \r\n \t "); + ret = skip_emptyspace(is); + is.get(arr, 255, '\0'); + ensure("skip_emptyspace: space newline empty", ret == false); + } + + //testcases for skip_comments_and_emptyspace() + template<> template<> + void streamtools_object::test<3>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = " \t\r\n \r SecondLife is a 3D World.\n"); + skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World.\n"; + ensure_equals("skip_comments_and_emptyspace: space, tabs, carriage return, newline", arr, expected_result); + + is.clear(); + is.str(str = "# \r\n SecondLife is a 3D World."); + skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World."; + ensure_equals("skip_comments_and_emptyspace: skip comment - 1", arr, expected_result); + + is.clear(); + is.str(str = "# \r\n # SecondLife is a 3D World. ##"); + skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = ""; + ensure_equals("skip_comments_and_emptyspace: skip comment - 2", arr, expected_result); + + is.clear(); + is.str(str = " \r\n SecondLife is a 3D World. ##"); + skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + expected_result = "SecondLife is a 3D World. ##"; + ensure_equals("skip_comments_and_emptyspace: skip comment - 3", arr, expected_result); + + is.clear(); + is.str(str = ""); + ret = skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + ensure("skip_comments_and_emptyspace: empty string", ret == false); + + is.clear(); + is.str(str = " \r\n \t # SecondLife is a 3D World"); + ret = skip_comments_and_emptyspace(is); + is.get(arr, 255, '\0'); + ensure("skip_comments_and_emptyspace: space newline comment empty", ret == false); + } + + //testcases for skip_line() + template<> template<> + void streamtools_object::test<4>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "SecondLife is a 3D World.\n\n It provides an opportunity to the site \nuser to perform real life activities in virtual world."); + skip_line(is); + is.get(arr, 255, '\0'); + expected_result = "\n It provides an opportunity to the site \nuser to perform real life activities in virtual world."; + ensure_equals("skip_line: 1 newline", arr, expected_result); + + is.clear(); + is.str(expected_result); + skip_line(is); + is.get(arr, 255, '\0'); + expected_result = " It provides an opportunity to the site \nuser to perform real life activities in virtual world."; + ensure_equals("skip_line: 2 newline", arr, expected_result); + + is.clear(); + is.str(expected_result); + skip_line(is); + is.get(arr, 255, '\0'); + expected_result = "user to perform real life activities in virtual world."; + ensure_equals("skip_line: 3 newline", arr, expected_result); + + is.clear(); + is.str(str = ""); + ret = skip_line(is); + ensure("skip_line: empty string", ret == false); + } + + + // testcases for skip_to_next_word() + template<> template<> + void streamtools_object::test<5>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "SecondLife is a 3D_World.\n\n It-provides an opportunity to the site \nuser to perform real life activities in virtual world."); + skip_to_next_word(is); // get past SecondLife + is.get(arr, 255, '\0'); + expected_result = "is a 3D_World.\n\n It-provides an opportunity to the site \nuser to perform real life activities in virtual world."; + ensure_equals("skip_to_next_word: 1", arr, expected_result); + + is.clear(); + is.str(expected_result); + skip_to_next_word(is); // get past is + skip_to_next_word(is); // get past a + skip_to_next_word(is); // get past 3D_World.\n\n + is.get(arr, 255, '\0'); + expected_result = "It-provides an opportunity to the site \nuser to perform real life activities in virtual world."; + ensure_equals("skip_to_next_word: get past .\n\n 2", arr, expected_result); + + is.clear(); + is.str(expected_result); + skip_to_next_word(is); // get past It- + expected_result = "provides an opportunity to the site \nuser to perform real life activities in virtual world."; + is.get(arr, 255, '\0'); + ensure_equals("skip_to_next_word: get past -", arr, expected_result); + + is.clear(); + is.str(str = ""); + ret = skip_to_next_word(is); + ensure("skip_line: empty string", ret == false); + + is.clear(); + is.str(str = " \r\n\r\n"); + ret = skip_to_next_word(is); + ensure("skip_line: space new lines", ret == false); + } + + + //testcases for skip_to_end_of_next_keyword() + template<> template<> + void streamtools_object::test<6>() + { + char arr[255]; + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "FIRSTKEY followed by second delimiter\nSECONDKEY\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld."); + ret = skip_to_end_of_next_keyword("FIRSTKEY", is); + is.get(arr, 255, '\0'); + expected_result = " followed by second delimiter\nSECONDKEY\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld."; + ensure_equals("skip_to_end_of_next_keyword: 1", arr, expected_result); + + is.clear(); + is.str(expected_result); + ret = skip_to_end_of_next_keyword("SECONDKEY", is); + is.get(arr, 255, '\0'); + expected_result = "\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld."; + ensure_equals("skip_to_end_of_next_keyword: 2", arr, expected_result); + + is.clear(); + is.str(expected_result); + ret = skip_to_end_of_next_keyword("SECONDKEY", is); + is.get(arr, 255, '\0'); + expected_result = "\nFOURTHKEY FOURTHVALUEis a 3DWorld."; + ensure_equals("skip_to_end_of_next_keyword: 3", arr, expected_result); + + is.clear(); + is.str(expected_result); + ret = skip_to_end_of_next_keyword("FOURTHKEY", is); + is.get(arr, 255, '\0'); + expected_result = " FOURTHVALUEis a 3DWorld."; + ensure_equals("skip_to_end_of_next_keyword: 4", arr, expected_result); + + is.clear(); + is.str(str = "{should be skipped as newline/space/tab does not follow but this one should be picked\n { Does it?\n"); + ret = skip_to_end_of_next_keyword("{", is); + is.get(arr, 255, '\0'); + expected_result = " Does it?\n"; + ensure_equals("skip_to_end_of_next_keyword: multiple delim matches on same line", arr, expected_result); + + is.clear(); + is.str(str = "Delim { could not be found at start"); + ret = skip_to_end_of_next_keyword("{", is); + ensure("skip_to_end_of_next_keyword: delim should not be present", ret == false); + + is.clear(); + is.str(str = "Empty Delim"); + ret = skip_to_end_of_next_keyword("", is); + ensure("skip_to_end_of_next_keyword: empty delim should not be valid", ret == false); + + is.clear(); + is.str(str = ""); + ret = skip_to_end_of_next_keyword("}", is); + ensure("skip_to_end_of_next_keyword: empty string", ret == false); + } + + //testcases for get_word(std::string& output_string, std::istream& input_stream) + template<> template<> + void streamtools_object::test<7>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n"); + actual_result = ""; + ret = get_word(actual_result, is); + expected_result = "First"; + ensure_equals("get_word: 1", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is); + expected_result = "Second"; + ensure_equals("get_word: 2", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is); + expected_result = "Third"; + ensure_equals("get_word: 3", actual_result, expected_result); + + // the current implementation of get_word seems inconsistent with + // skip_to_next_word. skip_to_next_word treats any character other + // than alhpa-numeric and '_' as a delimter, while get_word() + // treats only isspace() (i.e. space, form-feed('\f'), newline ('\n'), + // carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v') + // as delimiters + actual_result = ""; + ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth + expected_result = "Fourth-ShouldThisBePartOfFourth"; // as per current impl. + ensure_equals("get_word: 4", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is); // will copy Fifth + expected_result = "Fifth"; // as per current impl. + ensure_equals("get_word: 5", actual_result, expected_result); + + is.clear(); + is.str(str = " \t \r \n "); + actual_result = ""; + ret = get_word(actual_result, is); + ensure("get_word: empty all spaces, newline tabs", ret == false); + + is.clear(); + is.str(str = ""); + actual_result = ""; + ret = get_word(actual_result, is); + ensure("get_word: empty string", ret == false); + } + + // testcase for get_word and skip_to_next_word compatibility + template<> template<> + void streamtools_object::test<8>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n"); + actual_result = ""; + ret = get_word(actual_result, is); // First + actual_result = ""; + ret = get_word(actual_result, is); // Second + actual_result = ""; + ret = get_word(actual_result, is); // Third + + // the current implementation of get_word seems inconsistent with + // skip_to_next_word. skip_to_next_word treats any character other + // than alhpa-numeric and '_' as a delimter, while get_word() + // treats only isspace() (i.e. space, form-feed('\f'), newline ('\n'), + // carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v') + // as delimiters + actual_result = ""; + ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth + + actual_result = ""; + ret = get_word(actual_result, is); // will copy Fifth + + is.clear(); + is.str(str = " First Second \t \r \n Third Fourth_ShouldThisBePartOfFourth Fifth\n"); + ret = skip_to_next_word(is); // should now point to First + ret = skip_to_next_word(is); // should now point to Second + ret = skip_to_next_word(is); // should now point to Third + ret = skip_to_next_word(is); // should now point to Fourth + ret = skip_to_next_word(is); // should now point to ShouldThisBePartOfFourth + expected_result = ""; + // will copy ShouldThisBePartOfFourth, the fifth word, + // while using get_word above five times result in getting "Fifth" + ret = get_word(expected_result, is); + ensure_equals("get_word: skip_to_next_word compatibility", actual_result, expected_result); + } + + //testcases for get_word(std::string& output_string, std::istream& input_stream, int n) + template<> template<> + void streamtools_object::test<9>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n"); + actual_result = ""; + ret = get_word(actual_result, is, 255); + expected_result = "First"; + ensure_equals("get_word: 1", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is, 4); + expected_result = "Seco"; // should be cut short + ensure_equals("get_word: 2", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is, 255); + expected_result = "nd"; // get remainder of Second + ensure_equals("get_word: 3", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is, 0); // 0 size string + expected_result = ""; // get remainder of Second + ensure_equals("get_word: 0 sized output", actual_result, expected_result); + + actual_result = ""; + ret = get_word(actual_result, is, 255); + expected_result = "Third"; + ensure_equals("get_word: 4", actual_result, expected_result); + + is.clear(); + is.str(str = " \t \r \n "); + actual_result = ""; + ret = get_word(actual_result, is, 255); + ensure("get_word: empty all spaces, newline tabs", ret == false); + + is.clear(); + is.str(str = ""); + actual_result = ""; + ret = get_word(actual_result, is, 255); + ensure("get_word: empty string", ret == false); + } + + //test cases for get_line(std::string& output_string, std::istream& input_stream) + template<> template<> + void streamtools_object::test<10>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "First Second \t \r\n Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n"); + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "First Second \t \n"; + ensure_equals("get_line: 1", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = " Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n"; + ensure_equals("get_line: 2", actual_result, expected_result); + + is.clear(); + is.str(str = "\nFirst Line.\n\nSecond Line.\n"); + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "\n"; + ensure_equals("get_line: First char as newline", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "First Line.\n"; + ensure_equals("get_line: 3", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "\n"; + ensure_equals("get_line: 4", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "Second Line.\n"; + ensure_equals("get_line: 5", actual_result, expected_result); + } + + //test cases for get_line(std::string& output_string, std::istream& input_stream) + template<> template<> + void streamtools_object::test<11>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "One Line only with no newline"); + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "One Line only with no newline"; + ensure_equals("get_line: No newline", actual_result, expected_result); + ensure_equals("return value is good state of stream", ret, is.good()); + } + + //test cases for get_line(std::string& output_string, std::istream& input_stream) + template<> template<> + void streamtools_object::test<12>() + { + skip_fail("get_line() incorrectly handles lone carriage return."); + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + // need to be check if this test case is wrong or the implementation is wrong. + is.clear(); + is.str(str = "Should not skip \r unless they are followed with newline .\r\n"); + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "Should not skip \r unless they are followed with newline .\n"; + ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result); + } + + //test cases for get_line(std::string& output_string, std::istream& input_stream) + template<> template<> + void streamtools_object::test<13>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "\n"); + actual_result = ""; + ret = get_line(actual_result, is); + expected_result = "\n"; + ensure_equals("get_line: Just newline", actual_result, expected_result); + } + + + //testcases for get_line(std::string& output_string, std::istream& input_stream, int n) + template<> template<> + void streamtools_object::test<14>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "First Line.\nSecond Line.\n"); + actual_result = ""; + ret = get_line(actual_result, is, 255); + expected_result = "First Line.\n"; + ensure_equals("get_line: Basic Operation", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is, sizeof("Second")-1); + expected_result = "Second\n"; + ensure_equals("get_line: Insufficient length 1", actual_result, expected_result); + + actual_result = ""; + ret = get_line(actual_result, is, 255); + expected_result = " Line.\n"; + ensure_equals("get_line: Remainder after earlier insufficient length", actual_result, expected_result); + + is.clear(); + is.str(str = "One Line only with no newline with limited length"); + actual_result = ""; + ret = get_line(actual_result, is, sizeof("One Line only with no newline with limited length")-1); + expected_result = "One Line only with no newline with limited length\n"; + ensure_equals("get_line: No newline with limited length", actual_result, expected_result); + + is.clear(); + is.str(str = "One Line only with no newline"); + actual_result = ""; + ret = get_line(actual_result, is, 255); + expected_result = "One Line only with no newline"; + ensure_equals("get_line: No newline", actual_result, expected_result); + } + + //testcases for get_line(std::string& output_string, std::istream& input_stream, int n) + template<> template<> + void streamtools_object::test<15>() + { + std::string str; + std::string expected_result; + std::string actual_result; + std::istringstream is; + bool ret; + + is.clear(); + is.str(str = "One Line only with no newline"); + actual_result = ""; + ret = get_line(actual_result, is, 255); + expected_result = "One Line only with no newline"; + ensure_equals("get_line: No newline", actual_result, expected_result); + ensure_equals("return value is good state of stream", ret, is.good()); + } + + //testcases for remove_last_char() + template<> template<> + void streamtools_object::test<16>() + { + std::string str; + std::string expected_result; + bool ret; + + str = "SecondLife is a 3D World"; + + ret = remove_last_char('d',str); + expected_result = "SecondLife is a 3D Worl"; + ensure_equals("remove_last_char: should remove last char", str, expected_result); + + str = "SecondLife is a 3D World"; + ret = remove_last_char('W',str); + expected_result = "SecondLife is a 3D World"; + ensure_equals("remove_last_char: should not remove as it is not last char", str, expected_result); + ensure("remove_last_char: should return false", ret == false); + + str = "SecondLife is a 3D World\n"; + ret = remove_last_char('\n',str); + expected_result = "SecondLife is a 3D World"; + ensure_equals("remove_last_char: should remove last newline", str, expected_result); + ensure("remove_last_char: should remove newline and return true", ret == true); + } + + + //testcases for unescaped_string() + template<> template<> + void streamtools_object::test<17>() + { + std::string str; + std::string expected_result; + + str = "SecondLife is a 3D world \\n"; + unescape_string(str); + expected_result = "SecondLife is a 3D world \n"; + ensure_equals("unescape_string: newline", str, expected_result); + + str = "SecondLife is a 3D world \\\\t \\n"; + unescape_string(str); + expected_result = "SecondLife is a 3D world \\t \n"; + ensure_equals("unescape_string: backslash and newline", str, expected_result); + + str = "SecondLife is a 3D world \\ "; + unescape_string(str); + expected_result = "SecondLife is a 3D world \\ "; + ensure_equals("unescape_string: insufficient to unescape", str, expected_result); + + str = "SecondLife is a 3D world \\n \\n \\n \\\\\\n"; + unescape_string(str); + expected_result = "SecondLife is a 3D world \n \n \n \\\n"; + ensure_equals("unescape_string: multipel newline and backslash", str, expected_result); + + str = "SecondLife is a 3D world \\t"; + unescape_string(str); + expected_result = "SecondLife is a 3D world \\t"; + ensure_equals("unescape_string: leaves tab as is", str, expected_result); + + str = "\\n"; + unescape_string(str); + expected_result = "\n"; + ensure_equals("unescape_string: only a newline", str, expected_result); + } + + //testcases for escape_string() + template<> template<> + void streamtools_object::test<18>() + { + std::string str; + std::string expected_result; + + str = "SecondLife is a 3D world \n"; + escape_string(str); + expected_result = "SecondLife is a 3D world \\n"; + ensure_equals("escape_string: newline", str, expected_result); + + str = "SecondLife is a 3D world \\t \n"; + escape_string(str); + expected_result = "SecondLife is a 3D world \\\\t \\n"; + ensure_equals("escape_string: backslash and newline", str, expected_result); + + str = "SecondLife is a 3D world \n \n \n \\\n"; + escape_string(str); + expected_result = "SecondLife is a 3D world \\n \\n \\n \\\\\\n"; + ensure_equals("escape_string: multipel newline and backslash", str, expected_result); + + str = "SecondLife is a 3D world \t"; + escape_string(str); + expected_result = "SecondLife is a 3D world \t"; + ensure_equals("unescape_string: leaves tab as is", str, expected_result); + + str = "\n"; + escape_string(str); + expected_result = "\\n"; + ensure_equals("unescape_string: only a newline", str, expected_result); + + // serialization/deserialization escape->unescape + str = "SecondLife is a 3D world \n \n \n \\\n"; + escape_string(str); + unescape_string(str); + expected_result = "SecondLife is a 3D world \n \n \n \\\n"; + ensure_equals("escape_string: should preserve with escape/unescape", str, expected_result); + + // serialization/deserialization unescape->escape + str = "SecondLife is a 3D world \\n \\n \\n \\\\"; + unescape_string(str); + escape_string(str); + expected_result = "SecondLife is a 3D world \\n \\n \\n \\\\"; + ensure_equals("escape_string: should preserve with unescape/escape", str, expected_result); + } + + // testcases for replace_newlines_with_whitespace() + template<> template<> + void streamtools_object::test<19>() + { + std::string str; + std::string expected_result; + + str = "SecondLife is a 3D \n\nworld\n"; + replace_newlines_with_whitespace(str); + expected_result = "SecondLife is a 3D world "; + ensure_equals("replace_newlines_with_whitespace: replace all newline", str, expected_result); + + str = "\nSecondLife is a 3D world\n"; + replace_newlines_with_whitespace(str); + expected_result = " SecondLife is a 3D world "; + ensure_equals("replace_newlines_with_whitespace: begin and newline", str, expected_result); + + str = "SecondLife is a 3D world\r\t"; + replace_newlines_with_whitespace(str); + expected_result = "SecondLife is a 3D world\r\t"; + ensure_equals("replace_newlines_with_whitespace: should only replace newline", str, expected_result); + + str = ""; + replace_newlines_with_whitespace(str); + expected_result = ""; + ensure_equals("replace_newlines_with_whitespace: empty string", str, expected_result); + } + + //testcases for remove_double_quotes() + template<> template<> + void streamtools_object::test<20>() + { + std::string str; + std::string expected_result; + + str = "SecondLife is a \"\"3D world"; + remove_double_quotes(str); + expected_result = "SecondLife is a 3D world"; + ensure_equals("remove_double_quotes: replace empty doube quotes", str, expected_result); + + str = "SecondLife is a \"3D world"; + remove_double_quotes(str); + expected_result = "SecondLife is a 3D world"; + ensure_equals("remove_double_quotes: keep as is it matching quote not found", str, expected_result); + } + + // testcases for get_brace_count() + template<> template<> + void streamtools_object::test<21>() + { + skip_fail("get_brace_count() has bugs."); + + std::string str; + std::string expected_result; + int count; + + str = " { "; + count = get_brace_count(str); + ensure("get_brace_count: 1 for {", count == 1); + + str = "\t}\t\t \n"; + count = get_brace_count(str); + ensure("get_brace_count: 1 for {", count == -1); + + str = "\t\t\t \n"; + count = get_brace_count(str); + ensure("get_brace_count: 0 for no braces", count == 0); + + str = "{ Remaining line not empty\n"; + count = get_brace_count(str); + ensure("get_brace_count: 0 for remainign line not empty", count == 0); + + /* shouldn't this return 1? */ + str = "{ /*Remaining line in comment*/\n"; + count = get_brace_count(str); + ensure("get_brace_count: 1 for { with remaining line in comment", count == 1); + + /* shouldn't this return -1? */ + str = " } //Remaining line in comment \n"; + count = get_brace_count(str); + ensure("get_brace_count: -1 for } with remaining line in comment", count == -1); + } + + //testcases for get_keyword_and_value() + template<> template<> + void streamtools_object::test<22>() + { + std::string s = "SecondLife is a 3D World"; + std::string keyword; + std::string value; + get_keyword_and_value(keyword, value, s); + ensure("get_keyword_and_value: Unable to get Keyword and Value", ((keyword == "SecondLife") && (value == "is a 3D World"))); + + s = "SecondLife"; + get_keyword_and_value(keyword, value, s); + ensure("get_keyword_and_value: value should be empty", ((keyword == "SecondLife") && (value == ""))); + + s = "SecondLife \t is cool! \n"; + get_keyword_and_value(keyword, value, s); + ensure("get_keyword_and_value: remove space before value but not after", ((keyword == "SecondLife") && (value == "is cool! "))); + } + + //testcases for get_keyword_and_value() + template<> template<> + void streamtools_object::test<23>() + { + skip_fail("get_keyword_and_value() has bugs."); + + std::string s; + std::string keyword = "SOME PRIOR KEYWORD"; + std::string value = "SOME PRIOR VALUE"; + + s = "SecondLife\n"; + get_keyword_and_value(keyword, value, s); + ensure("get_keyword_and_value: terminated with newline. value should be empty", ((keyword == "SecondLife") && (value == ""))); + } + + //testcases for get_keyword_and_value() + template<> template<> + void streamtools_object::test<24>() + { + skip_fail("get_keyword_and_value() has bugs."); + + std::string s; + std::string keyword = "SOME PRIOR KEYWORD"; + std::string value = "SOME PRIOR VALUE"; + + s = ""; + get_keyword_and_value(keyword, value, s); + ensure("get_keyword_and_value: empty string. keyword value should empty", ((keyword == "") && (value == ""))); + } + + //testcase for fullread() + template<> template<> + void streamtools_object::test<25>() + { + std::string str = "First Line.\nSecond Line\n"; + std::istringstream is(str); + char buf[255] = {0}; + + fullread(is, buf, 255); + ensure_memory_matches("fullread: read with newlines", (void*) buf, str.size()-1, (void*) str.c_str(), str.size()-1); + + is.clear(); + is.str(str = "First Line.\nSecond Line\n"); + memset(buf, 0, 255); + + char expected_string[] = "First Line.\nSecond"; + int len = sizeof(expected_string)-1; + fullread(is, buf, len); + ensure_memory_matches("fullread: read with newlines", (void*) buf, len, (void*) &expected_string, len); + } + + +// testcases for operator >> + + template<> template<> + void streamtools_object::test<26>() + { + char arr[255]; + std::string str; + std::string toCheck = "SecondLife" ; + std::string expected_result; + std::istringstream stream("SecondLife is a 3D World"); + stream >> toCheck.c_str(); + stream.get(arr, 255, '\0'); + expected_result = " is a 3D World"; + ensure_equals("istream << operator", arr, expected_result); + + stream.clear(); + stream.str(str = "SecondLife is a 3D World"); + toCheck = "is"; + stream >> toCheck.c_str(); + ensure("istream << operator should have failed", stream.good() == false); + } +} diff --git a/linden/indra/test/llstring_tut.cpp b/linden/indra/test/llstring_tut.cpp index 040955b..f49fb1c 100644 --- a/linden/indra/test/llstring_tut.cpp +++ b/linden/indra/test/llstring_tut.cpp @@ -6,6 +6,7 @@ * * Copyright (c) 2007-2007, Linden Research, Inc. * + * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement diff --git a/linden/indra/test/lltemplatemessagebuilder_tut.cpp b/linden/indra/test/lltemplatemessagebuilder_tut.cpp new file mode 100644 index 0000000..d25e57e --- /dev/null +++ b/linden/indra/test/lltemplatemessagebuilder_tut.cpp @@ -0,0 +1,964 @@ +/** + * @file lltemplatemessagebuilder_tut.cpp + * @date 2007-04 + * @brief Tests for building messages. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" + +#include "llapr.h" +#include "llmessagetemplate.h" +#include "llquaternion.h" +#include "lltemplatemessagebuilder.h" +#include "lltemplatemessagereader.h" +#include "llversion.h" +#include "message_prehash.h" +#include "u64.h" +#include "v3dmath.h" +#include "v3math.h" +#include "v4math.h" + +namespace tut +{ + static LLTemplateMessageBuilder::message_template_name_map_t nameMap; + static LLTemplateMessageReader::message_template_number_map_t numberMap; + + struct LLTemplateMessageBuilderTestData + { + static LLMessageTemplate defaultTemplate() + { + static bool init = false; + if(! init) + { + ll_init_apr(); + start_messaging_system("notafile", 13035, + LL_VERSION_MAJOR, + LL_VERSION_MINOR, + LL_VERSION_PATCH, + FALSE, + "notasharedsecret"); + init_prehash_data(); + init = true; + } + return LLMessageTemplate(_PREHASH_TestMessage, 1, MFT_HIGH); + } + + static LLMessageBlock* defaultBlock(const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE) + { + return createBlock(_PREHASH_Test0, type, size, block); + } + + static LLMessageBlock* createBlock(char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE) + { + LLMessageBlock* result = new LLMessageBlock(name, block); + if(type != MVT_NULL) + { + result->addVariable(_PREHASH_Test0, type, size); + } + return result; + } + + static LLTemplateMessageBuilder* defaultBuilder(LLMessageTemplate& messageTemplate, char* name = _PREHASH_Test0) + { + nameMap[_PREHASH_TestMessage] = &messageTemplate; + LLTemplateMessageBuilder* builder = new LLTemplateMessageBuilder(nameMap); + builder->newMessage(_PREHASH_TestMessage); + builder->nextBlock(name); + return builder; + } + + /** Takes ownership of builder */ + static LLTemplateMessageReader* setReader( + LLMessageTemplate& messageTemplate, + LLTemplateMessageBuilder* builder, + U8 offset = 0) + { + numberMap[1] = &messageTemplate; + const U32 bufferSize = 1024; + U8 buffer[bufferSize]; + // zero out the packet ID field + memset(buffer, 0, LL_PACKET_ID_SIZE); + U32 builtSize = builder->buildMessage(buffer, bufferSize, offset); + delete builder; + LLTemplateMessageReader* reader = new LLTemplateMessageReader(numberMap); + reader->validateMessage(buffer, builtSize, LLHost()); + reader->readMessage(buffer, LLHost()); + return reader; + } + + }; + + typedef test_group<LLTemplateMessageBuilderTestData> LLTemplateMessageBuilderTestGroup; + typedef LLTemplateMessageBuilderTestGroup::object LLTemplateMessageBuilderTestObject; + LLTemplateMessageBuilderTestGroup templateMessageBuilderTestGroup("LLTemplateMessageBuilder"); + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<1>() + // construction and test of undefined + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock()); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<2>() + // BOOL + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_BOOL, 1)); + BOOL outValue, inValue = TRUE; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addBOOL(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getBOOL(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure BOOL", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<3>() + // U8 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U8, 1)); + U8 outValue, inValue = 2; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU8(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU8(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U8", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<4>() + // S16 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_S16, 2)); + S16 outValue, inValue = 90; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addS16(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getS16(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure S16", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<5>() + // U16 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U16, 2)); + U16 outValue, inValue = 3; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU16(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU16(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U16", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<6>() + // S32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_S32, 4)); + S32 outValue, inValue = 44; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addS32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getS32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure S32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<7>() + // F32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_F32, 4)); + F32 outValue, inValue = 121.44f; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addF32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getF32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure F32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<8>() + // U32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U32, 4)); + U32 outValue, inValue = 88; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<9>() + // U64 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U64, 8)); + U64 outValue, inValue = 121; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU64(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU64(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U64", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<10>() + // F64 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_F64, 8)); + F64 outValue, inValue = 3232143.33; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addF64(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getF64(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure F64", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<11>() + // Vector3 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector3, 12)); + LLVector3 outValue, inValue = LLVector3(1,2,3); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector3(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getVector3(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector3", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<12>() + // Vector4 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector4, 16)); + LLVector4 outValue, inValue = LLVector4(1,2,3,4); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector4(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getVector4(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector4", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<13>() + // Vector3d + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector3d, 24)); + LLVector3d outValue, inValue = LLVector3d(1,2,3); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector3d(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getVector3d(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector3d", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<14>() + // Quaternion + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLQuaternion, 12)); + LLQuaternion outValue, inValue = LLQuaternion(1,2,3,0); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addQuat(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getQuat(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLQuaternion", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<15>() + // UUID + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLUUID, 16)); + LLUUID outValue, inValue; + inValue.generate(); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addUUID(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getUUID(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure UUID", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<16>() + // IPAddr + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_IP_ADDR, 4)); + U32 outValue, inValue = 12344556; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addIPAddr(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getIPAddr(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure IPAddr", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<17>() + // IPPort + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_IP_PORT, 2)); + U16 outValue, inValue = 80; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addIPPort(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getIPPort(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure IPPort", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<18>() + // String + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_VARIABLE, 1)); + std::string outValue, inValue = "testing"; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addString(_PREHASH_Test0, inValue.c_str()); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + char buffer[MAX_STRING]; + reader->getString(_PREHASH_Test0, _PREHASH_Test0, MAX_STRING, buffer); + outValue = buffer; + ensure_equals("Ensure String", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<19>() + // block name !-> binary order + { + U8 buffer1[MAX_BUFFER_SIZE]; + memset(buffer1, 0, MAX_BUFFER_SIZE); + U8 buffer2[MAX_BUFFER_SIZE]; + memset(buffer2, 0, MAX_BUFFER_SIZE); + U32 bufferSize1, bufferSize2; + + // build template: Test0 before Test1 + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE)); + + // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xaaaa); + builder->nextBlock(_PREHASH_Test1); + builder->addU32(_PREHASH_Test0, 0xbbbb); + bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0); + delete builder; + + // build template: Test1 before Test0 + messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE)); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + + // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb + builder = defaultBuilder(messageTemplate, _PREHASH_Test1); + builder->addU32(_PREHASH_Test0, 0xaaaa); + builder->nextBlock(_PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xbbbb); + bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0); + delete builder; + + ensure_equals("Ensure Buffer Sizes Equal", bufferSize1, bufferSize2); + ensure_equals("Ensure Buffer Contents Equal", memcmp(buffer1, buffer2, bufferSize1), 0); + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<20>() + // block build order !-> binary order + { + U8 buffer1[MAX_BUFFER_SIZE]; + memset(buffer1, 0, MAX_BUFFER_SIZE); + U8 buffer2[MAX_BUFFER_SIZE]; + memset(buffer2, 0, MAX_BUFFER_SIZE); + U32 bufferSize1, bufferSize2; + + // build template: Test0 before Test1 + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE)); + + // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xaaaa); + builder->nextBlock(_PREHASH_Test1); + builder->addU32(_PREHASH_Test0, 0xbbbb); + bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0); + delete builder; + + // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb + builder = defaultBuilder(messageTemplate, _PREHASH_Test1); + builder->addU32(_PREHASH_Test0, 0xbbbb); + builder->nextBlock(_PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xaaaa); + bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0); + delete builder; + + ensure_equals("Ensure Buffer Sizes Equal", bufferSize1, bufferSize2); + ensure_equals("Ensure Buffer Contents Equal", memcmp(buffer1, buffer2, bufferSize1), 0); + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<21>() + // block appended in declaration -> data appended in binary + { + U8 buffer1[MAX_BUFFER_SIZE]; + memset(buffer1, 0, MAX_BUFFER_SIZE); + U8 buffer2[MAX_BUFFER_SIZE]; + memset(buffer2, 0, MAX_BUFFER_SIZE); + U32 bufferSize1, bufferSize2; + + // Build template: Test0 only + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + + // Build message + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xaaaa); + bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0); + delete builder; + + // Build template: Test0 before Test1 + messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE)); + + // Build message + builder = defaultBuilder(messageTemplate, _PREHASH_Test0); + builder->addU32(_PREHASH_Test0, 0xaaaa); + builder->nextBlock(_PREHASH_Test1); + builder->addU32(_PREHASH_Test0, 0xbbbb); + bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0); + delete builder; + + ensure_not_equals("Ensure Buffer Sizes Not Equal", bufferSize1, bufferSize2); + ensure_equals("Ensure Buffer Prefix Equal", memcmp(buffer1, buffer2, bufferSize1), 0); + ensure_not_equals("Ensure Buffer Contents Not Equal", memcmp(buffer1, buffer2, bufferSize2), 0); + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<22>() + // repeated penultimate block (crashes when data in LLDynamicArrayIndexed) + { + U32 inTest00 = 0, inTest01 = 1, inTest1 = 2; + U32 outTest00, outTest01, outTest1; + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4)); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4)); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inTest00); + builder->nextBlock(_PREHASH_Test0); + builder->addU32(_PREHASH_Test0, inTest01); + builder->nextBlock(_PREHASH_Test1); + builder->addU32(_PREHASH_Test0, inTest1); + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest00, 0); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest01, 1); + reader->getU32(_PREHASH_Test1, _PREHASH_Test0, outTest1); + ensure_equals("Ensure Test0[0]", inTest00, outTest00); + ensure_equals("Ensure Test0[1]", inTest01, outTest01); + ensure_equals("Ensure Test1", inTest1, outTest1); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<23>() + // variable repeated block name never accessed + { + U32 inTest = 1, outTest; + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock( + createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE)); + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4)); + + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inTest); + + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest); + S32 blockCount = reader->getNumberOfBlocks(_PREHASH_Test1); + ensure_equals("Ensure block count", blockCount, 0); + ensure_equals("Ensure Test0", inTest, outTest); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<24>() + // forwarding message + { + // build template + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4)); + + // build message + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, 42); + + // read message + LLTemplateMessageReader* reader = setReader(messageTemplate, builder); + + // forward message + builder = defaultBuilder(messageTemplate); + builder->newMessage(_PREHASH_TestMessage); + reader->copyToBuilder(*builder); + U8 buffer[MAX_BUFFER_SIZE]; + builder->buildMessage(buffer, MAX_BUFFER_SIZE, 0); + + delete builder; + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<25>() + // non-zero offset with undefined + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock()); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 10); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<26>() + // non-zero offset with BOOL + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_BOOL, 1)); + BOOL outValue, inValue = TRUE; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addBOOL(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 1); + reader->getBOOL(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure BOOL", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<27>() + // non-zero offset with U8 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U8, 1)); + U8 outValue, inValue = 2; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU8(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 255); + reader->getU8(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U8", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<28>() + // non-zero offset with S16 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_S16, 2)); + S16 outValue, inValue = 90; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addS16(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 2); + reader->getS16(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure S16", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<29>() + // non-zero offset with U16 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U16, 2)); + U16 outValue, inValue = 3; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU16(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 4); + reader->getU16(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U16", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<30>() + // non-zero offset with S32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_S32, 4)); + S32 outValue, inValue = 44; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addS32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 4); + reader->getS32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure S32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<31>() + // non-zero offset with F32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_F32, 4)); + F32 outValue, inValue = 121.44f; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addF32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 16); + reader->getF32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure F32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<32>() + // non-zero offset with U32 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U32, 4)); + U32 outValue, inValue = 88; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 127); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U32", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<33>() + // non-zero offset with U64 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U64, 8)); + U64 outValue, inValue = 121; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU64(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 32); + reader->getU64(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure U64", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<34>() + // non-zero offset with F64 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_F64, 8)); + F64 outValue, inValue = 3232143.33; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addF64(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 128); + reader->getF64(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure F64", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<35>() + // non-zero offset with Vector3 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector3, 12)); + LLVector3 outValue, inValue = LLVector3(1,2,3); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector3(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 63); + reader->getVector3(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector3", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<36>() + // non-zero offset with Vector4 + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector4, 16)); + LLVector4 outValue, inValue = LLVector4(1,2,3,4); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector4(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 64); + reader->getVector4(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector4", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<37>() + // non-zero offset with Vector3d + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLVector3d, 24)); + LLVector3d outValue, inValue = LLVector3d(1,2,3); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addVector3d(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 64); + reader->getVector3d(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLVector3d", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<38>() + // non-zero offset with Quaternion + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLQuaternion, 12)); + LLQuaternion outValue, inValue = LLQuaternion(1,2,3,0); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addQuat(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 12); + reader->getQuat(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure LLQuaternion", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<39>() + // non-zero offset with UUID + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_LLUUID, 16)); + LLUUID outValue, inValue; + inValue.generate(); + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addUUID(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 31); + reader->getUUID(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure UUID", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<40>() + // non-zero offset with IPAddr + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_IP_ADDR, 4)); + U32 outValue, inValue = 12344556; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addIPAddr(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 32); + reader->getIPAddr(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure IPAddr", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<41>() + // non-zero offset with IPPort + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_IP_PORT, 2)); + U16 outValue, inValue = 80; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addIPPort(_PREHASH_Test0, inValue); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 6); + reader->getIPPort(_PREHASH_Test0, _PREHASH_Test0, outValue); + ensure_equals("Ensure IPPort", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<42>() + // non-zero offset with String + { + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_VARIABLE, 1)); + std::string outValue, inValue = "testing"; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addString(_PREHASH_Test0, inValue.c_str()); + LLTemplateMessageReader* reader = setReader( + messageTemplate, builder, 255); + char buffer[MAX_STRING]; + reader->getString(_PREHASH_Test0, _PREHASH_Test0, MAX_STRING, buffer); + outValue = buffer; + ensure_equals("Ensure String", inValue, outValue); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<43>() + // read past end of message -> default values (forward compatibility) + { + // build message with single block + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE)); + U32 outValue, outValue2, inValue = 0xbbbbbbbb; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inValue); + const U32 bufferSize = 1024; + U8 buffer[bufferSize]; + memset(buffer, 0xaa, bufferSize); + memset(buffer, 0, LL_PACKET_ID_SIZE); + U32 builtSize = builder->buildMessage(buffer, bufferSize, 0); + delete builder; + + // add block to reader template + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE)); + + // read message value and default value + numberMap[1] = &messageTemplate; + LLTemplateMessageReader* reader = + new LLTemplateMessageReader(numberMap); + reader->validateMessage(buffer, builtSize, LLHost()); + reader->readMessage(buffer, LLHost()); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); + reader->getU32(_PREHASH_Test1, _PREHASH_Test0, outValue2); + ensure_equals("Ensure present value ", outValue, inValue); + ensure_equals("Ensure default value ", outValue2, 0); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<44>() + // read variable block past end of message -> 0 repeats + { + // build message with single block + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE)); + U32 outValue, outValue2, inValue = 0xbbbbbbbb; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inValue); + const U32 bufferSize = 1024; + U8 buffer[bufferSize]; + memset(buffer, 0xaa, bufferSize); + memset(buffer, 0, LL_PACKET_ID_SIZE); + U32 builtSize = builder->buildMessage(buffer, bufferSize, 0); + delete builder; + + // add variable block to reader template + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4)); + + // read message value and check block repeat count + numberMap[1] = &messageTemplate; + LLTemplateMessageReader* reader = + new LLTemplateMessageReader(numberMap); + reader->validateMessage(buffer, builtSize, LLHost()); + reader->readMessage(buffer, LLHost()); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); + outValue2 = reader->getNumberOfBlocks(_PREHASH_Test1); + ensure_equals("Ensure present value ", outValue, inValue); + ensure_equals("Ensure 0 repeats ", outValue2, 0); + delete reader; + } + + template<> template<> + void LLTemplateMessageBuilderTestObject::test<45>() + // read variable length data past end of message -> 0 length + { + // build message with single block + LLMessageTemplate messageTemplate = defaultTemplate(); + messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE)); + U32 outValue, outValue2, inValue = 0xbbbbbbbb; + LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate); + builder->addU32(_PREHASH_Test0, inValue); + const U32 bufferSize = 1024; + U8 buffer[bufferSize]; + memset(buffer, 0xaa, bufferSize); + memset(buffer, 0, LL_PACKET_ID_SIZE); + U32 builtSize = builder->buildMessage(buffer, bufferSize, 0); + delete builder; + + // add variable block to reader template + messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_VARIABLE, 4, + MBT_SINGLE)); + + // read message value and default string + numberMap[1] = &messageTemplate; + LLTemplateMessageReader* reader = + new LLTemplateMessageReader(numberMap); + reader->validateMessage(buffer, builtSize, LLHost()); + reader->readMessage(buffer, LLHost()); + reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); + char outBuffer[bufferSize]; + memset(buffer, 0xcc, bufferSize); + reader->getString(_PREHASH_Test1, _PREHASH_Test0, bufferSize, + outBuffer); + outValue2 = reader->getNumberOfBlocks(_PREHASH_Test1); + ensure_equals("Ensure present value ", outValue, inValue); + ensure_equals("Ensure unchanged buffer ", strlen(outBuffer), 0); + delete reader; + } +} + diff --git a/linden/indra/test/lltut.h b/linden/indra/test/lltut.h index 626ff60..f40555e 100644 --- a/linden/indra/test/lltut.h +++ b/linden/indra/test/lltut.h @@ -28,12 +28,6 @@ * COMPLETENESS OR PERFORMANCE. */ -/** - * - * THOROUGH_DESCRIPTION - * - */ - #ifndef LL_LLTUT_H #define LL_LLTUT_H diff --git a/linden/indra/test/lluuidhashmap_tut.cpp b/linden/indra/test/lluuidhashmap_tut.cpp new file mode 100644 index 0000000..a787326 --- /dev/null +++ b/linden/indra/test/lluuidhashmap_tut.cpp @@ -0,0 +1,359 @@ +/** + * @file lluuidhashmap_tut.cpp + * @author Adroit + * @date 2007-02 + * @brief Test cases for LLUUIDHashMap + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "linden_common.h" +#include "lluuidhashmap.h" +#include "llsdserialize.h" + +namespace tut +{ + class UUIDTableEntry + { + public: + UUIDTableEntry() + { + mID.setNull(); + mValue = 0; + } + + UUIDTableEntry(const LLUUID& id, U32 value) + { + mID = id; + mValue = value; + } + + ~UUIDTableEntry(){}; + + static BOOL uuidEq(const LLUUID &uuid, const UUIDTableEntry &id_pair) + { + if (uuid == id_pair.mID) + { + return TRUE; + } + return FALSE; + } + + const LLUUID& getID() { return mID; } + const U32& getValue() { return mValue; } + + protected: + LLUUID mID; + U32 mValue; + }; + + struct hashmap_test + { + }; + + typedef test_group<hashmap_test> hash_index_t; + typedef hash_index_t::object hash_index_object_t; + tut::hash_index_t tut_hash_index("hashmap_test"); + + // stress test + template<> template<> + void hash_index_object_t::test<1>() + { + LLUUIDHashMap<UUIDTableEntry, 32> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + const int numElementsToCheck = 32*256*32; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + UUIDTableEntry entryToCheck = hashTable.get(idToCheck); + ensure("set/get did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i); + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + if (i % 2 != 0) + { + hashTable.remove(idToCheck); + } + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + ensure("remove or check did not work", (i % 2 == 0 && hashTable.check(idToCheck)) || (i % 2 != 0 && !hashTable.check(idToCheck))); + } + } + + // test removing all but one element. + template<> template<> + void hash_index_object_t::test<2>() + { + LLUUIDHashMap<UUIDTableEntry, 2> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + const int numElementsToCheck = 5; + std::vector<LLUUID> idList(numElementsToCheck*10); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + ensure("getLength failed", hashTable.getLength() == numElementsToCheck); + + // remove all but the last element + for (i = 0; i < numElementsToCheck-1; i++) + { + LLUUID idToCheck = idList[i]; + hashTable.remove(idToCheck); + } + + // there should only be one element left now. + ensure("getLength failed", hashTable.getLength() == 1); + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + if (i != numElementsToCheck - 1) + { + ensure("remove did not work", hashTable.check(idToCheck) == FALSE); + } + else + { + UUIDTableEntry entryToCheck = hashTable.get(idToCheck); + ensure("remove did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i); + } + } + } + + // test overriding of value already set. + template<> template<> + void hash_index_object_t::test<3>() + { + LLUUIDHashMap<UUIDTableEntry, 5> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + const int numElementsToCheck = 10; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id = idList[i]; + // set new entry with value = i+numElementsToCheck + UUIDTableEntry entry(id, i+numElementsToCheck); + hashTable.set(id, entry); + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + UUIDTableEntry entryToCheck = hashTable.get(idToCheck); + ensure("set/get did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)(i+numElementsToCheck)); + } + } + + // test removeAll() + template<> template<> + void hash_index_object_t::test<4>() + { + LLUUIDHashMap<UUIDTableEntry, 5> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + const int numElementsToCheck = 10; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + hashTable.removeAll(); + ensure("removeAll failed", hashTable.getLength() == 0); + } + + + // test sparse map - force it by creating 256 entries that fall into 256 different nodes + template<> template<> + void hash_index_object_t::test<5>() + { + LLUUIDHashMap<UUIDTableEntry, 2> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + const int numElementsToCheck = 256; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + // LLUUIDHashMap uses mData[0] to pick the bucket + // overwrite mData[0] so that it ranges from 0 to 255 + id.mData[0] = i; + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + UUIDTableEntry entryToCheck = hashTable.get(idToCheck); + ensure("set/get did not work for sparse map", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i); + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + if (i % 2 != 0) + { + hashTable.remove(idToCheck); + } + } + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID idToCheck = idList[i]; + ensure("remove or check did not work for sparse map", (i % 2 == 0 && hashTable.check(idToCheck)) || (i % 2 != 0 && !hashTable.check(idToCheck))); + } + } + + // iterator + template<> template<> + void hash_index_object_t::test<6>() + { + LLUUIDHashMap<UUIDTableEntry, 2> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + LLUUIDHashMapIter<UUIDTableEntry, 2> hashIter(&hashTable); + const int numElementsToCheck = 256; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + // LLUUIDHashMap uses mData[0] to pick the bucket + // overwrite mData[0] so that it ranges from 0 to 255 + // to create a sparse map + id.mData[0] = i; + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + } + + hashIter.first(); + int numElementsIterated = 0; + while(!hashIter.done()) + { + numElementsIterated++; + UUIDTableEntry tableEntry = *hashIter; + LLUUID id = tableEntry.getID(); + hashIter.next(); + ensure("Iteration failed for sparse map", tableEntry.getValue() < (size_t)numElementsToCheck && idList[tableEntry.getValue()] == tableEntry.getID()); + } + + ensure("iteration count failed", numElementsIterated == numElementsToCheck); + } + + // remove after middle of iteration + template<> template<> + void hash_index_object_t::test<7>() + { + LLUUIDHashMap<UUIDTableEntry, 2> hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry()); + LLUUIDHashMapIter<UUIDTableEntry, 2> hashIter(&hashTable); + const int numElementsToCheck = 256; + std::vector<LLUUID> idList(numElementsToCheck); + int i; + + LLUUID uuidtoSearch; + for (i = 0; i < numElementsToCheck; i++) + { + LLUUID id; + id.generate(); + // LLUUIDHashMap uses mData[0] to pick the bucket + // overwrite mData[0] so that it ranges from 0 to 255 + // to create a sparse map + id.mData[0] = i; + UUIDTableEntry entry(id, i); + hashTable.set(id, entry); + idList[i] = id; + + // pick uuid somewhere in the middle + if (i == 5) + { + uuidtoSearch = id; + } + } + + hashIter.first(); + int numElementsIterated = 0; + while(!hashIter.done()) + { + numElementsIterated++; + UUIDTableEntry tableEntry = *hashIter; + LLUUID id = tableEntry.getID(); + if (uuidtoSearch == id) + { + break; + } + hashIter.next(); + } + + // current iterator implementation will not allow any remove operations + // until ALL elements have been iterated over. this seems to be + // an unnecessary restriction. Iterator should have a method to + // reset() its state so that further operations (inckuding remove) + // can be performed on the HashMap without having to iterate thru + // all the remaining nodes. + +// hashIter.reset(); +// hashTable.remove(uuidtoSearch); +// ensure("remove after iteration reset failed", hashTable.check(uuidtoSearch) == FALSE); + } +} diff --git a/linden/indra/test/llxorcipher_tut.cpp b/linden/indra/test/llxorcipher_tut.cpp new file mode 100644 index 0000000..07b33b6 --- /dev/null +++ b/linden/indra/test/llxorcipher_tut.cpp @@ -0,0 +1,133 @@ +/** + * @file llxorcipher_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief llxorcipher, llnullcipher test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "llxorcipher.h" +#include "llnullcipher.h" + +namespace tut +{ + struct cipher + { + }; + typedef test_group<cipher> cipher_t; + typedef cipher_t::object cipher_object_t; + tut::cipher_t tut_cipher("cipher"); + + //encrypt->decrypt + template<> template<> + void cipher_object_t::test<1>() + { + const U32 len = 3; + const U8 pad[] = "abc"; + const char str[] = "SecondLife"; + const S32 str_len = sizeof(str); + U8 encrypted[str_len]; + U8 decrypted[str_len]; + LLXORCipher xorCipher(pad, len); + LLXORCipher xorCipher1(pad, len); + + U32 length = xorCipher.requiredEncryptionSpace(50); + ensure("requiredEncryptionSpace() function failed", (length == 50)); + + U32 lenEncrypted = xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len); + ensure("Encryption failed", (lenEncrypted == str_len)); + U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len); + ensure("Decryption failed", (lenDecrypted == str_len)); + ensure_memory_matches("LLXORCipher Encrypt/Decrypt failed", str, str_len, decrypted, lenDecrypted); + } + + // operator= + template<> template<> + void cipher_object_t::test<2>() + { + const U8 pad[] = "ABCDEFGHIJKLMNOPQ"; // pad len longer than data to be ciphered + const U32 pad_len = sizeof(pad); + const U8 pad1[] = "SecondLife"; + const U32 pad_len1 = sizeof(pad1); + const char str[] = "To Be Ciphered"; + const S32 str_len = sizeof(str); + U8 encrypted[str_len]; + U8 decrypted[str_len]; + + LLXORCipher xorCipher(pad, pad_len); + LLXORCipher xorCipher1(pad1, pad_len1); + + xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len); + // make xorCipher1 same as xorCipher..so that xorCipher1 can decrypt what was + // encrypted using xorCipher + xorCipher1 = xorCipher; + U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len); + ensure_memory_matches("LLXORCipher operator= failed", str, str_len, decrypted, lenDecrypted); + } + + //in place encrypt->decrypt + template<> template<> + void cipher_object_t::test<3>() + { + U32 padNum = 0x12349087; + const U8* pad = (U8*) &padNum; + const U32 pad_len = sizeof(U32); + char str[] = "To Be Ciphered a long string.........!!!."; + char str1[] = "To Be Ciphered a long string.........!!!."; // same as str + const S32 str_len = sizeof(str); + + LLXORCipher xorCipher(pad, pad_len); + LLXORCipher xorCipher1(pad, pad_len); + xorCipher.encrypt((U8 *) str, str_len); + // it should not be the same as original data! + ensure("LLXORCipher: In Place encrypt failed", memcmp(str, str1, str_len) != 0); + xorCipher1.decrypt((U8 *) str, str_len); + // it should not be the same as original data! + ensure_memory_matches("LLXORCipher: In Place decrypt failed", str, str_len, str1, str_len); + } + + //LLNullCipher encrypt->decrypt + template<> template<> + void cipher_object_t::test<4>() + { + const char str[] = "SecondLife"; + const S32 str_len = sizeof(str); + U8 encrypted[str_len]; + U8 decrypted[str_len]; + LLNullCipher nullCipher; + LLNullCipher nullCipher1; + + U32 length = nullCipher.requiredEncryptionSpace(50); + ensure("LLNullCipher::requiredEncryptionSpace() function failed", (length == 50)); + + U32 len1 = nullCipher.encrypt((U8 *) str, str_len, encrypted, str_len); + ensure_memory_matches("LLNullCipher - Source transformed during encryption.", encrypted, len1, str, str_len); + + U32 len2 = nullCipher1.decrypt(encrypted, str_len, decrypted, str_len); + ensure_memory_matches("LLNullCipher - Decryption failed", decrypted, len2, str, str_len); + } +} diff --git a/linden/indra/test/m3math_tut.cpp b/linden/indra/test/m3math_tut.cpp index 62ad365..b693193 100644 --- a/linden/indra/test/m3math_tut.cpp +++ b/linden/indra/test/m3math_tut.cpp @@ -1,7 +1,7 @@ /** * @file m3math_tut.cpp * @author Adroit - * @date March 2007 + * @date 2007-03 * @brief Test cases of m3math.h * * Copyright (c) 2007-2007, Linden Research, Inc. diff --git a/linden/indra/test/message_tut.cpp b/linden/indra/test/message_tut.cpp new file mode 100644 index 0000000..366c2b4 --- /dev/null +++ b/linden/indra/test/message_tut.cpp @@ -0,0 +1,97 @@ +/** + * @file lldatapacker_tut.cpp + * @date 2007-04 + * @brief LLDataPacker test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" + +#include "llapr.h" +#include "llversion.h" +#include "message.h" +#include "message_prehash.h" + +namespace +{ + struct Response : public LLHTTPNode::Response + { + virtual void result(const LLSD&) {} + virtual void status(S32 code, const std::string& message) + { + mStatus = code; + } + S32 mStatus; + }; +} + +namespace tut +{ + struct LLMessageSystemTestData + { + LLMessageSystemTestData() + { + static bool init = false; + if(! init) + { + ll_init_apr(); + init_prehash_data(); + init = true; + } + + // currently test disconnected message system + start_messaging_system("notafile", 13035, + LL_VERSION_MAJOR, + LL_VERSION_MINOR, + LL_VERSION_PATCH, + FALSE, + "notasharedsecret"); + } + + ~LLMessageSystemTestData() + { + // not end_messaging_system() + delete gMessageSystem; + gMessageSystem = NULL; + } + }; + + typedef test_group<LLMessageSystemTestData> LLMessageSystemTestGroup; + typedef LLMessageSystemTestGroup::object LLMessageSystemTestObject; + LLMessageSystemTestGroup messageTestGroup("LLMessageSystem"); + + template<> template<> + void LLMessageSystemTestObject::test<1>() + // dispatch unknown message + { + const char* name = "notamessasge"; + const LLSD message; + const LLPointer<Response> response = new Response(); + gMessageSystem->dispatch(name, message, response); + ensure_equals(response->mStatus, 404); + } +} + diff --git a/linden/indra/test/test.cpp b/linden/indra/test/test.cpp index 8f6f672..1c03768 100644 --- a/linden/indra/test/test.cpp +++ b/linden/indra/test/test.cpp @@ -64,7 +64,8 @@ public: mTotalTests(0), mPassedTests(0), mFailedTests(0), - mSkippedTests(0) + mSkippedTests(0), + mSkipedFailTests(0) { } @@ -86,7 +87,7 @@ public: break; case tut::test_result::fail: ++mFailedTests; - out << "fail '" << tr.message << "'"; + out << "fail"; break; case tut::test_result::ex: ++mFailedTests; @@ -104,12 +105,20 @@ public: ++mSkippedTests; out << "skipped"; break; + case tut::test_result::skip_fail: + ++mSkipedFailTests; + out << "skipped known failure"; + break; default: ++mFailedTests; out << "unknown"; } if(mVerboseMode || (tr.result != tut::test_result::ok)) { + if(!tr.message.empty()) + { + out << ": '" << tr.message << "'"; + } std::cout << out.str() << std::endl; } } @@ -118,11 +127,17 @@ public: { std::cout << std::endl; std::cout << "Total Tests: " << mTotalTests << std::endl; - std::cout << "Passed Tests : " << mPassedTests << std::endl; + std::cout << "Passed Tests: " << mPassedTests << std::endl; if (mSkippedTests > 0) { - std::cout << "Skipped Tests : " << mSkippedTests << std::endl; + std::cout << "Skipped Tests: " << mSkippedTests << std::endl; + } + + if (mSkipedFailTests > 0) + { + std::cout << "Skipped known failures: " << mSkipedFailTests + << std::endl; } if(mFailedTests > 0) @@ -137,10 +152,11 @@ public: protected: bool mVerboseMode; - S32 mTotalTests; - S32 mPassedTests; - S32 mFailedTests; - S32 mSkippedTests; + int mTotalTests; + int mPassedTests; + int mFailedTests; + int mSkippedTests; + int mSkipedFailTests; }; static const apr_getopt_option_t TEST_CL_OPTIONS[] = diff --git a/linden/indra/test/test.vcproj b/linden/indra/test/test.vcproj index cb9c7af..1a55b8c 100644 --- a/linden/indra/test/test.vcproj +++ b/linden/indra/test/test.vcproj @@ -20,7 +20,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\llcommon;..\llmessage;..\llmath;..\..\libraries\include;..\llinventory;"..\..\libraries\i686-win32\include";..\llxml;..\lldatabase" + AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;"..\..\libraries\i686-win32\include";..\..\libraries\include" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LL_WINDOWS;LL_DEBUG" MinimalRebuild="FALSE" BasicRuntimeChecks="3" @@ -74,7 +74,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\llcommon;..\llmessage;..\llmath;..\..\libraries\include;..\llinventory;"..\..\libraries\i686-win32\include";..\llxml;..\lldatabase" + AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;"..\..\libraries\i686-win32\include";..\..\libraries\include" PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1" MinimalRebuild="FALSE" BasicRuntimeChecks="3" @@ -130,7 +130,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\llcommon;..\llmessage;..\llmath;..\..\libraries\include;..\llinventory;"..\..\libraries\i686-win32\include";..\llxml;..\lldatabase" + AdditionalIncludeDirectories="..\llcharacter;..\llcommon;..\lldatabase;..\llinventory;..\llmath;..\llmessage;..\llxml;"..\..\libraries\i686-win32\include";..\..\libraries\include" PreprocessorDefinitions="WIN32;__WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;APR_DECLARE_STATIC;LL_HTTPD=1" MinimalRebuild="FALSE" BasicRuntimeChecks="3" @@ -193,23 +193,47 @@ <File RelativePath=".\io.cpp"> </File> + <File + RelativePath=".\llbuffer_tut.cpp"> + </File> <File + RelativePath=".\lldate_tut.cpp"> + </File> + <File RelativePath=".\llerror_tut.cpp"> </File> <File + RelativePath=".\llhost_tut.cpp"> + </File> + <File RelativePath=".\llhttpclient_tut.cpp"> </File> <File + RelativePath=".\lljoint_tut.cpp"> + </File> + <File RelativePath=".\llmime_tut.cpp"> </File> <File + RelativePath=".\llnamevalue_tut.cpp"> + </File> + <File + RelativePath=".\llpermissions_tut.cpp"> + </File> + <File RelativePath=".\llpipeutil.cpp"> </File> <File + RelativePath=".\llquaternion_tut.cpp"> + </File> + <File RelativePath=".\llrandom_tut.cpp"> </File> <File + RelativePath=".\llsaleinfo_tut.cpp"> + </File> + <File RelativePath=".\llsd_new_tut.cpp"> </File> <File @@ -225,9 +249,18 @@ RelativePath=".\llsdtraits.h"> </File> <File + RelativePath=".\llsdutil_tut.cpp"> + </File> + <File RelativePath=".\llservicebuilder_tut.cpp"> </File> <File + RelativePath=".\llstreamtools_tut.cpp"> + </File> + <File + RelativePath=".\lltemplatemessagebuilder_tut.cpp"> + </File> + <File RelativePath=".\lltiming_tut.cpp"> </File> <File @@ -240,6 +273,9 @@ RelativePath=".\lluserrelations_tut.cpp"> </File> <File + RelativePath=".\lluuidhashmap_tut.cpp"> + </File> + <File RelativePath=".\math.cpp"> </File> <File @@ -248,6 +284,30 @@ <File RelativePath=".\test.cpp"> </File> + <File + RelativePath=".\v2math_tut.cpp"> + </File> + <File + RelativePath=".\v3color_tut.cpp"> + </File> + <File + RelativePath=".\v3dmath_tut.cpp"> + </File> + <File + RelativePath=".\v3math_tut.cpp"> + </File> + <File + RelativePath=".\v4color_tut.cpp"> + </File> + <File + RelativePath=".\v4coloru_tut.cpp"> + </File> + <File + RelativePath=".\v4math_tut.cpp"> + </File> + <File + RelativePath=".\xform_tut.cpp"> + </File> </Filter> <Filter Name="Header Files" diff --git a/linden/indra/test/v2math_tut.cpp b/linden/indra/test/v2math_tut.cpp index e94a19b..0765989 100644 --- a/linden/indra/test/v2math_tut.cpp +++ b/linden/indra/test/v2math_tut.cpp @@ -1,11 +1,12 @@ /** * @file v2math_tut.cpp * @author Adroit - * @date February 2007 + * @date 2007-02 * @brief v2math test cases. * * Copyright (c) 2007-2007, Linden Research, Inc. * + * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement @@ -94,7 +95,9 @@ namespace tut { F32 x =-2.0f, y = -3.0f ; LLVector2 vec2(x,y); - ensure("abs():Fail ", TRUE == vec2.abs() && is_approx_equal(x, 2.f) && is_approx_equal(y, 3.f)); + ensure_equals("abs():Fail", vec2.abs(), TRUE); + ensure("abs() x", is_approx_equal(vec2.mV[VX], 2.f)); + ensure("abs() y", is_approx_equal(vec2.mV[VY], 3.f)); ensure("isNull():Fail ", FALSE == vec2.isNull()); //Returns TRUE if vector has a _very_small_ length @@ -258,6 +261,9 @@ namespace tut template<> template<> void v2math_object::test<13>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif F32 x1 = 1.f, y1 = 2.f,x2 = 2.332f, y2 = -1.23f; F32 val1, val2; LLVector2 vec2(x1, y1), vec3(x2, y2); @@ -425,6 +431,10 @@ namespace tut template<> template<> void v2math_object::test<23>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif + F32 x1 =1.f, y1 = 2.f; F32 val1, val2; LLVector2 vec2(x1, y1); diff --git a/linden/indra/test/v3color_tut.cpp b/linden/indra/test/v3color_tut.cpp new file mode 100644 index 0000000..411d196 --- /dev/null +++ b/linden/indra/test/v3color_tut.cpp @@ -0,0 +1,314 @@ +/** + * @file v3color_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief v3color test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "v3color.h" + + +namespace tut +{ + struct v3color_data + { + }; + typedef test_group<v3color_data> v3color_test; + typedef v3color_test::object v3color_object; + tut::v3color_test v3color_testcase("v3color"); + + template<> template<> + void v3color_object::test<1>() + { + LLColor3 llcolor3; + ensure("1:LLColor3:Fail to initialize ", (0.0f == llcolor3.mV[0]) && (0.0f == llcolor3.mV[1]) && (0.0f == llcolor3.mV[2])); + F32 r = 2.0f, g = 3.2f, b = 1.f; + F32 v1,v2,v3; + LLColor3 llcolor3a(r,g,b); + ensure("2:LLColor3:Fail to initialize " ,(2.0f == llcolor3a.mV[0]) && (3.2f == llcolor3a.mV[1]) && (1.f == llcolor3a.mV[2])); + + const F32 vec[3] = {2.0f, 3.2f,1.f}; + LLColor3 llcolor3b(vec); + ensure("3:LLColor3:Fail to initialize " ,(2.0f == llcolor3b.mV[0]) && (3.2f == llcolor3b.mV[1]) && (1.f == llcolor3b.mV[2])); + char* str = "561122"; + LLColor3 llcolor3c(str); + v1 = (F32)86.0f/255.0f; // 0x56 = 86 + v2 = (F32)17.0f/255.0f; // 0x11 = 17 + v3 = (F32)34.0f/255.f; // 0x22 = 34 + ensure("4:LLColor3:Fail to initialize " ,(v1 == llcolor3c.mV[0]) && (v2 == llcolor3c.mV[1]) && (v3 == llcolor3c.mV[2])); + } + + template<> template<> + void v3color_object::test<2>() + { + LLColor3 llcolor3; + llcolor3.setToBlack(); + ensure("setToBlack:Fail to set black ", ((llcolor3.mV[0] == 0.f) && (llcolor3.mV[1] == 0.f) && (llcolor3.mV[2] == 0.f))); + llcolor3.setToWhite(); + ensure("setToWhite:Fail to set white ", ((llcolor3.mV[0] == 1.f) && (llcolor3.mV[1] == 1.f) && (llcolor3.mV[2] == 1.f))); + } + + template<> template<> + void v3color_object::test<3>() + { + F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; + LLColor3 llcolor3, llcolor3a; + llcolor3.setVec(r,g,b); + ensure("1:setVec(r,g,b) Fail ",((r == llcolor3.mV[0]) && (g == llcolor3.mV[1]) && (b == llcolor3.mV[2]))); + llcolor3a.setVec(llcolor3); + ensure_equals("2:setVec(LLColor3) Fail ", llcolor3,llcolor3a); + F32 vec[3] = {1.2324f, 2.45634f, .234563f}; + llcolor3.setToBlack(); + llcolor3.setVec(vec); + ensure("3:setVec(F32*) Fail ",((vec[0] == llcolor3.mV[0]) && (vec[1] == llcolor3.mV[1]) && (vec[2] == llcolor3.mV[2]))); + } + + template<> template<> + void v3color_object::test<4>() + { + F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; + LLColor3 llcolor3(r,g,b); + ensure("magVecSquared:Fail ", is_approx_equal(llcolor3.magVecSquared(), (r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor3.magVec(), fsqrtf(r*r + g*g + b*b))); + } + + template<> template<> + void v3color_object::test<5>() + { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif + F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; + F32 val1, val2,val3; + LLColor3 llcolor3(r,g,b); + F32 vecMag = llcolor3.normVec(); + F32 mag = fsqrtf(r*r + g*g + b*b); + F32 oomag = 1.f / mag; + val1 = r * oomag; + val2 = g * oomag; + val3 = b * oomag; + ensure("1:normVec failed ", (val1 == llcolor3.mV[0] && val2 == llcolor3.mV[1] && val3 == llcolor3.mV[2] && vecMag == mag)); + r = .000000000f, g = 0.f, b = 0.0f; + llcolor3.setVec(r,g,b); + vecMag = llcolor3.normVec(); + ensure("2:normVec failed should be 0. ", (0. == llcolor3.mV[0] && 0. == llcolor3.mV[1] && 0. == llcolor3.mV[2] && vecMag == 0.)); + } + + template<> template<> + void v3color_object::test<6>() + { + F32 r = 2.3436212f, g = -1231.f, b = .7849321232f; + std::ostringstream stream1, stream2; + LLColor3 llcolor3(r,g,b),llcolor3a; + stream1 << llcolor3; + llcolor3a.setVec(r,g,b); + stream2 << llcolor3a; + ensure("operator << failed ", (stream1.str() == stream2.str())); + } + + template<> template<> + void v3color_object::test<7>() + { + F32 r = 2.3436212f, g = -1231.f, b = .7849321232f; + LLColor3 llcolor3(r,g,b),llcolor3a; + llcolor3a = llcolor3; + ensure("operator == failed ", (llcolor3a == llcolor3)); + } + + template<> template<> + void v3color_object::test<8>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b; + llcolor3b = llcolor3 + llcolor3a ; + ensure("1:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2])); + r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f; + llcolor3.setVec(r1,g1,b1); + llcolor3a.setVec(r2,g2,b2); + llcolor3b = llcolor3 + llcolor3a; + ensure("2:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2])); + } + + template<> template<> + void v3color_object::test<9>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b; + llcolor3b = llcolor3 - llcolor3a ; + ensure("1:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2])); + r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f; + llcolor3.setVec(r1,g1,b1); + llcolor3a.setVec(r2,g2,b2); + llcolor3b = llcolor3 - llcolor3a; + ensure("2:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2])); + } + + template<> template<> + void v3color_object::test<10>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b; + llcolor3b = llcolor3 * llcolor3a; + ensure("1:operator* failed",is_approx_equal(r1*r2 ,llcolor3b.mV[0]) && is_approx_equal(g1*g2,llcolor3b.mV[1])&& is_approx_equal(b1*b2,llcolor3b.mV[2])); + llcolor3a.setToBlack(); + F32 mulVal = 4.332f; + llcolor3a = llcolor3 * mulVal; + ensure("2:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2])); + llcolor3a.setToBlack(); + llcolor3a = mulVal * llcolor3; + ensure("3:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2])); + } + + template<> template<> + void v3color_object::test<11>() + { + F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; + LLColor3 llcolor3(r,g,b),llcolor3a; + llcolor3a = -llcolor3; + ensure("operator- failed ", (-llcolor3a == llcolor3)); + } + + template<> template<> + void v3color_object::test<12>() + { + F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; + LLColor3 llcolor3(r,g,b),llcolor3a(r,g,b); + ensure_equals("1:operator== failed",llcolor3a,llcolor3); + r = 13.3436212f, g = -11.f, b = .7849321232f; + llcolor3.setVec(r,g,b); + llcolor3a.setVec(r,g,b); + ensure_equals("2:operator== failed",llcolor3a,llcolor3); + } + + template<> template<> + void v3color_object::test<13>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + ensure("1:operator!= failed",(llcolor3 != llcolor3a)); + llcolor3.setToBlack(); + llcolor3a.setVec(llcolor3); + ensure("2:operator!= failed", ( FALSE == (llcolor3a != llcolor3))); + } + + template<> template<> + void v3color_object::test<14>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + llcolor3a += llcolor3; + ensure("1:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2])); + llcolor3.setVec(r1,g1,b1); + llcolor3a.setVec(r2,g2,b2); + llcolor3a += llcolor3; + ensure("2:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2])); + } + + template<> template<> + void v3color_object::test<15>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + llcolor3a -= llcolor3; + ensure("1:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0])); + ensure("2:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1])); + ensure("3:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2])); + llcolor3.setVec(r1,g1,b1); + llcolor3a.setVec(r2,g2,b2); + llcolor3a -= llcolor3; + ensure("4:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0])); + ensure("5:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1])); + ensure("6:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2])); + } + + template<> template<> + void v3color_object::test<16>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + llcolor3a *= llcolor3; + ensure("1:operator*= failed",is_approx_equal(r1*r2 ,llcolor3a.mV[0]) && is_approx_equal(g1*g2,llcolor3a.mV[1])&& is_approx_equal(b1*b2,llcolor3a.mV[2])); + F32 mulVal = 4.332f; + llcolor3 *=mulVal; + ensure("2:operator*= failed",is_approx_equal(r1*mulVal ,llcolor3.mV[0]) && is_approx_equal(g1*mulVal,llcolor3.mV[1])&& is_approx_equal(b1*mulVal,llcolor3.mV[2])); + } + + template<> template<> + void v3color_object::test<17>() + { + F32 r = 2.3436212f, g = -1231.f, b = .7849321232f; + LLColor3 llcolor3(r,g,b); + llcolor3.clamp(); + ensure("1:clamp:Fail to clamp " ,(1.0f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (b == llcolor3.mV[2])); + r = -2.3436212f, g = -1231.f, b = 67.7849321232f; + llcolor3.setVec(r,g,b); + llcolor3.clamp(); + ensure("2:clamp:Fail to clamp " ,(0.f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (1.f == llcolor3.mV[2])); + } + + template<> template<> + void v3color_object::test<18>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + F32 val = 2.3f,val1,val2,val3; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + val1 = r1 + (r2 - r1)* val; + val2 = g1 + (g2 - g1)* val; + val3 = b1 + (b2 - b1)* val; + LLColor3 llcolor3b = lerp(llcolor3,llcolor3a,val); + ensure("lerp failed ", ((val1 ==llcolor3b.mV[0])&& (val2 ==llcolor3b.mV[1]) && (val3 ==llcolor3b.mV[2]))); + } + + template<> template<> + void v3color_object::test<19>() + { + F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; + LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); + F32 val = distVec(llcolor3,llcolor3a); + ensure("distVec failed ", is_approx_equal(fsqrtf((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val)); + + F32 val1 = distVec_squared(llcolor3,llcolor3a); + ensure("distVec_squared failed ", is_approx_equal(((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val1)); + } + + template<> template<> + void v3color_object::test<20>() + { + F32 r1 = 1.02223f, g1 = 22222.212f, b1 = 122222.00002f; + LLColor3 llcolor31(r1,g1,b1); + + LLSD sd = llcolor31.getValue(); + LLColor3 llcolor32; + llcolor32.setValue(sd); + ensure_equals("LLColor3::setValue/getValue failed", llcolor31, llcolor32); + + LLColor3 llcolor33(sd); + ensure_equals("LLColor3(LLSD) failed", llcolor31, llcolor33); + } +} diff --git a/linden/indra/test/v3dmath_tut.cpp b/linden/indra/test/v3dmath_tut.cpp index 88ade71..2f5ea8e 100644 --- a/linden/indra/test/v3dmath_tut.cpp +++ b/linden/indra/test/v3dmath_tut.cpp @@ -1,7 +1,7 @@ /** * @file v3dmath_tut.cpp * @author Adroit - * @date March 2007 + * @date 2007-03 * @brief v3dmath test cases. * * Copyright (c) 2007-2007, Linden Research, Inc. @@ -212,21 +212,70 @@ namespace tut F64 x2 = 1.2, y2 = 2.5, z2 = 1.; LLVector3d vec3D(x1,y1,z1),vec3Da(x2,y2,z2); F64 res = vec3D * vec3Da; - ensure("1:operator* failed",(res == (x1*x2 + y1*y2 + z1*z2))); + ensure_approximately_equals( + "1:operator* failed", + res, + (x1*x2 + y1*y2 + z1*z2), + 8); vec3Da.clearVec(); F64 mulVal = 4.2; vec3Da = vec3D * mulVal; - ensure("2:operator* failed",(x1*mulVal == vec3Da.mdV[VX]) && (y1*mulVal == vec3Da.mdV[VY])&& (z1*mulVal == vec3Da.mdV[VZ])); + ensure_approximately_equals( + "2a:operator* failed", + vec3Da.mdV[VX], + x1*mulVal, + 8); + ensure_approximately_equals( + "2b:operator* failed", + vec3Da.mdV[VY], + y1*mulVal, + 8); + ensure_approximately_equals( + "2c:operator* failed", + vec3Da.mdV[VZ], + z1*mulVal, + 8); vec3Da.clearVec(); vec3Da = mulVal * vec3D; - ensure("3:operator* failed",(x1*mulVal == vec3Da.mdV[VX]) && (y1*mulVal == vec3Da.mdV[VY])&& (z1*mulVal == vec3Da.mdV[VZ])); + ensure_approximately_equals( + "3a:operator* failed", + vec3Da.mdV[VX], + x1*mulVal, + 8); + ensure_approximately_equals( + "3b:operator* failed", + vec3Da.mdV[VY], + y1*mulVal, + 8); + ensure_approximately_equals( + "3c:operator* failed", + vec3Da.mdV[VZ], + z1*mulVal, + 8); vec3D *= mulVal; - ensure("4:operator*= failed",(x1*mulVal == vec3D.mdV[VX]) && (y1*mulVal == vec3D.mdV[VY])&& (z1*mulVal == vec3D.mdV[VZ])); + ensure_approximately_equals( + "4a:operator*= failed", + vec3D.mdV[VX], + x1*mulVal, + 8); + ensure_approximately_equals( + "4b:operator*= failed", + vec3D.mdV[VY], + y1*mulVal, + 8); + ensure_approximately_equals( + "4c:operator*= failed", + vec3D.mdV[VZ], + z1*mulVal, + 8); } template<> template<> void v3dmath_object::test<12>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif F64 x1 = 1., y1 = 2., z1 = -1.1; F64 x2 = 1.2, y2 = 2.5, z2 = 1.; F64 val1, val2, val3; @@ -247,15 +296,57 @@ namespace tut F64 t = 1.f / div; LLVector3d vec3D(x1,y1,z1), vec3Da; vec3Da = vec3D/div; - ensure("1:operator/ failed",(x1*t == vec3Da.mdV[VX]) && (y1*t == vec3Da.mdV[VY])&& (z1*t == vec3Da.mdV[VZ])); - x1 = 1.23, y1 = 4., z1 = -2.32; - vec3D.clearVec(); - vec3Da.clearVec(); - vec3D.setVec(x1,y1,z1); - vec3Da = vec3D/div; - ensure("2:operator/ failed",(x1*t == vec3Da.mdV[VX]) && (y1*t == vec3Da.mdV[VY])&& (z1*t == vec3Da.mdV[VZ])); - vec3D /= div; - ensure("3:operator/= failed",(x1*t == vec3D.mdV[VX]) && (y1*t == vec3D.mdV[VY])&& (z1*t == vec3D.mdV[VZ])); + ensure_approximately_equals( + "1a:operator/ failed", + vec3Da.mdV[VX], + x1*t, + 8); + ensure_approximately_equals( + "1b:operator/ failed", + vec3Da.mdV[VY], + y1*t, + 8); + ensure_approximately_equals( + "1c:operator/ failed", + vec3Da.mdV[VZ], + z1*t, + 8); + x1 = 1.23, y1 = 4., z1 = -2.32; + vec3D.clearVec(); + vec3Da.clearVec(); + vec3D.setVec(x1,y1,z1); + vec3Da = vec3D/div; + ensure_approximately_equals( + "2a:operator/ failed", + vec3Da.mdV[VX], + x1*t, + 8); + ensure_approximately_equals( + "2b:operator/ failed", + vec3Da.mdV[VY], + y1*t, + 8); + ensure_approximately_equals( + "2c:operator/ failed", + vec3Da.mdV[VZ], + z1*t, + 8); + vec3D /= div; + ensure_approximately_equals( + "3a:operator/= failed", + vec3D.mdV[VX], + x1*t, + 8); + ensure_approximately_equals( + "3b:operator/= failed", + vec3D.mdV[VY], + y1*t, + 8); + ensure_approximately_equals( + "3c:operator/= failed", + vec3D.mdV[VZ], + z1*t, + 8); } template<> template<> @@ -324,18 +415,48 @@ namespace tut LLVector3d vec3D(x,y,z); F64 mag = vec3D.normVec(); mag = 1.f/ mag; - ensure("1:normVec: Fail ", (x* mag == vec3D.mdV[VX]) && (y* mag == vec3D.mdV[VY])&& (z* mag == vec3D.mdV[VZ])); + ensure_approximately_equals( + "1a:normVec: Fail ", + vec3D.mdV[VX], + x * mag, + 8); + ensure_approximately_equals( + "1b:normVec: Fail ", + vec3D.mdV[VY], + y * mag, + 8); + ensure_approximately_equals( + "1c:normVec: Fail ", + vec3D.mdV[VZ], + z * mag, + 8); x = 0.000000001, y = 0.000000001, z = 0.000000001; vec3D.clearVec(); vec3D.setVec(x,y,z); mag = vec3D.normVec(); - ensure("2:normVec: Fail ", (x* mag == vec3D.mdV[VX]) && (y* mag == vec3D.mdV[VY])&& (z* mag == vec3D.mdV[VZ])); + ensure_approximately_equals( + "2a:normVec: Fail ", + vec3D.mdV[VX], + x * mag, + 8); + ensure_approximately_equals( + "2b:normVec: Fail ", + vec3D.mdV[VY], + y * mag, + 8); + ensure_approximately_equals( + "2c:normVec: Fail ", + vec3D.mdV[VZ], + z * mag, + 8); } template<> template<> void v3dmath_object::test<20>() { - F64 x1 = 1111.232222, y1 = 2222222222.22, z1 = 422222222222; + F64 x1 = 1111.232222; + F64 y1 = 2222222222.22; + F64 z1 = 422222222222.0; char buf[] = "1111.232222 2222222222.22 422222222222"; LLVector3d vec3Da, vec3Db(x1,y1,z1); LLVector3d::parseVector3d(buf, &vec3Da); @@ -399,4 +520,4 @@ namespace tut angle = acos(angle); ensure("2:angle_between: Fail ", (angle == angle2)); } -} \ No newline at end of file +} diff --git a/linden/indra/test/v3math_tut.cpp b/linden/indra/test/v3math_tut.cpp index 36eaca9..4f4e7e0 100644 --- a/linden/indra/test/v3math_tut.cpp +++ b/linden/indra/test/v3math_tut.cpp @@ -1,11 +1,12 @@ /** * @file v3math_tut.cpp * @author Adroit - * @date February 2007 + * @date 2007-02 * @brief v3math test cases. * * Copyright (c) 2007-2007, Linden Research, Inc. * + * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement @@ -389,6 +390,9 @@ namespace tut template<> template<> void v3math_object::test<22>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; F32 val1,val2,val3; LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); @@ -523,6 +527,9 @@ namespace tut template<> template<> void v3math_object::test<32>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif F32 x =12.3524f, y = -342.f,z = 4.126341f; LLVector3 vec3(x,y,z); F32 mag = vec3.normVec(); @@ -549,6 +556,9 @@ namespace tut template<> template<> void v3math_object::test<34>() { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif F32 x = 10.f, y = 20.f, z = -15.f; F32 x1, y1, z1; F32 lowerxy = 0.f, upperxy = 1.0f, lowerz = -1.0f, upperz = 1.f; @@ -565,4 +575,4 @@ namespace tut z1 = U8_to_F32(F32_to_U8(z, lowerz, upperz), lowerz, upperz); ensure("2:quantize8: Fail ", (x1 == vec3a.mV[VX]) && (y1 == vec3a.mV[VY])&& (z1 == vec3a.mV[VZ])); } -} \ No newline at end of file +} diff --git a/linden/indra/test/v4color_tut.cpp b/linden/indra/test/v4color_tut.cpp new file mode 100644 index 0000000..2d1cd7e --- /dev/null +++ b/linden/indra/test/v4color_tut.cpp @@ -0,0 +1,364 @@ +/** + * @file v4color_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief v4color test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "v4coloru.h" +#include "llsd.h" +#include "v3color.h" +#include "v4color.h" + + +namespace tut +{ + struct v4color_data + { + }; + typedef test_group<v4color_data> v4color_test; + typedef v4color_test::object v4color_object; + tut::v4color_test v4color_testcase("v4color"); + + template<> template<> + void v4color_object::test<1>() + { + LLColor4 llcolor4; + ensure("1:LLColor4:Fail to initialize ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW]))); + + F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF; + LLColor4 llcolor4a(r,g,b); + ensure("2:LLColor4:Fail to initialize ", ((r == llcolor4a.mV[VX]) && (g == llcolor4a.mV[VY]) && (b == llcolor4a.mV[VZ])&& (1.0f == llcolor4a.mV[VW]))); + + LLColor4 llcolor4b(r,g,b,a); + ensure("3:LLColor4:Fail to initialize ", ((r == llcolor4b.mV[VX]) && (g == llcolor4b.mV[VY]) && (b == llcolor4b.mV[VZ])&& (a == llcolor4b.mV[VW]))); + + const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f}; + LLColor4 llcolor4c(vec); + ensure("4:LLColor4:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW]))); + + LLColor3 llcolor3(-2.23f,1.01f,42.3f); + F32 val = -.1f; + LLColor4 llcolor4d(llcolor3,val); + ensure("5:LLColor4:Fail to initialize ", ((llcolor3.mV[VX] == llcolor4d.mV[VX]) && (llcolor3.mV[VY] == llcolor4d.mV[VY]) && (llcolor3.mV[VZ] == llcolor4d.mV[VZ])&& (val == llcolor4d.mV[VW]))); + + LLSD sd = llcolor4d.getValue(); + LLColor4 llcolor4e(sd); + ensure_equals("6:LLColor4:(LLSD) failed ", llcolor4d, llcolor4e); + + U8 r1 = 0xF2, g1 = 0xFA, b1 = 0xBF; + LLColor4U color4u(r1,g1,b1); + LLColor4 llcolor4g(color4u); + const F32 SCALE = 1.f/255.f; + F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE; + ensure("7:LLColor4:Fail to initialize ", ((r2 == llcolor4g.mV[VX]) && (g2 == llcolor4g.mV[VY]) && (b2 == llcolor4g.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<2>() + { + LLColor4 llcolor(1.0, 2.0, 3.0, 4.0); + LLSD llsd = llcolor.getValue(); + LLColor4 llcolor4(llsd), llcolor4a; + llcolor4a.setValue(llsd); + ensure("setValue: failed", (llcolor4 == llcolor4a)); + LLSD sd = llcolor4a.getValue(); + LLColor4 llcolor4b(sd); + ensure("getValue: Failed ", (llcolor4b == llcolor4a)); + } + + template<> template<> + void v4color_object::test<3>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0xAF; + LLColor4 llcolor4(r,g,b,a); + llcolor4.setToBlack(); + ensure("setToBlack:Fail to set the black ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW]))); + + llcolor4.setToWhite(); + ensure("setToWhite:Fail to set the white ", ((1.f == llcolor4.mV[VX]) && (1.f == llcolor4.mV[VY]) && (1.f == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW]))); + } + + template<> template<> + void v4color_object::test<4>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF; + LLColor4 llcolor4; + llcolor4.setVec(r,g,b); + ensure("1:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (1.f == llcolor4.mV[VW]))); + + llcolor4.setVec(r,g,b,a); + ensure("2:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (a == llcolor4.mV[VW]))); + + LLColor4 llcolor4a; + llcolor4a.setVec(llcolor4); + ensure_equals("3:setVec:Fail to set the values ", llcolor4a,llcolor4); + + LLColor3 llcolor3(-2.23f,1.01f,42.3f); + llcolor4a.setVec(llcolor3); + ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ]))); + + F32 val = -.33f; + llcolor4a.setVec(llcolor3,val); + ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ]) && (val == llcolor4a.mV[VW]))); + + const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f}; + LLColor4 llcolor4c; + llcolor4c.setVec(vec); + ensure("5:setVec:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW]))); + + U8 r1 = 0xF2, g1 = 0xFA, b1= 0xBF; + LLColor4U color4u(r1,g1,b1); + llcolor4.setVec(color4u); + const F32 SCALE = 1.f/255.f; + F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE; + ensure("6:setVec:Fail to initialize ", ((r2 == llcolor4.mV[VX]) && (g2 == llcolor4.mV[VY]) && (b2 == llcolor4.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<5>() + { + F32 alpha = 0xAF; + LLColor4 llcolor4; + llcolor4.setAlpha(alpha); + ensure("setAlpha:Fail to initialize ", (alpha == llcolor4.mV[VW])); + } + + template<> template<> + void v4color_object::test<6>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + LLColor4 llcolor4(r,g,b); + ensure("magVecSquared:Fail ", is_approx_equal(llcolor4.magVecSquared(), (r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor4.magVec(), fsqrtf(r*r + g*g + b*b))); + } + + template<> template<> + void v4color_object::test<7>() + { +#if (LL_RELEASE && LL_LINUX) + skip_fail("Doesn't work under Linux -- FIX ME!"); +#endif + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + LLColor4 llcolor4(r,g,b); + F32 vecMag = llcolor4.normVec(); + F32 mag = fsqrtf(r*r + g*g + b*b); + F32 oomag = 1.f / mag; + F32 val1 = r * oomag, val2 = g * oomag, val3 = b * oomag; + ensure("1:normVec failed ", (val1 == llcolor4.mV[0] && val2 == llcolor4.mV[1] && val3 == llcolor4.mV[2] && vecMag == mag)); + } + + template<> template<> + void v4color_object::test<8>() + { + LLColor4 llcolor4; + ensure("1:isOpaque failed ",(1 == llcolor4.isOpaque())); + F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 1.f; + llcolor4.setVec(r,g,b,a); + ensure("2:isOpaque failed ",(1 == llcolor4.isOpaque())); + a = 2.f; + llcolor4.setVec(r,g,b,a); + ensure("3:isOpaque failed ",(0 == llcolor4.isOpaque())); + } + + template<> template<> + void v4color_object::test<9>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + LLColor4 llcolor4(r,g,b); + ensure("1:operator [] failed",( r == llcolor4[0])); + ensure("2:operator [] failed",( g == llcolor4[1])); + ensure("3:operator [] failed",( b == llcolor4[2])); + + r = 0xA20, g = 0xFBFF, b = 0xFFF; + llcolor4.setVec(r,g,b); + F32 &ref1 = llcolor4[0]; + ensure("4:operator [] failed",( ref1 == llcolor4[0])); + F32 &ref2 = llcolor4[1]; + ensure("5:operator [] failed",( ref2 == llcolor4[1])); + F32 &ref3 = llcolor4[2]; + ensure("6:operator [] failed",( ref3 == llcolor4[2])); + } + + template<> template<> + void v4color_object::test<10>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + LLColor3 llcolor3(r,g,b); + LLColor4 llcolor4a,llcolor4b; + llcolor4a = llcolor3; + ensure("Operator=:Fail to initialize ", ((llcolor3.mV[0] == llcolor4a.mV[VX]) && (llcolor3.mV[1] == llcolor4a.mV[VY]) && (llcolor3.mV[2] == llcolor4a.mV[VZ]))); + LLSD sd = llcolor4a.getValue(); + llcolor4b = sd; + ensure_equals("Operator= LLSD:Fail ", llcolor4a, llcolor4b); + } + + template<> template<> + void v4color_object::test<11>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + std::ostringstream stream1, stream2; + LLColor4 llcolor4a(r,g,b),llcolor4b; + stream1 << llcolor4a; + llcolor4b.setVec(r,g,b); + stream2 << llcolor4b; + ensure("operator << failed ", (stream1.str() == stream2.str())); + } + + template<> template<> + void v4color_object::test<12>() + { + F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF; + F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF; + LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c; + llcolor4c = llcolor4b + llcolor4a; + ensure("operator+:Fail to Add the values ", (is_approx_equal(r1+r2,llcolor4c.mV[VX]) && is_approx_equal(g1+g2,llcolor4c.mV[VY]) && is_approx_equal(b1+b2,llcolor4c.mV[VZ]))); + + llcolor4b += llcolor4a; + ensure("operator+=:Fail to Add the values ", (is_approx_equal(r1+r2,llcolor4b.mV[VX]) && is_approx_equal(g1+g2,llcolor4b.mV[VY]) && is_approx_equal(b1+b2,llcolor4b.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<13>() + { + F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF; + F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF; + LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c; + llcolor4c = llcolor4a - llcolor4b; + ensure("operator-:Fail to subtract the values ", (is_approx_equal(r1-r2,llcolor4c.mV[VX]) && is_approx_equal(g1-g2,llcolor4c.mV[VY]) && is_approx_equal(b1-b2,llcolor4c.mV[VZ]))); + + llcolor4a -= llcolor4b; + ensure("operator-=:Fail to subtract the values ", (is_approx_equal(r1-r2,llcolor4a.mV[VX]) && is_approx_equal(g1-g2,llcolor4a.mV[VY]) && is_approx_equal(b1-b2,llcolor4a.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<14>() + { + F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF; + F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF; + LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c; + llcolor4c = llcolor4a * llcolor4b; + ensure("1:operator*:Fail to multiply the values", (is_approx_equal(r1*r2,llcolor4c.mV[VX]) && is_approx_equal(g1*g2,llcolor4c.mV[VY]) && is_approx_equal(b1*b2,llcolor4c.mV[VZ]))); + + F32 mulVal = 3.33f; + llcolor4c = llcolor4a * mulVal; + ensure("2:operator*:Fail ", (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ]))); + llcolor4c = mulVal * llcolor4a; + ensure("3:operator*:Fail to multiply the values", (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ]))); + + llcolor4a *= mulVal; + ensure("4:operator*=:Fail to multiply the values ", (is_approx_equal(r1*mulVal,llcolor4a.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4a.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4a.mV[VZ]))); + + LLColor4 llcolor4d(r1,g1,b1),llcolor4e(r2,g2,b2); + llcolor4e *= llcolor4d; + ensure("5:operator*=:Fail to multiply the values ", (is_approx_equal(r1*r2,llcolor4e.mV[VX]) && is_approx_equal(g1*g2,llcolor4e.mV[VY]) && is_approx_equal(b1*b2,llcolor4e.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<15>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30; + F32 div = 12.345f; + LLColor4 llcolor4a(r,g,b,a),llcolor4b; + llcolor4b = llcolor4a % div;//chnage only alpha value nor r,g,b; + ensure("1operator%:Fail ", (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW]))); + + llcolor4b = div % llcolor4a; + ensure("2operator%:Fail ", (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW]))); + + llcolor4a %= div; + ensure("operator%=:Fail ", (is_approx_equal(a*div,llcolor4a.mV[VW]))); + } + + template<> template<> + void v4color_object::test<16>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30; + LLColor4 llcolor4a(r,g,b,a),llcolor4b; + llcolor4b = llcolor4a; + ensure("1:operator== failed to ensure the equality ", (llcolor4b == llcolor4a)); + F32 r1 = 0x2, g1 = 0xFF, b1 = 0xFA; + LLColor3 llcolor3(r1,g1,b1); + llcolor4b = llcolor3; + ensure("2:operator== failed to ensure the equality ", (llcolor4b == llcolor3)); + ensure("2:operator!= failed to ensure the equality ", (llcolor4a != llcolor3)); + } + + template<> template<> + void v4color_object::test<17>() + { + F32 r = 0x20, g = 0xFFFF, b = 0xFF; + LLColor4 llcolor4a(r,g,b),llcolor4b; + LLColor3 llcolor3 = vec4to3(llcolor4a); + ensure("vec4to3:Fail to convert vec4 to vec3 ", (is_approx_equal(llcolor3.mV[VX],llcolor4a.mV[VX]) && is_approx_equal(llcolor3.mV[VY],llcolor4a.mV[VY]) && is_approx_equal(llcolor3.mV[VZ],llcolor4a.mV[VZ]))); + llcolor4b = vec3to4(llcolor3); + ensure_equals("vec3to4:Fail to convert vec3 to vec4 ", llcolor4b, llcolor4a); + } + + template<> template<> + void v4color_object::test<18>() + { + F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF, val = 0x20; + F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF; + LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c; + llcolor4c = lerp(llcolor4a,llcolor4b,val); + ensure("lerp:Fail ", (is_approx_equal(r1 + (r2 - r1)* val,llcolor4c.mV[VX]) && is_approx_equal(g1 + (g2 - g1)* val,llcolor4c.mV[VY]) && is_approx_equal(b1 + (b2 - b1)* val,llcolor4c.mV[VZ]))); + } + + template<> template<> + void v4color_object::test<19>() + { + F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f; + LLColor4 llcolor4a(r,g,b,a),llcolor4b; + const char *color = "red"; + LLColor4::parseColor(color, &llcolor4b); + ensure_equals("1:parseColor() failed to parse the color value ", llcolor4b, LLColor4::red); + + color = "12.0, -2.3, 1.32, 5.0"; + LLColor4::parseColor(color, &llcolor4b); + llcolor4a = llcolor4a * (1.f / 255.f); + ensure_equals("2:parseColor() failed to parse the color value ", llcolor4a,llcolor4b); + + color = "yellow5"; + llcolor4a.setVec(r,g,b); + LLColor4::parseColor(color, &llcolor4a); + ensure_equals("3:parseColor() failed to parse the color value ", llcolor4a, LLColor4::yellow5); + } + + template<> template<> + void v4color_object::test<20>() + { + F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f; + LLColor4 llcolor4a(r,g,b,a),llcolor4b; + const char *color = "12.0, -2.3, 1.32, 5.0"; + LLColor4::parseColor4(color, &llcolor4b); + ensure_equals("parseColor4() failed to parse the color value ", llcolor4a, llcolor4b); + } +} diff --git a/linden/indra/test/v4coloru_tut.cpp b/linden/indra/test/v4coloru_tut.cpp new file mode 100644 index 0000000..f671cf1 --- /dev/null +++ b/linden/indra/test/v4coloru_tut.cpp @@ -0,0 +1,337 @@ +/** + * @file v4coloru_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief v4coloru test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "llsd.h" +#include "v4coloru.h" + + +namespace tut +{ + struct v4coloru_data + { + }; + typedef test_group<v4coloru_data> v4coloru_test; + typedef v4coloru_test::object v4coloru_object; + tut::v4coloru_test v4coloru_testcase("v4coloru"); + + template<> template<> + void v4coloru_object::test<1>() + { + LLColor4U llcolor4u; + ensure("1:LLColor4u:Fail to initialize ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW]))); + + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23; + LLColor4U llcolor4u1(r,g,b); + ensure("2:LLColor4u:Fail to initialize ", ((r == llcolor4u1.mV[VX]) && (g == llcolor4u1.mV[VY]) && (b == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW]))); + + LLColor4U llcolor4u2(r,g,b,a); + ensure("3:LLColor4u:Fail to initialize ", ((r == llcolor4u2.mV[VX]) && (g == llcolor4u2.mV[VY]) && (b == llcolor4u2.mV[VZ])&& (a == llcolor4u2.mV[VW]))); + + const U8 vec[4] = {0x12,0xFF,0xAF,0x23}; + LLColor4U llcolor4u3(vec); + ensure("4:LLColor4u:Fail to initialize ", ((vec[0] == llcolor4u3.mV[VX]) && (vec[1] == llcolor4u3.mV[VY]) && (vec[2] == llcolor4u3.mV[VZ])&& (vec[3] == llcolor4u3.mV[VW]))); + + LLSD sd = llcolor4u3.getValue(); + LLColor4U llcolor4u4(sd); + ensure_equals("5:LLColor4u (LLSD) Failed ", llcolor4u4, llcolor4u3); + } + + template<> template<> + void v4coloru_object::test<2>() + { + LLColor4U llcolor4ua(1, 2, 3, 4); + LLSD sd = llcolor4ua.getValue(); + LLColor4U llcolor4u; + llcolor4u.setValue(sd); + ensure_equals("setValue(LLSD)/getValue Failed ", llcolor4u, llcolor4ua); + } + + template<> template<> + void v4coloru_object::test<3>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23; + LLColor4U llcolor4u(r,g,b,a); + llcolor4u.setToBlack(); + ensure("setToBlack:Fail to set black ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW]))); + + llcolor4u.setToWhite(); + ensure("setToWhite:Fail to white ", ((255 == llcolor4u.mV[VX]) && (255 == llcolor4u.mV[VY]) && (255 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW]))); + } + + template<> template<> + void v4coloru_object::test<4>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23; + LLColor4U llcolor4ua(r,g,b,a); + LLSD sd = llcolor4ua.getValue(); + LLColor4U llcolor4u = sd; + ensure_equals("Operator=(LLSD) Failed ", llcolor4u, llcolor4ua); + } + + template<> template<> + void v4coloru_object::test<5>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23; + LLColor4U llcolor4u; + llcolor4u.setVec(r,g,b,a); + ensure("1:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (a == llcolor4u.mV[VW]))); + + llcolor4u.setToBlack(); + llcolor4u.setVec(r,g,b); + ensure("2:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW]))); + + LLColor4U llcolor4u1; + llcolor4u1.setVec(llcolor4u); + ensure_equals("3:setVec:Fail to set the values ", llcolor4u1,llcolor4u); + + const U8 vec[4] = {0x12,0xFF,0xAF,0x23}; + LLColor4U llcolor4u2; + llcolor4u2.setVec(vec); + ensure("4:setVec:Fail to set the values ", ((vec[0] == llcolor4u2.mV[VX]) && (vec[1] == llcolor4u2.mV[VY]) && (vec[2] == llcolor4u2.mV[VZ])&& (vec[3] == llcolor4u2.mV[VW]))); + } + + template<> template<> + void v4coloru_object::test<6>() + { + U8 alpha = 0x12; + LLColor4U llcolor4u; + llcolor4u.setAlpha(alpha); + ensure("setAlpha:Fail to set alpha value ", (alpha == llcolor4u.mV[VW])); + } + + template<> template<> + void v4coloru_object::test<7>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF; + LLColor4U llcolor4u(r,g,b); + ensure("magVecSquared:Fail ", is_approx_equal(llcolor4u.magVecSquared(), (F32)(r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), fsqrtf(r*r + g*g + b*b))); + } + + template<> template<> + void v4coloru_object::test<8>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF; + std::ostringstream stream1, stream2; + LLColor4U llcolor4u1(r,g,b),llcolor4u2; + stream1 << llcolor4u1; + llcolor4u2.setVec(r,g,b); + stream2 << llcolor4u2; + ensure("operator << failed ", (stream1.str() == stream2.str())); + } + + template<> template<> + void v4coloru_object::test<9>() + { + U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF; + U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B; + LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3; + llcolor4u3 = llcolor4u1 + llcolor4u2; + ensure_equals( + "1a.operator+:Fail to Add the values ", + llcolor4u3.mV[VX], + (U8)(r1+r2)); + ensure_equals( + "1b.operator+:Fail to Add the values ", + llcolor4u3.mV[VY], + (U8)(g1+g2)); + ensure_equals( + "1c.operator+:Fail to Add the values ", + llcolor4u3.mV[VZ], + (U8)(b1+b2)); + + llcolor4u2 += llcolor4u1; + ensure_equals( + "2a.operator+=:Fail to Add the values ", + llcolor4u2.mV[VX], + (U8)(r1+r2)); + ensure_equals( + "2b.operator+=:Fail to Add the values ", + llcolor4u2.mV[VY], + (U8)(g1+g2)); + ensure_equals( + "2c.operator+=:Fail to Add the values ", + llcolor4u2.mV[VZ], + (U8)(b1+b2)); + } + + template<> template<> + void v4coloru_object::test<10>() + { + U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF; + U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B; + LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3; + llcolor4u3 = llcolor4u1 - llcolor4u2; + ensure_equals( + "1a. operator-:Fail to Add the values ", + llcolor4u3.mV[VX], + (U8)(r1-r2)); + ensure_equals( + "1b. operator-:Fail to Add the values ", + llcolor4u3.mV[VY], + (U8)(g1-g2)); + ensure_equals( + "1c. operator-:Fail to Add the values ", + llcolor4u3.mV[VZ], + (U8)(b1-b2)); + + llcolor4u1 -= llcolor4u2; + ensure_equals( + "2a. operator-=:Fail to Add the values ", + llcolor4u1.mV[VX], + (U8)(r1-r2)); + ensure_equals( + "2b. operator-=:Fail to Add the values ", + llcolor4u1.mV[VY], + (U8)(g1-g2)); + ensure_equals( + "2c. operator-=:Fail to Add the values ", + llcolor4u1.mV[VZ], + (U8)(b1-b2)); + } + + template<> template<> + void v4coloru_object::test<11>() + { + U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF; + U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B; + LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3; + llcolor4u3 = llcolor4u1 * llcolor4u2; + ensure_equals( + "1a. operator*:Fail to multiply the values", + llcolor4u3.mV[VX], + (U8)(r1*r2)); + ensure_equals( + "1b. operator*:Fail to multiply the values", + llcolor4u3.mV[VY], + (U8)(g1*g2)); + ensure_equals( + "1c. operator*:Fail to multiply the values", + llcolor4u3.mV[VZ], + (U8)(b1*b2)); + + U8 mulVal = 123; + llcolor4u1 *= mulVal; + ensure_equals( + "2a. operator*=:Fail to multiply the values", + llcolor4u1.mV[VX], + (U8)(r1*mulVal)); + ensure_equals( + "2b. operator*=:Fail to multiply the values", + llcolor4u1.mV[VY], + (U8)(g1*mulVal)); + ensure_equals( + "2c. operator*=:Fail to multiply the values", + llcolor4u1.mV[VZ], + (U8)(b1*mulVal)); + } + + template<> template<> + void v4coloru_object::test<12>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF; + LLColor4U llcolor4u(r,g,b),llcolor4u1; + llcolor4u1 = llcolor4u; + ensure("operator== failed to ensure the equality ", (llcolor4u1 == llcolor4u)); + llcolor4u1.setToBlack(); + ensure("operator!= failed to ensure the equality ", (llcolor4u1 != llcolor4u)); + } + + template<> template<> + void v4coloru_object::test<13>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12; + LLColor4U llcolor4u(r,g,b,a); + U8 modVal = 45; + llcolor4u %= modVal; + ensure_equals("operator%=:Fail ", llcolor4u.mV[VW], (U8)(a * modVal)); + } + + template<> template<> + void v4coloru_object::test<14>() + { + U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12; + LLColor4U llcolor4u1(r,g,b,a); + const char *color = "12, 23, 132, 50"; + LLColor4U::parseColor4U(color, &llcolor4u1); + ensure("parseColor4U() failed to parse the color value ", ((12 == llcolor4u1.mV[VX]) && (23 == llcolor4u1.mV[VY]) && (132 == llcolor4u1.mV[VZ])&& (50 == llcolor4u1.mV[VW]))); + + color = "12, 23, 132"; + ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1))); + + color = "12"; + ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1))); + } + + template<> template<> + void v4coloru_object::test<15>() + { + U8 r = 12, g = 123, b = 3, a = 2; + LLColor4U llcolor4u(r,g,b,a),llcolor4u1; + const F32 fVal = 3.f; + llcolor4u1 = llcolor4u.multAll(fVal); + ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY] + && ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW]))); + } + + template<> template<> + void v4coloru_object::test<16>() + { + U8 r1 = 12, g1 = 123, b1 = 3, a1 = 2; + U8 r2 = 23, g2 = 230, b2 = 124, a2 = 255; + LLColor4U llcolor4u(r1,g1,b1,a1),llcolor4u1(r2,g2,b2,a2); + llcolor4u1 = llcolor4u1.addClampMax(llcolor4u); + ensure("1:addClampMax():Fail to add the value ", ((r1+r2 == llcolor4u1.mV[VX]) && (255 == llcolor4u1.mV[VY]) && (b1+b2 == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW]))); + + r1 = 132, g1 = 3, b1 = 3, a1 = 2; + r2 = 123, g2 = 230, b2 = 154, a2 = 25; + LLColor4U llcolor4u2(r1,g1,b1,a1),llcolor4u3(r2,g2,b2,a2); + llcolor4u3 = llcolor4u3.addClampMax(llcolor4u2); + ensure("2:addClampMax():Fail to add the value ", ((255 == llcolor4u3.mV[VX]) && (g1+g2 == llcolor4u3.mV[VY]) && (b1+b2 == llcolor4u3.mV[VZ])&& (a1+a2 == llcolor4u3.mV[VW]))); + } + + template<> template<> + void v4coloru_object::test<17>() + { + F32 r = 23.f, g = 12.32f, b = -12.3f; + LLColor3 color3(r,g,b); + LLColor4U llcolor4u; + llcolor4u.setVecScaleClamp(color3); + const S32 MAX_COLOR = 255; + F32 color_scale_factor = MAX_COLOR/r; + S32 r2 = llround(r * color_scale_factor); + S32 g2 = llround(g * color_scale_factor); + ensure("setVecScaleClamp():Fail to add the value ", ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW]))); + } +} diff --git a/linden/indra/test/v4math_tut.cpp b/linden/indra/test/v4math_tut.cpp new file mode 100644 index 0000000..055e825 --- /dev/null +++ b/linden/indra/test/v4math_tut.cpp @@ -0,0 +1,379 @@ +/** + * @file v4math_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief v4math test cases. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include <tut/tut.h> +#include "lltut.h" +#include "linden_common.h" +#include "llquaternion.h" +#include "llsd.h" +#include "m4math.h" +#include "v4math.h" + +namespace tut +{ + struct v4math_data + { + }; + typedef test_group<v4math_data> v4math_test; + typedef v4math_test::object v4math_object; + tut::v4math_test v4math_testcase("v4math"); + + template<> template<> + void v4math_object::test<1>() + { + LLVector4 vec4; + ensure("1:LLVector4:Fail to initialize " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (1.0f == vec4.mV[VW]))); + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4a(x,y,z); + ensure("2:LLVector4:Fail to initialize " ,((x == vec4a.mV[VX]) && (y == vec4a.mV[VY]) && (z == vec4a.mV[VZ])&& (1.0f == vec4a.mV[VW]))); + LLVector4 vec4b(x,y,z,w); + ensure("3:LLVector4:Fail to initialize " ,((x == vec4b.mV[VX]) && (y == vec4b.mV[VY]) && (z == vec4b.mV[VZ])&& (w == vec4b.mV[VW]))); + const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f}; + LLVector4 vec4c(vec); + ensure("4:LLVector4:Fail to initialize " ,((vec[0] == vec4c.mV[VX]) && (vec[1] == vec4c.mV[VY]) && (vec[2] == vec4c.mV[VZ])&& (vec[3] == vec4c.mV[VW]))); + LLVector3 vec3(-2.23f,1.01f,42.3f); + LLVector4 vec4d(vec3); + ensure("5:LLVector4:Fail to initialize " ,((vec3.mV[VX] == vec4d.mV[VX]) && (vec3.mV[VY] == vec4d.mV[VY]) && (vec3.mV[VZ] == vec4d.mV[VZ])&& (1.f == vec4d.mV[VW]))); + F32 w1 = -.234f; + LLVector4 vec4e(vec3,w1); + ensure("6:LLVector4:Fail to initialize " ,((vec3.mV[VX] == vec4e.mV[VX]) && (vec3.mV[VY] == vec4e.mV[VY]) && (vec3.mV[VZ] == vec4e.mV[VZ])&& (w1 == vec4e.mV[VW]))); + } + + template<> template<> + void v4math_object::test<2>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4; + vec4.setVec(x,y,z); + ensure("1:setVec:Fail to initialize " ,((x == vec4.mV[VX]) && (y == vec4.mV[VY]) && (z == vec4.mV[VZ])&& (1.0f == vec4.mV[VW]))); + vec4.clearVec(); + ensure("2:clearVec:Fail " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (1.0f == vec4.mV[VW]))); + vec4.setVec(x,y,z,w); + ensure("3:setVec:Fail to initialize " ,((x == vec4.mV[VX]) && (y == vec4.mV[VY]) && (z == vec4.mV[VZ])&& (w == vec4.mV[VW]))); + vec4.zeroVec(); + ensure("4:zeroVec:Fail " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (0 == vec4.mV[VW]))); + LLVector3 vec3(-2.23f,1.01f,42.3f); + vec4.clearVec(); + vec4.setVec(vec3); + ensure("5:setVec:Fail to initialize " ,((vec3.mV[VX] == vec4.mV[VX]) && (vec3.mV[VY] == vec4.mV[VY]) && (vec3.mV[VZ] == vec4.mV[VZ])&& (1.f == vec4.mV[VW]))); + F32 w1 = -.234f; + vec4.zeroVec(); + vec4.setVec(vec3,w1); + ensure("6:setVec:Fail to initialize " ,((vec3.mV[VX] == vec4.mV[VX]) && (vec3.mV[VY] == vec4.mV[VY]) && (vec3.mV[VZ] == vec4.mV[VZ])&& (w1 == vec4.mV[VW]))); + const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f}; + LLVector4 vec4a; + vec4a.setVec(vec); + ensure("7:setVec:Fail to initialize " ,((vec[0] == vec4a.mV[VX]) && (vec[1] == vec4a.mV[VY]) && (vec[2] == vec4a.mV[VZ])&& (vec[3] == vec4a.mV[VW]))); + } + + template<> template<> + void v4math_object::test<3>() + { + F32 x = 10.f, y = -2.3f, z = -.023f; + LLVector4 vec4(x,y,z); + ensure("magVec:Fail ", is_approx_equal(vec4.magVec(), fsqrtf(x*x + y*y + z*z))); + ensure("magVecSquared:Fail ", is_approx_equal(vec4.magVecSquared(), (x*x + y*y + z*z))); + } + + template<> template<> + void v4math_object::test<4>() + { + F32 x = 10.f, y = -2.3f, z = -.023f; + LLVector4 vec4(x,y,z); + F32 mag = vec4.normVec(); + mag = 1.f/ mag; + ensure("1:normVec: Fail " ,is_approx_equal(mag*x,vec4.mV[VX]) && is_approx_equal(mag*y, vec4.mV[VY])&& is_approx_equal(mag*z, vec4.mV[VZ])); + x = 0.000000001f, y = 0.000000001f, z = 0.000000001f; + vec4.clearVec(); + vec4.setVec(x,y,z); + mag = vec4.normVec(); + ensure("2:normVec: Fail " ,is_approx_equal(mag*x,vec4.mV[VX]) && is_approx_equal(mag*y, vec4.mV[VY])&& is_approx_equal(mag*z, vec4.mV[VZ])); + } + + template<> template<> + void v4math_object::test<5>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4(x,y,z,w); + vec4.abs(); + ensure("abs:Fail " ,((x == vec4.mV[VX]) && (-y == vec4.mV[VY]) && (-z == vec4.mV[VZ])&& (-w == vec4.mV[VW]))); + vec4.clearVec(); + ensure("isExactlyClear:Fail " ,(TRUE == vec4.isExactlyClear())); + vec4.zeroVec(); + ensure("isExactlyZero:Fail " ,(TRUE == vec4.isExactlyZero())); + } + + template<> template<> + void v4math_object::test<6>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4(x,y,z,w),vec4a; + vec4a = vec4.scaleVec(vec4); + ensure("scaleVec:Fail " ,(is_approx_equal(x*x, vec4a.mV[VX]) && is_approx_equal(y*y, vec4a.mV[VY]) && is_approx_equal(z*z, vec4a.mV[VZ])&& is_approx_equal(w*w, vec4a.mV[VW]))); + } + + template<> template<> + void v4math_object::test<7>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4(x,y,z,w); + ensure("1:operator [] failed " ,( x == vec4[0])); + ensure("2:operator [] failed " ,( y == vec4[1])); + ensure("3:operator [] failed " ,( z == vec4[2])); + ensure("4:operator [] failed " ,( w == vec4[3])); + x = 23.f, y = -.2361f, z = 3.25; + vec4.setVec(x,y,z); + F32 &ref1 = vec4[0]; + ensure("5:operator [] failed " ,( ref1 == vec4[0])); + F32 &ref2 = vec4[1]; + ensure("6:operator [] failed " ,( ref2 == vec4[1])); + F32 &ref3 = vec4[2]; + ensure("7:operator [] failed " ,( ref3 == vec4[2])); + F32 &ref4 = vec4[3]; + ensure("8:operator [] failed " ,( ref4 == vec4[3])); + } + + template<> template<> + void v4math_object::test<8>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + const F32 val[10] = {1.f,2.f,3.f,.34f,.1f,-.5f,2.f,1.23f,1.234f,.89f}; + LLMatrix4 mat(val); + LLVector4 vec4(x,y,z,w),vec4a; + vec4.rotVec(mat); + vec4a.setVec(x,y,z,w); + vec4a.rotVec(mat); + ensure_equals("1:rotVec: Fail " ,vec4a, vec4); + F32 a = 2.32f, b = -23.2f, c = -34.1112f, d = 1.010112f; + LLQuaternion q(a,b,c,d); + LLVector4 vec4b(a,b,c,d),vec4c; + vec4b.rotVec(q); + vec4c.setVec(a, b, c, d); + vec4c.rotVec(q); + ensure_equals("2:rotVec: Fail " ,vec4b, vec4c); + } + + template<> template<> + void v4math_object::test<9>() + { + F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f; + LLVector4 vec4(x,y,z,w),vec4a;; + std::ostringstream stream1, stream2; + stream1 << vec4; + vec4a.setVec(x,y,z,w); + stream2 << vec4a; + ensure("operator << failed",(stream1.str() == stream2.str())); + } + + template<> template<> + void v4math_object::test<10>() + { + F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f, w1 = .23f; + F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f, w2 = 1.3f; + LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2),vec4b; + vec4b = vec4a + vec4; + ensure("1:operator+:Fail to initialize " ,(is_approx_equal(x1+x2,vec4b.mV[VX]) && is_approx_equal(y1+y2,vec4b.mV[VY]) && is_approx_equal(z1+z2,vec4b.mV[VZ]))); + x1 = -2.45f, y1 = 2.1f, z1 = 3.0f; + vec4.clearVec(); + vec4a.clearVec(); + vec4.setVec(x1,y1,z1); + vec4a +=vec4; + ensure_equals("2:operator+=: Fail to initialize", vec4a,vec4); + vec4a += vec4; + ensure("3:operator+=:Fail to initialize " ,(is_approx_equal(2*x1,vec4a.mV[VX]) && is_approx_equal(2*y1,vec4a.mV[VY]) && is_approx_equal(2*z1,vec4a.mV[VZ]))); + } + template<> template<> + void v4math_object::test<11>() + { + F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f, w1 = .23f; + F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f, w2 = 1.3f; + LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2),vec4b; + vec4b = vec4a - vec4; + ensure("1:operator-:Fail to initialize " ,(is_approx_equal(x2-x1,vec4b.mV[VX]) && is_approx_equal(y2-y1,vec4b.mV[VY]) && is_approx_equal(z2-z1,vec4b.mV[VZ]))); + x1 = -2.45f, y1 = 2.1f, z1 = 3.0f; + vec4.clearVec(); + vec4a.clearVec(); + vec4.setVec(x1,y1,z1); + vec4a -=vec4; + ensure_equals("2:operator-=: Fail to initialize" , vec4a,-vec4); + vec4a -=vec4; + ensure("3:operator-=:Fail to initialize " ,(is_approx_equal(-2*x1,vec4a.mV[VX]) && is_approx_equal(-2*y1,vec4a.mV[VY]) && is_approx_equal(-2*z1,vec4a.mV[VZ]))); + } + + template<> template<> + void v4math_object::test<12>() + { + F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f; + F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f; + LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2); + F32 res = vec4 * vec4a; + ensure("1:operator* failed " ,is_approx_equal(res, x1*x2 + y1*y2 + z1*z2)); + vec4a.clearVec(); + F32 mulVal = 4.2f; + vec4a = vec4 * mulVal; + ensure("2:operator* failed " ,is_approx_equal(x1*mulVal,vec4a.mV[VX]) && is_approx_equal(y1*mulVal, vec4a.mV[VY])&& is_approx_equal(z1*mulVal, vec4a.mV[VZ])); + vec4a.clearVec(); + vec4a = mulVal * vec4 ; + ensure("3:operator* failed " ,is_approx_equal(x1*mulVal, vec4a.mV[VX]) && is_approx_equal(y1*mulVal, vec4a.mV[VY])&& is_approx_equal(z1*mulVal, vec4a.mV[VZ])); + vec4 *= mulVal; + ensure("4:operator*= failed " ,is_approx_equal(x1*mulVal, vec4.mV[VX]) && is_approx_equal(y1*mulVal, vec4.mV[VY])&& is_approx_equal(z1*mulVal, vec4.mV[VZ])); + } + + template<> template<> + void v4math_object::test<13>() + { + F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f; + F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f; + LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2),vec4b; + vec4b = vec4 % vec4a; + ensure("1:operator% failed " ,is_approx_equal(y1*z2 - y2*z1, vec4b.mV[VX]) && is_approx_equal(z1*x2 -z2*x1, vec4b.mV[VY]) && is_approx_equal(x1*y2-x2*y1, vec4b.mV[VZ])); + vec4 %= vec4a; + ensure_equals("operator%= failed " ,vec4,vec4b); + } + + template<> template<> + void v4math_object::test<14>() + { + F32 x = 1.f, y = 2.f, z = -1.1f,div = 4.2f; + F32 t = 1.f / div; + LLVector4 vec4(x,y,z), vec4a; + vec4a = vec4/div; + ensure("1:operator/ failed " ,is_approx_equal(x*t, vec4a.mV[VX]) && is_approx_equal(y*t, vec4a.mV[VY])&& is_approx_equal(z*t, vec4a.mV[VZ])); + x = 1.23f, y = 4.f, z = -2.32f; + vec4.clearVec(); + vec4a.clearVec(); + vec4.setVec(x,y,z); + vec4a = vec4/div; + ensure("2:operator/ failed " ,is_approx_equal(x*t, vec4a.mV[VX]) && is_approx_equal(y*t, vec4a.mV[VY])&& is_approx_equal(z*t, vec4a.mV[VZ])); + vec4 /= div; + ensure("3:operator/ failed " ,is_approx_equal(x*t, vec4.mV[VX]) && is_approx_equal(y*t, vec4.mV[VY])&& is_approx_equal(z*t, vec4.mV[VZ])); + } + + template<> template<> + void v4math_object::test<15>() + { + F32 x = 1.f, y = 2.f, z = -1.1f; + LLVector4 vec4(x,y,z), vec4a; + ensure("operator!= failed " ,(vec4 != vec4a)); + vec4a = vec4; + ensure("operator== failed " ,(vec4 ==vec4a)); + } + + template<> template<> + void v4math_object::test<16>() + { + F32 x = 1.f, y = 2.f, z = -1.1f; + LLVector4 vec4(x,y,z), vec4a; + vec4a = - vec4; + ensure("operator- failed " , (vec4 == - vec4a)); + } + + template<> template<> + void v4math_object::test<17>() + { + F32 x = 1.f, y = 2.f, z = -1.1f,epsilon = .23425f; + LLVector4 vec4(x,y,z), vec4a(x,y,z); + ensure("1:are_parallel: Fail " ,(TRUE == are_parallel(vec4a,vec4,epsilon))); + x = 21.f, y = 12.f, z = -123.1f; + vec4a.clearVec(); + vec4a.setVec(x,y,z); + ensure("2:are_parallel: Fail " ,(FALSE == are_parallel(vec4a,vec4,epsilon))); + } + + template<> template<> + void v4math_object::test<18>() + { + F32 x = 1.f, y = 2.f, z = -1.1f; + F32 angle1, angle2; + LLVector4 vec4(x,y,z), vec4a(x,y,z); + angle1 = angle_between(vec4, vec4a); + vec4.normVec(); + vec4a.normVec(); + angle2 = acos(vec4 * vec4a); + ensure_approximately_equals("1:angle_between: Fail " ,angle1,angle2,8); + F32 x1 = 21.f, y1 = 2.23f, z1 = -1.1f; + LLVector4 vec4b(x,y,z), vec4c(x1,y1,z1); + angle1 = angle_between(vec4b, vec4c); + vec4b.normVec(); + vec4c.normVec(); + angle2 = acos(vec4b * vec4c); + ensure_approximately_equals("2:angle_between: Fail " ,angle1,angle2,8); + } + + template<> template<> + void v4math_object::test<19>() + { + F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 1.f, z2 = 1.f; + F32 val1,val2; + LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2); + val1 = dist_vec(vec4,vec4a); + val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); + ensure_equals("dist_vec: Fail ",val2, val1); + val1 = dist_vec_squared(vec4,vec4a); + val2 =((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); + ensure_equals("dist_vec_squared: Fail ",val2, val1); + } + + template<> template<> + void v4math_object::test<20>() + { + F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, w1 = -.23f, x2 = 1.3f, y2 = 1.f, z2 = 1.f,w2 = .12f; + F32 val = 2.3f,val1,val2,val3,val4; + LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2); + val1 = x1 + (x2 - x1)* val; + val2 = y1 + (y2 - y1)* val; + val3 = z1 + (z2 - z1)* val; + val4 = w1 + (w2 - w1)* val; + LLVector4 vec4b = lerp(vec4,vec4a,val); + ensure("lerp failed", ((val1 ==vec4b.mV[VX])&& (val2 ==vec4b.mV[VY]) && (val3 ==vec4b.mV[VZ])&& (val4 ==vec4b.mV[VW]))); + } + + template<> template<> + void v4math_object::test<21>() + { + F32 x = 1.f, y = 2.f, z = -1.1f; + LLVector4 vec4(x,y,z); + LLVector3 vec3 = vec4to3(vec4); + ensure("vec4to3 failed", ((x == vec3.mV[VX])&& (y == vec3.mV[VY]) && (z == vec3.mV[VZ]))); + LLVector4 vec4a = vec3to4(vec3); + ensure_equals("vec3to4 failed",vec4a,vec4); + } + + template<> template<> + void v4math_object::test<22>() + { + F32 x = 1.f, y = 2.f, z = -1.1f; + LLVector4 vec4(x,y,z); + LLSD llsd = vec4.getValue(); + LLVector3 vec3(llsd); + LLVector4 vec4a = vec3to4(vec3); + ensure_equals("getValue failed",vec4a,vec4); + } +} diff --git a/linden/scripts/messages/message_template.msg b/linden/scripts/messages/message_template.msg index 71bbb0e..13e1885 100644 --- a/linden/scripts/messages/message_template.msg +++ b/linden/scripts/messages/message_template.msg @@ -1,6 +1,16 @@ // Linden Lab development message templates -version 1.053 +version 2.0 + +// The Version 2.0 template requires preservation of message +// numbers. Each message must be numbered relative to the +// other messages of that type. The current highest number +// for each type is listed below: +// Low: 423 +// Medium: 18 +// High: 29 +// PLEASE UPDATE THIS WHEN YOU ADD A NEW MESSAGE! + // ************************************************************************* // Test Message @@ -9,7 +19,7 @@ version 1.053 // Test Message { - TestMessage Low NotTrusted Zerocoded + TestMessage Low 1 NotTrusted Zerocoded { TestBlock1 Single { Test1 U32 } @@ -30,16 +40,6 @@ version 1.053 // List fixed messages first // ************************* -// This is the newly updated version of the message template checksum -// request. The token is there so that the viewer can drop responses -// that do not match the supplied token. -{ - SecuredTemplateChecksumRequest Fixed 0xFFFFFFFA NotTrusted Unencoded - { - TokenBlock Single - { Token LLUUID } - } -} // Packet Ack - Ack a list of packets sent reliable { @@ -50,6 +50,7 @@ version 1.053 } } + // OpenCircuit - Tells the recipient's messaging system to open the descibed circuit { OpenCircuit Fixed 0xFFFFFFFC NotTrusted Unencoded @@ -60,37 +61,13 @@ version 1.053 } } + // CloseCircuit - Tells the recipient's messaging system to close the descibed circuit { CloseCircuit Fixed 0xFFFFFFFD NotTrusted Unencoded } -// message template version check. Deprecated - the viewer should send a -// SecuredTemplateChecksumRequest to prevent template checksum -// injection with a bad checksum. -{ - TemplateChecksumRequest Fixed 0xFFFFFFFE NotTrusted Unencoded -} - -// message template version check -{ - TemplateChecksumReply Fixed 0xFFFFFFFF NotTrusted Unencoded - { - DataBlock Single - { Checksum U32 } - { MajorVersion U8 } - { MinorVersion U8 } - { PatchVersion U8 } - { ServerVersion U8 } - { Flags U32 } - } - { - TokenBlock Single - { Token LLUUID } - } -} - // ****************** // End fixed messages // ****************** @@ -99,7 +76,7 @@ version 1.053 // PingID is used to determine how backlogged the ping was that was // returned (or how hosed the other side is) { - StartPingCheck High NotTrusted Unencoded + StartPingCheck High 1 NotTrusted Unencoded { PingID Single { PingID U8 } @@ -110,7 +87,7 @@ version 1.053 // CompletePingCheck - used to measure circuit ping times { - CompletePingCheck High NotTrusted Unencoded + CompletePingCheck High 2 NotTrusted Unencoded { PingID Single { PingID U8 } @@ -122,7 +99,7 @@ version 1.053 // AddCircuitCode - Tells the recipient's messaging system that this code // is for a legal circuit { - AddCircuitCode Low Trusted Unencoded + AddCircuitCode Low 2 Trusted Unencoded { CircuitCode Single { Code U32 } @@ -138,7 +115,7 @@ version 1.053 // id of the process, which every server will generate on startup and // the viewer will be handed after login. { - UseCircuitCode Low NotTrusted Unencoded + UseCircuitCode Low 3 NotTrusted Unencoded { CircuitCode Single { Code U32 } @@ -147,54 +124,6 @@ version 1.053 } } -// LogControl - This message allows us to remotely control the -// runtime logging facilities of the error stream. This MUST match -// the RelayLogControl message. -// Level - DEBUG=0, INFO=1, WARN=2, FATAL=3 system displays level and greater -// Mask - a bit mask. Set to 0xffff to display every type -// Time - set to 1 to turn on timestamp, 0 to turn it off -// Location - set to 1 to turn on file/line stamp, 0 to turn it off -// RemoteInfos - set to 1 to log llinfo to the log server (in production) -{ - LogControl Low Trusted Unencoded - { - Options Single - { Level U8 } - { Mask U32 } - { Time BOOL } - { Location BOOL } - { RemoteInfos BOOL } - } -} - -// RelayLogControl - Just like log control, but relayed around the -// server side to adjust the log level. This is in a separate message -// because the handler is a bit different, only implmented on some -// processes, and requires application level knowledge. This MUST match -// the LogControl message. -{ - RelayLogControl Low Trusted Unencoded - { - Options Single - { Level U8 } - { Mask U32 } - { Time BOOL } - { Location BOOL } - { RemoteInfos BOOL } - } -} - - -// LogMessages -// Turns on or off message system logging -{ - LogMessages Low Trusted Unencoded - { - Options Single - { Enable BOOL } // BOOL - } -} - // ************************************************************************* // SpaceServer to Simulator Messages @@ -202,7 +131,7 @@ version 1.053 // Neighbor List - Passed anytime neighbors change { - NeighborList High Trusted Unencoded + NeighborList High 3 Trusted Unencoded { NeighborBlock Multiple 4 { IP IPADDR } @@ -216,68 +145,11 @@ version 1.053 } -// Simulator Assignment - Tells a simulator where it is and who it's -// neighbors are -{ - SimulatorAssign Low Trusted Zerocoded - { - RegionInfo Single - { GridsPerEdge S32 } - { MetersPerGrid F32 } - { Handle U64 } - { UsecSinceStart U64 } - { SecPerDay U32 } - { SecPerYear U32 } - { SunDirection LLVector3 } - { SunAngVelocity LLVector3 } - { IP IPADDR } - { Port IPPORT } - } - { - NeighborBlock Multiple 4 - { IP IPADDR } - { Port IPPORT } - { PublicIP IPADDR } - { PublicPort IPPORT } - { Name Variable 1 } // string - { SimAccess U8 } - } -} - -// SpaceServerSimulatorTimeMessage - Allows simulator to resynch to world time -{ - SpaceServerSimulatorTimeMessage Low Trusted Unencoded - { - TimeInfo Single - { UsecSinceStart U64 } - { SecPerDay U32 } - { SecPerYear U32 } - { SunDirection LLVector3 } - { SunPhase F32 } - { SunAngVelocity LLVector3 } - } -} - -// ClosestSimulator - Passes the closest simulator back to a simulator -{ - ClosestSimulator Medium Trusted Unencoded - { - SimulatorBlock Single - { IP IPADDR } - { Port IPPORT } - { Handle U64 } - } - { - Viewer Single - { ID LLUUID } - } -} - // AvatarTextureUpdate // simulator -> dataserver // reliable { - AvatarTextureUpdate Low Trusted Zerocoded + AvatarTextureUpdate Low 4 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -300,7 +172,7 @@ version 1.053 // simulator -> dataserver // reliable { - SimulatorMapUpdate Low Trusted Unencoded + SimulatorMapUpdate Low 5 Trusted Unencoded { MapData Single { Flags U32 } @@ -312,7 +184,7 @@ version 1.053 // reliable // Used to upload a map image into the database (currently used only for Land For Sale) { - SimulatorSetMap Low Trusted Unencoded + SimulatorSetMap Low 6 Trusted Unencoded { MapData Single { RegionHandle U64 } @@ -325,14 +197,14 @@ version 1.053 // spaceserver -> simulator // reliable { - SubscribeLoad Low Trusted Unencoded + SubscribeLoad Low 7 Trusted Unencoded } // UnsubscribeLoad // spaceserver -> simulator // reliable { - UnsubscribeLoad Low Trusted Unencoded + UnsubscribeLoad Low 8 Trusted Unencoded } @@ -340,28 +212,10 @@ version 1.053 // Simulator to SpaceServer Messages // ************************************************************************ -// Simulator Start - Tells spaceserver that simulator is online and wants to be -// assigned. -{ - SimulatorStart Low Trusted Unencoded - { - ControlPort Single - { Port IPPORT } - { PublicIP IPADDR } - { PublicPort IPPORT } - } - { - PositionSuggestion Single - { Ignore BOOL } // if non-zero, SS should put it in the next available slot - { GridX S32 } - { GridY S32 } - } -} - // SimulatorReady - indicates the sim has finished loading its state // and is ready to receive updates from others { - SimulatorReady Low Trusted Zerocoded + SimulatorReady Low 9 Trusted Zerocoded { SimulatorBlock Single { SimName Variable 1 } @@ -382,7 +236,7 @@ version 1.053 // sim -> viewer // reliable { - TelehubInfo Low Trusted Unencoded + TelehubInfo Low 10 Trusted Unencoded { TelehubBlock Single { ObjectID LLUUID } // null if no telehub @@ -399,7 +253,7 @@ version 1.053 // SimulatorPresentAtLocation - indicates that the sim is present at a grid // location and passes what it believes its neighbors are { - SimulatorPresentAtLocation Low Trusted Unencoded + SimulatorPresentAtLocation Low 11 Trusted Unencoded { SimulatorPublicHostBlock Single { Port IPPORT } @@ -432,7 +286,7 @@ version 1.053 // simulator -> spaceserver // reliable { - SimulatorLoad Low Trusted Unencoded + SimulatorLoad Low 12 Trusted Unencoded { SimulatorLoad Single { TimeDilation F32 } @@ -449,7 +303,7 @@ version 1.053 // Simulator Shutdown Request - Tells spaceserver that a simulator is trying to shutdown { - SimulatorShutdownRequest Low Trusted Unencoded + SimulatorShutdownRequest Low 13 Trusted Unencoded } // **************************************************************************** @@ -458,16 +312,16 @@ version 1.053 // sim -> dataserver { - RegionPresenceRequestByRegionID Low Trusted Unencoded + RegionPresenceRequestByRegionID Low 14 Trusted Unencoded { RegionData Variable { RegionID LLUUID } } } -sim -> dataserver +// sim -> dataserver { - RegionPresenceRequestByHandle Low Trusted Unencoded + RegionPresenceRequestByHandle Low 15 Trusted Unencoded { RegionData Variable { RegionHandle U64 } @@ -476,7 +330,7 @@ sim -> dataserver // dataserver -> sim { - RegionPresenceResponse Low Trusted Zerocoded + RegionPresenceResponse Low 16 Trusted Zerocoded { RegionData Variable { RegionID LLUUID } @@ -488,59 +342,7 @@ sim -> dataserver { Message Variable 1 } } } - -// Record agent presence - this totally supercedes the TrackAgentSession -// and ClearAgentSessions functionality -{ - RecordAgentPresence Low Trusted Unencoded - { - RegionData Single - { RegionID LLUUID } - } - { - AgentData Variable - { AgentID LLUUID } - { SessionID LLUUID } - { SecureSessionID LLUUID } - { LocalX S16 } - { LocalY S16 } - { TimeToLive S32 } // in seconds - { Status S32 } - { EstateID U32 } - } -} - -// Erase a set of agent presence records. Useful during logout or kick. -{ - EraseAgentPresence Low Trusted Unencoded - { - AgentData Variable - { AgentID LLUUID } - } -} - -// request IP and port for agents -{ - AgentPresenceRequest Low Trusted Unencoded - { - AgentData Variable - { AgentID LLUUID } - } -} - -// response for agent locations -{ - AgentPresenceResponse Low Trusted Unencoded - { - AgentData Variable - { AgentID LLUUID } - { RegionIP IPADDR } - { RegionPort IPPORT } - { ValidUntil F64 } - { EstateID U32 } - } -} - + // **************************************************************************** // Simulator to dataserver messages @@ -548,7 +350,7 @@ sim -> dataserver // Updates SimName, EstateID and SimAccess using RegionID as a key { - UpdateSimulator Low Trusted Unencoded + UpdateSimulator Low 17 Trusted Unencoded { SimulatorInfo Single { RegionID LLUUID } @@ -559,42 +361,9 @@ sim -> dataserver } -// The simulator sends out this message from time to time -{ - TrackAgentSession Low Trusted Unencoded - { - RegionData Single - { RegionX F32 } - { RegionY F32 } - { SpaceIP IPADDR } - { EstateID U32 } - { AgentCount U32 } - } - { - SessionInfo Variable - { SessionID LLUUID } - { ViewerIP IPADDR } - { ViewerPort IPPORT } - { GlobalX F64 } - { GlobalY F64 } - } -} - - -// clear out sessions for this sim, because it's coming up or going down -{ - ClearAgentSessions Low Trusted Unencoded - { - RegionInfo Single - { RegionX U32 } - { RegionY U32 } - { SpaceIP IPADDR } - } -} - // record dwell time. { - LogDwellTime Low Trusted Unencoded + LogDwellTime Low 18 Trusted Unencoded { DwellInfo Single { AgentID LLUUID } @@ -610,7 +379,7 @@ sim -> dataserver // Disabled feature response message { - FeatureDisabled Low Trusted Unencoded + FeatureDisabled Low 19 Trusted Unencoded { FailureInfo Single { ErrorMessage Variable 1 } @@ -624,7 +393,7 @@ sim -> dataserver // from either the simulator or the dataserver, depending on how // the transaction failed. { - LogFailedMoneyTransaction Low Trusted Unencoded + LogFailedMoneyTransaction Low 20 Trusted Unencoded { TransactionData Single { TransactionID LLUUID } @@ -644,7 +413,7 @@ sim -> dataserver // complaint/bug-report - sim -> dataserver. see UserReport for details. // reliable { - UserReportInternal Low Trusted Zerocoded + UserReportInternal Low 21 Trusted Zerocoded { ReportData Single { ReportType U8 } @@ -672,7 +441,7 @@ sim -> dataserver // sim -> dataserver // reliable { - SetSimStatusInDatabase Low Trusted Unencoded + SetSimStatusInDatabase Low 22 Trusted Unencoded { Data Single { RegionID LLUUID } @@ -691,7 +460,7 @@ sim -> dataserver // that a given simulator is present and valid for a set amount of // time { - SetSimPresenceInDatabase Low Trusted Unencoded + SetSimPresenceInDatabase Low 23 Trusted Unencoded { SimData Single { RegionID LLUUID } @@ -711,12 +480,12 @@ sim -> dataserver // once we use local stats, this will include a region handle { - EconomyDataRequest Low NotTrusted Unencoded + EconomyDataRequest Low 24 NotTrusted Unencoded } // dataserver to sim, response w/ econ data { - EconomyData Low Trusted Zerocoded + EconomyData Low 25 Trusted Zerocoded { Info Single { ObjectCapacity S32 } @@ -748,7 +517,7 @@ sim -> dataserver // viewer -> sim -> data // reliable { - AvatarPickerRequest Low NotTrusted Unencoded + AvatarPickerRequest Low 26 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -763,7 +532,7 @@ sim -> dataserver // backend implementation which tracks if the user is a god. { - AvatarPickerRequestBackend Low Trusted Unencoded + AvatarPickerRequestBackend Low 27 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -781,7 +550,7 @@ sim -> dataserver // List of names to select a person // reliable { - AvatarPickerReply Low Trusted Unencoded + AvatarPickerReply Low 28 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -799,7 +568,7 @@ sim -> dataserver // Used for getting a list of places for the group land panel // and the user land holdings panel. NOT for the directory. { - PlacesQuery Low NotTrusted Zerocoded + PlacesQuery Low 29 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -825,7 +594,7 @@ sim -> dataserver // global x,y,z. Otherwise, use center of the AABB. // reliable { - PlacesReply Low Trusted Zerocoded + PlacesReply Low 30 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -856,7 +625,7 @@ sim -> dataserver // DirFindQuery viewer->sim // Message to start asking questions for the directory { - DirFindQuery Low NotTrusted Zerocoded + DirFindQuery Low 31 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -874,7 +643,7 @@ sim -> dataserver // DirFindQueryBackend sim->data // Trusted message generated by receipt of DirFindQuery to sim. { - DirFindQueryBackend Low Trusted Zerocoded + DirFindQueryBackend Low 32 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -894,7 +663,7 @@ sim -> dataserver // DirPlacesQuery viewer->sim // Used for the Find directory of places { - DirPlacesQuery Low NotTrusted Zerocoded + DirPlacesQuery Low 33 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -914,7 +683,7 @@ sim -> dataserver // DirPlacesQueryBackend sim->dataserver // Used for the Find directory of places. { - DirPlacesQueryBackend Low Trusted Zerocoded + DirPlacesQueryBackend Low 34 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -937,7 +706,7 @@ sim -> dataserver // global x,y,z. Otherwise, use center of the AABB. // reliable { - DirPlacesReply Low Trusted Zerocoded + DirPlacesReply Low 35 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -958,7 +727,7 @@ sim -> dataserver // DirPeopleReply { - DirPeopleReply Low Trusted Zerocoded + DirPeopleReply Low 36 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -969,7 +738,7 @@ sim -> dataserver } { QueryReplies Variable - { AgentID LLUUID } + { AgentID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } { Group Variable 1 } @@ -980,7 +749,7 @@ sim -> dataserver // DirEventsReply { - DirEventsReply Low Trusted Zerocoded + DirEventsReply Low 37 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1004,7 +773,7 @@ sim -> dataserver // dataserver -> userserver -> viewer // reliable { - DirGroupsReply Low Trusted Zerocoded + DirGroupsReply Low 38 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1026,7 +795,7 @@ sim -> dataserver // DirClassifiedQuery viewer->sim // reliable { - DirClassifiedQuery Low NotTrusted Zerocoded + DirClassifiedQuery Low 39 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1045,7 +814,7 @@ sim -> dataserver // DirClassifiedQueryBackend sim->dataserver // reliable { - DirClassifiedQueryBackend Low Trusted Zerocoded + DirClassifiedQueryBackend Low 40 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1065,7 +834,7 @@ sim -> dataserver // DirClassifiedReply dataserver->sim->viewer // reliable { - DirClassifiedReply Low Trusted Zerocoded + DirClassifiedReply Low 41 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1092,7 +861,7 @@ sim -> dataserver // This fills in the tabs of the Classifieds panel. // reliable { - AvatarClassifiedReply Low Trusted Unencoded + AvatarClassifiedReply Low 42 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1111,7 +880,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - ClassifiedInfoRequest Low NotTrusted Zerocoded + ClassifiedInfoRequest Low 43 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1129,7 +898,7 @@ sim -> dataserver // simulator -> viewer // reliable { - ClassifiedInfoReply Low Trusted Unencoded + ClassifiedInfoReply Low 44 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1161,7 +930,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - ClassifiedInfoUpdate Low NotTrusted Unencoded + ClassifiedInfoUpdate Low 45 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1188,7 +957,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - ClassifiedDelete Low NotTrusted Unencoded + ClassifiedDelete Low 46 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1207,7 +976,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - ClassifiedGodDelete Low NotTrusted Unencoded + ClassifiedGodDelete Low 47 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1221,66 +990,11 @@ sim -> dataserver } - -// DirPicksQuery viewer->sim -// reliable -{ - DirPicksQuery Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - QueryData Single - { QueryID LLUUID } - { QueryFlags U32 } - } -} - -// DirPicksQueryBackend sim->dataserver -// reliable -{ - DirPicksQueryBackend Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } - { - QueryData Single - { QueryID LLUUID } - { QueryFlags U32 } - { EstateID U32 } - { Godlike BOOL } - } -} - -// DirPicksReply dataserver->sim->viewer -// reliable -{ - DirPicksReply Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } - { - QueryData Single - { QueryID LLUUID } - } - { - QueryReplies Variable - { PickID LLUUID } - { Name Variable 1 } - { Enabled BOOL } - } -} - - // DirLandQuery viewer->sim // Special query for the land for sale/auction panel. // reliable { - DirLandQuery Low NotTrusted Zerocoded + DirLandQuery Low 48 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1300,7 +1014,7 @@ sim -> dataserver // DirLandQueryBackend sim->dataserver // Special query for the land for sale/auction panel. { - DirLandQueryBackend Low Trusted Zerocoded + DirLandQueryBackend Low 49 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1322,7 +1036,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - DirLandReply Low Trusted Zerocoded + DirLandReply Low 50 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1346,7 +1060,7 @@ sim -> dataserver // Special query for the land for sale/auction panel. // reliable { - DirPopularQuery Low NotTrusted Zerocoded + DirPopularQuery Low 51 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1363,7 +1077,7 @@ sim -> dataserver // Special query for the land for sale/auction panel. // reliable { - DirPopularQueryBackend Low Trusted Zerocoded + DirPopularQueryBackend Low 52 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1381,7 +1095,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - DirPopularReply Low Trusted Zerocoded + DirPopularReply Low 53 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1402,7 +1116,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - ParcelInfoRequest Low NotTrusted Unencoded + ParcelInfoRequest Low 54 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1418,7 +1132,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - ParcelInfoReply Low Trusted Zerocoded + ParcelInfoReply Low 55 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -1448,7 +1162,7 @@ sim -> dataserver // viewer -> simulator // reliable { - ParcelObjectOwnersRequest Low NotTrusted Unencoded + ParcelObjectOwnersRequest Low 56 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1460,44 +1174,12 @@ sim -> dataserver } } -// simulator -> dataserver -// reliable -{ - OnlineStatusRequest Low Trusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { QueryID LLUUID } - { EstateID U32 } - { Godlike BOOL } - { SpaceIP IPADDR } // check online for right farm - } - { - Data Variable - { ID LLUUID } - } -} - -// dataserver -> simulator -// reliable -{ - OnlineStatusReply Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { QueryID LLUUID } - } - { - Data Variable - { ID LLUUID } // only online agents are returned - } -} // ParcelObjectOwnersReply // simulator -> viewer // reliable { - ParcelObjectOwnersReply Low Trusted Zerocoded + ParcelObjectOwnersReply Low 57 Trusted Zerocoded { Data Variable { OwnerID LLUUID } @@ -1511,7 +1193,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - GroupNoticesListRequest Low NotTrusted Unencoded + GroupNoticesListRequest Low 58 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1527,7 +1209,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - GroupNoticesListReply Low Trusted Unencoded + GroupNoticesListReply Low 59 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1549,7 +1231,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - GroupNoticeRequest Low NotTrusted Unencoded + GroupNoticeRequest Low 60 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1566,7 +1248,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - GroupNoticeAdd Low Trusted Unencoded + GroupNoticeAdd Low 61 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1583,26 +1265,6 @@ sim -> dataserver } -// GroupNoticeDelete -// Delete a group notice from the database. -// viewer -> simulator -> dataserver -// reliable -{ - GroupNoticeDelete Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - Data Single - { GroupNoticeID LLUUID } - { GroupID LLUUID } - } -} - - - // **************************************************************************** // Teleport messages // @@ -1625,7 +1287,7 @@ sim -> dataserver // TeleportRequest // viewer -> sim specifying exact teleport destination { - TeleportRequest Low NotTrusted Unencoded + TeleportRequest Low 62 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1642,7 +1304,7 @@ sim -> dataserver // TeleportLocationRequest // viewer -> sim specifying exact teleport destination { - TeleportLocationRequest Low NotTrusted Unencoded + TeleportLocationRequest Low 63 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1660,7 +1322,7 @@ sim -> dataserver // sim -> viewer reply telling the viewer that we've successfully TP'd // to somewhere else within the sim { - TeleportLocal Low Trusted Unencoded + TeleportLocal Low 64 Trusted Unencoded { Info Single { AgentID LLUUID } @@ -1674,7 +1336,7 @@ sim -> dataserver // TeleportLandmarkRequest viewer->sim // teleport to landmark asset ID destination. use LLUUD::null for home. { - TeleportLandmarkRequest Low NotTrusted Zerocoded + TeleportLandmarkRequest Low 65 NotTrusted Zerocoded { Info Single { AgentID LLUUID } @@ -1686,7 +1348,7 @@ sim -> dataserver // TeleportProgress sim->viewer // Tell the agent how the teleport is going. { - TeleportProgress Low Trusted Unencoded + TeleportProgress Low 66 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1701,7 +1363,7 @@ sim -> dataserver // DataHomeLocationRequest sim->data // Request { - DataHomeLocationRequest Low Trusted Zerocoded + DataHomeLocationRequest Low 67 Trusted Zerocoded { Info Single { AgentID LLUUID } @@ -1712,7 +1374,7 @@ sim -> dataserver // DataHomeLocationReply data->sim // response is the location of agent home. { - DataHomeLocationReply Low Trusted Unencoded + DataHomeLocationReply Low 68 Trusted Unencoded { Info Single { AgentID LLUUID } @@ -1722,48 +1384,12 @@ sim -> dataserver } } -// SpaceLocationTeleportRequest sim->space -// Reuqest for info about remote location -{ - SpaceLocationTeleportRequest Low Trusted Unencoded - { - Info Single - { AgentID LLUUID } - { SessionID LLUUID } - { CircuitCode U32 } - { RegionHandle U64 } - { Position LLVector3 } // region - { LookAt LLVector3 } - { TravelAccess U8 } - { ParentEstateID U32 } - { TeleportFlags U32 } - } -} - -// SpaceLocationTeleportReply space->sim -// with info about remote location -{ - SpaceLocationTeleportReply Low Trusted Unencoded - { - Info Single - { AgentID LLUUID } - { LocationID U32 } - { SimIP IPADDR } - { SimPort IPPORT } - { RegionHandle U64 } - { Position LLVector3 } // region - { LookAt LLVector3 } - { SimName Variable 1 } - { SimAccess U8 } - { TeleportFlags U32 } - } -} // TeleportFinish sim->viewer // called when all of the information has been collected and readied for // the agent. { - TeleportFinish Low Trusted Unencoded + TeleportFinish Low 69 Trusted Unencoded { Info Single { AgentID LLUUID } @@ -1786,7 +1412,7 @@ sim -> dataserver // packet is acked, the original instant message is finally forwarded to // TargetID. { - StartLure Low NotTrusted Unencoded + StartLure Low 70 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1807,7 +1433,7 @@ sim -> dataserver // Message from target of lure to begin the teleport process on the // local simulator. { - TeleportLureRequest Low NotTrusted Unencoded + TeleportLureRequest Low 71 NotTrusted Unencoded { Info Single { AgentID LLUUID } @@ -1820,7 +1446,7 @@ sim -> dataserver // TeleportCancel viewer->sim // reliable { - TeleportCancel Low NotTrusted Unencoded + TeleportCancel Low 72 NotTrusted Unencoded { Info Single { AgentID LLUUID } @@ -1828,28 +1454,11 @@ sim -> dataserver } } -// CompleteLure sim->space -// message with final necessary info about accepted lure. The -// spaceserver will reply with a SpaceLocationTeleportReply or -// TeleportFailed and it becomes like any other teleport. -{ - CompleteLure Low Trusted Unencoded - { - Info Single - { AgentID LLUUID } - { SessionID LLUUID } - { LureID LLUUID } - { CircuitCode U32 } - { TravelAccess U8 } - { ParentEstateID U32 } - { TeleportFlags U32 } - } -} // TeleportStart sim->viewer // announce a successful teleport request to the viewer. { - TeleportStart Low Trusted Unencoded + TeleportStart Low 73 Trusted Unencoded { Info Single { TeleportFlags U32 } @@ -1859,7 +1468,7 @@ sim -> dataserver // TeleportFailed somehwere->sim->viewer // announce failure of teleport request { - TeleportFailed Low Trusted Unencoded + TeleportFailed Low 74 Trusted Unencoded { Info Single { AgentID LLUUID } @@ -1867,41 +1476,6 @@ sim -> dataserver } } -// *************************************************************************** -// Leader Board messages -// *************************************************************************** -{ - LeaderBoardRequest Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - { Type S32 } - } -} - -{ - LeaderBoardData Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } - { - BoardData Single - { Type S32 } - { MinPlace S32 } - { MaxPlace S32 } - { TimeString Variable 1 } // string - } - { - Entry Variable - { Sequence S32 } - { Place S32 } - { ID LLUUID } - { Score S32 } - { Name Fixed 32 } // only send 32 characters of the name, to fit in an MTU - } -} // *************************************************************************** // Viewer to Simulator Messages @@ -1909,7 +1483,7 @@ sim -> dataserver // Undo { - Undo Low NotTrusted Unencoded + Undo Low 75 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1925,7 +1499,7 @@ sim -> dataserver // Redo { - Redo Low NotTrusted Unencoded + Redo Low 76 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1940,7 +1514,7 @@ sim -> dataserver // UndoLand { - UndoLand Low NotTrusted Unencoded + UndoLand Low 77 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1949,19 +1523,9 @@ sim -> dataserver } -// RedoLand -{ - RedoLand Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } -} - // AgentPause - viewer occasionally will block, inform simulator of this fact { - AgentPause Low NotTrusted Unencoded + AgentPause Low 78 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1972,7 +1536,7 @@ sim -> dataserver // AgentResume - unblock the agent { - AgentResume Low NotTrusted Unencoded + AgentResume Low 79 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -1992,7 +1556,7 @@ sim -> dataserver // Center is region local (JNC 8.16.2001) // Camera center is region local (JNC 8.29.2001) { - AgentUpdate High NotTrusted Zerocoded + AgentUpdate High 4 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2015,7 +1579,7 @@ sim -> dataserver // normal speech, shout, whisper. // with the specified radius { - ChatFromViewer Low NotTrusted Zerocoded + ChatFromViewer Low 80 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2032,7 +1596,7 @@ sim -> dataserver // AgentThrottle { - AgentThrottle Low NotTrusted Zerocoded + AgentThrottle Low 81 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2049,7 +1613,7 @@ sim -> dataserver // AgentFOV - Update to agent's field of view, angle is vertical, single F32 float in radians { - AgentFOV Low NotTrusted Unencoded + AgentFOV Low 82 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2067,7 +1631,7 @@ sim -> dataserver // AgentHeightWidth - Update to height and aspect, sent as height/width to save space // Usually sent when window resized or created { - AgentHeightWidth Low NotTrusted Unencoded + AgentHeightWidth Low 83 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2085,7 +1649,7 @@ sim -> dataserver // AgentSetAppearance - Update to agent appearance { - AgentSetAppearance Low NotTrusted Zerocoded + AgentSetAppearance Low 84 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2111,7 +1675,7 @@ sim -> dataserver // AgentAnimation - Update animation state // viewer --> simulator { - AgentAnimation High NotTrusted Unencoded + AgentAnimation High 5 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2130,7 +1694,7 @@ sim -> dataserver // AgentRequestSit - Try to sit on an object { - AgentRequestSit High NotTrusted Zerocoded + AgentRequestSit High 6 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2145,7 +1709,7 @@ sim -> dataserver // AgentSit - Actually sit on object { - AgentSit High NotTrusted Unencoded + AgentSit High 7 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2153,21 +1717,10 @@ sim -> dataserver } } -// AgentQuit - Sent by viewer when viewer exits normally -// Fuse is used to allow Reset to be passed to neighbors -// *NOTE: obsolete -{ - AgentQuit Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } -} // quit message sent between simulators { - AgentQuitCopy Low NotTrusted Unencoded + AgentQuitCopy Low 85 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2183,7 +1736,7 @@ sim -> dataserver // Request Image - Sent by the viewer to request a specified image at a specified resolution { - RequestImage High NotTrusted Unencoded + RequestImage High 8 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2202,7 +1755,7 @@ sim -> dataserver // ImageNotInDatabase // Simulator informs viewer that a requsted image definitely does not exist in the asset database { - ImageNotInDatabase Low Trusted Unencoded + ImageNotInDatabase Low 86 Trusted Unencoded { ImageID Single { ID LLUUID } @@ -2212,7 +1765,7 @@ sim -> dataserver // RebakeAvatarTextures // simulator -> viewer request when a temporary baked avatar texture is not found { - RebakeAvatarTextures Low Trusted Unencoded + RebakeAvatarTextures Low 87 Trusted Unencoded { TextureData Single { TextureID LLUUID } @@ -2223,7 +1776,7 @@ sim -> dataserver // SetAlwaysRun // Lets the viewer choose between running and walking { - SetAlwaysRun Low NotTrusted Unencoded + SetAlwaysRun Low 88 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2245,7 +1798,7 @@ sim -> dataserver // // Data field is opaque type-specific data for this object { - ObjectAdd Medium NotTrusted Zerocoded + ObjectAdd Medium 1 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2294,7 +1847,7 @@ sim -> dataserver // ObjectDelete // viewer -> simulator { - ObjectDelete Low NotTrusted Zerocoded + ObjectDelete Low 89 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2312,7 +1865,7 @@ sim -> dataserver // viewer -> simulator // Makes a copy of a set of objects, offset by a given amount { - ObjectDuplicate Low NotTrusted Zerocoded + ObjectDuplicate Low 90 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2336,7 +1889,7 @@ sim -> dataserver // Makes a copy of an object, using the add object raycast // code to abut it to other objects. { - ObjectDuplicateOnRay Low NotTrusted Zerocoded + ObjectDuplicateOnRay Low 91 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2363,7 +1916,7 @@ sim -> dataserver // updates position, rotation and scale in one message // positions sent as region-local floats { - MultipleObjectUpdate Medium NotTrusted Zerocoded + MultipleObjectUpdate Medium 2 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2388,7 +1941,7 @@ sim -> dataserver // CacheMissType 0 => full object (viewer doesn't have it) // CacheMissType 1 => CRC mismatch only { - RequestMultipleObjects Medium NotTrusted Zerocoded + RequestMultipleObjects Medium 3 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2405,7 +1958,7 @@ sim -> dataserver // ObjectPosition // viewer -> simulator { - ObjectPosition Medium NotTrusted Zerocoded + ObjectPosition Medium 4 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2422,7 +1975,7 @@ sim -> dataserver // ObjectScale // viewer -> simulator { - ObjectScale Low NotTrusted Zerocoded + ObjectScale Low 92 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2439,7 +1992,7 @@ sim -> dataserver // ObjectRotation // viewer -> simulator { - ObjectRotation Low NotTrusted Zerocoded + ObjectRotation Low 93 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2456,7 +2009,7 @@ sim -> dataserver // ObjectFlagUpdate // viewer -> simulator { - ObjectFlagUpdate Low NotTrusted Zerocoded + ObjectFlagUpdate Low 94 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2473,7 +2026,7 @@ sim -> dataserver // ObjectClickAction // viewer -> simulator { - ObjectClickAction Low NotTrusted Zerocoded + ObjectClickAction Low 95 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2490,7 +2043,7 @@ sim -> dataserver // ObjectImage // viewer -> simulator { - ObjectImage Low NotTrusted Zerocoded + ObjectImage Low 96 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2506,7 +2059,7 @@ sim -> dataserver { - ObjectMaterial Low NotTrusted Zerocoded + ObjectMaterial Low 97 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2521,7 +2074,7 @@ sim -> dataserver { - ObjectShape Low NotTrusted Zerocoded + ObjectShape Low 98 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2552,7 +2105,7 @@ sim -> dataserver } { - ObjectExtraParams Low NotTrusted Zerocoded + ObjectExtraParams Low 99 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2574,7 +2127,7 @@ sim -> dataserver // TODO: Eliminate god-bit. Maybe not. God-bit is ok, because it's // known on the server. { - ObjectOwner Low NotTrusted Zerocoded + ObjectOwner Low 100 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2596,7 +2149,7 @@ sim -> dataserver // To make the object part of no group, set GroupID = LLUUID::null. // This call only works if objectid.ownerid == agentid. { - ObjectGroup Low NotTrusted Zerocoded + ObjectGroup Low 101 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2611,7 +2164,7 @@ sim -> dataserver // Attempt to buy an object. This will only pack root objects. { - ObjectBuy Low NotTrusted Zerocoded + ObjectBuy Low 102 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2632,7 +2185,7 @@ sim -> dataserver // buy object inventory. If the transaction succeeds, it will add // inventory to the agent, and potentially remove the original. { - BuyObjectInventory Low NotTrusted Zerocoded + BuyObjectInventory Low 103 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2649,7 +2202,7 @@ sim -> dataserver // sim -> viewer // Used to propperly handle buying asset containers { - DerezContainer Low Trusted Zerocoded + DerezContainer Low 104 Trusted Zerocoded { Data Single { ObjectID LLUUID } @@ -2663,7 +2216,7 @@ sim -> dataserver // If set is false, tries to turn off bits in mask. // BUG: This just forces the permissions field. { - ObjectPermissions Low NotTrusted Zerocoded + ObjectPermissions Low 105 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2684,7 +2237,7 @@ sim -> dataserver // set object sale information { - ObjectSaleInfo Low NotTrusted Zerocoded + ObjectSaleInfo Low 106 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2701,7 +2254,7 @@ sim -> dataserver // set object names { - ObjectName Low NotTrusted Zerocoded + ObjectName Low 107 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2716,7 +2269,7 @@ sim -> dataserver // set object descriptions { - ObjectDescription Low NotTrusted Zerocoded + ObjectDescription Low 108 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2731,7 +2284,7 @@ sim -> dataserver // set object category { - ObjectCategory Low NotTrusted Zerocoded + ObjectCategory Low 109 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2748,7 +2301,7 @@ sim -> dataserver // Variable object data because rectangular selection can // generate a large list very quickly. { - ObjectSelect Low NotTrusted Zerocoded + ObjectSelect Low 110 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2764,7 +2317,7 @@ sim -> dataserver // ObjectDeselect { - ObjectDeselect Low NotTrusted Zerocoded + ObjectDeselect Low 111 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2779,7 +2332,7 @@ sim -> dataserver // ObjectAttach { - ObjectAttach Low NotTrusted Zerocoded + ObjectAttach Low 112 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2795,7 +2348,7 @@ sim -> dataserver // ObjectDetach -- derezzes an attachment, marking its item in your inventory as not "(worn)" { - ObjectDetach Low NotTrusted Unencoded + ObjectDetach Low 113 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2810,7 +2363,7 @@ sim -> dataserver // ObjectDrop -- drops an attachment from your avatar onto the ground { - ObjectDrop Low NotTrusted Unencoded + ObjectDrop Low 114 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2825,7 +2378,7 @@ sim -> dataserver // ObjectLink { - ObjectLink Low NotTrusted Unencoded + ObjectLink Low 115 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2839,56 +2392,22 @@ sim -> dataserver // ObjectDelink { - ObjectDelink Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - ObjectData Variable - { ObjectLocalID U32 } - } -} - -// ObjectHinge -{ - ObjectHinge Low NotTrusted Unencoded + ObjectDelink Low 116 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { - JointType Single - { Type U8 } - } - { ObjectData Variable { ObjectLocalID U32 } } - -} - -// ObjectDehinge -{ - ObjectDehinge Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - ObjectData Variable - { ObjectLocalID U32 } - } - } // ObjectGrab { - ObjectGrab Low NotTrusted Zerocoded + ObjectGrab Low 117 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2907,7 +2426,7 @@ sim -> dataserver // TimeSinceLast could go to 1 byte, since capped // at 100 on sim. { - ObjectGrabUpdate Low NotTrusted Zerocoded + ObjectGrabUpdate Low 118 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2925,7 +2444,7 @@ sim -> dataserver // ObjectDeGrab { - ObjectDeGrab Low NotTrusted Unencoded + ObjectDeGrab Low 119 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -2940,7 +2459,7 @@ sim -> dataserver // ObjectSpinStart { - ObjectSpinStart Low NotTrusted Zerocoded + ObjectSpinStart Low 120 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2955,7 +2474,7 @@ sim -> dataserver // ObjectSpinUpdate { - ObjectSpinUpdate Low NotTrusted Zerocoded + ObjectSpinUpdate Low 121 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2971,7 +2490,7 @@ sim -> dataserver // ObjectSpinStop { - ObjectSpinStop Low NotTrusted Zerocoded + ObjectSpinStop Low 122 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2986,7 +2505,7 @@ sim -> dataserver // Export selected objects // viewer->sim { - ObjectExportSelected Low NotTrusted Zerocoded + ObjectExportSelected Low 123 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -2999,27 +2518,11 @@ sim -> dataserver } } -// Import an object -// viewer->sim -{ - ObjectImport Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { FolderID LLUUID } - } - { - AssetData Single - { FileID LLUUID 1 } - { ObjectName Variable 1 } - { Description Variable 1 } - } -} // ModifyLand - sent to modify a piece of land on a simulator. // viewer -> sim { - ModifyLand Low NotTrusted Zerocoded + ModifyLand Low 124 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3047,7 +2550,7 @@ sim -> dataserver // viewer->sim // requires administrative access { - VelocityInterpolateOn Low NotTrusted Unencoded + VelocityInterpolateOn Low 125 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3060,7 +2563,7 @@ sim -> dataserver // viewer->sim // requires administrative access { - VelocityInterpolateOff Low NotTrusted Unencoded + VelocityInterpolateOff Low 126 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3072,7 +2575,7 @@ sim -> dataserver // viewer->sim // requires administrative access { - StateSave Low NotTrusted Unencoded + StateSave Low 127 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3087,7 +2590,7 @@ sim -> dataserver // ReportAutosaveCrash // sim->launcher { - ReportAutosaveCrash Low NotTrusted Unencoded + ReportAutosaveCrash Low 128 NotTrusted Unencoded { AutosaveData Single { PID S32 } @@ -3097,7 +2600,7 @@ sim -> dataserver // SimWideDeletes { - SimWideDeletes Low NotTrusted Unencoded + SimWideDeletes Low 129 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3115,7 +2618,7 @@ sim -> dataserver // Medium frequency because it is driven by mouse hovering over objects, which // occurs at high rates. { - RequestObjectPropertiesFamily Medium NotTrusted Zerocoded + RequestObjectPropertiesFamily Medium 5 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3133,7 +2636,7 @@ sim -> dataserver // coarse location update so that we know who you are tracking. // To stop tracking - send a null uuid as the prey. { - TrackAgent Low NotTrusted Unencoded + TrackAgent Low 130 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3148,7 +2651,7 @@ sim -> dataserver // end viewer to simulator section { - ViewerStats Low NotTrusted Zerocoded + ViewerStats Low 131 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3203,7 +2706,7 @@ sim -> dataserver // ScriptAnswerYes // reliable { - ScriptAnswerYes Low NotTrusted Unencoded + ScriptAnswerYes Low 132 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3221,7 +2724,7 @@ sim -> dataserver // complaint/bug-report // reliable { - UserReport Low NotTrusted Zerocoded + UserReport Low 133 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3252,7 +2755,7 @@ sim -> dataserver // AlertMessage // Specifies the text to be posted in an alert dialog { - AlertMessage Low Trusted Unencoded + AlertMessage Low 134 Trusted Unencoded { AlertData Single { Message Variable 1 } @@ -3262,7 +2765,7 @@ sim -> dataserver // Send an AlertMessage to the named agent. // usually dataserver->simulator { - AgentAlertMessage Low Trusted Unencoded + AgentAlertMessage Low 135 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3278,7 +2781,7 @@ sim -> dataserver // MeanCollisionAlert // Specifies the text to be posted in an alert dialog { - MeanCollisionAlert Low Trusted Zerocoded + MeanCollisionAlert Low 136 Trusted Zerocoded { MeanCollision Variable { Victim LLUUID } @@ -3292,7 +2795,7 @@ sim -> dataserver // ViewerFrozenMessage // Specifies the text to be posted in an alert dialog { - ViewerFrozenMessage Low Trusted Unencoded + ViewerFrozenMessage Low 137 Trusted Unencoded { FrozenData Single { Data BOOL } @@ -3302,7 +2805,7 @@ sim -> dataserver // Health Message // Tells viewer what agent health is { - HealthMessage Low Trusted Zerocoded + HealthMessage Low 138 Trusted Zerocoded { HealthData Single { Health F32 } @@ -3315,7 +2818,7 @@ sim -> dataserver // Viewer can optionally use position to animate // If audible is CHAT_NOT_AUDIBLE, message will not be valid { - ChatFromSimulator Low Trusted Unencoded + ChatFromSimulator Low 139 Trusted Unencoded { ChatData Single { FromName Variable 1 } @@ -3332,7 +2835,7 @@ sim -> dataserver // Simulator statistics packet (goes out to viewer and dataserver/spaceserver) { - SimStats Low Trusted Unencoded + SimStats Low 140 Trusted Unencoded { Region Single { RegionX U32 } @@ -3350,7 +2853,7 @@ sim -> dataserver // viewer -> sim // reliable { - RequestRegionInfo Low NotTrusted Unencoded + RequestRegionInfo Low 141 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3364,7 +2867,7 @@ sim -> dataserver // sim -> viewer // reliable { - RegionInfo Low NotTrusted Zerocoded + RegionInfo Low 142 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3397,7 +2900,7 @@ sim -> dataserver // viewer -> sim // reliable { - GodUpdateRegionInfo Low NotTrusted Zerocoded + GodUpdateRegionInfo Low 143 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3422,7 +2925,7 @@ sim -> dataserver //to request the most up to date region for the requesting //region to redirect teleports to { - NearestLandingRegionRequest Low Trusted Unencoded + NearestLandingRegionRequest Low 144 Trusted Unencoded { RequestingRegionData Single { RegionHandle U64 } @@ -3435,7 +2938,7 @@ sim -> dataserver //to the redirectregion request stating which region //the requesting region should redirect teleports to if necessary { - NearestLandingRegionReply Low Trusted Unencoded + NearestLandingRegionReply Low 145 Trusted Unencoded { LandingRegionData Single { RegionHandle U64 } @@ -3448,7 +2951,7 @@ sim -> dataserver //to have the dataserver note/clear in the db //that the region has updated it's nearest landing point { - NearestLandingRegionUpdated Low Trusted Unencoded + NearestLandingRegionUpdated Low 146 Trusted Unencoded { RegionData Single { RegionHandle U64 } @@ -3461,7 +2964,7 @@ sim -> dataserver //Sent from the region to the data server //to note that the region's teleportation landing status has changed { - TeleportLandingStatusChanged Low Trusted Unencoded + TeleportLandingStatusChanged Low 147 Trusted Unencoded { RegionData Single { RegionHandle U64 } @@ -3474,7 +2977,7 @@ sim -> dataserver // sim -> viewer // reliable { - RegionHandshake Low Trusted Zerocoded + RegionHandshake Low 148 Trusted Zerocoded { RegionInfo Single { RegionFlags U32 } @@ -3502,6 +3005,10 @@ sim -> dataserver { TerrainHeightRange10 F32 } { TerrainHeightRange11 F32 } } + { + RegionInfo2 Single + { RegionID LLUUID } + } } // RegionHandshakeReply @@ -3513,7 +3020,7 @@ sim -> dataserver // After the simulator receives this, it will start sending // data about objects. { - RegionHandshakeReply Low NotTrusted Zerocoded + RegionHandshakeReply Low 149 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -3531,7 +3038,7 @@ sim -> dataserver // and where someone you are tracking is located. They are -1 if not // applicable. { - CoarseLocationUpdate Medium Trusted Unencoded + CoarseLocationUpdate Medium 6 Trusted Unencoded { Location Variable { X U8 } @@ -3547,7 +3054,7 @@ sim -> dataserver // ImageData - sent to viewer to transmit information about an image { - ImageData High Trusted Unencoded + ImageData High 9 Trusted Unencoded { ImageID Single { ID LLUUID } @@ -3563,7 +3070,7 @@ sim -> dataserver // ImagePacket - follow on image data for images having > 1 packet of data { - ImagePacket High Trusted Unencoded + ImagePacket High 10 Trusted Unencoded { ImageID Single { ID LLUUID } @@ -3578,7 +3085,7 @@ sim -> dataserver // LayerData - Sent to viewer - encodes layer data { - LayerData High Trusted Unencoded + LayerData High 11 Trusted Unencoded { LayerID Single { Type U8 } @@ -3600,7 +3107,7 @@ sim -> dataserver // // Data is type-specific opaque data for this object { - ObjectUpdate High Trusted Zerocoded + ObjectUpdate High 12 Trusted Zerocoded { RegionData Single { RegionHandle U64 } @@ -3676,7 +3183,7 @@ sim -> dataserver // ObjectUpdateCompressed { - ObjectUpdateCompressed High Trusted Unencoded + ObjectUpdateCompressed High 13 Trusted Unencoded { RegionData Single { RegionHandle U64 } @@ -3692,7 +3199,7 @@ sim -> dataserver // ObjectUpdateCached // reliable { - ObjectUpdateCached High Trusted Unencoded + ObjectUpdateCached High 14 Trusted Unencoded { RegionData Single { RegionHandle U64 } @@ -3708,7 +3215,7 @@ sim -> dataserver // packed terse object update format { - ImprovedTerseObjectUpdate High Trusted Unencoded + ImprovedTerseObjectUpdate High 15 Trusted Unencoded { RegionData Single { RegionHandle U64 } @@ -3724,30 +3231,18 @@ sim -> dataserver // KillObject - Sent by objects to the viewer to tell them to kill themselves { - KillObject High Trusted Unencoded + KillObject High 16 Trusted Unencoded { ObjectData Variable { ID U32 } } } -// AgentToNewRegion - tells the viewer that it's agent has moved - -{ - AgentToNewRegion High Trusted Unencoded - { - RegionData Single - { SessionID LLUUID } - { IP IPADDR } - { Port IPPORT } - { Handle U64 } - } -} // CrossedRegion - new way to tell a viewer it has gone across a region // boundary { - CrossedRegion Medium Trusted Unencoded + CrossedRegion Medium 7 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3770,7 +3265,7 @@ sim -> dataserver // SimulatorViewerTimeMessage - Allows viewer to resynch to world time { - SimulatorViewerTimeMessage Low Trusted Unencoded + SimulatorViewerTimeMessage Low 150 Trusted Unencoded { TimeInfo Single { UsecSinceStart U64 } @@ -3785,7 +3280,7 @@ sim -> dataserver // EnableSimulator - Preps a viewer to receive data from a simulator { - EnableSimulator Low Trusted Unencoded + EnableSimulator Low 151 Trusted Unencoded { SimulatorInfo Single { Handle U64 } @@ -3797,14 +3292,14 @@ sim -> dataserver // DisableThisSimulator - Tells a viewer not to expect data from this simulator anymore { - DisableSimulator Low Trusted Unencoded + DisableSimulator Low 152 Trusted Unencoded } // ConfirmEnableSimulator - A confirmation message sent from simulator to neighbors that the simulator // has successfully been enabled by the viewer { - ConfirmEnableSimulator Medium Trusted Unencoded + ConfirmEnableSimulator Medium 8 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -3818,7 +3313,7 @@ sim -> dataserver // Request a new transfer (target->source) { - TransferRequest Low NotTrusted Zerocoded + TransferRequest Low 153 NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } @@ -3832,7 +3327,7 @@ sim -> dataserver // Return info about a transfer/initiate transfer (source->target) // Possibly should have a Params field like above { - TransferInfo Low NotTrusted Zerocoded + TransferInfo Low 154 NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } @@ -3845,7 +3340,7 @@ sim -> dataserver } { - TransferPacket High NotTrusted Unencoded + TransferPacket High 17 NotTrusted Unencoded { TransferData Single { TransferID LLUUID } @@ -3858,7 +3353,7 @@ sim -> dataserver // Abort a transfer in progress (either from target->source or source->target) { - TransferAbort Low NotTrusted Zerocoded + TransferAbort Low 155 NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } @@ -3866,16 +3361,6 @@ sim -> dataserver } } -// Change the priority of a transfer (target->source) -{ - TransferPriority Low NotTrusted Zerocoded - { - TransferInfo Single - { TransferID LLUUID } - { ChannelType S32 } - { Priority F32 } - } -} //----------------------------------------------------------------------------- // General file transfer @@ -3883,7 +3368,7 @@ sim -> dataserver // RequestXfer - request an arbitrary xfer { - RequestXfer Low NotTrusted Zerocoded + RequestXfer Low 156 NotTrusted Zerocoded { XferID Single { ID U64 } @@ -3898,7 +3383,7 @@ sim -> dataserver // SendXferPacket - send an additional packet of an arbitrary xfer from sim -> viewer { - SendXferPacket High NotTrusted Unencoded + SendXferPacket High 18 NotTrusted Unencoded { XferID Single { ID U64 } @@ -3912,7 +3397,7 @@ sim -> dataserver // ConfirmXferPacket { - ConfirmXferPacket High NotTrusted Unencoded + ConfirmXferPacket High 19 NotTrusted Unencoded { XferID Single { ID U64 } @@ -3922,7 +3407,7 @@ sim -> dataserver // AbortXfer { - AbortXfer Low NotTrusted Unencoded + AbortXfer Low 157 NotTrusted Unencoded { XferID Single { ID U64 } @@ -3935,19 +3420,10 @@ sim -> dataserver //----------------------------------------------------------------------------- -// RequestAvatarInfo -{ - RequestAvatarInfo Low Trusted Unencoded - { - DataBlock Single - { FullID LLUUID } - } -} - // AvatarAnimation - Update animation state // simulator --> viewer { - AvatarAnimation High Trusted Unencoded + AvatarAnimation High 20 Trusted Unencoded { Sender Single { ID LLUUID } @@ -3970,7 +3446,7 @@ sim -> dataserver // AvatarAppearance - Update visual params { - AvatarAppearance Low Trusted Zerocoded + AvatarAppearance Low 158 Trusted Zerocoded { Sender Single { ID LLUUID } @@ -3988,7 +3464,7 @@ sim -> dataserver // AvatarSitResponse - response to a request to sit on an object { - AvatarSitResponse High Trusted Zerocoded + AvatarSitResponse High 21 Trusted Zerocoded { SitObject Single { ID LLUUID } @@ -4006,7 +3482,7 @@ sim -> dataserver // SetFollowCamProperties { - SetFollowCamProperties Low Trusted Unencoded + SetFollowCamProperties Low 159 Trusted Unencoded { ObjectData Single { ObjectID LLUUID } @@ -4020,7 +3496,7 @@ sim -> dataserver // ClearFollowCamProperties { - ClearFollowCamProperties Low Trusted Unencoded + ClearFollowCamProperties Low 160 Trusted Unencoded { ObjectData Single { ObjectID LLUUID } @@ -4029,7 +3505,7 @@ sim -> dataserver // CameraConstraint - new camera distance limit (based on collision with objects) { - CameraConstraint High Trusted Zerocoded + CameraConstraint High 22 Trusted Zerocoded { CameraCollidePlane Single { Plane LLVector4 } @@ -4040,7 +3516,7 @@ sim -> dataserver // Extended information such as creator, permissions, etc. // Medium because potentially driven by mouse hover events. { - ObjectProperties Medium Trusted Zerocoded + ObjectProperties Medium 9 Trusted Zerocoded { ObjectData Variable { ObjectID LLUUID } @@ -4077,7 +3553,7 @@ sim -> dataserver // ObjectPropertiesFamily // Medium because potentially driven by mouse hover events. { - ObjectPropertiesFamily Medium Trusted Zerocoded + ObjectPropertiesFamily Medium 10 Trusted Zerocoded { ObjectData Single { RequestFlags U32 } @@ -4102,7 +3578,7 @@ sim -> dataserver // RequestPayPrice // viewer -> sim { - RequestPayPrice Low NotTrusted Unencoded + RequestPayPrice Low 161 NotTrusted Unencoded { ObjectData Single { ObjectID LLUUID } @@ -4112,7 +3588,7 @@ sim -> dataserver // PayPriceReply // sim -> viewer { - PayPriceReply Low Trusted Unencoded + PayPriceReply Low 162 Trusted Unencoded { ObjectData Single { ObjectID LLUUID } @@ -4132,7 +3608,7 @@ sim -> dataserver // ROUTED dataserver -> userserver -> spaceserver -> simulator -> viewer // reliable, but that may not matter if a system component is quitting { - KickUser Low Trusted Unencoded + KickUser Low 163 Trusted Unencoded { TargetBlock Single { TargetIP IPADDR } // U32 encoded IP @@ -4149,7 +3625,7 @@ sim -> dataserver // ack sent from the simulator up to the main database so that login // can continue. { - KickUserAck Low Trusted Unencoded + KickUserAck Low 164 Trusted Unencoded { UserInfo Single { SessionID LLUUID } @@ -4162,7 +3638,7 @@ sim -> dataserver // viewer -> sim // reliable { - GodKickUser Low NotTrusted Unencoded + GodKickUser Low 165 NotTrusted Unencoded { UserInfo Single { GodID LLUUID } @@ -4176,7 +3652,7 @@ sim -> dataserver // SystemKickUser // user->space, reliable { - SystemKickUser Low Trusted Unencoded + SystemKickUser Low 166 Trusted Unencoded { AgentInfo Variable { AgentID LLUUID } @@ -4187,7 +3663,7 @@ sim -> dataserver // viewer -> sim // reliable { - EjectUser Low NotTrusted Unencoded + EjectUser Low 167 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4205,7 +3681,7 @@ sim -> dataserver // viewer -> sim // reliable { - FreezeUser Low NotTrusted Unencoded + FreezeUser Low 168 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4223,7 +3699,7 @@ sim -> dataserver // viewer -> simulator // reliable { - AvatarPropertiesRequest Low NotTrusted Unencoded + AvatarPropertiesRequest Low 169 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4236,7 +3712,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - AvatarPropertiesRequestBackend Low Trusted Unencoded + AvatarPropertiesRequestBackend Low 170 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4250,7 +3726,7 @@ sim -> dataserver // simulator -> viewer // reliable { - AvatarPropertiesReply Low Trusted Zerocoded + AvatarPropertiesReply Low 171 Trusted Zerocoded { AgentData Single { AgentID LLUUID } // your id @@ -4271,7 +3747,7 @@ sim -> dataserver } { - AvatarInterestsReply Low Trusted Zerocoded + AvatarInterestsReply Low 172 Trusted Zerocoded { AgentData Single { AgentID LLUUID } // your id @@ -4292,7 +3768,7 @@ sim -> dataserver // simulator -> viewer // reliable { - AvatarGroupsReply Low Trusted Zerocoded + AvatarGroupsReply Low 173 Trusted Zerocoded { AgentData Single { AgentID LLUUID } // your id @@ -4314,7 +3790,7 @@ sim -> dataserver // viewer -> simulator // reliable { - AvatarPropertiesUpdate Low NotTrusted Zerocoded + AvatarPropertiesUpdate Low 174 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4336,7 +3812,7 @@ sim -> dataserver // viewer -> simulator // reliable { - AvatarInterestsUpdate Low NotTrusted Zerocoded + AvatarInterestsUpdate Low 175 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4352,27 +3828,6 @@ sim -> dataserver } } -// AvatarStatisticsReply -// dataserver -> simulator -// simulator -> viewer -// reliable -{ - AvatarStatisticsReply Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } - { - AvatarData Single - { AvatarID LLUUID } - } - { - StatisticsData Variable - { Name Variable 1 } // string - { Positive S32 } - { Negative S32 } - } -} // AvatarNotesReply @@ -4380,7 +3835,7 @@ sim -> dataserver // simulator -> viewer // reliable { - AvatarNotesReply Low Trusted Unencoded + AvatarNotesReply Low 176 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4397,7 +3852,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - AvatarNotesUpdate Low NotTrusted Unencoded + AvatarNotesUpdate Low 177 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4417,7 +3872,7 @@ sim -> dataserver // This fills in the tabs of the Picks panel. // reliable { - AvatarPicksReply Low Trusted Unencoded + AvatarPicksReply Low 178 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4436,7 +3891,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - EventInfoRequest Low NotTrusted Unencoded + EventInfoRequest Low 179 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4454,7 +3909,7 @@ sim -> dataserver // simulator -> viewer // reliable { - EventInfoReply Low Trusted Unencoded + EventInfoReply Low 180 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4483,7 +3938,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - EventNotificationAddRequest Low NotTrusted Unencoded + EventNotificationAddRequest Low 181 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4501,7 +3956,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - EventNotificationRemoveRequest Low NotTrusted Unencoded + EventNotificationRemoveRequest Low 182 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4519,7 +3974,7 @@ sim -> dataserver // QueryData is used to resend a search result after the deletion // reliable { - EventGodDelete Low NotTrusted Unencoded + EventGodDelete Low 183 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4538,32 +3993,13 @@ sim -> dataserver } } -// PickInfoRequest -// viewer -> simulator -// simulator -> dataserver -// If CreatorID is not null, then we're looking for an agent pick -// or picks. -// reliable -{ - PickInfoRequest Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - Data Single - { PickID LLUUID } - } -} - // PickInfoReply // dataserver -> simulator // simulator -> viewer // reliable { - PickInfoReply Low Trusted Unencoded + PickInfoReply Low 184 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4595,7 +4031,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - PickInfoUpdate Low NotTrusted Unencoded + PickInfoUpdate Low 185 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4622,7 +4058,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - PickDelete Low NotTrusted Unencoded + PickDelete Low 186 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4641,7 +4077,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - PickGodDelete Low NotTrusted Unencoded + PickGodDelete Low 187 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4658,7 +4094,7 @@ sim -> dataserver // ScriptQuestion // reliable { - ScriptQuestion Low Trusted Unencoded + ScriptQuestion Low 188 Trusted Unencoded { Data Single { TaskID LLUUID } @@ -4672,7 +4108,7 @@ sim -> dataserver // ScriptControlChange // reliable { - ScriptControlChange Low Trusted Unencoded + ScriptControlChange Low 189 Trusted Unencoded { Data Variable { TakeControls BOOL } @@ -4685,7 +4121,7 @@ sim -> dataserver // sim -> viewer // reliable { - ScriptDialog Low Trusted Zerocoded + ScriptDialog Low 190 Trusted Zerocoded { Data Single { ObjectID LLUUID } @@ -4707,7 +4143,7 @@ sim -> dataserver // viewer -> sim // reliable { - ScriptDialogReply Low NotTrusted Zerocoded + ScriptDialogReply Low 191 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4726,7 +4162,7 @@ sim -> dataserver // ForceScriptControlRelease // reliable { - ForceScriptControlRelease Low NotTrusted Unencoded + ForceScriptControlRelease Low 192 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4737,7 +4173,7 @@ sim -> dataserver // RevokePermissions // reliable { - RevokePermissions Low NotTrusted Unencoded + RevokePermissions Low 193 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -4755,7 +4191,7 @@ sim -> dataserver // Ask the user if they would like to load a URL // reliable { - LoadURL Low Trusted Unencoded + LoadURL Low 194 Trusted Unencoded { Data Single { ObjectName Variable 1 } @@ -4770,7 +4206,7 @@ sim -> dataserver // ScriptTeleportRequest // reliable { - ScriptTeleportRequest Low Trusted Unencoded + ScriptTeleportRequest Low 195 Trusted Unencoded { Data Single { ObjectName Variable 1 } @@ -4795,7 +4231,7 @@ sim -> dataserver // sim -> viewer // reliable { - ParcelOverlay Low Trusted Zerocoded + ParcelOverlay Low 196 Trusted Zerocoded { ParcelData Single { SequenceID S32 } // 0...3, which piece of region @@ -4810,7 +4246,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelPropertiesRequest Medium NotTrusted Zerocoded + ParcelPropertiesRequest Medium 11 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4831,7 +4267,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelPropertiesRequestByID Low NotTrusted Zerocoded + ParcelPropertiesRequestByID Low 197 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4854,7 +4290,7 @@ sim -> dataserver // WARNING: This packet is potentially large. With max length name, // description, music URL and media URL, it is 1526 + sizeof ( LLUUID ) bytes. { - ParcelProperties High Trusted Zerocoded + ParcelProperties High 23 Trusted Zerocoded { ParcelData Single { RequestResult S32 } @@ -4915,7 +4351,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelPropertiesUpdate Low NotTrusted Zerocoded + ParcelPropertiesUpdate Low 198 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4950,7 +4386,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelReturnObjects Low NotTrusted Zerocoded + ParcelReturnObjects Low 199 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4975,7 +4411,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelSetOtherCleanTime Low NotTrusted Zerocoded + ParcelSetOtherCleanTime Low 200 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -4994,7 +4430,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelDisableObjects Low NotTrusted Zerocoded + ParcelDisableObjects Low 201 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5020,7 +4456,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelSelectObjects Low NotTrusted Zerocoded + ParcelSelectObjects Low 202 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5042,7 +4478,7 @@ sim -> dataserver // viewer -> sim // reliable { - EstateCovenantRequest Low NotTrusted Unencoded + EstateCovenantRequest Low 203 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5054,7 +4490,7 @@ sim -> dataserver // sim -> viewer // reliable { - EstateCovenantReply Low Trusted Unencoded + EstateCovenantReply Low 204 Trusted Unencoded { Data Single { CovenantID LLUUID } @@ -5069,7 +4505,7 @@ sim -> dataserver // sim -> viewer // reliable { - ForceObjectSelect Low Trusted Unencoded + ForceObjectSelect Low 205 Trusted Unencoded { Header Single { ResetList BOOL } @@ -5085,7 +4521,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelBuyPass Low NotTrusted Unencoded + ParcelBuyPass Low 206 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5101,7 +4537,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelDeedToGroup Low NotTrusted Unencoded + ParcelDeedToGroup Low 207 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5116,7 +4552,7 @@ sim -> dataserver // reserved for when island owners force re-claim parcel { - ParcelReclaim Low NotTrusted Unencoded + ParcelReclaim Low 208 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5132,7 +4568,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelClaim Low NotTrusted Zerocoded + ParcelClaim Low 209 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5158,7 +4594,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelJoin Low NotTrusted Unencoded + ParcelJoin Low 210 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5179,7 +4615,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelDivide Low NotTrusted Unencoded + ParcelDivide Low 211 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5199,7 +4635,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelRelease Low NotTrusted Unencoded + ParcelRelease Low 212 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5215,7 +4651,7 @@ sim -> dataserver // viewer -> sim // reliable { - ParcelBuy Low NotTrusted Zerocoded + ParcelBuy Low 213 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5229,12 +4665,17 @@ sim -> dataserver { LocalID S32 } { Final BOOL } // true if buyer is in tier } + { + ParcelData Single + { Price S32 } + { Area S32 } + } } // ParcelGodForceOwner Unencoded { - ParcelGodForceOwner Low NotTrusted Zerocoded + ParcelGodForceOwner Low 214 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5251,7 +4692,7 @@ sim -> dataserver // viewer -> sim // ParcelAccessListRequest { - ParcelAccessListRequest Low NotTrusted Zerocoded + ParcelAccessListRequest Low 215 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5269,7 +4710,7 @@ sim -> dataserver // sim -> viewer // ParcelAccessListReply { - ParcelAccessListReply Low Trusted Zerocoded + ParcelAccessListReply Low 216 Trusted Zerocoded { Data Single { AgentID LLUUID } @@ -5288,7 +4729,7 @@ sim -> dataserver // viewer -> sim // ParcelAccessListUpdate { - ParcelAccessListUpdate Low NotTrusted Zerocoded + ParcelAccessListUpdate Low 217 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5314,7 +4755,7 @@ sim -> dataserver // viewer -> sim -> dataserver // reliable { - ParcelDwellRequest Low NotTrusted Unencoded + ParcelDwellRequest Low 218 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5331,7 +4772,7 @@ sim -> dataserver // dataserver -> sim -> viewer // reliable { - ParcelDwellReply Low Trusted Unencoded + ParcelDwellReply Low 219 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5349,7 +4790,7 @@ sim -> dataserver // successful, the transaction is approved through a money balance reply // with the same transaction id. { - RequestParcelTransfer Low Trusted Zerocoded + RequestParcelTransfer Low 220 Trusted Zerocoded { Data Single { TransactionID LLUUID } @@ -5372,7 +4813,7 @@ sim -> dataserver // If you add something here, you should probably also change the // simulator's database update query on startup. { - UpdateParcel Low Trusted Zerocoded + UpdateParcel Low 221 Trusted Zerocoded { ParcelData Single { ParcelID LLUUID } @@ -5403,7 +4844,7 @@ sim -> dataserver // This message is used to tell the dataserver that a parcel has been // removed. { - RemoveParcel Low Trusted Unencoded + RemoveParcel Low 222 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -5413,7 +4854,7 @@ sim -> dataserver // sim -> dataserver // Merges some of the database information for parcels (dwell). { - MergeParcel Low Trusted Unencoded + MergeParcel Low 223 Trusted Unencoded { MasterParcelData Single { MasterID LLUUID } @@ -5426,7 +4867,7 @@ sim -> dataserver // sim -> dataserver { - LogParcelChanges Low Trusted Zerocoded + LogParcelChanges Low 224 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5448,7 +4889,7 @@ sim -> dataserver // sim -> dataserver { - CheckParcelSales Low Trusted Unencoded + CheckParcelSales Low 225 Trusted Unencoded { RegionData Variable { RegionHandle U64 } @@ -5458,7 +4899,7 @@ sim -> dataserver // dataserver -> simulator // tell a particular simulator to finish parcel sale. { - ParcelSales Low Trusted Unencoded + ParcelSales Low 226 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -5470,7 +4911,7 @@ sim -> dataserver // mark parcel and double secret agent content on parcel as owned by // governor/maint and adjusts permissions approriately. Godlike request. { - ParcelGodMarkAsContent Low NotTrusted Unencoded + ParcelGodMarkAsContent Low 227 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5488,7 +4929,7 @@ sim -> dataserver // validates and fills in the rest of the information to start an auction // on a parcel. Processing currently requires that AgentID is a god. { - ViewerStartAuction Low NotTrusted Unencoded + ViewerStartAuction Low 228 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5504,7 +4945,7 @@ sim -> dataserver // sim -> dataserver // Once all of the data has been gathered, { - StartAuction Low Trusted Unencoded + StartAuction Low 229 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5519,7 +4960,7 @@ sim -> dataserver // dataserver -> sim { - ConfirmAuctionStart Low Trusted Unencoded + ConfirmAuctionStart Low 230 Trusted Unencoded { AuctionData Single { ParcelID LLUUID } @@ -5530,7 +4971,7 @@ sim -> dataserver // sim -> dataserver // Tell the dataserver that an auction has completed. { - CompleteAuction Low Trusted Unencoded + CompleteAuction Low 231 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -5539,7 +4980,7 @@ sim -> dataserver // Tell the dataserver that an auction has been canceled. { - CancelAuction Low Trusted Unencoded + CancelAuction Low 232 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -5548,7 +4989,7 @@ sim -> dataserver // sim -> dataserver { - CheckParcelAuctions Low Trusted Unencoded + CheckParcelAuctions Low 233 Trusted Unencoded { RegionData Variable { RegionHandle U64 } @@ -5558,7 +4999,7 @@ sim -> dataserver // dataserver -> sim // tell a particular simulator to finish parcel sale. { - ParcelAuctions Low Trusted Unencoded + ParcelAuctions Low 234 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -5573,7 +5014,7 @@ sim -> dataserver // UUIDNameRequest // Translate a UUID into first and last names { - UUIDNameRequest Low NotTrusted Unencoded + UUIDNameRequest Low 235 NotTrusted Unencoded { UUIDNameBlock Variable { ID LLUUID } @@ -5583,7 +5024,7 @@ sim -> dataserver // UUIDNameReply // Translate a UUID into first and last names { - UUIDNameReply Low Trusted Unencoded + UUIDNameReply Low 236 Trusted Unencoded { UUIDNameBlock Variable { ID LLUUID } @@ -5595,7 +5036,7 @@ sim -> dataserver // UUIDGroupNameRequest // Translate a UUID into a group name { - UUIDGroupNameRequest Low NotTrusted Unencoded + UUIDGroupNameRequest Low 237 NotTrusted Unencoded { UUIDNameBlock Variable { ID LLUUID } @@ -5605,7 +5046,7 @@ sim -> dataserver // UUIDGroupNameReply // Translate a UUID into a group name { - UUIDGroupNameReply Low Trusted Unencoded + UUIDGroupNameReply Low 238 Trusted Unencoded { UUIDNameBlock Variable { ID LLUUID } @@ -5624,7 +5065,7 @@ sim -> dataserver // Chat is region local to receiving simulator. // Type is one of CHAT_TYPE_NORMAL, _WHISPER, _SHOUT { - ChatPass Low Trusted Zerocoded + ChatPass Low 239 Trusted Zerocoded { ChatData Single { Channel S32 } @@ -5643,7 +5084,7 @@ sim -> dataserver // Edge data - compressed edge data { - EdgeDataPacket High Trusted Zerocoded + EdgeDataPacket High 24 Trusted Zerocoded { EdgeData Single { LayerType U8 } @@ -5655,7 +5096,7 @@ sim -> dataserver // Sim status, condition of this sim // sent reliably, when dirty { - SimStatus Medium Trusted Unencoded + SimStatus Medium 12 Trusted Unencoded { SimStatus Single { CanAcceptAgents BOOL } @@ -5674,7 +5115,7 @@ sim -> dataserver // simulator -> simulator // reliable { - ChildAgentUpdate High Trusted Zerocoded + ChildAgentUpdate High 25 Trusted Zerocoded { AgentData Single @@ -5735,7 +5176,7 @@ sim -> dataserver // ChildAgentAlive // sent to child agents just to keep them alive { - ChildAgentAlive High Trusted Unencoded + ChildAgentAlive High 26 Trusted Unencoded { AgentData Single { RegionHandle U64 } @@ -5748,7 +5189,7 @@ sim -> dataserver // ChildAgentPositionUpdate // sent to child agents just to keep them alive { - ChildAgentPositionUpdate High Trusted Unencoded + ChildAgentPositionUpdate High 27 Trusted Unencoded { AgentData Single @@ -5772,7 +5213,7 @@ sim -> dataserver // Obituary for child agents - make sure the parent know the child is dead // This way, children can be reliably restarted { - ChildAgentDying Low Trusted Zerocoded + ChildAgentDying Low 240 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -5783,7 +5224,7 @@ sim -> dataserver // This is sent if a full child agent hasn't been accepted yet { - ChildAgentUnknown Low Trusted Unencoded + ChildAgentUnknown Low 241 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5791,82 +5232,10 @@ sim -> dataserver } } -// Pass Object Between Simulators -// -// BUG compress rotation -// BUG compress scale -{ - PassObject High Trusted Zerocoded - { - ObjectData Single - { ID LLUUID } - { ParentID LLUUID } - - { CreatorID LLUUID } // permissions - { OwnerID LLUUID } // permissions - { GroupID LLUUID } // permissions - { BaseMask U32 } // permissions - { OwnerMask U32 } // permissions - { GroupMask U32 } // permissions - { EveryoneMask U32 } // permissions - { NextOwnerMask U32 } // permissions - { GroupOwned BOOL } // permissions - - { PCode U8 } - { Material U8 } - { State U8 } - { Scale LLVector3 } - { UsePhysics U8 } - - { PosX S16 } - { PosY S16 } - { PosZ S16 } - - { VelX S16 } - { VelY S16 } - { VelZ S16 } - - { Rotation LLQuaternion } - - { AngVelX S16 } - { AngVelY S16 } - { AngVelZ S16 } - - { PathCurve U8 } - { ProfileCurve U8 } - { PathBegin U16 } // 0 to 1, quanta = 0.01 - { PathEnd U16 } // 0 to 1, quanta = 0.01 - { PathScaleX U8 } // 0 to 1, quanta = 0.01 - { PathScaleY U8 } // 0 to 1, quanta = 0.01 - { PathShearX U8 } // -.5 to .5, quanta = 0.01 - { PathShearY U8 } // -.5 to .5, quanta = 0.01 - { PathTwist S8 } // -1 to 1, quanta = 0.01 - { PathTwistBegin S8 } // -1 to 1, quanta = 0.01 - { PathRadiusOffset S8 } // -1 to 1, quanta = 0.01 - { PathTaperX S8 } // -1 to 1, quanta = 0.01 - { PathTaperY S8 } // -1 to 1, quanta = 0.01 - { PathRevolutions U8 } // 0 to 3, quanta = 0.015 - { PathSkew S8 } // -1 to 1, quanta = 0.01 - { ProfileBegin U16 } // 0 to 1, quanta = 0.01 - { ProfileEnd U16 } // 0 to 1, quanta = 0.01 - { ProfileHollow U16 } // 0 to 1, quanta = 0.01 - - { TextureEntry Variable 2 } - - { SubType S16 } - { Active U8 } - - { Data Variable 2 } - } - { - NVPairData Variable - { NVPairs Variable 2 } - } -} // This message is sent how objects get passed between regions. { - AtomicPassObject High Trusted Unencoded + AtomicPassObject High 28 Trusted Unencoded { TaskData Single { TaskID LLUUID } @@ -5877,7 +5246,7 @@ sim -> dataserver // KillChildAgents - A new agent has connected to the simulator . . . make sure that any old child cameras are blitzed { - KillChildAgents Low Trusted Unencoded + KillChildAgents Low 242 Trusted Unencoded { IDBlock Single { AgentID LLUUID } @@ -5888,7 +5257,7 @@ sim -> dataserver // GetScriptRunning - asks if a script is running or not. the simulator // responds with ScriptRunningReply { - GetScriptRunning Low NotTrusted Unencoded + GetScriptRunning Low 243 NotTrusted Unencoded { Script Single { ObjectID LLUUID } @@ -5898,7 +5267,7 @@ sim -> dataserver // ScriptRunningReply - response from simulator to message above { - ScriptRunningReply Low NotTrusted Unencoded + ScriptRunningReply Low 244 NotTrusted Unencoded { Script Single { ObjectID LLUUID } @@ -5911,7 +5280,7 @@ sim -> dataserver // SetScriptRunning - makes a script active or inactive (Enable may be // true or false) { - SetScriptRunning Low NotTrusted Unencoded + SetScriptRunning Low 245 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5927,7 +5296,7 @@ sim -> dataserver // ScriptReset - causes a script to reset { - ScriptReset Low NotTrusted Unencoded + ScriptReset Low 246 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5942,7 +5311,7 @@ sim -> dataserver // ScriptSensorRequest - causes the receiving sim to run a script sensor and return the results { - ScriptSensorRequest Low Trusted Zerocoded + ScriptSensorRequest Low 247 Trusted Zerocoded { Requester Single { SourceID LLUUID } @@ -5961,7 +5330,7 @@ sim -> dataserver // ScriptSensorReply - returns the request script search information back to the requester { - ScriptSensorReply Low Trusted Zerocoded + ScriptSensorReply Low 248 Trusted Zerocoded { Requester Single { SourceID LLUUID } @@ -5988,7 +5357,7 @@ sim -> dataserver // agent is coming into the region. The region should be expecting the // agent. { - CompleteAgentMovement Low NotTrusted Unencoded + CompleteAgentMovement Low 249 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -5999,7 +5368,7 @@ sim -> dataserver // sim -> viewer { - AgentMovementComplete Low NotTrusted Unencoded + AgentMovementComplete Low 250 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6014,40 +5383,6 @@ sim -> dataserver } } -// sim->dataserver -// log the fact that the agent has logged in. -{ - LogLogin Low Trusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - Data Single - { ViewerDigest LLUUID } - { LastExecFroze BOOL } - { SpaceIP IPADDR } - } -} - -// This message is sent from the viewer on login or on demand from the -// userserver. -// viewer -> userserver -{ - ConnectAgentToUserserver Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } -} - -// This message is sent from the userserver when it does not have -// trusted connection or known agent on the circuit. -{ - ConnectToUserserver Low Trusted Unencoded -} //----------------------------------------------------------------------------- // Logout @@ -6055,7 +5390,7 @@ sim -> dataserver // userserver -> dataserver { - DataServerLogout Low Trusted Unencoded + DataServerLogout Low 251 Trusted Unencoded { UserData Single { AgentID LLUUID } @@ -6069,7 +5404,7 @@ sim -> dataserver // viewer -> sim // reliable { - LogoutRequest Low NotTrusted Unencoded + LogoutRequest Low 252 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6077,18 +5412,6 @@ sim -> dataserver } } -// FinalizeLogout -// Callback for when sim is done uploading assets to asset server -// viewer -> sim -// reliable -{ - FinalizeLogout Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } -} // LogoutReply // it's ok for the viewer to quit. @@ -6096,7 +5419,7 @@ sim -> dataserver // reliable // Includes inventory items to update with new asset ids { - LogoutReply Low Trusted Zerocoded + LogoutReply Low 253 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6109,16 +5432,6 @@ sim -> dataserver } - -// LogoutDemand -{ - LogoutDemand Low Trusted Unencoded - { - LogoutBlock Single - { SessionID LLUUID } - } -} - //----------------------------------------------------------------------------- // Instant Message //----------------------------------------------------------------------------- @@ -6133,7 +5446,7 @@ sim -> dataserver // BinaryBucket May be used by some dialog types // reliable { - ImprovedInstantMessage Low NotTrusted Zerocoded + ImprovedInstantMessage Low 254 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6159,7 +5472,7 @@ sim -> dataserver // RetrieveInstantMessages - used to get instant messages that // were persisted out to the database while the user was offline { - RetrieveInstantMessages Low NotTrusted Unencoded + RetrieveInstantMessages Low 255 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6171,7 +5484,7 @@ sim -> dataserver // variable sized LocationBlock so that the message can be recycled with // minimum new messages and handlers. { - FindAgent Low NotTrusted Unencoded + FindAgent Low 256 NotTrusted Unencoded { AgentBlock Single { Hunter LLUUID } @@ -6190,7 +5503,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - RequestGodlikePowers Low NotTrusted Unencoded + RequestGodlikePowers Low 257 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6208,7 +5521,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - GrantGodlikePowers Low Trusted Unencoded + GrantGodlikePowers Low 258 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6224,7 +5537,7 @@ sim -> dataserver // GodlikeMessage - generalized construct for Gods to send messages // around the system. Each Request has it's own internal protocol. { - GodlikeMessage Low NotTrusted Zerocoded + GodlikeMessage Low 259 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6245,7 +5558,7 @@ sim -> dataserver // EstateOwnerMessage // format must be identical to above { - EstateOwnerMessage Low NotTrusted Zerocoded + EstateOwnerMessage Low 260 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6267,7 +5580,7 @@ sim -> dataserver // format must be identical to above // As above, but don't have to be god or estate owner to send. { - GenericMessage Low NotTrusted Zerocoded + GenericMessage Low 261 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6291,7 +5604,7 @@ sim -> dataserver // request for mute list { - MuteListRequest Low NotTrusted Unencoded + MuteListRequest Low 262 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6305,7 +5618,7 @@ sim -> dataserver // update/add someone in the mute list { - UpdateMuteListEntry Low NotTrusted Unencoded + UpdateMuteListEntry Low 263 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6322,7 +5635,7 @@ sim -> dataserver // Remove a mute list entry. { - RemoveMuteListEntry Low NotTrusted Unencoded + RemoveMuteListEntry Low 264 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6341,7 +5654,7 @@ sim -> dataserver // { - CopyInventoryFromNotecard Low NotTrusted Zerocoded + CopyInventoryFromNotecard Low 265 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6364,7 +5677,7 @@ sim -> dataserver // THIS MESSAGE CAN NOT CREATE NEW INVENTORY ITEMS. // { - UpdateInventoryItem Low NotTrusted Zerocoded + UpdateInventoryItem Low 266 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6405,7 +5718,7 @@ sim -> dataserver // DO NOT ALLOW THIS FROM THE VIEWER. // { - UpdateCreateInventoryItem Low Trusted Zerocoded + UpdateCreateInventoryItem Low 267 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6442,7 +5755,7 @@ sim -> dataserver } { - MoveInventoryItem Low NotTrusted Zerocoded + MoveInventoryItem Low 268 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6464,7 +5777,7 @@ sim -> dataserver // the OldItemID needs to be paired with the OldAgentID to // produce a unique inventory item. { - CopyInventoryItem Low NotTrusted Zerocoded + CopyInventoryItem Low 269 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6481,7 +5794,7 @@ sim -> dataserver } { - RemoveInventoryItem Low NotTrusted Unencoded + RemoveInventoryItem Low 270 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6494,7 +5807,7 @@ sim -> dataserver } { - ChangeInventoryItemFlags Low NotTrusted Unencoded + ChangeInventoryItemFlags Low 271 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6513,7 +5826,7 @@ sim -> dataserver // This message is currently only uses objects, so the viewer ignores // the asset id. { - SaveAssetIntoInventory Low Trusted Unencoded + SaveAssetIntoInventory Low 272 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6526,7 +5839,7 @@ sim -> dataserver } { - CreateInventoryFolder Low NotTrusted Unencoded + CreateInventoryFolder Low 273 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6542,7 +5855,7 @@ sim -> dataserver } { - UpdateInventoryFolder Low NotTrusted Unencoded + UpdateInventoryFolder Low 274 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6558,7 +5871,7 @@ sim -> dataserver } { - MoveInventoryFolder Low NotTrusted Zerocoded + MoveInventoryFolder Low 275 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6573,7 +5886,7 @@ sim -> dataserver } { - RemoveInventoryFolder Low NotTrusted Unencoded + RemoveInventoryFolder Low 276 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6587,7 +5900,7 @@ sim -> dataserver // Get inventory segment. { - FetchInventoryDescendents Low NotTrusted Zerocoded + FetchInventoryDescendents Low 277 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6608,7 +5921,7 @@ sim -> dataserver // parent_id for folders and the folder_id for items, but this is // reasonable until we heve server side inventory. { - InventoryDescendents Low Trusted Zerocoded + InventoryDescendents Low 278 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6652,7 +5965,7 @@ sim -> dataserver // Get inventory item(s) - response comes through FetchInventoryReply { - FetchInventory Low NotTrusted Zerocoded + FetchInventory Low 279 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6667,7 +5980,7 @@ sim -> dataserver // response to fetch inventory { - FetchInventoryReply Low Trusted Zerocoded + FetchInventoryReply Low 280 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6704,7 +6017,7 @@ sim -> dataserver // least many bulk updates can be packed. // Only from dataserver->sim->viewer { - BulkUpdateInventory Low Trusted Zerocoded + BulkUpdateInventory Low 281 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6749,7 +6062,7 @@ sim -> dataserver // request permissions for agent id to get the asset for owner_id's // item_id. { - RequestInventoryAsset Low Trusted Unencoded + RequestInventoryAsset Low 282 Trusted Unencoded { QueryData Single { QueryID LLUUID } @@ -6762,7 +6075,7 @@ sim -> dataserver // response to RequestInventoryAsset // lluuid will be null if agentid in the request above cannot read asset { - InventoryAssetResponse Low Trusted Unencoded + InventoryAssetResponse Low 283 Trusted Unencoded { QueryData Single { QueryID LLUUID } @@ -6775,7 +6088,7 @@ sim -> dataserver // currently only supported in viewer->userserver->dataserver // messages typically initiated by an empty trash method. { - RemoveInventoryObjects Low NotTrusted Unencoded + RemoveInventoryObjects Low 284 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6794,7 +6107,7 @@ sim -> dataserver // This is how you remove inventory when you're not even sure what it // is - only it's parenting. { - PurgeInventoryDescendents Low NotTrusted Zerocoded + PurgeInventoryDescendents Low 285 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6810,7 +6123,7 @@ sim -> dataserver // inventory. // if Key == 0, itemid is the key. if Key == 1, assetid is the key. { - UpdateTaskInventory Low NotTrusted Zerocoded + UpdateTaskInventory Low 286 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6848,7 +6161,7 @@ sim -> dataserver } { - RemoveTaskInventory Low NotTrusted Zerocoded + RemoveTaskInventory Low 287 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6862,7 +6175,7 @@ sim -> dataserver } { - MoveTaskInventory Low NotTrusted Unencoded + MoveTaskInventory Low 288 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6877,7 +6190,7 @@ sim -> dataserver } { - RequestTaskInventory Low NotTrusted Unencoded + RequestTaskInventory Low 289 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -6890,7 +6203,7 @@ sim -> dataserver } { - ReplyTaskInventory Low Trusted Zerocoded + ReplyTaskInventory Low 290 Trusted Zerocoded { InventoryData Single { TaskID LLUUID } @@ -6913,7 +6226,7 @@ sim -> dataserver // just duplicated (it's not that much, and derezzes that span multiple // packets will be rare.) { - DeRezObject Low NotTrusted Zerocoded + DeRezObject Low 291 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -6938,7 +6251,7 @@ sim -> dataserver // know, since no inventory is created on the viewer. For example, when // saving into task inventory. { - DeRezAck Low Trusted Unencoded + DeRezAck Low 292 Trusted Unencoded { TransactionData Single { TransactionID LLUUID } @@ -6949,7 +6262,7 @@ sim -> dataserver // This message is sent from viewer -> simulator when the viewer wants // to rez an object out of inventory. { - RezObject Low NotTrusted Zerocoded + RezObject Low 293 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7000,7 +6313,7 @@ sim -> dataserver // This message is sent from viewer -> simulator when the viewer wants // to rez an object from a notecard. { - RezObjectFromNotecard Low NotTrusted Zerocoded + RezObjectFromNotecard Low 294 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7033,20 +6346,11 @@ sim -> dataserver } } -// if declined, the destid agent from the GiveInventory message -// responds with this message to the userserver -{ - DeclineInventory Low NotTrusted Unencoded - { - InfoBlock Single - { TransactionID LLUUID } - } -} // sim -> dataserver // sent during agent to agent inventory transfers { - TransferInventory Low Trusted Zerocoded + TransferInventory Low 295 Trusted Zerocoded { InfoBlock Single { SourceID LLUUID } @@ -7064,7 +6368,7 @@ sim -> dataserver // InventoryID is the id of the inventory object that the end user // should discard if they deny the transfer. { - TransferInventoryAck Low Trusted Zerocoded + TransferInventoryAck Low 296 Trusted Zerocoded { InfoBlock Single { TransactionID LLUUID } @@ -7072,25 +6376,9 @@ sim -> dataserver } } -// Relationships - the start will be a request from sourceid to dest -// id when they are located near each other. -{ - RequestFriendship Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - AgentBlock Single - { FolderID LLUUID } // source ID's calling card folder - { DestID LLUUID } - { TransactionID LLUUID } - } -} { - AcceptFriendship Low NotTrusted Unencoded + AcceptFriendship Low 297 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7107,7 +6395,7 @@ sim -> dataserver } { - DeclineFriendship Low NotTrusted Unencoded + DeclineFriendship Low 298 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7120,7 +6408,7 @@ sim -> dataserver } { - FormFriendship Low Trusted Unencoded + FormFriendship Low 299 Trusted Unencoded { AgentBlock Single { SourceID LLUUID } @@ -7134,7 +6422,7 @@ sim -> dataserver // viewer -> userserver -> dataserver // reliable { - TerminateFriendship Low NotTrusted Unencoded + TerminateFriendship Low 300 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7148,7 +6436,7 @@ sim -> dataserver // used to give someone a calling card. { - OfferCallingCard Low NotTrusted Unencoded + OfferCallingCard Low 301 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7162,7 +6450,7 @@ sim -> dataserver } { - AcceptCallingCard Low NotTrusted Unencoded + AcceptCallingCard Low 302 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7179,7 +6467,7 @@ sim -> dataserver } { - DeclineCallingCard Low NotTrusted Unencoded + DeclineCallingCard Low 303 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7194,7 +6482,7 @@ sim -> dataserver // Rez a script onto an object { - RezScript Low NotTrusted Zerocoded + RezScript Low 304 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7234,7 +6522,7 @@ sim -> dataserver // Create inventory { - CreateInventoryItem Low NotTrusted Zerocoded + CreateInventoryItem Low 305 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7256,7 +6544,7 @@ sim -> dataserver // give agent a landmark for an event. { - CreateLandmarkForEvent Low NotTrusted Zerocoded + CreateLandmarkForEvent Low 306 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7274,7 +6562,7 @@ sim -> dataserver } { - EventLocationRequest Low Trusted Zerocoded + EventLocationRequest Low 307 Trusted Zerocoded { QueryData Single { QueryID LLUUID } @@ -7286,7 +6574,7 @@ sim -> dataserver } { - EventLocationReply Low Trusted Zerocoded + EventLocationReply Low 308 Trusted Zerocoded { QueryData Single { QueryID LLUUID } @@ -7299,334 +6587,131 @@ sim -> dataserver } } -// get information about landmarks. Used by viewers for determining -// the location of a landmark, and by simulators for teleport -{ - RegionHandleRequest Low NotTrusted Unencoded - { - RequestBlock Single - { RegionID LLUUID } - } -} - -{ - RegionIDAndHandleReply Low Trusted Unencoded - { - ReplyBlock Single - { RegionID LLUUID } - { RegionHandle U64 } - } -} - -// Move money from one agent to another. Validation will happen at the -// simulator, the dataserver will actually do the work. Dataserver -// generates a MoneyBalance message in reply. The simulator -// will generate a MoneyTransferBackend in response to this. -// viewer -> simulator -> dataserver -{ - MoneyTransferRequest Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - MoneyData Single - { SourceID LLUUID } - { DestID LLUUID } // destination of the transfer - { Flags U8 } - { Amount S32 } - { AggregatePermNextOwner U8 } - { AggregatePermInventory U8 } - { TransactionType S32 } // see lltransactiontypes.h - { Description Variable 1 } // string, name of item for purchases - } -} - -// And, the money transfer -{ - MoneyTransferBackend Low Trusted Zerocoded - { - MoneyData Single - { TransactionID LLUUID } - { TransactionTime U32 } // utc seconds since epoch - { SourceID LLUUID } - { DestID LLUUID } // destination of the transfer - { Flags U8 } - { Amount S32 } - { AggregatePermNextOwner U8 } - { AggregatePermInventory U8 } - { TransactionType S32 } // see lltransactiontypes.h - { RegionID LLUUID } // region sending the request, for logging - { GridX U32 } // *HACK: database doesn't have region_id in schema - { GridY U32 } // *HACK: database doesn't have region_id in schema - { Description Variable 1 } // string, name of item for purchases - } -} - -// This message is used to coalesce money transfers on a per-agent -// basis. It should only be involved in sim->dataserver money communication. -{ - BulkMoneyTransfer Low Trusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { RegionX U32 } - { RegionY U32 } - } - { - MoneyData Variable - { TransactionID LLUUID } - { DestID LLUUID } // destination of the transfer - { Flags U8 } - { Amount S32 } - { TransactionType S32 } // see lltransactiontypes.h - { Description Variable 1 } // string, name of purchased item - } -} - - -// This message is sent sim -> viewer when the simulator is queueing -// up transactions. This is because we do not have an authoritative -// balance from the dataserver, but we want to 'guess' how much -// money the agent has on the viewer. -{ - AdjustBalance Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { Delta S32 } - } -} - -// viewer -> userserver -> dataserver -// Reliable -{ - MoneyBalanceRequest Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - MoneyData Single - { TransactionID LLUUID } - } -} - - -// dataserver -> simulator -> viewer -{ - MoneyBalanceReply Low Trusted Zerocoded - { - MoneyData Single - { AgentID LLUUID } - { TransactionID LLUUID } - { TransactionSuccess BOOL } // BOOL - { MoneyBalance S32 } - { SquareMetersCredit S32 } - { SquareMetersCommitted S32 } - { Description Variable 1 } // string - } -} - - -// RoutedMoneyBalanceReply -// This message is used when a dataserver needs to send updated -// money balance information to a simulator other than the one it -// is connected to. It uses the standard TransferBlock format. -// dataserver -> simulator -> spaceserver -> simulator -> viewer -// reliable -{ - RoutedMoneyBalanceReply Low Trusted Zerocoded - { - TargetBlock Single - { TargetIP IPADDR } // U32 encoded IP - { TargetPort IPPORT } - } - { - MoneyData Single - { AgentID LLUUID } - { TransactionID LLUUID } - { TransactionSuccess BOOL } // BOOL - { MoneyBalance S32 } - { SquareMetersCredit S32 } - { SquareMetersCommitted S32 } - { Description Variable 1 } // string - } -} - - -// This will give you a partial money history on the requested agentid. -// Reliable -{ - MoneyHistoryRequest Low NotTrusted Unencoded - { - MoneyData Single - { AgentID LLUUID } - { StartPeriod S32 } - { EndPeriod S32 } - } -} - -// Reliable -{ - MoneyHistoryReply Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } - { - MoneyData Single - { StartPeriod S32 } - { EndPeriod S32 } - { Balance S32 } - { StartDate Variable 1 } // string - { TaxEstimate S32 } - { StipendEstimate S32 } - { BonusEstimate S32 } - } - { - HistoryData Variable - { Description Variable 1 } // string - { Amount S32 } - } -} - - -// CurrentInterval = 0 => this period (week, day, etc.) -// CurrentInterval = 1 => last period -// viewer -> userserver -> dataserver -// reliable -{ - MoneySummaryRequest Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } - } -} - - -// dataserver -> userserver -> viewer -// Reliable +// get information about landmarks. Used by viewers for determining +// the location of a landmark, and by simulators for teleport { - MoneySummaryReply Low NotTrusted Zerocoded + RegionHandleRequest Low 309 NotTrusted Unencoded { - AgentData Single - { AgentID LLUUID } + RequestBlock Single + { RegionID LLUUID } } +} + +{ + RegionIDAndHandleReply Low 310 Trusted Unencoded { - MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } - { StartDate Variable 1 } // string - { Balance S32 } - { TotalCredits S32 } - { TotalDebits S32 } - { ObjectTaxCurrent S32 } - { LightTaxCurrent S32 } - { LandTaxCurrent S32 } - { GroupTaxCurrent S32 } - { ParcelDirFeeCurrent S32 } - { ObjectTaxEstimate S32 } - { LightTaxEstimate S32 } - { LandTaxEstimate S32 } - { GroupTaxEstimate S32 } - { ParcelDirFeeEstimate S32 } - { StipendEstimate S32 } - { BonusEstimate S32 } - { LastTaxDate Variable 1 } // string - { TaxDate Variable 1 } // string + ReplyBlock Single + { RegionID LLUUID } + { RegionHandle U64 } } } - -// Reliable +// Move money from one agent to another. Validation will happen at the +// simulator, the dataserver will actually do the work. Dataserver +// generates a MoneyBalance message in reply. The simulator +// will generate a MoneyTransferBackend in response to this. +// viewer -> simulator -> dataserver { - MoneyDetailsRequest Low NotTrusted Unencoded + MoneyTransferRequest Low 311 NotTrusted Zerocoded { AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } + { AgentID LLUUID } + { SessionID LLUUID } } { MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } + { SourceID LLUUID } + { DestID LLUUID } // destination of the transfer + { Flags U8 } + { Amount S32 } + { AggregatePermNextOwner U8 } + { AggregatePermInventory U8 } + { TransactionType S32 } // see lltransactiontypes.h + { Description Variable 1 } // string, name of item for purchases } } -// Reliable +// And, the money transfer { - MoneyDetailsReply Low NotTrusted Zerocoded - { - AgentData Single - { AgentID LLUUID } - } + MoneyTransferBackend Low 312 Trusted Zerocoded { MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } - { StartDate Variable 1 } // string - } - { - HistoryData Variable - { Description Variable 1 } // string - { Amount S32 } + { TransactionID LLUUID } + { TransactionTime U32 } // utc seconds since epoch + { SourceID LLUUID } + { DestID LLUUID } // destination of the transfer + { Flags U8 } + { Amount S32 } + { AggregatePermNextOwner U8 } + { AggregatePermInventory U8 } + { TransactionType S32 } // see lltransactiontypes.h + { RegionID LLUUID } // region sending the request, for logging + { GridX U32 } // *HACK: database doesn't have region_id in schema + { GridY U32 } // *HACK: database doesn't have region_id in schema + { Description Variable 1 } // string, name of item for purchases } } +// viewer -> userserver -> dataserver // Reliable { - MoneyTransactionsRequest Low NotTrusted Unencoded + MoneyBalanceRequest Low 313 NotTrusted Zerocoded { - AgentData Single + AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } + { TransactionID LLUUID } } } -// Reliable + +// dataserver -> simulator -> viewer { - MoneyTransactionsReply Low NotTrusted Zerocoded + MoneyBalanceReply Low 314 Trusted Zerocoded { - AgentData Single - { AgentID LLUUID } + MoneyData Single + { AgentID LLUUID } + { TransactionID LLUUID } + { TransactionSuccess BOOL } // BOOL + { MoneyBalance S32 } + { SquareMetersCredit S32 } + { SquareMetersCommitted S32 } + { Description Variable 1 } // string } +} + + +// RoutedMoneyBalanceReply +// This message is used when a dataserver needs to send updated +// money balance information to a simulator other than the one it +// is connected to. It uses the standard TransferBlock format. +// dataserver -> simulator -> spaceserver -> simulator -> viewer +// reliable +{ + RoutedMoneyBalanceReply Low 315 Trusted Zerocoded { - MoneyData Single - { RequestID LLUUID } - { IntervalDays S32 } - { CurrentInterval S32 } - { StartDate Variable 1 } // string + TargetBlock Single + { TargetIP IPADDR } // U32 encoded IP + { TargetPort IPPORT } } { - HistoryData Variable - { Time Variable 1 } // string - { User Variable 1 } // string - { Type S32 } - { Item Variable 1 } // string - { Amount S32 } + MoneyData Single + { AgentID LLUUID } + { TransactionID LLUUID } + { TransactionSuccess BOOL } // BOOL + { MoneyBalance S32 } + { SquareMetersCredit S32 } + { SquareMetersCommitted S32 } + { Description Variable 1 } // string } } + + //--------------------------------------------------------------------------- // Gesture saves/loads //--------------------------------------------------------------------------- @@ -7635,7 +6720,7 @@ sim -> dataserver // Tell the database that some gestures are now active // viewer -> sim -> data { - ActivateGestures Low NotTrusted Unencoded + ActivateGestures Low 316 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7653,7 +6738,7 @@ sim -> dataserver // Tell the database some gestures are no longer active // viewer -> sim -> data { - DeactivateGestures Low NotTrusted Unencoded + DeactivateGestures Low 317 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7689,7 +6774,7 @@ sim -> dataserver // dataserver-> userserver -> viewer to move around the mute list { - MuteListUpdate Low Trusted Unencoded + MuteListUpdate Low 318 Trusted Unencoded { MuteData Single { AgentID LLUUID } @@ -7699,7 +6784,7 @@ sim -> dataserver // tell viewer to use the local mute cache { - UseCachedMuteList Low NotTrusted Unencoded + UseCachedMuteList Low 319 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7713,7 +6798,7 @@ sim -> dataserver // agent-related and the same PUT will be issued to the sim host if // they are online. { - GrantUserRights Low NotTrusted Unencoded + GrantUserRights Low 320 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7732,7 +6817,7 @@ sim -> dataserver // right. Adding/removing online status rights will show up as an // online/offline notification. { - ChangeUserRights Low Trusted Unencoded + ChangeUserRights Low 321 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7747,14 +6832,14 @@ sim -> dataserver // notification for login and logout. // source_sim -> dest_viewer { - OnlineNotification Low Trusted Unencoded + OnlineNotification Low 322 Trusted Unencoded { AgentBlock Variable { AgentID LLUUID } } } { - OfflineNotification Low Trusted Unencoded + OfflineNotification Low 323 Trusted Unencoded { AgentBlock Variable { AgentID LLUUID } @@ -7767,7 +6852,7 @@ sim -> dataserver // failure checked at sim and triggers ImprovedInstantMessage // success triggers SetStartLocation { - SetStartLocationRequest Low NotTrusted Zerocoded + SetStartLocationRequest Low 324 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7785,7 +6870,7 @@ sim -> dataserver // SetStartLocation // sim -> dataserver { - SetStartLocation Low Trusted Zerocoded + SetStartLocation Low 325 Trusted Zerocoded { StartLocationData Single { AgentID LLUUID } @@ -7806,7 +6891,7 @@ sim -> dataserver // NetTest - This goes back and forth to the space server because of // problems determining the port { - NetTest Low NotTrusted Unencoded + NetTest Low 326 NotTrusted Unencoded { NetBlock Single { Port IPPORT } @@ -7816,7 +6901,7 @@ sim -> dataserver // SetChildCount - Sent to launcher to adjust nominal child count // Simulator sends this increase the sim/cpu ratio on startup { - SetCPURatio Low NotTrusted Unencoded + SetCPURatio Low 327 NotTrusted Unencoded { Data Single { Ratio U8 } @@ -7828,7 +6913,7 @@ sim -> dataserver // SimCrashed - Sent to dataserver when the sim goes down. // Maybe we should notify the spaceserver as well? { - SimCrashed Low NotTrusted Unencoded + SimCrashed Low 328 NotTrusted Unencoded { Data Single { RegionX U32 } @@ -7846,7 +6931,7 @@ sim -> dataserver // NameValuePair - if the specific task exists on simulator, add or replace this name value pair { - NameValuePair Low Trusted Unencoded + NameValuePair Low 329 Trusted Unencoded { TaskData Single { ID LLUUID } @@ -7859,7 +6944,7 @@ sim -> dataserver // NameValuePair - if the specific task exists on simulator or dataserver, remove the name value pair (value is ignored) { - RemoveNameValuePair Low Trusted Unencoded + RemoveNameValuePair Low 330 Trusted Unencoded { TaskData Single { ID LLUUID } @@ -7871,20 +6956,6 @@ sim -> dataserver } -// GetNameValuePair - if the specific task exists on simulator, get the value of this NameVale pair (if it exists) -// FIXME: No transmit. 12 Sep 2002 mark -{ - GetNameValuePair Low NotTrusted Unencoded - { - TaskData Single - { ID LLUUID } - } - { - NameValueName Variable - { Name Variable 2 } - } -} - // *************************************************************************** // Add/Remove Attachment messages // *************************************************************************** @@ -7894,7 +6965,7 @@ sim -> dataserver // DO NOT ALLOW THIS FROM THE VIEWER // { - UpdateAttachment Low Trusted Zerocoded + UpdateAttachment Low 331 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -7939,7 +7010,7 @@ sim -> dataserver // Simulator informs Dataserver that attachment has been taken off { - RemoveAttachment Low NotTrusted Unencoded + RemoveAttachment Low 332 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -7959,7 +7030,7 @@ sim -> dataserver // SoundTrigger - Sent by simulator to viewer to trigger sound outside current region { - SoundTrigger High NotTrusted Unencoded + SoundTrigger High 29 NotTrusted Unencoded { SoundData Single { SoundID LLUUID } @@ -7974,7 +7045,7 @@ sim -> dataserver // AttachedSound - Sent by simulator to viewer to play sound attached with an object { - AttachedSound Medium Trusted Unencoded + AttachedSound Medium 13 Trusted Unencoded { DataBlock Single { SoundID LLUUID } @@ -7988,7 +7059,7 @@ sim -> dataserver // AttachedSoundGainChange - Sent by simulator to viewer to change an attached sounds' volume { - AttachedSoundGainChange Medium Trusted Unencoded + AttachedSoundGainChange Medium 14 Trusted Unencoded { DataBlock Single { ObjectID LLUUID } @@ -7996,21 +7067,11 @@ sim -> dataserver } } -// AttachedSoundCutoffRadius - Sent by simulator to viewer to change an attached sounds' cutoff radius - -{ - AttachedSoundCutoffRadius Medium Trusted Unencoded - { - DataBlock Single - { ObjectID LLUUID } - { Radius F32 } - } -} // PreloadSound - Sent by simulator to viewer to preload sound for an object { - PreloadSound Medium Trusted Unencoded + PreloadSound Medium 15 Trusted Unencoded { DataBlock Variable { ObjectID LLUUID } @@ -8026,7 +7087,7 @@ sim -> dataserver // current assumes an existing UUID, need to enhance for new assets { - AssetUploadRequest Low NotTrusted Unencoded + AssetUploadRequest Low 333 NotTrusted Unencoded { AssetBlock Single { TransactionID LLUUID } @@ -8038,7 +7099,7 @@ sim -> dataserver } { - AssetUploadComplete Low NotTrusted Unencoded + AssetUploadComplete Low 334 NotTrusted Unencoded { AssetBlock Single { UUID LLUUID } @@ -8047,59 +7108,11 @@ sim -> dataserver } } -// -// Reputation -// -{ - ReputationAgentAssign Low NotTrusted Unencoded - { - DataBlock Single - { RatorID LLUUID } - { RateeID LLUUID } - { Behavior F32 } // float, usually -1 or +1 - { Appearance F32 } // float, usually -1 or +1 - { Building F32 } // float, usually -1 or +1 - } -} - -// ReputationIndividualRequest -// Gets From's rating of To. -// reliable -{ - ReputationIndividualRequest Low NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - ReputationData Single - { ToID LLUUID } - } -} - -// ReputationIndividualReply -// reliable -{ - ReputationIndividualReply Low Trusted Unencoded - { - AgentData Single - { AgentID LLUUID } - } - { - ReputationData Single - { ToID LLUUID } - { Behavior F32 } // float, usually -1 or +1 - { Appearance F32 } // float, usually -1 or +1 - { Building F32 } // float, usually -1 or +1 - } -} - // Script on simulator asks dataserver if there are any email messages // waiting. { - EmailMessageRequest Low Trusted Unencoded + EmailMessageRequest Low 335 Trusted Unencoded { DataBlock Single { ObjectID LLUUID } @@ -8111,7 +7124,7 @@ sim -> dataserver // Dataserver gives simulator the oldest email message in the queue, along with // how many messages are left in the queue. And passes back the filter used to request emails. { - EmailMessageReply Low Trusted Unencoded + EmailMessageReply Low 336 Trusted Unencoded { DataBlock Single { ObjectID LLUUID } @@ -8126,7 +7139,7 @@ sim -> dataserver // Script on simulator sends mail to another script { - InternalScriptMail Medium Trusted Unencoded + InternalScriptMail Medium 16 Trusted Unencoded { DataBlock Single { From Variable 1 } @@ -8138,7 +7151,7 @@ sim -> dataserver // Script on simulator asks dataserver for information { - ScriptDataRequest Low Trusted Unencoded + ScriptDataRequest Low 337 Trusted Unencoded { DataBlock Variable { Hash U64 } @@ -8149,7 +7162,7 @@ sim -> dataserver // Data server responds with data { - ScriptDataReply Low Trusted Unencoded + ScriptDataReply Low 338 Trusted Unencoded { DataBlock Variable { Hash U64 } @@ -8167,7 +7180,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - CreateGroupRequest Low NotTrusted Zerocoded + CreateGroupRequest Low 339 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8191,7 +7204,7 @@ sim -> dataserver // simulator -> viewer // reliable { - CreateGroupReply Low Trusted Unencoded + CreateGroupReply Low 340 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8209,7 +7222,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - UpdateGroupInfo Low NotTrusted Zerocoded + UpdateGroupInfo Low 341 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8232,7 +7245,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - GroupRoleChanges Low NotTrusted Unencoded + GroupRoleChanges Low 342 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8251,7 +7264,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - JoinGroupRequest Low NotTrusted Zerocoded + JoinGroupRequest Low 343 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8266,7 +7279,7 @@ sim -> dataserver // JoinGroupReply // dataserver -> simulator -> viewer { - JoinGroupReply Low Trusted Unencoded + JoinGroupReply Low 344 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8283,7 +7296,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - EjectGroupMemberRequest Low NotTrusted Unencoded + EjectGroupMemberRequest Low 345 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8303,7 +7316,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - EjectGroupMemberReply Low Trusted Unencoded + EjectGroupMemberReply Low 346 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8322,7 +7335,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - LeaveGroupRequest Low NotTrusted Unencoded + LeaveGroupRequest Low 347 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8337,7 +7350,7 @@ sim -> dataserver // LeaveGroupReply // dataserver -> simulator -> viewer { - LeaveGroupReply Low Trusted Unencoded + LeaveGroupReply Low 348 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8353,7 +7366,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - InviteGroupRequest Low NotTrusted Unencoded + InviteGroupRequest Low 349 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } // UUID of inviting agent @@ -8374,7 +7387,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - InviteGroupResponse Low Trusted Unencoded + InviteGroupResponse Low 350 Trusted Unencoded { InviteData Single { AgentID LLUUID } @@ -8389,7 +7402,7 @@ sim -> dataserver // viewer-> simulator -> dataserver // reliable { - GroupProfileRequest Low NotTrusted Unencoded + GroupProfileRequest Low 351 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8405,7 +7418,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - GroupProfileReply Low Trusted Zerocoded + GroupProfileReply Low 352 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8436,7 +7449,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - GroupAccountSummaryRequest Low NotTrusted Zerocoded + GroupAccountSummaryRequest Low 353 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8455,7 +7468,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // Reliable { - GroupAccountSummaryReply Low Trusted Zerocoded + GroupAccountSummaryReply Low 354 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8489,7 +7502,7 @@ sim -> dataserver // Reliable { - GroupAccountDetailsRequest Low NotTrusted Zerocoded + GroupAccountDetailsRequest Low 355 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8506,7 +7519,7 @@ sim -> dataserver // Reliable { - GroupAccountDetailsReply Low Trusted Zerocoded + GroupAccountDetailsReply Low 356 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8529,7 +7542,7 @@ sim -> dataserver // Reliable { - GroupAccountTransactionsRequest Low NotTrusted Zerocoded + GroupAccountTransactionsRequest Low 357 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8546,7 +7559,7 @@ sim -> dataserver // Reliable { - GroupAccountTransactionsReply Low Trusted Zerocoded + GroupAccountTransactionsReply Low 358 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8573,7 +7586,7 @@ sim -> dataserver // viewer -> simulator -> dataserver //reliable { - GroupActiveProposalsRequest Low NotTrusted Unencoded + GroupActiveProposalsRequest Low 359 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8593,7 +7606,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - GroupActiveProposalItemReply Low Trusted Zerocoded + GroupActiveProposalItemReply Low 360 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8623,7 +7636,7 @@ sim -> dataserver // viewer -> simulator -> dataserver //reliable { - GroupVoteHistoryRequest Low NotTrusted Unencoded + GroupVoteHistoryRequest Low 361 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8643,7 +7656,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - GroupVoteHistoryItemReply Low Trusted Zerocoded + GroupVoteHistoryItemReply Low 362 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8679,7 +7692,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - StartGroupProposal Low NotTrusted Zerocoded + StartGroupProposal Low 363 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8699,7 +7712,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - GroupProposalBallot Low NotTrusted Unencoded + GroupProposalBallot Low 364 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8716,7 +7729,7 @@ sim -> dataserver // TallyVotes userserver -> dataserver // reliable { - TallyVotes Low Trusted Unencoded + TallyVotes Low 365 Trusted Unencoded } @@ -8726,7 +7739,7 @@ sim -> dataserver // simulator -> dataserver // reliable { - GroupMembersRequest Low NotTrusted Unencoded + GroupMembersRequest Low 366 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8744,7 +7757,7 @@ sim -> dataserver // dataserver -> simulator // reliable { - GroupMembersReply Low Trusted Zerocoded + GroupMembersReply Low 367 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8769,7 +7782,7 @@ sim -> dataserver // used to switch an agent's currently active group. // viewer -> simulator -> dataserver -> AgentDataUpdate... { - ActivateGroup Low NotTrusted Zerocoded + ActivateGroup Low 368 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8780,7 +7793,7 @@ sim -> dataserver // viewer -> simulator -> dataserver { - SetGroupContribution Low NotTrusted Unencoded + SetGroupContribution Low 369 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8795,7 +7808,7 @@ sim -> dataserver // viewer -> simulator -> dataserver { - SetGroupAcceptNotices Low NotTrusted Unencoded + SetGroupAcceptNotices Low 370 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8811,7 +7824,7 @@ sim -> dataserver // GroupRoleDataRequest // viewer -> simulator -> dataserver { - GroupRoleDataRequest Low NotTrusted Unencoded + GroupRoleDataRequest Low 371 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8829,7 +7842,7 @@ sim -> dataserver // All role data for this group // dataserver -> simulator -> agent { - GroupRoleDataReply Low Trusted Unencoded + GroupRoleDataReply Low 372 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8854,7 +7867,7 @@ sim -> dataserver // GroupRoleMembersRequest // viewer -> simulator -> dataserver { - GroupRoleMembersRequest Low NotTrusted Unencoded + GroupRoleMembersRequest Low 373 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8871,7 +7884,7 @@ sim -> dataserver // All role::member pairs for this group. // dataserver -> simulator -> agent { - GroupRoleMembersReply Low Trusted Unencoded + GroupRoleMembersReply Low 374 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8889,7 +7902,7 @@ sim -> dataserver // GroupTitlesRequest // viewer -> simulator -> dataserver { - GroupTitlesRequest Low NotTrusted Unencoded + GroupTitlesRequest Low 375 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8903,7 +7916,7 @@ sim -> dataserver // GroupTitlesReply // dataserver -> simulator -> viewer { - GroupTitlesReply Low Trusted Zerocoded + GroupTitlesReply Low 376 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -8921,7 +7934,7 @@ sim -> dataserver // GroupTitleUpdate // viewer -> simulator -> dataserver { - GroupTitleUpdate Low NotTrusted Unencoded + GroupTitleUpdate Low 377 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8934,7 +7947,7 @@ sim -> dataserver // GroupRoleUpdate // viewer -> simulator -> dataserver { - GroupRoleUpdate Low NotTrusted Unencoded + GroupRoleUpdate Low 378 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -8957,7 +7970,7 @@ sim -> dataserver // Request the members of the live help group needed for requesting agent. // userserver -> dataserver { - LiveHelpGroupRequest Low Trusted Unencoded + LiveHelpGroupRequest Low 379 Trusted Unencoded { RequestData Single { RequestID LLUUID } @@ -8968,7 +7981,7 @@ sim -> dataserver // Send down the group // dataserver -> userserver { - LiveHelpGroupReply Low Trusted Unencoded + LiveHelpGroupReply Low 380 Trusted Unencoded { ReplyData Single { RequestID LLUUID } @@ -8986,7 +7999,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - AgentWearablesRequest Low NotTrusted Unencoded + AgentWearablesRequest Low 381 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9000,7 +8013,7 @@ sim -> dataserver // reliable // NEVER from viewer to sim { - AgentWearablesUpdate Low Trusted Zerocoded + AgentWearablesUpdate Low 382 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9021,7 +8034,7 @@ sim -> dataserver // viewer->sim->dataserver // reliable { - AgentIsNowWearing Low NotTrusted Zerocoded + AgentIsNowWearing Low 383 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9040,7 +8053,7 @@ sim -> dataserver // viewer -> simulator -> dataserver // reliable { - AgentCachedTexture Low NotTrusted Unencoded + AgentCachedTexture Low 384 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9059,7 +8072,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - AgentCachedTextureResponse Low Trusted Unencoded + AgentCachedTextureResponse Low 385 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9076,7 +8089,7 @@ sim -> dataserver // Request an AgentDataUpdate without changing any agent data. { - AgentDataUpdateRequest Low NotTrusted Unencoded + AgentDataUpdateRequest Low 386 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9090,7 +8103,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - AgentDataUpdate Low Trusted Zerocoded + AgentDataUpdate Low 387 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9108,7 +8121,7 @@ sim -> dataserver // This is a bunch of group data that needs to be appropriatly routed based on presence info. // dataserver -> simulator { - GroupDataUpdate Low Trusted Zerocoded + GroupDataUpdate Low 388 Trusted Zerocoded { AgentGroupData Variable { AgentID LLUUID } @@ -9123,7 +8136,7 @@ sim -> dataserver // dataserver -> simulator -> viewer // reliable { - AgentGroupDataUpdate Low Trusted Zerocoded + AgentGroupDataUpdate Low 389 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9145,7 +8158,7 @@ sim -> dataserver // dataserver -> userserver // reliable { - AgentDropGroup Low Trusted Zerocoded + AgentDropGroup Low 390 Trusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9158,7 +8171,7 @@ sim -> dataserver // chat and IM log table. // Sent from userserver (IM logging) and simulator (chat logging). { - LogTextMessage Low Trusted Zerocoded + LogTextMessage Low 391 Trusted Zerocoded { DataBlock Variable { FromAgentId LLUUID } @@ -9176,7 +8189,7 @@ sim -> dataserver // sim-->viewer (multiple effects that can be seen by viewer) // the AgentData block used for authentication for viewer-->sim messages { - ViewerEffect Medium NotTrusted Zerocoded + ViewerEffect Medium 17 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9193,26 +8206,12 @@ sim -> dataserver } } -// SetSunPhase -// Sets the current phase of the sun - propagated from viewer->sim->spaceserver (if godlike) -{ - SetSunPhase Medium NotTrusted Unencoded - { - AgentData Single - { AgentID LLUUID } - { SessionID LLUUID } - } - { - Data Single - { Phase F32 } // F32 (radians) - } -} // CreateTrustedCircuit // Sent to establish a trust relationship between two components. // Only sent in response to a DenyTrustedCircuit message. { - CreateTrustedCircuit Low NotTrusted Unencoded + CreateTrustedCircuit Low 392 NotTrusted Unencoded { DataBlock Single { EndPointID LLUUID } @@ -9227,7 +8226,7 @@ sim -> dataserver // - the reception of a trusted message on a non-trusted circuit // This allows us to re-auth a circuit if it gets closed due to timeouts or network failures. { - DenyTrustedCircuit Low NotTrusted Unencoded + DenyTrustedCircuit Low 393 NotTrusted Unencoded { DataBlock Single { EndPointID LLUUID } @@ -9237,12 +8236,12 @@ sim -> dataserver // RequestTrustedCircuit // If the destination does not trust the sender, a Deny is sent back. { - RequestTrustedCircuit Low Trusted Unencoded + RequestTrustedCircuit Low 394 Trusted Unencoded } { - RezSingleAttachmentFromInv Low NotTrusted Zerocoded + RezSingleAttachmentFromInv Low 395 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9263,7 +8262,7 @@ sim -> dataserver } { - RezMultipleAttachmentsFromInv Low NotTrusted Zerocoded + RezMultipleAttachmentsFromInv Low 396 NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } @@ -9291,7 +8290,7 @@ sim -> dataserver { - DetachAttachmentIntoInv Low NotTrusted Unencoded + DetachAttachmentIntoInv Low 397 NotTrusted Unencoded { ObjectData Single { AgentID LLUUID } @@ -9303,7 +8302,7 @@ sim -> dataserver // Viewer -> Sim // Used in "Make New Outfit" { - CreateNewOutfitAttachments Low NotTrusted Unencoded + CreateNewOutfitAttachments Low 398 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9325,7 +8324,7 @@ sim -> dataserver //----------------------------------------------------------------------------- { - UserInfoRequest Low NotTrusted Unencoded + UserInfoRequest Low 399 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9334,7 +8333,7 @@ sim -> dataserver } { - UserInfoReply Low NotTrusted Unencoded + UserInfoReply Low 400 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9348,7 +8347,7 @@ sim -> dataserver } { - UpdateUserInfo Low NotTrusted Unencoded + UpdateUserInfo Low 401 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9367,36 +8366,10 @@ sim -> dataserver //----------------------------------------------------------------------------- -// Message to rename identified parcels. script -> userserver -> dataserver -{ - StartParcelRename Low Trusted Unencoded - { - ParcelData Variable - { ParcelID LLUUID } - { NewName Variable 1 } // string - } -} - -// ack the last message. userserver->script -{ - StartParcelRenameAck Low Trusted Unencoded -} - -// dataserver -> userserver -> spaceserver -{ - BulkParcelRename Low Trusted Zerocoded - { - ParcelData Variable - { RegionHandle U64 } - { ParcelID LLUUID } - { NewName Variable 1 } // string - } -} - // spaceserver -> sim // tell a particular simulator to rename a parcel { - ParcelRename Low Trusted Unencoded + ParcelRename Low 402 Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } @@ -9404,36 +8377,11 @@ sim -> dataserver } } -// message to remove specified parcels. script -> userserver -> dataserver -{ - StartParcelRemove Low Trusted Unencoded - { - ParcelData Variable - { ParcelID LLUUID } - } -} - -// ack the start parcel remove message -{ - StartParcelRemoveAck Low Trusted Unencoded -} - -// dataserver -> userserver -> spaceserver -// The space server will then slice this message into a series of -// RemoveParcel messages. -{ - BulkParcelRemove Low Trusted Zerocoded - { - ParcelData Variable - { RegionHandle U64 } - { ParcelID LLUUID } - } -} // sim -> viewer // initiate upload. primarily used for uploading raw files. { - InitiateDownload Low NotTrusted Unencoded + InitiateDownload Low 403 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9448,7 +8396,7 @@ sim -> dataserver // Generalized system message. Each Requst has its own protocol for // the StringData block format and contents. { - SystemMessage Low Trusted Zerocoded + SystemMessage Low 404 Trusted Zerocoded { MethodData Single { Method Variable 1 } @@ -9472,7 +8420,7 @@ sim -> dataserver // of all map layers and NULL-layer sims. // Returns: MapLayerReply and MapBlockReply { - MapLayerRequest Low NotTrusted Unencoded + MapLayerRequest Low 405 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9485,7 +8433,7 @@ sim -> dataserver // sim -> viewer { - MapLayerReply Low Trusted Unencoded + MapLayerReply Low 406 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9506,7 +8454,7 @@ sim -> dataserver // of the sims in a specified region. // Returns: MapBlockReply { - MapBlockRequest Low NotTrusted Unencoded + MapBlockRequest Low 407 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9529,7 +8477,7 @@ sim -> dataserver // of the sims with a given name. // Returns: MapBlockReply { - MapNameRequest Low NotTrusted Unencoded + MapNameRequest Low 408 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9546,7 +8494,7 @@ sim -> dataserver // sim -> viewer { - MapBlockReply Low Trusted Unencoded + MapBlockReply Low 409 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9571,7 +8519,7 @@ sim -> dataserver // Used for Telehubs, Agents, Events, Popular Places, etc. // Returns: MapBlockReply { - MapItemRequest Low NotTrusted Unencoded + MapItemRequest Low 410 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9589,7 +8537,7 @@ sim -> dataserver // sim -> viewer { - MapItemReply Low Trusted Unencoded + MapItemReply Low 411 Trusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9615,7 +8563,7 @@ sim -> dataserver //----------------------------------------------------------------------------- // reliable { - SendPostcard Low NotTrusted Unencoded + SendPostcard Low 412 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9636,7 +8584,7 @@ sim -> dataserver // Script on simulator requests rpc channel from rpcserver // simulator -> dataserver -> MySQL { - RpcChannelRequest Low Trusted Unencoded + RpcChannelRequest Low 413 Trusted Unencoded { DataBlock Single { GridX U32 } @@ -9650,7 +8598,7 @@ sim -> dataserver // ChannelID will be the NULL UUID if unable to register // dataserver -> simulator { - RpcChannelReply Low Trusted Unencoded + RpcChannelReply Low 414 Trusted Unencoded { DataBlock Single { TaskID LLUUID } @@ -9664,7 +8612,7 @@ sim -> dataserver // RpcScriptRequestInboundForward: spaceserver -> simulator // reply: simulator -> rpcserver { - RpcScriptRequestInbound Low NotTrusted Unencoded + RpcScriptRequestInbound Low 415 NotTrusted Unencoded { TargetBlock Single { GridX U32 } @@ -9682,7 +8630,7 @@ sim -> dataserver // spaceserver -> simulator { - RpcScriptRequestInboundForward Low Trusted Unencoded + RpcScriptRequestInboundForward Low 416 Trusted Unencoded { DataBlock Single { RPCServerIP IPADDR } @@ -9698,7 +8646,7 @@ sim -> dataserver // simulator -> rpcserver // Not trusted because trust establishment doesn't work here. { - RpcScriptReplyInbound Low NotTrusted Unencoded + RpcScriptReplyInbound Low 417 NotTrusted Unencoded { DataBlock Single { TaskID LLUUID } @@ -9709,37 +8657,11 @@ sim -> dataserver } } -// Simulator asks for what sim a script lives on (intersim object->object email delivery) -// simulator -> dataserver -// *NOTE: Not in use. Phoenix 2006-08-16 -{ - MailTaskSimRequest Low Trusted Unencoded - { - DataBlock Single - { TaskID LLUUID } - } -} - -// Reply from dataserver to simulator about where a mailping needs to go. -// Same as below, but needs to be different as it has different routing. -// *NOTE: Not in use. Phoenix 2006-08-16 -{ - MailTaskSimReply Low Trusted Unencoded - { - TargetBlock Single - { TargetIP Variable 1 } // String IP - { TargetPort IPPORT } - } - { - DataBlock Single - { TaskID LLUUID } - } -} // ScriptMailRegistration // Simulator -> dataserver { - ScriptMailRegistration Low Trusted Unencoded + ScriptMailRegistration Low 418 Trusted Unencoded { DataBlock Single { TargetIP Variable 1 } // String IP @@ -9752,7 +8674,7 @@ sim -> dataserver // ParcelMediaCommandMessage // Sends a parcel media command { - ParcelMediaCommandMessage Low Trusted Unencoded + ParcelMediaCommandMessage Low 419 Trusted Unencoded { CommandBlock Single { Flags U32 } @@ -9765,7 +8687,7 @@ sim -> dataserver // Sends a parcel media update to a single user // For global updates use the parcel manager. { - ParcelMediaUpdate Low Trusted Unencoded + ParcelMediaUpdate Low 420 Trusted Unencoded { DataBlock Single { MediaURL Variable 1 } // string @@ -9777,7 +8699,7 @@ sim -> dataserver // LandStatRequest // Sent by the viewer to request collider/script information for a parcel { - LandStatRequest Low NotTrusted Unencoded + LandStatRequest Low 421 NotTrusted Unencoded { AgentData Single { AgentID LLUUID } @@ -9788,14 +8710,14 @@ sim -> dataserver { ReportType U32 } { RequestFlags U32 } { Filter Variable 1 } - { ParcelLocalID S32 1 } + { ParcelLocalID S32 } } } // LandStatReply // Sent by the simulator in response to LandStatRequest { - LandStatReply Low Trusted Unencoded + LandStatReply Low 422 Trusted Unencoded { RequestData Single { ReportType U32 } @@ -9814,3 +8736,26 @@ sim -> dataserver { OwnerName Variable 1 } } } + +// Generic Error -- this is used for sending an error message +// to a UDP recipient. The lowest common denominator is to at least +// log the message. More sophisticated receivers can do something +// smarter, for example, a money transaction failure can put up a +// more user visible UI widget. +{ + Error Low 423 NotTrusted Zerocoded + { + AgentData Single + { AgentID LLUUID } // will forward to agentid if coming from trusted circuit + } + { + Data Single + { Code S32 } // matches http status codes + { Token Variable 1 } // some specific short string based message + { ID LLUUID } // the transactionid/uniqueid/sessionid whatever. + { System Variable 1 } // The hierarchical path to the system, eg, "message/handler" + { Message Variable 2 } // Human readable message + { Data Variable 2 } // Binary serialized LLSD for extra info. + } +} + diff --git a/linden/scripts/setup-path.py b/linden/scripts/setup-path.py new file mode 100755 index 0000000..30048ba --- /dev/null +++ b/linden/scripts/setup-path.py @@ -0,0 +1,38 @@ +#!/usr/bin/python +# @file setup-path.py +# @brief Get the python library directory in the path, so we don't have +# to screw with PYTHONPATH or symbolic links. +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +import sys +from os.path import realpath, dirname, join + +# Walk back to checkout base directory +dir = dirname(dirname(realpath(__file__))) +# Walk in to libraries directory +dir = join(join(join(dir, 'indra'), 'lib'), 'python') + +if dir not in sys.path: + sys.path.insert(0, dir) diff --git a/linden/scripts/template_verifier.py b/linden/scripts/template_verifier.py new file mode 100755 index 0000000..1bc03e7 --- /dev/null +++ b/linden/scripts/template_verifier.py @@ -0,0 +1,175 @@ +#!/usr/bin/python +# @file template_verifier.py +# @brief Message template compatibility verifier. +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +"""template_verifier is a script which will compare the +current repository message template with the "master" message template, accessible +via http://secondlife.com/app/message_template/master_message_template.msg +If [FILE] is specified, it will be checked against the master template. +If [FILE] [FILE] is specified, two local files will be checked against +each other. +""" + +from os.path import realpath, dirname, join, exists +setup_path = join(dirname(realpath(__file__)), "setup-path.py") +if exists(setup_path): + execfile(setup_path) +import optparse +import os +import sys +import urllib + +from indra import compatibility +from indra import llmessage + +def die(msg): + print >>sys.stderr, msg + sys.exit(1) + +MESSAGE_TEMPLATE = 'message_template.msg' + +PRODUCTION_ACCEPTABLE = (compatibility.Same, compatibility.Newer) +DEVELOPMENT_ACCEPTABLE = ( + compatibility.Same, compatibility.Newer, + compatibility.Older, compatibility.Mixed) + +def getstatusall(command): + """ Like commands.getstatusoutput, but returns stdout and + stderr separately(to get around "killed by signal 15" getting + included as part of the file). Also, works on Windows.""" + (input, out, err) = os.popen3(command, 't') + input.close() # send no input to the command + output = out.read() + error = err.read() + out.close() + status = err.close() # the status comes from the *last* pipe you close + return status, output, error + +def getstatusoutput(command): + status, output, error = getstatusall(command) + return status, output + +def compare(base, current, mode): + """Compare the current template against the base template using the given + 'mode' strictness: + + development: Allows Same, Newer, Older, and Mixed + production: Allows only Same or Newer + + Print out information about whether the current template is compatible + with the base template. + + Returns a tuple of (bool, Compatibility) + Return True if they are compatible in this mode, False if not. + """ + base = llmessage.parseTemplateString(base) + current = llmessage.parseTemplateString(current) + + compat = current.compatibleWithBase(base) + if mode == 'production': + acceptable = PRODUCTION_ACCEPTABLE + else: + acceptable = DEVELOPMENT_ACCEPTABLE + + if type(compat) in acceptable: + return True, compat + return False, compat + +def local_template_filename(): + """Returns the message template's default location relative to template_verifier.py: + ./messages/message_template.msg.""" + d = os.path.dirname(os.path.realpath(__file__)) + return os.path.join(d, 'messages', MESSAGE_TEMPLATE) + +def run(sysargs): + parser = optparse.OptionParser( + usage="usage: %prog [FILE] [FILE]", + description=__doc__) + parser.add_option( + '-m', '--mode', type='string', dest='mode', + default='development', + help="""[development|production] The strictness mode to use +while checking the template; see the wiki page for details about +what is allowed and disallowed by each mode: +http://wiki.secondlife.com/wiki/Template_verifier.py +""") + parser.add_option( + '-u', '--master_url', type='string', dest='master_url', + default='http://secondlife.com/app/message_template/master_message_template.msg', + help="""The url of the master message template.""") + + options, args = parser.parse_args(sysargs) + + # both current and master supplied in positional params + if len(args) == 2: + master_filename, current_filename = args + print "base:", master_filename + print "current:", current_filename + master = file(master_filename).read() + current = file(current_filename).read() + # only current supplied in positional param + elif len(args) == 1: + master = None + current_filename = args[0] + print "base: <master template from repository>" + print "current:", current_filename + current = file(current_filename).read() + # nothing specified, use defaults for everything + elif len(args) == 0: + master = None + current = None + else: + die("Too many arguments") + + # fetch the master from the url (default or supplied) + if master is None: + master = urllib.urlopen(options.master_url).read() + + # fetch the template for this build + if current is None: + current_filename = local_template_filename() + print "base: <master template from repository>" + print "current:", current_filename + current = file(current_filename).read() + + acceptable, compat = compare( + master, current, options.mode) + + def explain(header, compat): + print header + # indent compatibility explanation + print '\n\t'.join(compat.explain().split('\n')) + + if acceptable: + explain("--- PASS ---", compat) + else: + explain("*** FAIL ***", compat) + return 1 + +if __name__ == '__main__': + sys.exit(run(sys.argv[1:])) + + -- cgit v1.1