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
465c4995
Kaydet (Commit)
465c4995
authored
Şub 19, 1992
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Added a cache so that the slow parser isn't such a problem in practice.
üst
9b1d33b1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
250 additions
and
16 deletions
+250
-16
flp.py
Lib/irix5/flp.py
+125
-8
flp.py
Lib/plat-irix5/flp.py
+125
-8
No files found.
Lib/irix5/flp.py
Dosyayı görüntüle @
465c4995
...
...
@@ -6,7 +6,6 @@
import
string
import
path
import
sys
import
fl
import
FL
SPLITLINE
=
'--------------------'
...
...
@@ -23,30 +22,132 @@ error = 'flp.error'
# Externally visible function. Load form.
#
def
parse_form
(
filename
,
formname
):
forms
=
checkcache
(
filename
)
if
forms
!=
None
:
if
forms
.
has_key
(
formname
):
return
forms
[
formname
]
else
:
forms
=
{}
fp
=
_open_formfile
(
filename
)
nforms
=
_parse_fd_header
(
fp
)
for
i
in
range
(
nforms
):
form
=
_parse_fd_form
(
fp
,
formname
)
if
form
<>
None
:
return
form
raise
error
,
'No such form in fd file'
break
else
:
raise
error
,
'No such form in fd file'
forms
[
formname
]
=
form
writecache
(
filename
,
forms
)
return
form
#
# Externally visible function. Load all forms.
#
def
parse_forms
(
filename
):
forms
=
checkcache
(
filename
)
if
forms
!=
None
:
return
forms
fp
=
_open_formfile
(
filename
)
nforms
=
_parse_fd_header
(
fp
)
forms
=
{}
for
i
in
range
(
nforms
):
form
=
_parse_fd_form
(
fp
,
None
)
forms
[
form
[
0
]
.
Name
]
=
form
writecache
(
filename
,
forms
)
return
forms
#
# Internal: see if a cached version of the file exists
#
MAGIC
=
'.fdc'
def
checkcache
(
filename
):
import
marshal
fp
,
filename
=
_open_formfile2
(
filename
)
fp
.
close
()
cachename
=
filename
+
'c'
try
:
fp
=
open
(
cachename
,
'r'
)
except
IOError
:
print
'flp: no cache file'
,
cachename
return
None
try
:
if
fp
.
read
(
4
)
!=
MAGIC
:
print
'flp: bad magic word in cache file'
,
cachename
return
None
cache_mtime
=
rdlong
(
fp
)
file_mtime
=
getmtime
(
filename
)
if
cache_mtime
!=
file_mtime
:
print
'flp: outdated cache file'
,
cachename
return
None
print
'flp: valid cache file'
,
cachename
altforms
=
marshal
.
load
(
fp
)
forms
=
{}
for
name
in
altforms
.
keys
():
altobj
,
altlist
=
altforms
[
name
]
obj
=
_newobj
()
.
init
()
obj
.
make
(
altobj
)
list
=
[]
for
altobj
in
altlist
:
nobj
=
_newobj
()
.
init
()
nobj
.
make
(
altobj
)
list
.
append
(
nobj
)
forms
[
name
]
=
obj
,
list
return
forms
finally
:
fp
.
close
()
def
rdlong
(
fp
):
s
=
fp
.
read
(
4
)
if
len
(
s
)
!=
4
:
return
None
a
,
b
,
c
,
d
=
s
[
0
],
s
[
1
],
s
[
2
],
s
[
3
]
return
ord
(
a
)
<<
24
|
ord
(
b
)
<<
16
|
ord
(
c
)
<<
8
|
ord
(
d
)
def
wrlong
(
fp
,
x
):
a
,
b
,
c
,
d
=
(
x
>>
24
)
&
0xff
,
(
x
>>
16
)
&
0xff
,
(
x
>>
8
)
&
0xff
,
x
&
0xff
fp
.
write
(
chr
(
a
)
+
chr
(
b
)
+
chr
(
c
)
+
chr
(
d
))
def
getmtime
(
filename
):
import
posix
from
stat
import
ST_MTIME
try
:
return
posix
.
stat
(
filename
)[
ST_MTIME
]
except
posix
.
error
:
return
None
#
# Internal: write cached version of the form (parsing is too slow!)
#
def
writecache
(
filename
,
forms
):
import
marshal
fp
,
filename
=
_open_formfile2
(
filename
)
fp
.
close
()
cachename
=
filename
+
'c'
try
:
fp
=
open
(
cachename
,
'w'
)
except
IOError
:
print
'flp: can
\'
t create cache file'
,
cachename
return
# Never mind
fp
.
write
(
'
\0\0\0\0
'
)
# Seek back and write MAGIC when done
wrlong
(
fp
,
getmtime
(
filename
))
altforms
=
{}
for
name
in
forms
.
keys
():
obj
,
list
=
forms
[
name
]
altobj
=
obj
.
__dict__
altlist
=
[]
for
obj
in
list
:
altlist
.
append
(
obj
.
__dict__
)
altforms
[
name
]
=
altobj
,
altlist
marshal
.
dump
(
altforms
,
fp
)
fp
.
seek
(
0
)
fp
.
write
(
MAGIC
)
fp
.
close
()
print
'flp: wrote cache file'
,
cachename
#
# Internal: Locate form file (using PYTHONPATH) and open file
#
def
_open_formfile
(
filename
):
return
_open_formfile2
(
filename
)[
0
]
def
_open_formfile2
(
filename
):
if
filename
[
-
3
:]
<>
'.fd'
:
filename
=
filename
+
'.fd'
if
filename
[
0
]
==
'/'
:
...
...
@@ -59,12 +160,13 @@ def _open_formfile(filename):
pn
=
path
.
join
(
pc
,
filename
)
try
:
fp
=
open
(
pn
,
'r'
)
filename
=
pn
break
except
IOError
:
fp
=
None
if
fp
==
None
:
raise
error
,
'Cannot find forms file '
+
filename
return
fp
return
fp
,
filename
#
# Internal: parse the fd file header, return number of forms
...
...
@@ -107,8 +209,10 @@ class _newobj:
def
init
(
self
):
return
self
def
add
(
self
,
(
name
,
value
)):
cmd
=
'self.'
+
name
+
' = '
+
`value`
+
'
\n
'
exec
(
cmd
)
self
.
__dict__
[
name
]
=
value
def
make
(
self
,
dict
):
for
name
in
dict
.
keys
():
self
.
add
(
name
,
dict
[
name
])
#
# Internal parsing routines.
...
...
@@ -225,7 +329,8 @@ def merge_full_form(inst, form, (fdata, odatalist)):
# External Create_form - Create form from parameters
#
def
create_form
(
fdata
):
return
fl
.
make_form
(
FL
.
NO_BOX
,
fdata
.
Width
,
fdata
.
Height
)
import
fl
return
fl
.
make_form
(
FL
.
NO_BOX
,
fdata
.
Width
,
fdata
.
Height
)
#
# External create_object - Create an object. Make sure there are
...
...
@@ -292,12 +397,20 @@ def _select_crfunc(fm, cl):
def
test
():
import
time
t0
=
time
.
millitimer
()
if
len
(
sys
.
argv
)
==
2
:
forms
=
parse_forms
(
sys
.
argv
[
1
])
for
i
in
forms
.
keys
():
t1
=
time
.
millitimer
()
print
'parse time:'
,
0.001
*
(
t1
-
t0
),
'sec.'
keys
=
forms
.
keys
()
keys
.
sort
()
for
i
in
keys
:
_printform
(
forms
[
i
])
elif
len
(
sys
.
argv
)
==
3
:
form
=
parse_form
(
sys
.
argv
[
1
],
sys
.
argv
[
2
])
t1
=
time
.
millitimer
()
print
'parse time:'
,
0.001
*
(
t1
-
t0
),
'sec.'
_printform
(
form
)
else
:
print
'Usage: test fdfile [form]'
...
...
@@ -312,3 +425,7 @@ def _printform(form):
print
' Label '
,
i
.
Label
,
' size/style/col/align '
,
i
.
Size
,
i
.
Style
,
i
.
Lcol
,
i
.
Alignment
print
' cols '
,
i
.
Colors
print
' cback '
,
i
.
Callback
,
i
.
Argument
# Local variables:
# py-indent-offset: 4
# end:
Lib/plat-irix5/flp.py
Dosyayı görüntüle @
465c4995
...
...
@@ -6,7 +6,6 @@
import
string
import
path
import
sys
import
fl
import
FL
SPLITLINE
=
'--------------------'
...
...
@@ -23,30 +22,132 @@ error = 'flp.error'
# Externally visible function. Load form.
#
def
parse_form
(
filename
,
formname
):
forms
=
checkcache
(
filename
)
if
forms
!=
None
:
if
forms
.
has_key
(
formname
):
return
forms
[
formname
]
else
:
forms
=
{}
fp
=
_open_formfile
(
filename
)
nforms
=
_parse_fd_header
(
fp
)
for
i
in
range
(
nforms
):
form
=
_parse_fd_form
(
fp
,
formname
)
if
form
<>
None
:
return
form
raise
error
,
'No such form in fd file'
break
else
:
raise
error
,
'No such form in fd file'
forms
[
formname
]
=
form
writecache
(
filename
,
forms
)
return
form
#
# Externally visible function. Load all forms.
#
def
parse_forms
(
filename
):
forms
=
checkcache
(
filename
)
if
forms
!=
None
:
return
forms
fp
=
_open_formfile
(
filename
)
nforms
=
_parse_fd_header
(
fp
)
forms
=
{}
for
i
in
range
(
nforms
):
form
=
_parse_fd_form
(
fp
,
None
)
forms
[
form
[
0
]
.
Name
]
=
form
writecache
(
filename
,
forms
)
return
forms
#
# Internal: see if a cached version of the file exists
#
MAGIC
=
'.fdc'
def
checkcache
(
filename
):
import
marshal
fp
,
filename
=
_open_formfile2
(
filename
)
fp
.
close
()
cachename
=
filename
+
'c'
try
:
fp
=
open
(
cachename
,
'r'
)
except
IOError
:
print
'flp: no cache file'
,
cachename
return
None
try
:
if
fp
.
read
(
4
)
!=
MAGIC
:
print
'flp: bad magic word in cache file'
,
cachename
return
None
cache_mtime
=
rdlong
(
fp
)
file_mtime
=
getmtime
(
filename
)
if
cache_mtime
!=
file_mtime
:
print
'flp: outdated cache file'
,
cachename
return
None
print
'flp: valid cache file'
,
cachename
altforms
=
marshal
.
load
(
fp
)
forms
=
{}
for
name
in
altforms
.
keys
():
altobj
,
altlist
=
altforms
[
name
]
obj
=
_newobj
()
.
init
()
obj
.
make
(
altobj
)
list
=
[]
for
altobj
in
altlist
:
nobj
=
_newobj
()
.
init
()
nobj
.
make
(
altobj
)
list
.
append
(
nobj
)
forms
[
name
]
=
obj
,
list
return
forms
finally
:
fp
.
close
()
def
rdlong
(
fp
):
s
=
fp
.
read
(
4
)
if
len
(
s
)
!=
4
:
return
None
a
,
b
,
c
,
d
=
s
[
0
],
s
[
1
],
s
[
2
],
s
[
3
]
return
ord
(
a
)
<<
24
|
ord
(
b
)
<<
16
|
ord
(
c
)
<<
8
|
ord
(
d
)
def
wrlong
(
fp
,
x
):
a
,
b
,
c
,
d
=
(
x
>>
24
)
&
0xff
,
(
x
>>
16
)
&
0xff
,
(
x
>>
8
)
&
0xff
,
x
&
0xff
fp
.
write
(
chr
(
a
)
+
chr
(
b
)
+
chr
(
c
)
+
chr
(
d
))
def
getmtime
(
filename
):
import
posix
from
stat
import
ST_MTIME
try
:
return
posix
.
stat
(
filename
)[
ST_MTIME
]
except
posix
.
error
:
return
None
#
# Internal: write cached version of the form (parsing is too slow!)
#
def
writecache
(
filename
,
forms
):
import
marshal
fp
,
filename
=
_open_formfile2
(
filename
)
fp
.
close
()
cachename
=
filename
+
'c'
try
:
fp
=
open
(
cachename
,
'w'
)
except
IOError
:
print
'flp: can
\'
t create cache file'
,
cachename
return
# Never mind
fp
.
write
(
'
\0\0\0\0
'
)
# Seek back and write MAGIC when done
wrlong
(
fp
,
getmtime
(
filename
))
altforms
=
{}
for
name
in
forms
.
keys
():
obj
,
list
=
forms
[
name
]
altobj
=
obj
.
__dict__
altlist
=
[]
for
obj
in
list
:
altlist
.
append
(
obj
.
__dict__
)
altforms
[
name
]
=
altobj
,
altlist
marshal
.
dump
(
altforms
,
fp
)
fp
.
seek
(
0
)
fp
.
write
(
MAGIC
)
fp
.
close
()
print
'flp: wrote cache file'
,
cachename
#
# Internal: Locate form file (using PYTHONPATH) and open file
#
def
_open_formfile
(
filename
):
return
_open_formfile2
(
filename
)[
0
]
def
_open_formfile2
(
filename
):
if
filename
[
-
3
:]
<>
'.fd'
:
filename
=
filename
+
'.fd'
if
filename
[
0
]
==
'/'
:
...
...
@@ -59,12 +160,13 @@ def _open_formfile(filename):
pn
=
path
.
join
(
pc
,
filename
)
try
:
fp
=
open
(
pn
,
'r'
)
filename
=
pn
break
except
IOError
:
fp
=
None
if
fp
==
None
:
raise
error
,
'Cannot find forms file '
+
filename
return
fp
return
fp
,
filename
#
# Internal: parse the fd file header, return number of forms
...
...
@@ -107,8 +209,10 @@ class _newobj:
def
init
(
self
):
return
self
def
add
(
self
,
(
name
,
value
)):
cmd
=
'self.'
+
name
+
' = '
+
`value`
+
'
\n
'
exec
(
cmd
)
self
.
__dict__
[
name
]
=
value
def
make
(
self
,
dict
):
for
name
in
dict
.
keys
():
self
.
add
(
name
,
dict
[
name
])
#
# Internal parsing routines.
...
...
@@ -225,7 +329,8 @@ def merge_full_form(inst, form, (fdata, odatalist)):
# External Create_form - Create form from parameters
#
def
create_form
(
fdata
):
return
fl
.
make_form
(
FL
.
NO_BOX
,
fdata
.
Width
,
fdata
.
Height
)
import
fl
return
fl
.
make_form
(
FL
.
NO_BOX
,
fdata
.
Width
,
fdata
.
Height
)
#
# External create_object - Create an object. Make sure there are
...
...
@@ -292,12 +397,20 @@ def _select_crfunc(fm, cl):
def
test
():
import
time
t0
=
time
.
millitimer
()
if
len
(
sys
.
argv
)
==
2
:
forms
=
parse_forms
(
sys
.
argv
[
1
])
for
i
in
forms
.
keys
():
t1
=
time
.
millitimer
()
print
'parse time:'
,
0.001
*
(
t1
-
t0
),
'sec.'
keys
=
forms
.
keys
()
keys
.
sort
()
for
i
in
keys
:
_printform
(
forms
[
i
])
elif
len
(
sys
.
argv
)
==
3
:
form
=
parse_form
(
sys
.
argv
[
1
],
sys
.
argv
[
2
])
t1
=
time
.
millitimer
()
print
'parse time:'
,
0.001
*
(
t1
-
t0
),
'sec.'
_printform
(
form
)
else
:
print
'Usage: test fdfile [form]'
...
...
@@ -312,3 +425,7 @@ def _printform(form):
print
' Label '
,
i
.
Label
,
' size/style/col/align '
,
i
.
Size
,
i
.
Style
,
i
.
Lcol
,
i
.
Alignment
print
' cols '
,
i
.
Colors
print
' cback '
,
i
.
Callback
,
i
.
Argument
# Local variables:
# py-indent-offset: 4
# end:
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