Appendices
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).
- [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)
- 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
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