<Previous version of Ox>

# Ox 3.30: new features and fixes

## New features and enhancements

- `intersection` index, `exclusion` index
- Improved `MaxSimplex` error messages; check for vDelta=0
- Threes example for mingw C/C++ compiler
- `dayofcalender` and `dayofweek` can now be used in the opposite direction
- set default fuzziness to 1e-13, and made `range()` for non-integer arguments independent of fuzziness settings.
- extended QuadPack with QAW? functions and QPWARN
- added `oxprintlevel` to switch printing off
- extended `oxwarning`
- third/fourth argument of many random number generators can now be an r x c matrix.
- Can now do indexed assignment to int/double, e.g. `decl x = 1; x[0] = 2;`
- String concatenation and substring now use actual size, rather than up to ending \0.
- Now allowing string with embedded \0 as well as octal escape sequences.
- feof previously returned non-zero after an attempt to read past the end of the file. Now it will return TRUE if the next read will be past the end of the file.

## Problems in version 3.20 which have been fixed in version 3.30:

- `sortc(zeros(0,1))` leads to crash
- `ranwishart` was incomplete and useless.
- `vech` of scalar returned zero.
- `Database::RemoveObsIf()` and `Database::Grow()` would result in `GetYear2()` and `GetSample2()` to be out by one observation.
- Use of -i.. switch under Linux/Unix could lead to a crash.
- `MaxSQP`: equality constraints only: merit function could become .NaN if the weights of the inequality constraints (eventhough they should be irrelevant) end up at zero.
- `Database` class: for monthly data, the first seasonal variable did not correspond to January.
- calls of type var->class::function was not allowed inside other classes.
- Calls to `SetDraw` before any drawing functions would be ignored when running via oxl.
- `outer(mx,<>,'o')` gave empty matrix error message
- `deleter(x, 0);` also deletes missing values, but should only delete rows with zeros. Same for deletec.
- densities/probabilities of distributions defined over (0,Inf) sometimes returned the wrong value for arguments in (-Inf,0].
- `invert,invertsym,invertgen` return empty matrix if argument is empty matrix.
- OxGauss (thanks to Sébastien Laurent)
  - `seqm` is wrong; `seqa(10,0,3)` is wrong
  - `"string"$x;` didn't work
  - loadd for dat or dht/dat datafile didn't work
  - `string * ones(r,c)` was not allowed.
  - improved `dstat`, `scalerr`, `indcv`, `indices`
  - `a[b[j]]` type expressions could go wrong
  - `format` with precision 0 didn't work
  - `load x,y;` didn't work
  - `load` at external level now also declares variables if necessary
  - `token(" ")` would have index error
  - added `screen off; screen on;`
  - added `ndpchk`, `ndpclex`, `ndpcntrl` back in
  - `ismiss({})` should return TRUE
  - `clear,clearg,close,declare,delete,external`: separating , is optional
  - quoted string with linebreaks was not treated correctly yet.
  - ignoring Ctrl+Z (\x1a)
  - `save path=^spath AA;` didn't work (aa would be OK)
  - `trace 0;` skipped
  - `"aap" -noot;` now allowed
  - `indices, indices2, import, ols`
  - `eqsolve, qnewton`
  - some more pgraph improvements
  - following didn't work:
    `declare _penalt ?= 1;`
    `declare _penalt ?= 0;`
  - `1./x` now doesn't give warning anymore
  - column_vector .^ row_vector is allowed
  - implicit let with matrix dimensions now allowed, e.g.: `m[2,2] = {1 2,3 4};`
  - undefined variable now treated as function unless followed by = or [. This allows (e.g.) forward reference to graphset or function without arguments.
  - fixed bug with declaration of library variables when loading a library inside a function.
  - `declare` and `external` now allowed inside function
  - created autoloading of undefined functions (as .src, .g or .oxgauss)
  - `ftos` didn't allow leading and trailing text;
  - `shiftr` didn't shift left properly (negative shift)
  - `shiftr` didn't do `tabular' version
  - `xpnd` was wrong (not equivalent to unvech)
  - `load/loadd/loads` had fclose missing
  - `0$+x` didn't work of x was matrix with strings
  - `lnpdfn` was wrong; added `lnpdfnmvn`
  - load/loadm/loads/loadd now allow filename without extension
  - some improvements in graphp: improved `bar,hist,histp`; added `loglog,logx,logy`; all graphs now shown in new windows
  - `load` would only accept constant matrix dimensions
  - ^Filename in `load/save` would not work because of uppercase
  - `declare matrix b, c;` was not allowed, only single declaration.
  - format always expected width,precision arguments
  - `proc(0) foo(a);` would print 0.000 if called as: foo(a); instead of call foo(a);
  - for loop would not work with negative increments
  - `x[1 ]` would give error message (cause by space before ])
  - `x = 1; x[1] = 2;` would give an error message: Runtime error: 'int' cannot index this type
  - `\000` in a string was not recognized
  - `.NE/.LE/.GE` didn't work, while `.ne/.le/.ge` did
  - `filesa,files`

Ox version 3.30. © JA Doornik This file last changed
.