| 
    
    
    Command | 
    
    
    CALC - Numeric Handling  | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        This provides a fast simple calculation placed in the
        Result variable according to the type  
        of Method using + , - , / , *, %(modulus) or logical functions | (OR)  & (AND)
        ^ (EXOR) for non float. 
        The source parameters can be text, numeric, variables or pointers as
        appropriate. 
        More complex calculation methods for maths, trigs, text and
        buffers are described below.
   |  
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        CALC(Result,VarA,VarB,Method) 
         
        + - Add 
        - - Minus 
        / - Divide 
        * - Multiply 
        % - Modulus 
        | - OR (Logical) non float  
        & - AND (logical) non float 
        ^ -EXOR (logical) non float 
        > - shift bits 
        < - shift bits 
         
        eg 
        CALC(varIndex,varIndex,1,"+"); // Buffer wrapping: varIndex = varIndex
        + 1  
        CALC(varX2,DISPX,2,"*"); // Centre of display: varX2 = DISPX * 2  
        CALC(hours_f,Time.mins,60,"/"); // Fractional hours: hours_f = Time.mins
        / 60 
         
        20 Combined CALC() Functions
        ''/-'', ''+/'', ''*+'', ''+%'', ''++'', etc - v49.48 
        * Added 20 "combined" CALC() functions: 
        CALC( varD, varX, varY, varZ, "/-" ); // varD = ( varX / varY ) - varZ 
        CALC( varD, varX, varY, varZ, "/+" ); // varD = ( varX / varY ) + varZ 
        CALC( varD, varX, varY, varZ, "-/" ); // varD = ( varX - varY ) / varZ 
        CALC( varD, varX, varY, varZ, "+/" ); // varD = ( varX + varY ) / varZ 
        CALC( varD, varX, varY, varZ, "*-" ); // varD = ( varX * varY ) - varZ 
        CALC( varD, varX, varY, varZ, "*+" ); // varD = ( varX * varY ) + varZ 
        CALC( varD, varX, varY, varZ, "-*" ); // varD = ( varX - varY ) * varZ 
        CALC( varD, varX, varY, varZ, "+*" ); // varD = ( varX + varY ) * varZ 
        CALC( varD, varX, varY, varZ, "%-" ); // varD = ( varX % varY ) - varZ 
        CALC( varD, varX, varY, varZ, "%+" ); // varD = ( varX % varY ) + varZ 
        CALC( varD, varX, varY, varZ, "-%" ); // varD = ( varX - varY ) % varZ 
        CALC( varD, varX, varY, varZ, "+%" ); // varD = ( varX + varY ) % varZ 
        CALC( varD, varX, varY, varZ, "++" ); // varD = ( varX + varY ) + varZ 
        CALC( varD, varX, varY, varZ, "+-" ); // varD = ( varX + varY ) - varZ 
        CALC( varD, varX, varY, varZ, "-+" ); // varD = ( varX - varY ) + varZ 
        CALC( varD, varX, varY, varZ, "--" ); // varD = ( varX - varY ) - varZ 
        CALC( varD, varX, varY, varZ, "**" ); // varD = ( varX * varY ) * varZ 
        CALC( varD, varX, varY, varZ, "*/" ); // varD = ( varX * varY ) / varZ 
        CALC( varD, varX, varY, varZ, "/*" ); // varD = ( varX / varY ) * varZ 
        CALC( varD, varX, varY, varZ, "//" ); // varD = ( varX / varY ) / varZ 
        * varX operator1 varY is always performed first followed by operator2
        varZ 
         
        eg 
        CALC(varIndex,varIndex,1,128,"+%"); // Buffer wrapping: varIndex = (
        varIndex + 1 ) % 128 
        CALC(varX2,DISPX,2,1,"/-"); // Centre of display: varX2 = ( DISPX / 2 )
        - 1 
        CALC(hours_f,Time.mins,60,Time.hours,"/+"); // Fractional hours: hours_f
        = ( Time.mins / 60 ) + Time.hours
         | 
   
  
    | 
    
      | 
    
  | 
   
 
 
    | 
    
    
    Command | 
    
    
    CALC - ++ / -- Increment/Decrement - v49.51 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        
        CALC(num,''++''); and CALC(num,''--''); 
         
        Added: 
        CALC( dst, "++" ); // dst = dst + 1; 
        CALC( dst, src, "++" ); // dst = src + 1; 
        CALC( dst, "--" ); // dst = dst - 1; 
        CALC( dst, src, "--" ); // dst = src - 1; | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        
        VAR(a,0,U8); 
        VAR(b,0,U8); 
         
        CALC(a,"++"); 
        a=1 
        CALC(a,"++"); 
        a = 2 
        CALC(b,a,"++"); 
        b=3 
        CALC(b,"--"); 
        b=2 | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC -Maths Functions | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        This provides a fast simple calculation placed in the
        Result variable according to the type  
        of Method using + , - , / , *, %(modulus) or logical functions | (OR)  & (AND)
        ^ (EXOR) for non float. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        
        CALC(Result,VarA,VarB,Method) 
         
        ABS - Absolute Value of varX - CALC( varD, varX, "ABS" ); 
        EXP  - Exponential Function of varX - CALC( varD, varX, "EXP" ); 
        LOG  - Natural Logarithm of varX - CALC( varD, varX, "LOG" ); 
        LOG10 - Base-Ten Logarithm of varX - CALC( varD, varX, "LOG10" ); 
        POW - varX Raised to the Power of vary - CALC( varD, varX, varY,"POW"); 
        SQRT
  - Non-Negative Square Root of varX - CALC( varD, varX, "SQRT" ); 
        CBRT - Cube Root of varX - CALC( varD, varX, "CBRT" );  
        RND - Random Number Generation - CALC( varD, varX, "RND" ); - v49.08     
        
        
     | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - Trigonometric Functions | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        This provides a fast simple calculation placed in the
        Result variable according to the type  
        of Method using + , - , / , *, %(modulus) or logical functions | (OR)  & (AND)
        ^ (EXOR) for non float. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  varD is result, varX is source, set system parameter angle=degres or
        radians; 
        COS - Cosine of varX - CALC( varD, varX, "COS" ); 
        SIN - Sine of varX - CALC( varD, varX, "SIN" ); 
        TAN - Tangent of varX - CALC( varD, varX, "TAN" ); 
         
        ACOS - Arc Cosine of varX - CALC( varD, varX, "ACOS" ); 
        ASIN - Arc Sine of varX - CALC( varD, varX, "ASIN" ); 
        ATAN - Arc Tangent of varX - CALC( varD, varX, "ATAN" ); 
        ATAN2 - Arc Tangent of varX/varY - CALC( varD, varX, varY, "ATAN2" ); 
         
        COSH - Hyperbolic Cosine of varX - CALC( varD, varX, "COSH" ); 
        SINH - Hyperbolic Sine of varX - CALC( varD, varX, "SINH" ); 
        TANH - Hyperbolic Tangent of varX - CALC( varD, varX, "TANH" ); 
        ACOSH - Hyperbolic Arc Cosine of varX - CALC( varD, varX, "ACOSH" ); 
        ASINH - Hyperbolic Arc Sine of varX - CALC( varD, varX, "ASINH" ); 
        ATANH - Hyperbolic Arc Tangent of varX - CALC( varD, varX, "ATANH" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - RND - 
    
    
    Random Number Generation | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Gives varD equal to a Random number (0 to 0.999999) multiplied by varX. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            CALC( varD, varX, "RND" ); | 
   
  
    | 
    
      | 
    
  | 
   
   
    
  
    | 
    
    
    Topic | 
    
     
  
        
        Text and Cursor Handling  | 
         
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        Calc can be used for text and cursor manipulation where editable text is
        to be placed on the screen as in a calculator or editable text field. Various
        methods allow cursor movement and type, text insertion and deletion,
        find or delete text, cursor position and length.  
        VarA contains the existing text and VarB the modifier text, cursor
        position or a text length.  
   Example: CALC(EditBox,EditBox, "A","INS"); Inserts the letter 'A' into the
        text at the cursor position 
          
        Cursor and Text Types 
        \\01 defines the
        text as a PASSWORD so that only ***** are shown until another
        \\01 or end;. 
        \\02 defines a
        hidden cursor with over write and
        \\03 a hidden
        cursor with insert ON 
        \\04 defines an
        underline cursor with over write and
        \\05 an underline
        cursor with insert ON 
        \\06 defines a
        block cursor with over write and
        \\07 a ertical
        cursor with insert ON
        A detailed description follows for each method. 
        'dst' and 'src' can be the same text variable. 
        'src' is unmodified unless same text variable as 'dst'. 
        Supported data types: 
        The parameters can be text, numeric, variables or pointers as
appropriate    | 
   
    | 
      | 
    
      | 
   
    | 
    
    
    Command | 
    
    
    CALC - POS - 
            Move Cursor to Absolute
    Position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        Moves cursor in text 'src'
        to absolute position 'pos'
        and stores result text in 'dst'. 
            If 'pos'
        is less than zero, then cursor is put before first character ('pos'=0).
        If 'pos'
        is greater than  
            the length of 'src'
        then the cursor is placed after the last character. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        CALC( dst, src, pos, "POS" ); | 
   
  
    | 
    
      | 
    
  | 
   
   
  
  
    | 
    
    
    Command | 
    
    
    CALC - REL - 
    
Move Cursor
    to Relative Position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        Moves cursor in text 'src'
        by displacement specified in 'mov'
        and stores result text in 'dst'. 
        Positive values of 'mov'
        move the cursor to the right and negative values of 'mov'
        move the cursor to the left. If
        the move results in a cursor position of less than zero, then the cursor
        is put before first character. If the move results in a cursor position greater than the length of 'src'
        then the cursor is placed after the last character. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        CALC( dst, src,
        mov, "REL" ); | 
   
  
    | 
    
      | 
    
  | 
   
   
  
    | 
    
    
    Command | 
    
    
    CALC - INS - 
    Insert / Overwrite Text at Cursor | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
         Puts
        text from 'src2'
        into 'src1'
        at the cursor and stores the result text in 'dst'. 
         The
        text will either be overwritten or inserted depending on the cursor type
        in 'src1'. 
         If
        no cursor is present then the text is appended to the end of 'src1'. 
        'src1'
        and 'src2'
        are unmodified unless same text variable as 'dst' | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( dst,
        src1, src2, "INS" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - DEL - 
    Delete Text at Cursor | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Deletes 'num' characters from text 'src'
        at the cursor and stores the result text in 'dst'. 
        If 'num'
        is positive, then 'num' characters will be deleted after cursor. If 'num'
        is negative, then -'num' characters will be deleted before
        cursor (backspace). 
        If no cursor is present and 'num'
        is negative, then -'num'
        characters will be deleted from the end of the text in 'src'.
        If no cursor is present and 'num'
        is positive, then 'num' characters will be deleted from the start of the
        text in 'src'. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, num, "DEL" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - TRIM - 
    Trim Characters from Start and End of Text String | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Removes
        all text characters found in 'list'
        from the start and end of text in 'src'
        and stores the result text in 'dst'.
        If 'list'
        is ""
        (empty string) then spaces (20hex), tabs (09hex), line feeds (0Ahex),
        and carriage returns (0Dhex) are removed. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, list, "TRIM" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - LTRIM - 
    Trim Characters from Start of Text String | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Removes
        all text characters found in 'list'
        from the start of text in 'src'
        and stores the result text in 'dst'. If 'list'
        is ""
        (empty string) then spaces (20hex), tabs (09hex), line feeds (0Ahex),
        and carriage returns (0Dhex) are removed. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, list, "LTRIM" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - RTRIM -
    
    Trim Characters from End of Text String | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Removes all text characters found in 'list'
        from the end of text in 'src'
        and stores the result text in 'dst'. If 'list'
        is ""
        (empty string) then spaces (20hex), tabs (09hex), line feeds (0Ahex),
        and carriage returns (0Dhex) are removed. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( dst, src,
        list, "LTRIM" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - UPPER -
    
    Convert Text to Uppercase | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Converts
        the characters 'a'-'z'
        to uppercase 'A'-'Z'
        in text 'src'
        and stores result text in 'dst'. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, 0, "UPPER" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - LOWER -
    
    Convert Text to Lowercase | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Converts
        the characters 'A'-'Z'
        to lowercase 'a'-'z'
        in text 'src'
        and stores result text in 'dst'. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( dst, src,
        0, "LOWER" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - BEF
        - Get Characters from Before Cursor | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    'num'
        characters are copied from before the cursor in text 'src'
        and stored in text 'dst'. 
        If
        no cursor in present then 'num'
        characters are copied from the end of 'src'.  
        If 'num'
        is larger than the number of characters available in 'src'
        then only the available characters are copied. If 'num'
        is negative, then the function performs as "AFT". | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, num, "BEF" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - AFT
    - Get Characters from After Cursor | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    'num'
        characters are copied from after the cursor in text 'src'
        and stored in text 'dst'. 
        If
        no cursor in present then 'num'
        characters are copied from the start of 'src'. 
        If 'num'
        is larger than the number of characters available in 'src'
        then only the available characters are copied. If 'num'
        is negative, then the function performs as "BEF". | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, num, "AFT" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC -CUR
        - Change Cursor Type | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The cursor in text 'src'
        is changed to type 'type'
        and the result is stored in text 'dst'. 
        If no cursor is present, then the new
        cursor is appended to the end. 
         If 'type'
        is a string then the first character is taken as the cursor type. 
        'type'
        => integer variable | pointer to integer variable | integer | text
        variable | pointer to text variable | "string"  | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, type, "CUR" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - LEN
    - Get Text Length | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The
        length of text 'src'
        plus 'num' is stored in variable 'len'. 
        Cursor
        characters are not included in the length. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( len, src, num, "LEN" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - 
        
        
        LOC
        - Get Cursor Location | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The location of the cursor in text 'src'
        plus 'num'
        is stored in variable 'loc'. 
        If no cursor is present then a value of
        0 is used. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( loc, src, num, "LOC" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - 
    
    TYPE - Get Cursor Type | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The
        cursor type in text 'src'
        is stored in variable 'type'. 
        If
        no cursor is present then a value of 0 is used. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( type, src, 0, "TYPE" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - 
    
    FIND
        - Find Location of Text1 in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The first location of the match of text 'src2'
        (needle) in text 'src1'
        (haystack) is returned in 'loc'. 
        If no matches are found then -1
        is returned in 'loc'. 
        Cursor characters are not included in
        the calculation. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( loc, src1, src2, "FIND" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - LFIND - Find Location of
    last Text1
    in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The last location of the match of text 'src2'
        (needle) in text 'src1'
        (haystack) is returned in 'loc'. 
        If no matches are found then -1
        is returned in 'loc'. 
        Cursor characters are not included in
        the calculation.  | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( loc, src1, src2, "LFIND" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - IFIND - Find Location of Case Insensitive Text1 in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    The
        first location of the case insensitive match of text 'src2'
        (needle) in text 'src1'
        (haystack) is returned in 'loc' 
        If no case insensitive matches are
        found then -1
        is returned in 'loc'. 
        Cursor characters are not included in
        the calculation. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( loc,
        src1, src2, "FIND" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - ILFIND  - Find Location of
    last Case Insensitive Text1 in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
            The
        last location of the case insensitive match of text 'src2'
        (needle) in text 'src1'
        (haystack) is returned in 'loc' 
        If no case insensitive matches are
        found then -1
        is returned in 'loc'. 
        Cursor characters are not included in
        the calculation. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( loc,
        src1, src2, "FIND" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - REM - Remove Every Text1 in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Remove
        every occurrence of text 'src2'
        (needle) from text 'src1'
        (haystack) and store the result  
        text in 'dst'. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src1, src2, "REM" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    CALC - IREM - Remove Every Case Insensitive Text1 in Text2 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Remove every case insensitive
        occurrence of text 'src2'
        (needle) from text 'src1'
        (haystack) and store the result text in 'dst'. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst,
        src1, src2, "IREM" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - SPLIT
        - Split Text at Character or String | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Split the text 'src'
        at the character 'char' or string 'str'
        storing the text after 'char' or 'str'
        back into 'src'
        and storing the text
             
            before 'char' or 'str'
        into 'dst'
        or converting to number 'num'. If no 'char' or 'str' are present then the whole of 'src'
        is processed.
             
            If we have string 'str'
        then the first character is taken as the split character.
        'src'
        is modified during this operation.
             
            See BCUT for similar function where
        length is used instead of delimiter. 
             
            Added count option to split after nth occurrence of split string. 
            If n is positive then split at nth occurrence from start of src. 
            If n is negative then split at nth occurrence from end of src. 
            CALC( dst, src, str, n, "SPLIT" ); | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC( dst, src, char, "SPLIT" ); 
        CALC( num, src, char, "SPLIT" ); 
            CALC( dst, src, str, "SPLIT" ); 
             
            CALC( dst, src, str, n, "SPLIT" ); 
            Examples (assuming 's' is set each time): 
            VAR(s,"Theheshethee",TXT); 
            VAR(d,"",TXT); 
                 CALC(d,s,"e","SPLIT"); // d="Th"; s="heshethee" 
                 CALC(d,s,"she","SPLIT"); // d="Thehe"; s="thee" 
                 CALC(d,s,\\65,"SPLIT"); // d="Th"; s="heshethee" 
                 CALC(d,s,"e",2,"SPLIT"); // d="Theh"; s="shethee" 
                 CALC(d,s,"e",20,"SPLIT"); // d="Theheshethee"; s="" 
                 CALC(d,s,"p",2,"SPLIT"); // d="Theheshethee"; s="" 
                 CALC(d,s,"e",-2,"SPLIT"); // d="Thehesheth"; s="e" 
                 CALC(d,s,"e",-20,"SPLIT"); // d="Theheshethee"; s="" 
                 CALC(d,s,"she",-1,"SPLIT"); // d="Thehe"; s="thee" 
                 CALC(d,s,"he",-1,"SPLIT"); // d="Theheshet"; s="e" 
                 CALC(d,s,"he",-2,"SPLIT"); // d="Thehes"; s="thee" | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - PIXX
        - Get Width of Entity | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        The
        display width in pixels of entity 'ent'
        plus 'num'
        is stored in 'size'. 
        Note,
        variables do not have a size and return 0. Text, image, draw, touch
        keys, and pages do have sizes. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( size, ent, num, "PIXX" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - PIXY
        - Get Height of Entity | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        The
        display height in pixels of entity 'ent'
        plus 'num'
        is stored in 'size'. 
        Note,
        variables do not have a size and return 0. Text, image, draw, touch
        keys, and pages do have sizes. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC( size, ent, num, "PIXY" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        
            
            
        CALC - PCOPY - Pointer Copy 
             | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
            
            Pointers can be copied using CALC(dst,src,"PCOPY"); | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            
            CALC(dst,src,"PCOPY"); 
    
            
            Example: 
     VAR( v1 > "v3", PTR ); 
     VAR( v2 > "v4", PTR ); 
     VAR( v3, "alpha", TXT ); 
     VAR( v4, "beta", TXT ); 
     gives: v1>v3; v2>v4; v1=alpha; v2=beta; v3=alpha; v4=beta
     CALC( v1, v2, "PCOPY" ); 
     gives: v1>v4; v2>v4; v1=beta; v2=beta; v3=alpha; v4=beta
            
             | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
            
            
        CALC - SHIFT - Array Data Shift | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
            
            Function shifts the values in an array up or down its indices.  
> CALC( array, carry, shift, "SHIFT" ); 
> CALC( array, shift, "SHIFT" ); 
- 'array' is shifted by 'shift' places, one shift at a time. 
- If 'shift' is positive then array.1 -> array.2; array.0 -> array.1 etc 
- If 'shift' is negative then array.1 -> array.0; array.2 -> array.1 etc 
- The shift is 'circular', so the shifted out value is shifted in the other end. 
- If 'carry' is specified then the shift passes through the carry, ie the carry is shifted in and a new
carry is shifted out.
            
             | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            
            CALC( array, carry, shift, "SHIFT" ); 
CALC( array, shift, "SHIFT" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
            
            
            CALC - MIN  | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
            
            Function obtains the minimum values stored in an array. 
 The minimum value in the 'array' is stored in 'val'  
  
            CALC(...''MIN''); - v49.48 
 * The minimum of 2 or 3 numbers can now be calculated 
 * CALC( varD, varX, varY, [varZ,] "MIN" ); // varD = MINIMUM of varX and varY
 (and varZ if present) 
 eg 
 CALC( varD, 10, 20, "MIN" ); // varD = 10 
 CALC( varD, 100, -69, 5, "MIN" ); // varD = -69 | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            
            CALC( val, array, "MIN" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
            
            
        CALC - MAX  | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
            
            Function obtains the maximum values stored in an array. 
The maximum value in the 'array' is stored in 'val'  
             
CALC(...''MAX''); - v49.48 
* The maximum of 2 or 3 numbers can now be calculated 
* CALC( varD, varX, varY, [varZ,] "MAX" ); // varD = MAXIMUM of varX and varY
(and varZ if present) 
eg 
CALC( varD, 100, -69, 5, "MAX" ); // varD = 5 
CALC( varD, 29.345, -200.4, "MAX" ); // varD = 29.345 | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            
            CALC( val, array, "MAX" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
            CALC - BCOPY - Buffer Copy - Copy n bytes | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
            Copy length from start of src or if length negative, from end 
        Copy length from posn of src or if length negative, before posn 
         | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
            CALC(dst,src,len,"BCOPY"); 
     
        CALC(dst,sc,pos,len,"BCOPY");
         | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - BCUT - Buffer Cut - Cut n bytes | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Cut length from start of src or if length negative, from end
        and put in dst. src is modified 
        Cut length from posn of src or if length negative, before posn
        and put in dst. src is modified 
         | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        CALC(dst,src,len,"BCUT");  
        CALC(dst,src,pos,len,"BCUT");  | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC -BBINS - Buffer Insert - Insert bytes at position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Insert insvar at posn of
        src 
         | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        CALC(dst,src,insvar,pos,"BINS");  | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - BREP - Buffer Replace - Replace bytes at position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Replace from pos of src insvar
        content and save in dest | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,insvar,pos,"BREP");  | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC - BFIND - Buffer Find - Locate data from position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Find first location of fvar content from
        pos of src. Returns -1 if not exist | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,fvar,"BFIND");  | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC - BLFIND - Buffer Find Last - Locate last data from position | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Find last location of fvar content from
        pos of src. Returns -1 if not exist    | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,fvar,"BLFIND");  | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC - BLEN - Get Buffer Length - Calculate number of bytes | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Dst is length of src + num
         | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    CALC(dst,src,num,"BLEN");  | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC - BTRIM - Buffer Trim Start and End - Remove bytes
    beginning and end 
         | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Remove bytes in trimvar from front and end of
        src | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,trimvar,"BTRIM");  | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC -  BLTRIM - Buffer Trim Start - Remove bytes from start   | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Remove bytes in trimvar from front of
        src | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,trimvar,"BLTRIM");   | 
   
  
    | 
    
      | 
    
  | 
   
 
   
    | 
    
    
    Command | 
    
    
        CALC -  BRTRIM - Buffer Trim End - Remove bytes from end | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Remove bytes in trimvar from end of
        src | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,trimvar,"BRTRIM");  | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC -  BREM
        - Buffer Remove - Find and remove bytes | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Remove every occurance
  of remvar from src | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
        CALC(dst,src,remvar,"BREM"); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC -    
            
        BCNV - Convert hex data in buffer to number | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Ability to convert hex data in buffer to number. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
            CALC( dstVar, srcTxtVar, "HEX8A", "BCNV" ); // Convert 2 ASCII hex chars  
CALC( dstVar, srcTxtVar, "HEX8D", "BCNV" ); // Convert 1 Binary char 
CALC( dstVar, srcTxtVar, "HEX16A", "BCNV" ); // Convert 4 ASCII hex chars 
CALC( dstVar, srcTxtVar, "HEX16D", "BCNV" ); // Convert 2 Binary chars 
CALC( dstVar, srcTxtVar, "HEX24A", "BCNV" ); // Convert 6 ASCII hex chars 
CALC( dstVar, srcTxtVar, "HEX24D", "BCNV" ); // Convert 3 Binary chars 
CALC( dstVar, srcTxtVar, "HEX32A", "BCNV" ); // Convert 8 ASCII hex chars 
CALC( dstVar, srcTxtVar, "HEX32D", "BCNV" ); // Convert 4 Binary chars 
Example 
     VAR( varSrc, "12AB0123", TXT ); 
     VAR( varU32, 0, U32 ); 
     CALC( varU32, varSrc, "HEX32A", "BCNV" ); 
     LOAD( RS2, varU32 ); \\ Outputs 313196835 
     LOAD( RS2, %h08%varU32 ); \\ Outputs 12ab0123 | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC -    
            
        BREPB - Buffer Replace - Replace all occurrences of one string
    (buffer) with another (buffer) | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
                Function to replace all occurrences of one string (buffer) with another (buffer) 
                CALC( dst, src, search, replace, "BREPB" ); 
                All occurrences of 'search' in 'src' are replaced with 'replace' and the result is stored in 'dst' 
                dst and src can be the same variable. 
               | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
               Examples 
     VAR(s,"Theheshethee",TXT); VAR(d,"",TXT); 
     CALC(d,s,"e","","BREPB"); // d="Thhshth"; s="Theheshethee" 
     CALC(d,s,"e","ABC","BREPB"); // d="ThABChABCshABCthABCABC"; s="Theheshethee" 
     CALC(d,s,"she","ABC","BREPB"); // d="TheheABCthee"; s="Theheshethee" 
     CALC(d,s,"SHE","ABC","BREPB"); // d="Theheshethee"; s="Theheshethee" 
     CALC(s,s,"e","ABC","BREPB"); // d=""; s="ThABChABCshABCthABCABC"
               | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        CALC -    
            
        BCUTB - Buffer Cut - Cut chars from start of string (buffer)
     | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
        Functions to cut chars from start of string (buffer) 
CALC( dst, src, "str", n, "BCUTB" ); // cut up to "str" in src 
CALC( dst, src, "str", "BCUTB" ); // cut up to 1st "str" in src 
If n is positive then cut at nth occurrence from start of src 
If n is negative then cut at nth occurrence from end of src 
dst and src can be the same variable. 
             | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    
            Examples 
     VAR(s,"Theheshethee",TXT); VAR(d,"",TXT); 
     CALC(d,s,"e","BCUTB"); // d="eheshethee"; s="Theheshethee" 
     CALC(d,s,"she","BCUTB"); // d="shethee"; s="Theheshethee" 
     CALC(d,s,\\65,"BCUTB"); // d="eheshethee"; s="Theheshethee" 
     CALC(d,s,"e",2,"BCUTB"); // d="eshethee"; s="Theheshethee" 
     CALC(d,s,"e",20,"BCUTB"); // d=""; s="Theheshethee" 
     CALC(d,s,"p",2,"BCUTB"); // d=""; s="Theheshethee" 
     CALC(d,s,"e",-2,"BCUTB"); // d="Theheshethe"; s="Theheshethee" 
     CALC(d,s,"e",-20,"BCUTB"); // d=""; s="Theheshethee" 
     CALC(d,s,"she",-1,"BCUTB"); // d="Theheshe"; s="Theheshethee" 
     CALC(d,s,"he",-1,"BCUTB"); // d="Theheshethe"; s="Theheshethee" 
     CALC(d,s,"he",-2,"BCUTB"); // d="Theheshe"; s="Theheshethee" 
     CALC(s,s,"e",2,"BCUTB"); // d=""; s="eshethee"
             | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - 
            
        BCUTBI - Buffer Cut - Cut chars from end of string(buffer) | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    
Functions to cut chars from end of string (buffer) 
CALC( dst, src, "str", n, "BCUTBI" ); // cut up to and including "str" in src 
CALC( dst, src, "str", "BCUTBI" ); // cut up to and including 1st "str" in src 
If n is positive then cut at nth occurrence from start of src 
If n is negative then cut at nth occurrence from end of src 
* dst and src can be the same variable.
             | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
* Examples 
     VAR(s,"Theheshethee",TXT); VAR(d,"",TXT); 
     CALC(d,s,"e","BCUTBI"); // d="heshethee"; s="Theheshethee" 
     CALC(d,s,"she","BCUTBI"); // d="thee"; s="Theheshethee" 
     CALC(d,s,\\65,"BCUTBI"); // d="heshethee"; s="Theheshethee" 
     CALC(d,s,"e",2,"BCUTBI"); // d="shethee"; s="Theheshethee" 
     CALC(d,s,"e",20,"BCUTBI"); // d=""; s="Theheshethee" 
     CALC(d,s,"p",2,"BCUTBI"); // d=""; s="Theheshethee" 
     CALC(d,s,"e",-2,"BCUTBI"); // d="Thehesheth"; s="Theheshethee" 
     CALC(d,s,"e",-20,"BCUTBI"); // d=""; s="Theheshethee" 
     CALC(d,s,"she",-1,"BCUTBI"); // d="Thehe"; s="Theheshethee" 
     CALC(d,s,"he",-1,"BCUTBI"); // d="Theheshet"; s="Theheshethee" 
     CALC(d,s,"he",-2,"BCUTBI"); // d="Thehes"; s="Theheshethee" 
     CALC(s,s,"e",2,"BCUTBI"); // d=""; s="shethee"
             | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
        
  CALC - FEXISTS  | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        
  Checks for existence of file in NAND or on SDHC card using CALC(dstVar, src, "FEXISTS");   
        Returns dstVar=0 if file 'src' does not exist, or dstVar=1 if the file 'src' exists | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        
  CALC(dstVar, src, "FEXISTS");  | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
        
  CALC - FREAD  | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
        
  A text file can be read into a text buffer using CALC(dstTxtVar, src, "FREAD"); 
        
  
        
    The buffer must be bigger than the file
        size | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
        
  CALC(dstTxtVar, src, "FREAD"); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
  
        
    CALC -
        DIR - directory listing | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  
        
    Text variable can be populated with filenames in NAND: | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
        
  CALC( dstTxtVar, src, filter, sep, "DIR" ); 
  CALC( dstTxtVar, src, filter, "DIR" ); 
  CALC( dstTxtVar, src, "DIR" ); 
         
        dstTxtVar is a text variable and will contain number of files and subdirectories in list
  followed by specified separator between each filename.
        src is "nand" (in quotes).
        sep is separator character for filenames and subdirectories in string (must be in quotes),
             
            if
  not included then "," assumed 
         
        filter is types of files to list, supported filters: 
            "*/" - list all files and subdirectories 
  "*.*", "*", 
  "*.bmp", "*.jpg", "*.png" (or "img" to get all image files) 
  "*.wav", "*.mp3", "*.wma" (or "snd" to get all sound files) 
  "*.fnt", 
  "*.txt", 
  "*.mnu", 
            
            "*.bin",  
            "*.tft",  
            "*.log",  
            "*.ppf",  
            "*.tri" 
  If not specified then "*" assumed. 
  Multiple filters can be included, separated by commas: "*.bmp,*.jpg,*.fnt" 
   
        Examples: (nand contains 1.bmp, 2.bmp, x.mnu) 
                
  CALC( txtVar, "nand", "*.bmp", ",", "DIR" ); // list all bitmap image files 
                
  > txtVar = "2,1.bmp,2.bmp"; 
                
  CALC( txtVar, "nand", "*.fnt", "DIR" ); // list all font files 
                
  > txtVar = "0"; 
                
  CALC( txtVar, "nand", "*.mnu", "DIR" ); // list all menu files 
                
  > txtVar = "1,x.mnu"; 
                
  CALC( txtVar, "nand", "DIR" ); // list all files 
                
  CALC( txtVar, "nand", "*", "DIR" ); // same 
                
  CALC( txtVar, "nand", "*", ",", "DIR" ); // same 
                
  > txtVar = "3,x.mnu,1.bmp,2.bmp"; | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        
            CALC - FINFO - Get Info | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  
        
    Get info Function -  
Fills dest string with the following : 
filename, title, artist, length, samplerate, bitspersample, numchannels | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
        
    CALC( dest, filename, "FINFO" );  | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
            
            CALC -Checksums - "MCHK", "TCHK" | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Add a checksum and check for a
    checksum error | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
            
            CALC( dst, src, "type", "MCHK" ); // Copy src buf to dst buf, make checksum of
"type" and append to dst buf 
            CALC( res, src, "type", "TCHK" ); // Test checksum of "type" in src buf and
set res to 1 if checksums same, else 0. 
     
where "type" is: 
"SUM8ZA" - Sum all data in src as type U8, checksum is two's complement of the
sum, stored as two ASCII hexadecimal characters  
                                                                           (when sum added to checksum is
zero, res is 1) 
"SUM8ZD" - Sum all data in src as type U8, checksum is two's complement of sum,
stored as single U8  
                                                                          (when sum added to checksum is zero, res is 1) 
"SUM8A" - Sum all data in src as type U8, checksum is sum, stored as two ASCII
hexadecimal characters  
                                                                           (when sum is same as checksum, res is 1) 
"SUM8D" - Sum all data in src as type U8, checksum is sum, stored as single U8
 
                                                                           (when sum is same as checksum, res is 1) 
"XOR8A" - Exclusive-OR (XOR) of all data in src as type U8, checksum is XOR,
stored as two ASCII hexadecimal characters  
                                                                          (when XOR of src with checksum is
zero, res is 1) 
"XOR8D" - Exclusive-OR (XOR) of all data in src as type U8, checksum is XOR,
stored as single U8  
                                                                           (when XOR of src with checksum is zero, res is 1) 
            Example: 
                
LOAD(txData,"1234"); 
                
FUNC(SendData) 
                
{ 
                
CALC(txData,txData,"SUM8ZA","MCHK"); // Add checksum (txData="123436") 
                
LOAD(RS2,txData); // Send data 
                
} 
 
                
FUNC(ReceiveData) 
                
{ 
                
LOAD(rxData,RS2); // Read data 
                
CALC(res,rxData,"SUM8ZA","TCHK"); // Check for checksum error 
                
IF(res=1?ProcessData:DataError); 
                
} | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - CRC16 - 16 support | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  
    * Support for additional CRC-16 algorithms. 
    > Note CALC( dst32, srcBuf, length, "", "CRC16" ); will use the MODBUS ("modbus")
    algorithm 
 
  
    | 
    
    CALC() "type"
     | 
    
    
    Poly-nominal
     | 
    
    
    Initial  Value | 
    
    
    Reflect  
    In
     | 
    
    Reflect
    Out
     | 
    
    XOR Out
    Value
     | 
    
    Names and aliases | 
   
  
    | 
    "arc" | 
    
    0x8005 | 
    
    0x0000 | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "ARC", "CRC-16",
    "CRC-IBM", "CRC-16/ARC", "CRC-16/LHA" | 
   
  
    | 
    "kermit" | 
    
    0x1021 | 
    
    0x0000 | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "KERMIT"
    "CRC-16/CCITT",
    "CRC-16/CCITT-TRUE", "CRC-CCITT" | 
   
  
    | 
    "modbus" | 
    
    0x8005 | 
    
    0xFFFF, | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "MODBUS" | 
   
  
    | 
    "x-25" | 
    
    0x1021 | 
    
    0xFFFF | 
    
    Yes | 
    
    Yes | 
    
    0xFFFF | 
    
    "X-25",
    "CRC-16/IBM-SDLC",
    "CRC-16/ISO-HDLC", "CRC-B" | 
   
  
    | 
    "xmodem" | 
    
    0x1021 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "XMODEM", "ZMODEM", "CRC-16/ACORN" | 
   
  
    | 
    "ccitt-f" | 
    
    0x1021 | 
    
    0xFFFF | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/CCITT-FALSE" | 
   
  
    | 
    "usb" | 
    
    0x8005 | 
    
    0xFFFF | 
    
    Yes | 
    
    Yes | 
    
    0xFFFF, | 
    
    "CRC-16/USB" | 
   
  
    | 
    "spi" | 
    
    0x1021 | 
    
    0x1D0F | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/SPI-FUJITSU", "CRC-16/AUG-CCITT" | 
   
  
    | 
    "buypass" | 
    
    0x8005 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/BUYPASS", "CRC-16/VERIFONE" | 
   
  
    | 
    "dds-110" | 
    
    0x8005 | 
    
    0x800D | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/DDS-110" | 
   
  
    | 
    "dect-r" | 
    
    0x0589 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0001 | 
    
    "CRC-16/DECT-R" | 
   
  
    | 
    "dect-x" | 
    
    0x0589 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/DECT-X" | 
   
  
    | 
    "dnp" | 
    
    0x3D65 | 
    
    0x0000 | 
    
    Yes | 
    
    Yes | 
    
    0xFFFF | 
    
    "CRC-16/DNP" | 
   
  
    | 
    "en13757" | 
    
    0x3D65 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0xFFFF | 
    
    
    "CRC-16/EN-13757" | 
   
  
    | 
    "genibus" | 
    
    0x1021 | 
    
    0xFFFF | 
    
    No | 
    
    No | 
    
    0xFFFF | 
    
    "CRC-16/GENIBUS", "CRC-16/EPC",
    "CRC-16/I-CODE", "CRC-16/DARC" | 
   
  
    | 
    "maxim" | 
    
    0x8005 | 
    
    0x0000 | 
    
    Yes | 
    
    Yes | 
    
    0xFFFF | 
    
    "CRC-16/MAXIM" | 
   
  
    | 
    "mcrf4xx" | 
    
    0x1021 | 
    
    0xFFFF | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "CRC-16/MCRF4XX" | 
   
  
    | 
    "riello", | 
    
    0x1021 | 
    
    0xB2AA | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "CRC-16/RIELLO" | 
   
  
    | 
    "t10-dif", | 
    
    0x8BB7 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/T10-DIF" | 
   
  
    | 
    "teledsk" | 
    
    0xA097 | 
    
    0x0000 | 
    
    No | 
    
    No | 
    
    0x0000 | 
    
    "CRC-16/TELEDISK" | 
   
  
    | 
    "tms371x" | 
    
    0x1021 | 
    
    0x89EC | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    
    "CRC-16/TMS37157" | 
   
  
    | 
    "a" | 
    
    0x1021 | 
    
    0xC6C6 | 
    
    Yes | 
    
    Yes | 
    
    0x0000 | 
    
    "CRC-A" | 
   
 
    * Results have been confirmed using the "123456789" test with the values at
    http://regregex.bbcmicro.net/crc-catalogue.htm  
     | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
    CALC( dst16, srcBuf, length, "type", "CRC16" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    
    CALC - CRC32 -32 support | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  
 
    * Support for CRC-32 algorithms 
    > Note CALC( dst32, srcBuf, length, "", "CRC32" ); will use the CRC-32 ("adcpp")
    algorithm 
  
    
    
    CALC()  
    "type"
     | 
    
    
    Poly-nominal
     | 
    
    
    Initial  Value | 
    
    
    Reflect  
    In
     | 
    
    Reflect
    Out
     | 
    
    XOR Out
    Value
     | 
    
    Names and aliases | 
   
  
    | 
    "adcpp" | 
    
    0x04C11DB7 | 
    
    0xFFFFFFFF | 
    
    Yes | 
    
    Yes | 
    
    0xFFFFFFFF | 
    
    "CRC-32",
    "CRC-32/ADCCP",
    "PKZIP" | 
   
  
    | 
    "bzip2" | 
    
    0x04C11DB7 | 
    
    0xFFFFFFFF | 
    
    No | 
    
    No | 
    
    0xFFFFFFFF | 
    
    "CRC-32/BZIP2",
    "CRC-32/AAL5", "CRC-32/DECT-B", "B-CRC-32" | 
   
  
    | 
    "c" | 
    
    0x1EDC6F41 | 
    
    0xFFFFFFFF | 
    
    Yes | 
    
    Yes | 
    
    0xFFFFFFFF | 
    
    "CRC-32C",
    "CRC-32/ISCSI",
    "CRC-32/CASTAGNOLI" | 
   
  
    | 
    "d" | 
    
    0xA833982B | 
    
    0xFFFFFFFF | 
    
    Yes | 
    
    Yes | 
    
    0xFFFFFFFF | 
    
    "CRC-32D" | 
   
  
    | 
    "mpeg-2" | 
    
    0x04C11DB7 | 
    
    0xFFFFFFFF | 
    
    No | 
    
    No | 
    
    0x00000000 | 
    
    "CRC-32/MPEG-2" | 
   
  
    | 
    "posix" | 
    
    0x04C11DB7 | 
    
    0x00000000 | 
    
    No | 
    
    No | 
    
    0xFFFFFFFF | 
    
    "CRC-32/POSIX",
    "CKSUM" | 
   
  
    | 
    "q" | 
    
    0x814141AB | 
    
    0x00000000 | 
    
    No | 
    
    No | 
    
    0x00000000 | 
    
    "CRC-32Q" | 
   
  
    | 
    "jamcrc" | 
    
    0x04C11DB7 | 
    
    0xFFFFFFFF | 
    
    Yes | 
    
    Yes | 
    
    0x00000000 | 
    
    "JAMCRC" | 
   
  
    | 
    "xfer" | 
    
    0x000000AF | 
    
    0x00000000 | 
    
    No | 
    
    No | 
    
    0x00000000 | 
    
    "XFER" | 
   
 
    * Results have been confirmed using the "123456789" test with the values at
    
    
    http://regregex.bbcmicro.net/crc-catalogue.htm 
     | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
    CALC( dst32, srcBuf, length, "type", "CRC32" ); | 
   
  
    | 
    
      | 
    
  | 
   
 
  
 
    | 
    
    
    Command | 
    
    
    
    
    CALC - MSPLIT -User Protocol Split
 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  
 
    Perform a multiple split of a buffer to a series of
variables. 
  >>> CALC( dstPtr, srcBuf, char, "MSPLIT" ); 
 
- The buffer 'srcBuf' is split at each 'char' and each result is stored in an
incrementing series of variables prefixed with the name in 'dstPtr'. 
- If 'dstPtr' contains "svar", the first variable will be 'svar0', then 'svar1',
'svar2', ..., 'svar9', 'svar10' etc. 
- If a particular svarN is not defined then the result is not stored for that
split. 
- The data is stored in the format specified in each 'svarN' allowing the buffer
to be split into text, unsigned/signed integers and floats. 
Example 
     VAR( dst > "svar", PTR ); 
     VAR( svar0, 0, U8 ); 
     VAR( svar1, 0, S32 ); 
     VAR( svar2, 0.0, FLT4 ); 
     VAR( svar3, "", TXT ); 
     VAR( buf, "123,-67,3.14,Hi", TXT ); 
     CALC( dst, buf, ",", "MSPLIT" );   // Gives: svar0 = 123, svar1 = -67,
svar2 = 3.14, svar3 = "Hi" 
       >>> CALC( dstPtrArray, srcBuf, char, "MSPLIT"
); 
- The buffer 'srcBuf' is split at each 'char' and
each result is stored in the variables pointed to by  successive subscripts of the Pointer Array 'dstPtrArray'. 
    - The first variable will be the variable name
stored in 'dstPtrArray.0', then 'dstPtrArray.1', 'dstPtrArray.2',  
- If a particular 'dstPtrArray.N' is not a variable or not defined then the
result is not stored for that split. 
- The data is stored in the format specified in each 'dstPtrArray.N' variable
allowing the buffer to be split into text, unsigned/signed integers and floats. 
    Example 
     VAR( arr > "", PTR, 4 ); 
     VAR( alpha, 0, U8 );        LOAD( arr.0 > "alpha" ); 
     VAR( bravo, 0, S32 );       LOAD( arr.1 > "bravo" ); 
     VAR( charlie, 0.0, FLT4 );  LOAD( arr.2 > "charlie" ); 
     VAR( delta, "", TXT );      LOAD( arr.3 > "delta" ); 
     VAR( buf, "123,-67,3.14,Hi", TXT ); 
     CALC( arr, buf, ",", "MSPLIT" ); 
     // Gives: alpha = 123, bravo = -67, charlie = 3.14, delta = "Hi" 
     
    - Using this method with arrays of pointers,
testing found the time to split 64 parameters using "MSPLIT"  
  was 8ms compared to 64 individual "SPLIT"s which took 30ms. 
         | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  
    CALC( ... "MSPLIT" )
     | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
        
    CALC 
        - CFLT
        
    - Calc float to/from U32 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Added function to convert a U32 containing a IEEE 754 binary 32
        formatted float into a float and vice versa. 
        Action depends on source and destination types. 
          > CALC( flt, u32, "CFLT" );  // Converts a float to IEEE 754 binary 32
        formatted float 
          > CALC( u32, flt, "CFLT" );  // Converts an IEEE 754 binary 32
        formatted float to a float | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    VALC( flt, u32, "CFLT" ); 
    CALC( u32, flt, "CFLT" ); 
     
        Example 1: 
     var(f,0,FLT4); 
     var(u,0,U32); 
     load(f,68.123); 
     calc(u,f,"cflt"); 
     load(rs2,"f=",f,"; u=",%H08%u,"\\0d\\0a"); 
     > f=68.1230; u=42883EFA 
         
        Example 2 
     load(u,\\41460000); 
     calc(f,u,"cflt"); 
     load(rs2,"f=",f,"; u=",%H08%u,"\\0d\\0a"); 
     > f=12.3750; u=41460000 | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
    
    CALC - Entity Information | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  * More Calc commands added to obtain entity information 
> CALC(var,ename,"ESIZE"); -> returns allocated display size in bytes 
> CALC(var,ename,"EDEL"); -> returns 1 if entity has been deleted, else 0 
> CALC(var,ename,"EVIS"); -> returns 1 if entity is visible, else 0 
> CALC(var,ename,"EALIGN"); -> returns value representing alignment: 
0 = Top Left, 1 = Top Centre, 2 = Top Right, 
3 = Centre Left, 4 = Centre Centre, 5 = Centre Right, 
6 = Bottom Left, 7 = Bottom Centre, 8 = Bottom Right | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  > CALC(var,ename,"ESIZE");
     
> CALC(var,ename,"EDEL");  
> CALC(var,ename,"EVIS"); - 
> CALC(var,ename,"EALIGN");   | 
   
  
    | 
    
      | 
    
  | 
   
 
  
    | 
    
    
    Command | 
    
  CALC(result,name,''EXISTS''); - v49.46 | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
  Entity Exists Test 
  * Added CALC(dst,name,"EXISTS"); to test whether entity "name" exists. | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
  VAR(varRes,0,U8); 
  VAR(varAlpha,0,U8); 
  CALC(varRes,varAlpha,"EXISTS"); // varRes = 1 
  CALC(varRes,varBeta,"EXISTS"); // varRes = 0 | 
   
  
    | 
    
      | 
    
  | 
   
 
 
    | 
    
    
    Command | 
    
    
    Array Sort - CALC(..."ASORT"); and CALC(..."ASORTR"); | 
   
  
    | 
    
      | 
    
  | 
   
  
    | 
    Description | 
    
    Added functions to sort arrays 
    CALC(arrname, "ASORT|ASORTR"); 
    CALC(arrname.index, "ASORT|ASORTR"); 
    Examples :- 
    VAR(arrname, 0, U8, 10); 
    LOAD(arrname, 9, 34, 2, 42, 102, 33, 52, 1, 67, 19); 
    CALC(arrname, "ASORT"); 
    Results :- 
    arrname.0 = 1 
    arrname.1 = 2 
    arrname.2 = 9 
    arrname.3 = 19 
    arrname.4 = 33 
    arrname.5 = 34 
    arrname.6 = 42 
    arrname.7 = 52 
    arrname.8 = 67 
    arrname.9 = 102 
     
    VAR(arrname, 0, U8, 3, 4); 
    LOAD(arrname.0, 34, 2, 67, 4); 
    LOAD(arrname.1, 123, 45, 6, 127); 
    LOAD(arrname.2, 3, 109, 16, 5); 
    CALC(arrname, "ASORT"); 
    Results :- 
    arrname.0 = 3, 109, 16, 5 
    arrname.1 = 34, 2, 67, 4 
    arrname.2 = 123, 45, 6, 127 
     
    VAR(arrname, 0, U8, 3, 4); 
    LOAD(arrname.0, 34, 2, 67, 4); 
    LOAD(arrname.1, 123, 45, 6, 127); 
    LOAD(arrname.2, 3, 109, 16, 5); 
    CALC(arrname.1, "ASORT"); 
    Results :- 
    arrname.0 = 34, 2, 67, 4 
    arrname.1 = 6, 45, 123, 127 
    arrname.2 = 3, 109, 16, 5 
     
    Additional Len parameter added to sort only a specified number of elements 
     
Array Sort - CALC(...''ASORT''); and CALC(...''ASORTR''); - Improvements -
v49.39 
* Added optional length parameter to sort only a specified number of elements :- 
CALC(Arr [, len], "ASORT|ASORTR");  
Renamed "RASORT" to "ASORTR". | 
   
    
    | 
    
      | 
    
  | 
   
  
    | 
    
    Syntax/Parameters | 
    
    CALC(arrname, "ASORT"); 
    CALC(arrname.index, "ASORT"); 
    CALC(arrname, "ASORTR"); 
    CALC(arrname.index, "ASORTR"); 
     
    CALC(arrname,len, "ASORT"); 
    CALC(arrname.index,len, "ASORT"); 
    CALC(arrname,len, "ASORTR"); 
    CALC(arrname.index,len, "ASORTR"); | 
   
  
    | 
    
      | 
    
  | 
   
 
 |