Вы неправильно поняли.
Я понимаю, что SDL_FillRect принимает RECORD, а не указатель, и я не передаю ему массив. Массив Rect'ов мне нужен для других целей (хотя на самом деле он там не нужен, это скорее пережиток того, что эту надбиблиотеку я писал для Allegro 4, а потом переделал на SDL2, но всё же хотелось бы разобраться, почему КП так реагирует, тогда как в OO2C это работало). У меня есть запись Font с такой структурой:## Код:
```
Font* = POINTER TO RECORD
  bmp*: Bitmap;
  charW*, charH*: INTEGER;
  charRows*, charsInRow*: INTEGER;
  sprites*: POINTER TO ARRAY OF ARRAY OF POINTER TO SDL.Rect (* Здесь последнего POINTER TO не было *)
END
```
Bitmap, в свою очередь, это обёртка над SDL_Surface:## Код:
```
Bitmap* = POINTER TO RECORD
  surface: SDL.Surface;
  w*, h*: INTEGER
END
```
Шрифт представляет собой прямоугольную картинку с нарисованными на ней буквами, а массив Rect'ов нужен, чтобы представлять метоположение каждой буквы. Сейчас можно обойтись и без этого, просто иметь локальный Rect в процедуре рисования одного символа и в него записывать x, y, w, h. Это было более актуально, когда движок работал на библиотеке Аллегро, там есть понятие SubBitmap, а процедура, которая рисует букву заданным цветом принимала только целый Bitmap (или целый SubBitmap), в ней нет параметра типа SDL'овского Rect'а.
В общем, в данном случае можно обойтись и без такой структуры, но вопрос в другом. Я понимаю, что Оберон обыкновенно сохраняет рядом с каждым массивом и записью информацию о типе элементов и о длине массива. Но посмотрим ещё раз на объявление:## Код:
```
sprites*: POINTER TO ARRAY OF ARRAY OF SDL.Rect
```
Ведь массив объявлен Обероновский, без [untagged]. Только запись SDL.Rect помечена как [untagged], и размер её заранее известен. Почему же нельзя написать NEW(font.sprites, font.charRows, font.charsInRow)? При этом КП сохранил бы в метаданных для массива его длину, чтобы можно было освободить память, а элементами массива были бы «непомеченные» записи, длиной в N байт.