diff options
Diffstat (limited to 'Demo/sgi/video/squash2.c')
-rwxr-xr-x | Demo/sgi/video/squash2.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Demo/sgi/video/squash2.c b/Demo/sgi/video/squash2.c new file mode 100755 index 0000000..c4d03e9 --- /dev/null +++ b/Demo/sgi/video/squash2.c @@ -0,0 +1,72 @@ +#include <stdio.h> + +long *bm; +long h, w; +long factor; + +#define OC(x,xi) ((x)*factor+(xi)) +#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)] + +#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16)) + +#define R(comp) ((comp) & 0xff) +#define G(comp) (((comp)>>8) & 0xff) +#define B(comp) (((comp)>>16) & 0xff) + +main(argc, argv) + char **argv; +{ + char lbuf[100]; + int nh, nw; + int x, y, xi, yi; + int num; + int r, g, b; + long data; + long *nbm, *nbmp; + int i; + + if( argc != 2) { + fprintf(stderr, "Usage: squash factor\n"); + exit(1); + } + factor = atoi(argv[1]); + gets(lbuf); + if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) { + fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf); + exit(1); + } + nh = h / factor; + nw = w / factor; + printf("(%d,%d)\n", nw, nh); + if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) { + fprintf(stderr, "%s: No memory\n", argv[0]); + exit(1); + } + if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) { + fprintf(stderr, "%s: No memory\n", argv[0]); + exit(1); + } + while( !feof(stdin) ) { + gets(lbuf); + if ( feof(stdin) ) break; + puts(lbuf); + fprintf(stderr, "Reading %d\n", h*w*sizeof(long)); + if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) { + fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0], + i, h*w*sizeof(long)); + exit(1); + } + nbmp = nbm; + for( y=0; y<nh; y++) { + for ( x=0; x<nw; x++) { + r = g = b = 0; + num = 0; + *nbmp++ = BM(x,0,y,0); + } + } + if (nbmp - nbm != nh * nw ) fprintf(stderr, "%d %d\n", nbmp-nbm, nh*nw); + fprintf(stderr, "Writing %d\n", (nbmp-nbm)*sizeof(long)); + fwrite(nbm, 1, (nbmp-nbm)*sizeof(long), stdout); + } + exit(0); +} |