<Next version of Ox> <Previous version of Ox>

# Ox 2.00: new features and fixes

## Read this first

When Ox 2.00 is released, the following is required after upgrading:

- Recompile .oxo files

  Of course, .oxo files which are part of this release need not be recompiled.

  Note that you can see local variables when using the debugger to trace into .oxo files only if they have been compiled with debugging on (which leads to slower code).

## New features

- The `#import` statement allows for much easier linking of .oxo files than the link pragma. It also includes the corresponding header file. For an example see here.
- Ox can now read most Excel workbooks, as created by Excel versions 5.0, 95 and 97.
- Achieved some speed improvement in .fmt file reading/writing.
- Implemented Gauss universal matrix v96 format (.fmt).
  `savemat()``("x.fmt", x, 1)` uses v96.
  `loadmat()` loads it automatically

## Ox Development enhancements

- The new Ox book gives examples on how to use Visual Basic 5 to write an interface wrapper around Ox code (the old book already had examples for Visual C++. A basic file to facilitate this is part of the developer's kit.
- Providing for input function replacement (OxGets)
- Export more functions from the Ox DLL: `SetNaN`, `FIsNaN`, `SetInf`, `FIsInf`.

## Syntax enhancements

- cast to `array()`.
- The Ox compiler did not give an error message for duplicate member variables in a class.
- printing warning for m ^ 2.1
- Allowing `.` instead of `->` for object function member reference.
- May use space to separate elements in matrix constants so `<1 2 3;4 5 6>` is allowed.
- Allowing redefinition of scalar constant when value is the same.

## New functions

- New graphics functions:
  - `DrawAdjust()`
  - `DrawAxis()`
  - `DrawAxisAuto()`
  - `DrawBoxPlot()`
  - `DrawLegend()`
  - `DrawLine()`
  - `DrawPLine()`
  - `DrawPSymbol()`
  - `DrawPText()`
  - `DrawSymbol()`
  - `DrawText()`
  - `DrawTitle()`
  - `DrawZ()`
  - `SetDraw()`
- `aggregatec()`
- `aggregater()`
- `exclusion()`
- `GetMaxControl()` (maximization package)
- `GetMaxControlEps()` (maximization package)
- `intersection()`
- `invertgen()`
- `MaxNewton()` (maximization package)
- `modelforc()` (arma package)
- `selectrc()`
- `timestr()`
- `timing()`
- `unique()`
- `unvech()`

## Function enhancements

- `sortr`/`sortc` can sort array of strings
- changed behaviour of `exit()` function: it still exits, but in amore controlled fashion. This allows interface wrappers to continue.
- created `isclass(a, "class")` to check if an object is of type `"class"`, or derived from it.
- `range()` now uses truncf to get more consistent upper bound.
- Added compact print format to maximization package.

## Function bug fixes

- `savemat` didn't return 1 if successful in writing .in7/.dat/.xls/.fmt.
- `arma0`: can crash if p > r.

## Bug fixes:

- An Excel file cannot have more than 65536 rows, but this upperbound was not checked by Ox. Also reading of Excel files with more than 32K rows went wrong. Reading of Excel 3 and 4 file reading did not work correctly on big endian machines (was OK for Windows).
- Problem with array indexing (only with dimensions greater than 1), e.g.:

      		decl ax = {{1,2}};//{{1,2}, {3,4}};
      		ax[0][0] = 10;

  didi not change the first element in `a`.
- Fixed problem when calling a static function from class foo as static foo::bar() from inside another class.
- An empty matrix indexing an array gave a run-time error.
- Debug break numbering was not always correct.

Ox version 2.00. This file last changed 23-May-1998. © JA Doornik
<Doornik home>