home *** CD-ROM | disk | FTP | other *** search
- program dither;
-
- {$I S400.INT}
-
- const c2a: array[0..6] of integer = (0,8,0,8,7,15,15);
- c2b: array[0..6] of integer = (8,8,0,0,0,8,0);
- c1a: array[0..15] of integer = (4,6,2,1,5,3,0,7,
- 12,14,10,9,13,11,8,15);
- xa: array [0..15] of integer = (0,224,
- 0,192,
- 0,144,144,288,
- 0,144,256,352,
- 368,
- 0,0,0);
- ya: array [0..15] of integer = (0,0,
- 1,1,
- 2,2,2,2,
- 3,3,3,3,
- 1,
- 4,4,4);
-
- var x, y, i, color, color2, c1, c2: integer;
-
- procedure pointc (x,y,color: integer);
-
- begin
- if (color and 1) <> 0 then
- begin
- plansl (0);
- pointon (x,y);
- end;
- if (color and 2) <> 0 then
- begin
- plansl (1);
- pointon (x,y);
- end;
- if (color and 4) <> 0 then
- begin
- plansl (2);
- pointon (x,y);
- end;
- if (color and 8) <> 0 then
- begin
- plansl (3);
- pointon (x,y);
- end;
- end;
-
- procedure block (ulx,uly,color: integer);
-
- var i,j :integer;
-
- begin
- for i := 1 to 15 do
- for j := 1 to 15 do
- pointc (ulx+j,uly+i,color);
- end;
-
- procedure diblock (ulx,uly,c1,c2: integer);
-
- var i,j: integer;
-
- begin
- for i := 1 to 15 do
- for j := 1 to 15 do
- if ((i+j) mod 2) = 0 then
- pointc (ulx+j,uly+i,c1)
- else
- pointc (ulx+j,uly+i,c2);
- end;
-
- begin
- vhr;
- for c1 := 8 to 15 do
- begin
- color := c1a[c1];
- y := 16 + (32 * (c1 - 8));
- block (16,y,color);
- for i := 0 to 6 do
- begin
- x := 48 + (16 * i);
- diblock (x,y,color-c2b[i],c2a[i]);
- end;
- end;
- i := 0;
- for c1 := 0 to 15 do
- begin
- x := 192 + xa[c1];
- y := 16 + (64 * ya[c1]);
- color := c1a[c1];
- if not (color in [0,15]) then
- for c2 := (c1+1) to 15 do
- begin
- if c2 = 7 then x := x + 16;
- color2 := c1a[c2];
- if ((not (color2 in [0,7,8,15])) and (color2 <> (color + 8))) then
- begin
- x := x + 16;
- block (x,y,color);
- diblock (x,y+16,color,color2);
- block (x,y+32,color2);
- i := i + 1;
- end; { if }
- end; { for c2... }
- i := i + 1;
- end; { for c1... }
- for i := 0 to 3 do
- begin
- plansl (i);
- lineon (8,8,168,8);
- lineon (168,8,168,264);
- lineon (168,264,8,264);
- lineon (8,264,8,8);
- lineon (200,8,600,8);
- lineon (600,8,600,264);
- lineon (600,264,200,264);
- lineon (200,264,200,8);
- end;
- gotoxy(10,24);
- write('Press SPACE to continue...');
- repeat until keypressed;
- textmode (c80);
- end