Program printer; var screen : array [0..76,0..76] of char; x,y : integer; i,j : integer; zacatek : string [5]; cap : string [255]; a,b,c,d : integer; ventil : boolean; Procedure Printchar(kamx,kamy : integer; co: char); forward; Procedure Draw_Line(x1,y1,x2,y2 : integer); Begin if (y2=y1) then if (x2>x1) then Begin for i:=x1 to x2 do Printchar(i,y1,'-'); Exit; End else If (x2y1) then if (x2=x1) then Begin for i:=y1 to y2 do Printchar(x1,i,'|'); Exit; End else If (x2x1} for i:=x1 to x2 do Printchar(i,y1-x1+i,'\'); Exit; End; if (y2x1} for i:=x1 to x2 do Printchar(i,y1-i+x1,'/'); Exit; End; End; Procedure Printchar(kamx,kamy : integer; co : char); Begin if screen[kamx,kamy]=' ' then Begin screen[kamx,kamy]:=co; Exit; End else if co = screen[kamx,kamy] then exit else if ((co='-')and(screen[kamx,kamy]='|')) or ((co='|')and(screen[kamx,kamy]='-')) or((co='-')and(screen[kamx,kamy]='+'))or((co='|')and(screen[kamx,kamy]='+'))then screen[kamx,kamy]:='+' else if ((co='/')and(screen[kamx,kamy]='\'))or((co='\')and(screen[kamx,kamy]='/')) or((co='/')and(screen[kamx,kamy]='x'))or((co='\')and(screen[kamx,kamy]='x'))then screen[kamx,kamy]:='x' else screen[kamx,kamy]:='*'; End; Procedure Draw_Text(kamx,kamy : integer; co : string); Begin for i:=kamx to kamx+Length(co)-1 do Printchar(i,kamy,co[i-kamx+1]); End; Procedure Draw_Point(kamx,kamy : integer); Begin Printchar(kamx,kamy,'o'); End; Procedure Clear(x1,y1,x2,y2 : integer); var zx,zy,kx,ky : integer; i,j : integer; Begin zx:=x1; zy:=y1; kx:=x2; ky:=y2; if (x1 > x2) then Begin zx:=x2; kx:=x1; End; if (y1 > y2) then Begin zy:=y2; ky:=y1; End; For i:=zx to kx do For j:=zy to ky do screen[i,j]:=' '; End; Procedure Print_screen; var i,j : integer; Begin for i:=1 to x do Begin screen[i,0]:='-'; screen[i,y+1]:='-'; End; for i:=1 to y do Begin screen[0,i]:='|'; screen[x+1,i]:='|'; End; screen[0,0]:='+'; screen[0,y+1]:='+'; screen[x+1,0]:='+'; screen[x+1,y+1]:='+'; For i:=0 to y+1 do For j:=0 to x+1 do if (j<>x+1) then write(screen[j,i]) else writeln(screen[j,i]); End; Begin {HP} Repeat Readln(x,y); if (x=y) and (x=0) then Exit; for i:=0 to 76 do for j:=0 to 76 do screen[i,j]:=' '; Repeat ventil:=FALSE; Read(zacatek); Case zacatek[2] of 'I' : Begin Readln(a,b,c,d); Draw_line(a,b,c,d); End; 'E' : Begin Readln(a,b,cap); Draw_Text(a,b,cap); End; 'L' : Begin Readln(a,b,c,d); Clear(a,b,c,d); End; 'O' : Begin Readln(a,b); Draw_Point(a,b); End; 'R' : Begin Readln; Print_screen; ventil:=TRUE; End; else Begin ventil:=TRUE; Exit; End;{novy obraz;} End; Until ventil; Until 1=0; End.