#include #include #include #define MAX 76 #define H 1 #define V 2 #define PD 3 #define HD 4 #define DD 5 char pole[MAX-1][MAX]; int a,b; void put_char(int x, int y, int ch ) { int old; x--; y--; old = pole[y][x]; if ( old == ' ') { pole[y][x] = ch; return; } if ( old == ch ) return; if ( (old == '|' && ch == '-') || (old == '-' && ch == '|') ){ pole[y][x] = '+'; return; } if ( (old == '/' && ch == '\\') || (old == '\\' && ch == '/') ) { pole[y][x] = 'x'; return; } pole[y][x] = '*'; } void line(int x1,int y1,int x2,int y2) { int i = y2-y1+1; int j = x2-x1+1; int dir,z; if ( i==0 ) { z = '-'; dir = H; } else if (j==0) { z = '|'; dir = V; } else if ( j*i > 0 ) { z = '\\'; dir = PD; } else if (j*i < 0) { z = '/'; if ( j > i ) dir = HD; else dir = DD; } else { /* chyba */ } switch (dir) { case H: while (j--) put_char(x1+j,y1,z); break; case V: while (i--) put_char(x1,y1+j,z); break; case PD: while (i--) put_char(x1+i,y1+i,z); break; case HD: while (i--) put_char(x1+i,y2+i,z); break; case DD: while (i--) put_char(x2+i,y1+i,z); break; default: break; } } void puttext(int x,int y,char *t) { int i; int l = strlen (t); for (i = x; i <= (x + l - 1) && i < a; i ++) { put_char (i, y, t[i -x]); } } void clear(int x1,int y1,int x2,int y2) { int i,j; line(x1,y1,x2,y1); line(x1,y2,x2,y2); line(x1,y1,x1,y2); line(x2,y1,x2,y1); for ( i=y1;i<=y2;i++) for (j=x1;j<=x2;i++) pole[i][j] = ' '; } int main() { char *prikaz,*text,*radek,*tok,*eoln; int x,y,x2,y2; int i; text = (char*) calloc(sizeof(char),100); prikaz = (char*) calloc(sizeof(char),100); tok = (char*) calloc(sizeof(char),100); text = (char*) calloc(sizeof(char),100); radek = (char*) calloc(sizeof(char),200); for (;;) { scanf("%d %d",&a,&b); if ( (!a) && (!b) ) break; fgets(radek,200,stdin); /* eoln = strrchr(radek,'\n'); if ( eoln ) *eoln = '\0'; */ prikaz = strtok(radek," "); if ( strcmp(prikaz,"POINT") == 0 ){ tok = strtok(NULL," "); sscanf(tok,"%d %d",&x,&y); if ( x > 1 && x < a && y > 1 && y < b ) put_char(x,y,'o'); continue; } if ( strcmp(prikaz,"LINE") == 0 ) { tok = strtok(NULL," "); sscanf(tok,"%d %d %d %d",&x,&y,&x2,&y2); if (( x > 1 && x < a && y > 1 && y < b ) && ( x2 > 1 && x2 < a && y2 > 1 && y2 < b )) line(x,y,x2,y2); continue; } if ( strcmp(prikaz,"TEXT") == 0 ){ tok = strtok(NULL," "); sscanf(tok,"%d %d",&x,&y); tok = strtok(NULL," "); text = strtok(NULL," "); if ( x > 1 && x < a && y > 1 && y < b ) puttext(x,y,text); continue; } if ( strcmp(prikaz,"CLEAR") == 0 ){ tok = strtok(NULL," "); sscanf(tok,"%d %d %d %d",&x,&y,&x2,&y2); if ( x > 1 && x < a && y > 1 && y < b ) clear(x,y,x2,y2); continue; } if ( strcmp(prikaz,"PRINT") == 0 ){ tok = strtok(NULL," "); i = b; while (i--) printf("%s\n",pole[i]); printf("\n"); } } free(radek); return 0; }