#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 0b100
#define GREEN 0b010
#define RED 0b001
/* 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");
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: