- The set and show commands for setting and displaying gnuplot
parameters have been replaced by gset and gshow. This change will
probably break lots of things, but it is necessary to allow for
compatibility with the Matlab graphics and GUI commands in a
future version of Octave. (For now, the old set and show commands
do work, but they print an annoying warning message to try to get
people to switch to using gset.)
- Octave has been mostly ported to Windows NT and Windows 95 using
the beta 17 release of the Cygnus GNU-WIN32 tools. Not everything
works, but it is usable. See the file README.WINDOWS for more
information.
- Dynamic linking works on more systems using dlopen() and friends
(most modern Unix systems) or shl_load() and friends (HP/UX
systems). A simple example is provided in examples/hello.cc.
For this feature to work, you must configure Octave with
--enable-shared. You may also need to have a shared-library
version of libg++ and libstdc++.
- New data types can be added to Octave by writing a C++ class. On
systems that support dynamic linking, new data types can be added
to an already running Octave binary. A simple example appears in
the file examples/make_int.cc. Other examples are the standard
Octave data types defined in the files src/ov*.{h,cc} and
src/op-*.cc.
- The configure option --enable-bounds-check turns on bounds
checking on element references for Octave's internal array and
matrix classes. It's enabled by default. To disable this
feature, configure Octave with --disable-bounds-check.
- The C-style I/O functions (fopen, fprintf, etc.) have been
rewritten to be more compatible with Matlab. The fputs function
has also been added. Usage of the *printf functions that was
allowed in previous versions of Octave should still work.
However, there is no way to make the new versions of the *scanf
functions compatible with Matlab *and* previous versions of
Octave. An optional argument to the *scanf functions is now
available to make them behave in a way that is compatible with
previous versions of Octave.
- Octave can now read files that contain columns of numbers only,
with no header information. The name of the loaded variable is
constructed from the file name. Each line in the file must have
the same number of elements.
- The interface to the pager has changed. The new built-in variable
`page_output_immediately' controls when Octave sends output to the
pager. If it is nonzero, Octave sends output to the pager as soon
as it is available. Otherwise, Octave buffers its output and
waits until just before the prompt is printed to flush it to the
pager.
- Expressions of the form
A(i,j) = x
where X is a scalar and the indices i and j define a matrix of
elements now work as you would expect rather than giving an error.
I am told that this is how Matlab 5.0 will behave when it is
released.
- Indexing of character strings now works.
- The echo command has been implemented.
- The document command is now a regular function.
- New method for handling errors:
try
BODY
catch
CLEANUP
end_try_catch
Where BODY and CLEANUP are both optional and may contain any
Octave expressions or commands. The statements in CLEANUP are
only executed if an error occurs in BODY.
No warnings or error messages are printed while BODY is
executing. If an error does occur during the execution of BODY,
CLEANUP can access the text of the message that would have been
printed in the builtin constant __error_text__. This is the same
as eval (TRY, CATCH) (which may now also use __error_text__) but
it is more efficient since the commands do not need to be parsed
each time the TRY and CATCH statements are evaluated.
- Octave no longer parses the help command by grabbing everything
after the keyword `help' until a newline character is read. To
get help for `;' or `,', now, you need to use the command
`help semicolon' or `help comma'.
- Octave's parser now does some simple constant folding. This means
that expressions like 3*i are now evaluated only once, when a
function is compiled, and the right hand side of expressions like
a = [1,2;3,4] are treated as true matrix constants rather than
lists of elements which must be evaluated each time they are
needed.
- Built-in variables that can take values of "true" and "false" can
now also be set to any nonzero scalar value to indicate "true",
and 0 to indicate "false".
- New built-in variables `history_file', `history_size', and
`saving_history'.
- New built-in variable `string_fill_char' specifies the character
to fill with when creating arrays of strings.
- If the new built-in variable `gnuplot_has_frames' is nonzero,
Octave assumes that your copy of gnuplot includes support for
multiple plot windows when using X11.
If the new built-in variable `gnuplot_has_multiplot' is nonzero,
Octave assumes that your copy of gnuplot has the multiplot support
that is included in recent 3.6beta releases.
The initial values of these variables are determined by configure,
but can be changed in your startup script or at the command line
in case configure got it wrong, or if you upgrade your gnuplot
installation.
- The new plot function `figure' allows multiple plot windows when
using newer versions of gnuplot with X11.
- Octave now notices when the plotter has exited unexpectedly.
- New built-in variable `warn_missing_semicolon'. If nonzero, Octave
will warn when statements in function definitions don't end in
semicolons. The default value is 0.
- Octave now attempts to continue after floating point exceptions
or out-of-memory errors.
- If Octave crashes, it now attempts to save all user-defined
variables in a file named `octave-core' in the current directory
before exiting.
- It is now possible to get the values of individual option settings
for the dassl, fsolve, lsode, npsol, qpsol, and quad functions
using commands like
dassl_reltol = dassl_options ("relative tolerance");
- The svd() function no longer computes the left and right singular
matrices unnecessarily. This can significantly improve
performance for large matrices if you are just looking for the
singular values.
- The filter() function is now a built-in function.
- New function randn() returns a pseudo-random number from a normal
distribution. The rand() and randn() functions have separate
seeds and generators.
- Octave's command-line arguments are now available in the built-in
variable `argv'. The program name is also available in the
variables `program_invocation_name' and `program_name'. If
executing a script from the command line (e.g., octave foo.m) or
using the `#! /bin/octave' hack, the program name is set to the
name of the script.
- New built-in variable `completion_append_char' used as the
character to append to successful command-line completion
attempts. The default is " " (a single space).
- Octave now uses a modified copy of the readline library from
version 1.14.5 of GNU bash.
- In prompt strings, `\H' expands to the whole host name.
- New built-in variable `beep_on_error'. If nonzero, Octave will try
to ring your terminal's bell before printing an error message.
The default value is 0.
- For functions defined from files, the type command now prints the
text of the file. You can still get the text reconstructed from
the parse tree by using the new option -t (-transformed).
- New command-line argument --traditional sets the following
preference variables for compatibility with Matlab:
PS1 = ">> "
PS2 = ""
beep_on_error = 1
default_save_format = "mat-binary"
define_all_return_values = 1
do_fortran_indexing = 1
empty_list_elements_ok = 1
implicit_str_to_num_ok = 1
ok_to_lose_imaginary_part = 1
page_screen_output = 0
prefer_column_vectors = 0
prefer_zero_one_indexing = 1
print_empty_dimensions = 0
treat_neg_dim_as_zero = 1
warn_function_name_clash = 0
whitespace_in_literal_matrix = "traditional"
- New functions:
- readdir
- returns names of files in directory as array of strings
- mkdir
- create a directory
- rmdir
- remove a directory
- rename
- rename a file
- unlink
- delete a file
- umask
- set permission mask for file creation
- stat
- get information about a file
- lstat
- get information about a symbolic link
- glob
- perform filename globbing
- fnmatch
- match strings with filename globbing patterns
- more
- turn the pager on or off
- gammaln
- alias for lgamma
- New audio functions from Andreas Weingessel:
- lin2mu
- linear to mu-law encoding
- loadaudio
- load an audio file to a vector
- mu2lin
- mu-law to linear encoding
- playaudio
- play an audio file
- record
- record sound and store in vector
- saveaudio
- save a vector as an audio file
- setaudio
- executes mixer shell command
- New plotting functions from Vinayak Dutt. Ones dealing with
multiple plots on one page require features from gnuplot 3.6beta
(or later).
- bottom_title
- put title at the bottom of the plot
- mplot
- multiplot version of plot
- multiplot
- switch multiple-plot mode on or off
- oneplot
- return to one plot per page
- plot_border
- put a border around plots
- subplot
- position multiple plots on a single page
- subwindow
- set subwindow position for next plot
- top_title
- put title at the top of the plot
- zlabel
- put a label on the z-axis
- New string functions
- bin2dec
- convert a string of ones and zeros to an integer
- blanks
- create a string of blanks
- deblank
- delete trailing blanks
- dec2bin
- convert an integer to a string of ones and zeros
- dec2hex
- convert an integer to a hexadecimal string
- findstr
- locate occurrences of one string in another
- hex2dec
- convert a hexadecimal string to an integer
- index
- return position of first occurrence a string in another
- rindex
- return position of last occurrence a string in another
- split
- divide one string into pieces separated by another
- str2mat
- create a string matrix from a list of strings
- strrep
- replace substrings in a string
- substr
- extract a substring
The following functions return a matrix of ones and zeros.
Elements that are nonzero indicate that the condition was true for
the corresponding character in the string array.
- isalnum
- letter or a digit
- isalpha
- letter
- isascii
- ascii
- iscntrl
- control character
- isdigit
- digit
- isgraph
- printable (but not space character)
- islower
- lower case
- isprint
- printable (including space character)
- ispunct
- punctuation
- isspace
- whitespace
- isupper
- upper case
- isxdigit
- hexadecimal digit
These functions return new strings.
- tolower
- convert to lower case
- toupper
- convert to upper case
- New function, fgetl. Both fgetl and fgets accept an optional
second argument that specifies a maximum number of characters to
read, and the function fgets is now compatible with Matlab.
- Printing in hexadecimal format now works (format hex). It is also
possible to print the internal bit representation of a value
(format bit). Note that these formats are only implemented for
numeric values.
- Additional structure features:
- Name completion now works for structures.
- Values and names of structure elements are now printed by
default. The new built-in variable `struct_levels_to_print'
controls the depth of nested structures to print. The default
value is 2.
- New functions:
- struct_contains (S, NAME)
- returns 1 if S is a structure with element NAME; otherwise returns 0.
- struct_elements (S)
- returns the names of all elements of structure S in an array of
strings.
- New io/subprocess functions:
- fputs
- write a string to a file with no formatting
- popen2
- start a subprocess with 2-way communication
- mkfifo
- create a FIFO special file
- popen
- open a pipe to a subprocess
- pclose
- close a pipe from a subprocess
- waitpid
- check the status of or wait for subprocesses
- New time functions:
- asctime
- format time structure according to local format
- ctime
- equivalent to `asctime (localtime (TMSTRUCT))'
- gmtime
- return time structure corresponding to UTC
- localtime
- return time structure corresponding to local time zone
- strftime
- print given time structure using specified format
- time
- return current time
The `clock' and `date' functions are now implemented in M-files
using these basic functions.
- Access to additional Unix system calls:
- dup2
- duplicate a file descriptor
- exec
- replace current process with a new process
- fcntl
- control open file descriptors
- fork
- create a copy of the current process
- getpgrp
- return the process group id of the current process
- getpid
- return the process id of the current process
- getppid
- return the process id of the parent process
- getuid
- return the real user id of the current process
- getgid
- return the real group id of the current process
- geteuid
- return the effective user id of the current process
- getegid
- return the effective group id of the current process
- pipe
- create an interprocess channel
- Other new functions:
- commutation_matrix
- compute special matrix form
- duplication_matrix
- compute special matrix form
- common_size.m
- bring arguments to a common size
- completion_matches
- perform command completion on string
- tilde_expand
- perform tilde expansion on string
- meshgrid
- compatible with Matlab's meshgrid function
- tmpnam
- replaces octave_tmp_file_name
- atexit
- register functions to be called when Octave exits
- putenv
- define an environment variable
- bincoeff
- compute binomial coefficients
- nextpow2
- compute the next power of 2 greater than a number
- detrend
- remove a best fit polynomial from data
- erfinv
- inverse error function
- shift
- perform a circular shift on the elements of a matrix
- pow2
- compute 2 .^ x
- log2
- compute base 2 logarithms
- diff
- compute differences of matrix elements
- vech
- stack columns of a matrix below the diagonal
- vec
- stack columns of a matrix to form a vector
- xor
- compute exclusive or
- Functions for getting info from the password database on Unix systems:
- getpwent
- read entry from password-file stream, opening if necessary
- getpwuid
- search for password entry with matching user ID
- getpwnam
- search for password entry with matching username
- setpwent
- rewind the password-file stream
- endpwent
- close the password-file stream
- Functions for getting info from the group database on Unix systems:
- getgrent
- read entry from group-file stream, opening if necessary
- getgrgid
- search for group entry with matching group ID
- getgrnam
- search for group entry with matching group name
- setgrent
- rewind the pgroup-file stream
- endgrent
- close the group-file stream
- The New function octave_config_info returns a structure containing
information about how Octave was configured and compiled.
- New function getrusage returns a structure containing system
resource usage statistics. The `cputime' function is now defined
in an M-file using getrusage.
- The info reader is now a separate binary that runs as a
subprocess. You still need the info reader distributed with
Octave though, because there are some new command-line arguments
that are not yet available in the public release of Info.
- There is a new built-in variable, INFO_PROGRAM, which is used as
the name of the info program to run. Its initial value is
$OCTAVE_HOME/lib/octave/VERSION/exec/ARCH/info, but that value can
be overridden by the environment variable OCTAVE_INFO_PROGRAM, or
the command line argument --info-program NAME, or by setting the
value of INFO_PROGRAM in a startup script.
- There is a new built-in variable, EXEC_PATH, which is used as
the list of directories to search when executing subprograms. Its
initial value is taken from the environment variable
OCTAVE_EXEC_PATH (if it exists) or PATH, but that value can be
overridden by the the command line argument --exec-path PATH, or
by setting the value of EXEC_PATH in a startup script. If the
EXEC_PATH begins (ends) with a colon, the directories
$OCTAVE_HOME/lib/octave/VERSION/exec/ARCH and $OCTAVE_HOME/bin are
prepended (appended) to EXEC_PATH (if you don't specify a value
for EXEC_PATH explicitly, these special directories are prepended
to your PATH).
- If it is present, Octave will now use an `ls-R' database file to
speed up recursive path searching. Octave looks for a file called
ls-R in the directory specified by the environment variable
OCTAVE_DB_DIR. If that is not set but the environment variable
OCTAVE_HOME is set, Octave looks in $OCTAVE_HOME/lib/octave.
Otherwise, Octave looks in the directory $datadir/octave (normally
/usr/local/lib/octave).
- New examples directory.
- There is a new script, mkoctfile, that can be used to create .oct
files suitable for dynamic linking.
- Many more bug fixes.
- ChangeLogs are now kept in each subdirectory.