Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт апр 23, 2024 16:50

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: функции с инициализацией
СообщениеДобавлено: Пт мар 23, 2007 23:52 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Код:

\ 20-03-2007 ~mOleg
\ Copyright [C] 2006-2007 mOleg mininoleg@yahoo.com
\ слова инициализацией

: A@ @ ; : A, , ;

\ по смещению получить адрес USER переменной.
: >uaddr, ( user --> addr )
          0x8D C, 0x04 C, 0x07 C, \ LEA EAX, [EDI] [EAX]
          ; IMMEDIATE

\ создать слово, работающее следующим образом.
\ если слово выполняется впервые в указанном потоке выполнить слово init затем
\ выполнить слово work.
: ivect ( ' init ' work / name --> )
        CREATE A, A, USER-HERE , 1 USER-ALLOT
        DOES>
              DUP [ 2 CELLS ] LITERAL + @ >uaddr, C@
                  IF ELSE DUP CELL + A@ EXECUTE
                     TRUE OVER [ 2 CELLS ] LITERAL + @ >uaddr, C!
                  THEN
              A@ EXECUTE ;

\ EOF тестовая секция

: vinit  ." initialize" CR ;
: vwork  ." working " CR ;

' vinit ' vwork ivect tester

tester CR tester


Да, хоть название и ivect - присваивать значения по TO нельзя полученному слову


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

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


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

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


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

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


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

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