123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* fields.c -- define and use fields */
- #include <stdio.h>
- #include <stdbool.h> //C99, defines bool, true, false
- /* line styles */
- #define SOLID 0
- #define DOTTED 1
- #define DASHED 2
- /* primary colors */
- #define BLUE 4
- #define GREEN 2
- #define RED 1
- /* mixed colors */
- #define BLACK 0
- #define YELLOW (RED | GREEN)
- #define MAGENTA (RED | BLUE)
- #define CYAN (GREEN | BLUE)
- #define WHITE (RED | GREEN | BLUE)
- const char * colors[8] = {"black", "red", "green", "yellow",
- "blue", "magenta", "cyan", "white"};
- struct box_props {
- bool opaque : 1; // or unsigned int (pre C99)
- unsigned int fill_color : 3;
- unsigned int : 4;
- bool show_border : 1; // or unsigned int (pre C99)
- unsigned int border_color : 3;
- unsigned int border_style : 2;
- unsigned int : 2;
- };
- void show_settings(const struct box_props * pb);
- int main(void)
- {
- /* create and initialize box_props structure */
- struct box_props box = {true, YELLOW , true, GREEN, DASHED};
-
- printf("Original box settings:\n");
- show_settings(&box);
-
- box.opaque = false;
- box.fill_color = WHITE;
- box.border_color = MAGENTA;
- box.border_style = SOLID;
- printf("\nModified box settings:\n");
- show_settings(&box);
-
- return 0;
- }
- void show_settings(const struct box_props * pb)
- {
- printf("Box is %s.\n",
- pb->opaque == true ? "opaque": "transparent");
- printf("The fill color is %s.\n", colors[pb->fill_color]);
- printf("Border %s.\n",
- pb->show_border == true ? "shown" : "not shown");
- printf("The border color is %s.\n", colors[pb->border_color]);
- printf ("The border style is ");
- switch(pb->border_style)
- {
- case SOLID : printf("solid.\n"); break;
- case DOTTED : printf("dotted.\n"); break;
- case DASHED : printf("dashed.\n"); break;
- default : printf("unknown type.\n");
- }
- }
|