#!/usr/bin/env python
#
# Copyright © 2013 Mattias Andrée (maandree@member.fsf.org)
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty. [GNU All Permissive License]
import os
import time
import sys
from subprocess import Popen, PIPE
def awesome(list):
return [elem.replace('X', ' ').replace('[', '\033[07m ').replace(']', '\033[00m ') for elem in list]
MONGO_0 = [' [XXXX] ',
' [XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [] [XX] ',
'[XX] [] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
' [XX] [XX] ',
' [XXXX] ']
MONGO_1 = [' [XX] ',
' [XXXX] ',
' [XXXXXX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XXXXXXXXXX] ']
MONGO_2 = [' [XXXXXXXX] ',
'[XX] [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
'[XX] ',
'[XX] [XX] ',
'[XXXXXXXXXXXX] ']
MONGO_3 = [' [XXXXXXXX] ',
'[XX] [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XXXXXX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
'[XX] [XX] ',
' [XXXXXXXX] ']
MONGO_4 = [' [XX] ',
' [XXXX] ',
' [XXXXXX] ',
' [XX] [XX] ',
'[XX] [XX] ',
'[XXXXXXXXXXXX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XXXXXX] ']
MONGO_5 = ['[XXXXXXXXXXXX] ',
'[XX] ',
'[XX] ',
'[XX] ',
'[XX] ',
'[XXXXXXXXXX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
'[XX] [XX] ',
' [XXXXXXXX] ']
MONGO_6 = [' [XXXX] ',
' [XX] ',
' [XX] ',
'[XX] ',
'[XX] ',
'[XXXXXXXXXX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
' [XXXXXXXX] ']
MONGO_7 = ['[XXXXXXXXXXXX] ',
'[XX] [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ']
MONGO_8 = [' [XXXXXXXX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
' [XXXXXXXX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
' [XXXXXXXX] ']
MONGO_9 = [' [XXXXXXXX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
'[XX] [XX] ',
' [XXXXXXXXXX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XX] ',
' [XXXX] ']
MONGO__ = [' ',
' ',
' [XX] ',
' [XX] ',
' ',
' ',
' ',
' ',
' [XX] ',
' [XX] ',
' ',
' ']
DX = len(MONGO_0[0])
DC = len(MONGO__[0])
MONGO_0 = awesome(MONGO_0)
MONGO_1 = awesome(MONGO_1)
MONGO_2 = awesome(MONGO_2)
MONGO_3 = awesome(MONGO_3)
MONGO_4 = awesome(MONGO_4)
MONGO_5 = awesome(MONGO_5)
MONGO_6 = awesome(MONGO_6)
MONGO_7 = awesome(MONGO_7)
MONGO_8 = awesome(MONGO_8)
MONGO_9 = awesome(MONGO_9)
MONGO__ = awesome(MONGO__)
def print_digit(digit, x, y):
d = MONGO__
if digit == 0: d = MONGO_0
elif digit == 1: d = MONGO_1
elif digit == 2: d = MONGO_2
elif digit == 3: d = MONGO_3
elif digit == 4: d = MONGO_4
elif digit == 5: d = MONGO_5
elif digit == 6: d = MONGO_6
elif digit == 7: d = MONGO_7
elif digit == 8: d = MONGO_8
elif digit == 9: d = MONGO_9
x += 1
for i in range(len(d)):
y += 1
print("\033[%i;%iH%s" % (y, x, d[i]))
def print_number(number, x, y):
print_digit(number // 10, x, y)
print_digit(number % 10, x + DX, y)
def print_time(h, m, s, x, y):
print_number(h, x, y)
x += DX << 1
print_digit(-1, x, y)
x += DC
print_number(m, x, y)
if s is not None:
x += DX << 1
print_digit(-1, x, y)
x += DC
print_number(s, x, y)
def get_print_width(has_seconds):
return DC + 4 * DX + ((DC + 2 * DX) if has_seconds else 0)
def get_print_height():
return len(MONGO_0)
def get_print_offset(has_seconds):
(h, w) = get_dimensions()
return ((w - get_print_width(has_seconds)) // 2, (h - get_print_height()) // 2)
def fits(has_seconds):
(h, w) = get_dimensions()
return (get_print_width(has_seconds) <= w) and (get_print_height() <= h)
def get_dimensions():
rc = Popen(['stty', 'size'], stdout = PIPE).communicate()[0]
rc = rc.decode('utf-8')
rc = rc.replace('\n', '').split(' ')
return [int(x) for x in rc]
if __name__ == '__main__':
val = None
if fits(True):
val = True
elif fits(False):
val = False
else:
print('Screen is too small')
exit(1)
(x, y) = get_print_offset(val)
last = (-1, -1, -1)
while True:
(h, m, s) = [int(x) for x in time.strftime('%H %M %S', time.localtime()).split(' ')]
if not val:
s = None
if h != last[0] or m != last[1] or s != last[2]:
print('\033[H\033[2J', end='')
print_time(h, m, s, x, y)
print('\033[1;1H', end='')
sys.stdout.flush()
last = (h, m, s)
time.sleep(0.1)