Which Text-Based UI Do You Code With?
JHWH asks: "I've been asked to design and implement a management software system with text based user interface as the replacement of an older one running on AS/400. Despite my attempts towards a web UI, the customer is actually willing to have a text based UI. The main reasons are the need for a very low bandwidth and the ability to run on serial terminals. All this in the 21st century! Host systems will be Linux, the language will be C or C++. I already thought about the use of text based browsers like lynx or links. So now I have to wipe the dust away from my ncurses manual, or can Slashdot suggest something more effective?"
IMO, unless you can give a good reason why you shouldn't use ncurses, use it.
Despite my attempts towards a web UI, the customer is actually willing to have a text based UI. The main reasons are the need for a very low bandwidth and the ability to run on serial terminals.
It sounds like the client's needs are thought out and perfectly reasonable. The problem seems to be with the person they've asked to do the job.
Curses does the job. It may not be the most elegant solution, but it does it. I see no reason why you shouldn't use it. Curses has been around for donkeys years and it works.
Web interfaces suck in so many novel and unique ways. There's the session timeouts. There's the non-interactivity. There's the random bugs on every browser, and the huge mass of compatibility code required to support all of them. Then there's the web app that requires Sun Java and the web app that requires MS Java, both of which run only in IE, and both of which are supposed to run ON THE SAME MACHINE! (I have to deal with that situation once. Royal pain in the rear-end. I don't remember how I solved it, actually...)
If you want a decent UI, don't bother with web-based stuff. Use a product like RealBasic, do it quick and make a CLI to do all the heavy lifting on the back-end.
Comment of the year
Seriously, write it in Emacs Lisp. This will let you have a GUI and a command line interface with the same code.
Inventions have long since reached their limit, and I see no hope for further development.-- Frontinus, 1st cent. AD
I can say from experiences that ANYTHING is better than the AS400 so it probably won't be worse no matter what you do. Chiseling stuff into stone tablets would be better. Ncurses is alright I guess, but I'd reccomend Visual Studio 2005 ;) lol jk
Google's Super Secret Search Algorithm: SELECT @search_results FROM internet WHERE @search_results = 'good'
Just for shits and giggles make it web based and force them to use lynx to interface with it.
Beer! It's what's for breakfast!
Ncurses (New curses for those not familiar with it) is, as far as I know, the best solution to what you're asking. There's probably other libraries available, but I've never looked--Ncurses is tried, tested and does its job well.
Ruby has hooks for curses (Ruby is a fairly simple language). It also has a database API and an object relational layer ActiveRecord (part of Rails but doesn't require rails). You might take a look at that. You can extend Ruby using C if you need or you can write the C/C++ programs as callable from inside of the ruby script.
This is NOT something I've done before (except for using Ruby and Rails and the database api). But it might be something to take a peek at.
Leave the gun, take the cannoli -- Clemenza, The Godfather
This should get me modded down and/or knocked unconscious from repeated canings to the face or something.
Conio!
Isn't there a linux port of that?
Seems like the bulk of the UI logic would be easier to develop and more error-free if done in python. python could then tie into the C/C++ backend code where necessary. From my casual search of google, python and (n)curses work very well together.
If you want a menu driven interface, everybody's already said ncurses is the best game in town.
If you're looking for a command-driven interface, it might be cool to embed guile (GNU's scheme interpreter) in the program and use that for the front-end. Guile works with readline, and it would give you the added benefit of making the application scriptable (with a sane, elegant, and un-hacked-together-over-6-different-versions language), basically for free.
I've run into similar requirements and ended up using ncurses and a couple higher level curses based libraries. not so bad really... and it does a very respectable job of working on various term types in case thats an issue for you. What more were you hoping to find? maybe there is a library that provides it if you were more specific in what you need. windowing, scroll areas, color, etc are all provided in curses anyways iirc.
-Lod
Compared to web, it has advantages that the original poster enumerated, as well as:
- support for hotkeys and shortcuts (especially big for manual data entry/call centre users)
- ability to easily rescale + resize to fit into available screen real estate.
It's simple for a terminal emulator to scale down fonts when the window is resized. Try that with your average GUI or web page.. not to mention component layout issues when dealing with GUIs. This may sound dumb, but it can be a big issue for call centres having to juggle multiple apps but with only one physical screen.
- simplified deployment (yes, even simpler than web) - no issues with browser versions, plugin conflicts, etc etc.
- SPEED! Compared with the latency of your average web front-end.
Issues like this really add up to a big difference for apps that are used intensively.
somebody in ##slackware on freenode
once recommended me to try using the slang API
instead of (n)curses based on the fact that he bought a ncurses book
and it sucked monkeyballs and programming ncurses is not really intuitive
some of the other fine folk who regularly sit idle in that channel
also said that if it could be done in a Shell script
you could try using shell and dialog which is a ncurses based program btw
this could obviously be a biased opinion from slackers since the pkgtools in slackware http://www.slackware.com/ are written this way
and they have served us fine for many years
and will continue to serve us happily for many more years to come.
anyway good luck
Charva is an curses-based, Java text UI toolkit that is modeled after Swing. If you know Java and Swing, using Charva is quite straightforward, and won't require you to muck around writing your own text widgets.
Borland's Turbo Vision UI was rather nice, considering it was all Text. It's even been ported for GNU toolsets: http://tvision.sourceforge.net/
p g
Screenshot from the link of it on QNX: http://tvision.sourceforge.net/tv2-QNX-tvscreen.j
The nice thing about it is that it's OO... one of the very first OO TUI's, if I remember correctly.
I have absolutely no idea how it'll work over a terminal. XTerms an option?
So... not so hot on reading comprehension?
# (/.);;
- : float -> float -> float =
"Console apps can run *QUICKLY* on any old system of just about any OS or architecture with any speed CPU with any amount of RAM with any amount of bandwidth."
DesqView, PCtools for DOS.
The article title has nothing to do with the article contents.
... the title is "Which Text-Based UI Do Yo Code With" - not "Which Text-Based UI Library Do You Write To/Compile Against".
i I use gvim at work for programming in C++ / FORTRAN. Syntax highlighting works great. No complaints. Keyboard shortcuts / regexp / scripting make life a breeze. :wq
Elinks combined with some simple cgi or servlets on the back end works like a charm.
So how many different kinds of serial terminal do they have
in their installed base. I hope they are not buying new ones.
Do you have keyboards/termcaps to make things more or less similar?
Linux is the server huh? So how many of these terminals are you putting
in the field; what is your multiport board solution? How many sites?
Are you going to have terminal servers? Are you going to have printers?
If you have multiple sites, are you going to use multiplexing between them?
Or are they going to use tcpip to get to the main site? Is your linux box
acting as a terminal server for a central TCPIP hosted connection?
Is the application a "fullscreen application"? Is it a database application
where the old 4gl languages already do most of your work for you? You could
write a simple database app in a day or so.
Are your serial terminals going to have serial printers strung off the back
and multiplex the terminal/printer datastream on one serial line? Or to do
screenprints? They are going to want screenprints in ANY application.
BTW, going back to serial is someones idea of hell -- mine.
Lots of style points if you give them an old-fashioned Gopher intranet and Jughead search.
Hail Eris, full of mischief...
E pluribus sanguinem
that read the title and saw a "Vi vs. Emacs" flamewar in the horizon (or right after the click, whichever you prefer). I was even planning to tag this article "oldnewsflamewar" or something like that...
Sorry, I don't have an answer to your question, but what I can say is that the title was a little bit confusing.
~Kant
S-lang, possibly with libnewt:
slang1 - The S-Lang programming library - runtime version.
Description: The S-Lang programming library - runtime version
S-Lang is a C programmer's library that includes routines for the rapid
development of sophisticated, user friendly, multi-platform applications.
libslang1 - The S-Lang programming library - runtime version
libslang1-dev - The S-Lang programming library, development version
libslang1-pic - The S-Lang programming library, shared library subset kit
libslang1-utf8 - The S-Lang programming library with utf8 support
libslang1-utf8-dev - The S-Lang programming library, development version with utf8 support
libslang1-utf8-pic - The S-Lang programming library, shared library subset with utf8 support
libslang2 - The S-Lang programming library - runtime version
libslang2-dev - The S-Lang programming library, development version
libslang2-pic - The S-Lang programming library, shared library subset kit
libterm-slang-perl - perl interface to the S-Lang terminal library
slang-cfitsio - read and write FITS files from S-Lang
slang-curl - transfer files using HTTP and FTP from S-Lang
slang-gdbm - access to GDBM databases from S-Lang
slang-gsl - GNU Scientific Library binding for S-Lang
slang-gtk - binds the GIMP Toolkit (GTK) to the S-Lang scripting language
slang-histogram - create and manipulate histograms from S-Lang
slang-pvm - PVM (Parallel Virtual Machine) interface for S-Lang
slang-slirp - C code generator for the S-Lang scripting language
slang-tess - regression testing system for the S-Lang scripting language
libnewt0 - Not Erik's Windowing Toolkit - text mode windowing with slang
Description: Not Erik's Windowing Toolkit - text mode windowing with slang
Newt is a windowing toolkit for text mode built from the slang library.
It allows color text mode applications to easily use stackable windows,
push buttons, check boxes, radio buttons, lists, entry fields, labels,
and displayable text. Scrollbars are supported, and forms may be nested
to provide extra functionality. This package contains the shared library
for programs that have been built with newt.
libnewt-dev - Developer's toolkit for newt windowing library
libnewt-perl - Perl bindings for Erik Troan's newt text-mode windowing toolkit
libnewt-pic - Not Erik's Windowing Toolkit, shared library subset kit
libnewt0.52 - Not Erik's Windowing Toolkit - text mode windowing with slang
newt-tcl - A newt module for Tcl
pike7.6-pexts-newt - Pike Newt module
python-newt - A NEWT module for Python
whiptail - Displays user-friendly dialog boxes from shell scripts
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
This may well be overkill, but if for your backend code you do want to go down the Enterprise Java route, then JSF is *supposed to be* independent of the view technology. Well-written component libraries will provide pluggable renderers. Most libraries do just have HTML renderers for the components, but Oracle's ADF (now open-sourced as Apache Trinidad) provides JSF over telnet:
t ter/articles/introadffaces/index.html
http://www.oracle.com/technology/tech/java/newsle
Assuming it works, that is pretty cool, and it means your server-side can leverage the rich JEE technology suite.
What's your GCNSEQNO?
When I was writing text-based PC apps in the early 90s, Borland's TurboVision blew me away. It was very easy to work with and it made building nice, windowed user interfaces a snap. Not only that, but full source was provided and that source was clean, elegant, and such an excellent demonstration of proper object-oriented design that I built an OO design class around it.
Borland released TurboVision to the world after it was obsoleted by the takeover of GUIs, and some enterprising folks have ported it to gcc/ncurses and fixed up some of the few defects in the original library.
I haven't actually used this library, but its existence almost makes me want to go write some text-mode code just for the fun of it.
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
. . . like it is a bad thing. HP used to used a terminal based ticketing system for their 4 hour response tech support, they just HAD to move to a new point and click system. Don't worry it will be waster they said, it wasn't. Even after months of getting used to the system it was still slow because one would have to click through multiple tabs to enter text. The old system you just typed and if you needed another screen your hands where already on the keyboard so you typed a simple keyboard cord and you where there, no moving one hand to the mouse, finding the cursor, movings it over to the little tab, clicking and moving your hand back to the keyboard. It was nice, but then someone thought that GUI was the answer to every interface problem and that was the end of working fast.
When I saw this post on slashdot, the top Freshmeat item is coincidentally a python based Text UI library called .
"Slapping a web server on an embedded system just so you can interface to them is beyond asinine."
Shhh! Don't tell Brandybuck about this.
But, unless you use an extra widget library you will be spending an excessive amount of time writing your own (or quickly growing wise and stealing one). Ncurses has just the bare minimum of widgets: windows, sub-windows, text, and special characters. Since I used raw ncurses, I ended up spending quite some time making my own curses apps act somewhat similar to a typical GUI application.
The size of the terminal forced me into text processing and cropping... roughly a third of my app is just processing text to fit into the size constraints of its particular 'window'. The rest is processing data, and managing and decorating the various sub-windows.
Things get more complicated when I added mouse support and "tabs". But, the most annoying bit is not having a standard terminal that everyone uses. Often function and meta keys don't work, or - for putty and TTY users - the mouse doesn't.
Anyhow, in the real world, if you have the option of using a GUI instead of a curses-based app, I suggest you take it. Using curses takes a lot of the speed out of writing a normal python application, and is often tedious to the point you realize why curses was named.
Check out gaim-text. It uses a new ncurses based toolkit that emulates GTK+. If you are familiar with GTK+, you will like it.
So... not so hot on reading comprehension?
Aha! You must be a vi bigot!
(Ok, so soloport is a moron. At least he has good taste in text editors.)
Try, if you can, to either use a technology that abstracts you from the UI or simply isolate your core logic from the interface. That way you could provide both a web (or graphical) ui and a text ui. If they see the GUI is more usable they could end up with it.
Another tip: You could suggest creating a web application and make a Lynx (or Links) friendly webapp. Those text web browsers will run over telnet and they will be very friendly for them, as they share the "form orientation" of AS/400 form oriented 3270 terminals.
That way, you don't have to write ugly callback routines everywhere. Signals and slots are nifty features that allow you to focus on the higher level logic rather than the nitty-gritty stuff. If/when it comes time for porting the application to other languages, you'll thank yourself.
Disclaimer: I do not work for Trolltech or any of its affiliates.
Home Page for eLinks.
Ant(Dude) @ Quality Foraged Links (AQFL.net) & The Ant Farm (antfarm.ma.cx / antfarm.home.dhs.org).
A couple of years ago I had to create a configuration system for FreeBSD systems in a data center... What I ended up using was a really crappy Perl module called PerlVision to do it (I was basing the code on a config system someone else wrote for some other systems). Anyway, it was pretty painless to do. You might consider writing the UI using a scripting language like perl or python that expose the ncurses bindings and use that to start any back-end processing that needs to happen. Also, as a design point, you might consider saving the configuration in a flat file that the backend reads. That way you can separate the UI development and testing completely from the actual product... If the need ever arises to create a fancier UI, you'll be able to then do it fairly painlessly.
So, yeah. Looks like no-one has any better recommendations...and little to say that's constructive at all, for that matter.
i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
When I do console-based stuff for whatever, I usually use Perl, and I usually have some common Term::ReadKey stuff. E.g., I do GetControlChars, go into ReadMode 'cbreak', append entered chars to a string (or chop them off if the entered char eq $ctrl{'ERASE'}), etc. etc.
I know you said C or C++, but two cents goes here.
Is there anything specific about the AS400 that you think is inferior to other platforms? While it does have some weaknesses, it also has a large number of very important strengths.
MSBasic of course.
What?
What?
The man ask for a UI advice and out come the Python zealots....
Umm, simple web pages are low bandwidth yet provide a much richer interface than curses. And you'll actually be living in the 21st century by using it with programmers who like to program it and have experience with it. And you can upgrade it slowly over time if and when bandwidth inproves. What is the problem? But an ncurses solution one say will probably have to be abandoned wholesale one day.
Check this out : http://tvision.sourceforge.net/
Yep, the old turbo vision. Very useful, object oriented, shortcut keys built-in. Mouse handling, very fast, very well debugged. Great stuff
I personally think that it ought to be compulsory for web designers to work through a 9600 baud straw, no make that marketing people, as they tell them what to do. It teaches them to be efficient and focus on what a web page needs to do: deliver information. Only after that job has been done can you think about making it look pretty. I'm actually in favour of what Attrition.org has done although that is a bit too stark - it is very effective.
:-) - after that it was mostly seriously robust. I haven't tried a wet piece of string but that would have probably worked as well, and once you know what you're doing a paired modem setup isn't that hard either.
:-).
I personally don't even bother to wait for Flash and sound crap to load up - that's a sales lead lost for a company.
Now, I've grown up with serial from my first 75/1200 baud modem to using serial controlled system and the main pain was getting the physical wiring right (XOFF is your friend
So I wouldn't call it hell - it worked. Hell was hiding in Wyse VT100 terminals that were user configurable because if a user can, a user will - that hasn't changed over the years
Insert
1997 can have its rant back when someone tells me how to run java apps inside firefox on a 64bit machine. Installing 32bit firefox on 64bit FC5 is more grief than I ever thought would be possible, and Sun don't have a mozilla plugin for 64bit Linux.
Simply code up a web-based system which looks good in Links - since the Twibright build can do rudimentary Javascript and table and frame formatting, works over a serial terminal, you can solve it for ALL your customers at once with one unique solution. You can still code the back end in C/C++.
One thing I *am* curious about, does Links support AJAX? I don't mean whizzy huge operating-system applications, just XMLHttpRequest and the ilk? Just the simple stuff, no graphics or so, just for form validation and background processing or so (it's very useful for status monitoring..)
Don't try to make a graphical app on a text based terminal. Just do a good text based intercafe with readline. Be it gdb, the python shell, mysql client, or just bash, a good readline enabled app is fun and efficient to use. You can TAB-complete (not enabled by default in python but you can have it), search history with CTRL-r and cut/yank a bunch of tokens at a time when you edit your command. OK the line editing shortcuts are usually over optimized for emacs users (did you know that M-u upcase a word in bash?) but you are free to rebind them.
...A guy with a nick of JHWH is asking for professional advice? I hope your name is John Herbert Walker Hoover. Just Sayin'...
Don't trust anyone under thirty.
Never tried it myself, but I believe they separate the data modeling from the presentation layer so you can target text clients, GUI clients, or web clients. Here is a screen shot showing forms presented on the various renderers.
There is a nice text UI for Java, that uses a subset of the Swing API:
http://www.pitman.co.za/projects/charva/
A web application that depends on Java in the browser probably uses applets. That is not the best way to solve any problem since there are dependencies out of the programmers control (versions of Java on the client, browser problems,...), it is similar to a (windows only) ActiveX dependency.
Java Webstart is very different, it handles deploying Java Applications (typically Swing UI based impementations, nothing to do with Applets or JApplets), resolves Java version dependencies etc. Webstart uses any Java version since 1.3 and any browser to download the initial jnlp file (the launch file, an xml file containing download, security and configuration data) and start the javaws process. The application runs outside the browser context, stand alone.
If you still use 1997 technology (applets) then you're probably encountering the 1997's problems. Knowledge has evolved since those days.
A GUI is really just an alternate way to present a menu of choices to the user. So a text interface that is versatile enough to support several levels of menus should be completely workable.
On OpenVMS?
No, I'm not being facetious. It still works great. Especially over those serial connections.
http://h71000.www7.hp.com/commercial/decforms/
Now, I use vi, but you could run that would-be o/s emacs, and just fill it up with macros....
mark
I use Pico, mainly because it's dead-simple and it's what my undergrad institution got me hooked on when I was just getting started with Linux/UNIX-land.
During grad school I wrote a recursive-descent Pascal compiler in Java using just plain old Pico; I guess my needs aren't that complex.
With the first link, the chain is forged.
I've used VI ever since I discovered it in 1990....can't imagine going back.
It's clunky, non-intuitive, and frustrating...and enormously powerful, super fast, and doesn't take my hands off the keyboard. I don't know a fraction of the commands available but my *fingers* do, and I'm constantly astonishing those I work with by how fast I can edit something with VI while they're still bringing up nedit.
VI all the way.
Steve
From the High, Snowy Mountains of Colorado
Sic gorgiamus allos subjectatos nunc
Oh, and be very carefull: having to run through a serial line and beeing forced to use lynx _and_ a web server is quite _not_ the same, dude.
[Pruneau
Use ncurses, just write your own wrapper functions to make it look a bit less scary. If you ever want to upgrade to a web-based interface later, you can just drop different code into your wrapper functions. I've written a few Perl scripts that detect environment variables set by the Apache server (or not) and based on that, either parse forms and generate HTML output with its own headers or read parameters from the command line and generate plain text output. Although you'll be using C, the principle is more or less the same.
..... that'll work great iff the terminals are all the same kind and you keep them forever. If you've a strange mix of VT-100, VT-220 and non-ANSI terminals (entirely possible with a mainframe system that's been expanded over time; when I was at Uni we had a strange mixture of real VT-220s, VT-220-alikes, VT-102-alikes, one or two real VT100s and many non-ANSI terminals connected to an assortment of 11/750s and 780s, a cluster of 8650s and some sort of unix box by Sequent), it's not even an option.
It's tempting to say hard-code in control sequences for the terminals you're using
Je fume. Tu fumes. Nous fûmes!
The comment posted about using the lynx text mode browser and making it web based was actually a very good idea.
Why? Because in 5 years they'll come back saying "We really need this to work on a web page."
We've done this before where I work when people are used to seeing those CICS screens and its proven effective.
You've come a long way baby.... just make a nice console like app, maybe something influenced by Lawnmower man, Hackers, any Keanu Reeeves starring future movie or Swordfish and you'll blow them away! Use all flash and actionscript!!!!
;-p but make the text have volume so it's 3D and put it on a touch screen display with a virtual keyboard.... if you want to be cool that is.
If you want to get fancy, write the whole thing as an openGl app with hooks into the system and just use bash or tch as your CLI
A fool throws a stone into a well and a thousand sages can not remove it.
The devil is in the details:
1. Get the wiring right. After you do that, the wires can only do one thing at a time
unlike network cable which automagically multiplexes.
2. If you have a lot of terminals, then you need to get them ALL wired independently to
the machine using multiport boards. Or use network-based terminal servers. Both points
of failure that have their own problems.
3. If you have sites at remote locations connected via a modem, then you have a whole 'nuther
can of worms. How does your application respond to the modem dropping connection. Does the
workflow handle going back in and picking up where the customer's order left off.
4. Are you going to write your app to "have an image of the screen in memory" so that the
screen can be refreshed when errant characters flip up. Or when that modem connection is
lost?
5. If you have a "graphics" terminal, can those graphics be printed to the printer. Are
you going to have multiple apps with page flipping via screen or some other tool. And
what happens when some of those esc sequences are lost and the screen goes nuts. They
need to be able to work on more than one thing at a time.
6. If you are using terminal servers, then they have their own menus and own problems.
Some people are going to have PCs. Are you going to use a rs232 terminal emulator with
them or are you going to give them a network client. What about the terminal differences
between your hard terminals and those software packages.
7. Multiport/tty drivers have been buggy in my experience.
Serial is NOT stable. It is NOT versatile. And by the time he is done with the project,
the guys in charge will have realized that the bandwidth they were worried about was
a small issue.
They probably have an installed base of dumb terminals, or they have a brain tumor. Or both.
You could use Sam - written with remote editing across slow serial lines in mind.
Or import the remote file system in using srvssh in plan9 or p9 in p9port and use Acme
Plan9port is a port of the Plan 9 userland to Linux / BSD / OSX
There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
Vermont Creative Software still sells Vermont Views, a C library of text windowing and data-entry functions. The serial terminal version runs under Linux and handles different terminal escape codes with a termcap-like file.
"apt-cache search curses" on debian yields a number of higher-level libraries (built on curses) that can simplify your work. For example: libaca "The Advanced nCurses API", libcdk ("curses-based widget library" in both C and perl), libcurses-ui-perl, libcurses-widgets-perl, libperlmenu-perl, libtexttools ("ada and c++ library for writing console applications"), python-urwid ("curses-based UI/widget library for Python"), twin ("Text mode WINdow environment"). So, I think the previous posters who mentioned ncurses are on the right track, but you probably want to use one of these other libraries as well, so you don't end up reimplementing menus, thermometer widgets, etc.
[
Try out the demo for Urwid.
You can use both desktop text user interface, and web based text user interface.
AND, It's open source!
Now how much would you pay?!
Personally, and I'm sure others would agree, I find VI(M) to be horribly user-unfriendly for someone who wants to do web coding.
I have a fancy for Nano after i discovered it during my first bout with Gentoo.
I can't say I've needed to look back since. It's quick, intuitive, and shell-friendly =)
This is not the greatest
After a large project making extensive use of CDK my conclusion is that CDK is half-baked as a windowing toolkit -- it lacks a cohesive philosophy for redrawing the screen that you expect in a windowing toolkit. It needs somebody with real GUI experience to re-engineer it. TurboVision looks interesting and refined, though I've never used it.
After observing the range of problem I hacked up CDK and produced a version that at least behaves sanely for layering components on top of each other and having them refresh properly to the screen.
However, my patch submissions were ignored by the CDK maintainer -- if anybody wants to do something with them just ask.
"dialog" is a curses-based program that throws up dialog screens based on options you give on the command line or a config file. The fact that you are considering a web-based solution with lynx makes me think that you don't need super-complex functionality -- dialog might be enough to do what you need. Essentially, the highest level of your user interface will be a shell script. The back end can be anything you want -- I would communicate with it via pipes of some kind.
Why no lynx? Is this a case where your client needs to be gracefully guided to the 21st century, or is this a case where your client has a real need for a text-based solution?
No, I will not work for your startup
Please check the website ddj.com, they used to have a nice one written in C.
Spoken by a true non-zealot who's obviously never tried python.
By the way I am not a python programmer nor do I use it regularly, but for some things it is the right tool for the job.
Your post reads like I was suggesting that he ought to continue using serial circuits. Nope.. The key two problems are (1) scalability and (2) legacy technology, it's brutally inflexible and it's hard to get parts for at a sensible price so there are maintenance issues. I'd emulate it straight at the box and carry it over the LAN (and start planning for replacement).
It's been a while since I touched this stuff, though, 14 years or so. The last time I did it I turned a monthly 2 man weeks worth of report rekeying into 15 mins worth of processing of the same report using Kermit (file transfer), Turbo Pascal (cleaning up the result as I couldn't get the report changed) and Paradox for data handling and subsequent stock despatch notes. I wasn't even a coder, we just put this together because it was so glaringly obvious a fix that it would have been embarrassing not to do it (Primal IT: fixing an itch 8-).
And no, I don't really miss those days - that company wanted the stars but wasn't prepared to even pay peanuts (classic British management, I guess they developed that style in the colonies) so I walked pretty soon afterwards.
Insert