Difference between revisions of "XML: Macros - Extracting Digits"

From FSDeveloper Wiki
Jump to: navigation, search
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{Infobox-Applicable-FSVersion
 +
| FSXI = false
 +
| FSXA = true
 +
| FSX = true
 +
| FS2004 = true
 +
| FS2002 = false
 +
| FS2000 = unknown
 +
| FS98 = unknown
 +
}}
 
''' Extract Digits Macro '''
 
''' Extract Digits Macro '''
  
Line 9: Line 18:
 
  if{ l0 10 @3 pow * sp0 }  
 
  if{ l0 10 @3 pow * sp0 }  
 
  l0 int 10 @2 pow % 10 @2 1 - 0 max pow / int   
 
  l0 int 10 @2 pow % 10 @2 1 - 0 max pow / int   
   
+
  </Macro>
  @ExtDigit((ALGVar),nDigit,nDecimals)</math>
+
 
 +
  @ExtDigit((ALGVar),nDigit,nDecimals)
 +
 
 +
 
 
   
 
   
 
  Where:  
 
  Where:  
Line 21: Line 33:
 
   
 
   
 
  @ExtDigit(lVar,1,0) means I want to extract the right most, discarding the decimals. It returns 3  
 
  @ExtDigit(lVar,1,0) means I want to extract the right most, discarding the decimals. It returns 3  
  @ExtDigit(lVar,2,0) returns 2 ; @ExtDigit(lVar,3,0) returns 1 and  
+
  @ExtDigit(lVar,2,0) returns 2 ;  
 +
@ExtDigit(lVar,3,0) returns 1 and  
 
  @ExtDigit(lVar,4,0) and up returns 0  
 
  @ExtDigit(lVar,4,0) and up returns 0  
 
   
 
   
Line 30: Line 43:
 
  @ExtDigit(lVar,4,2) returns 2   
 
  @ExtDigit(lVar,4,2) returns 2   
  
[[category:Aircraft design]]
+
==NOTES:==
[[category:Gauges]]
+
 
 +
1. '''@1 sp0''' - this s(tores) the value of @1 in register 0 (zero) and p(ops) the number from the stack
 +
2. '''l0''' - this is a lower case L, and not a 1 (one)! This means l(oad) the value from the 0 (zero) register
 +
3. '''@1 @2 @3''' - this is how an @Macro passes parameters. The @1 is the first parameter passed from it, etc. Used like so:
 +
    @Macro1(Param1,Param2,Param3)
 +
    @1 passes Param1
 +
    @2 passes Param2
 +
    @3 passes Param3
 +
 
 +
[[category:Aircraft Design]]
 +
[[category:Panel and Gauge Design]]

Revision as of 15:15, 29 August 2011

Extract Digits Macro

Quite frequently it is necessary to extract the nth digit of a number for any number of reasons. This XML Macro is very handy for the purpose, as it is "universal" and does not care what the number is...

<Macro Name="ExtDigit"> 
@1 sp0 
@3 0 >  
if{ l0 10 @3 pow * sp0 } 
l0 int 10 @2 pow % 10 @2 1 - 0 max pow / int  
</Macro>
@ExtDigit((ALGVar),nDigit,nDecimals)


Where: 
(ALGVar) is the A,L or G var from where to extract the digit 
nDigit is the position of the digit to extract, starting from the right. 
nDecimals is the number of decimals to be included in the calcs. 

For instance
for a value of 123.456789999999 

@ExtDigit(lVar,1,0) means I want to extract the right most, discarding the decimals. It returns 3 
@ExtDigit(lVar,2,0) returns 2 ; 
@ExtDigit(lVar,3,0) returns 1 and 
@ExtDigit(lVar,4,0) and up returns 0 

using decimals: 
@ExtDigit(lVar,1,2) returns 5  
@ExtDigit(lVar,2,2) returns 4  
@ExtDigit(lVar,3,2) returns 3  
@ExtDigit(lVar,4,2) returns 2  

NOTES:

1. @1 sp0 - this s(tores) the value of @1 in register 0 (zero) and p(ops) the number from the stack
2. l0 - this is a lower case L, and not a 1 (one)! This means l(oad) the value from the 0 (zero) register
3. @1 @2 @3 - this is how an @Macro passes parameters. The @1 is the first parameter passed from it, etc. Used like so:
    @Macro1(Param1,Param2,Param3)
    @1 passes Param1 
    @2 passes Param2
    @3 passes Param3