CRM64Pro GDK v0.13.0
A free cross-platform game development kit built on top of SDL 3.0
Loading...
Searching...
No Matches
Archive

Description

Archive Manager and Archive objects for managing CDC data container files [v25.12.0].

Overview

The Archive module provides management for CDC (CRM64Pro Data Container) files through the Archive Manager and Archive objects. CDC is an extensible and open data container format based on data blocks, designed specifically for CRM64Pro GDK as the successor to the old DPF format developed for CRM32Pro SDK.

Key features

  • Block-based storage: Flexible data organization using typed and named blocks
  • Fast indexing: Variable size index for rapid search, load, save and delete operations
  • Data integrity: IO corruption and file tampering detection
  • Compression: Optional zlib compression for data blocks
  • Encryption: AES-256 encryption for individual blocks or entire archive
  • Soft deletion: Recoverable block deletion with defragmentation support

CDC format

The CDC format defines a minimal 8-byte magic header containing the implementation version and a set of interface methods. The format is designed to be extensible, allowing different implementations.

Magic header8 bytes containing CDC implementation version
Block identificationBlocks identified by type (cannot start with "?SD_") and name (cannot start with "#")
Maximum file size4GB

CDCv1.1 implementation

Currently, the only available implementation is CDCv1.1 with the following features:

Header256 bytes for storing copyright, creation and modification dates, etc.
IndexVariable size index (minimum 128 blocks) for fast operations
IntegrityDetects IO data corruption and file tampering
Storage modesRaw, compressed (zlib) or encrypted (AES-256)
Archive securityAES-256 index encryption with 4-32 byte key

File operations

load()Load CDC file with IO data corruption check
save()Save CDC file (automatically called after successful block addition)
defrag()Physically delete soft-deleted blocks, remove fragmentation and resize maximum blocks
getFragmentation()Get fragmentation level caused by soft deletions and overwrites

Block operations

blockAdd()Add new block: skips if identical exists, overwrites payload if fits, or adds new
blockAddFile()Add file as block with type "C64_FILE" and name as [directory]+filename+[extension]
blockLoad()Load block data (soft-deleted blocks are not loaded)
blockSearch()Search for block (extremely fast due to fixed index)
blockAt()Access block by index (extremely fast due to fixed index)
blockDelete()Soft-delete block (remains physically present but not loadable)
blockUndelete()Recover a soft-deleted block
getNumberOfBlocks()Get total number of data blocks

Security operations

secure()Encrypt index with AES-256 to prevent block access without password
unSecure()Decrypt index with valid password (password is unrecoverable if lost)

Manager type

This is a sharing manager: it shares a CDC ID among multiple owners when they request to open an already opened file based on the file path [directory]+file+[extension] as the key. The CDC is effectively closed only when the last owner closes it.

Best practices

  • Use compression (zlib) for large data blocks to reduce file size
  • Use AES-256 encryption for sensitive data blocks
  • Run defrag() periodically to reclaim space from soft-deleted blocks and reduce fragmentation
  • Store the archive password securely, it cannot be recovered if lost
  • Avoid block type names starting with "?SD_" and block names starting with "#" (reserved)
  • Use blockAddFile() for adding external files with automatic type and naming
  • Access the manager exclusively through Main::IArchiveMgr()
Note
The Archive Manager is a singleton, automatically created once Main is instantiated. You can get a reference to this manager using Main::IArchiveMgr() method.
The Archive Manager is automatically released when Main::Terminate() is called. At this time, any resource still loaded will be released, avoiding resource leaks.

Classes

class  CRM64Pro::Archive
 Archive Object class. More...
class  CRM64Pro::ArchiveMgr
 Archive Manager class. More...

Macros

#define CDCv1_sPARAM1   64
#define CDCv1_sPARAM2   16

Enumerations

enum  CRM64Pro::eArchiveBlockStore { CRM64Pro::ABS_RAW = 1 , CRM64Pro::ABS_COMPRESSED = 2 , CRM64Pro::ABS_CRYPTED = 3 }
 Archive block storing method. More...

Functions

Sint32 CRM64Pro::Archive::info (Sint32 iMode=0)
 Request CDC object information.
Sint32 CRM64Pro::Archive::getName (string &sName)
 Get the name.
Uint32 CRM64Pro::Archive::getID ()
 Get the ID.
Sint32 CRM64Pro::Archive::blockAdd (Block &myBlock)
 Add a data block.
Sint32 CRM64Pro::Archive::blockAddFile (const string &sFile, eArchiveBlockStore eABS=ABS_COMPRESSED)
 Add a file.
Sint32 CRM64Pro::Archive::blockDelete (Block &myBlock)
 Delete a data block.
Sint32 CRM64Pro::Archive::blockUndelete (Uint32 iBlock, Block &myBlock)
 Recover a deleted data block.
Sint32 CRM64Pro::Archive::blockSearch (Block &myBlock)
 Search for a given data block.
Sint32 CRM64Pro::Archive::blockAt (Uint32 iBlock, Block &myBlock)
 Access to the given data block position.
Sint32 CRM64Pro::Archive::blockLoad (Block &myBlock)
 Load a data block.
Sint32 CRM64Pro::Archive::blockLoadReleaseData (Block &myBlock)
 Free a loaded data block.
Uint32 CRM64Pro::Archive::getUsedBlocks ()
 Get the number of used data blocks.
Uint32 CRM64Pro::Archive::getMaxBlocks ()
 Get the number of maximum data blocks.
float CRM64Pro::Archive::getFragmentation ()
 Get the fragmentation.
Sint32 CRM64Pro::Archive::secure (const unsigned char *myKey, Uint32 iKeySize)
 Secure the CDC.
Sint32 CRM64Pro::Archive::unSecure ()
 Unsecure a CDC file.
Sint32 CRM64Pro::ArchiveMgr::info (Sint32 iMode=0)
 Request Archive Manager information.
Sint32 CRM64Pro::ArchiveMgr::create (const string &sFile, Uint32 iNumBlocks=0)
 Create a new CDC file.
Sint32 CRM64Pro::ArchiveMgr::close (Sint32 idCDC)
 Close and destroy a CDC.
Sint32 CRM64Pro::ArchiveMgr::getNum () const
 Get number of loaded objects.
Sint32 CRM64Pro::ArchiveMgr::setName (Sint32, const string &)
 This method is not implemented.
ArchiveCRM64Pro::ArchiveMgr::get (Sint32 idCDC=0)
 Get a pointer to the CDC using its handler.
Sint32 CRM64Pro::ArchiveMgr::defrag (const string &sFile, Uint32 iNumBlocks=0)
 Defragment a CDC file.
Sint32 CRM64Pro::ArchiveMgr::load (const string &sFile, const unsigned char *myKey=nullptr, Uint32 iKeySize=0)
 Load a CDC file.
Sint32 CRM64Pro::CursorMgr::info (Sint32 iMode=0)
 Request Cursor Manager information.
Sint32 CRM64Pro::CursorMgr::create (const string &sName, Uint32 iVersion=10)
 Create a new cursor.
Sint32 CRM64Pro::CursorMgr::close (Sint32 idCur)
 Close and destroy a cursor.
Sint32 CRM64Pro::CursorMgr::getNum () const
 Get number of loaded objects.
Sint32 CRM64Pro::CursorMgr::setName (Sint32 idCur, const string &sName)
 Change the object name.
CursorCRM64Pro::CursorMgr::get (Sint32 idCur)
 Get a pointer to the cursor using its handler.
Sint32 CRM64Pro::CursorMgr::select (Sint32 idCur)
 Select a mouse cursor.
Sint32 CRM64Pro::CursorMgr::getSelect ()
 Get selected mouse cursor.
Sint32 CRM64Pro::CursorMgr::show ()
 Make visible the selected mouse cursor.
Sint32 CRM64Pro::CursorMgr::hide ()
 Hide the mouse cursor.
Sint32 CRM64Pro::CursorMgr::status ()
 Get the cursor status.
Sint32 CRM64Pro::CursorMgr::setPosition (float fX, float fY, Sint32 idScreen=0)
 Set the mouse cursor position.
Sint32 CRM64Pro::CursorMgr::getPosition (float *fX, float *fY)
 Get the mouse cursor position.
Sint32 CRM64Pro::CursorMgr::getButtons ()
 Get the mouse buttons.
Sint32 CRM64Pro::CursorMgr::getButtonsPrev ()
 Get the previous mouse buttons.
Sint32 CRM64Pro::CursorMgr::getFocus ()
 Get the Screen id which currently has mouse focus.
Sint32 CRM64Pro::CursorMgr::child (Sint32 idCur)
 Create a child cursor dependant on the provided one(the parent).
Sint32 CRM64Pro::CursorMgr::load (const string &sFileCDC, const string &sName)
 Load a cursor stored in a CDC file.
Sint32 CRM64Pro::CursorMgr::load (const Sint32 idCDC, const string &sName)
 Load a cursor stored in a CDC file.
Sint32 CRM64Pro::CursorMgr::remove (Sint32 idCDC, const string &sName)
 Remove a cursor stored in a CDC file.

Macro Definition Documentation

◆ CDCv1_sPARAM1

#define CDCv1_sPARAM1   64

CDC v1.x: size of custom char array attribute 1

◆ CDCv1_sPARAM2

#define CDCv1_sPARAM2   16

CDC v1.x: size of custom char array attribute 2

Enumeration Type Documentation

◆ eArchiveBlockStore

Archive block storing method.

Enumerator
ABS_RAW 

Store block in raw form.

ABS_COMPRESSED 

Store block compressed.

ABS_CRYPTED 

Store block encrypted.

Function Documentation

◆ info() [1/3]

Sint32 CRM64Pro::Archive::info ( Sint32 iMode = 0)

Request CDC object information.

Writes information to the default log.

Parameters
iModeunused for the time being.
Returns
0 on success, or a negative error code on failure.

◆ getName()

Sint32 CRM64Pro::Archive::getName ( string & sName)

Get the name.

Parameters
sNamea string reference filled in with the [directory] and the file name plus the .cdc extension.
Returns
0 on success, or a negative error code on failure.

◆ getID()

Uint32 CRM64Pro::Archive::getID ( )

Get the ID.

Returns
Object ID.

◆ blockAdd()

Sint32 CRM64Pro::Archive::blockAdd ( Block & myBlock)

Add a data block.

Parameters
myBlockfilled Block struct, at least it needs pData and iSize. Custom attributes depend on CDC version.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockAddFile()

Sint32 CRM64Pro::Archive::blockAddFile ( const string & sFile,
eArchiveBlockStore eABS = ABS_COMPRESSED )

Add a file.

Parameters
sFilestring containing the [directory]+filename+[extension] to be added. Directory separators '\' and '/' are supported.
eABSCheck eArchiveBlockStore enum for details. Default is ABS_COMPRESSED.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockDelete()

Sint32 CRM64Pro::Archive::blockDelete ( Block & myBlock)

Delete a data block.

Parameters
myBlockfilled Block struct with custom attributes depending on CDC version.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockUndelete()

Sint32 CRM64Pro::Archive::blockUndelete ( Uint32 iBlock,
Block & myBlock )

Recover a deleted data block.

Parameters
iBlockblock index position from [0 to used_blocks - 1] which contains a deleted data block. Use getUsedBlocks() for getting used_blocks.
myBlockfilled Block struct with custom attributes depending on CDC version. pData must be nullptr. If recovered, myBlock will contain all attributes except pData.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockSearch()

Sint32 CRM64Pro::Archive::blockSearch ( Block & myBlock)

Search for a given data block.

Parameters
myBlockfilled Block struct with custom attributes depending on CDC version. If found, myBlock will contain all attributes except pData.
Returns
[0 to used_blocks - 1] on success indicating the block index position, or a negative error code on failure. Use getUsedBlocks() for the used_blocks value.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockAt()

Sint32 CRM64Pro::Archive::blockAt ( Uint32 iBlock,
Block & myBlock )

Access to the given data block position.

Parameters
iBlockblock index position from [0 to used_blocks - 1]. Use getUsedBlocks() for the used_blocks value.
myBlockif the block index position is found, myBlock will contain all attributes except pData.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockLoad()

Sint32 CRM64Pro::Archive::blockLoad ( Block & myBlock)

Load a data block.

Parameters
myBlockfilled Block struct with custom attributes depending on CDC version. pData must be nullptr. If found, myBlock will contain all attributes plus the pData loaded.
Returns
0 on success, or a negative error code on failure.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ blockLoadReleaseData()

Sint32 CRM64Pro::Archive::blockLoadReleaseData ( Block & myBlock)

Free a loaded data block.

Parameters
myBlockBlock struct with pData loaded by blockLoad() method.
Returns
Always returns 0.

◆ getUsedBlocks()

Uint32 CRM64Pro::Archive::getUsedBlocks ( )

Get the number of used data blocks.

Returns
[0 to max_blocks] the number of used blocks (used_blocks).

◆ getMaxBlocks()

Uint32 CRM64Pro::Archive::getMaxBlocks ( )

Get the number of maximum data blocks.

Returns
Positive maximum number (max_blocks) of blocks.

◆ getFragmentation()

float CRM64Pro::Archive::getFragmentation ( )

Get the fragmentation.

Returns
Float value in the [0-100] range expressed as a percentage (lower is better, meaning less fragmentation), or a negative error code on failure.
Note
Depending on CDC version, deleting blocks can fragment the store.
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ secure()

Sint32 CRM64Pro::Archive::secure ( const unsigned char * myKey,
Uint32 iKeySize )

Secure the CDC.

Parameters
myKeyunsigned char array of iKeySize containing the key.
iKeySizethe key size in bytes. For CDC v1.1, the key size must be from 4 to 32 bytes.
Returns
0 on success, or a negative error code on failure.
Warning
Securing a CDC file and forgetting the key will make its content unreadable.
Note
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ unSecure()

Sint32 CRM64Pro::Archive::unSecure ( )

Unsecure a CDC file.

Returns
0 on success, or a negative error code on failure.
Note
The exact behaviour of this method depends on the CDC version. Please check the CDC implementation description on ArchiveMgr Detailed Description.

◆ info() [2/3]

Sint32 CRM64Pro::ArchiveMgr::info ( Sint32 iMode = 0)

Request Archive Manager information.

Writes information to the default log.

Parameters
iMode-1 for displaying only Manager information. 0 (default) for displaying Manager and all Objects information. A positive CDC id for displaying Manager and that specific CDC information.
Returns
0 on success, or a negative error code on failure.

◆ create() [1/2]

Sint32 CRM64Pro::ArchiveMgr::create ( const string & sFile,
Uint32 iNumBlocks = 0 )

Create a new CDC file.

Parameters
sFilestring containing [directory]+filename+[extension]. The .cdc extension is added automatically if missing. Directory separators '\' and '/' are supported.
iNumBlocksMaximum number of data blocks. The minimum is 64.
Returns
greater than 0 on success (the CDC id) or a negative error code on failure.
Note
If the file already exists, returns an error. New CDCs use the latest version available, though older versions can still be loaded.

◆ close() [1/2]

Sint32 CRM64Pro::ArchiveMgr::close ( Sint32 idCDC)

Close and destroy a CDC.

Parameters
idCDC0 for closing all CDC files, or a specific CDC id. If the CDC is shared, it will not be removed until the last owner calls this method.
Returns
0 on success, or a negative error code on failure.
Note
If you forget to close a CDC file, it will be automatically closed when the GDK terminates.

◆ getNum() [1/2]

Sint32 CRM64Pro::ArchiveMgr::getNum ( ) const

Get number of loaded objects.

Returns
the number of CDC files.

◆ setName() [1/2]

Sint32 CRM64Pro::ArchiveMgr::setName ( Sint32 idCDC,
const string & sName )

This method is not implemented.

Parameters
idCDCUnused
sNameUnused
Returns
Does not return any value.

◆ get() [1/2]

Archive * CRM64Pro::ArchiveMgr::get ( Sint32 idCDC = 0)

Get a pointer to the CDC using its handler.

By default it returns the first CDC loaded.

Parameters
idCDCCDC id.
Returns
nullptr if the CDC was not found, otherwise a pointer to the CDC object.

◆ defrag()

Sint32 CRM64Pro::ArchiveMgr::defrag ( const string & sFile,
Uint32 iNumBlocks = 0 )

Defragment a CDC file.

Parameters
sFilestring containing [directory]+filename+[extension]. Directory separators '\' and '/' are supported.
iNumBlocksMaximum number of data blocks (minimum 64). Default 0 keeps current max block number. Can be used to resize the maximum number of data blocks.
Returns
0 on success, or a negative error code on failure.
Note
Depending on CDC version, the storing method can produce fragmentation when blocks are deleted. The CDC file must be closed and unsecured to defragment.
Exact behavior depends on CDC version. See ArchiveMgr Detailed Description for CDC implementation details.

◆ load() [1/3]

Sint32 CRM64Pro::ArchiveMgr::load ( const string & sFile,
const unsigned char * myKey = nullptr,
Uint32 iKeySize = 0 )

Load a CDC file.

The Archive Manager shares ids based on file path as the key, so it checks if a CDC is already loaded before creating a new one.

Parameters
sFilestring containing [directory]+filename+[extension]. Directory separators '\' and '/' are supported.
myKeyunsigned char array containing the key. Only used for secured CDC files. Default nullptr.
iKeySizekey size from 4 to 32 bytes. 0 for unsecured CDC (default).
Returns
greater than 0 on success (the CDC id) or a negative error code on failure.

◆ info() [3/3]

Sint32 CRM64Pro::CursorMgr::info ( Sint32 iMode = 0)

Request Cursor Manager information.

Writes information to the default log.

Parameters
iMode-1 for Manager info only. 0 (default) for Manager and all Objects. A positive Cursor id for Manager and that specific Cursor.
Returns
0 on success, or a negative error code on failure.

◆ create() [2/2]

Sint32 CRM64Pro::CursorMgr::create ( const string & sName,
Uint32 iVersion = 10 )

Create a new cursor.

Creates an empty cursor (no image). Use Cursor::assignImage() to assign an image.

Parameters
sNameThe cursor name (e.g. 'myCursor'). Must be unique, max 64 characters.
iVersionCursor version. 10 means v1.0 (only version supported). Default v1.0.
Returns
greater than 0 on success (the Cursor id) or a negative error code on failure.
Note
Returns error if name already exists.

◆ close() [2/2]

Sint32 CRM64Pro::CursorMgr::close ( Sint32 idCur)

Close and destroy a cursor.

Parameters
idCur0 for closing all cursors, or specific Cursor id. Stand-alone and child cursors can be closed; parent cursors cannot while they have children.
Returns
0 on success, or a negative error code on failure.
Note
Unclosed cursors are automatically closed when the GDK terminates.

◆ getNum() [2/2]

Sint32 CRM64Pro::CursorMgr::getNum ( ) const

Get number of loaded objects.

Returns
the number of cursors.

◆ setName() [2/2]

Sint32 CRM64Pro::CursorMgr::setName ( Sint32 idCur,
const string & sName )

Change the object name.

Parameters
idCurCursor id.
sNameThe cursor name (e.g. 'myCursor'). Must be unique, max 64 characters.
Returns
0 on success, or a negative error code on failure.
Note
Image name is internally modified (prefixed with '#' + internal code + cursor name).

◆ get() [2/2]

Cursor * CRM64Pro::CursorMgr::get ( Sint32 idCur)

Get a pointer to the cursor using its handler.

Parameters
idCurCursor id.
Returns
nullptr the cursor was not found.
A pointer to the cursor object.

◆ select()

Sint32 CRM64Pro::CursorMgr::select ( Sint32 idCur)

Select a mouse cursor.

Parameters
idCurCursor id. It also supports any SDL_SystemCursor.
Returns
0 on success, or a negative error code on failure.
Note
Cursors are dinamically build on the first time they are selected. You can use Cursor::build() for building them in advance.

◆ getSelect()

Sint32 CRM64Pro::CursorMgr::getSelect ( )

Get selected mouse cursor.

Returns
Current selected Cursor id.

◆ show()

Sint32 CRM64Pro::CursorMgr::show ( )

Make visible the selected mouse cursor.

Returns
0 on success, or a negative error code on failure.

◆ hide()

Sint32 CRM64Pro::CursorMgr::hide ( )

Hide the mouse cursor.

Returns
0 on success, or a negative error code on failure.

◆ status()

Sint32 CRM64Pro::CursorMgr::status ( )

Get the cursor status.

Returns
C64_STATUS_HIDDEN (cursor is hidden) or C64_STATUS_SHOWN (cursor is shown).

◆ setPosition()

Sint32 CRM64Pro::CursorMgr::setPosition ( float fX,
float fY,
Sint32 idScreen = 0 )

Set the mouse cursor position.

Parameters
fXfloat with x position.
fYfloat with y position.
idScreenScreen id. Default 0 uses the screen with mouse focus.
Returns
0 on success, or a negative error code on failure.

◆ getPosition()

Sint32 CRM64Pro::CursorMgr::getPosition ( float * fX,
float * fY )

Get the mouse cursor position.

Parameters
fXa float pointer filled in with X mouse position. If nullptr is passed, the method ignores the retrieving of this value.
fYa float pointer filled in with Y mouse position. If nullptr is passed, the method ignores the retrieving of this value.
Returns
0 on success, or a negative error code on failure.
Note
The mouse cursor position is internally updated in Main::update() each Logic Frame update.

◆ getButtons()

Sint32 CRM64Pro::CursorMgr::getButtons ( )

Get the mouse buttons.

Returns
32 bit button bitmask of the current button state.
Note
The mouse buttons are internally updated in Main::update() each Logic Frame update. The button bitmask can be tested using the SDL_BUTTON(X) macros where X is generally 1 for the left, 2 for middle, 3 for the right button.

◆ getButtonsPrev()

Sint32 CRM64Pro::CursorMgr::getButtonsPrev ( )

Get the previous mouse buttons.

Returns
32 bit button bitmask of the previous(the last Logic Frame) button state.
Note
The mouse buttons are internally updated in Main::update() each Logic Frame update. The button bitmask can be tested using the SDL_BUTTON(X) macros where X is generally 1 for the left, 2 for middle, 3 for the right button.

◆ getFocus()

Sint32 CRM64Pro::CursorMgr::getFocus ( )

Get the Screen id which currently has mouse focus.

Returns
0 or greater on success(the Screen id) or a negative error code on failure.
Note
For getting the keyboard focus you can use Main::getKeyboardFocus() method.

◆ child()

Sint32 CRM64Pro::CursorMgr::child ( Sint32 idCur)

Create a child cursor dependant on the provided one(the parent).

A child cursor uses parent's attributes and creates a child image for different attributes. Currently only different Hotspots are supported, as colorkey cannot be modified on child images and other attributes are not supported by the SDL cursor system.

Parameters
idCurparent Cursor id. If the provided cursor is a child, the request is redirected to its parent.
Returns
greater than 0 on success (the Cursor id) or a negative error code on failure.
Note
The child uses the parent's name.

◆ load() [2/3]

Sint32 CRM64Pro::CursorMgr::load ( const string & sFileCDC,
const string & sName )

Load a cursor stored in a CDC file.

Parameters
sFileCDCstring containing [directory]+filename. Directory separators '\' and '/' are supported.
sNamestring with the cursor name (max 64 characters). If already exists, creates a child instead.
Returns
greater than 0 on success (the Cursor id) or a negative error code on failure.

◆ load() [3/3]

Sint32 CRM64Pro::CursorMgr::load ( const Sint32 idCDC,
const string & sName )

Load a cursor stored in a CDC file.

Parameters
idCDCCDC id.
sNamestring with the cursor name (max 64 characters). If already exists, creates a child instead.
Returns
greater than 0 on success (the Cursor id) or a negative error code on failure.

◆ remove()

Sint32 CRM64Pro::CursorMgr::remove ( Sint32 idCDC,
const string & sName )

Remove a cursor stored in a CDC file.

Parameters
idCDCCDC id.
sNamestring with the cursor name (maximum size of 64 characters).
Returns
greater than 0 on success, or a negative error code on failure.
Note
The cursor must be closed before trying to remove it from the CDC.