Sometime ago I wanted to run some matlab scripts in octave. Most
of them were defining an user interface, making wide use of commands like
uicontrol and uimenu, not available in Octave.
After some research I found tk-octave, but though this tool allows
similar graphic interfaces, the language is far away from the one of matlab.
What I wanted was a tool able to translate the matlab language to the tk
language of wish.
Finally I came out with this project, wich is currently about to
reach its first beta. The idea is to have an upper layer that runs over its
control wish and octave and gives an interface to the user. The user commands
will be passed directly to octave or translated to tk and passed to wish,
according to the meaning of the command.
In order to accomplish this, Octawrap performs a very simple parsing
of the commands, just looking for some patterns in the instruction for identify
wich kind of instruction it is.
Currently Octawrap is able to display only labels and buttons, but being this two widgets the most widely used in programs, it would be able to run some simple scripts if required. Octawrap is also able to assign a callback to the buttons and potentially to any widget, just uploading the callback code into wish, programming wish to return this code on event, and launching a thread that will parse it and run it, just as if it were another user input
Currently I am putting all my effort in making a working widgets
collection at least usable. When this is done, I will release the first beta
version. I want to have compatibility at least for all the unix-like systems.
Therefore the first weeks I expect to be working in portings and compability
The support for the scripts will be the next step, and I plan to
introduce it for the version 1.2. I will not add it until having a complete
working 1.0 version. Other issues could be support for connect to wish and
octave through a network and to use wish also for plotting, deflecting to
wish also the calls to the plot command. In this way, octave will never receive
this kind of commands and octawrap will have to take care of the plotting
procedure, and probably this will involve to have a cache with the variables
to plot. The advantages of this improvement will be to have interactive plotings,
like those of matlab, in wich we can know where the mouse is.
This intends to be an introduction for reading the code, in case
you are interested in modify it for your own purposes. This description will
deal with the first alpha version, in which the idea is much more clear than
in the others. It is also available at sourceforge.
The basic behaviour of this version (and all the following) is to
fork to a process that will execute octave, and, on request, to do the same
with wish, launching a new wish for every "figure" request. The communication
from the user to octave/wish is achieved using pipes. The main program creates
two pipes for speaking to and from Octave (and redirects the standard input
and output of Octave in such a way that it will notice nothing), and it keeps
at the same time the two handlers for its standards input and output.
Two additional threads (in fact, processes) are launch with the
purpose of copying the user input on the octave input, and the octave output
to the console. This functions cannot be made directly because is required
to do a parsing for detecting the commands that are directed to wish.
The command figure allow us to launch wish instances (and therefore
the figure command embedded in octave, that calls gnuplot, will never be
used). For every instance of wish that we launch we will do the same process
(we will launch two threads, one for copying user commands to this wish and
other for do the same backwards)
The rest of the code are only technical details, like editing routines,
or the functions that parse the matlab commands and translate them onto wish
commands. I think that the only difficult part is the one here stated about
the different spawned processes.
Finally, if you do any customization that you think can be usefull
for others, do not forget to make it publicy available!!! Octawrap is under
BSD license and this allows you to release your modifications under the license
you want, even a commercial one.
Juan Garcia de Arboleya.