I am researching a concept that I am hoping to call a uniengine.

I define the word uniengine as follows.

----

A uniengine is a software process that obeys a sequence of software language
commands which commands are expressed by a set of unicode characters
designated for the purpose and where the said software language has no
program sequence changing commands.

----

For research purposes I am devising a uniengine that uses a few more than
1024 code units and placing these uniengine codes in the private use area.
>From the unicode documentation, I have decide to place them in the middle of
the private use area, using U+EC00 to U+EFFF as a block and placing the
additional character codes within U+EB00 to U+EBFF.

The codes U+EC00 to U+EFFF each have essentially the same meaning, namely,
"place the ten least significant bits of this code into the accumulator
register of the uniengine" which permits 1024 different bit patterns to be
placed in the accumulator register of the uniengine.

The other commands are intended to include a comprehensive set of commands
for certain graphics and other purposes, yet to be essentially a small set
of easily implemented instructions in the hope that the uniengine technique
will be widely implemented.

The other commands include such items as COPY ACCUMULATOR TO X0 and COPY
ACCUMULATOR TO Y0 and MOVEPEN and DRAWLINE.  There is also a COPY
ACCUMULATOR TO X0 AND THEN DRAWLINE command and so on.  So a four code
sequence of loading the accumulator, copying the accumulator to Y0, loading
the accumulator, copying the accumulator to X0 and then drawing a line
allows a line to a specified coordinate to be drawn.  There are a variety of
commands being developed so that both raster graphics and vector graphics
may be drawn.  The intention is to produce a comprehensive set of commands
to allow the possibility of drawing graphics up to 1048576 pixels by 1048576
pixels in x,y,z,t space.  However, many uses are envisaged as being in
simple x,y graphics about 200 pixels in size in the x and y directions or
thereabouts.  Commands to generate colours and store up to 256 colours are
also included.  This will enable a unicode document to contain graphics.
The idea is that a computer software package will receive unicode characters
and draw each character in the current cell which has the point (0,0) as its
top left corner and then move the position of the (0,0) point ready to
receive the next character.  In the event of a uniengine graphics command
being received, the current (0,0) point will be used as the (0,0) point for
the uniengine graphics commands.

I feel that this is a useful development as many documents need to contain
pictures and the use of a uniengine graphics system to describe them within
the unicode document using an open standard will be a useful alternative to
having to include a link to a separate graphics file.  The use of vector
graphics in a context of producing a raster scan will allow pictures to be
encoded in uniengine graphics in a compact method, drawing all contiguous
pixels of the same colour in a row with one drawline command.

A command to fill a rectangle with a single colour is also included, yet
constructs such as circles and so on are deliberately not included as the
uniengine graphics are intended to express a ready completed graphic, not
one which is to be computed as such.  The use of the filled rectangle
command is seen as reasonable so that it may be used to produce a background
colour fill.

Another use for the uniengine is to access hypercode.  Commands such as
COPY ACCUMULATOR TO H2 and COPY ACCUMULATOR TO H1
and COPY ACCUMULATOR TO H0 are provided and an instruction
DRAW THE CHARACTER DENOTED BY THE H REGISTERS is
provided.  The latter instruction would draw the character denoted by the
code 1048576*H2 + 1024*H1 + H0.

The method used for designating hypercode characters, hypercode being a name
suggested by me for characters beyond U+10FFFF, could possibly be agreed as
being by a method involving uniengine vector graphics commands, so that an
application for registration of a hypercode character would need to include
a uniengine vector graphics coding sequence for the character.  A library of
such definitions could be maintained on a website and made available on a
CD-ROM as well.  Naturally, arrangements for correct scaling of the
character into the document would need to be agreed.  Such a uniengine
graphics definition method for hypercode characters might be particularly
useful for encoding such characters as music type.

William Overington

25 February 2001








Reply via email to