26
structures include lists, dynamic memory buffers, and extensible arrays that build on these
buffers. Good use is made of C++ templates to provide type-safe collection classes. Math functions
manipulate IEEE754 double-precision floating-point numbers, and text functions include
formatting akin to
sprintf()
in standard C, and a lexer akin to
sscanf()
.
The file server API allows clients to manipulate drives, volumes, directories and files. Notification
APIs are provided to detect changes in files and insertion/removal of removable media.
The user library and file server APIs are completely object oriented. The EPOC C Standard
Library provides POSIX-like non-OO function wrappers
on top
of these: for instance,
User::Alloc()
may be accessed using
malloc()
, and
RFile::Open()
may be accessed through
fopen()
.
8.2.2.5 Tools
The base delivers tools used for building EPOC. These are packaged into the EPOC C++ SDK,
for general software development, and into the OEM Adaptation Kit (OAK), for building new
ROM-based EPOC machines.
The EPOC emulator is a key tool for Windows-hosted development. Microsoft Visual C++
Version 5 or 6 are supported for building programs in the emulator or WINC environments.
Microsoft Visual C++ must be bought separately from the EPOC SDK or OAK products.
For building programs for target machines, the GNU C++ Compiler
gcc
, delivered with the C++
SDK, is used, together with other tools for object and binary file processing. The
petran
tool
translates
gcc
output into a modified PE (portable executable) format, suitable for target machine
binaries and for building into ROMs.
EPOC presently supports two instruction sets (x86 and ARM3) and more are planned. Projects
may also be built in release or debug variants, and in narrow (8-bit character) and wide (Unicode
character) variants. C++ projects are specified using a simple EPOC project file format, and built
into make files for the relevant toolchain by the
makmake
tool.
ROMs are built using the
rombuild
tool, driven by a so-called obey file whose extension is
conventionally
.oby
. Dual-boot ROMs, supporting more than one hardware variant, are supported.
Some EPOC machines, and all evaluation boards, use flash ROMs which can be reprogrammed
wholesale, or a flash area which can be used for patching. EPOC OAKs, and OEMs, provide the
appropriate tools.
8.2.3. Engine Support
Application engines provide the API to application data used both by application UIs, and by the
converters and synchronizers found in EPOC Connect. The engine support APIs provide
underlying support for application engines. Like the engines themselves, the engine support APIs
consist mainly of data manipulation code, with no drawing or other user interaction.
Strictly, some graphics components are required by application engines — and even by some of
the components listed here — and could also be included in the engine support category.
Examples include the GDI, which defines the graphical interface including fonts etc used by the
text content model, and the BITGDI, which renders graphics primitives to on- and off-screen
bitmaps: bitmap processing, even without user interaction, is important for many application
engines.
Engine support components may be categorized as data manipulation, application architecture,
resource files and utilities, standard library and text handling.
8.3.3.1 Data manipulation
The F32 file server provides basic file services including the ability to read and write binary data
to any position in a file. For application data formats, a higher level of utility is required. This is
provided by two EPOC components: the stream store (STORE) and the database management
system (DBMS).
The stream store provides a stream interface for externalizing and internalizing data. Stores consist
of one or more streams. Three significant file stores are provided: a direct file store for load/save
applications such as a word processor; a permanent file store for database applications; and a