1.2.1 Data Types and Variables
Contents
ANSI C Data Types
Origin C supports all the ANSI C : char , short , int , float , double , and void . In addition, you can declare arrays of, and pointers to, each of these types.
char name[50]; // Declare an array of characters unsigned char age; // Declare an unsigned 8-bit integer unsigned short year; // Declare an unsigned 16-bit integer
Origin C Composite Data Types
Although C-style array syntax is supported, Origin C provides the string , vector , and matrix classes to simplify working with one- and two-dimensional data. Supported element types include char, byte, short, word, int, uint, and complex. A vector can be of type string (string array ), but a matrix cannot; matrix is numeric only.
string str = "hello, world\n"; // Declare and initialize a string vector<double> vA1 = {1.5, 1.8, 1.1}; // Declare and initialize doubles vector vA2 = {2.5, 2.8, 2.1, 2.4}; // 'double' implied vector<string> vs(3); // Declare a string array vs[0] = "This "; vs[1] = "is "; vs[2] = "test"; matrix<int> mA1; // Matrix of integers matrix mA2; // Matrix of doubles (implied) // NOTE: If no element type is specified, vector/matrix default to double.
Another useful class is complex. It stores a real and an imaginary component.
complex cc(4.5, 7.8); // real = 4.5, imaginary = 7.8 out_complex("value = ", cc); // Output the complex value
Color
Colors in Origin C are represented by a DWORD value. This can be either an index into Origin’s internal color palette or an RGB color composed of red, green, and blue components.
Palette Index
Origin’s internal contains 24 colors. A palette index is zero-based (0–23). Origin C provides named constants, each beginning with SYSCOLOR_.
| Index | Name | Index | Name |
|---|---|---|---|
| 0 | SYSCOLOR_BLACK | 12 | SYSCOLOR_DKCYAN |
| 1 | SYSCOLOR_RED | 13 | SYSCOLOR_ROYAL |
| 2 | SYSCOLOR_GREEN | 14 | SYSCOLOR_ORANGE |
| 3 | SYSCOLOR_BLUE | 15 | SYSCOLOR_VIOLET |
| 4 | SYSCOLOR_CYAN | 16 | SYSCOLOR_PINK |
| 5 | SYSCOLOR_MAGENTA | 17 | SYSCOLOR_WHITE |
| 6 | SYSCOLOR_YELLOW | 18 | SYSCOLOR_LTGRAY |
| 7 | SYSCOLOR_DKYELLOW | 19 | SYSCOLOR_GRAY |
| 8 | SYSCOLOR_NAVY | 20 | SYSCOLOR_LTYELLOW |
| 9 | SYSCOLOR_PURPLE | 21 | SYSCOLOR_LTCYAN |
| 10 | SYSCOLOR_WINE | 22 | SYSCOLOR_LTMAGENTA |
| 11 | SYSCOLOR_OLIVE | 23 | SYSCOLOR_DKGRAY |
DWORD dwColor = SYSCOLOR_ORANGE;
Auto Color
A special palette index, Auto, colors an element using the same color as its parent (when supported by that element’s UI).
Use the INDEX_COLOR_AUTOMATIC macro to specify Auto:
DWORD dwColor = INDEX_COLOR_AUTOMATIC;
RGB
An Origin color can also represent an RGB value (8-bit red, green, and blue components). Use the RGB macro to create an RGB value, then convert it to an Origin color with RGB2OCOLOR.
DWORD brown = RGB2OCOLOR(RGB(139,69,19)); // saddle brown
To test whether a color is RGB vs. palette index, use OCOLOR_IS_RGB:
if ( OCOLOR_IS_RGB(ocolor) ) out_str("color value represents an RGB color"); else out_str("color value represents a color index");
To extract component values from an RGB-based Origin color, first get the RGB with GET_CRF_FROM_RGBOCOLOR, then query components:
if ( OCOLOR_IS_RGB(ocolor) ) { DWORD rgb = GET_CRF_FROM_RGBOCOLOR(ocolor); printf("red = %d, green = %d, blue = %d\n", GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); }