Буфер записи (top secret)

VY> С5ee-b
VY> Неоднократно уже поднимался вопрос,
VY> как зная только метку файла получить доступ к буферу записи.
VY> Неоднократно давались
VY> ответы, примерно так:
TestProc PROCEDURE(*FILE MyFile)
FileHeader GROUP
DriverPtr ULONG !указатель на точку входа драйвера файла
NamePtr &STRING !указатель на строку именифайла (так можно только в 32-бит)
DrvInitPtr &STRING !указатель на строку инициализации драйвера (так можно только в 32-бит)
PasswordPtr &STRING ! указатель на строку пароляфайла (так можно только в 32-бит)
Status BYTE ! атрибуты файла
KeyCount BYTE !количество ключей
MemoCount BYTE !количество MEMO-полей
RecordSize ULONG !размер записи (буфера записи)
FieldsDefPt ULONG !адрес структуры описания полей записи файла 
KeysDefPtr ULONG ! адрес структуры описания ключей файла
MemosDefPtr ULONG ! адрес структуры описания MEMO-полей
RecordPtr &GROUP !указатель на буфер записи 
         END

???? Это где-же ты такое нашел?
RecordPtr      ULONG
Только ТАК и никак иначе!!! А как составить из этого правильный указатель на запись см. в конце письма.

А в 16 бит не только указатели на строки меняются на простые LONG, но и все размеры задаются через SHORT.
Проще сразу их прописывать как UNSIGNED.

VY> Все, FileHeader.RecordPtr и есть «указатель» на буфер записи.
VY> НУ И ЧТО? Ни WHO, ни WHERE, ни WHAT с этим «указателем»
VY> не работают !!!, а мы то для этих функций его и раскапывали.
VY> Очередной раз общаясь с Clarion чувствую себя полным идиотом.

Зачем-же так? Просто надо брать нормальные описания. И проблем не будет.

VY> Что интересно, если в C55 применить такой же подход,
VY> то тоже ничего не работает, а вот с родным PROP:Record все в норме.

Естественно! Так он использует правильное описание структуры:)

VY> А в общем опять в проекте проделано много работы
VY> в надежде на WHO/WHERE/WHAT и опять смачно граблями по лбу. Придется,
VY> вероятно, внаглую править буфер записи послав куда подальше все эти W…

Напрасно!

VY> Может я все же где то ошибся? Поправьте, плиз.

Внимательней читай почту:) Я уже несколько раз бросал правильный формат.

VY> Всего доброго!
VY> ________________________________
VY> Владимир Якимченко (ICQ 16993194)

FHdr                 GROUP
DriverPtr              ULONG
FileName               &STRING
DrvInitStr             &STRING
Password               &STRING
Attr                   BYTE
KeyCount               BYTE
MemoCount              BYTE
RecordSize             ULONG
FieldsDefPtr           ULONG
KeysDefPtr             ULONG
MemosDefPtr            ULONG
RecordPtr              ULONG
Reserved               ULONG
Res1                   BYTE
Res2                   BYTE
                     END

FRecGrp              GROUP
FRecord                &GROUP
                     END
OverGrp              GROUP,OVER(FRecGrp)
RecPtr                 ULONG
RecDefPtr              ULONG
RecSize                ULONG
                     END

FGrp                 GROUP
FRef                   &FILE
                     END
FPtr                 ULONG,OVER(FGrp)

  Code
  FGrp.FRef &= MyFile
  Peek(FPtr,FHdr)
  OverGrp.RecPtr = FHdr.RecordPtr
  OverGrp.RecDefPtr = FHdr.FieldsDefPtr
  OverGrp.RecSize = FHdr.RecordSize

Все! FRecGrp.FRecord — полноценный указатель на запись файла, с которым прекрасно работают все функции и процедуры.

P.S. На Клариоше лежит моя библиотека DynaView. В числе прочих, там есть несколько таких служебных функций для работы с файлами и ключами. Их можно использовать и без создания самой View.

P.P.S. А вообще-то, это уже становиться почти FAQ-овым вопросом.