]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Restructured main loop. Etc.
authorGuido van Rossum <guido@python.org>
Mon, 1 Nov 1993 14:50:59 +0000 (14:50 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 1 Nov 1993 14:50:59 +0000 (14:50 +0000)
Demo/cwilib/cwilib.py

index 25e06229a8ef6a5e5e64fd69045bd8411548f9f0..ebe468a85311bcb1e08a6665902c7d5ec7bda233 100755 (executable)
@@ -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('7x14')
-               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('7x14')
+       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()