annotate Lib/cmd.py @ 6719:faebc1940432 legacy-trunk

Understand -Xlinker option.
author Guido van Rossum <guido@python.org>
date Tue, 02 Dec 1997 20:38:11 +0000
parents 1940892d2fe3
children c9e3ce8e74b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # A generic class to build line-oriented command interpreters
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import string
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import sys
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 import linecache
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 PROMPT = '(Cmd) '
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 IDENTCHARS = string.letters + string.digits + '_'
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 class Cmd:
1315
acdc0b9a6c78 * aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents: 1086
diff changeset
11
acdc0b9a6c78 * aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents: 1086
diff changeset
12 def __init__(self):
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 self.prompt = PROMPT
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 self.identchars = IDENTCHARS
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 self.lastcmd = ''
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 def cmdloop(self):
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 stop = None
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 while not stop:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 try:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 line = raw_input(self.prompt)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 except EOFError:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 line = 'EOF'
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 stop = self.onecmd(line)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 def onecmd(self, line):
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 line = string.strip(line)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 if not line:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 line = self.lastcmd
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 else:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 self.lastcmd = line
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 i, n = 0, len(line)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 while i < n and line[i] in self.identchars: i = i+1
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 cmd, arg = line[:i], string.strip(line[i:])
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 if cmd == '':
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 return self.default(line)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 else:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 try:
1086
db817f3a1c65 * change default line numbers for 'list' in pdb.py
Guido van Rossum <guido@python.org>
parents: 979
diff changeset
39 func = getattr(self, 'do_' + cmd)
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 except AttributeError:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 return self.default(line)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 return func(arg)
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 def default(self, line):
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 print '*** Unknown syntax:', line
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 def do_help(self, arg):
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 if arg:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # XXX check arg syntax
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 try:
1086
db817f3a1c65 * change default line numbers for 'list' in pdb.py
Guido van Rossum <guido@python.org>
parents: 979
diff changeset
51 func = getattr(self, 'help_' + arg)
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 except:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 print '*** No help on', `arg`
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 return
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 func()
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 else:
979
3c55e612a6fc Module getattr doesn't exist any more, it's now called newdir.
Guido van Rossum <guido@python.org>
parents: 650
diff changeset
57 import newdir
1315
acdc0b9a6c78 * aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents: 1086
diff changeset
58 names = newdir.dir(self.__class__)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
59 cmds_doc = []
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
60 cmds_undoc = []
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
61 help = {}
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
62 for name in names:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
63 if name[:5] == 'help_':
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
64 help[name[5:]]=1
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 for name in names:
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 if name[:3] == 'do_':
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
67 cmd=name[3:]
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
68 if help.has_key(cmd):
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
69 cmds_doc.append(cmd)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
70 del help[cmd]
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
71 else:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
72 cmds_undoc.append(cmd)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
73 print
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
74 self.print_topics("Documented commands (type help " \
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
75 "<topic>):",cmds_doc, 15, 80)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
76 self.print_topics("Miscellaneous help topics:",
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
77 help.keys(), 15, 80)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
78 self.print_topics("Undocumented commands:",
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
79 cmds_undoc, 15, 80)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
80
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
81 def print_topics(self, header, cmds, cmdlen, maxcol):
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
82 if cmds:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
83 print header;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
84 print "="*len(header)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
85 (cmds_per_line,junk)=divmod(maxcol,cmdlen)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
86 col=cmds_per_line
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
87 for cmd in cmds:
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
88 if col==0: print
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
89 print (("%-"+`cmdlen`+"s") % cmd),
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
90 col = (col+1) % cmds_per_line
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
91 print "\n"