/* * qtime - Display time as English sentence * * Copyright (C) 1999 Klaus Alexander Seistrup and Landon Curt Noll * * Written by: Klaus Alexander Seistrup * With mods by: Landon Curt Noll * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License * as published by the Free Software Foundation. * * Calc is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * Public License for more details. * * A copy of version 2.1 of the GNU Lesser General Public License is * distributed with calc under the filename COPYING-LGPL. You should have * received a copy with calc; if not, write to Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * @(#) $Revision: 30.1 $ * @(#) $Id: qtime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $ * * Under source code control: 1999/10/13 04:10:33 * File existed as early as: 1999 * * chongo /\oo/\ http://www.isthe.com/chongo/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ */ /* * usage: * qtime(utc_hr_offset) * * utc_hr_offset Offset from UTC in hours. * * See: * http://www.magnetic-ink.dk/download/qtime.html * * for examples of qtime() written on other languages. */ /* * qtime - Display time as English sentence */ define qtime(utc_hr_offset) { static mat hr[12] = { "twelve", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven" }; static mat mn[7] = { "", "five ", "ten ", "a quarter ", "twenty ", "twenty-five ", "half " }; static mat ny[5] = { "nearly ", "almost ", "", "just after ", "after " }; static mat up[3] = { "to ", "", "past " }; local adj_mins = (((time() + utc_hr_offset*3600) % 86400) + 30)//60+27; local hours = (adj_mins // 60) % 12; local minutes = adj_mins % 60; local almost = minutes % 5; local divisions = (minutes // 5) - 5; local to_past_idx = divisions > 0 ? 1 : 0; if (divisions < 0) { divisions = -divisions; to_past_idx = -1; } ++to_past_idx; /* * Print the English sentence * * We avoid forward and back quotes just to show that the char() * builtin function can be used in conjunction with a printf. */ printf("It%cs %s%s%s%s", char(0x27), ny[almost], mn[divisions], up[to_past_idx], hr[hours]); if (divisions == 0) printf(" o%cclock", char(0x27)); print "."; }