Files

137 lines
2.6 KiB
Groff

.TH cursor "" "" "/rdb Command"
.PC "Move the cursor to the row and column requested"
\fBcursor \fIrow col \fB[ \fICURSOR \fB]\fR
.PP
.II cursor^move
.II "move cursor"
.II "reposition cursor"
The command
.B cursor
move the cursor to screen position
.I row
and
.IR column .
You can
.B cursor
and the
.B /rdb
command
.B clear.rdb
to perform complex screen handling from within a shell script.
You can paint your screen with cursor moves and
.B echo
commands;
then use the
.B read
command to read the user's input; and finally use various
COHERENT and
.B /rdb
commands to examine and confirm the input.
You can also clear fields of the screen by moving the cursor
and writing blanks.
.PP
You must give the row and column you want.
.B cursor
also needs the cursor movement (\fBcm\fR) entry from file
.BR /etc/termcap .
This can be given as an argument, but the easiest way
is to set up the shell variable called
.B CURSOR ;
then
.B cursor
will find it in its environment automatically.
To set up the
.B CURSOR
variable, do the following:
.DM
CURSOR=`termput cm`
.DE
.PP
.\"On UNIX System 5 Release 2, use
.\".B tput:
.\".sp
.\".nf
.\"$ CURSOR=`tput cup`
.\".fi
.\".sp
Another way is to use your text editor to find the entry in
.B /etc/termcap
and copy its
.B cm
entry for your terminal to your
.BR .profile :
.DM
CURSOR=^[[%p1%d;%p2%dH
.DE
.PP
This is the entry for the
.B pc
terminal.
The uparrow bracket (^[) is the ESC character (\fB<ctrl-[>\fR).
The function
.I tgoto
function from the
.B termcap
library
converts it into the proper escape string.
.SH Example
The following moves the cursor to the middle of an 80-by-24 screen:
.DM
cursor 11 38
.DE
.SH Speed
.B cursor
is fast, but there is a much faster way.
Set a shell variable like
.B L22
to move to the 22nd line:
.DM
L22=`cursor 23 0`
.DE
.PP
Then you can use:
.DM
echo "$L22$MESSAGE\ec"
.DE
.PP
in your shell programs for a fast cursor movement and to print a message.
Note the quotation marks around the messages in case there are
special characters.
Also note the
.IR \ec ,
which tells
.B echo
not to print a carriage return.
.\"In older versions of UNIX
.\"it is
.\".I -n
.\"instead of
.\".I \ec.
.PP
An even better trick is to use the shell feature that tests
to see if a variable has been set and only gives it a value
when it needs one:
.DM
echo "${L22:=`cursor 22 0`}$MESSAGE\ec"
.DE
.PP
All of this magic causes the shell to check if
.B L22
has a value.
If not, it executes the
.B cursor
command and assigns the value to
.B L22.
Then, if this line is called in a loop, the next time the
value will have been set and will be about 20 times faster.
.SH "See Also"
.B
termput
.R
.br
COHERENT Lexicon:
.B
\&.profile,
termcap
.R