Подниму-ка эту тему. Новое - хорошо забытое старое.

Создаю нетипизированный (в понятиях Паскаля) файл:
## Код:
```
MODULE TestFileStore;

   IMPORT Files, Stores, Log := StdLog;
   
   CONST
      buflen = 1024;
      
   TYPE
      Record* = POINTER TO RECORD (Stores.Store)
         size: INTEGER;
         buf: ARRAY buflen OF BYTE;
         x, y: REAL
      END;
   
   PROCEDURE (r: Record) Externalize- (VAR wr: Stores.Writer);
      VAR k: INTEGER;
   BEGIN
      ASSERT(r.size < buflen, 20);
      r.Externalize^(wr);
      wr.WriteInt(r.size);
      FOR k := 0 TO r.size - 1 DO
         wr.WriteByte(r.buf[k])
      END;
      wr.WriteReal(r.x); wr.WriteReal(r.y)
   END Externalize;
   
   PROCEDURE ExportToFile* (r: Record; f: Files.File);
      VAR wr: Stores.Writer; k: INTEGER;
   BEGIN
      wr.ConnectTo(f);
      wr.WriteStore(r)
   END ExportToFile;
   
   PROCEDURE Run*;
      VAR
         rec: Record; f: Files.File; res: INTEGER;
   BEGIN
      NEW(rec);
      
      rec.size := 127;
      rec.x := 10; rec.y := 20; rec.buf[rec.size-1] := -1;
      
      f := Files.dir.New(Files.dir.This("."), Files.exclusive);
      IF f # NIL THEN
         ExportToFile (rec, f);
         f.Register("records", "dat", Files.dontAsk, res);
         IF res # 0 THEN
            Log.String("Error #"); Log.Int( res ); Log.Ln
         END
      END;
      
      rec := NIL
   END Run;
   
END TestFileStore.
```

TestFileStore.Run

Вот, надо ещё аналог File Of Record добавить. В них есть Seek, аналог которой нужно внести, вычисляя размер записи.