|
|
Appendix
C
Manual Pages
|
BACKEND(L) LOCAL COMMANDS
BACKEND(L)
NAME
backend - single user Udanax Green backend
SYNOPSIS
backend
TYPICAL USAGE
intf backend fex
DESCRIPTION
Backend accepts requests from a frontend, such as fex(L),
through stdin and responds through stdout according to
the FeBe Protocol 88.1x .
Metaprotocol
Initially backend conducts a dialogue with the frontend to establish
that both parties understand a common protocol. This "metaprotocol"
consists of one or more newline characters (i.e., byte value 0x0a) from
the frontend as synchronization; before the newlines, all input is ignored.
After the newlines backend expects to receive the string:
P0~
(i.e., byte values 0x50 0x30 0x7e). On seeing this, backend responds
with:
\nP0~
(0x0a 0x50 0x30 0x7e) meaning that Udanax Green FeBe Protocol
represented by "0" is understood. If backend sees any
other input after the last newline, it responds with:
\nP?~
(0x0a 0x50 0x3f 0x7e) meaning that it did not understand the frontend,
and then exits.
Error Redirection
After successful completion of the metaprotocol dialogue, backend
closes stderr and reopens it with the file backenderror
to avoid disrupting the frontend interaction.
Data Structure File
Backend then attempts to open the file enf.enf in the
current working directory. This file contains the data and links from
all sessions since it was created. If this file does not exist or has
been obviously corrupted, a new one is created.
Interactive Session
Backend is now ready to accept Udanax Green FeBe Protocol
requests. The session lasts until the frontend issues a quit request.
After backend responds with a quit code the frontend may exit.
After sending the quit code, backend updates enf.enf and
closes it before itself exiting.
Accounts
When backend starts accepting requests, the working user account
is set to the default account 1.1.0.1, under which new documents and
versions will be created until the working user account is changed with
the x-account request.
Note that if the session is using a new enfilade file, neither 1.1.0.1
nor any other account will exist, and must be created before any documents
may be created. To create the account 1.1.0.1, first create the node
1.1 with:
create-node-or-account 0.1.1
and then create account 1.1.0.1 with:
create-node-or-account 0.1.1.0.1
Edit Logging
Backend records all edit requests in a file called:
lnm.d.h:m
where m, d, h, and m are the month,
day, hour, and minute, respectively that the backend began execution.
Each line in this file is a single backend request. This format is possible
since the Udanax Green FeBe Protocol terminator character `~'
and a newline are accepted as identical by backend, and multiple
delimiters before a new request are ignored (treated as null requests).
The file is produced so that edit operations made during any session
may be reproduced later should backend fail, or for whatever
other reason may arise. If you want to redo the operations recorded
in an individual log file, edit that file so that it has at least one
blank line followed by "P0~" at the top, then invoke
backend as
backend <logfile
where logfile is the name of the appropriate edit log. The
edit described above is necessary since the metaprotocol does not appear
in the log.
For reconstructing entire enfilades from edit logs, it is useful to
concatenate the relevant logs into one file. To do this, first append
the files together with cat(1), or some other utility.
Then edit the resulting file to remove all quit requests (16~) except
at the last line of the file. This new file may then be used to execute
the contained requests in the manner described above.
FILES
backenderror - redirected stderr
enf.enf - the magic data structure file
ln?.?.?:? - the edit log file
SEE ALSO
fex(L), intf(L)
Udanax Green FeBe Protocol Documentation, Udanax.com, August
1988
BUGS
Virtually no sanity checking is performed on the input.
There are many possible requests, particularly edit operations on non-existent
addresses and creating documents in non-existent accounts that are likely
to corrupt the data structure.
Numeric inputs to the backend (i.e., tumbler digits, sizes and counts)
are currently limited to values representable by 32 bit unsigned integers.
Tumblers input to the backend are allowed a maximum depth of 11 tumbler
digits from the last leading zero digit.
Text items for insert may be no more than 950 bytes long; larger insertions
must be broken into multiple text items.
Longer items are likely to cause the program to fail (see previous bug).
Node numbers are meaningless other than as a prefix for account numbers.
The data file enf.enf has a size limit around 400K disk blocks
because of a kluged, fixed size allocation table.
etc...
NOTE
Since the data structure is easy to corrupt with invalid, but unchecked,
requests it is a good idea to occasionally copy enf.enf to a
backup file.
Last change: 25 August 1988
BACKENDDAEMON(L) LOCAL COMMANDS BACKENDDAEMON(L)
NAME
backenddaemon - multiple user Udanax Green backend daemon
TYPICAL USAGE
backenddaemon is usually spawned when necessary by ints(L)
or intx(L), which will be referred to as "glue"
programs.
DESCRIPTION
Backenddaemon accepts and responds to requests from up to five
frontends through socket(2) connections using the Udanax
Green FeBe Protocol.
Error Redirection
The first action by the backenddaemon process is to close stderr
and reopen it as the file backenderror to avoid disrupting the
frontend interaction.
Parameter and Data Structure Files
Backenddaemon attempts to open .backendrc in the working
directory inherited from the process that spawned it, either a glue
program or a shell. This file is used by backenddaemon, both
glue programs, and xlog(L) to set various run-time values
to other than their defaults with lines of the form
metaname = word
where each program uses a different set of metanames, although
since they all use the same routine to read the file, lines not used
by a particular program must still be correct. Lines in .backendrc
beginning with "#" are ignored.
Backenddaemon then tries to open enf.enf in the same
directory. Enf.enf contains the data and links from all sessions
since it was created. If this file does not exist or has been obviously
corrupted, a new one is created.
Connection to Frontend
After the data structure initialization, backenddaemon creates
a socket(2) with AF INET address format and SOCK_STREAM
communications semantics. This socket is then bound to either the default
port 55146 or the port given by
port = port-number
in .backendrc. The socket address is set to INADDR_ANY so
that connections will be accepted from any host in the domain. Backenddaemon
then waits for frontend connections with select(2). It
is up to a frontend or a glue program to attach to the socket with connect(2).
After a connection is established, backenddaemon reads a device
name from the socket. This name should be "SOCKET" if frontend
interaction is to be through the socket. Ints(L) uses
this mechanism. Otherwise, backenddaemon will communicate through
the named device; see intx(L) for an example of this method.
After the device name is acquired, but before it is used, backenddaemon
expects an x-account request over the socket to establish the initial
account to be used (see Accounts, below).
When the account is set, backenddaemon switches to the nonsocket
device if one was specified, otherwise communication continues to the
original socket connection.
Metaprotocol
Next, backenddaemon conducts a dialog with the frontend to establish
that both parties understand a common protocol. This "metaprotocol"
consists of one or more newline characters (i.e., byte value 0x0a) from
the frontend as synchronization; before the newlines, all input is ignored.
After the newlines, backenddaemon expects to receive the string:
P0~
(i.e., byte values 0x50 0x30 0x7e). On seeing this, backenddaemon
responds with:
\nP0~
(0x0a 0x50 0x30 0x7e) meaning that Udanax Green FeBe Protocol represented
by "0" is understood. If backenddaemon sees any other
input after the last newline, it responds with:
\nP?~
(0x0a 0x50 0x3f 0x7e) meaning that it did not understand the frontend,
and then closes the connection.
Interactive Session
Backenddaemon is now ready to accept Udanax Green FeBe Protocol
requests. The session lasts until the frontend issues a quit request.
After backenddaemon responds with a quit code the frontend may
exit. After the quit command, Backend closes the connection that
the frontend was using.
Accounts
See backend(L) for a description of account maintenance.
Edit Logging
Backenddaemon records all edit requests as backend(L)
does, with the added property that an x-account request is placed in
the log file whenever the requests that may follow are from a different
account than the previous requests.
FILES
.backendrc - run time switches
backenderror - redirected stderr
enf.enf - the magic data structure file
ln?.?.?:? - the edit log file
SEE ALSO
backend(L), fex(L), ints(L), intx(L), xlog(L), accept(2), bind(2), socket(2)
Udanax Green FeBe Protocol Documentation, Udanax.com, August
1988
BUGS
In .backendrc, whitespace is required on both sides of the "="
on each line.
When given a device name other than "SOCKET," daemon
does not read lines that are not terminated with a newline.
See backend(L) for more bugs.
NOTES
Since the data structure is easy to corrupt with invalid but unchecked
requests, it is a good idea to occasionally copy enf.enf to a
backup file.
The limit of 5 frontend connections is an arbitrary one, and does not
reflect any limitations in the internal structure of the backend. The
socket(2) facility was chosen because it was simple enough
to not distract from the development of the more intricate Udanax hypertext
functionality (i.e., it was a quick hack).
Last change: 25 August 1988
FEX(L) LOCAL COMMANDS FEX(L)
NAME
fex - experimental Udanax Green frontend
SYNOPSIS
fex pipe-from-backend pipe-to-backend
INVOCATION
fex is normally invoked by a "glue" program such as
intf that starts both the frontend and the backend and sets up
the pipes to allow them to communicate.
DESCRIPTION
fex is a screen-oriented program resembling a visual text editor
which provides a user interface to the Udanax Green backend backend(L).
There is no explicit insert mode: alphanumeric characters typed at any
time are inserted into the text under the cursor position. The DEL key
is used to delete characters before the cursor position.
When fex is invoked it automatically locates and places on the
screen a document (1.1.0.1.0.1) that serves as an entry point to the
system. This document contains a summary of frontend commands and a
link connecting it to another document that serves as a general index.
Additional commands are invoked through a pop-up menu.
TERMINOLOGY
end-set A region of text (possibly discontinuous
and possibly spanning more than one document) connected to
another such region by a link.
link A connection between two end-sets, modified by
a third end-set. These are respectively called the from-set,
to-set, and three-set, of the link. From-sets
are displayed as back-lit; to-sets as underlined (termcap
permitting) or as back-lit. Three-sets are used to
describe the intended meaning of the link, such as if it is
a jump link or a footnote link. The distinction between from-sets
and to-sets reflects the link author's intentions rather than
any functional difference. The from-sets and to-sets of a
link are really symmetrical.
cut A temporary mark made in the text to specify boundaries
of an end-set for a link to be created, or a section to be
rearranged or deleted.
display style When a link is followed, the text at
the destination is displayed in a window that can be a quarter-screen
(default), a horizontal half-screen, a vertical half-screen,
or an entire screen. The display style can be changed through
the menu (see below). If a window was created by following
a link, its display style is initially determined by the three-set
of that link.
COMMANDS
cursor control
^W or up arrow Move cursor up
^Z or down arrow Move cursor down
^A or left arrow Move cursor left
^S or right arrow Move cursor right
^Q Top of document
^F Down one page
menu
^N Show menu: current selection is back-lit. Up and
down cursor controls change current selection and SPACE
BAR executes it. Available menu selections are listed under
MENU OPTIONS below.
link following
^Y Follow the link indicated by the cursor. If the cursor
position is occupied by multiple, overlapping end-sets,
the first lines of each destination will be displayed in
a menu. When the link is selected the destination text will
appear in a new window whose size and position is determined
by the display style.
^U Return from link: the first lines of the windows to which
a return is possible are displayed in a menu.
text editing
^G Make cut. (For deletions see MENU OPTIONS
)
^P Delete block
^C Rearrange
link creation
^V Change from-set: text delimited by cuts is added
to a temporary from-set; then the cuts are cleared.
^B Change to-set: text delimited by cuts is added to a temporary
to-set; then the cuts are cleared.
^L Make link: a menu appears asking if the link is to be
a jump, quote, footnote, or marginal note. An appropriately
typed link is then created between the temporary from-set
and the temporary to-set; then the temporary end-sets are
cleared.
miscellaneous
^] Redraw screen
^T Exit program
MENU OPTIONS
set display style Select a display style, as
defined above
show key definitions (unimplemented)
compare Show corresponding portions of two documents
follow link = ^Y
create link = ^L
make cut = ^G
delete cuts Clear all cuts
delete block = ^P
rearrange = ^C
create document Create a new, empty document. NOTE: a link
to the new document must be made before leaving the document
or the frontend will be unable to retrieve the document
even though it still exists.
change from-set = ^V
change to-set = ^B
clearendsets Remove all temporary end-sets created by the
previous two commands.
create version Duplicate the current document as a new version.
NOTE: a link to the new document must be made before leaving
the document or the frontend will be unable to retrieve
the document even though it still exists.
BUGS
This is an experimental frontend. The following bugs are known to exist.
There are undoubtedly others.
1. Hitting DELETE with the cursor in the first position of a
window causes a fatal error.
2. Text cannot be inserted below the last line of a document. Attempts
to do so cause a fatal error. To append text to a document, place
the cursor at the end of the last line and hit RETURN. Blank lines
may be appended with repeated RETURNs.
3. Deletion of text in a newly-created document (i.e., one created
in the current invocation of fex) may result in a mispositioning
of the cursor. The actual document should be edited correctly.
However, it is recommended that editing of newly-created documents
be kept to a minimum.
Last change: 25 August 1988
INTF(L) LOCAL COMMANDS INTF(L)
NAME
intf - connect a frontend to the single-user Udanax Green backend
SYNOPSIS
intf backend frontend
DESCRIPTION
Intf uses the pipe(2) facility to connect a frontend
program to the standard I/O of a program such as backend(L).
Two pipes are created by intf, one from the frontend to the backend,
the other in the opposite direction. One end of each pipe is attached
to stdin and stdout. Intf then forks and executes
the backend program with these pipes as its standard I/O. The original
branch of the fork then executes the frontend program with the file
descriptor numbers for the other ends of the pipes passed as command
line arguments in the form
frontend pipe-from-backend pipe-to-backend
so that the frontend can communicate with the backend through them.
Intf does not exit if successful, turning into the frontend instead.
SEE ALSO
backend(L), frontend(L), execl(2), fork(2), pipe(2)
Last change: 25 August 1988
INTS(L) LOCAL COMMANDS INTS(L)
NAME
ints - connect a frontend to a Udanax Green backend daemon
SYNOPSIS
ints frontend account
DESCRIPTION
Ints uses the socket(2) facility to connect a
frontend program to daemon(L).
Ints first reads the file .backendrc in the current directory.
If the line
backenddir = path
is present, ints sets path as its working directory,
otherwise the directory is unchanged.
Next, ints acquires a socket with AF_INET address format and
SOCK_STREAM semantics-the same form as daemon(L). Ints
then binds the socket to a specific port and host. The default port
is 55146 and the default host is localhost, although these can be changed
in .backendrc with
port = port-number
and
host = host-name
Connect(2) is then called with this binding. If the connection
is not made, ints spawns a daemon on the local host machine with
fork(2) and execl(2). The default daemon
is backenddaemon in the directory set above, but this may be
changed with
backend = daemon-name
in .backendrc. Ints then makes a second attempt to
connect after a 15 second wait. A second failure results in termination.
Once the connection is acquired, ints sends the string "SOCKET"
to daemon to indicate that the socket connection will be used
by the frontend. Ints then sends an x-account request to daemon
with the account number from the command line.
Finally, ints executes the frontend program. The default frontend
is fex in the directory set above, but may be changed with
frontend = frontend-name
in .backendrc. The file descriptor numbers for the socket
are passed as command line arguments in the form
frontend from-backend to-backend
so that the frontend can communicate with the backend through them.
Ints does not exit if it is successful.
FILES
.backendrc - run time switches
backenddaemon - Udanax Green backend daemon program
fex - frontend program
SEE ALSO
daemon(L), fex(L), bind(2), connect(2), socket(2)
Udanax Green FeBe Protocol Documentation, Udanax.com, August
1988
BUGS
If you are trying to connect to a backend daemon on another machine,
it will not help for ints to spawn one on the local machine,
as the second connection attempt will still fail.
Last change: 25 August 1988
INTX(L) LOCAL COMMANDS INTX(L)
NAME
intx - connect a Udanax Green backend daemon to a terminal
SYNOPSIS
intx backend account
DESCRIPTION
Intx is almost identical to ints(L). Instead of
connecting to a frontend via a socket, however, intx connects
the backend to the terminal that is attached to stdin. The purpose
of this is to allow a frontend program running on a different machine
connected to a network host via a serial line to connect to a Udanax
Green backend.
FILES
.backendrc - run time switches
backenddaemon - Udanax Green backend daemon program
SEE ALSO
daemon(L), xlog(L), connect(2), socket(2), ttyname(3)
BUGS
Presently requests to the backend are line buffered with intx.
Last change: 25 August 1988
XLOG(L) LOCAL COMMANDS XLOG(L)
NAME
xlog - entry point for experimental multiple user Udanax Green
hypertext system
SYNOPSIS
xlog [ user-name ]
DESCRIPTION
Xlog attempts to find an Udanax Green account number based on
a user name, if any, and then invokes either ints(L) or
intx(L) with that account number. If no user name is given,
account 1.1.0.1 is used.
Xlog first reads .backendrc in the current directory.
If the line
backenddir = path
is present, xlog sets path as its working directory,
otherwise the directory is unchanged. Xlog then prompts for a
password (which is not checked), and looks for the account number for
user-name in either accountfile in the directory set above,
or in the file named by
accountfile = file-name
in .backendrc. This file contains lines with the format
user-name:password:account-number
for example,
albert:space-time:1.42.0.23
Xlog then asks if you want to run the standard frontend (through
ints(L)) or one running on a different machine (connected
via intx(L)). The appropriate program is then executed,
and xlog vanishes.
FILES
accountfile - file to map from user names to account numbers
.backendrc - run time switches
SEE ALSO
daemon(L), fex(L), ints(L), intx(L), execl(2)
BUGS
If the directory is changed by .backendrc, ints, intx,
and daemon will start with that directory, and attempt to read
.backendrc from there. For now, just keep a copy wherever it
may be used.
Last change: 25 August 1988
XUMAIN(L) LOCAL COMMANDS XUMAIN(L)
NAME
xumain - interactive stand alone Udanax Green backend with awful
numerical interface
SYNOPSIS
xumain [ < setup-script ]
DESCRIPTION
Xumain is a quasi-interactive stand alone version of backend(L),
which does not use the Udanax Green FeBe Protocol syntax, instead
prompting for input to most requests. Xumain does, however, have
enough similarities to Udanax Green FeBe Protocol for the protocol
document to be a useful reference.
Xumain is the original Udanax Green backend, written before
any frontend, and was intentionally left as a user-hostile program to
encourage us to really write a frontend. The program continues to exist
principally as a tool to create Udanax Green documents from text files
using the source-unix-command command, which should really be a function
of some
frontend.
Spec-sets
Spec-sets, spans, and v-spans are handled differently by xumain,
with prompts for yes/no responses to determine which type to use; some
of the prompts are context dependent. Tumblers are also different: xumain
requires that the leading zeros of a tumbler are explicitly given, rather
than with an exponent. All the prompts below that end with "=>"
require a tumbler according to the Udanax Green FeBe Protocol.
When a spec set is expected the user is prompted with
any spans or vspecs? (y/n)
where span has its usual meaning and vspec is a document number with
a set of v-spans. The spec set is terminated with a negative response
to this prompt. A positive response is followed by the prompt
a span? (y/n)
This is asking whether you want a span or a collection of v-spans within
a document. A `yes' answer elicits a prompt for a span:
enter span
start=>
width=>
If you respond with `no', then you will be prompted for a document number
with
document=>
and then for a v-span set with
any spans? (y/n)
except that this time, the span in question is a v-span. V-spans are
requested until a `no' answer, after which you will be prompted for
the next spec.
As an example consider this request to retrieve the first 10 characters
from the document 1.1.0.1. (The emphasized text is the user's response.):
request? 5
any spans or vspecs? (y/n) y
a span? (y/n) n
document=> 1.1.0.1
any spans? (y/n) y
enter span
start=> 1.1
width=> 0.10
any spans? (y/n) n
any spans of vspecs? (y/n) n
Assuming they are present, xumain will then respond with those
10 characters.
Commands
There are four commands, x-account, create-node-or-account, open, and
close which do not prompt for their arguments. All these, however, accept
the same arguments as Udanax Green FeBe Protocol, but separated
by newlines rather than the Udanax Green FeBe Protocol word
delimiter character.
The insert request in xumain has an important difference from
Udanax Green FeBe Protocol. Rather than giving a count of the
number of characters in the text item, the input text is terminated
with a blank line.
There is a request unique to xumain called source-unix-command,
which is request number 21. This asks for a command for execution by
sh(1) with the standard output directed to a file with
the name "xum" followed by xumain's process number.
A new document is created and the command output is placed there. The
new document number is printed for future use. Finally, the output file
is deleted.
FILES
enf.enf - the magic data structure file.
xum??? - command output for source-unix-command
SEE ALSO
backend(L), sh(1)
Udanax Green FeBe Protocol Documentation, Udanax.com, August
1988
BUGS
See backend(L).
NOTE
Since the data structure is easy to corrupt with invalid but unchecked
requests, it is a good idea to occasionally copy enf.enf to a
backup file.
Xumain will not appear in future releases.
Last change: 25 August 1988
|
|