#!/usr/bin/env python import string import sys import os import termios, TERMIOS import regex import time import signal import txtdb prefixes = { "010": "NMT-nallar", "011": "Norrköping", "0120": "Åtvidaberg", "0121": "Söderköping", "0122": "Finspång", "013": "Linköping", "031": "Göteborg", "040": "Malmö", "0411": "Ystad", "042": "Helsingborg - Höganäs", "0451": "Hässleholm", "0494": "Kisa", "0707": "GSM-nallar Comviq", "0708": "GSM-nallar (Europolitan eller Telia?)", "08": "Stockholm" } def fmt_num(num): for p in prefixes.keys(): try: if string.index(num, p) == 0: fnum = p + "-" + num[len(p):] return fnum except: pass return num def get_name(book, num): callers = map(lambda x: ((hasattr(x, "nick") and x.nick) or (hasattr(x, "namn") and x.namn) or "[Namnlös]"), book.select(tel=num)) if len(callers) == 0: name = "(Okänd)" elif len(callers) == 1: name = callers[0] else: name = string.join(callers[:-1], ", ") + " & " + callers[-1] return name def now(): return time.ctime(time.time()) def main(): ttyfile = "/dev/cua1" bookfile = "~/diverse/adresslista" telebook = txtdb.open(os.path.expanduser(os.path.expandvars(bookfile))) signal.signal(signal.SIGINT, signal.SIG_DFL) modem = open(ttyfile) attr = termios.tcgetattr(modem.fileno()) attr[4] = attr[5] = TERMIOS.B38400 termios.tcsetattr(modem.fileno(), TERMIOS.TCSANOW, attr) nmbr_re = regex.compile("^NMBR = \(.*\)") print "-------- Listening on", ttyfile, "since", now(), "--------" while 1: l = string.strip(modem.readline()) if l != "": print now() + ": " + l if nmbr_re.search(l) >= 0: num = nmbr_re.group(1) fnum = fmt_num(num) name = get_name(telebook, fnum) print "\nNumber was %s: %s\n" % (fnum, name) if __name__ == "__main__": main()