topng.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <draw.h>
  4. #include <memdraw.h>
  5. #include <ctype.h>
  6. #include <bio.h>
  7. #include <flate.h>
  8. #include "imagefile.h"
  9. void
  10. usage(void)
  11. {
  12. fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n");
  13. exits("usage");
  14. }
  15. void
  16. main(int argc, char *argv[])
  17. {
  18. Biobuf bout;
  19. Memimage *i;
  20. int fd;
  21. char *err, *filename;
  22. ImageInfo II;
  23. ARGBEGIN{
  24. case 'c':
  25. II.comment = ARGF();
  26. if(II.comment == nil)
  27. usage();
  28. II.fields_set |= II_COMMENT;
  29. break;
  30. case 'g':
  31. II.gamma = atof(ARGF());
  32. if(II.gamma == 0.)
  33. usage();
  34. II.fields_set |= II_GAMMA;
  35. break;
  36. case 't':
  37. break;
  38. default:
  39. usage();
  40. }ARGEND
  41. if(Binit(&bout, 1, OWRITE) < 0)
  42. sysfatal("Binit failed: %r");
  43. memimageinit();
  44. if(argc == 0){
  45. fd = 0;
  46. filename = "<stdin>";
  47. }else{
  48. fd = open(argv[0], OREAD);
  49. if(fd < 0)
  50. sysfatal("can't open %s: %r", argv[0]);
  51. filename = argv[0];
  52. }
  53. i = readmemimage(fd);
  54. if(i == nil)
  55. sysfatal("can't readimage %s: %r", filename);
  56. close(fd);
  57. err = memwritepng(&bout, i, &II);
  58. freememimage(i);
  59. if(err != nil)
  60. fprint(2, "topng: %s\n", err);
  61. exits(err);
  62. }