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();