diff --git a/oec/__main__.py b/oec/__main__.py index 5b3054d..5125e48 100644 --- a/oec/__main__.py +++ b/oec/__main__.py @@ -86,6 +86,28 @@ def _create_session(args, device): raise ValueError('Unsupported emulator') +def parse_tn3270_host_args(args, parser): + elements = args.host.rsplit(':', 1) + + host = elements[0] + port = None + + if len(elements) > 1: + try: + port = int(elements[1]) + except ValueError: + parser.error(f'argument host: invalid port value: {elements[1]}') + + if args.port is not None: + if port is None: + port = args.port + + logger.info('The port argument is deprecated and will be removed in the future, use host:port instead.') + else: + logger.warning('The port argument is deprecated and will be removed in the future, port from host:port is being used.') + + return (host, port if port is not None else 23) + def _signal_handler(number, frame): global CONTROLLER @@ -104,16 +126,17 @@ def main(): parser = argparse.ArgumentParser(description='IBM 3270 terminal controller') - parser.add_argument('serial_port', help='Serial port') + parser.add_argument('serial_port', help='serial port') subparsers = parser.add_subparsers(dest='emulator', required=True, - description='Emulator') + description='emulator') tn3270_parser = subparsers.add_parser('tn3270', description='TN3270 emulator', help='TN3270 emulator') - tn3270_parser.add_argument('host', help='Hostname') - tn3270_parser.add_argument('port', nargs='?', default=23, type=int) + tn3270_parser.add_argument('host', metavar='host[:port]', + help='host and optional port') + tn3270_parser.add_argument('port', nargs='?', type=int, help=argparse.SUPPRESS) tn3270_parser.add_argument('--codepage', metavar='encoding', default='ibm037', dest='character_encoding', type=_get_character_encoding) @@ -122,12 +145,15 @@ def main(): vt100_parser = subparsers.add_parser('vt100', description='VT100 emulator', help='VT100 emulator') - vt100_parser.add_argument('command', help='Host process') + vt100_parser.add_argument('command', help='host process') vt100_parser.add_argument('command_args', nargs=argparse.REMAINDER, - help='Host process arguments') + help='host process arguments') args = parser.parse_args() + if args.emulator == 'tn3270': + (args.host, args.port) = parse_tn3270_host_args(args, parser) + create_device = lambda interface, device_address, poll_response: _create_device(args, interface, device_address, poll_response) create_session = lambda device: _create_session(args, device)