5 from sys import argv, stderr
8 def __init__(me, **kw):
11 r = '%s(' % me.__class__.__name__
14 r += sep + '%s=%r' % (k, me.__dict__[k])
19 class service (struct):
21 return '%(name)s:%(port)d/%(proto)s' % me.__dict__
23 return me.port, me.proto, me.name
25 m = re.match(r'''^ (\S+) \s+ (\d+)/(\S+) \s*
26 ([^#\s] [^#]* [^#\s] | [^#\s])? \s*
27 (?: \# \s* (\S .* \S | \S |) )? \s* $''',
30 raise 'Bad service line %r' % string
31 me = service(name = m.group(1),
32 port = int(m.group(2)),
34 aliases = m.group(4) and m.group(4).split() or [],
37 parse = staticmethod(parse)
39 class servicetab (object):
42 def _insert(me, serv):
45 if serv.key() not in tab:
46 tab[serv.key()] = serv
55 for a in serv.aliases:
59 # print >>stderr, 'Merging aliases for %s' % s
66 # print >>stderr, 'Merging aliases for %s' % s
72 if re.match(r'^\s*(\#.*)?$', l):
74 serv = service.parse(l)
78 print >>stderr, 'File `%s\' redundant' % file
82 kk.sort(lambda x, y: cmp(x.key(), y.key()))
83 print '## services file [generated]'
86 print '%-20s %9s %s' % (s.name,
87 '%d/%s' % (s.port, s.proto),
90 if 'running_under_emacs_p' not in globals():