zub писал(а):если нужен только некст - его надо не сохранять, а восстанавливать при загоузке.
Вот тут меня и осенило 

- Код: Выделить всё
- if Ofs(AnyP^.Next^) - Ofs(AnyP^) <> SizeOf(P) then {Палец в небе}
 else {Реальные данные}
...или я не прав?
Добавлено спустя 10 минут 18 секунд:Я ведь не реальный пример привел выше, а только для объяснения. Дело в том, что не всегда Next может быть инициализирован и восстановление данных производится не линейно, а "древовидно" на основе того, что:
- была ли ссылка из конкретного элемента связанного списка на другой (об этом говорит наличие или отсутствие какого-либо адреса в "Next");
- найдены-ли уже данные для указателя конкретного элемента или нет (об этом должен сказать или "Палец в небе", или "Реальные данные"), и если еще нет, то инициализировать указатель и присвоить данные;
- и другое...
При чем файл этот - нестандартная база и придумана не мной. А вот работать с ней мне как-то нуна.
Добавлено спустя 5 минут 57 секунд:Хотя, наверное, правильней будет:
- Код: Выделить всё
- if ((Ofs(AnyP^.Next^) - Ofs(AnyP^)) mod SizeOf(P)) <> 0 then {Палец в небе}
 else {Реальные данные}
Хотя и это не факт... млин...  
 Добавлено спустя 10 минут 7 секунд:
Добавлено спустя 10 минут 7 секунд:Вот, что пишет сам разработчик об этом файле:
- Код: Выделить всё
- { Стpуктуpа записи файла CAS.RUL                                }
 { Размеp записи: 321 байт                                       }
 { ??? - значение поля на диске несущественно, но лучше обнулить }
 
 
 const
 ListLimit =    15;
 
 type  pCas      = ^CasType;
 
 ListType  = array [1..ListLimit] of pCas;
 
 CasType=    record
 {   1}    Group    :boolean;    { Пpизнак ветвь/лист (false/true) }
 {   4}    Parent   :pCas;       { Ссылка на ветвь-pодителя ???    }
 {  51}    Name     :string[50]; { Текст ветви или листа           }
 {   4}    BalloonL :longint;    { Пpизнак наличия баллона         }
 { 201}    BalloonS :string[200];{ Текст баллона                   }
 {15*4}    List     :ListType;   { ссылки на потомков              }
 end;
 
При чем разница между смежными адресами не 321, а 172 (это я вычислил из сохраненных в файл адресов памяти);