diff options
Diffstat (limited to 'Demo/cwilib/cwilib.py')
-rwxr-xr-x | Demo/cwilib/cwilib.py | 335 |
1 files changed, 161 insertions, 174 deletions
diff --git a/Demo/cwilib/cwilib.py b/Demo/cwilib/cwilib.py index 25e0622..ebe468a 100755 --- a/Demo/cwilib/cwilib.py +++ b/Demo/cwilib/cwilib.py @@ -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() |