Rdb: Ruby-Nachbau der MWC /rdb-Werkzeuge
This commit is contained in:
+190
@@ -0,0 +1,190 @@
|
||||
.TH screen "" "" "/rdb Command"
|
||||
.PC "Convert a form into a screen-input shell program"
|
||||
\fBscreen < \fIform\fB > \fIshellprogram\fR
|
||||
.PP
|
||||
.II "screen^make input form"
|
||||
The command
|
||||
.B screen
|
||||
reads
|
||||
.I form
|
||||
and writes a COHERENT shell program that paints the screen and reads
|
||||
a user's input.
|
||||
Because the output of
|
||||
.B screen
|
||||
is a shell script, you can edit it to validate data,
|
||||
read data and write it onto the screen, and so on.
|
||||
.I form
|
||||
must be in the same format as described in the manual entry for the command
|
||||
.BR report .
|
||||
.PP
|
||||
.B screen
|
||||
writes a simple shell script.
|
||||
The script works ``as is'' to read data
|
||||
typed onto the screen and to write a standard table.
|
||||
It uses the
|
||||
.B /rdb
|
||||
command
|
||||
.B cursor
|
||||
to move to each input field on the screen.
|
||||
.PP
|
||||
A script output by
|
||||
.B screen
|
||||
can be used in many ways.
|
||||
You can use it as a form, to enter data into a new table.
|
||||
You can edit the script to have it append its output into an
|
||||
existing table,
|
||||
to pass its data via a pipe to another command, or to read
|
||||
data from a table and display them on the screen.
|
||||
Commands can be edited into the screen-form script.
|
||||
You can add calls to the
|
||||
.B /rdb
|
||||
command
|
||||
.BR validate ,
|
||||
to confirm that the user has added data that are at least sensible.
|
||||
You can even embed the script within another shell script, to perform
|
||||
screen entry for it.
|
||||
.SH "Setup Steps"
|
||||
To create a screen-entry form, do the following:
|
||||
.IP \fB1.\fR
|
||||
Use your text editor to write the screen-form file.
|
||||
.IP \fB2.\fR
|
||||
Run
|
||||
.B screen
|
||||
to read the form file.
|
||||
Redirect its output into the file in which you wish to store the form's
|
||||
executable script.
|
||||
.IP \fB3.\fR
|
||||
Edit the shell script to meet your requirements,
|
||||
such as adding validation, record locking, and so forth.
|
||||
.IP \fB4.\fR
|
||||
Run the executable shell script to input data and write a new table.
|
||||
.SH Example
|
||||
A simple form looks like this:
|
||||
.DM
|
||||
Mail List Entry Form
|
||||
<!date!>
|
||||
.sp \n(pDu
|
||||
Name : <Name> Company: <Company>
|
||||
Street: <Street>
|
||||
City : <City> State : <State> ZIP: <ZIP>
|
||||
Phone : <Phone>
|
||||
.DE
|
||||
.PP
|
||||
Everything is written to the screen except what is between angle brackets
|
||||
``<>'', which are variables to be input.
|
||||
Exclamation marks within angle brackets (e.g., \fB<!date!>\fR)
|
||||
mark commands to execute when the program is running.
|
||||
.PP
|
||||
When
|
||||
.B screen
|
||||
reads the above form and compiles it, it writes the following shell script:
|
||||
.DM
|
||||
: paint crt screen
|
||||
exec 1>/dev/tty
|
||||
cat <<SCREEN
|
||||
${CLEAR} Mail List Entry Form
|
||||
.DE
|
||||
.DM
|
||||
Name : Company:
|
||||
Street:
|
||||
City : State : ZIP:
|
||||
Phone :
|
||||
.DE
|
||||
.DM
|
||||
SCREEN
|
||||
.sp \n(pDu
|
||||
: read user input
|
||||
cursor 1 23 ; date;
|
||||
cursor 3 8 ; read Name;
|
||||
cursor 3 36 ; read Company;
|
||||
cursor 4 8 ; read Street;
|
||||
cursor 5 8 ; read City;
|
||||
cursor 5 36 ; read State;
|
||||
cursor 5 55 ; read ZIP;
|
||||
cursor 6 8 ; read Phone;
|
||||
.DE
|
||||
.DM
|
||||
: output table head
|
||||
exec 1>&2
|
||||
echo "Name Company Street City State ZIP Phone"
|
||||
echo "---- ------- ------ ---- ----- --- -----"
|
||||
: append row
|
||||
echo "$Name $Company $Street $City $State $ZIP $Phone"
|
||||
.DE
|
||||
.PP
|
||||
This shell progam is in three parts, each introduced by a comment:
|
||||
.IP "\fBpaint crt screen\fR"
|
||||
This section clears the screen, then paints the form onto it.
|
||||
.IP "\fBread user input\fR"
|
||||
This section
|
||||
moves the cursor to each input field, then waits for
|
||||
the user to enter a string of characters.
|
||||
Each field is linked to a column; that is, what the user types in that field
|
||||
will be written into the column to which the field is linked.
|
||||
.IP "\fBoutput table head\fR"
|
||||
The final section writes the new table in standard
|
||||
.B /rdb
|
||||
format; that is, a column header followed by the row of data entered by the
|
||||
user.
|
||||
.PP
|
||||
To let you use the screen program in a pipe,
|
||||
the generated commands send the interactive output to the screen through the
|
||||
standard output temporarily tied to
|
||||
.BR /dev/tty ,
|
||||
and to the output table through the standard-error device.
|
||||
To accomodate COHERENT's implementation of
|
||||
.BR exec ,
|
||||
you must tie the standard error to the standard output
|
||||
when you run the script screen has created.
|
||||
For example
|
||||
.DM
|
||||
mail.s > mail.t 2>&1
|
||||
.DE
|
||||
.PP
|
||||
The following shows the form compiled above, with example data:
|
||||
.B1
|
||||
Mail List Entry Form
|
||||
Wed Sep 4 14:09:30 EDT 1987
|
||||
.sp
|
||||
Name : Hi Ho Company:
|
||||
Street: 1st St.
|
||||
City : LA State : CA ZIP: 90024
|
||||
Phone : 213-555-1212
|
||||
.B2
|
||||
.PP
|
||||
The above input creates the following table:
|
||||
.PP
|
||||
.DM
|
||||
Name Company Street City State ZIP Phone
|
||||
---- ------- ------ ---- ----- --- -----
|
||||
Hi Ho HH Inc. 1st St. LA CA 90024 213-555-1212
|
||||
.DE
|
||||
.PP
|
||||
You can redirect output into a file or pipe.
|
||||
Here, it was directed into table
|
||||
.BR mail.t .
|
||||
You can use this table as its stands alone,
|
||||
or you can append it to another table by by piping it to the
|
||||
.B append
|
||||
command.
|
||||
For example:
|
||||
.DM
|
||||
mail.s 2>&1 | append mail.t
|
||||
.DE
|
||||
.SH "See Also"
|
||||
.B
|
||||
cursor,
|
||||
lock,
|
||||
unlock,
|
||||
validate
|
||||
.R
|
||||
.br
|
||||
COHERENT Lexicon:
|
||||
.B
|
||||
cat,
|
||||
echo,
|
||||
exec,
|
||||
ksh,
|
||||
read,
|
||||
sh
|
||||
.R
|
||||
Reference in New Issue
Block a user