Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
a11ccccd
Kaydet (Commit)
a11ccccd
authored
Eki 06, 1997
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
The usual (and some new modules).
üst
d5754802
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1011 additions
and
285 deletions
+1011
-285
dsa.py
Lib/dos-8x3/dsa.py
+221
-0
exceptio.py
Lib/dos-8x3/exceptio.py
+155
-0
mimetype.py
Lib/dos-8x3/mimetype.py
+190
-0
rlcomple.py
Lib/dos-8x3/rlcomple.py
+108
-0
sitecust.py
Lib/dos-8x3/sitecust.py
+2
-0
socketse.py
Lib/dos-8x3/socketse.py
+1
-2
test_exc.py
Lib/dos-8x3/test_exc.py
+6
-1
test_ima.py
Lib/dos-8x3/test_ima.py
+6
-1
test_opc.py
Lib/dos-8x3/test_opc.py
+10
-3
test_rgb.py
Lib/dos-8x3/test_rgb.py
+6
-1
test_rot.py
Lib/dos-8x3/test_rot.py
+1
-1
test_soc.py
Lib/dos-8x3/test_soc.py
+2
-1
test_tim.py
Lib/dos-8x3/test_tim.py
+5
-2
test_unp.py
Lib/dos-8x3/test_unp.py
+131
-0
test_zli.py
Lib/dos-8x3/test_zli.py
+145
-0
tracebac.py
Lib/dos-8x3/tracebac.py
+21
-3
whatsoun.py
Lib/dos-8x3/whatsoun.py
+1
-270
No files found.
Lib/dos-8x3/dsa.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
#
# DSA.py : Stupid name. Should really be called qNEW.py or something.
# Suggestions for a better name would be welcome.
#
# Maintained by A.M. Kuchling (amk@magnet.com)
# Date: 1997/09/03
#
# Distribute and use freely; there are no restrictions on further
# dissemination and usage except those imposed by the laws of your
# country of residence.
#
# TODO :
# Change the name
# Add more comments and docstrings
# Write documentation
# Add better RNG (?)
import
types
,
md5
error
=
'DSA module error'
def
RandomNumber
(
N
,
randfunc
):
"Get an N-bit random number"
str
=
randfunc
(
N
/
8
)
char
=
ord
(
randfunc
(
1
))
>>
(
8
-
(
N
%
8
))
return
Str2Int
(
chr
(
char
)
+
str
)
def
Int2Str
(
n
):
"Convert an integer to a string form"
s
=
''
while
n
>
0
:
s
=
chr
(
n
&
255
)
+
s
n
=
n
>>
8
return
s
def
Str2Int
(
s
):
"Convert a string to a long integer"
if
type
(
s
)
!=
types
.
StringType
:
return
s
# Integers will be left alone
return
reduce
(
lambda
x
,
y
:
x
*
256
+
ord
(
y
),
s
,
0L
)
def
getPrime
(
N
,
randfunc
):
"Find a prime number measuring N bits"
number
=
RandomNumber
(
N
,
randfunc
)
|
1
while
(
not
isPrime
(
number
)):
number
=
number
+
2
return
number
sieve
=
[
2
,
3
,
5
,
7
,
11
,
13
,
17
,
19
,
23
,
29
,
31
,
37
,
41
]
def
isPrime
(
N
):
"""Test if a number N is prime, using a simple sieve check,
followed by a more elaborate Rabin-Miller test."""
for
i
in
sieve
:
if
(
N
%
i
)
==
0
:
return
0
N1
=
N
-
1L
;
n
=
1L
while
(
n
<
N
):
n
=
n
<<
1L
# Compute number of bits in N
for
j
in
sieve
:
a
=
long
(
j
)
;
d
=
1L
;
t
=
n
while
(
t
):
# Iterate over the bits in N1
x
=
(
d
*
d
)
%
N
if
x
==
1L
and
d
!=
1L
and
d
!=
N1
:
return
0
# Square root of 1 found
if
N1
&
t
:
d
=
(
x
*
a
)
%
N
else
:
d
=
x
t
=
t
>>
1L
if
d
!=
1L
:
return
0
return
1
class
DSAobj
:
def
size
(
self
):
"Return the max. number of bits that can be handled by this key"
bits
,
power
=
0
,
1L
while
(
power
<
self
.
p
):
bits
,
power
=
bits
+
1
,
power
<<
1
return
bits
-
1
def
hasprivate
(
self
):
"""Return a Boolean denoting whether the object contains private components"""
if
hasattr
(
self
,
'x'
):
return
1
else
:
return
0
def
cansign
(
self
):
return
self
.
hasprivate
()
def
canencrypt
(
self
):
return
0
def
publickey
(
self
):
new
=
DSAobj
()
for
i
in
'pqgy'
:
setattr
(
new
,
i
,
getattr
(
self
,
i
))
return
new
def
_sign
(
self
,
M
,
K
):
if
(
self
.
q
<=
K
):
raise
error
,
'K is greater than q'
r
=
pow
(
self
.
g
,
K
,
self
.
p
)
%
self
.
q
s
=
(
K
-
(
r
*
M
*
self
.
x
%
self
.
q
))
%
self
.
q
return
(
r
,
s
)
def
_verify
(
self
,
M
,
sig
):
r
,
s
=
sig
if
r
<=
0
or
r
>=
self
.
q
or
s
<=
0
or
s
>=
self
.
q
:
return
0
v1
=
pow
(
self
.
g
,
s
,
self
.
p
)
v2
=
pow
(
self
.
y
,
M
*
r
,
self
.
p
)
v
=
((
v1
*
v2
)
%
self
.
p
)
v
=
v
%
self
.
q
if
v
==
r
:
return
1
return
0
def
sign
(
self
,
M
,
K
):
if
(
not
self
.
hasprivate
()):
raise
error
,
'Private key not available in this object'
if
type
(
M
)
==
types
.
StringType
:
M
=
Str2Int
(
M
)
if
type
(
K
)
==
types
.
StringType
:
K
=
Str2Int
(
K
)
return
self
.
_sign
(
M
,
K
)
def
verify
(
self
,
M
,
signature
):
if
type
(
M
)
==
types
.
StringType
:
M
=
Str2Int
(
M
)
return
self
.
_verify
(
M
,
signature
)
validate
=
verify
def
generate
(
self
,
L
,
randfunc
,
progress_func
=
None
):
"""Generate a private key with L bits"""
HASHBITS
=
128
# Number of bits in the hashing algorithm used
# (128 for MD5; change to 160 for SHA)
if
L
<
512
:
raise
error
,
'Key length <512 bits'
# Generate string S and prime q
if
progress_func
:
apply
(
progress_func
,
(
'p,q
\n
'
,))
while
(
1
):
self
.
q
=
getPrime
(
160
,
randfunc
)
S
=
Int2Str
(
self
.
q
)
n
=
(
L
-
1
)
/
HASHBITS
C
,
N
,
V
=
0
,
2
,
{}
# b=(self.q >> 5) & 15
b
=
(
L
-
1
)
%
HASHBITS
powb
=
pow
(
long
(
2
),
b
)
powL1
=
pow
(
long
(
2
),
L
-
1
)
while
C
<
4096
:
for
k
in
range
(
0
,
n
+
1
):
V
[
k
]
=
Str2Int
(
md5
.
new
(
S
+
str
(
N
)
+
str
(
k
))
.
digest
())
W
=
V
[
n
]
%
powb
for
k
in
range
(
n
-
1
,
-
1
,
-
1
):
W
=
(
W
<<
long
(
HASHBITS
)
)
+
V
[
k
]
X
=
W
+
powL1
p
=
X
-
(
X
%
(
2
*
self
.
q
)
-
1
)
if
powL1
<=
p
and
isPrime
(
p
):
break
C
,
N
=
C
+
1
,
N
+
n
+
1
if
C
<
4096
:
break
if
progress_func
:
apply
(
progress_func
,
(
'4096 multiples failed
\n
'
,)
)
self
.
p
=
p
power
=
(
p
-
1
)
/
self
.
q
if
progress_func
:
apply
(
progress_func
,
(
'h,g
\n
'
,))
while
(
1
):
h
=
Str2Int
(
randfunc
(
L
))
%
(
p
-
1
)
g
=
pow
(
h
,
power
,
p
)
if
1
<
h
<
p
-
1
and
g
>
1
:
break
self
.
g
=
g
if
progress_func
:
apply
(
progress_func
,
(
'x,y
\n
'
,))
while
(
1
):
x
=
Str2Int
(
randfunc
(
20
))
if
0
<
x
<
self
.
q
:
break
self
.
x
,
self
.
y
=
x
,
pow
(
g
,
x
,
p
)
return
self
object
=
DSAobj
# XXX this random number generation function sucks, since it isn't
# cryptographically strong! But it'll do for this first release...
def
randfunc
(
N
):
import
os
,
string
if
string
.
lower
(
os
.
uname
()[
0
])
==
'linux'
:
# On Linux, use /dev/urandom
f
=
open
(
'/dev/urandom'
,
'r'
)
return
f
.
read
(
N
)
else
:
import
time
s
=
""
while
len
(
s
)
<
N
:
rand
=
md5
.
new
(
str
(
time
.
time
()))
.
digest
()
s
=
s
+
rand
return
s
[
0
:
N
]
if
__name__
==
'__main__'
:
import
sys
,
string
BITS
=
512
if
len
(
sys
.
argv
)
>
1
:
BITS
=
string
.
atoi
(
sys
.
argv
[
1
])
print
' Generating'
,
BITS
,
'bit key'
key
=
DSAobj
()
key
.
generate
(
BITS
,
randfunc
,
sys
.
stdout
.
write
)
print
' Key data: (the private key is x)'
for
i
in
'xygqp'
:
print
'
\t
'
,
i
,
':'
,
hex
(
getattr
(
key
,
i
))
plaintext
=
"Hello"
if
key
.
cansign
():
print
' Signature test'
print
"Plaintext:"
,
plaintext
K
=
getPrime
(
30
,
randfunc
)
signature
=
key
.
sign
(
plaintext
,
K
)
print
"Signature:"
,
signature
result
=
key
.
verify
(
plaintext
,
signature
)
if
not
result
:
print
" Sig. verification failed when it should have succeeded"
else
:
print
'Signature verified'
# Test on a mangled plaintext
result
=
key
.
verify
(
plaintext
[:
-
1
],
signature
)
if
result
:
print
" Sig. verification succeeded when it should have failed"
# Change a single bit in the plaintext
badtext
=
plaintext
[:
-
3
]
+
chr
(
1
^
ord
(
plaintext
[
-
3
])
)
+
plaintext
[
-
3
:]
result
=
key
.
verify
(
badtext
,
signature
)
if
result
:
print
" Sig. verification succeeded when it should have failed"
print
'Removing private key data'
pubonly
=
key
.
publickey
()
result
=
pubonly
.
verify
(
plaintext
,
signature
)
if
not
result
:
print
" Sig. verification failed when it should have succeeded"
else
:
print
'Signature verified'
Lib/dos-8x3/exceptio.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
"""Class based built-in exception hierarchy.
This is a new feature whereby all the standard built-in exceptions,
traditionally string objects, are replaced with classes. This gives
Python's exception handling mechanism a more object-oriented feel.
Most existing code should continue to work with class based
exceptions. Some tricky uses of IOError may break, but the most
common uses should work.
To disable this feature, start the Python executable with the -X option.
Here is a rundown of the class hierarchy. You can change this by
editing this file, but it isn't recommended. The classes with a `*'
are new with this feature. They are defined as tuples containing the
derived exceptions when string-based exceptions are used.
Exception(*)
|
+-- StandardError(*)
|
+-- SystemExit
+-- KeyboardInterrupt
+-- ImportError
+-- IOError
+-- EOFError
+-- RuntimeError
+-- NameError
+-- AttributeError
+-- SyntaxError
+-- TypeError
+-- AssertionError
+-- LookupError(*)
| |
| +-- IndexError
| +-- KeyError
|
+-- ArithmeticError(*)
| |
| +-- OverflowError
| +-- ZeroDivisionError
| +-- FloatingPointError
|
+-- ValueError
+-- SystemError
+-- MemoryError
"""
class
Exception
:
def
__init__
(
self
,
*
args
):
self
.
args
=
args
def
__str__
(
self
):
if
not
self
.
args
:
return
''
elif
len
(
self
.
args
)
==
1
:
return
str
(
self
.
args
[
0
])
else
:
return
str
(
self
.
args
)
def
__getitem__
(
self
,
i
):
return
self
.
args
[
i
]
class
StandardError
(
Exception
):
pass
class
SyntaxError
(
StandardError
):
filename
=
lineno
=
offset
=
text
=
None
msg
=
""
def
__init__
(
self
,
*
args
):
self
.
args
=
args
if
len
(
self
.
args
)
>=
1
:
self
.
msg
=
self
.
args
[
0
]
if
len
(
self
.
args
)
==
2
:
info
=
self
.
args
[
1
]
try
:
self
.
filename
,
self
.
lineno
,
self
.
offset
,
self
.
text
=
info
except
:
pass
def
__str__
(
self
):
return
str
(
self
.
msg
)
class
IOError
(
StandardError
):
def
__init__
(
self
,
*
args
):
self
.
args
=
args
self
.
errno
=
None
self
.
strerror
=
None
if
len
(
args
)
==
2
:
# common case: PyErr_SetFromErrno()
self
.
errno
=
args
[
0
]
self
.
strerror
=
args
[
1
]
class
RuntimeError
(
StandardError
):
pass
class
SystemError
(
StandardError
):
pass
class
EOFError
(
StandardError
):
pass
class
ImportError
(
StandardError
):
pass
class
TypeError
(
StandardError
):
pass
class
ValueError
(
StandardError
):
pass
class
KeyboardInterrupt
(
StandardError
):
pass
class
AssertionError
(
StandardError
):
pass
class
ArithmeticError
(
StandardError
):
pass
class
OverflowError
(
ArithmeticError
):
pass
class
FloatingPointError
(
ArithmeticError
):
pass
class
ZeroDivisionError
(
ArithmeticError
):
pass
class
LookupError
(
StandardError
):
pass
class
IndexError
(
LookupError
):
pass
class
KeyError
(
LookupError
):
pass
class
AttributeError
(
StandardError
):
pass
class
NameError
(
StandardError
):
pass
class
MemoryError
(
StandardError
):
pass
class
SystemExit
(
Exception
):
def
__init__
(
self
,
*
args
):
self
.
args
=
args
if
len
(
args
)
==
0
:
self
.
code
=
None
elif
len
(
args
)
==
1
:
self
.
code
=
args
[
0
]
else
:
self
.
code
=
args
Lib/dos-8x3/mimetype.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
"""Guess the MIME type of a file.
This module defines one useful function:
guess_type(url) -- guess the MIME type and encoding of a URL.
It also contains the following, for tuning the behavior:
Data:
knownfiles -- list of files to parse
inited -- flag set when init() has been called
suffixes_map -- dictionary mapping suffixes to suffixes
encodings_map -- dictionary mapping suffixes to encodings
types_map -- dictionary mapping suffixes to types
Functions:
init([files]) -- parse a list of files, default knownfiles
read_mime_types(file) -- parse one file, return a dictionary or None
"""
import
string
import
posixpath
knownfiles
=
[
"/usr/local/etc/httpd/conf/mime.types"
,
"/usr/local/lib/netscape/mime.types"
,
]
inited
=
0
def
guess_type
(
url
):
"""Guess the type of a file based on its URL.
Return value is a tuple (type, encoding) where type is None if the
type can't be guessed (no or unknown suffix) or a string of the
form type/subtype, usable for a MIME Content-type header; and
encoding is None for no encoding or the name of the program used
to encode (e.g. compress or gzip). The mappings are table
driven. Encoding suffixes are case sensitive; type suffixes are
first tried case sensitive, then case insensitive.
The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped
to ".tar.gz". (This is table-driven too, using the dictionary
suffixes_map).
"""
if
not
inited
:
init
()
base
,
ext
=
posixpath
.
splitext
(
url
)
while
suffix_map
.
has_key
(
ext
):
base
,
ext
=
posixpath
.
splitext
(
base
+
suffix_map
[
ext
])
if
encodings_map
.
has_key
(
ext
):
encoding
=
encodings_map
[
ext
]
base
,
ext
=
posixpath
.
splitext
(
base
)
else
:
encoding
=
None
if
types_map
.
has_key
(
ext
):
return
types_map
[
ext
],
encoding
elif
types_map
.
has_key
(
string
.
lower
(
ext
)):
return
types_map
[
string
.
lower
(
ext
)],
encoding
else
:
return
None
,
encoding
def
init
(
files
=
None
):
global
inited
for
file
in
files
or
knownfiles
:
s
=
read_mime_types
(
file
)
if
s
:
for
key
,
value
in
s
.
items
():
types_map
[
key
]
=
value
inited
=
1
def
read_mime_types
(
file
):
try
:
f
=
open
(
file
)
except
IOError
:
return
None
map
=
{}
while
1
:
line
=
f
.
readline
()
if
not
line
:
break
words
=
string
.
split
(
line
)
for
i
in
range
(
len
(
words
)):
if
words
[
i
][
0
]
==
'#'
:
del
words
[
i
:]
break
if
not
words
:
continue
type
,
suffixes
=
words
[
0
],
words
[
1
:]
for
suff
in
suffixes
:
map
[
'.'
+
suff
]
=
type
f
.
close
()
return
map
suffix_map
=
{
'.tgz'
:
'.tar.gz'
,
'.taz'
:
'.tar.gz'
,
'.tz'
:
'.tar.gz'
,
}
encodings_map
=
{
'.gz'
:
'gzip'
,
'.Z'
:
'compress'
,
}
types_map
=
{
'.a'
:
'application/octet-stream'
,
'.ai'
:
'application/postscript'
,
'.aif'
:
'audio/x-aiff'
,
'.aifc'
:
'audio/x-aiff'
,
'.aiff'
:
'audio/x-aiff'
,
'.au'
:
'audio/basic'
,
'.avi'
:
'video/x-msvideo'
,
'.bcpio'
:
'application/x-bcpio'
,
'.bin'
:
'application/octet-stream'
,
'.cdf'
:
'application/x-netcdf'
,
'.cpio'
:
'application/x-cpio'
,
'.csh'
:
'application/x-csh'
,
'.dll'
:
'application/octet-stream'
,
'.dvi'
:
'application/x-dvi'
,
'.exe'
:
'application/octet-stream'
,
'.eps'
:
'application/postscript'
,
'.etx'
:
'text/x-setext'
,
'.gif'
:
'image/gif'
,
'.gtar'
:
'application/x-gtar'
,
'.hdf'
:
'application/x-hdf'
,
'.htm'
:
'text/html'
,
'.html'
:
'text/html'
,
'.ief'
:
'image/ief'
,
'.jpe'
:
'image/jpeg'
,
'.jpeg'
:
'image/jpeg'
,
'.jpg'
:
'image/jpeg'
,
'.latex'
:
'application/x-latex'
,
'.man'
:
'application/x-troff-man'
,
'.me'
:
'application/x-troff-me'
,
'.mif'
:
'application/x-mif'
,
'.mov'
:
'video/quicktime'
,
'.movie'
:
'video/x-sgi-movie'
,
'.mpe'
:
'video/mpeg'
,
'.mpeg'
:
'video/mpeg'
,
'.mpg'
:
'video/mpeg'
,
'.ms'
:
'application/x-troff-ms'
,
'.nc'
:
'application/x-netcdf'
,
'.o'
:
'application/octet-stream'
,
'.obj'
:
'application/octet-stream'
,
'.oda'
:
'application/oda'
,
'.pbm'
:
'image/x-portable-bitmap'
,
'.pdf'
:
'application/pdf'
,
'.pgm'
:
'image/x-portable-graymap'
,
'.pnm'
:
'image/x-portable-anymap'
,
'.png'
:
'image/png'
,
'.ppm'
:
'image/x-portable-pixmap'
,
'.py'
:
'text/x-python'
,
'.pyc'
:
'application/x-python-code'
,
'.ps'
:
'application/postscript'
,
'.qt'
:
'video/quicktime'
,
'.ras'
:
'image/x-cmu-raster'
,
'.rgb'
:
'image/x-rgb'
,
'.roff'
:
'application/x-troff'
,
'.rtf'
:
'application/rtf'
,
'.rtx'
:
'text/richtext'
,
'.sgm'
:
'text/x-sgml'
,
'.sgml'
:
'text/x-sgml'
,
'.sh'
:
'application/x-sh'
,
'.shar'
:
'application/x-shar'
,
'.snd'
:
'audio/basic'
,
'.so'
:
'application/octet-stream'
,
'.src'
:
'application/x-wais-source'
,
'.sv4cpio'
:
'application/x-sv4cpio'
,
'.sv4crc'
:
'application/x-sv4crc'
,
'.t'
:
'application/x-troff'
,
'.tar'
:
'application/x-tar'
,
'.tcl'
:
'application/x-tcl'
,
'.tex'
:
'application/x-tex'
,
'.texi'
:
'application/x-texinfo'
,
'.texinfo'
:
'application/x-texinfo'
,
'.tif'
:
'image/tiff'
,
'.tiff'
:
'image/tiff'
,
'.tr'
:
'application/x-troff'
,
'.tsv'
:
'text/tab-separated-values'
,
'.txt'
:
'text/plain'
,
'.ustar'
:
'application/x-ustar'
,
'.wav'
:
'audio/x-wav'
,
'.xbm'
:
'image/x-xbitmap'
,
'.xpm'
:
'image/x-xpixmap'
,
'.xwd'
:
'image/x-xwindowdump'
,
'.zip'
:
'application/zip'
,
}
Lib/dos-8x3/rlcomple.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
"""Word completion for GNU readline 2.0.
This requires the latest extension to the readline module (the
set_completer() function). When completing a simple identifier, it
completes keywords, built-ins and globals in __main__; when completing
NAME.NAME..., it evaluates (!) the expression up to the last dot and
completes its attributes.
It's very cool to do "import string" type "string.", hit the
completion key (twice), and see the list of names defined by the
string module!
Tip: to use the tab key as the completion key, call
readline.parse_and_bind("tab: complete")
Notes:
- Exceptions raised by the completer function are *ignored* (and
generally cause the completion to fail). This is a feature -- since
readline sets the tty device in raw (or cbreak) mode, printing a
traceback wouldn't work well without some complicated hoopla to save,
reset and restore the tty state.
- The evaluation of the NAME.NAME... form may cause arbitrary
application defined code to be executed if an object with a
__getattr__ hook is found. Since it is the responsibility of the
application (or the user) to enable this feature, I consider this an
acceptable risk. More complicated expressions (e.g. function calls or
indexing operations) are *not* evaluated.
- GNU readline is also used by the built-in functions input() and
raw_input(), and thus these also benefit/suffer from the completer
features. Clearly an interactive application can benefit by
specifying its own completer function and using raw_input() for all
its input.
- When the original stdin is not a tty device, GNU readline is never
used, and this module (and the readline module) are silently inactive.
"""
import
readline
import
keyword
import
__builtin__
import
__main__
import
string
import
re
import
traceback
class
Completer
:
def
complete
(
self
,
text
,
state
):
"""Return the next possible completion for 'text'.
This is called successively with state == 0, 1, 2, ... until it
returns None. The completion should begin with 'text'.
"""
if
state
==
0
:
if
"."
in
text
:
self
.
matches
=
self
.
attr_matches
(
text
)
else
:
self
.
matches
=
self
.
global_matches
(
text
)
return
self
.
matches
[
state
]
def
global_matches
(
self
,
text
):
"""Compute matches when text is a simple name.
Return a list of all keywords, built-in functions and names
currently defines in __main__ that match.
"""
matches
=
[]
n
=
len
(
text
)
for
list
in
[
keyword
.
kwlist
,
__builtin__
.
__dict__
.
keys
(),
__main__
.
__dict__
.
keys
()]:
for
word
in
list
:
if
word
[:
n
]
==
text
:
matches
.
append
(
word
)
return
matches
def
attr_matches
(
self
,
text
):
"""Compute matches when text contains a dot.
Assuming the text is of the form NAME.NAME....[NAME], and is
evaluabable in the globals of __main__, it will be evaluated
and its attributes (as revealed by dir()) are used as possible
completions.
WARNING: this can still invoke arbitrary C code, if an object
with a __getattr__ hook is evaluated.
"""
m
=
re
.
match
(
r"(\w+(\.\w+)*)\.(\w*)"
,
text
)
if
not
m
:
return
expr
,
attr
=
m
.
group
(
1
,
3
)
words
=
dir
(
eval
(
expr
,
__main__
.
__dict__
))
matches
=
[]
n
=
len
(
attr
)
for
word
in
words
:
if
word
[:
n
]
==
attr
:
matches
.
append
(
"
%
s.
%
s"
%
(
expr
,
word
))
return
matches
readline
.
set_completer
(
Completer
()
.
complete
)
Lib/dos-8x3/sitecust.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
import
sys
sys
.
modules
[
'ni'
]
=
sys
.
modules
[
__name__
]
Lib/dos-8x3/socketse.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -248,12 +248,11 @@ class TCPServer:
The default is to print a traceback and continue.
"""
exc
,
value
,
tb
=
sys
.
exc_type
,
sys
.
exc_value
,
sys
.
exc_traceback
print
'-'
*
40
print
'Exception happened during processing of request from'
,
print
client_address
import
traceback
traceback
.
print_exc
eption
(
exc
,
value
,
tb
)
traceback
.
print_exc
(
)
print
'-'
*
40
...
...
Lib/dos-8x3/test_exc.py
Dosyayı görüntüle @
a11ccccd
# Python test set -- part 5, built-in exceptions
from
test_support
import
*
from
types
import
ClassType
print
'5. Built-in exceptions'
# XXX This is not really enough, each *operation* should be tested!
def
r
(
name
):
print
name
def
r
(
thing
):
if
type
(
thing
)
==
ClassType
:
print
thing
.
__name__
else
:
print
thing
r
(
AttributeError
)
import
sys
...
...
Lib/dos-8x3/test_ima.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -155,7 +155,12 @@ def get_qualified_path(name):
""" return a more qualified path to name"""
import
sys
import
os
for
dir
in
sys
.
path
:
path
=
sys
.
path
try
:
path
=
[
os
.
path
.
dirname
(
__file__
)]
+
path
except
NameError
:
pass
for
dir
in
path
:
fullname
=
os
.
path
.
join
(
dir
,
name
)
if
os
.
path
.
exists
(
fullname
):
return
fullname
...
...
Lib/dos-8x3/test_opc.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -28,6 +28,9 @@ print '2.2 raise class exceptions'
class
AClass
:
pass
class
BClass
(
AClass
):
pass
class
CClass
:
pass
class
DClass
(
AClass
):
def
__init__
(
self
,
ignore
):
pass
try
:
raise
AClass
()
except
:
pass
...
...
@@ -46,18 +49,22 @@ a = AClass()
b
=
BClass
()
try
:
raise
AClass
,
b
except
BClass
,
v
:
raise
TestFailed
except
AClass
,
v
:
except
BClass
,
v
:
if
v
!=
b
:
raise
TestFailed
else
:
raise
TestFailed
try
:
raise
b
except
AClass
,
v
:
if
v
!=
b
:
raise
TestFailed
# not enough arguments
try
:
raise
BClass
,
a
except
TypeError
:
pass
try
:
raise
DClass
,
a
except
DClass
,
v
:
if
not
isinstance
(
v
,
DClass
):
raise
TestFailed
print
'2.3 comparing function objects'
...
...
Lib/dos-8x3/test_rgb.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -11,7 +11,12 @@ print 'RGBimg test suite:'
def
findfile
(
file
):
if
os
.
path
.
isabs
(
file
):
return
file
import
sys
for
dn
in
sys
.
path
:
path
=
sys
.
path
try
:
path
=
[
os
.
path
.
dirname
(
__file__
)]
+
path
except
NameError
:
pass
for
dn
in
path
:
fn
=
os
.
path
.
join
(
dn
,
file
)
if
os
.
path
.
exists
(
fn
):
return
fn
return
file
...
...
Lib/dos-8x3/test_rot.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -9,7 +9,7 @@ B = 'cheese shop'
a
=
r
.
encrypt
(
A
)
print
`a`
b
=
r
.
encryptmore
(
B
)
print
b
print
`b`
A1
=
r
.
decrypt
(
a
)
print
A1
...
...
Lib/dos-8x3/test_soc.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -20,7 +20,8 @@ def missing_ok(str):
except
AttributeError
:
pass
print
socket
.
error
try
:
raise
socket
.
error
except
socket
.
error
:
print
"socket.error"
socket
.
AF_INET
...
...
Lib/dos-8x3/test_tim.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -16,8 +16,11 @@ tt = time.gmtime(t)
for
directive
in
(
'a'
,
'A'
,
'b'
,
'B'
,
'c'
,
'd'
,
'H'
,
'I'
,
'j'
,
'm'
,
'M'
,
'p'
,
'S'
,
'U'
,
'w'
,
'W'
,
'x'
,
'X'
,
'y'
,
'Y'
,
'Z'
,
'
%
'
):
format
=
'
%
'
+
directive
time
.
strftime
(
format
,
tt
)
format
=
'
%
'
+
directive
try
:
time
.
strftime
(
format
,
tt
)
except
ValueError
:
print
'conversion specifier:'
,
format
,
' failed.'
time
.
timezone
time
.
tzname
...
...
Lib/dos-8x3/test_unp.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
from
test_support
import
*
t
=
(
1
,
2
,
3
)
l
=
[
4
,
5
,
6
]
class
Seq
:
def
__getitem__
(
self
,
i
):
if
i
>=
0
and
i
<
3
:
return
i
raise
IndexError
a
=
-
1
b
=
-
1
c
=
-
1
# unpack tuple
if
verbose
:
print
'unpack tuple'
a
,
b
,
c
=
t
if
a
<>
1
or
b
<>
2
or
c
<>
3
:
raise
TestFailed
# unpack list
if
verbose
:
print
'unpack list'
a
,
b
,
c
=
l
if
a
<>
4
or
b
<>
5
or
c
<>
6
:
raise
TestFailed
# unpack implied tuple
if
verbose
:
print
'unpack implied tuple'
a
,
b
,
c
=
7
,
8
,
9
if
a
<>
7
or
b
<>
8
or
c
<>
9
:
raise
TestFailed
# unpack string... fun!
if
verbose
:
print
'unpack string'
a
,
b
,
c
=
'one'
if
a
<>
'o'
or
b
<>
'n'
or
c
<>
'e'
:
raise
TestFailed
# unpack generic sequence
if
verbose
:
print
'unpack sequence'
a
,
b
,
c
=
Seq
()
if
a
<>
0
or
b
<>
1
or
c
<>
2
:
raise
TestFailed
# now for some failures
# unpacking non-sequence
if
verbose
:
print
'unpack non-sequence'
try
:
a
,
b
,
c
=
7
raise
TestFailed
except
TypeError
:
pass
# unpacking tuple of wrong size
if
verbose
:
print
'unpack tuple wrong size'
try
:
a
,
b
=
t
raise
TestFailed
except
ValueError
:
pass
# unpacking list of wrong size
if
verbose
:
print
'unpack list wrong size'
try
:
a
,
b
=
l
raise
TestFailed
except
ValueError
:
pass
# unpacking sequence too short
if
verbose
:
print
'unpack sequence too short'
try
:
a
,
b
,
c
,
d
=
Seq
()
raise
TestFailed
except
ValueError
:
pass
# unpacking sequence too long
if
verbose
:
print
'unpack sequence too long'
try
:
a
,
b
=
Seq
()
raise
TestFailed
except
ValueError
:
pass
# unpacking a sequence where the test for too long raises a different
# kind of error
BozoError
=
'BozoError'
class
BadSeq
:
def
__getitem__
(
self
,
i
):
if
i
>=
0
and
i
<
3
:
return
i
elif
i
==
3
:
raise
BozoError
else
:
raise
IndexError
# trigger code while not expecting an IndexError
if
verbose
:
print
'unpack sequence too long, wrong error'
try
:
a
,
b
,
c
,
d
,
e
=
BadSeq
()
raise
TestFailed
except
BozoError
:
pass
# trigger code while expecting an IndexError
if
verbose
:
print
'unpack sequence too short, wrong error'
try
:
a
,
b
,
c
=
BadSeq
()
raise
TestFailed
except
BozoError
:
pass
Lib/dos-8x3/test_zli.py
0 → 100644
Dosyayı görüntüle @
a11ccccd
import
zlib
import
sys
import
imp
import
string
t
=
imp
.
find_module
(
'test_zlib'
)
file
=
t
[
0
]
buf
=
file
.
read
()
*
8
file
.
close
()
# test the chucksums
print
zlib
.
crc32
(
'penguin'
),
zlib
.
crc32
(
'penguin'
,
1
)
print
zlib
.
adler32
(
'penguin'
),
zlib
.
adler32
(
'penguin'
,
1
)
# make sure we generate some expected errors
try
:
zlib
.
compress
(
'ERROR'
,
zlib
.
MAX_WBITS
+
1
)
except
zlib
.
error
,
msg
:
print
"expecting"
,
msg
try
:
zlib
.
compressobj
(
1
,
8
,
0
)
except
ValueError
,
msg
:
print
"expecting"
,
msg
try
:
zlib
.
decompressobj
(
0
)
except
ValueError
,
msg
:
print
"expecting"
,
msg
x
=
zlib
.
compress
(
buf
)
y
=
zlib
.
decompress
(
x
)
if
buf
!=
y
:
print
"normal compression/decompression failed"
else
:
print
"normal compression/decompression succeeded"
buf
=
buf
*
16
co
=
zlib
.
compressobj
(
8
,
8
,
-
15
)
x1
=
co
.
compress
(
buf
)
x2
=
co
.
flush
()
x
=
x1
+
x2
dc
=
zlib
.
decompressobj
(
-
15
)
y1
=
dc
.
decompress
(
x
)
y2
=
dc
.
flush
()
y
=
y1
+
y2
if
buf
!=
y
:
print
"compress/decompression obj failed"
else
:
print
"compress/decompression obj succeeded"
co
=
zlib
.
compressobj
(
2
,
8
,
-
12
,
9
,
1
)
bufs
=
[]
for
i
in
range
(
0
,
len
(
buf
),
256
):
bufs
.
append
(
co
.
compress
(
buf
[
i
:
i
+
256
]))
bufs
.
append
(
co
.
flush
())
combuf
=
string
.
join
(
bufs
,
''
)
decomp1
=
zlib
.
decompress
(
combuf
,
-
12
,
-
5
)
if
decomp1
!=
buf
:
print
"decompress with init options failed"
else
:
print
"decompress with init options succeeded"
deco
=
zlib
.
decompressobj
(
-
12
)
bufs
=
[]
for
i
in
range
(
0
,
len
(
combuf
),
128
):
bufs
.
append
(
deco
.
decompress
(
combuf
[
i
:
i
+
128
]))
bufs
.
append
(
deco
.
flush
())
decomp2
=
string
.
join
(
buf
,
''
)
if
decomp2
!=
buf
:
print
"decompressobj with init options failed"
else
:
print
"decompressobj with init options succeeded"
def
ignore
():
"""An empty function with a big string.
Make the compression algorithm work a little harder.
"""
"""
LAERTES
O, fear me not.
I stay too long: but here my father comes.
Enter POLONIUS
A double blessing is a double grace,
Occasion smiles upon a second leave.
LORD POLONIUS
Yet here, Laertes! aboard, aboard, for shame!
The wind sits in the shoulder of your sail,
And you are stay'd for. There; my blessing with thee!
And these few precepts in thy memory
See thou character. Give thy thoughts no tongue,
Nor any unproportioned thought his act.
Be thou familiar, but by no means vulgar.
Those friends thou hast, and their adoption tried,
Grapple them to thy soul with hoops of steel;
But do not dull thy palm with entertainment
Of each new-hatch'd, unfledged comrade. Beware
Of entrance to a quarrel, but being in,
Bear't that the opposed may beware of thee.
Give every man thy ear, but few thy voice;
Take each man's censure, but reserve thy judgment.
Costly thy habit as thy purse can buy,
But not express'd in fancy; rich, not gaudy;
For the apparel oft proclaims the man,
And they in France of the best rank and station
Are of a most select and generous chief in that.
Neither a borrower nor a lender be;
For loan oft loses both itself and friend,
And borrowing dulls the edge of husbandry.
This above all: to thine ownself be true,
And it must follow, as the night the day,
Thou canst not then be false to any man.
Farewell: my blessing season this in thee!
LAERTES
Most humbly do I take my leave, my lord.
LORD POLONIUS
The time invites you; go; your servants tend.
LAERTES
Farewell, Ophelia; and remember well
What I have said to you.
OPHELIA
'Tis in my memory lock'd,
And you yourself shall keep the key of it.
LAERTES
Farewell.
"""
Lib/dos-8x3/tracebac.py
Dosyayı görüntüle @
a11ccccd
...
...
@@ -37,7 +37,7 @@ def print_tb(tb, limit=None, file=None):
n
=
0
while
tb
is
not
None
and
(
limit
is
None
or
n
<
limit
):
f
=
tb
.
tb_frame
lineno
=
tb
.
tb_lineno
lineno
=
tb
_lineno
(
tb
)
co
=
f
.
f_code
filename
=
co
.
co_filename
name
=
co
.
co_name
...
...
@@ -59,7 +59,7 @@ def extract_tb(tb, limit = None):
n
=
0
while
tb
is
not
None
and
(
limit
is
None
or
n
<
limit
):
f
=
tb
.
tb_frame
lineno
=
tb
.
tb_lineno
lineno
=
tb
_lineno
(
tb
)
co
=
f
.
f_code
filename
=
co
.
co_filename
name
=
co
.
co_name
...
...
@@ -169,7 +169,7 @@ def extract_stack(f=None, limit = None):
list
=
[]
n
=
0
while
f
is
not
None
and
(
limit
is
None
or
n
<
limit
):
lineno
=
f
.
f_lineno
lineno
=
f
.
f_lineno
# XXX Too bad if -O is used
co
=
f
.
f_code
filename
=
co
.
co_filename
name
=
co
.
co_name
...
...
@@ -181,3 +181,21 @@ def extract_stack(f=None, limit = None):
n
=
n
+
1
list
.
reverse
()
return
list
# Calculate the correct line number of the traceback given in tb (even
# with -O on).
# Coded by Marc-Andre Lemburg from the example of PyCode_Addr2Line()
# in compile.c.
def
tb_lineno
(
tb
):
c
=
tb
.
tb_frame
.
f_code
tab
=
c
.
co_lnotab
line
=
c
.
co_firstlineno
stopat
=
tb
.
tb_lasti
addr
=
0
for
i
in
range
(
0
,
len
(
tab
),
2
):
addr
=
addr
+
ord
(
tab
[
i
])
if
addr
>
stopat
:
break
line
=
line
+
ord
(
tab
[
i
+
1
])
return
line
Lib/dos-8x3/whatsoun.py
Dosyayı görüntüle @
a11ccccd
# This module contains several routines that help recognizing sound
# files.
#
# Function whathdr() recognizes various types of sound file headers.
# It understands almost all headers that SOX can decode.
#
# The return tuple contains the following items, in this order:
# - file type (as SOX understands it)
# - sampling rate (0 if unknown or hard to decode)
# - number of channels (0 if unknown or hard to decode)
# - number of frames in the file (-1 if unknown or hard to decode)
# - number of bits/sample, or 'U' for U-LAW, or 'A' for A-LAW
#
# If the file doesn't have a recognizable type, it returns None.
# If the file can't be opened, IOError is raised.
#
# To compute the total time, divide the number of frames by the
# sampling rate (a frame contains a sample for each channel).
#
# Function whatraw() calls the "whatsound" program and interprets its
# output. You'll have to guess the sampling rate by listening though!
#
# Function what() calls whathdr() and if it doesn't recognize the file
# then calls whatraw().
#
# Finally, the function test() is a simple main program that calls
# what() for all files mentioned on the argument list. For directory
# arguments it calls what() for all files in that directory. Default
# argument is "." (testing all files in the current directory). The
# option -r tells it to recurse down directories found inside
# explicitly given directories.
#
# The file structure is top-down except that the test program and its
# subroutine come last.
#------------------------------------------------------#
# Guess the type of any sound file, raw or with header #
#------------------------------------------------------#
def
what
(
filename
):
res
=
whathdr
(
filename
)
if
not
res
:
res
=
whatraw
(
filename
)
return
res
#-----------------------------#
# Guess the type of raw sound #
#-----------------------------#
def
whatraw
(
filename
):
# Assume it's always 1 channel, byte-sized samples
# Don't assume anything about the rate
import
os
from
stat
import
ST_SIZE
# XXX "whatsound" should be part of the distribution somehow...
cmd
=
'whatsound '
+
filename
+
' 2>/dev/null'
cmd
=
'PATH=$PATH:/ufs/guido/bin/sgi
\n
'
+
cmd
pipe
=
os
.
popen
(
cmd
,
'r'
)
data
=
pipe
.
read
()
sts
=
pipe
.
close
()
if
sts
:
return
None
if
data
[:
13
]
==
'-t raw -b -s '
:
type
=
'sb'
sample_size
=
8
elif
data
[:
13
]
==
'-t raw -b -u '
:
type
=
'ub'
sample_size
=
8
elif
data
[:
13
]
==
'-t raw -b -U '
:
type
=
'ul'
sample_size
=
'U'
else
:
return
None
try
:
frame_count
=
os
.
stat
(
filename
)[
ST_SIZE
]
except
IOError
:
frame_count
=
-
1
return
type
,
0
,
1
,
frame_count
,
sample_size
#-------------------------#
# Recognize sound headers #
#-------------------------#
def
whathdr
(
filename
):
f
=
open
(
filename
,
'r'
)
h
=
f
.
read
(
512
)
for
tf
in
tests
:
res
=
tf
(
h
,
f
)
if
res
:
return
res
return
None
#-----------------------------------#
# Subroutines per sound header type #
#-----------------------------------#
tests
=
[]
def
test_aifc
(
h
,
f
):
import
aifc
if
h
[:
4
]
<>
'FORM'
:
return
None
if
h
[
8
:
12
]
==
'AIFC'
:
fmt
=
'aifc'
elif
h
[
8
:
12
]
==
'AIFF'
:
fmt
=
'aiff'
else
:
return
None
f
.
seek
(
0
)
try
:
a
=
aifc
.
openfp
(
f
,
'r'
)
except
(
EOFError
,
aifc
.
Error
):
return
None
return
(
fmt
,
a
.
getframerate
(),
a
.
getnchannels
(),
\
a
.
getnframes
(),
8
*
a
.
getsampwidth
())
tests
.
append
(
test_aifc
)
def
test_au
(
h
,
f
):
if
h
[:
4
]
==
'.snd'
:
f
=
get_long_be
elif
h
[:
4
]
in
(
'
\0
ds.'
,
'dns.'
):
f
=
get_long_le
else
:
return
None
type
=
'au'
hdr_size
=
f
(
h
[
4
:
8
])
data_size
=
f
(
h
[
8
:
12
])
encoding
=
f
(
h
[
12
:
16
])
rate
=
f
(
h
[
16
:
20
])
nchannels
=
f
(
h
[
20
:
24
])
sample_size
=
1
# default
if
encoding
==
1
:
sample_bits
=
'U'
elif
encoding
==
2
:
sample_bits
=
8
elif
encoding
==
3
:
sample_bits
=
16
sample_size
=
2
else
:
sample_bits
=
'?'
frame_size
=
sample_size
*
nchannels
return
type
,
rate
,
nchannels
,
data_size
/
frame_size
,
sample_bits
tests
.
append
(
test_au
)
def
test_hcom
(
h
,
f
):
if
h
[
65
:
69
]
<>
'FSSD'
or
h
[
128
:
132
]
<>
'HCOM'
:
return
None
divisor
=
get_long_be
(
h
[
128
+
16
:
128
+
20
])
return
'hcom'
,
22050
/
divisor
,
1
,
-
1
,
8
tests
.
append
(
test_hcom
)
def
test_voc
(
h
,
f
):
if
h
[:
20
]
<>
'Creative Voice File
\032
'
:
return
None
sbseek
=
get_short_le
(
h
[
20
:
22
])
rate
=
0
if
0
<=
sbseek
<
500
and
h
[
sbseek
]
==
'
\1
'
:
ratecode
=
ord
(
h
[
sbseek
+
4
])
rate
=
int
(
1000000.0
/
(
256
-
ratecode
))
return
'voc'
,
rate
,
1
,
-
1
,
8
tests
.
append
(
test_voc
)
def
test_wav
(
h
,
f
):
# 'RIFF' <len> 'WAVE' 'fmt ' <len>
if
h
[:
4
]
<>
'RIFF'
or
h
[
8
:
12
]
<>
'WAVE'
or
h
[
12
:
16
]
<>
'fmt '
:
return
None
style
=
get_short_le
(
h
[
20
:
22
])
nchannels
=
get_short_le
(
h
[
22
:
24
])
rate
=
get_long_le
(
h
[
24
:
28
])
sample_bits
=
get_short_le
(
h
[
34
:
36
])
return
'wav'
,
rate
,
nchannels
,
-
1
,
sample_bits
tests
.
append
(
test_wav
)
def
test_8svx
(
h
,
f
):
if
h
[:
4
]
<>
'FORM'
or
h
[
8
:
12
]
<>
'8SVX'
:
return
None
# Should decode it to get #channels -- assume always 1
return
'8svx'
,
0
,
1
,
0
,
8
tests
.
append
(
test_8svx
)
def
test_sndt
(
h
,
f
):
if
h
[:
5
]
==
'SOUND'
:
nsamples
=
get_long_le
(
h
[
8
:
12
])
rate
=
get_short_le
(
h
[
20
:
22
])
return
'sndt'
,
rate
,
1
,
nsamples
,
8
tests
.
append
(
test_sndt
)
def
test_sndr
(
h
,
f
):
if
h
[:
2
]
==
'
\0\0
'
:
rate
=
get_short_le
(
h
[
2
:
4
])
if
4000
<=
rate
<=
25000
:
return
'sndr'
,
rate
,
1
,
-
1
,
8
tests
.
append
(
test_sndr
)
#---------------------------------------------#
# Subroutines to extract numbers from strings #
#---------------------------------------------#
def
get_long_be
(
s
):
return
(
ord
(
s
[
0
])
<<
24
)
|
(
ord
(
s
[
1
])
<<
16
)
|
(
ord
(
s
[
2
])
<<
8
)
|
ord
(
s
[
3
])
def
get_long_le
(
s
):
return
(
ord
(
s
[
3
])
<<
24
)
|
(
ord
(
s
[
2
])
<<
16
)
|
(
ord
(
s
[
1
])
<<
8
)
|
ord
(
s
[
0
])
def
get_short_be
(
s
):
return
(
ord
(
s
[
0
])
<<
8
)
|
ord
(
s
[
1
])
def
get_short_le
(
s
):
return
(
ord
(
s
[
1
])
<<
8
)
|
ord
(
s
[
0
])
#--------------------#
# Small test program #
#--------------------#
def
test
():
import
sys
recursive
=
0
if
sys
.
argv
[
1
:]
and
sys
.
argv
[
1
]
==
'-r'
:
del
sys
.
argv
[
1
:
2
]
recursive
=
1
try
:
if
sys
.
argv
[
1
:]:
testall
(
sys
.
argv
[
1
:],
recursive
,
1
)
else
:
testall
([
'.'
],
recursive
,
1
)
except
KeyboardInterrupt
:
sys
.
stderr
.
write
(
'
\n
[Interrupted]
\n
'
)
sys
.
exit
(
1
)
def
testall
(
list
,
recursive
,
toplevel
):
import
sys
import
os
for
filename
in
list
:
if
os
.
path
.
isdir
(
filename
):
print
filename
+
'/:'
,
if
recursive
or
toplevel
:
print
'recursing down:'
import
glob
names
=
glob
.
glob
(
os
.
path
.
join
(
filename
,
'*'
))
testall
(
names
,
recursive
,
0
)
else
:
print
'*** directory (use -r) ***'
else
:
print
filename
+
':'
,
sys
.
stdout
.
flush
()
try
:
print
what
(
filename
)
except
IOError
:
print
'*** not found ***'
from
sndhdr
import
*
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment