1 /* this produces a raw ppm file, with a 15-character header of
2 * "P6 3-digit-width 3-digit-height 255\n"
9 extern long *FDECL(alloc, (unsigned int));
19 static int tiles_across, tiles_down, curr_tiles_across;
22 static void NDECL(write_header);
23 static void NDECL(WriteTileStrip);
28 (void) fprintf(ppm_file, "P6 %03d %03d 255\n",
29 PpmScreen.Width, PpmScreen.Height);
37 for (j = 0; j < TILE_Y; j++) {
38 for (i = 0; i < PpmScreen.Width; i++) {
39 (void) fputc((char)image[j][i].r, ppm_file);
40 (void) fputc((char)image[j][i].g, ppm_file);
41 (void) fputc((char)image[j][i].b, ppm_file);
47 fopen_ppm_file(filename, type)
53 if (strcmp(type, WRBMODE)) {
54 Fprintf(stderr, "using writing routine for non-writing?\n");
57 ppm_file = fopen(filename, type);
58 if (ppm_file == (FILE *)0) {
59 Fprintf(stderr, "cannot open ppm file %s\n", filename);
63 if (!colorsinmainmap) {
64 Fprintf(stderr, "no colormap set yet\n");
69 curr_tiles_across = 0;
70 PpmScreen.Width = 20 * TILE_X;
73 PpmScreen.Height = 0; /* will be rewritten later */
77 image = (pixel **)alloc(TILE_Y * sizeof(pixel *));
78 for (i = 0; i < TILE_Y; i++) {
79 image[i] = (pixel *) alloc(PpmScreen.Width * sizeof(pixel));
86 write_ppm_tile(pixels)
87 pixel (*pixels)[TILE_X];
91 for (j = 0; j < TILE_Y; j++) {
92 for (i = 0; i < TILE_X; i++) {
93 image[j][curr_tiles_across*TILE_X + i] = pixels[j][i];
97 if (curr_tiles_across == tiles_across) {
99 curr_tiles_across = 0;
110 if (curr_tiles_across) { /* partial row */
111 /* fill with checkerboard, for lack of a better idea */
112 for (j = 0; j < TILE_Y; j++) {
113 for (i = curr_tiles_across * TILE_X;
114 i < PpmScreen.Width; i += 2 ) {
115 image[j][i].r = MainColorMap[CM_RED][0];
116 image[j][i].g = MainColorMap[CM_GREEN][0];
117 image[j][i].b = MainColorMap[CM_BLUE][0];
118 image[j][i+1].r = MainColorMap[CM_RED][1];
119 image[j][i+1].g = MainColorMap[CM_GREEN][1];
120 image[j][i+1].b = MainColorMap[CM_BLUE][1];
124 curr_tiles_across = 0;
128 for (i = 0; i < TILE_Y; i++) {
129 free((genericptr_t)image[i]);
131 free((genericptr_t)image);
133 PpmScreen.Height = tiles_down * TILE_Y;
135 write_header(); /* update size */
137 return(fclose(ppm_file));
146 pixel pixels[TILE_Y][TILE_X];
149 Fprintf(stderr, "usage: txt2ppm txtfile ppmfile\n");
153 if (!fopen_text_file(argv[1], RDTMODE))
158 if (!fopen_ppm_file(argv[2], WRBMODE)) {
159 (void) fclose_text_file();
163 while (read_text_tile(pixels))
164 (void) write_ppm_tile(pixels);
166 (void) fclose_text_file();
167 (void) fclose_ppm_file();