316 lines
12 KiB
Plaintext
316 lines
12 KiB
Plaintext
//###########################################################################
|
|
//
|
|
// FILE: IQmath.gel
|
|
//
|
|
// TITLE: IQ Math C and C++ Gel Support Functions
|
|
//
|
|
//###########################################################################
|
|
//
|
|
// Ver | dd-mmm-yyyy | Who | Description of changes
|
|
// =====|=============|=======|==============================================
|
|
// 1.4 | 17 May 2002 | A. T. | Original release (borrowed from jes 11/29/01)
|
|
// -----|-------------|-------|----------------------------------------------
|
|
// 1.5 | 30 Jan 2008 | LH | Fixed 2 instances of variableName2 that should
|
|
// | | | have been variableName1.
|
|
//
|
|
//###########################################################################
|
|
//
|
|
// This file contains GEL functions which enable the viewing of IQ variables
|
|
// in watch windows and allows the setting of IQ variable values via
|
|
// dialogue boxes.
|
|
//
|
|
// The procedure to enable this is as follows:
|
|
//
|
|
// 1. In one of the user source files, the following global variable must
|
|
// be included:
|
|
//
|
|
// long GlobalQ = GLOBAL_Q
|
|
//
|
|
// This variable is used by the GEL functions to determine the current
|
|
// GLOBAL_Q setting.
|
|
//
|
|
// 2. Load the "IQmath.gel" file into the user project.
|
|
//
|
|
// This will automatically load a set of GEL functions for displaying
|
|
// IQ variables in the watch window and create the following menus
|
|
// under the GEL toolbar:
|
|
//
|
|
// IQ C Support
|
|
// IQ C++ Support
|
|
//
|
|
// 3. To view a variable in the watch window, simply type the following
|
|
// commands in the watch window. They will convert the specified
|
|
// "VarName" in IQ format to the equivalent floating-point value:
|
|
//
|
|
// For C variables: _IQ(VarName) ; GLOBAL_Q value
|
|
// _IQN(VarName) ; N = 1 to 30
|
|
// For C++ variables: IQ(VarName) ; GLOBAL_Q value
|
|
// IQN(VarName) ; N = 1 to 30
|
|
//
|
|
// 4. The watch window does not allow the modification of variables
|
|
// that are not of native type. To facilitate this, the following
|
|
// GEL operations can be found under the GEL toolbar:
|
|
//
|
|
// IQ C Support ----> SetIQvalue ; uses GLOBAL_Q
|
|
// Set2IQvalues
|
|
// Set3IQvalues
|
|
// SetIQNvalue ; user specifies N
|
|
// Set2IQNvalues
|
|
// Set3IQNvalues
|
|
// IQ C++ Support ----> SetIQvalue ; uses GLOBAL_Q
|
|
// Set2IQvalues
|
|
// Set3IQvalues
|
|
// SetIQNvalue ; user specifies N
|
|
// Set2IQNvalues
|
|
// Set3IQNvalues
|
|
//
|
|
// Invoking one of the above GEL operations will bring up a dialogue
|
|
// box window which the user can enter the variable name and the
|
|
// floating point value to set. The function will convert the float
|
|
// value to the appropriate IQ value.
|
|
//
|
|
//===========================================================================
|
|
// Function: _IQ(), _IQN()
|
|
//===========================================================================
|
|
// These functions convert a floating point value to the equivalent
|
|
// IQ value for C variables:
|
|
//
|
|
_IQ(float f)
|
|
{ return (float)(f/(pow(2,GlobalQ))); }
|
|
_IQ1(float f)
|
|
{ return (float)(f/(pow(2,1))); }
|
|
_IQ2(float f)
|
|
{ return (float)(f/(pow(2,2))); }
|
|
_IQ3(float f)
|
|
{ return (float)(f/(pow(2,3))); }
|
|
_IQ4(float f)
|
|
{ return (float)(f/(pow(2,4))); }
|
|
_IQ5(float f)
|
|
{ return (float)(f/(pow(2,5))); }
|
|
_IQ6(float f)
|
|
{ return (float)(f/(pow(2,6))); }
|
|
_IQ7(float f)
|
|
{ return (float)(f/(pow(2,7))); }
|
|
_IQ8(float f)
|
|
{ return (float)(f/(pow(2,8))); }
|
|
_IQ9(float f)
|
|
{ return (float)(f/(pow(2,9))); }
|
|
_IQ10(float f)
|
|
{ return (float)(f/(pow(2,10))); }
|
|
_IQ11(float f)
|
|
{ return (float)(f/(pow(2,11))); }
|
|
_IQ12(float f)
|
|
{ return (float)(f/(pow(2,12))); }
|
|
_IQ13(float f)
|
|
{ return (float)(f/(pow(2,13))); }
|
|
_IQ14(float f)
|
|
{ return (float)(f/(pow(2,14))); }
|
|
_IQ15(float f)
|
|
{ return (float)(f/(pow(2,15))); }
|
|
_IQ16(float f)
|
|
{ return (float)(f/(pow(2,16))); }
|
|
_IQ17(float f)
|
|
{ return (float)(f/(pow(2,17))); }
|
|
_IQ18(float f)
|
|
{ return (float)(f/(pow(2,18))); }
|
|
_IQ19(float f)
|
|
{ return (float)(f/(pow(2,19))); }
|
|
_IQ20(float f)
|
|
{ return (float)(f/(pow(2,20))); }
|
|
_IQ21(float f)
|
|
{ return (float)(f/(pow(2,21))); }
|
|
_IQ22(float f)
|
|
{ return (float)(f/(pow(2,22))); }
|
|
_IQ23(float f)
|
|
{ return (float)(f/(pow(2,23))); }
|
|
_IQ24(float f)
|
|
{ return (float)(f/(pow(2,24))); }
|
|
_IQ25(float f)
|
|
{ return (float)(f/(pow(2,25))); }
|
|
_IQ26(float f)
|
|
{ return (float)(f/(pow(2,26))); }
|
|
_IQ27(float f)
|
|
{ return (float)(f/(pow(2,27))); }
|
|
_IQ28(float f)
|
|
{ return (float)(f/(pow(2,28))); }
|
|
_IQ29(float f)
|
|
{ return (float)(f/(pow(2,29))); }
|
|
_IQ30(float f)
|
|
{ return (float)(f/(pow(2,30))); }
|
|
|
|
//===========================================================================
|
|
// Function: IQ(), IQN()
|
|
//===========================================================================
|
|
// These functions convert a floating point value to the equivalent
|
|
// IQ value for C++ variables:
|
|
//
|
|
IQ(float f)
|
|
{ return (float)(f.val/(pow(2,GlobalQ))); }
|
|
IQ1(float f)
|
|
{ return (float)(f.val/(pow(2,1))); }
|
|
IQ2(float f)
|
|
{ return (float)(f.val/(pow(2,2))); }
|
|
IQ3(float f)
|
|
{ return (float)(f.val/(pow(2,3))); }
|
|
IQ4(float f)
|
|
{ return (float)(f.val/(pow(2,4))); }
|
|
IQ5(float f)
|
|
{ return (float)(f.val/(pow(2,5))); }
|
|
IQ6(float f)
|
|
{ return (float)(f.val/(pow(2,6))); }
|
|
IQ7(float f)
|
|
{ return (float)(f.val/(pow(2,7))); }
|
|
IQ8(float f)
|
|
{ return (float)(f.val/(pow(2,8))); }
|
|
IQ9(float f)
|
|
{ return (float)(f.val/(pow(2,9))); }
|
|
IQ10(float f)
|
|
{ return (float)(f.val/(pow(2,10))); }
|
|
IQ11(float f)
|
|
{ return (float)(f.val/(pow(2,11))); }
|
|
IQ12(float f)
|
|
{ return (float)(f.val/(pow(2,12))); }
|
|
IQ13(float f)
|
|
{ return (float)(f.val/(pow(2,13))); }
|
|
IQ14(float f)
|
|
{ return (float)(f.val/(pow(2,14))); }
|
|
IQ15(float f)
|
|
{ return (float)(f.val/(pow(2,15))); }
|
|
IQ16(float f)
|
|
{ return (float)(f.val/(pow(2,16))); }
|
|
IQ17(float f)
|
|
{ return (float)(f.val/(pow(2,17))); }
|
|
IQ18(float f)
|
|
{ return (float)(f.val/(pow(2,18))); }
|
|
IQ19(float f)
|
|
{ return (float)(f.val/(pow(2,19))); }
|
|
IQ20(float f)
|
|
{ return (float)(f.val/(pow(2,20))); }
|
|
IQ21(float f)
|
|
{ return (float)(f.val/(pow(2,21))); }
|
|
IQ22(float f)
|
|
{ return (float)(f.val/(pow(2,22))); }
|
|
IQ23(float f)
|
|
{ return (float)(f.val/(pow(2,23))); }
|
|
IQ24(float f)
|
|
{ return (float)(f.val/(pow(2,24))); }
|
|
IQ25(float f)
|
|
{ return (float)(f.val/(pow(2,25))); }
|
|
IQ26(float f)
|
|
{ return (float)(f.val/(pow(2,26))); }
|
|
IQ27(float f)
|
|
{ return (float)(f.val/(pow(2,27))); }
|
|
IQ28(float f)
|
|
{ return (float)(f.val/(pow(2,28))); }
|
|
IQ29(float f)
|
|
{ return (float)(f.val/(pow(2,29))); }
|
|
IQ30(float f)
|
|
{ return (float)(f.val/(pow(2,30))); }
|
|
|
|
//===========================================================================
|
|
// Function: pow()
|
|
//===========================================================================
|
|
// This function is used to calculate exponents. It takes 2 parameters
|
|
// base and exp, and returns base to the power of exp:
|
|
//
|
|
pow(double base, double exp) {
|
|
double answer = 1; // initialize
|
|
int i; // counter for loop
|
|
for (i = 1; i<=exp; i++) // multiple answer by base exp times
|
|
answer = answer * base;
|
|
return answer; // return value stored in answer
|
|
}
|
|
|
|
//===========================================================================
|
|
// Define Menus:
|
|
//===========================================================================
|
|
menuitem "IQ C Support"
|
|
dialog Set_IQvalue(variableName "_iq C Variable Name", floatValue "Float Value")
|
|
{
|
|
variableName = (long) ( ((double) floatValue) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog Set2_IQvalues(variableName1 "1. _iq C Variable Name", floatValue1 "1. Float Value",
|
|
variableName2 "2. _iq C Variable Name", floatValue2 "2. Float Value")
|
|
{
|
|
variableName1 = (long) ( ((double) floatValue1) * (pow(2, GlobalQ)) );
|
|
variableName2 = (long) ( ((double) floatValue2) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog Set3_IQvalues(variableName1 "1. _iq C Variable Name", floatValue1 "1. Float Value",
|
|
variableName2 "2. _iq C Variable Name", floatValue2 "2. Float Value",
|
|
variableName3 "3. _iq C Variable Name", floatValue3 "3. Float Value")
|
|
{
|
|
variableName1 = (long) ( ((double) floatValue1) * (pow(2, GlobalQ)) );
|
|
variableName2 = (long) ( ((double) floatValue2) * (pow(2, GlobalQ)) );
|
|
variableName3 = (long) ( ((double) floatValue3) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog Set_IQNvalue(variableName "_iqN C Variable Name", Qvalue "N Value", floatValue "Float Value")
|
|
{
|
|
variableName = (long) ( ((double) floatValue) * (pow(2, Qvalue)) );
|
|
}
|
|
|
|
dialog Set_2IQNvalues(variableName1 "1. _iqN C Variable Name", Qvalue1 "1. N Value", floatValue1 "1. Float Value",
|
|
variableName2 "2. _iqN C Variable Name", Qvalue2 "2. N Value", floatValue2 "2. Float Value")
|
|
{
|
|
variableName1 = (long) ( ((double) floatValue1) * (pow(2, Qvalue1)) );
|
|
variableName2 = (long) ( ((double) floatValue2) * (pow(2, Qvalue2)) );
|
|
}
|
|
|
|
dialog Set_3IQNvalues(variableName1 "1. _iqN C Variable Name", Qvalue1 "1. N Value", floatValue1 "1. Float Value",
|
|
variableName2 "2. _iqN C Variable Name", Qvalue2 "2. N Value", floatValue2 "2. Float Value",
|
|
variableName3 "3. _iqN C Variable Name", Qvalue3 "3. N Value", floatValue3 "3. Float Value")
|
|
{
|
|
variableName1 = (long) ( ((double) floatValue1) * (pow(2, Qvalue1)) );
|
|
variableName2 = (long) ( ((double) floatValue2) * (pow(2, Qvalue2)) );
|
|
variableName3 = (long) ( ((double) floatValue3) * (pow(2, Qvalue3)) );
|
|
}
|
|
|
|
menuitem "IQ C++ Support"
|
|
dialog SetIQvalue(variableName "iq C++ Variable Name", floatValue "Float Value")
|
|
{
|
|
variableName.val = (long) ( ((double) floatValue) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog Set2IQvalues(variableName1 "1. iq C++ Variable Name", floatValue1 "1. Float Value",
|
|
variableName2 "2. iq C++ Variable Name", floatValue2 "2. Float Value")
|
|
{
|
|
variableName1.val = (long) ( ((double) floatValue1) * (pow(2, GlobalQ)) );
|
|
variableName2.val = (long) ( ((double) floatValue2) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog Set3IQvalues(variableName1 "1. iq C++ Variable Name", floatValue1 "1. Float Value",
|
|
variableName2 "2. iq C++ Variable Name", floatValue2 "2. Float Value",
|
|
variableName3 "3. iq C++ Variable Name", floatValue3 "3. Float Value")
|
|
{
|
|
variableName1.val = (long) ( ((double) floatValue1) * (pow(2, GlobalQ)) );
|
|
variableName2.val = (long) ( ((double) floatValue2) * (pow(2, GlobalQ)) );
|
|
variableName3.val = (long) ( ((double) floatValue3) * (pow(2, GlobalQ)) );
|
|
}
|
|
|
|
dialog SetIQNvalue(variableName "iqN C++ Variable Name", Qvalue "N Value", floatValue "Float Value")
|
|
{
|
|
variableName.val = (long) ( ((double) floatValue) * (pow(2, Qvalue)) );
|
|
}
|
|
|
|
dialog Set2IQNvalues(variableName1 "1. iqN C++ Variable Name", Qvalue1 "1. N Value", floatValue1 "1. Float Value",
|
|
variableName2 "2. iqN C++ Variable Name", Qvalue2 "2. N Value", floatValue2 "2. Float Value")
|
|
{
|
|
variableName1.val = (long) ( ((double) floatValue1) * (pow(2, Qvalue1)) );
|
|
variableName2.val = (long) ( ((double) floatValue2) * (pow(2, Qvalue2)) );
|
|
}
|
|
|
|
dialog Set3IQNvalues(variableName1 "1. iqN C++ Variable Name", Qvalue1 "1. Q Value", floatValue1 "1. Float Value",
|
|
variableName2 "2. iqN C++ Variable Name", Qvalue2 "2. Q Value", floatValue2 "2. Float Value",
|
|
variableName3 "3. iqN C++ Variable Name", Qvalue3 "3. Q Value", floatValue3 "3. Float Value")
|
|
{
|
|
variableName1.val = (long) ( ((double) floatValue1) * (pow(2, Qvalue1)) );
|
|
variableName2.val = (long) ( ((double) floatValue2) * (pow(2, Qvalue2)) );
|
|
variableName3.val = (long) ( ((double) floatValue3) * (pow(2, Qvalue3)) );
|
|
}
|
|
|
|
//===========================================================================
|
|
// No more.
|
|
//===========================================================================
|