OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 13 Декабрь, 2019 15:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Суббота, 04 Май, 2013 01:12 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 975
Откуда: Киев
ilovb писал(а):
В общем я разобрался как это работает, и понял что в CP это никак не сделать (окромя маш. кодов)

Гм, а в чем проблема? В CP нет псевдомодуля SYSTEM с адресной арифметикой?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Суббота, 04 Май, 2013 16:44 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Да, через GET/PUT тоже можно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Воскресенье, 05 Май, 2013 21:27 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Оказывается в XDS есть поддержка:
Цитата:
The array of bytes which is passed to a procedure in place of a formal SEQ-parameter is formed as follows:

• values of all actual parameters forming the sequence are represented as described below and concatenated in the array in their textual order
• integer values are converted to LONGINT
• BOOLEAN, CHAR, cardinal, and enumeration values are converted to LONGCARD
• range type values are converted according to their base type
• real values are converted to LONGREAL
• pointer, address, opaque, and procedure type values are converted to ADDRESS

• a structured value (record or array) is interpreted as a one-dimensional array of bytes and is represented by a 3-element descriptor:

• the address of the structure
• a zero 32-bit word (reserved for future extensions)
• size of the structure (in LOCs) minus one

Example

PROCEDURE write(SEQ args: SYSTEM.BYTE);
BEGIN
END write;

VAR i: INTEGER;
c: SYSTEM.CARD8;
r: LONGREAL;
S: RECORD a: LONGINT; c: CHAR END;
p: POINTER TO ARRAY OF CHAR;
. . .

write(i,c,S,r,p^);

For this call the actual byte array passed to write will contain:

• 4 bytes of the sign-extended value of i
• 4 bytes of the zero-extended value of c
• 12 bytes of the array descriptor

• 4 bytes containing the address of S
• 4 bytes containing 0
• 4 bytes containing 4 (SIZE(S)-1)

• 8 bytes value of r in the double-precision 80387 format
• 12 bytes of the array descriptor

• 4 bytes containing the address of the P data
• 4 bytes containing the value 0
• 4 bytes containing SIZE(p^)-1

Copyright © 1999-2011 Excelsior, LLC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Понедельник, 06 Май, 2013 07:45 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1214
Проще всего определить необходимое число функций IupSetfAttribute1, IupSetfAttribute2 и т.п. с необходимым числом аргументов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Понедельник, 06 Май, 2013 12:07 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Trurl писал(а):
Проще всего определить необходимое число функций IupSetfAttribute1, IupSetfAttribute2 и т.п. с необходимым числом аргументов.

Не выйдет. Попробуй так сделать для банального сишного printf'a. Тут полный аналог его.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Вторник, 07 Май, 2013 07:42 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1214
Для банального сишного printf'a тоже можно. Но тут не полный аналог - IupSetfAttribute ожидает только строки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Вторник, 07 Май, 2013 11:26 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Trurl писал(а):
Для банального сишного printf'a тоже можно. Но тут не полный аналог - IupSetfAttribute ожидает только строки.

Как с printf'ом? Пример можно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Вторник, 07 Май, 2013 11:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2318
Откуда: Россия, Томск
Alexey Veselovsky писал(а):
Как с printf'ом? Пример можно?
Код:
PROCEDURE Print2Ints(format: ARRAY OF CHAR; int1, int2: INTEGER)...

Print2Ints("Error %i at line %i.", 15, 80);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Вторник, 07 Май, 2013 11:43 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Александр Ильин писал(а):
Alexey Veselovsky писал(а):
Как с printf'ом? Пример можно?
Код:
PROCEDURE Print2Ints(format: ARRAY OF CHAR; int1, int2: INTEGER)...

Print2Ints("Error %i at line %i.", 15, 80);

Ну это же не то. Чтобы сделать вменяемый бинд для print'f'a придется беребрать все возможные комбинации типов и числа аргументов. Будет абсолютно дикое число бинд-функций и это будет абсолютно не юзабельно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Вторник, 07 Май, 2013 12:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
В принципе, в ББ 1.6 Meta позволяет конструировать вызов произвольной процедуры (т.е. "наталкивать" нужные параметры). Правда, там это типобезопасно, для корректно полученных ссылок (Meta.Item) на свои процедуры, имеющие метаинформацию.
Но саму механику можно рассмотреть и заимствовать. Сделать модуль по аналогии, который также готовит стек, а потом - вызов по произвольному адресу, а не по Item.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переменное число параметров
СообщениеДобавлено: Среда, 08 Май, 2013 20:17 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
Trurl писал(а):
Проще всего определить необходимое число функций IupSetfAttribute1, IupSetfAttribute2 и т.п. с необходимым числом аргументов.
Присоединяюсь --- так же делал.
Вложение:
Снимок.png
Снимок.png [ 54.24 КБ | Просмотров: 3042 ]


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB