diff options
29 files changed, 741 insertions, 1466 deletions
@@ -98,3 +98,5 @@ OpenSim/Region/ScriptEngine/test-results/ | |||
98 | OpenSim/Tests/Common/test-results/ | 98 | OpenSim/Tests/Common/test-results/ |
99 | OpenSim/Tests/test-results/ | 99 | OpenSim/Tests/test-results/ |
100 | test-results/ | 100 | test-results/ |
101 | doc/html | ||
102 | doc/doxygen.error.log | ||
diff --git a/.nant/local.include b/.nant/local.include index 5185717..2339ce8 100644 --- a/.nant/local.include +++ b/.nant/local.include | |||
@@ -43,6 +43,7 @@ | |||
43 | <delete dir="${distbindir}/Prebuild"/> | 43 | <delete dir="${distbindir}/Prebuild"/> |
44 | <delete dir="${distbindir}/%temp%"/> | 44 | <delete dir="${distbindir}/%temp%"/> |
45 | <delete dir="${distbindir}/.nant"/> | 45 | <delete dir="${distbindir}/.nant"/> |
46 | <delete dir="${distbindir}/ThirdParty"/> | ||
46 | <delete> | 47 | <delete> |
47 | <fileset basedir="${distbindir}"> | 48 | <fileset basedir="${distbindir}"> |
48 | <include name="compile.bat"/> | 49 | <include name="compile.bat"/> |
diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs index b4d701a..f707d98 100644 --- a/OpenSim/Data/Null/NullRegionData.cs +++ b/OpenSim/Data/Null/NullRegionData.cs | |||
@@ -113,11 +113,14 @@ namespace OpenSim.Data.Null | |||
113 | // Find region data | 113 | // Find region data |
114 | List<RegionData> ret = new List<RegionData>(); | 114 | List<RegionData> ret = new List<RegionData>(); |
115 | 115 | ||
116 | foreach (RegionData r in m_regionData.Values) | 116 | lock (m_regionData) |
117 | { | 117 | { |
118 | // m_log.DebugFormat("[NULL REGION DATA]: comparing {0} to {1}", cleanName, r.RegionName.ToLower()); | 118 | foreach (RegionData r in m_regionData.Values) |
119 | { | ||
120 | // m_log.DebugFormat("[NULL REGION DATA]: comparing {0} to {1}", cleanName, r.RegionName.ToLower()); | ||
119 | if (queryMatch(r.RegionName.ToLower())) | 121 | if (queryMatch(r.RegionName.ToLower())) |
120 | ret.Add(r); | 122 | ret.Add(r); |
123 | } | ||
121 | } | 124 | } |
122 | 125 | ||
123 | if (ret.Count > 0) | 126 | if (ret.Count > 0) |
@@ -133,10 +136,13 @@ namespace OpenSim.Data.Null | |||
133 | 136 | ||
134 | List<RegionData> ret = new List<RegionData>(); | 137 | List<RegionData> ret = new List<RegionData>(); |
135 | 138 | ||
136 | foreach (RegionData r in m_regionData.Values) | 139 | lock (m_regionData) |
137 | { | 140 | { |
138 | if (r.posX == posX && r.posY == posY) | 141 | foreach (RegionData r in m_regionData.Values) |
139 | ret.Add(r); | 142 | { |
143 | if (r.posX == posX && r.posY == posY) | ||
144 | ret.Add(r); | ||
145 | } | ||
140 | } | 146 | } |
141 | 147 | ||
142 | if (ret.Count > 0) | 148 | if (ret.Count > 0) |
@@ -150,8 +156,11 @@ namespace OpenSim.Data.Null | |||
150 | if (m_useStaticInstance && Instance != this) | 156 | if (m_useStaticInstance && Instance != this) |
151 | return Instance.Get(regionID, scopeID); | 157 | return Instance.Get(regionID, scopeID); |
152 | 158 | ||
153 | if (m_regionData.ContainsKey(regionID)) | 159 | lock (m_regionData) |
154 | return m_regionData[regionID]; | 160 | { |
161 | if (m_regionData.ContainsKey(regionID)) | ||
162 | return m_regionData[regionID]; | ||
163 | } | ||
155 | 164 | ||
156 | return null; | 165 | return null; |
157 | } | 166 | } |
@@ -163,10 +172,13 @@ namespace OpenSim.Data.Null | |||
163 | 172 | ||
164 | List<RegionData> ret = new List<RegionData>(); | 173 | List<RegionData> ret = new List<RegionData>(); |
165 | 174 | ||
166 | foreach (RegionData r in m_regionData.Values) | 175 | lock (m_regionData) |
167 | { | 176 | { |
168 | if (r.posX >= startX && r.posX <= endX && r.posY >= startY && r.posY <= endY) | 177 | foreach (RegionData r in m_regionData.Values) |
169 | ret.Add(r); | 178 | { |
179 | if (r.posX >= startX && r.posX <= endX && r.posY >= startY && r.posY <= endY) | ||
180 | ret.Add(r); | ||
181 | } | ||
170 | } | 182 | } |
171 | 183 | ||
172 | return ret; | 184 | return ret; |
@@ -180,7 +192,10 @@ namespace OpenSim.Data.Null | |||
180 | // m_log.DebugFormat( | 192 | // m_log.DebugFormat( |
181 | // "[NULL REGION DATA]: Storing region {0} {1}, scope {2}", data.RegionName, data.RegionID, data.ScopeID); | 193 | // "[NULL REGION DATA]: Storing region {0} {1}, scope {2}", data.RegionName, data.RegionID, data.ScopeID); |
182 | 194 | ||
183 | m_regionData[data.RegionID] = data; | 195 | lock (m_regionData) |
196 | { | ||
197 | m_regionData[data.RegionID] = data; | ||
198 | } | ||
184 | 199 | ||
185 | return true; | 200 | return true; |
186 | } | 201 | } |
@@ -190,10 +205,13 @@ namespace OpenSim.Data.Null | |||
190 | if (m_useStaticInstance && Instance != this) | 205 | if (m_useStaticInstance && Instance != this) |
191 | return Instance.SetDataItem(regionID, item, value); | 206 | return Instance.SetDataItem(regionID, item, value); |
192 | 207 | ||
193 | if (!m_regionData.ContainsKey(regionID)) | 208 | lock (m_regionData) |
194 | return false; | 209 | { |
210 | if (!m_regionData.ContainsKey(regionID)) | ||
211 | return false; | ||
195 | 212 | ||
196 | m_regionData[regionID].Data[item] = value; | 213 | m_regionData[regionID].Data[item] = value; |
214 | } | ||
197 | 215 | ||
198 | return true; | 216 | return true; |
199 | } | 217 | } |
@@ -205,10 +223,13 @@ namespace OpenSim.Data.Null | |||
205 | 223 | ||
206 | // m_log.DebugFormat("[NULL REGION DATA]: Deleting region {0}", regionID); | 224 | // m_log.DebugFormat("[NULL REGION DATA]: Deleting region {0}", regionID); |
207 | 225 | ||
208 | if (!m_regionData.ContainsKey(regionID)) | 226 | lock (m_regionData) |
209 | return false; | 227 | { |
228 | if (!m_regionData.ContainsKey(regionID)) | ||
229 | return false; | ||
210 | 230 | ||
211 | m_regionData.Remove(regionID); | 231 | m_regionData.Remove(regionID); |
232 | } | ||
212 | 233 | ||
213 | return true; | 234 | return true; |
214 | } | 235 | } |
@@ -238,10 +259,13 @@ namespace OpenSim.Data.Null | |||
238 | 259 | ||
239 | List<RegionData> ret = new List<RegionData>(); | 260 | List<RegionData> ret = new List<RegionData>(); |
240 | 261 | ||
241 | foreach (RegionData r in m_regionData.Values) | 262 | lock (m_regionData) |
242 | { | 263 | { |
243 | if ((Convert.ToInt32(r.Data["flags"]) & regionFlags) != 0) | 264 | foreach (RegionData r in m_regionData.Values) |
244 | ret.Add(r); | 265 | { |
266 | if ((Convert.ToInt32(r.Data["flags"]) & regionFlags) != 0) | ||
267 | ret.Add(r); | ||
268 | } | ||
245 | } | 269 | } |
246 | 270 | ||
247 | return ret; | 271 | return ret; |
diff --git a/OpenSim/Framework/Console/ConsoleDisplayTable.cs b/OpenSim/Framework/Console/ConsoleDisplayTable.cs index c620dfe..711a337 100644 --- a/OpenSim/Framework/Console/ConsoleDisplayTable.cs +++ b/OpenSim/Framework/Console/ConsoleDisplayTable.cs | |||
@@ -56,7 +56,7 @@ namespace OpenSim.Framework.Console | |||
56 | public List<ConsoleDisplayTableRow> Rows { get; private set; } | 56 | public List<ConsoleDisplayTableRow> Rows { get; private set; } |
57 | 57 | ||
58 | /// <summary> | 58 | /// <summary> |
59 | /// Number of spaces to indent the table. | 59 | /// Number of spaces to indent the whole table. |
60 | /// </summary> | 60 | /// </summary> |
61 | public int Indent { get; set; } | 61 | public int Indent { get; set; } |
62 | 62 | ||
@@ -84,7 +84,7 @@ namespace OpenSim.Framework.Console | |||
84 | Columns.Add(new ConsoleDisplayTableColumn(name, width)); | 84 | Columns.Add(new ConsoleDisplayTableColumn(name, width)); |
85 | } | 85 | } |
86 | 86 | ||
87 | public void AddRow(params string[] cells) | 87 | public void AddRow(params object[] cells) |
88 | { | 88 | { |
89 | Rows.Add(new ConsoleDisplayTableRow(cells)); | 89 | Rows.Add(new ConsoleDisplayTableRow(cells)); |
90 | } | 90 | } |
@@ -113,7 +113,8 @@ namespace OpenSim.Framework.Console | |||
113 | 113 | ||
114 | for (int i = 0; i < Columns.Count; i++) | 114 | for (int i = 0; i < Columns.Count; i++) |
115 | { | 115 | { |
116 | formatSb.Append(' ', TableSpacing); | 116 | if (i != 0) |
117 | formatSb.Append(' ', TableSpacing); | ||
117 | 118 | ||
118 | // Can only do left formatting for now | 119 | // Can only do left formatting for now |
119 | formatSb.AppendFormat("{{{0},-{1}}}", i, Columns[i].Width); | 120 | formatSb.AppendFormat("{{{0},-{1}}}", i, Columns[i].Width); |
@@ -139,16 +140,16 @@ namespace OpenSim.Framework.Console | |||
139 | 140 | ||
140 | public struct ConsoleDisplayTableRow | 141 | public struct ConsoleDisplayTableRow |
141 | { | 142 | { |
142 | public List<string> Cells { get; private set; } | 143 | public List<object> Cells { get; private set; } |
143 | 144 | ||
144 | public ConsoleDisplayTableRow(List<string> cells) : this() | 145 | public ConsoleDisplayTableRow(List<object> cells) : this() |
145 | { | 146 | { |
146 | Cells = cells; | 147 | Cells = cells; |
147 | } | 148 | } |
148 | 149 | ||
149 | public ConsoleDisplayTableRow(params string[] cells) : this() | 150 | public ConsoleDisplayTableRow(params object[] cells) : this() |
150 | { | 151 | { |
151 | Cells = new List<string>(cells); | 152 | Cells = new List<object>(cells); |
152 | } | 153 | } |
153 | } | 154 | } |
154 | } \ No newline at end of file | 155 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index e76ac24..c049247 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -2114,5 +2114,16 @@ namespace OpenSim.Framework | |||
2114 | return firstName + "." + lastName + " " + "@" + uri.Authority; | 2114 | return firstName + "." + lastName + " " + "@" + uri.Authority; |
2115 | } | 2115 | } |
2116 | #endregion | 2116 | #endregion |
2117 | |||
2118 | /// <summary> | ||
2119 | /// Escapes the special characters used in "LIKE". | ||
2120 | /// </summary> | ||
2121 | /// <remarks> | ||
2122 | /// For example: EscapeForLike("foo_bar%baz") = "foo\_bar\%baz" | ||
2123 | /// </remarks> | ||
2124 | public static string EscapeForLike(string str) | ||
2125 | { | ||
2126 | return str.Replace("_", "\\_").Replace("%", "\\%"); | ||
2127 | } | ||
2117 | } | 2128 | } |
2118 | } | 2129 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index acd156e..6323160 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -722,15 +722,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
722 | 722 | ||
723 | if (!silent) | 723 | if (!silent) |
724 | { | 724 | { |
725 | // Killing it here will cause the client to deselect it | 725 | if (so.HasPrivateAttachmentPoint) |
726 | // It then reappears on the avatar, deselected | ||
727 | // through the full update below | ||
728 | // | ||
729 | if (so.IsSelected) | ||
730 | { | ||
731 | m_scene.SendKillObject(new List<uint> { so.RootPart.LocalId }); | ||
732 | } | ||
733 | else if (so.HasPrivateAttachmentPoint) | ||
734 | { | 726 | { |
735 | // m_log.DebugFormat( | 727 | // m_log.DebugFormat( |
736 | // "[ATTACHMENTS MODULE]: Killing private HUD {0} for avatars other than {1} at attachment point {2}", | 728 | // "[ATTACHMENTS MODULE]: Killing private HUD {0} for avatars other than {1} at attachment point {2}", |
@@ -745,7 +737,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
745 | }); | 737 | }); |
746 | } | 738 | } |
747 | 739 | ||
748 | so.IsSelected = false; // fudge.... | 740 | // Fudge below is an extremely unhelpful comment. It's probably here so that the scheduled full update |
741 | // will succeed, as that will not update if an attachment is selected. | ||
742 | so.IsSelected = false; // fudge.... | ||
743 | |||
749 | so.ScheduleGroupForFullUpdate(); | 744 | so.ScheduleGroupForFullUpdate(); |
750 | } | 745 | } |
751 | 746 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index d0e88f6..4c85637 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -124,7 +124,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
124 | SaveAssets = true; | 124 | SaveAssets = true; |
125 | } | 125 | } |
126 | 126 | ||
127 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | 127 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids, bool timedOut) |
128 | { | 128 | { |
129 | Exception reportedException = null; | 129 | Exception reportedException = null; |
130 | bool succeeded = true; | 130 | bool succeeded = true; |
@@ -143,6 +143,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
143 | m_saveStream.Close(); | 143 | m_saveStream.Close(); |
144 | } | 144 | } |
145 | 145 | ||
146 | if (timedOut) | ||
147 | { | ||
148 | succeeded = false; | ||
149 | reportedException = new Exception("Loading assets timed out"); | ||
150 | } | ||
151 | |||
146 | m_module.TriggerInventoryArchiveSaved( | 152 | m_module.TriggerInventoryArchiveSaved( |
147 | m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); | 153 | m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); |
148 | } | 154 | } |
@@ -350,7 +356,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
350 | { | 356 | { |
351 | m_log.DebugFormat("[INVENTORY ARCHIVER]: Not saving assets since --noassets was specified"); | 357 | m_log.DebugFormat("[INVENTORY ARCHIVER]: Not saving assets since --noassets was specified"); |
352 | 358 | ||
353 | ReceivedAllAssets(new List<UUID>(), new List<UUID>()); | 359 | ReceivedAllAssets(new List<UUID>(), new List<UUID>(), false); |
354 | } | 360 | } |
355 | } | 361 | } |
356 | catch (Exception) | 362 | catch (Exception) |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 01f1c63..fcfdf7c 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -622,13 +622,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
622 | /// <returns></returns> | 622 | /// <returns></returns> |
623 | private bool ResolveUserUuid(Scene scene, UUID uuid) | 623 | private bool ResolveUserUuid(Scene scene, UUID uuid) |
624 | { | 624 | { |
625 | if (!m_validUserUuids.ContainsKey(uuid)) | 625 | lock (m_validUserUuids) |
626 | { | 626 | { |
627 | UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, uuid); | 627 | if (!m_validUserUuids.ContainsKey(uuid)) |
628 | m_validUserUuids.Add(uuid, account != null); | 628 | { |
629 | } | 629 | // Note: we call GetUserAccount() inside the lock because this UserID is likely |
630 | // to occur many times, and we only want to query the users service once. | ||
631 | UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, uuid); | ||
632 | m_validUserUuids.Add(uuid, account != null); | ||
633 | } | ||
630 | 634 | ||
631 | return m_validUserUuids[uuid]; | 635 | return m_validUserUuids[uuid]; |
636 | } | ||
632 | } | 637 | } |
633 | 638 | ||
634 | /// <summary> | 639 | /// <summary> |
@@ -641,19 +646,26 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
641 | if (uuid == UUID.Zero) | 646 | if (uuid == UUID.Zero) |
642 | return true; // this means the object has no group | 647 | return true; // this means the object has no group |
643 | 648 | ||
644 | if (!m_validGroupUuids.ContainsKey(uuid)) | 649 | lock (m_validGroupUuids) |
645 | { | 650 | { |
646 | bool exists; | 651 | if (!m_validGroupUuids.ContainsKey(uuid)) |
647 | 652 | { | |
648 | if (m_groupsModule == null) | 653 | bool exists; |
649 | exists = false; | 654 | if (m_groupsModule == null) |
650 | else | 655 | { |
651 | exists = (m_groupsModule.GetGroupRecord(uuid) != null); | 656 | exists = false; |
657 | } | ||
658 | else | ||
659 | { | ||
660 | // Note: we call GetGroupRecord() inside the lock because this GroupID is likely | ||
661 | // to occur many times, and we only want to query the groups service once. | ||
662 | exists = (m_groupsModule.GetGroupRecord(uuid) != null); | ||
663 | } | ||
664 | m_validGroupUuids.Add(uuid, exists); | ||
665 | } | ||
652 | 666 | ||
653 | m_validGroupUuids.Add(uuid, exists); | 667 | return m_validGroupUuids[uuid]; |
654 | } | 668 | } |
655 | |||
656 | return m_validGroupUuids[uuid]; | ||
657 | } | 669 | } |
658 | 670 | ||
659 | /// Load an asset | 671 | /// Load an asset |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs index 7bdd65c..367693d 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequest.cs | |||
@@ -587,19 +587,29 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
587 | } | 587 | } |
588 | } | 588 | } |
589 | 589 | ||
590 | protected void ReceivedAllAssets( | 590 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids, bool timedOut) |
591 | ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | ||
592 | { | 591 | { |
593 | foreach (UUID uuid in assetsNotFoundUuids) | 592 | string errorMessage; |
593 | |||
594 | if (timedOut) | ||
594 | { | 595 | { |
595 | m_log.DebugFormat("[ARCHIVER]: Could not find asset {0}", uuid); | 596 | errorMessage = "Loading assets timed out"; |
596 | } | 597 | } |
598 | else | ||
599 | { | ||
600 | foreach (UUID uuid in assetsNotFoundUuids) | ||
601 | { | ||
602 | m_log.DebugFormat("[ARCHIVER]: Could not find asset {0}", uuid); | ||
603 | } | ||
597 | 604 | ||
598 | // m_log.InfoFormat( | 605 | // m_log.InfoFormat( |
599 | // "[ARCHIVER]: Received {0} of {1} assets requested", | 606 | // "[ARCHIVER]: Received {0} of {1} assets requested", |
600 | // assetsFoundUuids.Count, assetsFoundUuids.Count + assetsNotFoundUuids.Count); | 607 | // assetsFoundUuids.Count, assetsFoundUuids.Count + assetsNotFoundUuids.Count); |
601 | 608 | ||
602 | CloseArchive(String.Empty); | 609 | errorMessage = String.Empty; |
610 | } | ||
611 | |||
612 | CloseArchive(errorMessage); | ||
603 | } | 613 | } |
604 | 614 | ||
605 | /// <summary> | 615 | /// <summary> |
@@ -626,4 +636,4 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
626 | m_rootScene.EventManager.TriggerOarFileSaved(m_requestId, errorMessage); | 636 | m_rootScene.EventManager.TriggerOarFileSaved(m_requestId, errorMessage); |
627 | } | 637 | } |
628 | } | 638 | } |
629 | } \ No newline at end of file | 639 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs index 95d109c..c1ff94d 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs | |||
@@ -150,12 +150,5 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
150 | m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", m_assetsWritten); | 150 | m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", m_assetsWritten); |
151 | } | 151 | } |
152 | 152 | ||
153 | /// <summary> | ||
154 | /// Only call this if you need to force a close on the underlying writer. | ||
155 | /// </summary> | ||
156 | public void ForceClose() | ||
157 | { | ||
158 | m_archiveWriter.Close(); | ||
159 | } | ||
160 | } | 153 | } |
161 | } | 154 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs index e2f8833..715bf51 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs | |||
@@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
50 | /// Method called when all the necessary assets for an archive request have been received. | 50 | /// Method called when all the necessary assets for an archive request have been received. |
51 | /// </summary> | 51 | /// </summary> |
52 | public delegate void AssetsRequestCallback( | 52 | public delegate void AssetsRequestCallback( |
53 | ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids); | 53 | ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids, bool timedOut); |
54 | 54 | ||
55 | enum RequestState | 55 | enum RequestState |
56 | { | 56 | { |
@@ -148,7 +148,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
148 | if (m_repliesRequired == 0) | 148 | if (m_repliesRequired == 0) |
149 | { | 149 | { |
150 | m_requestState = RequestState.Completed; | 150 | m_requestState = RequestState.Completed; |
151 | PerformAssetsRequestCallback(null); | 151 | PerformAssetsRequestCallback(false); |
152 | return; | 152 | return; |
153 | } | 153 | } |
154 | 154 | ||
@@ -164,7 +164,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
164 | 164 | ||
165 | protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) | 165 | protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) |
166 | { | 166 | { |
167 | bool close = true; | 167 | bool timedOut = true; |
168 | 168 | ||
169 | try | 169 | try |
170 | { | 170 | { |
@@ -174,7 +174,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
174 | // the final request came in (assuming that such a thing is possible) | 174 | // the final request came in (assuming that such a thing is possible) |
175 | if (m_requestState == RequestState.Completed) | 175 | if (m_requestState == RequestState.Completed) |
176 | { | 176 | { |
177 | close = false; | 177 | timedOut = false; |
178 | return; | 178 | return; |
179 | } | 179 | } |
180 | 180 | ||
@@ -223,8 +223,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
223 | } | 223 | } |
224 | finally | 224 | finally |
225 | { | 225 | { |
226 | if (close) | 226 | if (timedOut) |
227 | m_assetsArchiver.ForceClose(); | 227 | Util.FireAndForget(PerformAssetsRequestCallback, true); |
228 | } | 228 | } |
229 | } | 229 | } |
230 | 230 | ||
@@ -290,7 +290,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
290 | 290 | ||
291 | // We want to stop using the asset cache thread asap | 291 | // We want to stop using the asset cache thread asap |
292 | // as we now need to do the work of producing the rest of the archive | 292 | // as we now need to do the work of producing the rest of the archive |
293 | Util.FireAndForget(PerformAssetsRequestCallback); | 293 | Util.FireAndForget(PerformAssetsRequestCallback, false); |
294 | } | 294 | } |
295 | else | 295 | else |
296 | { | 296 | { |
@@ -311,9 +311,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
311 | { | 311 | { |
312 | Culture.SetCurrentCulture(); | 312 | Culture.SetCurrentCulture(); |
313 | 313 | ||
314 | Boolean timedOut = (Boolean)o; | ||
315 | |||
314 | try | 316 | try |
315 | { | 317 | { |
316 | m_assetsRequestCallback(m_foundAssetUuids, m_notFoundAssetUuids); | 318 | m_assetsRequestCallback(m_foundAssetUuids, m_notFoundAssetUuids, timedOut); |
317 | } | 319 | } |
318 | catch (Exception e) | 320 | catch (Exception e) |
319 | { | 321 | { |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 267332d..9aee491 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -128,7 +128,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
128 | { | 128 | { |
129 | uint sun = 0; | 129 | uint sun = 0; |
130 | 130 | ||
131 | if (!Scene.RegionInfo.EstateSettings.UseGlobalTime) | 131 | if (Scene.RegionInfo.EstateSettings.FixedSun) |
132 | sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800; | 132 | sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800; |
133 | UUID estateOwner; | 133 | UUID estateOwner; |
134 | estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner; | 134 | estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner; |
@@ -1128,6 +1128,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1128 | { | 1128 | { |
1129 | Scene.RegionInfo.EstateSettings.UseGlobalTime = false; | 1129 | Scene.RegionInfo.EstateSettings.UseGlobalTime = false; |
1130 | Scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0; | 1130 | Scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0; |
1131 | // Warning: FixedSun should be set to True, otherwise this sun position won't be used. | ||
1131 | } | 1132 | } |
1132 | 1133 | ||
1133 | if ((parms1 & 0x00000010) != 0) | 1134 | if ((parms1 & 0x00000010) != 0) |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 281c143..b4f7d51 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -141,6 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
141 | m_scene.EventManager.OnValidateLandBuy += EventManagerOnValidateLandBuy; | 141 | m_scene.EventManager.OnValidateLandBuy += EventManagerOnValidateLandBuy; |
142 | m_scene.EventManager.OnLandBuy += EventManagerOnLandBuy; | 142 | m_scene.EventManager.OnLandBuy += EventManagerOnLandBuy; |
143 | m_scene.EventManager.OnNewClient += EventManagerOnNewClient; | 143 | m_scene.EventManager.OnNewClient += EventManagerOnNewClient; |
144 | m_scene.EventManager.OnMakeChildAgent += EventMakeChildAgent; | ||
144 | m_scene.EventManager.OnSignificantClientMovement += EventManagerOnSignificantClientMovement; | 145 | m_scene.EventManager.OnSignificantClientMovement += EventManagerOnSignificantClientMovement; |
145 | m_scene.EventManager.OnNoticeNoLandDataFromStorage += EventManagerOnNoLandDataFromStorage; | 146 | m_scene.EventManager.OnNoticeNoLandDataFromStorage += EventManagerOnNoLandDataFromStorage; |
146 | m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage; | 147 | m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage; |
@@ -221,6 +222,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
221 | } | 222 | } |
222 | } | 223 | } |
223 | 224 | ||
225 | public void EventMakeChildAgent(ScenePresence avatar) | ||
226 | { | ||
227 | avatar.currentParcelUUID = UUID.Zero; | ||
228 | } | ||
229 | |||
224 | void ClientOnPreAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData) | 230 | void ClientOnPreAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData) |
225 | { | 231 | { |
226 | } | 232 | } |
@@ -249,17 +255,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
249 | newData.LocalID = local_id; | 255 | newData.LocalID = local_id; |
250 | ILandObject landobj = null; | 256 | ILandObject landobj = null; |
251 | 257 | ||
258 | ILandObject land; | ||
252 | lock (m_landList) | 259 | lock (m_landList) |
253 | { | 260 | { |
254 | if (m_landList.ContainsKey(local_id)) | 261 | if (m_landList.TryGetValue(local_id, out land)) |
255 | { | 262 | land.LandData = newData; |
256 | m_landList[local_id].LandData = newData; | ||
257 | landobj = m_landList[local_id]; | ||
258 | // m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, m_landList[local_id]); | ||
259 | } | ||
260 | } | 263 | } |
261 | if(landobj != null) | 264 | |
262 | m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, landobj); | 265 | if (land != null) |
266 | m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, land); | ||
263 | } | 267 | } |
264 | 268 | ||
265 | public bool AllowedForcefulBans | 269 | public bool AllowedForcefulBans |
@@ -584,7 +588,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
584 | // Only now can we add the prim counts to the land object - we rely on the global ID which is generated | 588 | // Only now can we add the prim counts to the land object - we rely on the global ID which is generated |
585 | // as a random UUID inside LandData initialization | 589 | // as a random UUID inside LandData initialization |
586 | if (m_primCountModule != null) | 590 | if (m_primCountModule != null) |
587 | new_land.PrimCounts = m_primCountModule.GetPrimCounts(new_land.LandData.GlobalID); | 591 | new_land.PrimCounts = m_primCountModule.GetPrimCounts(new_land.LandData.GlobalID); |
588 | 592 | ||
589 | lock (m_landList) | 593 | lock (m_landList) |
590 | { | 594 | { |
@@ -621,6 +625,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
621 | /// <param name="local_id">Land.localID of the peice of land to remove.</param> | 625 | /// <param name="local_id">Land.localID of the peice of land to remove.</param> |
622 | public void removeLandObject(int local_id) | 626 | public void removeLandObject(int local_id) |
623 | { | 627 | { |
628 | ILandObject land; | ||
624 | lock (m_landList) | 629 | lock (m_landList) |
625 | { | 630 | { |
626 | for (int x = 0; x < 64; x++) | 631 | for (int x = 0; x < 64; x++) |
@@ -637,9 +642,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
637 | } | 642 | } |
638 | } | 643 | } |
639 | 644 | ||
640 | m_scene.EventManager.TriggerLandObjectRemoved(m_landList[local_id].LandData.GlobalID); | 645 | land = m_landList[local_id]; |
641 | m_landList.Remove(local_id); | 646 | m_landList.Remove(local_id); |
642 | } | 647 | } |
648 | |||
649 | m_scene.EventManager.TriggerLandObjectRemoved(land.LandData.GlobalID); | ||
643 | } | 650 | } |
644 | 651 | ||
645 | /// <summary> | 652 | /// <summary> |
@@ -1399,25 +1406,72 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1399 | 1406 | ||
1400 | public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) | 1407 | public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) |
1401 | { | 1408 | { |
1402 | ILandObject selectedParcel = null; | 1409 | if (localID != -1) |
1403 | lock (m_landList) | ||
1404 | { | 1410 | { |
1405 | m_landList.TryGetValue(localID, out selectedParcel); | 1411 | ILandObject selectedParcel = null; |
1412 | lock (m_landList) | ||
1413 | { | ||
1414 | m_landList.TryGetValue(localID, out selectedParcel); | ||
1415 | } | ||
1416 | |||
1417 | if (selectedParcel == null) | ||
1418 | return; | ||
1419 | |||
1420 | selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient); | ||
1406 | } | 1421 | } |
1422 | else | ||
1423 | { | ||
1424 | if (returnType != 1) | ||
1425 | { | ||
1426 | m_log.WarnFormat("[LAND MANAGEMENT MODULE]: ReturnObjectsInParcel: unknown return type {0}", returnType); | ||
1427 | return; | ||
1428 | } | ||
1407 | 1429 | ||
1408 | if (selectedParcel == null) return; | 1430 | // We get here when the user returns objects from the list of Top Colliders or Top Scripts. |
1431 | // In that case we receive specific object UUID's, but no parcel ID. | ||
1409 | 1432 | ||
1410 | selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient); | 1433 | Dictionary<UUID, HashSet<SceneObjectGroup>> returns = new Dictionary<UUID, HashSet<SceneObjectGroup>>(); |
1434 | |||
1435 | foreach (UUID groupID in taskIDs) | ||
1436 | { | ||
1437 | SceneObjectGroup obj = m_scene.GetSceneObjectGroup(groupID); | ||
1438 | if (obj != null) | ||
1439 | { | ||
1440 | if (!returns.ContainsKey(obj.OwnerID)) | ||
1441 | returns[obj.OwnerID] = new HashSet<SceneObjectGroup>(); | ||
1442 | returns[obj.OwnerID].Add(obj); | ||
1443 | } | ||
1444 | else | ||
1445 | { | ||
1446 | m_log.WarnFormat("[LAND MANAGEMENT MODULE]: ReturnObjectsInParcel: unknown object {0}", groupID); | ||
1447 | } | ||
1448 | } | ||
1449 | |||
1450 | int num = 0; | ||
1451 | foreach (HashSet<SceneObjectGroup> objs in returns.Values) | ||
1452 | num += objs.Count; | ||
1453 | m_log.DebugFormat("[LAND MANAGEMENT MODULE]: Returning {0} specific object(s)", num); | ||
1454 | |||
1455 | foreach (HashSet<SceneObjectGroup> objs in returns.Values) | ||
1456 | { | ||
1457 | List<SceneObjectGroup> objs2 = new List<SceneObjectGroup>(objs); | ||
1458 | if (m_scene.Permissions.CanReturnObjects(null, remoteClient.AgentId, objs2)) | ||
1459 | { | ||
1460 | m_scene.returnObjects(objs2.ToArray(), remoteClient.AgentId); | ||
1461 | } | ||
1462 | else | ||
1463 | { | ||
1464 | m_log.WarnFormat("[LAND MANAGEMENT MODULE]: ReturnObjectsInParcel: not permitted to return {0} object(s) belonging to user {1}", | ||
1465 | objs2.Count, objs2[0].OwnerID); | ||
1466 | } | ||
1467 | } | ||
1468 | } | ||
1411 | } | 1469 | } |
1412 | 1470 | ||
1413 | public void EventManagerOnNoLandDataFromStorage() | 1471 | public void EventManagerOnNoLandDataFromStorage() |
1414 | { | 1472 | { |
1415 | // called methods already have locks | 1473 | ResetSimLandObjects(); |
1416 | // lock (m_landList) | 1474 | CreateDefaultParcel(); |
1417 | { | ||
1418 | ResetSimLandObjects(); | ||
1419 | CreateDefaultParcel(); | ||
1420 | } | ||
1421 | } | 1475 | } |
1422 | 1476 | ||
1423 | #endregion | 1477 | #endregion |
diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index 55b8227..771fdd2 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs | |||
@@ -490,11 +490,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
490 | 490 | ||
491 | m_Scene.ForEachSOG(AddObject); | 491 | m_Scene.ForEachSOG(AddObject); |
492 | 492 | ||
493 | List<UUID> primcountKeys = new List<UUID>(m_PrimCounts.Keys); | 493 | lock (m_PrimCounts) |
494 | foreach (UUID k in primcountKeys) | ||
495 | { | 494 | { |
496 | if (!m_OwnerMap.ContainsKey(k)) | 495 | List<UUID> primcountKeys = new List<UUID>(m_PrimCounts.Keys); |
497 | m_PrimCounts.Remove(k); | 496 | foreach (UUID k in primcountKeys) |
497 | { | ||
498 | if (!m_OwnerMap.ContainsKey(k)) | ||
499 | m_PrimCounts.Remove(k); | ||
500 | } | ||
498 | } | 501 | } |
499 | 502 | ||
500 | m_Tainted = false; | 503 | m_Tainted = false; |
diff --git a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs index a321c09..6f344c8 100644 --- a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs +++ b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs | |||
@@ -252,12 +252,11 @@ namespace OpenSim.Region.CoreModules | |||
252 | } | 252 | } |
253 | 253 | ||
254 | // TODO: Decouple this, so we can get rid of Linden Hour info | 254 | // TODO: Decouple this, so we can get rid of Linden Hour info |
255 | // Update Region infor with new Sun Position and Hour | 255 | // Update Region with new Sun Vector |
256 | // set estate settings for region access to sun position | 256 | // set estate settings for region access to sun position |
257 | if (receivedEstateToolsSunUpdate) | 257 | if (receivedEstateToolsSunUpdate) |
258 | { | 258 | { |
259 | m_scene.RegionInfo.RegionSettings.SunVector = Position; | 259 | m_scene.RegionInfo.RegionSettings.SunVector = Position; |
260 | m_scene.RegionInfo.RegionSettings.SunPosition = GetCurrentTimeAsLindenSunHour(); | ||
261 | } | 260 | } |
262 | } | 261 | } |
263 | 262 | ||
@@ -395,7 +394,7 @@ namespace OpenSim.Region.CoreModules | |||
395 | ready = false; | 394 | ready = false; |
396 | 395 | ||
397 | // Remove our hooks | 396 | // Remove our hooks |
398 | m_scene.EventManager.OnFrame -= SunUpdate; | 397 | m_scene.EventManager.OnFrame -= SunUpdate; |
399 | m_scene.EventManager.OnAvatarEnteringNewParcel -= AvatarEnteringParcel; | 398 | m_scene.EventManager.OnAvatarEnteringNewParcel -= AvatarEnteringParcel; |
400 | m_scene.EventManager.OnEstateToolsSunUpdate -= EstateToolsSunUpdate; | 399 | m_scene.EventManager.OnEstateToolsSunUpdate -= EstateToolsSunUpdate; |
401 | m_scene.EventManager.OnGetCurrentTimeAsLindenSunHour -= GetCurrentTimeAsLindenSunHour; | 400 | m_scene.EventManager.OnGetCurrentTimeAsLindenSunHour -= GetCurrentTimeAsLindenSunHour; |
@@ -459,26 +458,33 @@ namespace OpenSim.Region.CoreModules | |||
459 | SunToClient(avatar.ControllingClient); | 458 | SunToClient(avatar.ControllingClient); |
460 | } | 459 | } |
461 | 460 | ||
462 | /// <summary> | 461 | public void EstateToolsSunUpdate(ulong regionHandle) |
463 | /// | ||
464 | /// </summary> | ||
465 | /// <param name="regionHandle"></param> | ||
466 | /// <param name="FixedTime">Is the sun's position fixed?</param> | ||
467 | /// <param name="useEstateTime">Use the Region or Estate Sun hour?</param> | ||
468 | /// <param name="FixedSunHour">What hour of the day is the Sun Fixed at?</param> | ||
469 | public void EstateToolsSunUpdate(ulong regionHandle, bool FixedSun, bool useEstateTime, float FixedSunHour) | ||
470 | { | 462 | { |
471 | if (m_scene.RegionInfo.RegionHandle == regionHandle) | 463 | if (m_scene.RegionInfo.RegionHandle == regionHandle) |
472 | { | 464 | { |
473 | // Must limit the Sun Hour to 0 ... 24 | 465 | float sunFixedHour; |
474 | while (FixedSunHour > 24.0f) | 466 | bool fixedSun; |
475 | FixedSunHour -= 24; | ||
476 | 467 | ||
477 | while (FixedSunHour < 0) | 468 | if (m_scene.RegionInfo.RegionSettings.UseEstateSun) |
478 | FixedSunHour += 24; | 469 | { |
470 | sunFixedHour = (float)m_scene.RegionInfo.EstateSettings.SunPosition; | ||
471 | fixedSun = m_scene.RegionInfo.EstateSettings.FixedSun; | ||
472 | } | ||
473 | else | ||
474 | { | ||
475 | sunFixedHour = (float)m_scene.RegionInfo.RegionSettings.SunPosition - 6.0f; | ||
476 | fixedSun = m_scene.RegionInfo.RegionSettings.FixedSun; | ||
477 | } | ||
478 | |||
479 | // Must limit the Sun Hour to 0 ... 24 | ||
480 | while (sunFixedHour > 24.0f) | ||
481 | sunFixedHour -= 24; | ||
479 | 482 | ||
480 | m_SunFixedHour = FixedSunHour; | 483 | while (sunFixedHour < 0) |
481 | m_SunFixed = FixedSun; | 484 | sunFixedHour += 24; |
485 | |||
486 | m_SunFixedHour = sunFixedHour; | ||
487 | m_SunFixed = fixedSun; | ||
482 | 488 | ||
483 | // m_log.DebugFormat("[SUN]: Sun Settings Update: Fixed Sun? : {0}", m_SunFixed.ToString()); | 489 | // m_log.DebugFormat("[SUN]: Sun Settings Update: Fixed Sun? : {0}", m_SunFixed.ToString()); |
484 | // m_log.DebugFormat("[SUN]: Sun Settings Update: Sun Hour : {0}", m_SunFixedHour.ToString()); | 490 | // m_log.DebugFormat("[SUN]: Sun Settings Update: Sun Hour : {0}", m_SunFixedHour.ToString()); |
@@ -501,7 +507,7 @@ namespace OpenSim.Region.CoreModules | |||
501 | { | 507 | { |
502 | m_scene.ForEachRootClient(delegate(IClientAPI client) | 508 | m_scene.ForEachRootClient(delegate(IClientAPI client) |
503 | { | 509 | { |
504 | SunToClient(client); | 510 | SunToClient(client); |
505 | }); | 511 | }); |
506 | } | 512 | } |
507 | 513 | ||
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 33aabe4..4d738a5 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -480,7 +480,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
480 | else | 480 | else |
481 | { | 481 | { |
482 | m_plugineffects[pluginName] = effect; | 482 | m_plugineffects[pluginName] = effect; |
483 | m_log.Warn("E ... " + pluginName + " (Replaced)"); | 483 | m_log.Info("E ... " + pluginName + " (Replaced)"); |
484 | } | 484 | } |
485 | } | 485 | } |
486 | } | 486 | } |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 5b1c9f4..ac5f433 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -755,7 +755,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
755 | public event ScriptTimerEvent OnScriptTimerEvent; | 755 | public event ScriptTimerEvent OnScriptTimerEvent; |
756 | */ | 756 | */ |
757 | 757 | ||
758 | public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour); | 758 | public delegate void EstateToolsSunUpdate(ulong regionHandle); |
759 | public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); | 759 | public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); |
760 | 760 | ||
761 | public event EstateToolsSunUpdate OnEstateToolsSunUpdate; | 761 | public event EstateToolsSunUpdate OnEstateToolsSunUpdate; |
@@ -2536,13 +2536,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2536 | } | 2536 | } |
2537 | 2537 | ||
2538 | /// <summary> | 2538 | /// <summary> |
2539 | /// Updates the system as to how the position of the sun should be handled. | 2539 | /// Called when the sun's position parameters have changed in the Region and/or Estate |
2540 | /// </summary> | 2540 | /// </summary> |
2541 | /// <param name="regionHandle"></param> | 2541 | /// <param name="regionHandle">The region that changed</param> |
2542 | /// <param name="FixedTime">True if the Sun Position is fixed</param> | 2542 | public void TriggerEstateToolsSunUpdate(ulong regionHandle) |
2543 | /// <param name="useEstateTime">True if the Estate Settings should be used instead of region</param> | ||
2544 | /// <param name="FixedSunHour">The hour 0.0 <= FixedSunHour <= 24.0 at which the sun is fixed at. Sun Hour 0 is sun-rise, when Day/Night ratio is 1:1</param> | ||
2545 | public void TriggerEstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool useEstateTime, float FixedSunHour) | ||
2546 | { | 2543 | { |
2547 | EstateToolsSunUpdate handlerEstateToolsSunUpdate = OnEstateToolsSunUpdate; | 2544 | EstateToolsSunUpdate handlerEstateToolsSunUpdate = OnEstateToolsSunUpdate; |
2548 | if (handlerEstateToolsSunUpdate != null) | 2545 | if (handlerEstateToolsSunUpdate != null) |
@@ -2551,7 +2548,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2551 | { | 2548 | { |
2552 | try | 2549 | try |
2553 | { | 2550 | { |
2554 | d(regionHandle, FixedTime, useEstateTime, FixedSunHour); | 2551 | d(regionHandle); |
2555 | } | 2552 | } |
2556 | catch (Exception e) | 2553 | catch (Exception e) |
2557 | { | 2554 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 2a1949d..54e3b2d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -5619,33 +5619,7 @@ Environment.Exit(1); | |||
5619 | 5619 | ||
5620 | public void TriggerEstateSunUpdate() | 5620 | public void TriggerEstateSunUpdate() |
5621 | { | 5621 | { |
5622 | float sun; | 5622 | EventManager.TriggerEstateToolsSunUpdate(RegionInfo.RegionHandle); |
5623 | if (RegionInfo.RegionSettings.UseEstateSun) | ||
5624 | { | ||
5625 | sun = (float)RegionInfo.EstateSettings.SunPosition; | ||
5626 | if (RegionInfo.EstateSettings.UseGlobalTime) | ||
5627 | { | ||
5628 | sun = EventManager.GetCurrentTimeAsSunLindenHour() - 6.0f; | ||
5629 | } | ||
5630 | |||
5631 | // | ||
5632 | EventManager.TriggerEstateToolsSunUpdate( | ||
5633 | RegionInfo.RegionHandle, | ||
5634 | RegionInfo.EstateSettings.FixedSun, | ||
5635 | RegionInfo.RegionSettings.UseEstateSun, | ||
5636 | sun); | ||
5637 | } | ||
5638 | else | ||
5639 | { | ||
5640 | // Use the Sun Position from the Region Settings | ||
5641 | sun = (float)RegionInfo.RegionSettings.SunPosition - 6.0f; | ||
5642 | |||
5643 | EventManager.TriggerEstateToolsSunUpdate( | ||
5644 | RegionInfo.RegionHandle, | ||
5645 | RegionInfo.RegionSettings.FixedSun, | ||
5646 | RegionInfo.RegionSettings.UseEstateSun, | ||
5647 | sun); | ||
5648 | } | ||
5649 | } | 5623 | } |
5650 | 5624 | ||
5651 | private void HandleReloadEstate(string module, string[] cmd) | 5625 | private void HandleReloadEstate(string module, string[] cmd) |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 1fc8d3d..7490ac8 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -945,6 +945,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
945 | /// </remarks> | 945 | /// </remarks> |
946 | public UUID FromFolderID { get; set; } | 946 | public UUID FromFolderID { get; set; } |
947 | 947 | ||
948 | /// <summary> | ||
949 | /// IDs of all avatars sat on this scene object. | ||
950 | /// </summary> | ||
951 | /// <remarks> | ||
952 | /// We need this so that we can maintain a linkset wide ordering of avatars sat on different parts. | ||
953 | /// This must be locked before it is read or written. | ||
954 | /// SceneObjectPart sitting avatar add/remove code also locks on this object to avoid race conditions. | ||
955 | /// No avatar should appear more than once in this list. | ||
956 | /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart. | ||
957 | /// </remarks> | ||
958 | protected internal List<UUID> m_sittingAvatars = new List<UUID>(); | ||
959 | |||
948 | #endregion | 960 | #endregion |
949 | 961 | ||
950 | // ~SceneObjectGroup() | 962 | // ~SceneObjectGroup() |
@@ -4523,17 +4535,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
4523 | } | 4535 | } |
4524 | 4536 | ||
4525 | /// <summary> | 4537 | /// <summary> |
4538 | /// Get a copy of the list of sitting avatars on all prims of this object. | ||
4539 | /// </summary> | ||
4540 | /// <remarks> | ||
4541 | /// This is sorted by the order in which avatars sat down. If an avatar stands up then all avatars that sat | ||
4542 | /// down after it move one place down the list. | ||
4543 | /// </remarks> | ||
4544 | /// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns> | ||
4545 | public List<UUID> GetSittingAvatars() | ||
4546 | { | ||
4547 | lock (m_sittingAvatars) | ||
4548 | return new List<UUID>(m_sittingAvatars); | ||
4549 | } | ||
4550 | |||
4551 | /// <summary> | ||
4526 | /// Gets the number of sitting avatars. | 4552 | /// Gets the number of sitting avatars. |
4527 | /// </summary> | 4553 | /// </summary> |
4528 | /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks> | 4554 | /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks> |
4529 | /// <returns></returns> | 4555 | /// <returns></returns> |
4530 | public int GetSittingAvatarsCount() | 4556 | public int GetSittingAvatarsCount() |
4531 | { | 4557 | { |
4532 | int count = 0; | 4558 | lock (m_sittingAvatars) |
4533 | 4559 | return m_sittingAvatars.Count; | |
4534 | Array.ForEach<SceneObjectPart>(m_parts.GetArray(), p => count += p.GetSittingAvatarsCount()); | ||
4535 | |||
4536 | return count; | ||
4537 | } | 4560 | } |
4538 | 4561 | ||
4539 | public override string ToString() | 4562 | public override string ToString() |
@@ -4542,7 +4565,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4542 | } | 4565 | } |
4543 | 4566 | ||
4544 | #region ISceneObject | 4567 | #region ISceneObject |
4545 | 4568 | ||
4546 | public virtual ISceneObject CloneForNewScene() | 4569 | public virtual ISceneObject CloneForNewScene() |
4547 | { | 4570 | { |
4548 | SceneObjectGroup sog = Copy(false); | 4571 | SceneObjectGroup sog = Copy(false); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 143a339..e68793a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1342,7 +1342,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1342 | public UUID SitTargetAvatar { get; set; } | 1342 | public UUID SitTargetAvatar { get; set; } |
1343 | 1343 | ||
1344 | /// <summary> | 1344 | /// <summary> |
1345 | /// IDs of all avatars start on this object part. | 1345 | /// IDs of all avatars sat on this part. |
1346 | /// </summary> | 1346 | /// </summary> |
1347 | /// <remarks> | 1347 | /// <remarks> |
1348 | /// We need to track this so that we can stop sat upon prims from being attached. | 1348 | /// We need to track this so that we can stop sat upon prims from being attached. |
@@ -5196,18 +5196,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
5196 | /// <param name='avatarId'></param> | 5196 | /// <param name='avatarId'></param> |
5197 | protected internal bool AddSittingAvatar(UUID avatarId) | 5197 | protected internal bool AddSittingAvatar(UUID avatarId) |
5198 | { | 5198 | { |
5199 | if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) | 5199 | lock (ParentGroup.m_sittingAvatars) |
5200 | SitTargetAvatar = avatarId; | 5200 | { |
5201 | if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) | ||
5202 | SitTargetAvatar = avatarId; | ||
5201 | 5203 | ||
5202 | HashSet<UUID> sittingAvatars = m_sittingAvatars; | 5204 | if (m_sittingAvatars == null) |
5205 | m_sittingAvatars = new HashSet<UUID>(); | ||
5203 | 5206 | ||
5204 | if (sittingAvatars == null) | 5207 | if (m_sittingAvatars.Add(avatarId)) |
5205 | sittingAvatars = new HashSet<UUID>(); | 5208 | { |
5209 | ParentGroup.m_sittingAvatars.Add(avatarId); | ||
5206 | 5210 | ||
5207 | lock (sittingAvatars) | 5211 | return true; |
5208 | { | 5212 | } |
5209 | m_sittingAvatars = sittingAvatars; | 5213 | |
5210 | return m_sittingAvatars.Add(avatarId); | 5214 | return false; |
5211 | } | 5215 | } |
5212 | } | 5216 | } |
5213 | 5217 | ||
@@ -5221,27 +5225,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
5221 | /// <param name='avatarId'></param> | 5225 | /// <param name='avatarId'></param> |
5222 | protected internal bool RemoveSittingAvatar(UUID avatarId) | 5226 | protected internal bool RemoveSittingAvatar(UUID avatarId) |
5223 | { | 5227 | { |
5224 | if (SitTargetAvatar == avatarId) | 5228 | lock (ParentGroup.m_sittingAvatars) |
5225 | SitTargetAvatar = UUID.Zero; | 5229 | { |
5226 | 5230 | if (SitTargetAvatar == avatarId) | |
5227 | HashSet<UUID> sittingAvatars = m_sittingAvatars; | 5231 | SitTargetAvatar = UUID.Zero; |
5228 | 5232 | ||
5229 | // This can occur under a race condition where another thread | 5233 | if (m_sittingAvatars == null) |
5230 | if (sittingAvatars == null) | 5234 | return false; |
5231 | return false; | ||
5232 | 5235 | ||
5233 | lock (sittingAvatars) | 5236 | if (m_sittingAvatars.Remove(avatarId)) |
5234 | { | ||
5235 | if (sittingAvatars.Remove(avatarId)) | ||
5236 | { | 5237 | { |
5237 | if (sittingAvatars.Count == 0) | 5238 | if (m_sittingAvatars.Count == 0) |
5238 | m_sittingAvatars = null; | 5239 | m_sittingAvatars = null; |
5239 | 5240 | ||
5241 | ParentGroup.m_sittingAvatars.Remove(avatarId); | ||
5242 | |||
5240 | return true; | 5243 | return true; |
5241 | } | 5244 | } |
5242 | } | ||
5243 | 5245 | ||
5244 | return false; | 5246 | return false; |
5247 | } | ||
5245 | } | 5248 | } |
5246 | 5249 | ||
5247 | /// <summary> | 5250 | /// <summary> |
@@ -5251,16 +5254,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
5251 | /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns> | 5254 | /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns> |
5252 | public HashSet<UUID> GetSittingAvatars() | 5255 | public HashSet<UUID> GetSittingAvatars() |
5253 | { | 5256 | { |
5254 | HashSet<UUID> sittingAvatars = m_sittingAvatars; | 5257 | lock (ParentGroup.m_sittingAvatars) |
5255 | |||
5256 | if (sittingAvatars == null) | ||
5257 | { | 5258 | { |
5258 | return null; | 5259 | if (m_sittingAvatars == null) |
5259 | } | 5260 | return null; |
5260 | else | 5261 | else |
5261 | { | 5262 | return new HashSet<UUID>(m_sittingAvatars); |
5262 | lock (sittingAvatars) | ||
5263 | return new HashSet<UUID>(sittingAvatars); | ||
5264 | } | 5263 | } |
5265 | } | 5264 | } |
5266 | 5265 | ||
@@ -5271,13 +5270,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
5271 | /// <returns></returns> | 5270 | /// <returns></returns> |
5272 | public int GetSittingAvatarsCount() | 5271 | public int GetSittingAvatarsCount() |
5273 | { | 5272 | { |
5274 | HashSet<UUID> sittingAvatars = m_sittingAvatars; | 5273 | lock (ParentGroup.m_sittingAvatars) |
5275 | 5274 | { | |
5276 | if (sittingAvatars == null) | 5275 | if (m_sittingAvatars == null) |
5277 | return 0; | 5276 | return 0; |
5278 | 5277 | else | |
5279 | lock (sittingAvatars) | 5278 | return m_sittingAvatars.Count; |
5280 | return sittingAvatars.Count; | 5279 | } |
5281 | } | 5280 | } |
5282 | } | 5281 | } |
5283 | } | 5282 | } \ No newline at end of file |
diff --git a/OpenSim/Region/OptionalModules/Avatar/Animations/AnimationsCommandModule.cs b/OpenSim/Region/OptionalModules/Avatar/Animations/AnimationsCommandModule.cs new file mode 100644 index 0000000..e951d9e --- /dev/null +++ b/OpenSim/Region/OptionalModules/Avatar/Animations/AnimationsCommandModule.cs | |||
@@ -0,0 +1,215 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Linq; | ||
31 | using System.Reflection; | ||
32 | using System.Text; | ||
33 | using log4net; | ||
34 | using Mono.Addins; | ||
35 | using Nini.Config; | ||
36 | using OpenMetaverse; | ||
37 | using OpenSim.Framework; | ||
38 | using OpenSim.Framework.Console; | ||
39 | using OpenSim.Framework.Monitoring; | ||
40 | using OpenSim.Region.ClientStack.LindenUDP; | ||
41 | using OpenSim.Region.Framework.Interfaces; | ||
42 | using OpenSim.Region.Framework.Scenes; | ||
43 | using OpenSim.Region.Framework.Scenes.Animation; | ||
44 | using OpenSim.Services.Interfaces; | ||
45 | |||
46 | namespace OpenSim.Region.OptionalModules.Avatar.Animations | ||
47 | { | ||
48 | /// <summary> | ||
49 | /// A module that just holds commands for inspecting avatar animations. | ||
50 | /// </summary> | ||
51 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AnimationsCommandModule")] | ||
52 | public class AnimationsCommandModule : ISharedRegionModule | ||
53 | { | ||
54 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
55 | |||
56 | private List<Scene> m_scenes = new List<Scene>(); | ||
57 | |||
58 | public string Name { get { return "Animations Command Module"; } } | ||
59 | |||
60 | public Type ReplaceableInterface { get { return null; } } | ||
61 | |||
62 | public void Initialise(IConfigSource source) | ||
63 | { | ||
64 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: INITIALIZED MODULE"); | ||
65 | } | ||
66 | |||
67 | public void PostInitialise() | ||
68 | { | ||
69 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: POST INITIALIZED MODULE"); | ||
70 | } | ||
71 | |||
72 | public void Close() | ||
73 | { | ||
74 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: CLOSED MODULE"); | ||
75 | } | ||
76 | |||
77 | public void AddRegion(Scene scene) | ||
78 | { | ||
79 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName); | ||
80 | } | ||
81 | |||
82 | public void RemoveRegion(Scene scene) | ||
83 | { | ||
84 | // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName); | ||
85 | |||
86 | lock (m_scenes) | ||
87 | m_scenes.Remove(scene); | ||
88 | } | ||
89 | |||
90 | public void RegionLoaded(Scene scene) | ||
91 | { | ||
92 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); | ||
93 | |||
94 | lock (m_scenes) | ||
95 | m_scenes.Add(scene); | ||
96 | |||
97 | scene.AddCommand( | ||
98 | "Users", this, "show animations", | ||
99 | "show animations [<first-name> <last-name>]", | ||
100 | "Show animation information for avatars in this simulator.", | ||
101 | "If no name is supplied then information for all avatars is shown.\n" | ||
102 | + "Please note that for inventory animations, the animation name is the name under which the animation was originally uploaded\n" | ||
103 | + ", which is not necessarily the current inventory name.", | ||
104 | HandleShowAnimationsCommand); | ||
105 | } | ||
106 | |||
107 | protected void HandleShowAnimationsCommand(string module, string[] cmd) | ||
108 | { | ||
109 | if (cmd.Length != 2 && cmd.Length < 4) | ||
110 | { | ||
111 | MainConsole.Instance.OutputFormat("Usage: show animations [<first-name> <last-name>]"); | ||
112 | return; | ||
113 | } | ||
114 | |||
115 | bool targetNameSupplied = false; | ||
116 | string optionalTargetFirstName = null; | ||
117 | string optionalTargetLastName = null; | ||
118 | |||
119 | if (cmd.Length >= 4) | ||
120 | { | ||
121 | targetNameSupplied = true; | ||
122 | optionalTargetFirstName = cmd[2]; | ||
123 | optionalTargetLastName = cmd[3]; | ||
124 | } | ||
125 | |||
126 | StringBuilder sb = new StringBuilder(); | ||
127 | |||
128 | lock (m_scenes) | ||
129 | { | ||
130 | foreach (Scene scene in m_scenes) | ||
131 | { | ||
132 | if (targetNameSupplied) | ||
133 | { | ||
134 | ScenePresence sp = scene.GetScenePresence(optionalTargetFirstName, optionalTargetLastName); | ||
135 | if (sp != null && !sp.IsChildAgent) | ||
136 | GetAttachmentsReport(sp, sb); | ||
137 | } | ||
138 | else | ||
139 | { | ||
140 | scene.ForEachRootScenePresence(sp => GetAttachmentsReport(sp, sb)); | ||
141 | } | ||
142 | } | ||
143 | } | ||
144 | |||
145 | MainConsole.Instance.Output(sb.ToString()); | ||
146 | } | ||
147 | |||
148 | private void GetAttachmentsReport(ScenePresence sp, StringBuilder sb) | ||
149 | { | ||
150 | sb.AppendFormat("Animations for {0}\n", sp.Name); | ||
151 | |||
152 | ConsoleDisplayList cdl = new ConsoleDisplayList() { Indent = 2 }; | ||
153 | ScenePresenceAnimator spa = sp.Animator; | ||
154 | AnimationSet anims = sp.Animator.Animations; | ||
155 | |||
156 | string cma = spa.CurrentMovementAnimation; | ||
157 | cdl.AddRow( | ||
158 | "Current movement anim", | ||
159 | string.Format("{0}, {1}", DefaultAvatarAnimations.GetDefaultAnimation(cma), cma)); | ||
160 | |||
161 | UUID defaultAnimId = anims.DefaultAnimation.AnimID; | ||
162 | cdl.AddRow( | ||
163 | "Default anim", | ||
164 | string.Format("{0}, {1}", defaultAnimId, GetAnimName(sp.Scene.AssetService, defaultAnimId))); | ||
165 | |||
166 | UUID implicitDefaultAnimId = anims.ImplicitDefaultAnimation.AnimID; | ||
167 | cdl.AddRow( | ||
168 | "Implicit default anim", | ||
169 | string.Format("{0}, {1}", implicitDefaultAnimId, GetAnimName(sp.Scene.AssetService, implicitDefaultAnimId))); | ||
170 | |||
171 | cdl.AddToStringBuilder(sb); | ||
172 | |||
173 | ConsoleDisplayTable cdt = new ConsoleDisplayTable() { Indent = 2 }; | ||
174 | cdt.AddColumn("Animation ID", 36); | ||
175 | cdt.AddColumn("Name", 20); | ||
176 | cdt.AddColumn("Seq", 3); | ||
177 | cdt.AddColumn("Object ID", 36); | ||
178 | |||
179 | UUID[] animIds; | ||
180 | int[] sequenceNumbers; | ||
181 | UUID[] objectIds; | ||
182 | |||
183 | sp.Animator.Animations.GetArrays(out animIds, out sequenceNumbers, out objectIds); | ||
184 | |||
185 | for (int i = 0; i < animIds.Length; i++) | ||
186 | { | ||
187 | UUID animId = animIds[i]; | ||
188 | string animName = GetAnimName(sp.Scene.AssetService, animId); | ||
189 | int seq = sequenceNumbers[i]; | ||
190 | UUID objectId = objectIds[i]; | ||
191 | |||
192 | cdt.AddRow(animId, animName, seq, objectId); | ||
193 | } | ||
194 | |||
195 | cdt.AddToStringBuilder(sb); | ||
196 | sb.Append("\n"); | ||
197 | } | ||
198 | |||
199 | private string GetAnimName(IAssetService assetService, UUID animId) | ||
200 | { | ||
201 | string animName; | ||
202 | |||
203 | if (!DefaultAvatarAnimations.AnimsNames.TryGetValue(animId, out animName)) | ||
204 | { | ||
205 | AssetMetadata amd = assetService.GetMetadata(animId.ToString()); | ||
206 | if (amd != null) | ||
207 | animName = amd.Name; | ||
208 | else | ||
209 | animName = "Unknown"; | ||
210 | } | ||
211 | |||
212 | return animName; | ||
213 | } | ||
214 | } | ||
215 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs index 68bcb4a..d97e3b3 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs | |||
@@ -97,6 +97,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
97 | "Users", this, "attachments show", | 97 | "Users", this, "attachments show", |
98 | "attachments show [<first-name> <last-name>]", | 98 | "attachments show [<first-name> <last-name>]", |
99 | "Show attachment information for avatars in this simulator.", | 99 | "Show attachment information for avatars in this simulator.", |
100 | "If no name is supplied then information for all avatars is shown.", | ||
100 | HandleShowAttachmentsCommand); | 101 | HandleShowAttachmentsCommand); |
101 | } | 102 | } |
102 | 103 | ||
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs index c7e3a7a..57d9217 100644 --- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs +++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs | |||
@@ -49,7 +49,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule | |||
49 | /// (such as land transfers). There is no money code here! Use FORGE as an example for money code. | 49 | /// (such as land transfers). There is no money code here! Use FORGE as an example for money code. |
50 | /// Demo Economy/Money Module. This is a purposely crippled module! | 50 | /// Demo Economy/Money Module. This is a purposely crippled module! |
51 | /// // To land transfer you need to add: | 51 | /// // To land transfer you need to add: |
52 | /// -helperuri <ADDRESS TO THIS SERVER> | 52 | /// -helperuri http://serveraddress:port/ |
53 | /// to the command line parameters you use to start up your client | 53 | /// to the command line parameters you use to start up your client |
54 | /// This commonly looks like -helperuri http://127.0.0.1:9000/ | 54 | /// This commonly looks like -helperuri http://127.0.0.1:9000/ |
55 | /// | 55 | /// |
@@ -116,10 +116,9 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule | |||
116 | } | 116 | } |
117 | 117 | ||
118 | /// <summary> | 118 | /// <summary> |
119 | /// Startup | 119 | /// Called on startup so the module can be configured. |
120 | /// </summary> | 120 | /// </summary> |
121 | /// <param name="scene"></param> | 121 | /// <param name="config">Configuration source.</param> |
122 | /// <param name="config"></param> | ||
123 | public void Initialise(IConfigSource config) | 122 | public void Initialise(IConfigSource config) |
124 | { | 123 | { |
125 | m_gConfig = config; | 124 | m_gConfig = config; |
@@ -674,9 +673,12 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule | |||
674 | } | 673 | } |
675 | 674 | ||
676 | /// <summary> | 675 | /// <summary> |
677 | /// When the client closes the connection we remove their accounting info from memory to free up resources. | 676 | /// When the client closes the connection we remove their accounting |
677 | /// info from memory to free up resources. | ||
678 | /// </summary> | 678 | /// </summary> |
679 | /// <param name="AgentID"></param> | 679 | /// <param name="AgentID">UUID of agent</param> |
680 | /// <param name="scene">Scene the agent was connected to.</param> | ||
681 | /// <see cref="OpenSim.Region.Framework.Scenes.EventManager.ClientClosed"/> | ||
680 | public void ClientClosed(UUID AgentID, Scene scene) | 682 | public void ClientClosed(UUID AgentID, Scene scene) |
681 | { | 683 | { |
682 | 684 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 253d193..aa389ba 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -3298,7 +3298,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3298 | /// <summary> | 3298 | /// <summary> |
3299 | /// Attach the object containing this script to the avatar that owns it. | 3299 | /// Attach the object containing this script to the avatar that owns it. |
3300 | /// </summary> | 3300 | /// </summary> |
3301 | /// <param name='attachment'>The attachment point (e.g. ATTACH_CHEST)</param> | 3301 | /// <param name='attachmentPoint'> |
3302 | /// The attachment point (e.g. <see cref="OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass.ATTACH_CHEST">ATTACH_CHEST</see>) | ||
3303 | /// </param> | ||
3302 | /// <returns>true if the attach suceeded, false if it did not</returns> | 3304 | /// <returns>true if the attach suceeded, false if it did not</returns> |
3303 | public bool AttachToAvatar(int attachmentPoint) | 3305 | public bool AttachToAvatar(int attachmentPoint) |
3304 | { | 3306 | { |
@@ -3729,21 +3731,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3729 | } | 3731 | } |
3730 | else | 3732 | else |
3731 | { | 3733 | { |
3732 | bool sitting = false; | 3734 | if (m_host.ParentGroup.GetSittingAvatars().Contains(agentID)) |
3733 | if (m_host.SitTargetAvatar == agentID) | ||
3734 | { | ||
3735 | sitting = true; | ||
3736 | } | ||
3737 | else | ||
3738 | { | ||
3739 | foreach (SceneObjectPart p in m_host.ParentGroup.Parts) | ||
3740 | { | ||
3741 | if (p.SitTargetAvatar == agentID) | ||
3742 | sitting = true; | ||
3743 | } | ||
3744 | } | ||
3745 | |||
3746 | if (sitting) | ||
3747 | { | 3735 | { |
3748 | // When agent is sitting, certain permissions are implicit if requested from sitting agent | 3736 | // When agent is sitting, certain permissions are implicit if requested from sitting agent |
3749 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 3737 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
@@ -3785,7 +3773,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3785 | INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); | 3773 | INPCModule npcModule = World.RequestModuleInterface<INPCModule>(); |
3786 | if (npcModule != null && npcModule.IsNPC(agentID, World)) | 3774 | if (npcModule != null && npcModule.IsNPC(agentID, World)) |
3787 | { | 3775 | { |
3788 | if (agentID == m_host.ParentGroup.OwnerID || npcModule.GetOwner(agentID) == m_host.ParentGroup.OwnerID) | 3776 | if (npcModule.CheckPermissions(agentID, m_host.OwnerID)) |
3789 | { | 3777 | { |
3790 | lock (m_host.TaskInventory) | 3778 | lock (m_host.TaskInventory) |
3791 | { | 3779 | { |
@@ -4160,62 +4148,56 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4160 | public LSL_String llGetLinkName(int linknum) | 4148 | public LSL_String llGetLinkName(int linknum) |
4161 | { | 4149 | { |
4162 | m_host.AddScriptLPS(1); | 4150 | m_host.AddScriptLPS(1); |
4163 | // simplest case, this prims link number | ||
4164 | if (linknum == m_host.LinkNum || linknum == ScriptBaseClass.LINK_THIS) | ||
4165 | return m_host.Name; | ||
4166 | 4151 | ||
4167 | // parse for sitting avatare-names | 4152 | if (linknum < 0) |
4168 | List<String> nametable = new List<String>(); | ||
4169 | World.ForEachRootScenePresence(delegate(ScenePresence presence) | ||
4170 | { | 4153 | { |
4171 | SceneObjectPart sitPart = presence.ParentPart; | 4154 | if (linknum == ScriptBaseClass.LINK_THIS) |
4172 | if (sitPart != null && m_host.ParentGroup.ContainsPart(sitPart.LocalId)) | ||
4173 | nametable.Add(presence.ControllingClient.Name); | ||
4174 | }); | ||
4175 | |||
4176 | int totalprims = m_host.ParentGroup.PrimCount + nametable.Count; | ||
4177 | if (totalprims > m_host.ParentGroup.PrimCount) | ||
4178 | { | ||
4179 | // sitting Avatar-Name with negativ linknum / SinglePrim | ||
4180 | if (linknum < 0 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1) | ||
4181 | return nametable[0]; | ||
4182 | // Prim-Name / SinglePrim Sitting Avatar | ||
4183 | if (linknum == 1 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1) | ||
4184 | return m_host.Name; | 4155 | return m_host.Name; |
4185 | // LinkNumber > of Real PrimSet = AvatarName | 4156 | else |
4186 | if (linknum > m_host.ParentGroup.PrimCount && linknum <= totalprims) | 4157 | return ScriptBaseClass.NULL_KEY; |
4187 | return nametable[totalprims - linknum]; | ||
4188 | } | 4158 | } |
4189 | 4159 | ||
4190 | // Single prim | 4160 | int actualPrimCount = m_host.ParentGroup.PrimCount; |
4191 | if (m_host.LinkNum == 0) | 4161 | List<UUID> sittingAvatarIds = m_host.ParentGroup.GetSittingAvatars(); |
4162 | int adjustedPrimCount = actualPrimCount + sittingAvatarIds.Count; | ||
4163 | |||
4164 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single | ||
4165 | // prim that has any avatars sat upon it (in which case the root prim is link 1). | ||
4166 | if (linknum == 0) | ||
4192 | { | 4167 | { |
4193 | if (linknum == 0 || linknum == ScriptBaseClass.LINK_ROOT) | 4168 | if (actualPrimCount == 1 && sittingAvatarIds.Count == 0) |
4194 | return m_host.Name; | 4169 | return m_host.Name; |
4195 | else | ||
4196 | return UUID.Zero.ToString(); | ||
4197 | } | ||
4198 | 4170 | ||
4199 | // Link set | 4171 | return ScriptBaseClass.NULL_KEY; |
4200 | SceneObjectPart part = null; | 4172 | } |
4201 | if (m_host.LinkNum == 1) // this is the Root prim | 4173 | // Special case to handle a single prim with sitting avatars. GetLinkPart() would only match zero but |
4174 | // here we must match 1 (ScriptBaseClass.LINK_ROOT). | ||
4175 | else if (linknum == 1 && actualPrimCount == 1) | ||
4202 | { | 4176 | { |
4203 | if (linknum < 0) | 4177 | if (sittingAvatarIds.Count > 0) |
4204 | part = m_host.ParentGroup.GetLinkNumPart(2); | 4178 | return m_host.ParentGroup.RootPart.Name; |
4205 | else | 4179 | else |
4206 | part = m_host.ParentGroup.GetLinkNumPart(linknum); | 4180 | return ScriptBaseClass.NULL_KEY; |
4207 | } | 4181 | } |
4208 | else // this is a child prim | 4182 | else if (linknum <= adjustedPrimCount) |
4209 | { | 4183 | { |
4210 | if (linknum < 2) | 4184 | if (linknum <= actualPrimCount) |
4211 | part = m_host.ParentGroup.GetLinkNumPart(1); | 4185 | { |
4186 | return m_host.ParentGroup.GetLinkNumPart(linknum).Name; | ||
4187 | } | ||
4212 | else | 4188 | else |
4213 | part = m_host.ParentGroup.GetLinkNumPart(linknum); | 4189 | { |
4190 | ScenePresence sp = World.GetScenePresence(sittingAvatarIds[linknum - actualPrimCount - 1]); | ||
4191 | if (sp != null) | ||
4192 | return sp.Name; | ||
4193 | else | ||
4194 | return ScriptBaseClass.NULL_KEY; | ||
4195 | } | ||
4214 | } | 4196 | } |
4215 | if (part != null) | ||
4216 | return part.Name; | ||
4217 | else | 4197 | else |
4218 | return UUID.Zero.ToString(); | 4198 | { |
4199 | return ScriptBaseClass.NULL_KEY; | ||
4200 | } | ||
4219 | } | 4201 | } |
4220 | 4202 | ||
4221 | public LSL_Integer llGetInventoryNumber(int type) | 4203 | public LSL_Integer llGetInventoryNumber(int type) |
@@ -5828,9 +5810,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5828 | } | 5810 | } |
5829 | 5811 | ||
5830 | /// <summary> | 5812 | /// <summary> |
5831 | /// Insert the list identified by <src> into the | 5813 | /// Insert the list identified by <paramref name="src"/> into the |
5832 | /// list designated by <dest> such that the first | 5814 | /// list designated by <paramref name="dest"/> such that the first |
5833 | /// new element has the index specified by <index> | 5815 | /// new element has the index specified by <paramref name="index"/> |
5834 | /// </summary> | 5816 | /// </summary> |
5835 | 5817 | ||
5836 | public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) | 5818 | public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) |
@@ -6663,6 +6645,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6663 | ps.BurstSpeedMax = 1.0f; | 6645 | ps.BurstSpeedMax = 1.0f; |
6664 | ps.BurstRate = 0.1f; | 6646 | ps.BurstRate = 0.1f; |
6665 | ps.PartMaxAge = 10.0f; | 6647 | ps.PartMaxAge = 10.0f; |
6648 | ps.BurstPartCount = 1; | ||
6666 | return ps; | 6649 | return ps; |
6667 | } | 6650 | } |
6668 | 6651 | ||
@@ -6684,10 +6667,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6684 | SetParticleSystem(m_host, rules); | 6667 | SetParticleSystem(m_host, rules); |
6685 | } | 6668 | } |
6686 | 6669 | ||
6687 | private void SetParticleSystem(SceneObjectPart part, LSL_List rules) | 6670 | private void SetParticleSystem(SceneObjectPart part, LSL_List rules) |
6688 | { | 6671 | { |
6689 | |||
6690 | |||
6691 | if (rules.Length == 0) | 6672 | if (rules.Length == 0) |
6692 | { | 6673 | { |
6693 | part.RemoveParticleSystem(); | 6674 | part.RemoveParticleSystem(); |
@@ -13232,7 +13213,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13232 | /// Get a notecard line. | 13213 | /// Get a notecard line. |
13233 | /// </summary> | 13214 | /// </summary> |
13234 | /// <param name="assetID"></param> | 13215 | /// <param name="assetID"></param> |
13235 | /// <param name="line">Lines start at index 0</param> | 13216 | /// <param name="lineNumber">Lines start at index 0</param> |
13236 | /// <returns></returns> | 13217 | /// <returns></returns> |
13237 | public static string GetLine(UUID assetID, int lineNumber) | 13218 | public static string GetLine(UUID assetID, int lineNumber) |
13238 | { | 13219 | { |
@@ -13261,9 +13242,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13261 | /// Get a notecard line. | 13242 | /// Get a notecard line. |
13262 | /// </summary> | 13243 | /// </summary> |
13263 | /// <param name="assetID"></param> | 13244 | /// <param name="assetID"></param> |
13264 | /// <param name="line">Lines start at index 0</param> | 13245 | /// <param name="lineNumber">Lines start at index 0</param> |
13265 | /// <param name="maxLength">Maximum length of the returned line. Longer lines will be truncated</para> | 13246 | /// <param name="maxLength"> |
13266 | /// <returns></returns> | 13247 | /// Maximum length of the returned line. |
13248 | /// </param> | ||
13249 | /// <returns> | ||
13250 | /// If the line length is longer than <paramref name="maxLength"/>, | ||
13251 | /// the return string will be truncated. | ||
13252 | /// </returns> | ||
13267 | public static string GetLine(UUID assetID, int lineNumber, int maxLength) | 13253 | public static string GetLine(UUID assetID, int lineNumber, int maxLength) |
13268 | { | 13254 | { |
13269 | string line = GetLine(assetID, lineNumber); | 13255 | string line = GetLine(assetID, lineNumber); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 51c8c7e..637d83a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1214,12 +1214,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1214 | sunHour += 24.0; | 1214 | sunHour += 24.0; |
1215 | 1215 | ||
1216 | World.RegionInfo.RegionSettings.UseEstateSun = useEstateSun; | 1216 | World.RegionInfo.RegionSettings.UseEstateSun = useEstateSun; |
1217 | World.RegionInfo.RegionSettings.SunPosition = sunHour + 6; // LL Region Sun Hour is 6 to 30 | 1217 | World.RegionInfo.RegionSettings.SunPosition = sunHour + 6; // LL Region Sun Hour is 6 to 30 |
1218 | World.RegionInfo.RegionSettings.FixedSun = sunFixed; | 1218 | World.RegionInfo.RegionSettings.FixedSun = sunFixed; |
1219 | World.RegionInfo.RegionSettings.Save(); | 1219 | World.RegionInfo.RegionSettings.Save(); |
1220 | 1220 | ||
1221 | World.EventManager.TriggerEstateToolsSunUpdate( | 1221 | World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle); |
1222 | World.RegionInfo.RegionHandle, sunFixed, useEstateSun, (float)sunHour); | ||
1223 | } | 1222 | } |
1224 | 1223 | ||
1225 | /// <summary> | 1224 | /// <summary> |
@@ -1244,8 +1243,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1244 | World.RegionInfo.EstateSettings.FixedSun = sunFixed; | 1243 | World.RegionInfo.EstateSettings.FixedSun = sunFixed; |
1245 | World.RegionInfo.EstateSettings.Save(); | 1244 | World.RegionInfo.EstateSettings.Save(); |
1246 | 1245 | ||
1247 | World.EventManager.TriggerEstateToolsSunUpdate( | 1246 | World.EventManager.TriggerEstateToolsSunUpdate(World.RegionInfo.RegionHandle); |
1248 | World.RegionInfo.RegionHandle, sunFixed, World.RegionInfo.RegionSettings.UseEstateSun, (float)sunHour); | ||
1249 | } | 1247 | } |
1250 | 1248 | ||
1251 | /// <summary> | 1249 | /// <summary> |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index c9c4753..2e61fb8 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -633,19 +633,44 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
633 | 633 | ||
634 | public LSL_Types.Vector3 GetVector3Item(int itemIndex) | 634 | public LSL_Types.Vector3 GetVector3Item(int itemIndex) |
635 | { | 635 | { |
636 | if(m_data[itemIndex] is LSL_Types.Vector3) | 636 | if (m_data[itemIndex] is LSL_Types.Vector3) |
637 | { | ||
637 | return (LSL_Types.Vector3)m_data[itemIndex]; | 638 | return (LSL_Types.Vector3)m_data[itemIndex]; |
639 | } | ||
640 | else if(m_data[itemIndex] is OpenMetaverse.Vector3) | ||
641 | { | ||
642 | return new LSL_Types.Vector3( | ||
643 | (OpenMetaverse.Vector3)m_data[itemIndex]); | ||
644 | } | ||
638 | else | 645 | else |
646 | { | ||
639 | throw new InvalidCastException(string.Format( | 647 | throw new InvalidCastException(string.Format( |
640 | "{0} expected but {1} given", | 648 | "{0} expected but {1} given", |
641 | typeof(LSL_Types.Vector3).Name, | 649 | typeof(LSL_Types.Vector3).Name, |
642 | m_data[itemIndex] != null ? | 650 | m_data[itemIndex] != null ? |
643 | m_data[itemIndex].GetType().Name : "null")); | 651 | m_data[itemIndex].GetType().Name : "null")); |
652 | } | ||
644 | } | 653 | } |
645 | 654 | ||
646 | public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) | 655 | public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) |
647 | { | 656 | { |
648 | return (LSL_Types.Quaternion)m_data[itemIndex]; | 657 | if (m_data[itemIndex] is LSL_Types.Quaternion) |
658 | { | ||
659 | return (LSL_Types.Quaternion)m_data[itemIndex]; | ||
660 | } | ||
661 | else if(m_data[itemIndex] is OpenMetaverse.Quaternion) | ||
662 | { | ||
663 | return new LSL_Types.Quaternion( | ||
664 | (OpenMetaverse.Quaternion)m_data[itemIndex]); | ||
665 | } | ||
666 | else | ||
667 | { | ||
668 | throw new InvalidCastException(string.Format( | ||
669 | "{0} expected but {1} given", | ||
670 | typeof(LSL_Types.Quaternion).Name, | ||
671 | m_data[itemIndex] != null ? | ||
672 | m_data[itemIndex].GetType().Name : "null")); | ||
673 | } | ||
649 | } | 674 | } |
650 | 675 | ||
651 | public LSL_Types.key GetKeyItem(int itemIndex) | 676 | public LSL_Types.key GetKeyItem(int itemIndex) |
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index ee3b858..daebf8b 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -185,15 +185,15 @@ namespace OpenSim.Services.GridService | |||
185 | 185 | ||
186 | if (!m_AllowDuplicateNames) | 186 | if (!m_AllowDuplicateNames) |
187 | { | 187 | { |
188 | List<RegionData> dupe = m_Database.Get(regionInfos.RegionName, scopeID); | 188 | List<RegionData> dupe = m_Database.Get(Util.EscapeForLike(regionInfos.RegionName), scopeID); |
189 | if (dupe != null && dupe.Count > 0) | 189 | if (dupe != null && dupe.Count > 0) |
190 | { | 190 | { |
191 | foreach (RegionData d in dupe) | 191 | foreach (RegionData d in dupe) |
192 | { | 192 | { |
193 | if (d.RegionID != regionInfos.RegionID) | 193 | if (d.RegionID != regionInfos.RegionID) |
194 | { | 194 | { |
195 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register duplicate name with ID {1}.", | 195 | m_log.WarnFormat("[GRID SERVICE]: Region tried to register using a duplicate name. New region: {0} ({1}), existing region: {2} ({3}).", |
196 | regionInfos.RegionName, regionInfos.RegionID); | 196 | regionInfos.RegionName, regionInfos.RegionID, d.RegionName, d.RegionID); |
197 | return "Duplicate region name"; | 197 | return "Duplicate region name"; |
198 | } | 198 | } |
199 | } | 199 | } |
@@ -359,7 +359,7 @@ namespace OpenSim.Services.GridService | |||
359 | 359 | ||
360 | public GridRegion GetRegionByName(UUID scopeID, string name) | 360 | public GridRegion GetRegionByName(UUID scopeID, string name) |
361 | { | 361 | { |
362 | List<RegionData> rdatas = m_Database.Get(name, scopeID); | 362 | List<RegionData> rdatas = m_Database.Get(Util.EscapeForLike(name), scopeID); |
363 | if ((rdatas != null) && (rdatas.Count > 0)) | 363 | if ((rdatas != null) && (rdatas.Count > 0)) |
364 | return RegionData2RegionInfo(rdatas[0]); // get the first | 364 | return RegionData2RegionInfo(rdatas[0]); // get the first |
365 | 365 | ||
@@ -377,7 +377,7 @@ namespace OpenSim.Services.GridService | |||
377 | { | 377 | { |
378 | // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name); | 378 | // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name); |
379 | 379 | ||
380 | List<RegionData> rdatas = m_Database.Get(name + "%", scopeID); | 380 | List<RegionData> rdatas = m_Database.Get(Util.EscapeForLike(name) + "%", scopeID); |
381 | 381 | ||
382 | int count = 0; | 382 | int count = 0; |
383 | List<GridRegion> rinfos = new List<GridRegion>(); | 383 | List<GridRegion> rinfos = new List<GridRegion>(); |
@@ -586,7 +586,7 @@ namespace OpenSim.Services.GridService | |||
586 | 586 | ||
587 | string regionName = cmd[3]; | 587 | string regionName = cmd[3]; |
588 | 588 | ||
589 | List<RegionData> regions = m_Database.Get(regionName, UUID.Zero); | 589 | List<RegionData> regions = m_Database.Get(Util.EscapeForLike(regionName), UUID.Zero); |
590 | if (regions == null || regions.Count < 1) | 590 | if (regions == null || regions.Count < 1) |
591 | { | 591 | { |
592 | MainConsole.Instance.Output("No region with name {0} found", regionName); | 592 | MainConsole.Instance.Output("No region with name {0} found", regionName); |
@@ -716,7 +716,7 @@ namespace OpenSim.Services.GridService | |||
716 | return; | 716 | return; |
717 | } | 717 | } |
718 | 718 | ||
719 | List<RegionData> regions = m_Database.Get(cmd[3], UUID.Zero); | 719 | List<RegionData> regions = m_Database.Get(Util.EscapeForLike(cmd[3]), UUID.Zero); |
720 | if (regions == null || regions.Count < 1) | 720 | if (regions == null || regions.Count < 1) |
721 | { | 721 | { |
722 | MainConsole.Instance.Output("Region not found"); | 722 | MainConsole.Instance.Output("Region not found"); |
diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 743d089..073197f 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs | |||
@@ -387,7 +387,7 @@ namespace OpenSim.Services.GridService | |||
387 | m_log.DebugFormat("[HYPERGRID LINKER]: Request to unlink {0}", mapName); | 387 | m_log.DebugFormat("[HYPERGRID LINKER]: Request to unlink {0}", mapName); |
388 | GridRegion regInfo = null; | 388 | GridRegion regInfo = null; |
389 | 389 | ||
390 | List<RegionData> regions = m_Database.Get(mapName, m_ScopeID); | 390 | List<RegionData> regions = m_Database.Get(Util.EscapeForLike(mapName), m_ScopeID); |
391 | if (regions != null && regions.Count > 0) | 391 | if (regions != null && regions.Count > 0) |
392 | { | 392 | { |
393 | OpenSim.Framework.RegionFlags rflags = (OpenSim.Framework.RegionFlags)Convert.ToInt32(regions[0].Data["flags"]); | 393 | OpenSim.Framework.RegionFlags rflags = (OpenSim.Framework.RegionFlags)Convert.ToInt32(regions[0].Data["flags"]); |
diff --git a/doc/doxygen.conf b/doc/doxygen.conf index 3712dfa..148de9c 100644 --- a/doc/doxygen.conf +++ b/doc/doxygen.conf | |||
@@ -1,1356 +1,290 @@ | |||
1 | # Doxyfile 1.5.5 | 1 | # Doxyfile 1.8.2 |
2 | |||
3 | # This file describes the settings to be used by the documentation system | ||
4 | # doxygen (www.doxygen.org) for a project | ||
5 | # | ||
6 | # All text after a hash (#) is considered a comment and will be ignored | ||
7 | # The format is: | ||
8 | # TAG = value [value, ...] | ||
9 | # For lists items can also be appended using: | ||
10 | # TAG += value [value, ...] | ||
11 | # Values that contain spaces should be placed between quotes (" ") | ||
12 | 2 | ||
13 | #--------------------------------------------------------------------------- | 3 | #--------------------------------------------------------------------------- |
14 | # Project related configuration options | 4 | # Project related configuration options |
15 | #--------------------------------------------------------------------------- | 5 | #--------------------------------------------------------------------------- |
16 | |||
17 | # This tag specifies the encoding used for all characters in the config file | ||
18 | # that follow. The default is UTF-8 which is also the encoding used for all | ||
19 | # text before the first occurrence of this tag. Doxygen uses libiconv (or the | ||
20 | # iconv built into libc) for the transcoding. See | ||
21 | # http://www.gnu.org/software/libiconv for the list of possible encodings. | ||
22 | |||
23 | DOXYFILE_ENCODING = UTF-8 | 6 | DOXYFILE_ENCODING = UTF-8 |
24 | |||
25 | # The PROJECT_NAME tag is a single word (or a sequence of words surrounded | ||
26 | # by quotes) that should identify the project. | ||
27 | |||
28 | PROJECT_NAME = OpenSim | 7 | PROJECT_NAME = OpenSim |
29 | 8 | PROJECT_NUMBER = GIT | |
30 | # The PROJECT_NUMBER tag can be used to enter a project or revision number. | 9 | PROJECT_BRIEF = |
31 | # This could be handy for archiving the generated documentation or | 10 | PROJECT_LOGO = |
32 | # if some version control system is used. | ||
33 | |||
34 | PROJECT_NUMBER = SVN | ||
35 | |||
36 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) | ||
37 | # base path where the generated documentation will be put. | ||
38 | # If a relative path is entered, it will be relative to the location | ||
39 | # where doxygen was started. If left blank the current directory will be used. | ||
40 | |||
41 | OUTPUT_DIRECTORY = | 11 | OUTPUT_DIRECTORY = |
42 | |||
43 | # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create | ||
44 | # 4096 sub-directories (in 2 levels) under the output directory of each output | ||
45 | # format and will distribute the generated files over these directories. | ||
46 | # Enabling this option can be useful when feeding doxygen a huge amount of | ||
47 | # source files, where putting all generated files in the same directory would | ||
48 | # otherwise cause performance problems for the file system. | ||
49 | |||
50 | CREATE_SUBDIRS = NO | 12 | CREATE_SUBDIRS = NO |
51 | |||
52 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all | ||
53 | # documentation generated by doxygen is written. Doxygen will use this | ||
54 | # information to generate all constant output in the proper language. | ||
55 | # The default language is English, other supported languages are: | ||
56 | # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, | ||
57 | # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, | ||
58 | # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), | ||
59 | # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, | ||
60 | # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, | ||
61 | # and Ukrainian. | ||
62 | |||
63 | OUTPUT_LANGUAGE = English | 13 | OUTPUT_LANGUAGE = English |
64 | |||
65 | # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will | ||
66 | # include brief member descriptions after the members that are listed in | ||
67 | # the file and class documentation (similar to JavaDoc). | ||
68 | # Set to NO to disable this. | ||
69 | |||
70 | BRIEF_MEMBER_DESC = YES | 14 | BRIEF_MEMBER_DESC = YES |
71 | |||
72 | # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend | ||
73 | # the brief description of a member or function before the detailed description. | ||
74 | # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the | ||
75 | # brief descriptions will be completely suppressed. | ||
76 | |||
77 | REPEAT_BRIEF = YES | 15 | REPEAT_BRIEF = YES |
78 | 16 | ABBREVIATE_BRIEF = | |
79 | # This tag implements a quasi-intelligent brief description abbreviator | ||
80 | # that is used to form the text in various listings. Each string | ||
81 | # in this list, if found as the leading text of the brief description, will be | ||
82 | # stripped from the text and the result after processing the whole list, is | ||
83 | # used as the annotated text. Otherwise, the brief description is used as-is. | ||
84 | # If left blank, the following values are used ("$name" is automatically | ||
85 | # replaced with the name of the entity): "The $name class" "The $name widget" | ||
86 | # "The $name file" "is" "provides" "specifies" "contains" | ||
87 | # "represents" "a" "an" "the" | ||
88 | |||
89 | ABBREVIATE_BRIEF = | ||
90 | |||
91 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then | ||
92 | # Doxygen will generate a detailed section even if there is only a brief | ||
93 | # description. | ||
94 | |||
95 | ALWAYS_DETAILED_SEC = NO | 17 | ALWAYS_DETAILED_SEC = NO |
96 | |||
97 | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all | ||
98 | # inherited members of a class in the documentation of that class as if those | ||
99 | # members were ordinary class members. Constructors, destructors and assignment | ||
100 | # operators of the base classes will not be shown. | ||
101 | |||
102 | INLINE_INHERITED_MEMB = NO | 18 | INLINE_INHERITED_MEMB = NO |
103 | |||
104 | # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full | ||
105 | # path before files name in the file list and in the header files. If set | ||
106 | # to NO the shortest path that makes the file name unique will be used. | ||
107 | |||
108 | FULL_PATH_NAMES = YES | 19 | FULL_PATH_NAMES = YES |
109 | 20 | STRIP_FROM_PATH = | |
110 | # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag | 21 | STRIP_FROM_INC_PATH = |
111 | # can be used to strip a user-defined part of the path. Stripping is | ||
112 | # only done if one of the specified strings matches the left-hand part of | ||
113 | # the path. The tag can be used to show relative paths in the file list. | ||
114 | # If left blank the directory from which doxygen is run is used as the | ||
115 | # path to strip. | ||
116 | |||
117 | STRIP_FROM_PATH = | ||
118 | |||
119 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of | ||
120 | # the path mentioned in the documentation of a class, which tells | ||
121 | # the reader which header file to include in order to use a class. | ||
122 | # If left blank only the name of the header file containing the class | ||
123 | # definition is used. Otherwise one should specify the include paths that | ||
124 | # are normally passed to the compiler using the -I flag. | ||
125 | |||
126 | STRIP_FROM_INC_PATH = | ||
127 | |||
128 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter | ||
129 | # (but less readable) file names. This can be useful is your file systems | ||
130 | # doesn't support long names like on DOS, Mac, or CD-ROM. | ||
131 | |||
132 | SHORT_NAMES = NO | 22 | SHORT_NAMES = NO |
133 | |||
134 | # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen | ||
135 | # will interpret the first line (until the first dot) of a JavaDoc-style | ||
136 | # comment as the brief description. If set to NO, the JavaDoc | ||
137 | # comments will behave just like regular Qt-style comments | ||
138 | # (thus requiring an explicit @brief command for a brief description.) | ||
139 | |||
140 | JAVADOC_AUTOBRIEF = NO | 23 | JAVADOC_AUTOBRIEF = NO |
141 | |||
142 | # If the QT_AUTOBRIEF tag is set to YES then Doxygen will | ||
143 | # interpret the first line (until the first dot) of a Qt-style | ||
144 | # comment as the brief description. If set to NO, the comments | ||
145 | # will behave just like regular Qt-style comments (thus requiring | ||
146 | # an explicit \brief command for a brief description.) | ||
147 | |||
148 | QT_AUTOBRIEF = NO | 24 | QT_AUTOBRIEF = NO |
149 | |||
150 | # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen | ||
151 | # treat a multi-line C++ special comment block (i.e. a block of //! or /// | ||
152 | # comments) as a brief description. This used to be the default behaviour. | ||
153 | # The new default is to treat a multi-line C++ comment block as a detailed | ||
154 | # description. Set this tag to YES if you prefer the old behaviour instead. | ||
155 | |||
156 | MULTILINE_CPP_IS_BRIEF = NO | 25 | MULTILINE_CPP_IS_BRIEF = NO |
157 | |||
158 | # If the DETAILS_AT_TOP tag is set to YES then Doxygen | ||
159 | # will output the detailed description near the top, like JavaDoc. | ||
160 | # If set to NO, the detailed description appears after the member | ||
161 | # documentation. | ||
162 | |||
163 | DETAILS_AT_TOP = NO | ||
164 | |||
165 | # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented | ||
166 | # member inherits the documentation from any documented member that it | ||
167 | # re-implements. | ||
168 | |||
169 | INHERIT_DOCS = YES | 26 | INHERIT_DOCS = YES |
170 | |||
171 | # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce | ||
172 | # a new page for each member. If set to NO, the documentation of a member will | ||
173 | # be part of the file/class/namespace that contains it. | ||
174 | |||
175 | SEPARATE_MEMBER_PAGES = NO | 27 | SEPARATE_MEMBER_PAGES = NO |
176 | |||
177 | # The TAB_SIZE tag can be used to set the number of spaces in a tab. | ||
178 | # Doxygen uses this value to replace tabs by spaces in code fragments. | ||
179 | |||
180 | TAB_SIZE = 8 | 28 | TAB_SIZE = 8 |
181 | 29 | ALIASES = | |
182 | # This tag can be used to specify a number of aliases that acts | 30 | TCL_SUBST = |
183 | # as commands in the documentation. An alias has the form "name=value". | ||
184 | # For example adding "sideeffect=\par Side Effects:\n" will allow you to | ||
185 | # put the command \sideeffect (or @sideeffect) in the documentation, which | ||
186 | # will result in a user-defined paragraph with heading "Side Effects:". | ||
187 | # You can put \n's in the value part of an alias to insert newlines. | ||
188 | |||
189 | ALIASES = | ||
190 | |||
191 | # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C | ||
192 | # sources only. Doxygen will then generate output that is more tailored for C. | ||
193 | # For instance, some of the names that are used will be different. The list | ||
194 | # of all members will be omitted, etc. | ||
195 | |||
196 | OPTIMIZE_OUTPUT_FOR_C = NO | 31 | OPTIMIZE_OUTPUT_FOR_C = NO |
197 | |||
198 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java | ||
199 | # sources only. Doxygen will then generate output that is more tailored for | ||
200 | # Java. For instance, namespaces will be presented as packages, qualified | ||
201 | # scopes will look different, etc. | ||
202 | |||
203 | OPTIMIZE_OUTPUT_JAVA = NO | 32 | OPTIMIZE_OUTPUT_JAVA = NO |
204 | |||
205 | # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran | ||
206 | # sources only. Doxygen will then generate output that is more tailored for | ||
207 | # Fortran. | ||
208 | |||
209 | OPTIMIZE_FOR_FORTRAN = NO | 33 | OPTIMIZE_FOR_FORTRAN = NO |
210 | |||
211 | # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL | ||
212 | # sources. Doxygen will then generate output that is tailored for | ||
213 | # VHDL. | ||
214 | |||
215 | OPTIMIZE_OUTPUT_VHDL = NO | 34 | OPTIMIZE_OUTPUT_VHDL = NO |
216 | 35 | EXTENSION_MAPPING = | |
217 | # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want | 36 | MARKDOWN_SUPPORT = YES |
218 | # to include (a tag file for) the STL sources as input, then you should | 37 | AUTOLINK_SUPPORT = YES |
219 | # set this tag to YES in order to let doxygen match functions declarations and | ||
220 | # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. | ||
221 | # func(std::string) {}). This also make the inheritance and collaboration | ||
222 | # diagrams that involve STL classes more complete and accurate. | ||
223 | |||
224 | BUILTIN_STL_SUPPORT = NO | 38 | BUILTIN_STL_SUPPORT = NO |
225 | |||
226 | # If you use Microsoft's C++/CLI language, you should set this option to YES to | ||
227 | # enable parsing support. | ||
228 | |||
229 | CPP_CLI_SUPPORT = NO | 39 | CPP_CLI_SUPPORT = NO |
230 | |||
231 | # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. | ||
232 | # Doxygen will parse them like normal C++ but will assume all classes use public | ||
233 | # instead of private inheritance when no explicit protection keyword is present. | ||
234 | |||
235 | SIP_SUPPORT = NO | 40 | SIP_SUPPORT = NO |
236 | 41 | IDL_PROPERTY_SUPPORT = YES | |
237 | # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC | ||
238 | # tag is set to YES, then doxygen will reuse the documentation of the first | ||
239 | # member in the group (if any) for the other members of the group. By default | ||
240 | # all members of a group must be documented explicitly. | ||
241 | |||
242 | DISTRIBUTE_GROUP_DOC = NO | 42 | DISTRIBUTE_GROUP_DOC = NO |
243 | |||
244 | # Set the SUBGROUPING tag to YES (the default) to allow class member groups of | ||
245 | # the same type (for instance a group of public functions) to be put as a | ||
246 | # subgroup of that type (e.g. under the Public Functions section). Set it to | ||
247 | # NO to prevent subgrouping. Alternatively, this can be done per class using | ||
248 | # the \nosubgrouping command. | ||
249 | |||
250 | SUBGROUPING = YES | 43 | SUBGROUPING = YES |
251 | 44 | INLINE_GROUPED_CLASSES = NO | |
252 | # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum | 45 | INLINE_SIMPLE_STRUCTS = NO |
253 | # is documented as struct, union, or enum with the name of the typedef. So | ||
254 | # typedef struct TypeS {} TypeT, will appear in the documentation as a struct | ||
255 | # with name TypeT. When disabled the typedef will appear as a member of a file, | ||
256 | # namespace, or class. And the struct will be named TypeS. This can typically | ||
257 | # be useful for C code in case the coding convention dictates that all compound | ||
258 | # types are typedef'ed and only the typedef is referenced, never the tag name. | ||
259 | |||
260 | TYPEDEF_HIDES_STRUCT = NO | 46 | TYPEDEF_HIDES_STRUCT = NO |
261 | 47 | SYMBOL_CACHE_SIZE = 0 | |
48 | LOOKUP_CACHE_SIZE = 0 | ||
262 | #--------------------------------------------------------------------------- | 49 | #--------------------------------------------------------------------------- |
263 | # Build related configuration options | 50 | # Build related configuration options |
264 | #--------------------------------------------------------------------------- | 51 | #--------------------------------------------------------------------------- |
265 | |||
266 | # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in | ||
267 | # documentation are documented, even if no documentation was available. | ||
268 | # Private class members and static file members will be hidden unless | ||
269 | # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES | ||
270 | |||
271 | EXTRACT_ALL = YES | 52 | EXTRACT_ALL = YES |
272 | |||
273 | # If the EXTRACT_PRIVATE tag is set to YES all private members of a class | ||
274 | # will be included in the documentation. | ||
275 | |||
276 | EXTRACT_PRIVATE = NO | 53 | EXTRACT_PRIVATE = NO |
277 | 54 | EXTRACT_PACKAGE = NO | |
278 | # If the EXTRACT_STATIC tag is set to YES all static members of a file | ||
279 | # will be included in the documentation. | ||
280 | |||
281 | EXTRACT_STATIC = NO | 55 | EXTRACT_STATIC = NO |
282 | |||
283 | # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) | ||
284 | # defined locally in source files will be included in the documentation. | ||
285 | # If set to NO only classes defined in header files are included. | ||
286 | |||
287 | EXTRACT_LOCAL_CLASSES = YES | 56 | EXTRACT_LOCAL_CLASSES = YES |
288 | |||
289 | # This flag is only useful for Objective-C code. When set to YES local | ||
290 | # methods, which are defined in the implementation section but not in | ||
291 | # the interface are included in the documentation. | ||
292 | # If set to NO (the default) only methods in the interface are included. | ||
293 | |||
294 | EXTRACT_LOCAL_METHODS = NO | 57 | EXTRACT_LOCAL_METHODS = NO |
295 | |||
296 | # If this flag is set to YES, the members of anonymous namespaces will be | ||
297 | # extracted and appear in the documentation as a namespace called | ||
298 | # 'anonymous_namespace{file}', where file will be replaced with the base | ||
299 | # name of the file that contains the anonymous namespace. By default | ||
300 | # anonymous namespace are hidden. | ||
301 | |||
302 | EXTRACT_ANON_NSPACES = NO | 58 | EXTRACT_ANON_NSPACES = NO |
303 | |||
304 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all | ||
305 | # undocumented members of documented classes, files or namespaces. | ||
306 | # If set to NO (the default) these members will be included in the | ||
307 | # various overviews, but no documentation section is generated. | ||
308 | # This option has no effect if EXTRACT_ALL is enabled. | ||
309 | |||
310 | HIDE_UNDOC_MEMBERS = NO | 59 | HIDE_UNDOC_MEMBERS = NO |
311 | |||
312 | # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all | ||
313 | # undocumented classes that are normally visible in the class hierarchy. | ||
314 | # If set to NO (the default) these classes will be included in the various | ||
315 | # overviews. This option has no effect if EXTRACT_ALL is enabled. | ||
316 | |||
317 | HIDE_UNDOC_CLASSES = NO | 60 | HIDE_UNDOC_CLASSES = NO |
318 | |||
319 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all | ||
320 | # friend (class|struct|union) declarations. | ||
321 | # If set to NO (the default) these declarations will be included in the | ||
322 | # documentation. | ||
323 | |||
324 | HIDE_FRIEND_COMPOUNDS = NO | 61 | HIDE_FRIEND_COMPOUNDS = NO |
325 | |||
326 | # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any | ||
327 | # documentation blocks found inside the body of a function. | ||
328 | # If set to NO (the default) these blocks will be appended to the | ||
329 | # function's detailed documentation block. | ||
330 | |||
331 | HIDE_IN_BODY_DOCS = NO | 62 | HIDE_IN_BODY_DOCS = NO |
332 | |||
333 | # The INTERNAL_DOCS tag determines if documentation | ||
334 | # that is typed after a \internal command is included. If the tag is set | ||
335 | # to NO (the default) then the documentation will be excluded. | ||
336 | # Set it to YES to include the internal documentation. | ||
337 | |||
338 | INTERNAL_DOCS = NO | 63 | INTERNAL_DOCS = NO |
339 | |||
340 | # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate | ||
341 | # file names in lower-case letters. If set to YES upper-case letters are also | ||
342 | # allowed. This is useful if you have classes or files whose names only differ | ||
343 | # in case and if your file system supports case sensitive file names. Windows | ||
344 | # and Mac users are advised to set this option to NO. | ||
345 | |||
346 | CASE_SENSE_NAMES = YES | 64 | CASE_SENSE_NAMES = YES |
347 | |||
348 | # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen | ||
349 | # will show members with their full class and namespace scopes in the | ||
350 | # documentation. If set to YES the scope will be hidden. | ||
351 | |||
352 | HIDE_SCOPE_NAMES = NO | 65 | HIDE_SCOPE_NAMES = NO |
353 | |||
354 | # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen | ||
355 | # will put a list of the files that are included by a file in the documentation | ||
356 | # of that file. | ||
357 | |||
358 | SHOW_INCLUDE_FILES = YES | 66 | SHOW_INCLUDE_FILES = YES |
359 | 67 | FORCE_LOCAL_INCLUDES = NO | |
360 | # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] | ||
361 | # is inserted in the documentation for inline members. | ||
362 | |||
363 | INLINE_INFO = YES | 68 | INLINE_INFO = YES |
364 | |||
365 | # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen | ||
366 | # will sort the (detailed) documentation of file and class members | ||
367 | # alphabetically by member name. If set to NO the members will appear in | ||
368 | # declaration order. | ||
369 | |||
370 | SORT_MEMBER_DOCS = YES | 69 | SORT_MEMBER_DOCS = YES |
371 | |||
372 | # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the | ||
373 | # brief documentation of file, namespace and class members alphabetically | ||
374 | # by member name. If set to NO (the default) the members will appear in | ||
375 | # declaration order. | ||
376 | |||
377 | SORT_BRIEF_DOCS = NO | 70 | SORT_BRIEF_DOCS = NO |
378 | 71 | SORT_MEMBERS_CTORS_1ST = NO | |
379 | # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the | ||
380 | # hierarchy of group names into alphabetical order. If set to NO (the default) | ||
381 | # the group names will appear in their defined order. | ||
382 | |||
383 | SORT_GROUP_NAMES = NO | 72 | SORT_GROUP_NAMES = NO |
384 | |||
385 | # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be | ||
386 | # sorted by fully-qualified names, including namespaces. If set to | ||
387 | # NO (the default), the class list will be sorted only by class name, | ||
388 | # not including the namespace part. | ||
389 | # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. | ||
390 | # Note: This option applies only to the class list, not to the | ||
391 | # alphabetical list. | ||
392 | |||
393 | SORT_BY_SCOPE_NAME = NO | 73 | SORT_BY_SCOPE_NAME = NO |
394 | 74 | STRICT_PROTO_MATCHING = NO | |
395 | # The GENERATE_TODOLIST tag can be used to enable (YES) or | ||
396 | # disable (NO) the todo list. This list is created by putting \todo | ||
397 | # commands in the documentation. | ||
398 | |||
399 | GENERATE_TODOLIST = YES | 75 | GENERATE_TODOLIST = YES |
400 | |||
401 | # The GENERATE_TESTLIST tag can be used to enable (YES) or | ||
402 | # disable (NO) the test list. This list is created by putting \test | ||
403 | # commands in the documentation. | ||
404 | |||
405 | GENERATE_TESTLIST = YES | 76 | GENERATE_TESTLIST = YES |
406 | |||
407 | # The GENERATE_BUGLIST tag can be used to enable (YES) or | ||
408 | # disable (NO) the bug list. This list is created by putting \bug | ||
409 | # commands in the documentation. | ||
410 | |||
411 | GENERATE_BUGLIST = YES | 77 | GENERATE_BUGLIST = YES |
412 | |||
413 | # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or | ||
414 | # disable (NO) the deprecated list. This list is created by putting | ||
415 | # \deprecated commands in the documentation. | ||
416 | |||
417 | GENERATE_DEPRECATEDLIST= YES | 78 | GENERATE_DEPRECATEDLIST= YES |
418 | 79 | ENABLED_SECTIONS = | |
419 | # The ENABLED_SECTIONS tag can be used to enable conditional | ||
420 | # documentation sections, marked by \if sectionname ... \endif. | ||
421 | |||
422 | ENABLED_SECTIONS = | ||
423 | |||
424 | # The MAX_INITIALIZER_LINES tag determines the maximum number of lines | ||
425 | # the initial value of a variable or define consists of for it to appear in | ||
426 | # the documentation. If the initializer consists of more lines than specified | ||
427 | # here it will be hidden. Use a value of 0 to hide initializers completely. | ||
428 | # The appearance of the initializer of individual variables and defines in the | ||
429 | # documentation can be controlled using \showinitializer or \hideinitializer | ||
430 | # command in the documentation regardless of this setting. | ||
431 | |||
432 | MAX_INITIALIZER_LINES = 30 | 80 | MAX_INITIALIZER_LINES = 30 |
433 | |||
434 | # Set the SHOW_USED_FILES tag to NO to disable the list of files generated | ||
435 | # at the bottom of the documentation of classes and structs. If set to YES the | ||
436 | # list will mention the files that were used to generate the documentation. | ||
437 | |||
438 | SHOW_USED_FILES = YES | 81 | SHOW_USED_FILES = YES |
439 | 82 | SHOW_FILES = YES | |
440 | # If the sources in your project are distributed over multiple directories | 83 | SHOW_NAMESPACES = YES |
441 | # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy | 84 | FILE_VERSION_FILTER = |
442 | # in the documentation. The default is NO. | 85 | LAYOUT_FILE = |
443 | 86 | CITE_BIB_FILES = | |
444 | SHOW_DIRECTORIES = NO | ||
445 | |||
446 | # The FILE_VERSION_FILTER tag can be used to specify a program or script that | ||
447 | # doxygen should invoke to get the current version for each file (typically from | ||
448 | # the version control system). Doxygen will invoke the program by executing (via | ||
449 | # popen()) the command <command> <input-file>, where <command> is the value of | ||
450 | # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file | ||
451 | # provided by doxygen. Whatever the program writes to standard output | ||
452 | # is used as the file version. See the manual for examples. | ||
453 | |||
454 | FILE_VERSION_FILTER = | ||
455 | |||
456 | #--------------------------------------------------------------------------- | 87 | #--------------------------------------------------------------------------- |
457 | # configuration options related to warning and progress messages | 88 | # configuration options related to warning and progress messages |
458 | #--------------------------------------------------------------------------- | 89 | #--------------------------------------------------------------------------- |
459 | |||
460 | # The QUIET tag can be used to turn on/off the messages that are generated | ||
461 | # by doxygen. Possible values are YES and NO. If left blank NO is used. | ||
462 | |||
463 | QUIET = NO | 90 | QUIET = NO |
464 | |||
465 | # The WARNINGS tag can be used to turn on/off the warning messages that are | ||
466 | # generated by doxygen. Possible values are YES and NO. If left blank | ||
467 | # NO is used. | ||
468 | |||
469 | WARNINGS = YES | 91 | WARNINGS = YES |
470 | |||
471 | # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings | ||
472 | # for undocumented members. If EXTRACT_ALL is set to YES then this flag will | ||
473 | # automatically be disabled. | ||
474 | |||
475 | WARN_IF_UNDOCUMENTED = YES | 92 | WARN_IF_UNDOCUMENTED = YES |
476 | |||
477 | # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for | ||
478 | # potential errors in the documentation, such as not documenting some | ||
479 | # parameters in a documented function, or documenting parameters that | ||
480 | # don't exist or using markup commands wrongly. | ||
481 | |||
482 | WARN_IF_DOC_ERROR = YES | 93 | WARN_IF_DOC_ERROR = YES |
483 | |||
484 | # This WARN_NO_PARAMDOC option can be abled to get warnings for | ||
485 | # functions that are documented, but have no documentation for their parameters | ||
486 | # or return value. If set to NO (the default) doxygen will only warn about | ||
487 | # wrong or incomplete parameter documentation, but not about the absence of | ||
488 | # documentation. | ||
489 | |||
490 | WARN_NO_PARAMDOC = NO | 94 | WARN_NO_PARAMDOC = NO |
491 | |||
492 | # The WARN_FORMAT tag determines the format of the warning messages that | ||
493 | # doxygen can produce. The string should contain the $file, $line, and $text | ||
494 | # tags, which will be replaced by the file and line number from which the | ||
495 | # warning originated and the warning text. Optionally the format may contain | ||
496 | # $version, which will be replaced by the version of the file (if it could | ||
497 | # be obtained via FILE_VERSION_FILTER) | ||
498 | |||
499 | WARN_FORMAT = "$file:$line: $text" | 95 | WARN_FORMAT = "$file:$line: $text" |
500 | 96 | WARN_LOGFILE = doxygen.error.log | |
501 | # The WARN_LOGFILE tag can be used to specify a file to which warning | ||
502 | # and error messages should be written. If left blank the output is written | ||
503 | # to stderr. | ||
504 | |||
505 | WARN_LOGFILE = | ||
506 | |||
507 | #--------------------------------------------------------------------------- | 97 | #--------------------------------------------------------------------------- |
508 | # configuration options related to the input files | 98 | # configuration options related to the input files |
509 | #--------------------------------------------------------------------------- | 99 | #--------------------------------------------------------------------------- |
510 | |||
511 | # The INPUT tag can be used to specify the files and/or directories that contain | ||
512 | # documented source files. You may enter file names like "myfile.cpp" or | ||
513 | # directories like "/usr/src/myproject". Separate the files or directories | ||
514 | # with spaces. | ||
515 | |||
516 | INPUT = ../OpenSim | 100 | INPUT = ../OpenSim |
517 | |||
518 | # This tag can be used to specify the character encoding of the source files | ||
519 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is | ||
520 | # also the default input encoding. Doxygen uses libiconv (or the iconv built | ||
521 | # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for | ||
522 | # the list of possible encodings. | ||
523 | |||
524 | INPUT_ENCODING = UTF-8 | 101 | INPUT_ENCODING = UTF-8 |
525 | 102 | FILE_PATTERNS = | |
526 | # If the value of the INPUT tag contains directories, you can use the | ||
527 | # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp | ||
528 | # and *.h) to filter out the source-files in the directories. If left | ||
529 | # blank the following patterns are tested: | ||
530 | # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx | ||
531 | # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 | ||
532 | |||
533 | FILE_PATTERNS = | ||
534 | |||
535 | # The RECURSIVE tag can be used to turn specify whether or not subdirectories | ||
536 | # should be searched for input files as well. Possible values are YES and NO. | ||
537 | # If left blank NO is used. | ||
538 | |||
539 | RECURSIVE = YES | 103 | RECURSIVE = YES |
540 | |||
541 | # The EXCLUDE tag can be used to specify files and/or directories that should | ||
542 | # excluded from the INPUT source files. This way you can easily exclude a | ||
543 | # subdirectory from a directory tree whose root is specified with the INPUT tag. | ||
544 | |||
545 | EXCLUDE = | 104 | EXCLUDE = |
546 | |||
547 | # The EXCLUDE_SYMLINKS tag can be used select whether or not files or | ||
548 | # directories that are symbolic links (a Unix filesystem feature) are excluded | ||
549 | # from the input. | ||
550 | |||
551 | EXCLUDE_SYMLINKS = NO | 105 | EXCLUDE_SYMLINKS = NO |
552 | 106 | EXCLUDE_PATTERNS = | |
553 | # If the value of the INPUT tag contains directories, you can use the | 107 | EXCLUDE_SYMBOLS = |
554 | # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude | 108 | EXAMPLE_PATH = |
555 | # certain files from those directories. Note that the wildcards are matched | 109 | EXAMPLE_PATTERNS = |
556 | # against the file with absolute path, so to exclude all test directories | ||
557 | # for example use the pattern */test/* | ||
558 | |||
559 | EXCLUDE_PATTERNS = | ||
560 | |||
561 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names | ||
562 | # (namespaces, classes, functions, etc.) that should be excluded from the | ||
563 | # output. The symbol name can be a fully qualified name, a word, or if the | ||
564 | # wildcard * is used, a substring. Examples: ANamespace, AClass, | ||
565 | # AClass::ANamespace, ANamespace::*Test | ||
566 | |||
567 | EXCLUDE_SYMBOLS = | ||
568 | |||
569 | # The EXAMPLE_PATH tag can be used to specify one or more files or | ||
570 | # directories that contain example code fragments that are included (see | ||
571 | # the \include command). | ||
572 | |||
573 | EXAMPLE_PATH = | ||
574 | |||
575 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the | ||
576 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp | ||
577 | # and *.h) to filter out the source-files in the directories. If left | ||
578 | # blank all files are included. | ||
579 | |||
580 | EXAMPLE_PATTERNS = | ||
581 | |||
582 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be | ||
583 | # searched for input files to be used with the \include or \dontinclude | ||
584 | # commands irrespective of the value of the RECURSIVE tag. | ||
585 | # Possible values are YES and NO. If left blank NO is used. | ||
586 | |||
587 | EXAMPLE_RECURSIVE = NO | 110 | EXAMPLE_RECURSIVE = NO |
588 | 111 | IMAGE_PATH = | |
589 | # The IMAGE_PATH tag can be used to specify one or more files or | 112 | INPUT_FILTER = |
590 | # directories that contain image that are included in the documentation (see | 113 | FILTER_PATTERNS = |
591 | # the \image command). | ||
592 | |||
593 | IMAGE_PATH = | ||
594 | |||
595 | # The INPUT_FILTER tag can be used to specify a program that doxygen should | ||
596 | # invoke to filter for each input file. Doxygen will invoke the filter program | ||
597 | # by executing (via popen()) the command <filter> <input-file>, where <filter> | ||
598 | # is the value of the INPUT_FILTER tag, and <input-file> is the name of an | ||
599 | # input file. Doxygen will then use the output that the filter program writes | ||
600 | # to standard output. If FILTER_PATTERNS is specified, this tag will be | ||
601 | # ignored. | ||
602 | |||
603 | INPUT_FILTER = | ||
604 | |||
605 | # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern | ||
606 | # basis. Doxygen will compare the file name with each pattern and apply the | ||
607 | # filter if there is a match. The filters are a list of the form: | ||
608 | # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further | ||
609 | # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER | ||
610 | # is applied to all files. | ||
611 | |||
612 | FILTER_PATTERNS = | ||
613 | |||
614 | # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using | ||
615 | # INPUT_FILTER) will be used to filter the input files when producing source | ||
616 | # files to browse (i.e. when SOURCE_BROWSER is set to YES). | ||
617 | |||
618 | FILTER_SOURCE_FILES = NO | 114 | FILTER_SOURCE_FILES = NO |
619 | 115 | FILTER_SOURCE_PATTERNS = | |
620 | #--------------------------------------------------------------------------- | 116 | #--------------------------------------------------------------------------- |
621 | # configuration options related to source browsing | 117 | # configuration options related to source browsing |
622 | #--------------------------------------------------------------------------- | 118 | #--------------------------------------------------------------------------- |
623 | |||
624 | # If the SOURCE_BROWSER tag is set to YES then a list of source files will | ||
625 | # be generated. Documented entities will be cross-referenced with these sources. | ||
626 | # Note: To get rid of all source code in the generated output, make sure also | ||
627 | # VERBATIM_HEADERS is set to NO. | ||
628 | |||
629 | SOURCE_BROWSER = NO | 119 | SOURCE_BROWSER = NO |
630 | |||
631 | # Setting the INLINE_SOURCES tag to YES will include the body | ||
632 | # of functions and classes directly in the documentation. | ||
633 | |||
634 | INLINE_SOURCES = NO | 120 | INLINE_SOURCES = NO |
635 | |||
636 | # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct | ||
637 | # doxygen to hide any special comment blocks from generated source code | ||
638 | # fragments. Normal C and C++ comments will always remain visible. | ||
639 | |||
640 | STRIP_CODE_COMMENTS = YES | 121 | STRIP_CODE_COMMENTS = YES |
641 | |||
642 | # If the REFERENCED_BY_RELATION tag is set to YES (the default) | ||
643 | # then for each documented function all documented | ||
644 | # functions referencing it will be listed. | ||
645 | |||
646 | REFERENCED_BY_RELATION = NO | 122 | REFERENCED_BY_RELATION = NO |
647 | |||
648 | # If the REFERENCES_RELATION tag is set to YES (the default) | ||
649 | # then for each documented function all documented entities | ||
650 | # called/used by that function will be listed. | ||
651 | |||
652 | REFERENCES_RELATION = NO | 123 | REFERENCES_RELATION = NO |
653 | |||
654 | # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) | ||
655 | # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from | ||
656 | # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will | ||
657 | # link to the source code. Otherwise they will link to the documentstion. | ||
658 | |||
659 | REFERENCES_LINK_SOURCE = YES | 124 | REFERENCES_LINK_SOURCE = YES |
660 | |||
661 | # If the USE_HTAGS tag is set to YES then the references to source code | ||
662 | # will point to the HTML generated by the htags(1) tool instead of doxygen | ||
663 | # built-in source browser. The htags tool is part of GNU's global source | ||
664 | # tagging system (see http://www.gnu.org/software/global/global.html). You | ||
665 | # will need version 4.8.6 or higher. | ||
666 | |||
667 | USE_HTAGS = NO | 125 | USE_HTAGS = NO |
668 | |||
669 | # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen | ||
670 | # will generate a verbatim copy of the header file for each class for | ||
671 | # which an include is specified. Set to NO to disable this. | ||
672 | |||
673 | VERBATIM_HEADERS = YES | 126 | VERBATIM_HEADERS = YES |
674 | |||
675 | #--------------------------------------------------------------------------- | 127 | #--------------------------------------------------------------------------- |
676 | # configuration options related to the alphabetical class index | 128 | # configuration options related to the alphabetical class index |
677 | #--------------------------------------------------------------------------- | 129 | #--------------------------------------------------------------------------- |
678 | |||
679 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index | ||
680 | # of all compounds will be generated. Enable this if the project | ||
681 | # contains a lot of classes, structs, unions or interfaces. | ||
682 | |||
683 | ALPHABETICAL_INDEX = NO | 130 | ALPHABETICAL_INDEX = NO |
684 | |||
685 | # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then | ||
686 | # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns | ||
687 | # in which this list will be split (can be a number in the range [1..20]) | ||
688 | |||
689 | COLS_IN_ALPHA_INDEX = 5 | 131 | COLS_IN_ALPHA_INDEX = 5 |
690 | 132 | IGNORE_PREFIX = | |
691 | # In case all classes in a project start with a common prefix, all | ||
692 | # classes will be put under the same header in the alphabetical index. | ||
693 | # The IGNORE_PREFIX tag can be used to specify one or more prefixes that | ||
694 | # should be ignored while generating the index headers. | ||
695 | |||
696 | IGNORE_PREFIX = | ||
697 | |||
698 | #--------------------------------------------------------------------------- | 133 | #--------------------------------------------------------------------------- |
699 | # configuration options related to the HTML output | 134 | # configuration options related to the HTML output |
700 | #--------------------------------------------------------------------------- | 135 | #--------------------------------------------------------------------------- |
701 | |||
702 | # If the GENERATE_HTML tag is set to YES (the default) Doxygen will | ||
703 | # generate HTML output. | ||
704 | |||
705 | GENERATE_HTML = YES | 136 | GENERATE_HTML = YES |
706 | |||
707 | # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. | ||
708 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be | ||
709 | # put in front of it. If left blank `html' will be used as the default path. | ||
710 | |||
711 | HTML_OUTPUT = html | 137 | HTML_OUTPUT = html |
712 | |||
713 | # The HTML_FILE_EXTENSION tag can be used to specify the file extension for | ||
714 | # each generated HTML page (for example: .htm,.php,.asp). If it is left blank | ||
715 | # doxygen will generate files with .html extension. | ||
716 | |||
717 | HTML_FILE_EXTENSION = .html | 138 | HTML_FILE_EXTENSION = .html |
718 | 139 | HTML_HEADER = | |
719 | # The HTML_HEADER tag can be used to specify a personal HTML header for | 140 | HTML_FOOTER = |
720 | # each generated HTML page. If it is left blank doxygen will generate a | 141 | HTML_STYLESHEET = |
721 | # standard header. | 142 | HTML_EXTRA_STYLESHEET = |
722 | 143 | HTML_EXTRA_FILES = | |
723 | HTML_HEADER = | 144 | HTML_COLORSTYLE_HUE = 220 |
724 | 145 | HTML_COLORSTYLE_SAT = 100 | |
725 | # The HTML_FOOTER tag can be used to specify a personal HTML footer for | 146 | HTML_COLORSTYLE_GAMMA = 80 |
726 | # each generated HTML page. If it is left blank doxygen will generate a | 147 | HTML_TIMESTAMP = YES |
727 | # standard footer. | ||
728 | |||
729 | HTML_FOOTER = | ||
730 | |||
731 | # The HTML_STYLESHEET tag can be used to specify a user-defined cascading | ||
732 | # style sheet that is used by each HTML page. It can be used to | ||
733 | # fine-tune the look of the HTML output. If the tag is left blank doxygen | ||
734 | # will generate a default style sheet. Note that doxygen will try to copy | ||
735 | # the style sheet file to the HTML output directory, so don't put your own | ||
736 | # stylesheet in the HTML output directory as well, or it will be erased! | ||
737 | |||
738 | HTML_STYLESHEET = | ||
739 | |||
740 | # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, | ||
741 | # files or namespaces will be aligned in HTML using tables. If set to | ||
742 | # NO a bullet list will be used. | ||
743 | |||
744 | HTML_ALIGN_MEMBERS = YES | ||
745 | |||
746 | # If the GENERATE_HTMLHELP tag is set to YES, additional index files | ||
747 | # will be generated that can be used as input for tools like the | ||
748 | # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) | ||
749 | # of the generated HTML documentation. | ||
750 | |||
751 | GENERATE_HTMLHELP = NO | ||
752 | |||
753 | # If the GENERATE_DOCSET tag is set to YES, additional index files | ||
754 | # will be generated that can be used as input for Apple's Xcode 3 | ||
755 | # integrated development environment, introduced with OSX 10.5 (Leopard). | ||
756 | # To create a documentation set, doxygen will generate a Makefile in the | ||
757 | # HTML output directory. Running make will produce the docset in that | ||
758 | # directory and running "make install" will install the docset in | ||
759 | # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find | ||
760 | # it at startup. | ||
761 | |||
762 | GENERATE_DOCSET = NO | ||
763 | |||
764 | # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the | ||
765 | # feed. A documentation feed provides an umbrella under which multiple | ||
766 | # documentation sets from a single provider (such as a company or product suite) | ||
767 | # can be grouped. | ||
768 | |||
769 | DOCSET_FEEDNAME = "Doxygen generated docs" | ||
770 | |||
771 | # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that | ||
772 | # should uniquely identify the documentation set bundle. This should be a | ||
773 | # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen | ||
774 | # will append .docset to the name. | ||
775 | |||
776 | DOCSET_BUNDLE_ID = org.doxygen.Project | ||
777 | |||
778 | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML | ||
779 | # documentation will contain sections that can be hidden and shown after the | ||
780 | # page has loaded. For this to work a browser that supports | ||
781 | # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox | ||
782 | # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). | ||
783 | |||
784 | HTML_DYNAMIC_SECTIONS = NO | 148 | HTML_DYNAMIC_SECTIONS = NO |
785 | 149 | HTML_INDEX_NUM_ENTRIES = 100 | |
786 | # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can | 150 | GENERATE_DOCSET = NO |
787 | # be used to specify the file name of the resulting .chm file. You | 151 | DOCSET_FEEDNAME = "OpenSimulator docs" |
788 | # can add a path in front of the file if the result should not be | 152 | DOCSET_BUNDLE_ID = org.opensimulator.OpenSim |
789 | # written to the html output directory. | 153 | DOCSET_PUBLISHER_ID = org.opensimulator.OpenSim |
790 | 154 | DOCSET_PUBLISHER_NAME = OpenSim | |
791 | CHM_FILE = | 155 | GENERATE_HTMLHELP = NO |
792 | 156 | CHM_FILE = | |
793 | # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can | 157 | HHC_LOCATION = |
794 | # be used to specify the location (absolute path including file name) of | ||
795 | # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run | ||
796 | # the HTML help compiler on the generated index.hhp. | ||
797 | |||
798 | HHC_LOCATION = | ||
799 | |||
800 | # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag | ||
801 | # controls if a separate .chi index file is generated (YES) or that | ||
802 | # it should be included in the master .chm file (NO). | ||
803 | |||
804 | GENERATE_CHI = NO | 158 | GENERATE_CHI = NO |
805 | 159 | CHM_INDEX_ENCODING = | |
806 | # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag | ||
807 | # controls whether a binary table of contents is generated (YES) or a | ||
808 | # normal table of contents (NO) in the .chm file. | ||
809 | |||
810 | BINARY_TOC = NO | 160 | BINARY_TOC = NO |
811 | |||
812 | # The TOC_EXPAND flag can be set to YES to add extra items for group members | ||
813 | # to the contents of the HTML help documentation and to the tree view. | ||
814 | |||
815 | TOC_EXPAND = NO | 161 | TOC_EXPAND = NO |
816 | 162 | GENERATE_QHP = NO | |
817 | # The DISABLE_INDEX tag can be used to turn on/off the condensed index at | 163 | QCH_FILE = |
818 | # top of each HTML page. The value NO (the default) enables the index and | 164 | QHP_NAMESPACE = org.opensimulator.OpenSim |
819 | # the value YES disables it. | 165 | QHP_VIRTUAL_FOLDER = doc |
820 | 166 | QHP_CUST_FILTER_NAME = | |
167 | QHP_CUST_FILTER_ATTRS = | ||
168 | QHP_SECT_FILTER_ATTRS = | ||
169 | QHG_LOCATION = | ||
170 | GENERATE_ECLIPSEHELP = NO | ||
171 | ECLIPSE_DOC_ID = org.opensimulator.OpenSim | ||
821 | DISABLE_INDEX = NO | 172 | DISABLE_INDEX = NO |
822 | |||
823 | # This tag can be used to set the number of enum values (range [1..20]) | ||
824 | # that doxygen will group on one line in the generated HTML documentation. | ||
825 | |||
826 | ENUM_VALUES_PER_LINE = 4 | ||
827 | |||
828 | # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be | ||
829 | # generated containing a tree-like index structure (just like the one that | ||
830 | # is generated for HTML Help). For this to work a browser that supports | ||
831 | # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, | ||
832 | # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are | ||
833 | # probably better off using the HTML help feature. | ||
834 | |||
835 | GENERATE_TREEVIEW = NO | 173 | GENERATE_TREEVIEW = NO |
836 | 174 | ENUM_VALUES_PER_LINE = 4 | |
837 | # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be | ||
838 | # used to set the initial width (in pixels) of the frame in which the tree | ||
839 | # is shown. | ||
840 | |||
841 | TREEVIEW_WIDTH = 250 | 175 | TREEVIEW_WIDTH = 250 |
842 | 176 | EXT_LINKS_IN_WINDOW = NO | |
177 | FORMULA_FONTSIZE = 10 | ||
178 | FORMULA_TRANSPARENT = YES | ||
179 | USE_MATHJAX = NO | ||
180 | MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest | ||
181 | MATHJAX_EXTENSIONS = | ||
182 | SEARCHENGINE = YES | ||
183 | SERVER_BASED_SEARCH = NO | ||
843 | #--------------------------------------------------------------------------- | 184 | #--------------------------------------------------------------------------- |
844 | # configuration options related to the LaTeX output | 185 | # configuration options related to the LaTeX output |
845 | #--------------------------------------------------------------------------- | 186 | #--------------------------------------------------------------------------- |
846 | |||
847 | # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will | ||
848 | # generate Latex output. | ||
849 | |||
850 | GENERATE_LATEX = NO | 187 | GENERATE_LATEX = NO |
851 | |||
852 | # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. | ||
853 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be | ||
854 | # put in front of it. If left blank `latex' will be used as the default path. | ||
855 | |||
856 | LATEX_OUTPUT = latex | 188 | LATEX_OUTPUT = latex |
857 | |||
858 | # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be | ||
859 | # invoked. If left blank `latex' will be used as the default command name. | ||
860 | |||
861 | LATEX_CMD_NAME = latex | 189 | LATEX_CMD_NAME = latex |
862 | |||
863 | # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to | ||
864 | # generate index for LaTeX. If left blank `makeindex' will be used as the | ||
865 | # default command name. | ||
866 | |||
867 | MAKEINDEX_CMD_NAME = makeindex | 190 | MAKEINDEX_CMD_NAME = makeindex |
868 | |||
869 | # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact | ||
870 | # LaTeX documents. This may be useful for small projects and may help to | ||
871 | # save some trees in general. | ||
872 | |||
873 | COMPACT_LATEX = NO | 191 | COMPACT_LATEX = NO |
874 | |||
875 | # The PAPER_TYPE tag can be used to set the paper type that is used | ||
876 | # by the printer. Possible values are: a4, a4wide, letter, legal and | ||
877 | # executive. If left blank a4wide will be used. | ||
878 | |||
879 | PAPER_TYPE = a4wide | 192 | PAPER_TYPE = a4wide |
880 | 193 | EXTRA_PACKAGES = | |
881 | # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX | 194 | LATEX_HEADER = |
882 | # packages that should be included in the LaTeX output. | 195 | LATEX_FOOTER = |
883 | |||
884 | EXTRA_PACKAGES = | ||
885 | |||
886 | # The LATEX_HEADER tag can be used to specify a personal LaTeX header for | ||
887 | # the generated latex document. The header should contain everything until | ||
888 | # the first chapter. If it is left blank doxygen will generate a | ||
889 | # standard header. Notice: only use this tag if you know what you are doing! | ||
890 | |||
891 | LATEX_HEADER = | ||
892 | |||
893 | # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated | ||
894 | # is prepared for conversion to pdf (using ps2pdf). The pdf file will | ||
895 | # contain links (just like the HTML output) instead of page references | ||
896 | # This makes the output suitable for online browsing using a pdf viewer. | ||
897 | |||
898 | PDF_HYPERLINKS = YES | 196 | PDF_HYPERLINKS = YES |
899 | |||
900 | # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of | ||
901 | # plain latex in the generated Makefile. Set this option to YES to get a | ||
902 | # higher quality PDF documentation. | ||
903 | |||
904 | USE_PDFLATEX = YES | 197 | USE_PDFLATEX = YES |
905 | |||
906 | # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. | ||
907 | # command to the generated LaTeX files. This will instruct LaTeX to keep | ||
908 | # running if errors occur, instead of asking the user for help. | ||
909 | # This option is also used when generating formulas in HTML. | ||
910 | |||
911 | LATEX_BATCHMODE = NO | 198 | LATEX_BATCHMODE = NO |
912 | |||
913 | # If LATEX_HIDE_INDICES is set to YES then doxygen will not | ||
914 | # include the index chapters (such as File Index, Compound Index, etc.) | ||
915 | # in the output. | ||
916 | |||
917 | LATEX_HIDE_INDICES = NO | 199 | LATEX_HIDE_INDICES = NO |
918 | 200 | LATEX_SOURCE_CODE = NO | |
201 | LATEX_BIB_STYLE = plain | ||
919 | #--------------------------------------------------------------------------- | 202 | #--------------------------------------------------------------------------- |
920 | # configuration options related to the RTF output | 203 | # configuration options related to the RTF output |
921 | #--------------------------------------------------------------------------- | 204 | #--------------------------------------------------------------------------- |
922 | |||
923 | # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output | ||
924 | # The RTF output is optimized for Word 97 and may not look very pretty with | ||
925 | # other RTF readers or editors. | ||
926 | |||
927 | GENERATE_RTF = NO | 205 | GENERATE_RTF = NO |
928 | |||
929 | # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. | ||
930 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be | ||
931 | # put in front of it. If left blank `rtf' will be used as the default path. | ||
932 | |||
933 | RTF_OUTPUT = rtf | 206 | RTF_OUTPUT = rtf |
934 | |||
935 | # If the COMPACT_RTF tag is set to YES Doxygen generates more compact | ||
936 | # RTF documents. This may be useful for small projects and may help to | ||
937 | # save some trees in general. | ||
938 | |||
939 | COMPACT_RTF = NO | 207 | COMPACT_RTF = NO |
940 | |||
941 | # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated | ||
942 | # will contain hyperlink fields. The RTF file will | ||
943 | # contain links (just like the HTML output) instead of page references. | ||
944 | # This makes the output suitable for online browsing using WORD or other | ||
945 | # programs which support those fields. | ||
946 | # Note: wordpad (write) and others do not support links. | ||
947 | |||
948 | RTF_HYPERLINKS = NO | 208 | RTF_HYPERLINKS = NO |
949 | 209 | RTF_STYLESHEET_FILE = | |
950 | # Load stylesheet definitions from file. Syntax is similar to doxygen's | 210 | RTF_EXTENSIONS_FILE = |
951 | # config file, i.e. a series of assignments. You only have to provide | ||
952 | # replacements, missing definitions are set to their default value. | ||
953 | |||
954 | RTF_STYLESHEET_FILE = | ||
955 | |||
956 | # Set optional variables used in the generation of an rtf document. | ||
957 | # Syntax is similar to doxygen's config file. | ||
958 | |||
959 | RTF_EXTENSIONS_FILE = | ||
960 | |||
961 | #--------------------------------------------------------------------------- | 211 | #--------------------------------------------------------------------------- |
962 | # configuration options related to the man page output | 212 | # configuration options related to the man page output |
963 | #--------------------------------------------------------------------------- | 213 | #--------------------------------------------------------------------------- |
964 | |||
965 | # If the GENERATE_MAN tag is set to YES (the default) Doxygen will | ||
966 | # generate man pages | ||
967 | |||
968 | GENERATE_MAN = NO | 214 | GENERATE_MAN = NO |
969 | |||
970 | # The MAN_OUTPUT tag is used to specify where the man pages will be put. | ||
971 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be | ||
972 | # put in front of it. If left blank `man' will be used as the default path. | ||
973 | |||
974 | MAN_OUTPUT = man | 215 | MAN_OUTPUT = man |
975 | |||
976 | # The MAN_EXTENSION tag determines the extension that is added to | ||
977 | # the generated man pages (default is the subroutine's section .3) | ||
978 | |||
979 | MAN_EXTENSION = .3 | 216 | MAN_EXTENSION = .3 |
980 | |||
981 | # If the MAN_LINKS tag is set to YES and Doxygen generates man output, | ||
982 | # then it will generate one additional man file for each entity | ||
983 | # documented in the real man page(s). These additional files | ||
984 | # only source the real man page, but without them the man command | ||
985 | # would be unable to find the correct page. The default is NO. | ||
986 | |||
987 | MAN_LINKS = NO | 217 | MAN_LINKS = NO |
988 | |||
989 | #--------------------------------------------------------------------------- | 218 | #--------------------------------------------------------------------------- |
990 | # configuration options related to the XML output | 219 | # configuration options related to the XML output |
991 | #--------------------------------------------------------------------------- | 220 | #--------------------------------------------------------------------------- |
992 | |||
993 | # If the GENERATE_XML tag is set to YES Doxygen will | ||
994 | # generate an XML file that captures the structure of | ||
995 | # the code including all documentation. | ||
996 | |||
997 | GENERATE_XML = NO | 221 | GENERATE_XML = NO |
998 | |||
999 | # The XML_OUTPUT tag is used to specify where the XML pages will be put. | ||
1000 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be | ||
1001 | # put in front of it. If left blank `xml' will be used as the default path. | ||
1002 | |||
1003 | XML_OUTPUT = xml | 222 | XML_OUTPUT = xml |
1004 | 223 | XML_SCHEMA = | |
1005 | # The XML_SCHEMA tag can be used to specify an XML schema, | 224 | XML_DTD = |
1006 | # which can be used by a validating XML parser to check the | ||
1007 | # syntax of the XML files. | ||
1008 | |||
1009 | XML_SCHEMA = | ||
1010 | |||
1011 | # The XML_DTD tag can be used to specify an XML DTD, | ||
1012 | # which can be used by a validating XML parser to check the | ||
1013 | # syntax of the XML files. | ||
1014 | |||
1015 | XML_DTD = | ||
1016 | |||
1017 | # If the XML_PROGRAMLISTING tag is set to YES Doxygen will | ||
1018 | # dump the program listings (including syntax highlighting | ||
1019 | # and cross-referencing information) to the XML output. Note that | ||
1020 | # enabling this will significantly increase the size of the XML output. | ||
1021 | |||
1022 | XML_PROGRAMLISTING = YES | 225 | XML_PROGRAMLISTING = YES |
1023 | |||
1024 | #--------------------------------------------------------------------------- | 226 | #--------------------------------------------------------------------------- |
1025 | # configuration options for the AutoGen Definitions output | 227 | # configuration options for the AutoGen Definitions output |
1026 | #--------------------------------------------------------------------------- | 228 | #--------------------------------------------------------------------------- |
1027 | |||
1028 | # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will | ||
1029 | # generate an AutoGen Definitions (see autogen.sf.net) file | ||
1030 | # that captures the structure of the code including all | ||
1031 | # documentation. Note that this feature is still experimental | ||
1032 | # and incomplete at the moment. | ||
1033 | |||
1034 | GENERATE_AUTOGEN_DEF = NO | 229 | GENERATE_AUTOGEN_DEF = NO |
1035 | |||
1036 | #--------------------------------------------------------------------------- | 230 | #--------------------------------------------------------------------------- |
1037 | # configuration options related to the Perl module output | 231 | # configuration options related to the Perl module output |
1038 | #--------------------------------------------------------------------------- | 232 | #--------------------------------------------------------------------------- |
1039 | |||
1040 | # If the GENERATE_PERLMOD tag is set to YES Doxygen will | ||
1041 | # generate a Perl module file that captures the structure of | ||
1042 | # the code including all documentation. Note that this | ||
1043 | # feature is still experimental and incomplete at the | ||
1044 | # moment. | ||
1045 | |||
1046 | GENERATE_PERLMOD = NO | 233 | GENERATE_PERLMOD = NO |
1047 | |||
1048 | # If the PERLMOD_LATEX tag is set to YES Doxygen will generate | ||
1049 | # the necessary Makefile rules, Perl scripts and LaTeX code to be able | ||
1050 | # to generate PDF and DVI output from the Perl module output. | ||
1051 | |||
1052 | PERLMOD_LATEX = NO | 234 | PERLMOD_LATEX = NO |
1053 | |||
1054 | # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be | ||
1055 | # nicely formatted so it can be parsed by a human reader. This is useful | ||
1056 | # if you want to understand what is going on. On the other hand, if this | ||
1057 | # tag is set to NO the size of the Perl module output will be much smaller | ||
1058 | # and Perl will parse it just the same. | ||
1059 | |||
1060 | PERLMOD_PRETTY = YES | 235 | PERLMOD_PRETTY = YES |
1061 | 236 | PERLMOD_MAKEVAR_PREFIX = | |
1062 | # The names of the make variables in the generated doxyrules.make file | ||
1063 | # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. | ||
1064 | # This is useful so different doxyrules.make files included by the same | ||
1065 | # Makefile don't overwrite each other's variables. | ||
1066 | |||
1067 | PERLMOD_MAKEVAR_PREFIX = | ||
1068 | |||
1069 | #--------------------------------------------------------------------------- | 237 | #--------------------------------------------------------------------------- |
1070 | # Configuration options related to the preprocessor | 238 | # Configuration options related to the preprocessor |
1071 | #--------------------------------------------------------------------------- | 239 | #--------------------------------------------------------------------------- |
1072 | |||
1073 | # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will | ||
1074 | # evaluate all C-preprocessor directives found in the sources and include | ||
1075 | # files. | ||
1076 | |||
1077 | ENABLE_PREPROCESSING = YES | 240 | ENABLE_PREPROCESSING = YES |
1078 | |||
1079 | # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro | ||
1080 | # names in the source code. If set to NO (the default) only conditional | ||
1081 | # compilation will be performed. Macro expansion can be done in a controlled | ||
1082 | # way by setting EXPAND_ONLY_PREDEF to YES. | ||
1083 | |||
1084 | MACRO_EXPANSION = NO | 241 | MACRO_EXPANSION = NO |
1085 | |||
1086 | # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES | ||
1087 | # then the macro expansion is limited to the macros specified with the | ||
1088 | # PREDEFINED and EXPAND_AS_DEFINED tags. | ||
1089 | |||
1090 | EXPAND_ONLY_PREDEF = NO | 242 | EXPAND_ONLY_PREDEF = NO |
1091 | |||
1092 | # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files | ||
1093 | # in the INCLUDE_PATH (see below) will be search if a #include is found. | ||
1094 | |||
1095 | SEARCH_INCLUDES = YES | 243 | SEARCH_INCLUDES = YES |
1096 | 244 | INCLUDE_PATH = | |
1097 | # The INCLUDE_PATH tag can be used to specify one or more directories that | 245 | INCLUDE_FILE_PATTERNS = |
1098 | # contain include files that are not input files but should be processed by | 246 | PREDEFINED = |
1099 | # the preprocessor. | 247 | EXPAND_AS_DEFINED = |
1100 | |||
1101 | INCLUDE_PATH = | ||
1102 | |||
1103 | # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard | ||
1104 | # patterns (like *.h and *.hpp) to filter out the header-files in the | ||
1105 | # directories. If left blank, the patterns specified with FILE_PATTERNS will | ||
1106 | # be used. | ||
1107 | |||
1108 | INCLUDE_FILE_PATTERNS = | ||
1109 | |||
1110 | # The PREDEFINED tag can be used to specify one or more macro names that | ||
1111 | # are defined before the preprocessor is started (similar to the -D option of | ||
1112 | # gcc). The argument of the tag is a list of macros of the form: name | ||
1113 | # or name=definition (no spaces). If the definition and the = are | ||
1114 | # omitted =1 is assumed. To prevent a macro definition from being | ||
1115 | # undefined via #undef or recursively expanded use the := operator | ||
1116 | # instead of the = operator. | ||
1117 | |||
1118 | PREDEFINED = | ||
1119 | |||
1120 | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then | ||
1121 | # this tag can be used to specify a list of macro names that should be expanded. | ||
1122 | # The macro definition that is found in the sources will be used. | ||
1123 | # Use the PREDEFINED tag if you want to use a different macro definition. | ||
1124 | |||
1125 | EXPAND_AS_DEFINED = | ||
1126 | |||
1127 | # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then | ||
1128 | # doxygen's preprocessor will remove all function-like macros that are alone | ||
1129 | # on a line, have an all uppercase name, and do not end with a semicolon. Such | ||
1130 | # function macros are typically used for boiler-plate code, and will confuse | ||
1131 | # the parser if not removed. | ||
1132 | |||
1133 | SKIP_FUNCTION_MACROS = YES | 248 | SKIP_FUNCTION_MACROS = YES |
1134 | |||
1135 | #--------------------------------------------------------------------------- | 249 | #--------------------------------------------------------------------------- |
1136 | # Configuration::additions related to external references | 250 | # Configuration::additions related to external references |
1137 | #--------------------------------------------------------------------------- | 251 | #--------------------------------------------------------------------------- |
1138 | 252 | TAGFILES = | |
1139 | # The TAGFILES option can be used to specify one or more tagfiles. | 253 | GENERATE_TAGFILE = |
1140 | # Optionally an initial location of the external documentation | ||
1141 | # can be added for each tagfile. The format of a tag file without | ||
1142 | # this location is as follows: | ||
1143 | # TAGFILES = file1 file2 ... | ||
1144 | # Adding location for the tag files is done as follows: | ||
1145 | # TAGFILES = file1=loc1 "file2 = loc2" ... | ||
1146 | # where "loc1" and "loc2" can be relative or absolute paths or | ||
1147 | # URLs. If a location is present for each tag, the installdox tool | ||
1148 | # does not have to be run to correct the links. | ||
1149 | # Note that each tag file must have a unique name | ||
1150 | # (where the name does NOT include the path) | ||
1151 | # If a tag file is not located in the directory in which doxygen | ||
1152 | # is run, you must also specify the path to the tagfile here. | ||
1153 | |||
1154 | TAGFILES = | ||
1155 | |||
1156 | # When a file name is specified after GENERATE_TAGFILE, doxygen will create | ||
1157 | # a tag file that is based on the input files it reads. | ||
1158 | |||
1159 | GENERATE_TAGFILE = | ||
1160 | |||
1161 | # If the ALLEXTERNALS tag is set to YES all external classes will be listed | ||
1162 | # in the class index. If set to NO only the inherited external classes | ||
1163 | # will be listed. | ||
1164 | |||
1165 | ALLEXTERNALS = NO | 254 | ALLEXTERNALS = NO |
1166 | |||
1167 | # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed | ||
1168 | # in the modules index. If set to NO, only the current project's groups will | ||
1169 | # be listed. | ||
1170 | |||
1171 | EXTERNAL_GROUPS = YES | 255 | EXTERNAL_GROUPS = YES |
1172 | |||
1173 | # The PERL_PATH should be the absolute path and name of the perl script | ||
1174 | # interpreter (i.e. the result of `which perl'). | ||
1175 | |||
1176 | PERL_PATH = /usr/bin/perl | 256 | PERL_PATH = /usr/bin/perl |
1177 | |||
1178 | #--------------------------------------------------------------------------- | 257 | #--------------------------------------------------------------------------- |
1179 | # Configuration options related to the dot tool | 258 | # Configuration options related to the dot tool |
1180 | #--------------------------------------------------------------------------- | 259 | #--------------------------------------------------------------------------- |
1181 | |||
1182 | # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will | ||
1183 | # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base | ||
1184 | # or super classes. Setting the tag to NO turns the diagrams off. Note that | ||
1185 | # this option is superseded by the HAVE_DOT option below. This is only a | ||
1186 | # fallback. It is recommended to install and use dot, since it yields more | ||
1187 | # powerful graphs. | ||
1188 | |||
1189 | CLASS_DIAGRAMS = YES | 260 | CLASS_DIAGRAMS = YES |
1190 | 261 | MSCGEN_PATH = | |
1191 | # You can define message sequence charts within doxygen comments using the \msc | ||
1192 | # command. Doxygen will then run the mscgen tool (see | ||
1193 | # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the | ||
1194 | # documentation. The MSCGEN_PATH tag allows you to specify the directory where | ||
1195 | # the mscgen tool resides. If left empty the tool is assumed to be found in the | ||
1196 | # default search path. | ||
1197 | |||
1198 | MSCGEN_PATH = | ||
1199 | |||
1200 | # If set to YES, the inheritance and collaboration graphs will hide | ||
1201 | # inheritance and usage relations if the target is undocumented | ||
1202 | # or is not a class. | ||
1203 | |||
1204 | HIDE_UNDOC_RELATIONS = YES | 262 | HIDE_UNDOC_RELATIONS = YES |
1205 | |||
1206 | # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is | ||
1207 | # available from the path. This tool is part of Graphviz, a graph visualization | ||
1208 | # toolkit from AT&T and Lucent Bell Labs. The other options in this section | ||
1209 | # have no effect if this option is set to NO (the default) | ||
1210 | |||
1211 | HAVE_DOT = NO | 263 | HAVE_DOT = NO |
1212 | 264 | DOT_NUM_THREADS = 0 | |
1213 | # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen | 265 | DOT_FONTNAME = Helvetica |
1214 | # will generate a graph for each documented class showing the direct and | 266 | DOT_FONTSIZE = 10 |
1215 | # indirect inheritance relations. Setting this tag to YES will force the | 267 | DOT_FONTPATH = |
1216 | # the CLASS_DIAGRAMS tag to NO. | ||
1217 | |||
1218 | CLASS_GRAPH = YES | 268 | CLASS_GRAPH = YES |
1219 | |||
1220 | # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen | ||
1221 | # will generate a graph for each documented class showing the direct and | ||
1222 | # indirect implementation dependencies (inheritance, containment, and | ||
1223 | # class references variables) of the class with other documented classes. | ||
1224 | |||
1225 | COLLABORATION_GRAPH = YES | 269 | COLLABORATION_GRAPH = YES |
1226 | |||
1227 | # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen | ||
1228 | # will generate a graph for groups, showing the direct groups dependencies | ||
1229 | |||
1230 | GROUP_GRAPHS = YES | 270 | GROUP_GRAPHS = YES |
1231 | |||
1232 | # If the UML_LOOK tag is set to YES doxygen will generate inheritance and | ||
1233 | # collaboration diagrams in a style similar to the OMG's Unified Modeling | ||
1234 | # Language. | ||
1235 | |||
1236 | UML_LOOK = NO | 271 | UML_LOOK = NO |
1237 | 272 | UML_LIMIT_NUM_FIELDS = 10 | |
1238 | # If set to YES, the inheritance and collaboration graphs will show the | ||
1239 | # relations between templates and their instances. | ||
1240 | |||
1241 | TEMPLATE_RELATIONS = NO | 273 | TEMPLATE_RELATIONS = NO |
1242 | |||
1243 | # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT | ||
1244 | # tags are set to YES then doxygen will generate a graph for each documented | ||
1245 | # file showing the direct and indirect include dependencies of the file with | ||
1246 | # other documented files. | ||
1247 | |||
1248 | INCLUDE_GRAPH = YES | 274 | INCLUDE_GRAPH = YES |
1249 | |||
1250 | # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and | ||
1251 | # HAVE_DOT tags are set to YES then doxygen will generate a graph for each | ||
1252 | # documented header file showing the documented files that directly or | ||
1253 | # indirectly include this file. | ||
1254 | |||
1255 | INCLUDED_BY_GRAPH = YES | 275 | INCLUDED_BY_GRAPH = YES |
1256 | |||
1257 | # If the CALL_GRAPH and HAVE_DOT options are set to YES then | ||
1258 | # doxygen will generate a call dependency graph for every global function | ||
1259 | # or class method. Note that enabling this option will significantly increase | ||
1260 | # the time of a run. So in most cases it will be better to enable call graphs | ||
1261 | # for selected functions only using the \callgraph command. | ||
1262 | |||
1263 | CALL_GRAPH = NO | 276 | CALL_GRAPH = NO |
1264 | |||
1265 | # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then | ||
1266 | # doxygen will generate a caller dependency graph for every global function | ||
1267 | # or class method. Note that enabling this option will significantly increase | ||
1268 | # the time of a run. So in most cases it will be better to enable caller | ||
1269 | # graphs for selected functions only using the \callergraph command. | ||
1270 | |||
1271 | CALLER_GRAPH = NO | 277 | CALLER_GRAPH = NO |
1272 | |||
1273 | # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen | ||
1274 | # will graphical hierarchy of all classes instead of a textual one. | ||
1275 | |||
1276 | GRAPHICAL_HIERARCHY = YES | 278 | GRAPHICAL_HIERARCHY = YES |
1277 | |||
1278 | # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES | ||
1279 | # then doxygen will show the dependencies a directory has on other directories | ||
1280 | # in a graphical way. The dependency relations are determined by the #include | ||
1281 | # relations between the files in the directories. | ||
1282 | |||
1283 | DIRECTORY_GRAPH = YES | 279 | DIRECTORY_GRAPH = YES |
1284 | |||
1285 | # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images | ||
1286 | # generated by dot. Possible values are png, jpg, or gif | ||
1287 | # If left blank png will be used. | ||
1288 | |||
1289 | DOT_IMAGE_FORMAT = png | 280 | DOT_IMAGE_FORMAT = png |
1290 | 281 | INTERACTIVE_SVG = NO | |
1291 | # The tag DOT_PATH can be used to specify the path where the dot tool can be | 282 | DOT_PATH = |
1292 | # found. If left blank, it is assumed the dot tool can be found in the path. | 283 | DOTFILE_DIRS = |
1293 | 284 | MSCFILE_DIRS = | |
1294 | DOT_PATH = | ||
1295 | |||
1296 | # The DOTFILE_DIRS tag can be used to specify one or more directories that | ||
1297 | # contain dot files that are included in the documentation (see the | ||
1298 | # \dotfile command). | ||
1299 | |||
1300 | DOTFILE_DIRS = | ||
1301 | |||
1302 | # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of | ||
1303 | # nodes that will be shown in the graph. If the number of nodes in a graph | ||
1304 | # becomes larger than this value, doxygen will truncate the graph, which is | ||
1305 | # visualized by representing a node as a red box. Note that doxygen if the | ||
1306 | # number of direct children of the root node in a graph is already larger than | ||
1307 | # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note | ||
1308 | # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. | ||
1309 | |||
1310 | DOT_GRAPH_MAX_NODES = 50 | 285 | DOT_GRAPH_MAX_NODES = 50 |
1311 | |||
1312 | # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the | ||
1313 | # graphs generated by dot. A depth value of 3 means that only nodes reachable | ||
1314 | # from the root by following a path via at most 3 edges will be shown. Nodes | ||
1315 | # that lay further from the root node will be omitted. Note that setting this | ||
1316 | # option to 1 or 2 may greatly reduce the computation time needed for large | ||
1317 | # code bases. Also note that the size of a graph can be further restricted by | ||
1318 | # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. | ||
1319 | |||
1320 | MAX_DOT_GRAPH_DEPTH = 0 | 286 | MAX_DOT_GRAPH_DEPTH = 0 |
1321 | |||
1322 | # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent | ||
1323 | # background. This is enabled by default, which results in a transparent | ||
1324 | # background. Warning: Depending on the platform used, enabling this option | ||
1325 | # may lead to badly anti-aliased labels on the edges of a graph (i.e. they | ||
1326 | # become hard to read). | ||
1327 | |||
1328 | DOT_TRANSPARENT = YES | 287 | DOT_TRANSPARENT = YES |
1329 | |||
1330 | # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output | ||
1331 | # files in one run (i.e. multiple -o and -T options on the command line). This | ||
1332 | # makes dot run faster, but since only newer versions of dot (>1.8.10) | ||
1333 | # support this, this feature is disabled by default. | ||
1334 | |||
1335 | DOT_MULTI_TARGETS = NO | 288 | DOT_MULTI_TARGETS = NO |
1336 | |||
1337 | # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will | ||
1338 | # generate a legend page explaining the meaning of the various boxes and | ||
1339 | # arrows in the dot generated graphs. | ||
1340 | |||
1341 | GENERATE_LEGEND = YES | 289 | GENERATE_LEGEND = YES |
1342 | |||
1343 | # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will | ||
1344 | # remove the intermediate dot files that are used to generate | ||
1345 | # the various graphs. | ||
1346 | |||
1347 | DOT_CLEANUP = YES | 290 | DOT_CLEANUP = YES |
1348 | |||
1349 | #--------------------------------------------------------------------------- | ||
1350 | # Configuration::additions related to the search engine | ||
1351 | #--------------------------------------------------------------------------- | ||
1352 | |||
1353 | # The SEARCHENGINE tag specifies whether or not a search engine should be | ||
1354 | # used. If set to NO the values of all tags below this one will be ignored. | ||
1355 | |||
1356 | SEARCHENGINE = YES | ||