Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 07:35

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Структуры в spf
СообщениеДобавлено: Пн янв 22, 2007 13:15 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Структуры в SPF создаются через слово -- (оно же FIELD). Пример:

0
CHAR -- flag
CELL -- field
10 CELLS -- arr
CONSTANT struct

Слова flag, field и arr будут прибавлять к адресу своё смещение относительно начала структуры. А в struct записан общий размер всей структуры. То есть, можно:

struct ALLOCATE THROW TO s \ взяли память из кучи под один экземпляр struct
1 s flag С! 10 s field ! \ записали значения в поля структуры
s arr 10 CELLS DUMP \ вывели содержимое массива в структуре
s FREE THROW \ сняли экземпляр struct

Вот на этой строке forth уже начинает ругаться:
struct ALLOCATE THROW TO s \ взяли память из кучи под один экземпляр struct
Так как же делать структуры в forth?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 22, 2007 14:14 
Переменной такой нет под названием s , видимо:


Код:
0 VALUE s

struct ALLOCATE THROW TO s \ взяли память из кучи под один экземпляр struct
1 s flag С! 10 s field ! \ записали значения в поля структуры
s arr 10 CELLS DUMP \ вывели содержимое массива в структуре
s FREE THROW \ сняли экземпляр struct


Видимо, мне это показалось очевидным. Надо исправить пример в intro.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 23, 2007 08:43 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Если не сложно то можно пример описания вот такой структуры (впринципе сам как бы смогу если подскажете какими словами определить байт и слово, толкать в стек числа не хочется, может есть слова?)
(fasm)
struc console
{
.sizex dw ? ;(0) размер экранного буфера консоли
.sizey dw ?
.x dw ? ;(4) координаты курсора
.y dw ?
.color dw ? ;(8) атрибуты символа под курсором
.left dw ? ;(10) размер буфера консоли
.top dw ?
.right dw ?
.bottom dw ?
.xmax dw ? ;(18) максимальная длинна буфера консоли
.ymax dw ?
.handle dd ? ;(22) handle консоли
.handin dd ? ;(26) handle консоли
.tcolor dd 7 ;(30) текущие цвета консоли
.chars dd ? ;(34) число введенных символов
.buf db 0 ;(38) длинна буфера для ввода
times 255 db ? ;текст ввода
}

P.S. Пример я думаю будет полезен тем кто еще плохо знает язык, но все же интересуется им.

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 23, 2007 09:23 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пока у меня получилось вот так (последний буфер не нужен, т.к. у форта есть свой буфер):
2 -- sizex \ размер экранного буфера консоли
2 -- sizey
2 -- x \ координаты курсора
2 -- y
2 -- color \ атрибуты символа под курсором
2 -- left \ размер буфера консоли
2 -- top
2 -- right
2 -- bottom
2 -- xmax \ максимальная длина буфера консоли
2 -- ymax
CELL -- hout \ handle вывода
CELL -- hin \ handle ввода
CELL -- tcolor \ текущие цвета консоли

CONSTANT con
0 VALUE console
con ALLOCATE THROW TO console
7 console tcolor !
console FREE THROW

только почему то исчерпание стека идет


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 23, 2007 10:24 
Цитата:
если подскажете какими словами определить байт и слово, толкать в стек числа не хочется, может есть слова


Цитата:
Код:
0
CHAR -- flag
CELL -- field
10 CELLS -- arr
CONSTANT struct

CHAR , CELL . Хотя надо чётко различать CHAR (символ) и 1 (байт). В общем случае проще писать 1. Это уже было обсуждено. Про CHARS и CELLS тоже надо знать.

Цитата:
только почему то исчерпание стека идет

Цитата:
Код:
0
CHAR -- flag
CELL -- field
10 CELLS -- arr
CONSTANT struct

0 вначале поставь.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 23, 2007 11:17 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Сегодня CHAR 1 байт, завтра 2 (unicode), как бы не хотелось его использовать.

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 24, 2007 16:28 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Pretorian писал(а):
Сегодня CHAR 1 байт, завтра 2 (unicode), как бы не хотелось его использовать.


тут есть противный момент, дело в том, что CHAR - это не константа, определяющая длинну символа
а слово выгребающее из входного потока очередное слово и берущее значение первого символа из полученного слова. То есть CHAR -- выдаст сисло, ассоциируемое с символом'-' в текущей кодовой таблице.
К сожалению эту гадость подсовывает стандарт 94. Так что единственный портабельный вариант пока что должен выглядеть так: 1 CHARS --


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 24, 2007 17:07 
Цитата:
...дело в том, что CHAR - это не константа, определяющая длинну символа...

Тьфу, забыл..


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 24, 2007 17:12 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
profiT писал(а):
Цитата:
...дело в том, что CHAR - это не константа, определяющая длинну символа...

Тьфу, забыл..

Я с этой проблемой уже несколько раз сталкивался.
В СМАЛ32 более логичное слово CHAR"
а в стандарте видимо провели параллель с WORDом и получилась такая вот путаница 8(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 27, 2007 22:09 
Не в сети

Зарегистрирован: Сб янв 27, 2007 22:00
Сообщения: 106
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Еще вариант: http://www.forth.org.ru/~yz/record.html


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 27, 2007 22:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
yz писал(а):


ну уж тогда еще и http://spf.cvs.sourceforge.net/spf/deve ... ib/struct/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 01, 2007 09:15 
А что насчёт массива структур? Можно это как-нибудь просто и удобно сделать?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 01, 2007 14:37 
dir писал(а):
А что насчёт массива структур?

Именно массив структур?..

Если именно массив структур, то ничего хоть сколько-нибудь сложного не вижу:

Код:
0
CELL -- x
CELL -- y
CONSTANT points

0 VALUE pArr \ наш будущий массив точек

20 points * \ 20 точек
ALLOCATE THROW ( addr ) TO pArr \ взяли массив

: points[] ( i addr1 -- addr2 ) SWAP point * + ;

   5 pArr points[] x @ \ x-координата пятой точки
13 5 pArr points[] y ! \ y-координату пятой точки ставим на 13


Не массив в структуре?.. С этим сложнее, но как раз недавно ковырял эти вопросы.. Что-то получалось..


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 13, 2008 05:12 
Не в сети

Зарегистрирован: Ср окт 01, 2008 06:49
Сообщения: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А обращаться в структуре к отдельным битам можно? Навроде вот этого?
Код:
typedef struct SDL_VideoInfo {
        Uint32 hw_available :1; /* Flag: Can you create hardware surfaces? */
        Uint32 wm_available :1; /* Flag: Can you talk to a window manager? */
        Uint32 UnusedBits1  :6;
        Uint32 UnusedBits2  :1;
        Uint32 blit_hw      :1; /* Flag: Accelerated blits HW --> HW */
        Uint32 blit_hw_CC   :1; /* Flag: Accelerated blits with Colorkey */
        Uint32 blit_hw_A    :1; /* Flag: Accelerated blits with Alpha */
        Uint32 blit_sw      :1; /* Flag: Accelerated blits SW --> HW */
        Uint32 blit_sw_CC   :1; /* Flag: Accelerated blits with Colorkey */
        Uint32 blit_sw_A    :1; /* Flag: Accelerated blits with Alpha */
        Uint32 blit_fill    :1; /* Flag: Accelerated color fill */
        Uint32 UnusedBits3  :16;
        Uint32 video_mem;       /* The total amount of video memory (in K) */
        SDL_PixelFormat *vfmt;  /* Value: The format of the video surface */
        int    current_w;       /* Value: The current video mode width */
        int    current_h;       /* Value: The current video mode height */
} SDL_VideoInfo;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 13, 2008 08:24 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Создайте, в рамках Форт языка,
нужную Вам структуру с требуемыми возможностями семантики и синтаксиса!


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB