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():