1 # Interface to the interactive CWI library catalog.
5 from stdwinevents
import *
15 vt
= vt100win
.VT100win()
17 host
= 'biefstuk.cwi.nl'
18 tn
= telnetlib
.Telnet(host
, 0)
21 vt
.send(tn
.read_until('login: ', 10))
24 vt
.send(tn
.read_until('Hit <RETURN> to continue...', 10))
27 vt
.send(tn
.read_until('QUIT', 20))
29 sys
.stderr
.write('Connection closed prematurely\n')
33 matches
= vt
.which_screens()
34 if 'menu' not in matches
:
35 sys
.stderr
.write('Main menu does not appear\n')
39 vt
.open('Progress -- CWI Library')
45 data
= tn
.read_very_eager()
47 stdwin
.message('Connection closed--goodbye')
54 event
= stdwin
.pollevent()
56 type, window
, detail
= event
57 if window
== None and type == WE_LOST_SEL
:
58 window
= ui
.queryform
.window
59 event
= type, window
, detail
62 if window
in ui
.windows
:
63 ui
.dispatch(type, window
, detail
)
64 elif window
== vt
.window
:
67 elif type == WE_COMMAND
:
68 if detail
== WC_RETURN
:
70 elif detail
== WC_BACKSPACE
:
72 elif detail
== WC_TAB
:
76 elif detail
== WC_DOWN
:
78 elif detail
== WC_RIGHT
:
80 elif detail
== WC_LEFT
:
83 print '*** Command:', detail
88 elif type in (WE_ACTIVATE
, WE_DEACTIVATE
):
91 print '*** VT100 event:', type, detail
93 print '*** Alien event:', type, window
, detail
95 rfd
, wfd
, xfd
= select
.select([tn
, stdwin
], [], [])
98 # Subroutine to define our screen recognition patterns
100 def define_screens(vt
):
101 vt
.define_screen('menu', {
102 'title': ('search', 0, 0, 80,
103 ' SEARCH FUNCTIONS +OTHER FUNCTIONS '),
105 vt
.define_screen('search', {
106 'title': ('search', 0, 0, 80, ' Search '),
108 vt
.define_screen('shortlist', {'title': ('search', 0, 0, 80,
110 vt
.define_screen('showrecord', {
111 'title': ('search', 0, 0, 80, ' Show record '),
113 vt
.define_screen('timelimit', {
114 'limit': ('search', 12, 0, 80, ' TIME LIMIT '),
116 vt
.define_screen('attention', {
117 'BASE': ('copy', 0, 0, 0, 'search'),
118 'title': ('search', 10, 0, 80, ' ATTENTION ')})
119 vt
.define_screen('syntaxerror', {
120 'BASE': ('copy', 0, 0, 0, 'attention'),
121 'message': ('search', 12, 0, 80, ' Syntax error'),
123 vt
.define_screen('emptyerror', {
124 'BASE': ('copy', 0, 0, 0, 'attention'),
125 'message': ('search', 12, 0, 80,
126 ' Check your input. Search at least one term'),
128 vt
.define_screen('unsortedwarning', {
129 'BASE': ('copy', 0, 0, 0, 'attention'),
130 'message': ('search', 12, 0, 80,
131 ' Number of records exceeds sort limit'),
133 vt
.define_screen('thereismore', {
134 'BASE': ('copy', 0, 0, 0, 'showrecord'),
135 'message': ('search', 15, 0, 80,
136 'There is more within this record. Use the arrow keys'),
138 vt
.define_screen('nofurther', {
139 'BASE': ('copy', 0, 0, 0, 'showrecord'),
140 'message': ('search', 17, 0, 80, 'You cannot go further\.'),
142 vt
.define_screen('nofurtherback', {
143 'BASE': ('copy', 0, 0, 0, 'showrecord'),
144 'message': ('search', 17, 0, 80,
145 'You cannot go further back'),
149 # Class to implement our user interface.
154 stdwin
.setfont('7x14')
155 self
.queryform
= QueryForm()
156 self
.listform
= ListForm()
157 self
.recordform
= RecordForm()
158 self
.forms
= [self
.queryform
, self
.listform
, self
.recordform
]
159 define_query_fields(self
.queryform
)
161 for form
in self
.forms
:
162 if form
.formheight
> 0:
164 self
.windows
.append(form
.window
)
170 for form
in self
.forms
:
173 def dispatch(self
, type, window
, detail
):
174 for form
in self
.forms
:
175 if window
== form
.window
:
176 form
.dispatch(type, detail
)
179 def define_query_fields(f
):
180 f
.define_field('name', 'Name auth./ed.', 1, 60)
181 f
.define_field('title', 'Title', 4, 60)
182 f
.define_field('shelfmark', 'Shelf mark', 1, 60)
183 f
.define_field('class', 'Prim. classif.', 1, 60)
184 f
.define_field('series', 'Series', 1, 60)
185 f
.define_field('congress', 'Congr. pl./year', 1, 60)
186 f
.define_field('type', 'Type', 1, 60)
189 class QueryForm(Form
):
192 Form
.__init
__(self
, 'Query form -- CWI Library')
194 def dispatch(self
, type, detail
):
195 if type == WE_COMMAND
and detail
== WC_RETURN
:
196 print '*** SUBMIT ***'
198 Form
.dispatch(self
, type, detail
)
201 class ListForm(Form
):
204 Form
.__init
__(self
, 'Short list -- CWI Library')
207 class RecordForm(Form
):
210 Form
.__init
__(self
, 'Record detail -- CWI Library')