#!/usr/bin/env python # -*- coding: utf8 -*- __version__ = '$Id: binclock_bcd_curses.py 780 2010-10-19 10:33:34Z mn $' # binary clock, bcd version # author: Michal Niklas import sys import time import curses def bin_old(n): """bin() that works with Python 2.4""" if n < 1: return '0' result = [] while n: if n % 2: result.append('1') else: result.append('0') n = n // 2 result.reverse() return ''.join(result) def bcd_digit(sn): """converts decimal digit char to 4 char binary 0 and 1 representation""" n = int(sn) try: bin_nr = bin(n)[2:] except NameError: bin_nr = bin_old(n) return ('0000' + bin_nr)[-4:] def add_bcd(n, digits): """add n binary digits to digits""" nn = "%02d" % (n) digits.append(bcd_digit(nn[0])) digits.append(bcd_digit(nn[1])) def get_stars(digits): """changes digits to vertical picture of clock with stars and dots""" digits_arr = [] for j in range(len(digits[0]) - 1, -1, -1): digits2 = [] for i in range(len(digits)): digits2.append(digits[i][j]) digits_arr.append(''.join(digits2)) digits_arr.reverse() stars = "\n".join(digits_arr) stars = stars.replace('0', '.') stars = stars.replace('1', '*') return stars def main(): try: try: window = curses.initscr() while 1: digits = [] window.clear() tm = time.localtime() add_bcd(tm.tm_hour, digits) add_bcd(tm.tm_min, digits) add_bcd(tm.tm_sec, digits) stars = get_stars(digits) line_nr = 0 for line in stars.split('\n'): window.addstr(line_nr, 0, line[:6]) line_nr += 1 window.refresh() time.sleep(0.5) except KeyboardInterrupt: pass finally: # reset terminal curses.nocbreak() curses.echo() curses.endwin() if '--version' in sys.argv: print(__version__) elif __name__ == '__main__': main()