--- /dev/null
+#include <stdio.h>\r
+#include <string.h>\r
+#include <memory.h>\r
+#include <stdlib.h>\r
+\r
+#define WIDTH 256\r
+\r
+#define FILENAME "DIAGONAL.TIL"\r
+char fn[100] = FILENAME;\r
+typedef unsigned char BYTE;\r
+typedef BYTE ROW[16];\r
+typedef ROW BITMAP[16];\r
+\r
+BITMAP b;\r
+BITMAP c;\r
+\r
+BITMAP pattern={{1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},\r
+ {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},\r
+ {1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0},\r
+ {1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0},\r
+ {1,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0},\r
+ {0,0,1,0,0,1,1,0,1,1,0,0,2,0,0,0},\r
+ {0,0,1,0,0,1,2,0,1,2,0,0,2,0,0,0},\r
+ {0,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0},\r
+ {0,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0},\r
+ {0,1,0,0,1,2,0,0,0,1,2,0,0,2,0,0},\r
+ {0,0,1,0,1,2,1,1,1,1,2,0,2,0,0,0},\r
+ {0,0,1,0,0,2,2,2,2,2,0,0,2,0,0,2},\r
+ {0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,2},\r
+ {0,0,0,0,2,2,0,0,0,2,2,0,0,0,0,2},\r
+ {0,0,0,0,0,0,2,2,2,0,0,0,0,0,2,2},\r
+ {0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2}};\r
+\r
+void copy_pattern(BITMAP b,BITMAP patt, BYTE l, BYTE m, BYTE h)\r
+ {\r
+ int x,y;\r
+\r
+ for (y=0; y<16; y++) {\r
+ for (x=0; x<16; x++) {\r
+ switch (patt[y][x]) {\r
+ case 0:\r
+ b[y][x] = m;\r
+ break;\r
+ case 1:\r
+ b[y][x] = l;\r
+ break;\r
+ case 2:\r
+ b[y][x] = h;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+/* Transforms linear to planar */\r
+void transform(BITMAP b,BITMAP c)\r
+ {\r
+ int x,y,p;\r
+ BYTE *pb = (BYTE *)c;\r
+\r
+ for (p=0; p<4; p++) {\r
+ for (y=0; y<16; y++) {\r
+ for (x=0; x<16; x+=4) {\r
+ *(pb++) = b[y][x+p];\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+void main(int argc,char *argv[])\r
+ {\r
+ FILE *fp;\r
+ int i;\r
+ int width = WIDTH;\r
+\r
+ fp = fopen(fn,"wb");\r
+ if (!fp) {\r
+ printf("Couldn't open %s for write.\n",fn);\r
+ exit(1);\r
+ }\r
+ if (argc > 1) {\r
+ width = atoi(argv[1]);\r
+ if (width > WIDTH)\r
+ width = WIDTH;\r
+ printf("Width = %d\n",width);\r
+ }\r
+\r
+ for (i = 0; i< width; i++) {\r
+ BYTE less,more;\r
+\r
+ less = (BYTE)((i + width - 1) % width);\r
+ more = (BYTE)((i + 1) % width);\r
+ copy_pattern(b, pattern, less, (BYTE)i, more);\r
+ transform(b,c);\r
+ fwrite(c, 16,16, fp);\r
+ printf("Square %d\r",i);\r
+ }\r
+ fclose(fp);\r
+ printf("All done! \n");\r
+ exit(0);\r
+ }\r
+\1a
\ No newline at end of file