/* Copyright (C) 1978-1995 Ken Turkowski. * * All rights reserved. * * Warranty Information * Even though I have reviewed this software, I make no warranty * or representation, either express or implied, with respect to this * software, its quality, accuracy, merchantability, or fitness for a * particular purpose. As a result, this software is provided "as is," * and you, its user, are assuming the entire risk as to its quality * and accuracy. * * This code may be used and freely distributed as long as it includes * this copyright notice and the above warranty information. */ #include #include #include unsigned char sineTab[256]; /******************************************************************************* * ZonePlate *******************************************************************************/ static void ZonePlate(FILE *fd, int width, int height, int scale) { int cX, cY; int i, j; int x, y; int d; cX = width / 2; cY = height / 2; for (i = height, y = -cY; i--; y++) { for (j = width, x = -cX; j--; x++) { d = ((x * x + y * y) * scale) >> 8; putc(sineTab[d & 0xFF], fd); } } } /******************************************************************************* * MakeSineTab *******************************************************************************/ static void MakeSineTab(void) { int i; for (i = 0; i < 256; i++) { sineTab[i] = 127.5 * sin(M_PI * (i - 127.5) / 127.5) + 127.5; } } /******************************************************************************* * main *******************************************************************************/ int main(int argc, char **argv) { int width = 0; int height = 0; int scale = 0; char *outFile = NULL; FILE *fd; for (argc--, argv++; argc-- > 0; argv++) { if (argv[0][0] == '-') { switch (argv[0][1]) { case 'w': argc--; argv++; width = atoi(argv[0]); break; case 'h': argc--; argv++; height = atoi(argv[0]); break; case 's': argc--; argv++; scale = atoi(argv[0]); break; case 'o': argc--; argv++; outFile = argv[0]; break; } } else { } } if (width == 0 || height == 0 || scale == 0 || outFile == NULL) { printf("Usage: ZonePlate -w -h -s -o \n"); exit(1); } if ((fd = fopen(outFile, "wb")) == NULL) { printf("Can't open \"%s\"\n", outFile); exit(2); } MakeSineTab(); ZonePlate(fd, width, height, scale); fclose(fd); return(0); }