ugh.book

(singke) #1

114 Terminal Insanity


For many years programs kludged around the lack of a graphical API,
hard-wiring into themselves the escape sequences for the most popular
terminals. Eventually, with the advent of vi, Bill Joy provided his own API
based on a terminal descriptor file called termcap. This API had two
fundamental flaws:


  1. The format of the termcap file—the cursor movement commands
    included, those left out, and the techniques for representing
    complex escape sequences—was, and remains to this day, tailored
    to the idiosyncracies of vi. It doesn’t attempt to describe the
    different capabilities of terminals in general. Instead, only those
    portions that are relevant for vi are considered. Time has somewhat
    ameliorated this problem, but not enough to overcome initial design
    flaws.

  2. The API engine, developed for vi, could not be used by other
    programmers in their own code.


Thus, other programs could read the escape sequences stored in a termcap
file but had to make their own sense of which sequences to send when to
the terminal.^1

As a result, Ken Arnold took it upon himself to write a library called curses
to provide a general API for VDTs. This time, three problems arose. First,
Ken inherited the vi brain damage when he decided to use the termcap file.
Starting over, learning from the mistakes of history, would have been the
right choice. Second, curses is not a very professional piece of code. Like
most Unix tools, it believes in simplicity over robustness. Third, it’s just a
library with no standing, just like /etc/termcap itself has no standing.
Therefore, it’s not a portable solution. As a result of these problems, only
part of the Unix community uses curses. And you can always tell a curses
program from the rest: curses programs are the ones that have slow screen
update and extraneous cursor movement, and eschew character attributes
that could make the screen easier to understand. They use characters like
“|” and “-” and “+” to draw lines, even on terminals that sport line-drawing
character sets. In 1994, there is still no standard API for character-based
VDTs.

(^1) And if that wasn’t bad enough, AT&T developed its own, incompatible terminal
capability representation system called terminfo.

Free download pdf