Версия J:
- Код: Выделить всё
if( var_index != -1 ) {
switch( var_type & 0x7f )
{
case 1 :
do_var_type1:
taddr = memp( str_addr + ((var_index ) * str_record_size) + 1 ); // "+1"
var_max = memw( taddr + 2 );
jx = memw( taddr );
tstr2 = memstr( taddr + 4, jx );
break;
У меня:
- Код: Выделить всё
#define MEMP_STR memp( p_strs + ( watch_index * 5 ) ) // никакого "+1"
...
if( watch_index != WATCH_ERROR )
{
watch_ok = TRUE;
switch( WATCH_IS )
{
case VAR_STR :
_get_str_watch:
var_addr = MEMP_STR;
str_len = memw ( var_addr + 2 );
watch_int = memw ( var_addr );
temp_str = memstr( var_addr + 4, watch_int );
break;
Подобное там в нескольких местах с этим "+1". Я вот никак не вспомню: 1) было ли "+1" в том тексте, что я получил путём ручной декомпиляции, и: 2) если было, то почему я его убрал. Так как это много где и ошибка получения неправильного адреса была бы сразу видна, то тут что-то имелось в виду. Но вот что?.. Или они в J изменили формат хранения переменных?..