+#include <string.h>
+#include <netpbm/pnm.h>
#include "kds_s2000w_image_converter.h"
+#define SPACE 0x0a
+#define SPACE_WIDTH_HEIGHT 0x20
+#define MAXBUFFER 6
+
+int _kds_s2000w_image_converter_find_char(blobdata* image, int start, const char cfind)
+{
+ char* image_data = (char*) image->data;
+
+ for (int i = start; i < image->size; i++) {
+ if (image_data[i] == cfind)
+ return i;
+ }
+
+ return 0;
+}
+
+int _kds_s2000w_image_converter_get_number_from_substring(char* data, int start, int end)
+{
+ int number = 0;
+
+ char* number_buffer = malloc(sizeof(char) * MAXBUFFER);
+ memset(number_buffer, 0, MAXBUFFER);
+ strncpy(number_buffer, &data[start + 1], end - start - 1);
+ number = atoi(number_buffer);
+
+ free(number_buffer);
+ number_buffer = NULL;
+
+ return number;
+}
+
+void _kds_s2000w_image_converter_pnm_metadata(blobdata* image, image_metadata* mdata)
+{
+ char* image_data = (char*) image->data;
+
+ mdata->depth = 8;
+ if (strncmp(image_data, "P4", 2) == 0)
+ mdata->depth = 1;
+
+ int start = _kds_s2000w_image_converter_find_char(image, 0, SPACE);
+ int middle = _kds_s2000w_image_converter_find_char(image, start, SPACE_WIDTH_HEIGHT);
+ int end = _kds_s2000w_image_converter_find_char(image, middle, SPACE);
+
+ mdata->width = _kds_s2000w_image_converter_get_number_from_substring(image_data, start, middle);
+ mdata->height = _kds_s2000w_image_converter_get_number_from_substring(image_data, middle, end);
+}
+
void kds_s2000w_image_converter_metadata_from_scanner_image(blobdata* image, image_metadata* mdata)
{
+ if (image->size < 2)
+ return;
+
+ if (strncmp(image->data, "P6", 2) == 0
+ || strncmp (image->data, "P4", 2) == 0) {
+ _kds_s2000w_image_converter_pnm_metadata(image, mdata);
+ return;
+ }
+
return;
}