|  |  | @ -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"); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | } |