#include #include char cs[50]; char area[80][80]; int xs,ys; void plot(int x, int y, char c) { int s,d; s=area[x][y]; /* printf("old='%c' new='%c'",s,c);*/ if(s==c) return; switch(s) { case ' ': d=c; break; case '-': if(c=='|') d='+'; else d='*'; break; case '|': if(c=='-') d='+'; else d='*'; break; case '/': if(c=='\\') d='x'; else d='*'; break; case '\\': if(c=='/') d='x'; else d='*'; break; case '+': if(c=='-' || c=='|') d='+'; else d='*'; break; case 'x': if(c=='/' || c=='\\') d='x'; else d='*'; break; default: d='*'; break; } /* printf("->'%c'\n",d);*/ area[x][y]=d; } void drop(int n) { while(n-->0) fgetc(stdin); } void cpoint(void) { int x,y; scanf("%d %d\n",&x,&y); plot(x,y,'o'); } void ctext(void) { int x,y,c; scanf("%d %d ",&x,&y); while(1) { c=fgetc(stdin); if(c=='\n') break; plot(x++,y,c); } } void cline(void) { int x1,y1,x2,y2; int i,j; int t; scanf("%d%d%d%d\n",&x1,&y1,&x2,&y2); if(x1==x2) { if(y1>y2) { t=y1; y1=y2; y2=t; } for(i=y1;i<=y2;i++) plot(x1,i,'|'); } else if(y1==y2) { if(x1>x2) { t=x1; x1=x2; x2=t; } for(i=x1;i<=x2;i++) plot(i,y1,'-'); } else { if(x1>x2) { t=x1; x1=x2; x2=t; t=y1; y1=y2; y2=t; } if(y1x2) { t=x1; x1=x2; x2=t; } if(y1>y2) { t=y1; y1=y2; y2=t; } for(i=x1;i<=x2;i++) for(j=y1;j<=y2;j++) area[i][j]=' '; } void cprint(void) { int i,j; putchar('+'); for(i=1;i<=xs;i++) { putchar('-'); } putchar('+');putchar('\n'); for(j=1;j<=ys;j++) { putchar('|'); for(i=1;i<=xs;i++) { putchar(area[i][j]); } printf("|\n"); } putchar('+'); for(i=1;i<=xs;i++) { putchar('-'); } putchar('+');putchar('\n'); putchar('\n'); } int getcmd(void) { int c; c=fgetc(stdin); if(c<'A' || c>'Z') { return 0; } switch(c) { case 'T': drop(3); ctext(); break; case 'L': drop(3); cline(); break; case 'C': drop(4); cclear(); break; case 'P': c=fgetc(stdin); if(c=='O') { drop(3); cpoint(); } else { drop(4); cprint(); return 0; } break; } return 1; } int do_it(void) { int i,j; if(scanf("%d%d\n",&xs,&ys)<2) return 0; if(xs==0 || ys==0) return 0; for(i=0;i