Open System Services Programmer's Guide
Example 61 Mixed Data-Model Programming Example
#pragma section definesave
#if (_TANDEM_ARCH_ > 1)
_tal _extensible short DEFINESAVE (
const char _ptr32 *, /* IN */
short _ptr32 *, /* OUT */
short , /* IN */
short _ptr32 *, /* OUT */
short /* IN */
);
#else
_tal _extensible short DEFINESAVE (
const char _far *, /* IN */
short _far *, /* OUT */
short , /* IN */
short _far *, /* OUT */
short /* IN */
);
#endif
/* This is where the program text starts */
#include <cextdecs.h(DEFINESAVE)>
...
struct savedDef {
char name[24];
short length;
short data[1024];
}
struct savedDef _ptr32 * savedDefine;
short result;
savedDefine =
(struct savedDef _ptr32 *)malloc32( sizeof savedDef );
if ( ! savedDefine) {
…
}
strcpy( savedDefine->name, “=MYDEFINE “ );
result = DEFINESAVE( savedDefine->name,
savedDefine->data,
1024,
&savedDefine->length );
if ( result != 0 ) {
…
}
New C/C++ builtins
_is_32bit_addr
Mixed data-model programming often requires testing a 64-bit address to determine if it is a
sign-extended 32-bit address. So that there is a uniform way for doing that, this new builtin is
provided.
int _is_32bit_addr( void _ptr64 * );
The _is_32bit_addr function returns a non-zero value if the passed pointer is a sign-extended
32-bit address. Otherwise, a zero is returned.
Mixed Data-Model Programming 301