Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
05e8823d
Commit
05e8823d
authored
Nov 01, 1993
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restructured main loop. Etc.
parent
144ffc81
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
161 additions
and
174 deletions
+161
-174
Demo/cwilib/cwilib.py
Demo/cwilib/cwilib.py
+161
-174
No files found.
Demo/cwilib/cwilib.py
View file @
05e8823d
...
...
@@ -12,215 +12,202 @@ from form import Form
# Main program
def
main
():
vt
=
vt100win
.
VT100win
()
vt
=
vt100win
.
VT100win
()
#
host
=
'biefstuk.cwi.nl'
tn
=
telnetlib
.
Telnet
(
host
,
0
)
#
try
:
vt
.
send
(
tn
.
read_until
(
'login: '
,
10
))
tn
.
write
(
'cwilib
\
r
'
)
#
host
=
'biefstuk.cwi.nl'
port
=
0
timeout
=
10.0
tn
=
telnetlib
.
Telnet
(
host
,
port
)
tn
.
set_timeout
(
timeout
)
vt
.
send
(
tn
.
read_until
(
'Hit <RETURN> to continue...'
,
10
))
tn
.
write
(
'
\
r
'
)
#
vt
.
send
(
tn
.
read_until
(
'QUIT'
,
20
))
except
EOFError
:
sys
.
stderr
.
write
(
'Connection closed prematurely
\
n
'
)
sys
.
exit
(
1
)
#
define_screens
(
vt
)
matches
=
vt
.
which_screens
()
if
'menu'
not
in
matches
:
sys
.
stderr
.
write
(
'Main menu does not appear
\
n
'
)
sys
.
exit
(
1
)
#
tn
.
write
(
'
\
r
\
r
'
)
vt
.
open
(
'Progress -- CWI Library'
)
vt
.
set_debuglevel
(
0
)
ui
=
UserInterface
()
#
while
1
:
try
:
vt
.
send
(
tn
.
read_until
(
'login: '
))
tn
.
write
(
'cwilib
\
r
'
)
#
vt
.
send
(
tn
.
read_until
(
'Hit <RETURN> to continue...'
))
tn
.
write
(
'
\
r
'
)
#
vt
.
send
(
tn
.
read_until
(
'QUIT'
))
data
=
tn
.
read_very_eager
()
except
EOFError
:
sys
.
stderr
.
write
(
'Connection closed prematurely
\
n
'
)
sys
.
exit
(
1
)
#
define_screens
(
vt
)
matches
=
vt
.
which_screens
()
if
'menu'
not
in
matches
:
sys
.
stderr
.
write
(
'No main menu within %g seconds
\
n
'
%
timeout
)
sys
.
exit
(
1
)
#
tn
.
set_timeout
(
0
)
tn
.
write
(
'
\
r
\
r
'
)
vt
.
open
(
'Progress -- CWI Library'
)
ui
=
UserInterface
()
#
while
1
:
event
=
stdwin
.
pollevent
()
if
not
event
:
rfd
,
wfd
,
xfd
=
select
.
select
([
stdwin
,
tn
],
[],
[])
if
stdwin
in
rfd
:
event
=
stdwin
.
getevent
()
if
event
:
type
,
window
,
detail
=
event
if
window
==
None
and
type
==
WE_LOST_SEL
:
window
=
ui
.
queryform
.
window
event
=
type
,
window
,
detail
if
type
==
WE_CLOSE
:
break
if
window
in
ui
.
windows
:
ui
.
dispatch
(
type
,
window
,
detail
)
elif
window
==
vt
.
window
:
if
type
==
WE_NULL
:
pass
elif
type
==
WE_COMMAND
:
if
detail
==
WC_RETURN
:
tn
.
write
(
'
\
r
'
)
elif
detail
==
WC_BACKSPACE
:
tn
.
write
(
'
\
b
'
)
elif
detail
==
WC_TAB
:
tn
.
write
(
'
\
t
'
)
elif
detail
==
WC_UP
:
tn
.
write
(
'
\
033
[A'
)
elif
detail
==
WC_DOWN
:
tn
.
write
(
'
\
033
[B'
)
elif
detail
==
WC_RIGHT
:
tn
.
write
(
'
\
033
[C'
)
elif
detail
==
WC_LEFT
:
tn
.
write
(
'
\
033
[D'
)
else
:
print
'*** Command:'
,
detail
elif
type
==
WE_CHAR
:
tn
.
write
(
detail
)
elif
type
==
WE_DRAW
:
vt
.
draw
(
detail
)
elif
type
in
(
WE_ACTIVATE
,
WE_DEACTIVATE
):
pass
else
:
print
'*** VT100 event:'
,
type
,
detail
else
:
print
'*** Alien event:'
,
type
,
window
,
detail
elif
tn
in
rfd
:
vt
.
window
.
setwincursor
(
'watch'
)
try
:
data
=
tn
.
read_now
()
except
EOFError
:
stdwin
.
message
(
'Connection closed--goodbye'
)
break
print
'send...'
vt
.
send
(
data
)
print
'send...done'
vt
.
window
.
setwincursor
(
'arrow'
)
matches
=
vt
.
which_screens
()
if
'timelimit'
in
matches
:
stdwin
.
message
(
'Time limit--goodbye'
)
break
print
'*** Matches:'
,
matches
stdwin
.
message
(
'Connection closed--goodbye'
)
break
if
data
:
print
'send...'
vt
.
send
(
data
)
print
'send...done'
continue
event
=
stdwin
.
pollevent
()
if
event
:
type
,
window
,
detail
=
event
if
window
==
None
and
type
==
WE_LOST_SEL
:
window
=
ui
.
queryform
.
window
event
=
type
,
window
,
detail
if
type
==
WE_CLOSE
:
break
if
window
in
ui
.
windows
:
ui
.
dispatch
(
type
,
window
,
detail
)
elif
window
==
vt
.
window
:
if
type
==
WE_NULL
:
pass
elif
type
==
WE_COMMAND
:
if
detail
==
WC_RETURN
:
tn
.
write
(
'
\
r
'
)
elif
detail
==
WC_BACKSPACE
:
tn
.
write
(
'
\
b
'
)
elif
detail
==
WC_TAB
:
tn
.
write
(
'
\
t
'
)
elif
detail
==
WC_UP
:
tn
.
write
(
'
\
033
[A'
)
elif
detail
==
WC_DOWN
:
tn
.
write
(
'
\
033
[B'
)
elif
detail
==
WC_RIGHT
:
tn
.
write
(
'
\
033
[C'
)
elif
detail
==
WC_LEFT
:
tn
.
write
(
'
\
033
[D'
)
else
:
print
'*** Command:'
,
detail
elif
type
==
WE_CHAR
:
tn
.
write
(
detail
)
elif
type
==
WE_DRAW
:
vt
.
draw
(
detail
)
elif
type
in
(
WE_ACTIVATE
,
WE_DEACTIVATE
):
pass
else
:
print
'*** Weird return from select:'
,
rfd
,
wfd
,
xfd
print
'*** VT100 event:'
,
type
,
detail
else
:
print
'*** Alien event:'
,
type
,
window
,
detail
continue
rfd
,
wfd
,
xfd
=
select
.
select
([
tn
,
stdwin
],
[],
[])
# Subroutine to define our screen recognition patterns
def
define_screens
(
vt
):
vt
.
define_screen
(
'menu'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' SEARCH FUNCTIONS +OTHER FUNCTIONS '
),
})
vt
.
define_screen
(
'search'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Search '
),
})
vt
.
define_screen
(
'shortlist'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Short-list'
)})
vt
.
define_screen
(
'showrecord'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Show record '
),
})
vt
.
define_screen
(
'timelimit'
,
{
'limit'
:
(
'search'
,
12
,
0
,
80
,
' TIME LIMIT '
),
})
vt
.
define_screen
(
'attention'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'search'
),
'title'
:
(
'search'
,
10
,
0
,
80
,
' ATTENTION '
)})
vt
.
define_screen
(
'syntaxerror'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Syntax error'
),
})
vt
.
define_screen
(
'emptyerror'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Check your input. Search at least one term'
),
})
vt
.
define_screen
(
'unsortedwarning'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Number of records exceeds sort limit'
),
})
vt
.
define_screen
(
'thereismore'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'showrecord'
),
'message'
:
(
'search'
,
15
,
0
,
80
,
'There is more within this record. Use the arrow keys'
),
})
vt
.
define_screen
(
'nofurther'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'showrecord'
),
'message'
:
(
'search'
,
17
,
0
,
80
,
'You cannot go further
\
.
'
),
})
vt.define_screen('
nofurtherback
', {
'
BASE
': ('
copy
', 0, 0, 0, '
showrecord
'),
'
message
': ('
search
', 17, 0, 80,
'
You
cannot
go
further
back
'),
})
vt
.
define_screen
(
'menu'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' SEARCH FUNCTIONS +OTHER FUNCTIONS '
),
})
vt
.
define_screen
(
'search'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Search '
),
})
vt
.
define_screen
(
'shortlist'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Short-list'
)})
vt
.
define_screen
(
'showrecord'
,
{
'title'
:
(
'search'
,
0
,
0
,
80
,
' Show record '
),
})
vt
.
define_screen
(
'timelimit'
,
{
'limit'
:
(
'search'
,
12
,
0
,
80
,
' TIME LIMIT '
),
})
vt
.
define_screen
(
'attention'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'search'
),
'title'
:
(
'search'
,
10
,
0
,
80
,
' ATTENTION '
)})
vt
.
define_screen
(
'syntaxerror'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Syntax error'
),
})
vt
.
define_screen
(
'emptyerror'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Check your input. Search at least one term'
),
})
vt
.
define_screen
(
'unsortedwarning'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'attention'
),
'message'
:
(
'search'
,
12
,
0
,
80
,
' Number of records exceeds sort limit'
),
})
vt
.
define_screen
(
'thereismore'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'showrecord'
),
'message'
:
(
'search'
,
15
,
0
,
80
,
'There is more within this record. Use the arrow keys'
),
})
vt
.
define_screen
(
'nofurther'
,
{
'BASE'
:
(
'copy'
,
0
,
0
,
0
,
'showrecord'
),
'message'
:
(
'search'
,
17
,
0
,
80
,
'You cannot go further
\
.
'
),
})
vt.define_screen('
nofurtherback
', {
'
BASE
': ('
copy
', 0, 0, 0, '
showrecord
'),
'
message
': ('
search
', 17, 0, 80,
'
You
cannot
go
further
back
'),
})
# Class to implement our user interface.
class UserInterface:
def __init__(self):
stdwin.setfont('
7
x14
')
self.queryform = QueryForm()
self.listform = ListForm()
self.recordform = RecordForm()
self.forms = [self.queryform, self.listform, self.recordform]
define_query_fields(self.queryform)
self.windows = []
for form in self.forms:
if form.formheight > 0:
form.open()
self.windows.append(form.window)
def __init__(self):
stdwin.setfont('
7
x14
')
self.queryform = QueryForm()
self.listform = ListForm()
self.recordform = RecordForm()
self.forms = [self.queryform, self.listform, self.recordform]
define_query_fields(self.queryform)
self.windows = []
for form in self.forms:
if form.formheight > 0:
form.open()
self.windows.append(form.window)
def __del__(self):
self.close()
def __del__(self):
self.close()
def close(self):
for form in self.forms:
form.close()
def close(self):
for form in self.forms:
form.close()
def dispatch(self, type, window, detail):
for form in self.forms:
if window == form.window:
form.dispatch(type, detail)
def dispatch(self, type, window, detail):
for form in self.forms:
if window == form.window:
form.dispatch(type, detail)
def define_query_fields(f):
f.define_field('
name
', '
Name
auth
.
/
ed
.
', 1, 60)
f.define_field('
title
', '
Title
', 4, 60)
f.define_field('
shelfmark
', '
Shelf
mark
', 1, 60)
f.define_field('
class
', '
Prim
.
classif
.
', 1, 60)
f.define_field('
series
', '
Series
', 1, 60)
f.define_field('
congress
', '
Congr
.
pl
.
/
year
', 1, 60)
f.define_field('
type
', '
Type
', 1, 60)
f.define_field('
name
', '
Name
auth
.
/
ed
.
', 1, 60)
f.define_field('
title
', '
Title
', 4, 60)
f.define_field('
shelfmark
', '
Shelf
mark
', 1, 60)
f.define_field('
class
', '
Prim
.
classif
.
', 1, 60)
f.define_field('
series
', '
Series
', 1, 60)
f.define_field('
congress
', '
Congr
.
pl
.
/
year
', 1, 60)
f.define_field('
type
', '
Type
', 1, 60)
class QueryForm(Form):
def __init__(self):
Form.__init__(self, '
Query
form
--
CWI
Library
')
def __init__(self):
Form.__init__(self, '
Query
form
--
CWI
Library
')
def dispatch(self, type, detail):
if type == WE_COMMAND and detail == WC_RETURN:
print '
***
SUBMIT
***
'
else:
Form.dispatch(self, type, detail)
def dispatch(self, type, detail):
if type == WE_COMMAND and detail == WC_RETURN:
print '
***
SUBMIT
***
'
else:
Form.dispatch(self, type, detail)
class ListForm(Form):
def __init__(self):
Form.__init__(self, '
Short
list
--
CWI
Library
')
def __init__(self):
Form.__init__(self, '
Short
list
--
CWI
Library
')
class RecordForm(Form):
def __init__(self):
Form.__init__(self, '
Record
detail
--
CWI
Library
')
def __init__(self):
Form.__init__(self, '
Record
detail
--
CWI
Library
')
main()
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