All Bullet database toolkits are year2000-compatible.
Data file
format: DBF
max recs: 2³²
max recLen: 65,520 bytes
max fldLen: 32,000 bytes
Memo file
format: DBT (w/reusable memo space)
max memos: 2³²
max memo size: 2³² bytes
Index file
format: IX4 (B*-tree)
max key length: 196 bytes
node size: 512 to 2560 bytes
max nodes: 2³²
max keys per node: 255
max keys: 2³²+
Data
static data: < 1K bytes (< 10 global vars, essentially read-only)
per data header: < 256 bytes (user allocated)
per index header: 2K to 4K bytes (user allocated)
Code
code size: < 64K bytes
Threads
max threads: unlimited (limit of operating system and available memory)
File System
max files: unlimited (limit of operating system and available memory)
max size: 2³¹ bytes (NT is runtime switchable to 63-bit max size, coming soon)
Encryption
on data record: yes
on index key: yes
transparent: yes (disk is always encrypted; Blt*() API is always plaintext)
method: callback (any crypto can be used, such as Blowfish)
Calling convention
Win32 DLL: stdcall
Win16 DLL: PASCAL (far pointers)
OS/2 DLL: syscall
DOSX32: cdecl (Watcom/DOS4Gx)
MS-DOS: cdecl (far pointers)
Built-in data types supported
Standard types:
| fieldType | type | size | example | notes |
|---|---|---|---|---|
| C | character | 1-254 (1-32000) | "40th Floor"
| with or without 0T |
| N | numeric | 1-18 | ' 123.45'
| right-justified, decimal-aligned, no 0T |
| D | date | 8 | '20001231'
| YYYYMMDD, no 0T |
| L | logical | 1 | 'T'
| T,F,t,f,Y,N,y,n,<space> |
| M | memo | 10 | '0000000001'
| memo #, blank if none, leading 0s or <spaces>, no 0T |
Common extended types:
| fieldType | type | size | example | notes |
|---|---|---|---|---|
| F | numeric | 1-18 | ' 123.45'
| same as N |
| B | memo | 10 | ' 2'
| binary memo field; same as M |
| G | memo | 10 | ' '
| general memo field; same as M |
Bullet 3.0 extended types:
| fieldType | type | size | example | notes |
|---|---|---|---|---|
SORT_MIXED_S16 ('3')
| signed short | 2 | SHORT
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_U16 ('4')
| unsigned short | 2 | USHORT
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_S32 ('5')
| signed long | 4 | LONG
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_U32 ('6')
| unsigned long | 4 | ULONG
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_S64 ('7')
| 64-bit long | 8 | INT64
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_U64 ('8')
| 64-bit unsigned long | 8 | UINT64
| requires SORT_MIXED sortCmpCode |
SORT_MIXED_DBL ('Y')
| IEEE FP double | 8 | DOUBLE
| requires SORT_MIXED sortCmpCode |
The above types may be used in key fields (alone or mixed) since these fields are intrinsic to Bullet. Any datatype may be used, however, not just those directly supported.
NLS sorting is available, as are SUBSTR, UPPER, and DESCEND modifiers. Custom key building
and sort comparisons are available via callbacks. Callbacks within reindex, sort and pack
routines are also available (so you can put up a % completed window, or handle the message
queue in Win3x). The file system calls may be replaced, letting you handle all disk I/O
with your own code.