|
@ -0,0 +1,69 @@ |
|
|
|
|
|
#include <string.h> |
|
|
|
|
|
#include <stdio.h> |
|
|
|
|
|
#include <stdlib.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
|
char *name; |
|
|
|
|
|
int left, right, up, down; |
|
|
|
|
|
} direction_s; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void this_row(direction_s d); |
|
|
|
|
|
void draw_box(direction_s d); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
|
|
|
|
|
|
direction_s D = {.name = "left", .left = 1}; |
|
|
|
|
|
draw_box(D); |
|
|
|
|
|
|
|
|
|
|
|
// name is first, so we can omit label |
|
|
|
|
|
D = (direction_s) {"upper right", .up = 1, .right = 1}; |
|
|
|
|
|
draw_box(D); |
|
|
|
|
|
|
|
|
|
|
|
// all struct elements set to zero |
|
|
|
|
|
draw_box((direction_s){}); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void this_row(direction_s d) { |
|
|
|
|
|
|
|
|
|
|
|
char s[] = ".*.\n"; |
|
|
|
|
|
|
|
|
|
|
|
if(d.left) { |
|
|
|
|
|
strlcpy(s, "*..\n", sizeof(s)); |
|
|
|
|
|
} else if(d.right) { |
|
|
|
|
|
strlcpy(s, "..*\n", sizeof(s)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
printf("%s", s); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void draw_box(direction_s d) { |
|
|
|
|
|
|
|
|
|
|
|
printf("%s:\n", (d.name ? d.name : "a box")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(d.up) { |
|
|
|
|
|
this_row(d); |
|
|
|
|
|
} else { |
|
|
|
|
|
printf("...\n"); |
|
|
|
|
|
} |
|
|
|
|
|
if(!d.up && !d.down) { |
|
|
|
|
|
this_row(d); |
|
|
|
|
|
} else { |
|
|
|
|
|
printf("...\n"); |
|
|
|
|
|
} |
|
|
|
|
|
if(d.down) { |
|
|
|
|
|
this_row(d); |
|
|
|
|
|
} else { |
|
|
|
|
|
printf("...\n"); |
|
|
|
|
|
} |
|
|
|
|
|
printf("\n"); |
|
|
|
|
|
|
|
|
|
|
|
} |