#ifndef __LENSTOOL_AUXFUN_H__
#define __LENSTOOL_AUXFUN_H__
// atof() with sanity checks
static float _atof (const char *s)
{
char *end = NULL;
float r = strtof (s, &end);
if (end && *end)
{
g_print ("ERROR: Invalid number `%s', parsed as %g\n", s, r);
g_print ("Use your locale-specific number format (e.g. ',' or '.' etc)\n");
exit (-1);
}
return r;
}
static bool smartstreq (const char *str, const char *pattern)
{
const char *src = str;
while (*src)
{
char cs = toupper (*src++);
char cp = toupper (*pattern++);
if (!cs)
return (src != str);
if (!cp)
return false;
if (cs != cp)
return false;
}
return true;
}
static void PrintCamera (const lfCamera *camera, const lfDatabase *ldb)
{
g_print (" %s / %s %s%s%s\n",
lf_mlstr_get (camera->Maker),
lf_mlstr_get (camera->Model),
camera->Variant ? "(" : "",
camera->Variant ? lf_mlstr_get (camera->Variant) : "",
camera->Variant ? ")" : "");
g_print (" |- Mount: %s\n", lf_db_mount_name (ldb, camera->Mount));
g_print (" |- Crop factor: %g\n", camera->CropFactor);
}
static void PrintLens (const lfLens *lens, const lfDatabase *ldb)
{
g_print (" %s / %s\n",
lf_mlstr_get (lens->Maker),
lf_mlstr_get (lens->Model));
g_print (" |- Crop factor: %g\n", lens->CropFactor);
g_print (" |- Aspect ratio: %g\n", lens->AspectRatio);
if (lens->MinFocal != lens->MaxFocal)
g_print (" |- Focal: %g-%gmm\n", lens->MinFocal, lens->MaxFocal);
else
g_print (" |- Focal: %gmm\n", lens->MinFocal);
g_print (" |- Min-Aperture: f/%g\n", lens->MinAperture);
g_print (" |- Center: %g,%g\n", lens->CenterX, lens->CenterY);
g_print (" |- Compatible mounts: ");
if (lens->Mounts)
for (int j = 0; lens->Mounts [j]; j++)
g_print ("%s, ", lf_db_mount_name (ldb, lens->Mounts [j]));
g_print ("\n");
g_print (" |- Calibration data: ");
if (lens->CalibTCA)
g_print ("tca, ");
if (lens->CalibVignetting)
g_print ("vign, ");
if (lens->CalibDistortion)
g_print ("dist,");
g_print ("\n");
}
#endif