/* $Id: hops.c,v 1.2 2003/11/17 00:48:43 grog Exp grog $ */ #include #include #include #include #include #include #include #include #include #include #include #include "beer.h" void usage (char *myname) { fprintf (stderr, "Usage:\n" "%s [-a ] [-e ] [-I ] [-v] litres\n\n" "\tAt least one must be specified\n", myname ); } float aa_factor; float extract_factor; float total_hops; /* total weight of hops */ float total_aa; /* total alpha acid */ float total_extracted; /* total alpha acid extracted */ float ibu; float litres; float desired_ibu; int verbose = 1; int main (int argc, char *argv []) { int i; for (i = 1; i < argc; i++) { if (argv [i] [0] == '-') { if (memcmp (argv [i], "-a", 2) == 0) /* alpha acid percentage */ { if (argv [i] [2]) /* speficied percentage */ { aa_factor = atof (&argv [i] [2]); if (aa_factor > 1) /* percentage? */ aa_factor /= 100; /* convert to factor */ else if (aa_factor == 0) aa_factor = 0.05; } else if (aa_factor == 0) { fprintf (stderr, "Warning: no alpha acid percentage specified, assuming 5%%\n"); aa_factor = 0.05; } if (extract_factor == 0) { fprintf (stderr, "Warning: no extract factor specified, assuming 30%%\n"); extract_factor = 0.3; } if (argc < (i + 2)) { fprintf (stderr, "No weight specified for Alpha Acid\n\n"); usage (argv [0]); return 1; } else { double weight = atof (argv [i + 1]); double aa; double extracted; aa = weight * aa_factor; extracted = aa * extract_factor; total_hops += weight; total_aa += aa; total_extracted += extracted; if (verbose) printf ("Hops (g)\talpha acid %%\textract %%\tmg alpha acid\n" "%6.2f\t\t%6.2f\t\t%6.2f\t\t%6.4f\n", weight, aa_factor * 100, extract_factor * 100, extracted ); i++; } } else if (memcmp (argv [i], "-e", 2) == 0) /* extract percentage */ { if (argc < (i + 2)) { fprintf (stderr, "No value specified for extract percentage\n\n"); usage (argv [0]); return 1; } else { extract_factor = atof (argv [i + 1]); if (extract_factor > 1) /* percentage */ extract_factor /= 100; /* convert to factor */ i++; } } else if (memcmp (argv [i], "-I", 2) == 0) /* desired IBUs */ { if (argc < (i + 2)) { fprintf (stderr, "No value specified for desired IBU\n\n"); usage (argv [0]); return 1; } else { desired_ibu = atof (argv [i + 1]); i++; } } else if (strcmp (argv [i], "-v") == 0) /* verbose */ { verbose++; printf ("Hops\t\t\tconcen-\t\tweight\tequiv\t\ttotal\n" "\t\t\ttration %%\t(kg)\tsucrose (kg)\tsugar (kg)\n\n"); } } else if (litres == 0.0) litres = atof (argv [i]); else /* too much */ { fprintf (stderr, "Extraneous parameter:%s\n", argv [i]); usage (argv [0]); return 1; } } if (litres == 0.0) { fprintf (stderr, "No volume gives no beer\n"); usage (argv [0]); return 1; } ibu = total_extracted * 1000 / litres; /* mg/litre */ printf ("IBU: %6.2f\n", ibu); return 0; }