Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб дек 05, 2020 13:09

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - разруливание мелких проблем
Автор Сообщение
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
В определении ~NAME был пропущен вариант определения слова COMPILE
замените код see.fts на следующий:

source file: see.fts
\ 28.06.2009 ~mOleg
\ Copyright [C] 2009-2013 mOleg mOlegg@ya.ru
\ декомпиляция подпрограммного шитого кода

math/ useful.fts
util/ ufl.fts
memory/ dump.fts
string/ print.fts
branch/ handlers.fts
vocs/ deref.fts
vocs/ unit.fts

ALSO HIDDEN DEFINITIONS

VECT STARE \ раннее объявление

Unit: disForth

20 VALUE lines# \ количество линий для отображения
USER Lines \ сколько линий уже показано

\ после отображения lines# линий ожидать нажатия клавиши
\ в случае нажатия ESC вернуть false, по нажатию любой другой клавиши true
: ?lines ( --> )
Lines @ IF -1 Lines +!
ELSE lines# Lines !
KEY 0x1B = IF FALSE ;THEN
THEN TRUE ;

\ ловим либо определения, либо данные
: ~box ( addr --> # )
>L TOKEN L+ L@ @ TOKEN +
CELL L+

\ если call то считаем, что <: встретился
L@ B@ 0xE8 = IF ." <: "
L> OVER TOKEN CELL + - STARE ." ;> "
;THEN

L@ SCNT@ DROP OVER > IF ." (BOX) " L> OVER ELSE L> COUNT THEN
<| [CHAR] " KEEP KEEPS [CHAR] " KEEP |> PTYPE ;

\ отобразить литеральные данные
: ~LIT ( n --> )
DUP BODY> *IF SWAP ." ( " H. ." ) " ID>ASC
<| [CHAR] ' KEEP Bl_ KEEP KEEPS |> TYPE
;THEN DROP
DUP N. ." ( " H. ." )" ;

\ отобразить имя по адресу внутри CFA+PFA определения
: ~name ( addr --> )
BODY>
*IF ID>ASC <| KEEPS Bl_ KEEP |> TYPE
ELSE ." ???" H.
THEN ;

\ отобразить содержимое
: ~NAME ( addr --> # )
DUP TOKEN@
DUP ['] (LIT) = IF DROP TOKEN + @ ~LIT TOKEN CELL + ;THEN
DUP ['] (DLIT) = IF DROP TOKEN + D@ D. TOKEN 2 CELLS + ;THEN
DUP ['] BRANCH = IF DROP TOKEN + ." BRANCH " DUP @ + H. TOKEN REF + ;THEN
DUP ['] ?BRANCH = IF DROP TOKEN + ." ?BRANCH " DUP @ + H. TOKEN REF + ;THEN
DUP ['] N?BRANCH = IF DROP TOKEN + ." N?BRANCH " DUP @ + H. TOKEN REF + ;THEN
DUP ['] -BRANCH = IF DROP TOKEN + ." -BRANCH " DUP @ + H. TOKEN REF + ;THEN
DUP ['] *BRANCH = IF DROP TOKEN + ." *BRANCH " DUP @ + H. TOKEN REF + ;THEN
DUP ['] COMPILE = IF DROP TOKEN + ." COMPILE " TOKEN@ ~name TOKEN TOKEN + ;THEN
DUP ['] (BOX) = IF DROP ~box ;THEN
NIP ~name TOKEN ;

\ по указанному адресу находится токен?
: ?TOKEN ( addr --> flag )
DUP TOKEN@ IMAGE-BASE HERE BETWEEN
IF B@ 0xE8 = ;THEN
DROP FALSE ;

\ декодирование одного токена ШК
: DECODE ( addr --> asc # )
DUP CR H. ." \t"
DUP ?TOKEN IF ~NAME ;THEN
DUP B@ 0xE9 = IF ." JUMP " DUP 1 + @ + ~LIT TOKEN ;THEN
DUP B@ 0x90 = IF DROP ." nop" 1 ;THEN
DUP B@ 0xC3 = IF DROP ." EXIT " 1 ;THEN
DUP B@ 0x68 = IF ." RLIT " 1 + @ ~LIT TOKEN ;THEN
DUP B@ 0x05 = IF ." off_" 1 + @ ~LIT TOKEN ;THEN
@ ~LIT CELL ;

\ дизФорт куска кода длиной в # байт с адреса addr
: (STARE) ( addr # --> ) OVER +
<: BEGIN DDUP < WHILE
OVER DECODE *WHILE
ROT + SWAP
?lines WHILE
REPEAT THEN THEN -2 THROW \ тут просто ошибка нужна
;> CATCH TDROP ;

\ дизФорт слова, начинающегося с адреса addr
F: (DIS) ( addr --> )
lines# Lines !
BODY>
DUP &PRI GET-ATTR IF THROW THEN
ABORT" заданное слово является примитивом!"
DUP LINK>C SWAP to_flag off_eow W@ STARE ;F

' (STARE) IS STARE

EndUnit

ALSO ROOT DEFINITIONS

\ дизФорт слова, которому принадлежит addr
: DIS ( addr --> ) BODY> disForth (DIS) ;

\ дизФорт слова с именем name
: SEE ( / name --> ) ' disForth (DIS) ;

RECENT RECENT

?ABSENT test{ \EOF -- тестовая секция ------------------------------------------
test{

}test


FORTH(0)>SEE <:

0x005CF317 COMPILE (BOX)
0x005CF321 HERE
0x005CF326 nil
0x005CF32B ,
0x005CF330 536870946 ( 0x20000022 )
0x005CF339 EXIT Ok
FORTH(0)> Ok
Сообщение Добавлено: Пт май 15, 2020 19:13
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
Victor__v писал(а):
Ввел SEE <: и словил вылет

скорее всего все же с перехватом исключений проблема.
Посмотрю на выходных.
Сообщение Добавлено: Чт май 14, 2020 20:01
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
Еще одна неприятность.
Решил я посмотреть как Форк создает лямбды.

Ввел SEE <: и словил вылет

Если что:
Винда 8,
аппаратные исключения там перехватываются, проверял.
Сообщение Добавлено: Сб май 09, 2020 16:04
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
под семеркой не наблюдаю (64 битной), а десятки под рукой нет.
В чем разница не понятно 8(
Сообщение Добавлено: Пт апр 07, 2017 16:41
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
в совместимости также
а примеры
10 0 /
3 @

: tt 10 @ 2 + ;
' tt catch

результат один и тот же
Сообщение Добавлено: Чт апр 06, 2017 21:23
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
Цитата:
У меня форк не ловит аппаратные исключения
Форк выводит сообщение и закрывается
Windows 10

не имею под рукой десятой винды.
а в режиме совместимости что?

ну и пример как бы не лишний
Сообщение Добавлено: Чт апр 06, 2017 16:12
  Заголовок сообщения:  Re: разруливание мелких проблем  Ответить с цитатой
У меня форк не ловит аппаратные исключения
Форк выводит сообщение и закрывается
Windows 10
Сообщение Добавлено: Ср апр 05, 2017 14:00
  Заголовок сообщения:   Ответить с цитатой
да, запустился, будем смотреть дальше
Сообщение Добавлено: Сб янв 03, 2009 21:01
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
98 ME, файлы - позже

ясно. К сожалению у меня просто не осталось под рукой места, где есть 9х ветка виндов 8(
но ошибка узнаваема, поэтому попробуй в файле .\kernel\os\win\file_io.f
заменить в RdLine ( buff # fid --> # flag )
первую строку на:
<pre>
H-STDIN OVER = IF READ-FILE THROW TRUE EXIT THEN
</pre>
дальше трогать не надо ничего.
Сообщение Добавлено: Сб янв 03, 2009 18:38
  Заголовок сообщения:   Ответить с цитатой
98 ME, файлы - позже
Сообщение Добавлено: Пт янв 02, 2009 21:17
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Error: Неверный хэндл

оп, интересно.
вышли мне на почту пожалуйста fork.ini и options.f
и, если не сложно dir по корневому каталогу.
да, и какая у тебя винда стоит.
Сообщение Добавлено: Пт янв 02, 2009 19:16
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Ктати, не помешало бы и описание этих циклов
Там имеется статейка. Но вот незадача, почитав всё (многое) собрал себе форк, а он не желает работать - в бесконечном цикле выводит построчно сообщение
Error: Неверный хэндл

интересно, откуда начинать искать ошибку, чтобы не долго?
Сообщение Добавлено: Пт янв 02, 2009 10:41
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
я так, кстати и не понял, что означает расширение fts

ForTh Source ;)
расширение попросило поменять несколько человек, чтобы не пересекаться с СПФовским *.f
Сообщение Добавлено: Ср дек 31, 2008 20:46
  Заголовок сообщения:   Ответить с цитатой
я так, кстати и не понял, что означает расширение fts
Сообщение Добавлено: Ср дек 31, 2008 20:44

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


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