#include <stdio.h>
#include <unistd.h>

#include "image.h"

int
writeTGA(const char *filename, const unsigned char *image, int xres, int yres)
{
  int x, y;
  unsigned char header[18];
  FILE *file;
  char buffer[10 * 1024];
  
  file = fopen(filename, "w");
  
  if (file == NULL) {
    fprintf(stderr, "Unable to open file %s\n", filename);
    return 1;
  }

  setvbuf(file, buffer, _IOFBF, sizeof(buffer));

  /* see http://gd.tuwien.ac.at/graphics/graphic-formats/2d/TGA.txt for file spec */
  header[0] = 0;    /* No identification field */
  header[1] = 0;    /* No color map */
  header[2] = 2;    /* Uncompressed, RGB images */
  header[3] = header[4] = header[5] = header[6] = header[7] = 0; /* Color map spec left out */
  header[8] = 0; header[9] = 0; /* X Origin of image (lo-hi order bytes)*/
  header[10] = 0; header[11] = 0; /* Y Origin of image (lo-hi order bytes)*/
  header[12] = (xres & 0x00FF); header[13] = (xres & 0xFF00) >> 8; /* width (lo-hi order) */
  header[14] = (yres & 0x00FF); header[15] = (yres & 0xFF00) >> 8; /* height (lo-hi order) */
  header[16] = 24; /* image pixel size in bits */
  header[17] = 0; /* image descriptor byte */
  fwrite(header, sizeof(unsigned char), 18, file);

  for (y=0; y<yres; y++) {
    for (x=0; x<xres; x++) {
      fputc(*(image+(x+xres*y)*3+2), file); /* blue */
      fputc(*(image+(x+xres*y)*3+1), file); /* green */
      fputc(*(image+(x+xres*y)*3+0), file); /* red */
    }
  }
  
  fclose(file);

  return 0;
}
