文字列リテラルへのポインタを得るコマンド

書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。

書いてから思ったけど、HSP自体がリソースのために持っているバッファ(DS)へのポインタを返すので、リテラルが書き換え可能になっちゃうっていう。……まぁそこらへんはいいか。
実数値リテラルもいけるけど、整数はCodeSegmentに直書きだからそれ自体へのポインタは無理で、どこかにコピーを書いて取る必要がある。面倒くさい。
実際に使用するときは #define global constptr __constptr || というマクロを用いる。いちいち括弧をつけなくていいので記述が楽。

// constptr || CONST_VALUE
int constptr( void** ppResult ) // *type_res *ppResult reffunc
{
if ( *exinfo->npexflg & (EXFLG_1 | EXFLG_2) ) puterror( HSPERR_SYNTAX );
static int stt_result;
switch ( *type ) {
case TYPE_STRING:
case TYPE_DNUM:
stt_result = reinterpret_cast<int>( &ctx->mem_mds[*val] );
*ppResult = &stt_result;
break;
case TYPE_INUM:
puterror( HSPERR_UNSUPPORTED_FUNCTION ); // CS
default:
puterror( HSPERR_SYNTAX );
}
code_next();
if ( !(*type == TYPE_MARK && *val == 6) ) puterror( HSPERR_SYNTAX ); // or(||)
code_next();
return HSPVAR_FLAG_INT;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX