From c22a427855f0492b8f4557d3b2deca9598514534 Mon Sep 17 00:00:00 2001 From: rodri Date: Sat, 22 Feb 2020 22:45:25 +0000 Subject: now version controlled. --- temp.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 temp.c (limited to 'temp.c') diff --git a/temp.c b/temp.c new file mode 100644 index 0000000..56bbe74 --- /dev/null +++ b/temp.c @@ -0,0 +1,113 @@ +#include +#include + +enum { + C, /* celsius */ + F, /* fahrenheit */ + K /* kelvin */ +}; + +int iscale = F; +int oscale = C; + +double +c2f(double T) +{ + return T * 9/5 + 32; +} + +double +c2k(double T) +{ + return T + 273.15; +} + +double +f2c(double T) +{ + return (T-32) * 5/9; +} + +double +f2k(double T) +{ + return c2k(f2c(T)); +} + +double +k2c(double T) +{ + return T - 273.15; +} + +double +k2f(double T) +{ + return c2f(k2c(T)); +} + +double +ident(double T) +{ + return T; +} + +double (*convtab[3][3])(double) = { + [C][C] ident, + [C][F] c2f, + [C][K] c2k, + [F][C] f2c, + [F][F] ident, + [F][K] f2k, + [K][C] k2c, + [K][F] k2f, + [K][K] ident +}; + +int +getscale(char c) +{ + switch(c){ + case 'C': return C; + case 'F': return F; + case 'K': return K; + } + return -1; +} + +void +usage(void) +{ + fprint(2, "usage: %s [-i scale] [-o scale] temp\n", argv0); + exits("usage"); +} + +void +main(int argc, char *argv[]) +{ + char *s; + double iT, oT; + + ARGBEGIN{ + case 'i': + s = EARGF(usage()); + iscale = getscale(*s); + if(iscale < 0) + sysfatal("uknown input scale"); + break; + case 'o': + s = EARGF(usage()); + oscale = getscale(*s); + if(oscale < 0) + sysfatal("uknown output scale"); + break; + default: usage(); + }ARGEND; + + if(argc < 1) + usage(); + iT = strtod(*argv, nil); + oT = (*convtab[iscale][oscale])(iT); + print("%g\n", oT); + exits(0); +} -- cgit v1.2.3