#include #include char disp[80][80]; int disp_x, disp_y; void write(int x, int y, char c); void clear_disp(int mx, int my) { int i, j; for(i = 0; i <= mx; i++) for(j = 0; j <= my; j++) disp[i][j] = ' '; } void print_text(int x, int y, char* text) { int i = 0; int len = strlen(text); for(; i < len && x <= disp_x; x++, i++) { write(x, y, text[i]); } } void print_line(int x1, int y1, int x2, int y2) { if (x1 == x2) { if (y1 < y2) { for(;y1 <= y2; y1++) write(x1, y1, '|'); } else { for(;y2 <= y1; y2++) write(x1, y2, '|'); } } if (y1 == y2) { if (x1 < x2) { for(;x1 <= x2; x1++) write(x1, y1, '-'); } else { for(;x2 <= x1; x2++) write(x2, y1, '-'); } } else if (x1 < x2 && y1 < y2) { for(; x1 <= x2; x1++, y1++) write(x1, y1, '\\'); } else if (x2 < x1 && y1 < y2) { for(; x1 >= x2; x1--, y1++) write(x1, y1, '/'); } else if (x2 < x1 && y2 < y1) { for(; x2 <= x1; x1--, y1--) write(x1, y1, '\\'); } else if (x1 < x2 && y2 < y1) { for(; x1 <= x2; x1++, y1--) write(x1, y1, '/'); } else ; } void write(int x, int y, char c) { if(disp[x][y] == ' ') disp[x][y] = c; else if(c == '/' && disp[x][y] == '\\') disp[x][y] = 'x'; else if(c == '\\' && disp[x][y] == '/') disp[x][y] = 'x'; else if(c == '|' && disp[x][y] == '-') disp[x][y] = '+'; else if(c == '-' && disp[x][y] == '|') disp[x][y] = '+'; else if(disp[x][y] == '+' && (c == '|' || c == '-')) { ; } else if(c == disp[x][y]) ; else disp[x][y] = '*'; } void clear_rect(int x1, int y1, int x2, int y2) { int min_x, min_y, max_x, max_y; min_x = (x1 > x2) ? x2 : x1; min_y = (y1 > y2) ? y2 : y1; max_x = (x1 > x2) ? x1 : x2; max_y = (y1 > y2) ? y1 : y2; printf("%d %d %d %d\n", min_x, min_y, max_x, max_y); for(x1 = min_x; x1 <= max_x; x1++) for(y1 = min_y; y1 <= max_y; y1++) disp[x1][y1] = ' '; } void print() { int i, j; putc('+', stdout); for(i = 0; i < disp_x; i++) putc('-', stdout); printf("+\n"); for(i = 1; i <= disp_y; i++) { putc('|', stdout); for(j = 1; j <= disp_x; j++) putc(disp[j][i], stdout); printf("|\n"); } putc('+', stdout); for(i = 0; i < disp_x; i++) putc('-', stdout); printf("+\n"); } int main(void) { int size_x, size_y; int lx1, ly1, lx2, ly2; int clx1, cly1, clx2, cly2; int txt_x, txt_y; int p_x, p_y; char st[10]; char text[50]; scanf("%d %d", &size_x, &size_y); while(size_x != 0 || size_y != 0) { clear_disp(size_x, size_y); disp_x = size_x; disp_y = size_y; do { scanf("%s", st); if(strcmp(st, "PRINT") == 0) { print(); break; } else if(strcmp(st, "LINE") == 0) { scanf("%d %d %d %d", &lx1, &ly1, &lx2, &ly2); print_line(lx1, ly1, lx2, ly2); } else if(strcmp(st, "TEXT") == 0) { scanf("%d %d %s", &txt_x, &txt_y, text); print_text(txt_x, txt_y, text); } else if(strcmp(st, "POINT") == 0) { scanf("%d %d", &p_x, &p_y); write(p_x, p_y, 'o'); } else if(strcmp(st, "CLEAR") == 0) { scanf("%d %d %d %d", &clx1, &cly1, &clx2, &cly2); clear_rect(clx1, cly1, clx2, cly2); } } while(1); scanf("%d %d", &size_x, &size_y); } return 0; }