Appendices


Compilation

It may be interesting for speed reasons to compile Sbasic programs which use the DATAdesign engine. But because the intelligence of the Sbasic interface depends on internal structures of Sbasic, it is not possible to use Turbo. The programs can however easily be compiled by Qliberator.

When compiling a program using Qliberator, you should think of one thing. Qliberator is an intelligent, optimising compiler, throwing out all code which is useless. Qlibrator does however assume that routines have no side-effects. Th problem is that setting the dd_err variable is actually a side effect, so all tests for dd_err will be thrown out of the program. For this reason you should introduce some lines, preferably lines which are never executed. Something like this will do:

IF string$="xyw©" THEN print dd_err
where the variable preferably will never get that value, so the dd_err is never actually printed, and where the variable should not have a value which can be predicted (or at least not bu Qliberator).

Versions

[v3.00]
first incarnation of v3, not compatible with v2.
[v3.01]
NEWR adjusted to work on read-only files.
NEXT/PREV/LAST/FRST has problems with indexes without sort.
FILT could not AND levels together properly.
FILT compare as string added.
FORW/BCKW added. (02/03/1993)
[v3.02]
UNUS had a bug, the current record remained locked. This also solves this problem in GARB.
[v3.03]
There was a very bad incompatibility with Minerva rom.
SAVF forgot to allow access for new SAVI. This made it impossible to BACKup more than once.
[v3.04]
FILT on numerical fields didn't work.
SORT/FILT/IFND now compare doubles correctly.
Problem when converting QL floats to doubles solved.
UNUS also closed the SAVI/SAVF channel when there was none. This caused bad problems on Minerva rom. The engine now fully works on Minerva. (18/04/1993)
[v3.05]
FILT problem when comparing both positive and negative numbers solved.
IUPD did not fill the fieldids in the index data.
FLDT now accepts an indexid. This caused problems when passing an indexid to the FILTER command in Sbasic. (29/04/1993)
[v3.06]
basic i/f FINDinteger now also accepts integer as search value.
IUPD, ILOA forgot to test for out of memory sometimes.
IMPL on disk-based file should now always work, there was a problem when checking whether there is enough free space on the disk.
IMPL should no longer have problems when writing to read-only disks.
IFND now returns the closest match which is smaller when not found.
IUPD small change in index linkin routine (some no-op's added, because there sometimes occured an illegal instruction, search me). (08/07/1993)
[v3.07]
General improvement, DATAdesign no longer enters supervisor mode. Mutual exclusion now assured with "DATAdesign mutex" thing.
[v3.08]
Mistake in DATAdesign mutex thing solved. There was no pointer to the actual thing. This made Qpac2 crash on TT.
[v3.09]
SORT could sometimes crash on TT (and cause problems on the rest). There was a mistake in the balance after a double rotation (p1).
FIND String/Integer/Double reverse order caused infinite loop.
DEFI was faulty, only allowed resetting.
FILT string, position<>0 didn't work. (10/01/1994)
[v3.10]
FRST/LAST/NEXT/PREV/FORW/BCKW failed to return error on faulty buffer and indexid. (31.03.1994)
[v3.11]
DATAdesign files job now always owned by system.
nextrec, prevrec now accept the parameter !!
Bug fixed which caused max 2 filter levels accepted by Sbasic interface. (21.05.1994)
Handling of string parameters in Sbasic interface modified, only strings up to 256 chars long are accepted. The engine can handle longer strings, but not the interface. (Has to do with the fact that Sbasic can relocate itself.)
GREC failed to increase the size of the buffer when trying to access a larger record from a disk based file. (23.05.1994)
[v3.12]
FILTER Sbasic interface handled strings wrong, this could cause unexpected results.
All routines which return a short (e.g. GETshort) handled short as unsigned. This has changed to handling them as signed. (29.11.1994)
[v3.13]
IDEL should now also work properly when an indexid was passed as parameter.
The Sbasic interface migrated to the PWbasic_rext file. The engine_rext file no longer links in any Sbasic commands to allow loading by any job in the system. The engine is now automatically linked when loaded.
[v3.14]
IDEL could cause problems. The deleted record could in some cases still be included in the index when saved - fixed. (13.09.1996)

Overview of extensions

ADDF
ADD Field
BACK
BACKup of file
BCKW
BaCKWard some records (= fast x times PREV)
CMRK
Clear all MaRK statusses
CNTA
CouNT All records
CNTF
CouNT all Fields
CNTR
CouNT visible Records
CYCB
CYCle through Buffers for this job
CYCF
CYCle through Fields
CYCL
CYCLe through files being edited/viewed
DATE
get DATE when record was last implemented
DEFB
DEFault Buffer setting
DEFF
DEFault Field setting
DEFI
DEFault Index setting
DELE
DELEte current record from file
DUPL
DUPLicate record
FDEV
FileDEVice we are working on
FILT
set FILTer parameters
FLDC
FieLD Clear (buffer or all)
FLDD
FieLD Delete
FLDN
FieLDName when id given
FLDR
FieLD Rename
FLDT
FieLDType when id given
FNAM
FileNAMe we are working on
FNDD
FiND Double
FNDI
FiND Integer
FNDS
FiND String
FORW
FORWard some records (fast x times NEXT)
FRST
go to FiRST editable record
GARB
GARBage collection
GCHR
Get CHaR in a character array (string)
GDBL
Get DouBLe (fp8) array element
GFLD
Get FieLD contents
GFST
Get FileSTatus (memory or disk-based)
GIFL
Get Index Filter Level parameters
GIRS
Get Inter Record Space
GISL
Get Index Sort Level parameters
GLNG
Get LoNG integer array element
GMRK
Get MaRK status
GREC
Get RECord with given id and put it in buffer
GSHR
Get SHoRt integer array element
GSTR
Get STRing as a line
GVST
Get View STatus
IDBF
ID of default BuFfer
IDEL
Index DELete
IDFI
ID of FIeld with given name
IDIN
ID of default INdex
IDRE
ID of REcord we are editing
IFND
Index FiND
IIMP
Index IMPlement
ILOA
Index LOAd
IMPL
IMPLement record in file
INSE
INSert array Elements
IRMV
Index ReMoVe
ISAV
Index SAVe
IUPD
Index UPDate
LAST
go to LAST editable record
LENF
get LENgth of a field
LENR
get LENgth of the current record
LENS
get LENgth of a String as a line
NEWF
NEW File creation
NEWR
NEW Record start
NEXT
go to NEXT editable record
NRLN
get NumbeR of LiNes in a text field
PREV
go to PREVious editable record
RMVE
ReMoVe array Elements
SAVE
SAVE file to medium
SAVI
SAVe record sequence Initialise
SAVF
SAVe record sequence Finish
SAVR
SAVe record
SCHR
Set CHaR in a character array (string)
SDBL
Set DouBLe (fp8) array element
SFLD
Set FieLD contents
SFST
Set FileSTatus (memory or disk-based)
SIFL
Set Index Filter Level parameters
SIRS
Set Inter Record Space
SISL
Set Index Sort Level parameters
SLNG
Set LoNG integer array element
SMRK
Set MaRK status
SORT
set SORT parameters
SSHR
Set SHoRt integer array element
SSTR
Set STRing as a line
SVST
Set View STatus
UNUS
UNUSe a buffer
USE
USE a file

Problems

We have noticed some problems that may occur when using DATAdesign. These problems can easily be prevented, but can cause major problems when you forget them.

write protect

If you have a disk-based file, and the medium the file is stored on is write protected, then problems have been known to occur. The fact that your medium is write protected can sometimes not be reported or only much too late, and can sometimes even crash the computer. This problem may be hardware dependant.

removing disk

If you remove a medium on which a disk-based file is based, and you try to read another medium from that drive, the computer will report a not found error. You will have to re-insert the original disk. The problem can then be solved by unusing all the buffers to all disk-based files on that medium.

Problems may also occur if you try to write to a disk-based file if the medium is not present. The medium-file should however not be corrupted.

not found

This error may be reported when you still have disk-based files on a medium in a drive where you have inserted another medium. Try replacing the medium with the original and remove all buffers which access that file. Also see: removing disk.


PROGS, Professional & Graphical Software
last edited September 13, 1996