Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd reciprocity failure program - filmtools - various tools for photographic f…
git clone git://src.adamsgaard.dk/filmtools
Log
Files
Refs
---
commit 3546ae81af5a877bae48e2e2592c504cebc0dc1a
parent 3e5d5e3b1968d4e4fabc24578adfa551d4331766
Author: Anders Damsgaard <[email protected]>
Date: Thu, 16 Jul 2020 22:09:51 +0200
Add reciprocity failure program
Diffstat:
A reciprocity.1 | 50 +++++++++++++++++++++++++++++…
A reciprocity.c | 85 +++++++++++++++++++++++++++++…
2 files changed, 135 insertions(+), 0 deletions(-)
---
diff --git a/reciprocity.1 b/reciprocity.1
t@@ -0,0 +1,50 @@
+.Dd JULY 16, 2020
+.Dt RECIPROCITY 1
+.Os
+.Sh NAME
+.Nm reciprocity
+.Nd calculates compensated exposure time for film reciprocity failure
+.Sh SYNOPSIS
+.Nm
+.Ar film
+.Ar time
+.Sh DESCRIPTION
+Photographic films suffer from low-intensity reciprocity failure
+during long exposures (usually >1 s). This program returns the
+compensated exposure time.
+.Bl -tag -width Ds
+.It Ar film
+specifies the film type and can be one of the following:
+.Bl -bullet -compact
+.It
+panf
+.It
+fp4
+.It
+hp5
+.It
+delta100
+.It
+delta400
+.It
+delta3200
+.It
+sfx
+.It
+xp2
+.It
+acros100
+.It
+tmx
+.It
+tmy
+.It
+tmz
+.It
+trix
+.El
+.It Ar time
+is metered exposure time in format MM:SS
+.El
+.Sh AUTHORS
+.An Anders Damsgaard Aq Mt [email protected]
diff --git a/reciprocity.c b/reciprocity.c
t@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <err.h>
+#include <math.h>
+#include <string.h>
+
+#define LENGTH(X) (sizeof X / sizeof X[0])
+
+typedef struct {
+ const char *manufacturer;
+ const char *name;
+ double factor;
+ double exponent;
+} Film;
+
+static const Film films[] = {
+ { "ilford", "panf", 1.00, 1.33 },
+ { "ilford", "fp4", 1.00, 1.26 },
+ { "ilford", "hp5", 1.00, 1.31 },
+ { "ilford", "delta100", 1.00, 1.26 },
+ { "ilford", "delta400", 1.00, 1.41 },
+ { "ilford", "delta3200", 1.00, 1.33 },
+ { "ilford", "sfx", 1.00, 1.43 },
+ { "ilford", "xp2", 1.00, 1.31 },
+ { "fujifilm", "acros100", 0.96, 1.02 },
+ { "kodak", "tmx", 1.18, 1.13 },
+ { "kodak", "tmy", 1.05, 1.22 },
+ { "kodak", "tmz", 1.34, 1.20 },
+ { "kodak", "trix", 2.41, 1.29 },
+};
+
+char *argv0;
+
+static void
+usage()
+{
+ int i;
+
+ printf("usage: %s film time\n", argv0);
+ puts("where time is metered exposure time in format MM:SS,");
+ puts("and film is one of the following:");
+ for (i = 0; i < LENGTH(films); i++)
+ printf(" %-12s (%s)\n", films[i].name, films[i].manufacture…
+}
+
+int
+main(int argc, char **argv)
+{
+ double exponent;
+ int i, min, sec, sec_equiv;
+
+ argv0 = *argv;
+
+#ifdef __OpenBSD__
+ if (pledge("stdio", NULL) == -1)
+ errx(1, "pledge");
+#endif
+
+ if (argc != 3) {
+ usage();
+ errx(1, "incorrect arguments");
+ }
+
+ for (i = 0;; i++) {
+ if (i == LENGTH(films))
+ errx(3, "unknown film type");
+ if (strncasecmp(argv[1], films[i].name, 10) == 0) {
+ exponent = films[i].exponent;
+ break;
+ }
+ }
+
+ printf("exponent: %g\n", exponent);
+
+ if (sscanf(argv[2], "%d:%d", &min, &sec) != 2)
+ errx(2, "could not parse time in MM:SS format");
+
+ sec_equiv = pow(min*60 + sec, exponent);
+
+ printf("%d:%02d\n",
+ (int)(sec_equiv/60.0),
+ (int)(sec_equiv)%60);
+
+ return 0;
+}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.