ff2pam.c - farbfeld - suckless image format with conversion tools
 (HTM) git clone git://git.suckless.org/farbfeld
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       ff2pam.c (1050B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <arpa/inet.h>
            3 
            4 #include <errno.h>
            5 #include <inttypes.h>
            6 #include <stdint.h>
            7 #include <stdio.h>
            8 #include <stdlib.h>
            9 #include <string.h>
           10 #include <unistd.h>
           11 
           12 #include "util.h"
           13 
           14 static void
           15 usage(void)
           16 {
           17         die("usage: %s", argv0);
           18 }
           19 
           20 int
           21 main(int argc, char *argv[])
           22 {
           23         size_t rowlen;
           24         uint32_t width, height, i;
           25         uint16_t *row;
           26 
           27         /* arguments */
           28         argv0 = argv[0], argc--, argv++;
           29 
           30         if (argc) {
           31                 usage();
           32         }
           33 
           34         /* prepare */
           35         ff_read_header(&width, &height);
           36         row = ereallocarray(NULL, width, (sizeof("RGBA") - 1) * sizeof(uint16_t));
           37         rowlen = width * (sizeof("RGBA") - 1);
           38 
           39         /* write data */
           40         printf("P7\n"
           41                "WIDTH %" PRIu32 "\n"
           42                "HEIGHT %" PRIu32 "\n"
           43                "DEPTH 4\n" /* number of channels */
           44                "MAXVAL 65535\n"
           45                "TUPLTYPE RGB_ALPHA\n"
           46                "ENDHDR\n",
           47                width, height);
           48 
           49         for (i = 0; i < height; i++) {
           50                 efread(row, sizeof(uint16_t), rowlen, stdin);
           51                 efwrite(row, sizeof(uint16_t), rowlen, stdout);
           52         }
           53 
           54         return fshut(stdout, "<stdout>");
           55 }