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
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
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.
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;
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;
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)); }