|
|
| Line 61: |
Line 61: |
| </Area> | | </Area> |
|
| |
|
| Notes:
| | Notes: |
|
| |
|
| (L:sort_len, number) is the array length. For example, IcaoSearchMatchedIcaosNumber
| | - (L:sort_len, number) is the array length. For example, IcaoSearchMatchedIcaosNumber |
| The SortInit sequence was used for testing purposes only. It stores 2, 1, 4, 8, 7, and 0 into XMLVARs named 'sort_test0' through 'sort_test5'. In a real application, GeoCalcDistance information would actually generate the values to be stored in these XMLVARs and a SortInit sequence would probably never be needed.
| | - The SortInit sequence was used for testing purposes only. It stores 2, 1, 4, 8, 7, and 0 into XMLVARs named 'sort_test0' through 'sort_test5'. In a real application, GeoCalcDistance information would actually generate the values to be stored in these XMLVARs and a SortInit sequence would probably never be needed. |
| The bottom 6 lines in the Update section simply read the XMLVARs and store then into traditional L:Vars so that BlackBox can display them (so you can see what is happening before and after the sort is applied)
| | - The bottom 6 lines in the Update section simply read the XMLVARs and store then into traditional L:Vars so that BlackBox can display them (so you can see what is happening before and after the sort is applied) |
| A Mouse Area 'click area' is used to execute the sort macro, @sort('sort_test', 6). The number 6 is the array length to be sorted. In the real example I postulated, it would be written @sort('sort_test',C:fs9gps:IcaoSearchMatchedIcaosNumber)
| | - A Mouse Area 'click area' is used to execute the sort macro, @sort('sort_test', 6). The number 6 is the array length to be sorted. In the real example I postulated, it would be written @sort('sort_test',C:fs9gps:IcaoSearchMatchedIcaosNumber) |
| | |
| The following is a screen shot of a BlackBox display. On top are the initial values of (L:SortTest0, number) through (L:SortTest5, number). On the bottom are the values after the bubble sort. Tested in FS9 but of course, also works in FSX (XMLVARs has a FS9 module and a FSX module)
| |
| | |
| Recently, a question about sorting has come up. The context was an ICAO Search of Facility types which returns ICAO strings in alphabetical order. However, each ICAO represents a Facility that has a certain distance from the user's aircraft, and a sort according to distance is needed.
| |
| | |
| Acknowledgements are owed to Robbie McElrath who hammered out the Bubble Sort XML in a few minutes (thank you, Robbie) and Tom Aguilo, for providing XMLVARs. The sort script that follows makes use of the array-forming capabilities of XMLVARS. Thanks, Tom.
| |
| | |
| Code:
| |
| | |
| <!-- @sort('array_name', array_length) -->
| |
| <Macro Name="sort">
| |
| @2 (>L:sort_len, number)
| |
| :127
| |
| 0 (>L:sort_swapped, bool)
| |
| 0 sp0
| |
| :128
| |
| l0 ++ s0 (L:sort_len, number) >= if{ g129 }
| |
| @1 l0 -- scat s10 (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s11
| |
| @1 l0 scat (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s12 >
| |
| if{
| |
| l11 (>C:XMLVARS:NumberValue, number)
| |
| l10 (>C:XMLVARS:SearchVarName, string) l12 (>C:XMLVARS:NumberValue, number)
| |
| 1 (>L:sort_swapped, bool)
| |
| }
| |
| g128
| |
| :129
| |
| (L:sort_swapped, bool) if{ g127 }
| |
| </Macro>
| |
| | |
| <Macro Name="store">
| |
| @1 @2 scat (>C:XMLVARS:StoreVarName, string) (>C:XMLVARS:NumberValue, number)
| |
| </Macro>
| |
| | |
| <Update Frequency="18" Hidden="No">
| |
| (L:SortInit, bool) 0 ==
| |
| if{
| |
| 2 @store('sort_test', 0)
| |
| 1 @store('sort_test', 1)
| |
| 4 @store('sort_test', 2)
| |
| 8 @store('sort_test', 3)
| |
| 7 @store('sort_test', 4)
| |
| 0 @store('sort_test', 5)
| |
| 1 (>L:SortInit, bool)
| |
| }
| |
|
| |
| 'sort_test0' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest0, number)
| |
| 'sort_test1' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest1, number)
| |
| 'sort_test2' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest2, number)
| |
| 'sort_test3' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest3, number)
| |
| 'sort_test4' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest4, number)
| |
| 'sort_test5' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest5, number)
| |
| </Update>
| |
| | |
| <Area Left="150" Top="130" Width="16" Height="16">
| |
| <Cursor Type="Hand" />
| |
| <Click Kind="LeftSingle+RightSingle">
| |
| (L:SortMacroExecuted,enum) ++ (>L:SortMacroExecuted,enum)
| |
| @sort('sort_test', 6)
| |
| </Click>
| |
| </Area>
| |
| | |
| Notes:
| |
| | |
| (L:sort_len, number) is the array length. For example, IcaoSearchMatchedIcaosNumber
| |
| The SortInit sequence was used for testing purposes only. It stores 2, 1, 4, 8, 7, and 0 into XMLVARs named 'sort_test0' through 'sort_test5'. In a real application, GeoCalcDistance information would actually generate the values to be stored in these XMLVARs and a SortInit sequence would probably never be needed.
| |
| The bottom 6 lines in the Update section simply read the XMLVARs and store then into traditional L:Vars so that BlackBox can display them (so you can see what is happening before and after the sort is applied)
| |
| A Mouse Area 'click area' is used to execute the sort macro, @sort('sort_test', 6). The number 6 is the array length to be sorted. In the real example I postulated, it would be written @sort('sort_test',C:fs9gps:IcaoSearchMatchedIcaosNumber)
| |
| | |
| The following is a screen shot of a BlackBox display. On top are the initial values of (L:SortTest0, number) through (L:SortTest5, number). On the bottom are the values after the bubble sort. Tested in FS9 but of course, also works in FSX (XMLVARs has a FS9 module and a FSX module)
| |
| | |
| Recently, a question about sorting has come up. The context was an ICAO Search of Facility types which returns ICAO strings in alphabetical order. However, each ICAO represents a Facility that has a certain distance from the user's aircraft, and a sort according to distance is needed.
| |
| | |
| Acknowledgements are owed to Robbie McElrath who hammered out the Bubble Sort XML in a few minutes (thank you, Robbie) and Tom Aguilo, for providing XMLVARs. The sort script that follows makes use of the array-forming capabilities of XMLVARS. Thanks, Tom.
| |
| | |
| Code:
| |
| '''MACROS:'''
| |
| <!-- @sort('array_name', array_length) -->
| |
| <Macro Name="sort">
| |
| @2 (>L:sort_len, number)
| |
| :127
| |
| 0 (>L:sort_swapped, bool)
| |
| 0 sp0
| |
| :128
| |
| l0 ++ s0 (L:sort_len, number) >= if{ g129 }
| |
| @1 l0 -- scat s10 (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s11
| |
| @1 l0 scat (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s12 >
| |
| if{
| |
| l11 (>C:XMLVARS:NumberValue, number)
| |
| l10 (>C:XMLVARS:SearchVarName, string) l12 (>C:XMLVARS:NumberValue, number)
| |
| 1 (>L:sort_swapped, bool)
| |
| }
| |
| g128
| |
| :129
| |
| (L:sort_swapped, bool) if{ g127 }
| |
| </Macro>
| |
|
| |
| <Macro Name="store">
| |
| @1 @2 scat (>C:XMLVARS:StoreVarName, string) (>C:XMLVARS:NumberValue, number)
| |
| </Macro>
| |
| '''UPDATE:'''
| |
| <Update Frequency="18" Hidden="No">
| |
| (L:SortInit, bool) 0 ==
| |
| if{
| |
| 2 @store('sort_test', 0)
| |
| 1 @store('sort_test', 1)
| |
| 4 @store('sort_test', 2)
| |
| 8 @store('sort_test', 3)
| |
| 7 @store('sort_test', 4)
| |
| 0 @store('sort_test', 5)
| |
| 1 (>L:SortInit, bool)
| |
| }
| |
|
| |
| 'sort_test0' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest0, number)
| |
| 'sort_test1' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest1, number)
| |
| 'sort_test2' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest2, number)
| |
| 'sort_test3' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest3, number)
| |
| 'sort_test4' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest4, number)
| |
| 'sort_test5' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest5, number)
| |
| </Update>
| |
| '''MOUSE:'''
| |
| <Area Left="150" Top="130" Width="16" Height="16">
| |
| <Cursor Type="Hand" />
| |
| <Click Kind="LeftSingle+RightSingle">
| |
| (L:SortMacroExecuted,enum) ++ (>L:SortMacroExecuted,enum)
| |
| @sort('sort_test', 6)
| |
| </Click>
| |
| </Area>
| |
| | |
| '''Notes:'''
| |
| - (L:sort_len, number) is the array length. For example, IcaoSearchMatchedIcaosNumber
| |
| - The SortInit sequence was used for testing purposes only. It stores 2, 1, 4, 8, 7, and 0 into XMLVARs named 'sort_test0' through 'sort_test5'. In a real application, GeoCalcDistance information would actually generate the values to be stored in these XMLVARs and a SortInit sequence would probably never be needed.
| |
| - The bottom 6 lines in the Update section simply read the XMLVARs and store then into traditional L:Vars so that BlackBox can display them (so you can see what is happening before and after the sort is applied)
| |
| - A Mouse Area 'click area' is used to execute the sort macro, @sort('sort_test', 6). The number 6 is the array length to be sorted. In the real example I postulated, it would be written @sort('sort_test',C:fs9gps:IcaoSearchMatchedIcaosNumber)
| |
Recently, a question about sorting has come up. The context was an ICAO Search of Facility types which returns ICAO strings in alphabetical order. However, each ICAO represents a Facility that has a certain distance from the user's aircraft, and a sort according to distance is needed.
Acknowledgements are owed to Robbie McElrath who hammered out the Bubble Sort XML in a few minutes (thank you, Robbie) and Tom Aguilo, for providing XMLVARs. The sort script that follows makes use of the array-forming capabilities of XMLVARS. Thanks, Tom.
MACROS:
<Macro Name="sort">
@2 (>L:sort_len, number)
:127
0 (>L:sort_swapped, bool)
0 sp0
:128
l0 ++ s0 (L:sort_len, number) >= if{ g129 }
@1 l0 -- scat s10 (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s11
@1 l0 scat (>C:XMLVARS:SearchVarName, string) (C:XMLVARS:NumberValue, number) s12 >
if{
l11 (>C:XMLVARS:NumberValue, number)
l10 (>C:XMLVARS:SearchVarName, string) l12 (>C:XMLVARS:NumberValue, number)
1 (>L:sort_swapped, bool)
}
g128
:129
(L:sort_swapped, bool) if{ g127 }
</Macro>
<Macro Name="store">
@1 @2 scat (>C:XMLVARS:StoreVarName, string) (>C:XMLVARS:NumberValue, number)
</Macro>
UPDATE:
<Update Frequency="18" Hidden="No">
(L:SortInit, bool) 0 ==
if{
2 @store('sort_test', 0)
1 @store('sort_test', 1)
4 @store('sort_test', 2)
8 @store('sort_test', 3)
7 @store('sort_test', 4)
0 @store('sort_test', 5)
1 (>L:SortInit, bool)
}
'sort_test0' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest0, number)
'sort_test1' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest1, number)
'sort_test2' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest2, number)
'sort_test3' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest3, number)
'sort_test4' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest4, number)
'sort_test5' (>C:XMLVARS:SearchVarName,string) (C:XMLVARS:NumberValue,number) (>L:SortTest5, number)
</Update>
MOUSE:
<Area Left="150" Top="130" Width="16" Height="16">
<Cursor Type="Hand" />
<Click Kind="LeftSingle+RightSingle">
(L:SortMacroExecuted,enum) ++ (>L:SortMacroExecuted,enum)
@sort('sort_test', 6)
</Click>
</Area>
Notes:
- (L:sort_len, number) is the array length. For example, IcaoSearchMatchedIcaosNumber
- The SortInit sequence was used for testing purposes only. It stores 2, 1, 4, 8, 7, and 0 into XMLVARs named 'sort_test0' through 'sort_test5'. In a real application, GeoCalcDistance information would actually generate the values to be stored in these XMLVARs and a SortInit sequence would probably never be needed.
- The bottom 6 lines in the Update section simply read the XMLVARs and store then into traditional L:Vars so that BlackBox can display them (so you can see what is happening before and after the sort is applied)
- A Mouse Area 'click area' is used to execute the sort macro, @sort('sort_test', 6). The number 6 is the array length to be sorted. In the real example I postulated, it would be written @sort('sort_test',C:fs9gps:IcaoSearchMatchedIcaosNumber)