home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************
-
- QrtPost is a post processor for QRT on the Commodode
- Amiga. It reads in the QRT file, and spits it out
- as a 4096 color bitmap which can be converted to
- IFF/HAM by another program.
-
- *********************************************************/
-
- #include <stdio.h>
-
- #define MAXXRES 640 /* max x resolution */
- #define SHIFT 3 /* convert 0..127 to 0..15 */
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int xres, yres, line;
- register int x, value;
- unsigned short r[MAXXRES], g[MAXXRES], b[MAXXRES];
- FILE *in, *out;
- unsigned char fgetc();
-
- if (argc != 3) {
- printf("Usage: %s InFile OutFile\n",argv[0]);
- exit(1);
- }
-
- /** open files **/
-
- if ((in = fopen(argv[1],"r"))==NULL) {
- printf("Couldn't open file %s\n",argv[1]);
- exit(1);
- }
-
- if ((out = fopen(argv[2],"w"))==NULL) {
- printf("Couldn't open file %s\n",argv[2]);
- exit(1);
- }
-
- /** load x and y resolution **/
-
- xres = yres = 0;
-
- xres = ((unsigned int)fgetc(in));
- xres += ((unsigned int)(fgetc(in) << 8));
-
- yres = ((unsigned int)fgetc(in));
- yres += ((unsigned int)(fgetc(in) << 8));
-
- /** print info **/
-
- printf("\nInput file = %s\n", argv[1]);
- printf("Output file = %s\n\n", argv[2]);
- printf("X resolution = %d\n", xres);
- printf("Y resolution = %d\n\n", yres);
-
- while (!feof(in)) {
- line = ((int)fgetc(in)); /* read scan line number */
- line |= ((int)(fgetc(in) << 8));
-
- if (line >= yres) {
- printf("Faulty data file.\n");
- exit(1);
- }
-
- for (x=0; x<xres; x++) /* read color data */
- r[x] = ((short)fgetc(in)) & 0xff;
-
- for (x=0; x<xres; x++)
- g[x] = ((short)fgetc(in)) & 0xff;
-
- for (x=0; x<xres; x++)
- b[x] = ((short)fgetc(in)) & 0xff;
-
- fputc((unsigned char)(line>>8),out); /* write line number */
- fputc((unsigned char)(line&0xff),out);
-
- for (x=0; x<(xres/4); x++) { /* write color data */
- value = (r[4*x+3] >> SHIFT);
- value = value << 4;
- value += (r[4*x+2] >> SHIFT);
- fputc((unsigned char)(value),out);
-
- value = (r[4*x+1] >> SHIFT);
- value = value << 4;
- value += (r[4*x+0] >> SHIFT);
-
- fputc((unsigned char)(value),out);
- }
-
- for (x=0; x<(xres/4); x++) { /* write color data */
- value = (g[4*x+3] >> SHIFT);
- value = value << 4;
- value += (g[4*x+2] >> SHIFT);
- fputc((unsigned char)(value),out);
-
- value = (g[4*x+1] >> SHIFT);
- value = value << 4;
- value += (g[4*x+0] >> SHIFT);
-
- fputc((unsigned char)(value),out);
- }
-
- for (x=0; x<(xres/4); x++) { /* write color data */
- value = (b[4*x+3] >> SHIFT);
- value = value << 4;
- value += (b[4*x+2] >> SHIFT);
- fputc((unsigned char)(value),out);
-
- value = (b[4*x+1] >> SHIFT);
- value = value << 4;
- value += (b[4*x+0] >> SHIFT);
-
- fputc((unsigned char)(value),out);
- }
-
- }
-
- fclose(in); /* close files */
- fclose(out);
-
- }
-
-
-