[[SPF]] Help
http://spf.sf.net
[[src/spf_defkern.f]]
[[src/spf_forthproc.f]] [[src/spf_floatkern.f]] [[src/spf_forthproc_hl.f]]
[[src/win/spf_win_api.f]] [[src/win/spf_win_proc.f]] [[src/win/spf_win_const.f]]
[[src/win/spf_win_memory.f]] [[src/spf_except.f]] [[src/win/spf_win_except.f]]
[[src/win/spf_win_io.f]] [[src/win/spf_win_conv.f]] [[src/win/spf_win_con_io.f]]
[[src/spf_con_io.f]] [[src/spf_print.f]] [[src/win/spf_win_module.f]]
[[src/compiler/spf_parser.f]] [[src/compiler/spf_read_source.f]]
[[src/compiler/spf_nonopt.f]] [[src/compiler/spf_compile0.f]] [[src/macroopt.f]]
[[src/compiler/spf_compile.f]] [[src/compiler/spf_wordlist.f]]
[[src/compiler/spf_find.f]] [[src/compiler/spf_words.f]]
[[src/compiler/spf_error.f]] [[src/compiler/spf_translate.f]]
[[src/compiler/spf_defwords.f]] [[src/compiler/spf_immed_transl.f]]
[[src/compiler/spf_immed_lit.f]] [[src/compiler/spf_literal.f]]
[[src/compiler/spf_immed_control.f]] [[src/compiler/spf_immed_loop.f]]
[[src/compiler/spf_modules.f]] [[src/compiler/spf_inline.f]]
[[src/win/spf_win_envir.f]] [[src/win/spf_win_defwords.f]]
[[src/win/spf_win_mtask.f]] [[src/win/spf_win_cgi.f]] [[src/win/spf_pe_save.f]]
[[src/spf_init.f]]
[[_CREATE-CODE]] [[_CONSTANT-CODE]]
[[_USER-CODE]] [[USER+]] [[_USER-VALUE-CODE]] [[_USER-VECT-CODE]] [[_VECT-CODE]]
[[_TOVALUE-CODE]] [[_TOUSER-VALUE-CODE]] [[_SLITERAL-CODE]] [[_CLITERAL-CODE]]
[[_---CODE]]
================================================================
Стековые манипуляции [[DUP]] [[2DUP]] [[DROP]] [[MAX]] [[MIN]] [[UMAX]] [[UMIN]]
[[2DROP]] [[SWAP]] [[2SWAP]] [[OVER]] [[2OVER]] [[NIP]] [[ROT]] [[-ROT]]
[[PICK]] [[ROLL]] [[TUCK]] [[2>R]] [[2R>]] [[R@]] [[2R@]] [[@]] [[!]]
[[C@]] [[C!]] [[W@]] [[W!]] [[2@]] [[2!]] [[1+]] [[1-]] [[2+]] [[2-]] [[2*]]
[[+]] [[CELL+]] [[CELL-]] [[CELLS]] [[D+]] [[D-]] [[-]] [[1+!]] [[0!]] [[COUNT]]
[[*]] [[AND]] [[OR]] [[XOR]] [[INVERT]] [[NEGATE]] [[DNEGATE]] [[ABS]] [[NOOP]]
[[S>D]] [[D>S]] [[U>D]] [[C>S]] [[UM*]] [[/]] [[U/]] [[+!]] [[MOD]]
[[/MOD]] [[UMOD]] [[UM/MOD]] [[2/]] [[*/MOD]] [[M*]] [[LSHIFT]] [[RSHIFT]]
[[SM/REM]] [[FM/MOD]] [[DIGIT]] [[=]] [[<>]] [[<]] [[>]] [[WITHIN]]
[[D<]] [[D>]] [[U<]] [[U>]] [[0<]] [[0=]] [[0<>]] [[D0=]]
[[D=]] [[D2*]] [[D2/]] [[-TRAILING]] [[COMPARE]] [[SEARCH]] [[CMOVE]]
[[CMOVE>]] [[FILL]] [[ASCIIZ>]] [[SP!]] [[RP!]] [[SP@]] [[RP@]]
[[TlsIndex!]] [[TlsIndex@]] [[FS@]] [[FS!]] [[J]] [[C-DO]] [[C-?DO]]
[[ADD[ESP],EAX]] [[C-I]] [[C->R]] [[C-R>]] [[C-RDROP]] [[C-?DUP]]
[[C-EXECUTE]] [[DRMOVE]] [[NR>]] [[N>R]] [[NRCOPY]] [[RP+@]] [[RP+]]
[[RP+!]] [[RALLOT]] [[(RALLOT)]] [[RFREE]] [[(LocalsExit)]] [[TIMER@]]
[[TRAP-CODE]] [[(ENTER)]]
Ядро float библиотеки ver. 2.33
Слова низкого уровня [c] Dmitry Yakimov [ftech@tula.net] Constants
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ [[2.E]] [[10.E]] [[FPI]] [[FLG2]]
[[FLN2]] [[FL2T]] [[FL2E]] [[.E]] [[1.E]] [[F0=]] [[F0<]] [[F<]] [[F=]]
[[FMAX]] [[FMIN]] [[FNEGATE]] [[FCOS]] [[FSIN]] [[FSINCOS]] [[FABS]] [[F*]]
[[F+]] [[F-]] [[F/]] [[FSQRT]] [[FDROP]] [[FDUP]] [[FOVER]] [[FINT]] [[FSWAP]]
[[FROT]] [[FDEPTH]] [[F1+]] [[D>F]] [[DF!]] [[DF@]] [[F!]] [[FLOAT>DATA]]
[[DATA>FLOAT]] [[FLOAT>DATA32]] [[DATA>FLOAT32]] [[F@]] [[SF!]] [[SF@]]
[[FLN]] [[FLNP1]] [[FLOG]] [[FEXP]] [[FEXPM1]] [[F**]] [[FTAN]] [[FATAN]]
[[FATAN2]] [[FACOS]] [[FASIN]] [[F>DEG]] [[F>RAD]] [[FINIT]] [[SETFPUCW]]
[[GETFPUCW]] [[DS>F]] [[F>DS]] [[F--DS]] [[GETFPUSW]] [[FLOG2]] [[F[LOG]]]
[[TRUNC-MODE]] [[ROUND-MODE]] [[UP-MODE]] [[LOW-MODE]] [[F>D]] [[F>D]]
[[F10*]] [[F10/]] [[F>ENV]] [[FENV>]] [[FSAVE]] [[FRSTOR]] [[FD<]]
[[FD>]] [[`F1+]] [[F**2]] [[`F1-]] [[_FLIT-CODE8]] [[_FLIT-CODE10]]
[[FNOP]]
94 CORE EXT Вернуть флаг "ложь".
94 CORE EXT Вернуть флаг "истина", ячейку со всеми установленными битами. [[*/]]
[[CHAR+]] [[CHAR-]] [[CHARS]] [[>CHARS]] [[>CELLS]] [[MOVE]] [[ERASE]]
[[DABS]] [[HASH]]
$Id: spf_win_api.f,v 1.9
2006/12/04 21:16:00 ygreks Exp $ обработчики ненахождения ф-ии/либы [[AO_INI]]
[[API-CALL]] [[_WINAPI-CODE]] [[_WNDPROC-CODE]]
$Id: spf_win_proc.f,v 1.4
2006/12/04 21:16:00 ygreks Exp $
$Id: spf_win_const.f,v 1.3
2006/12/04 21:16:00 ygreks Exp $ 94 FILE fam - определенное реализацией значение
для выбора метода доступа к файлу "только для чтения" 94 FILE fam - определенное
реализацией значение для выбора метода доступа к файлу "только для записи" 94
FILE fam - определенное реализацией значение для выбора метода доступа к файлу
"чтение/запись"
$Id: spf_win_memory.f,v 1.8
2006/12/04 21:16:00 ygreks Exp $ 94 MEMORY хэндл хипа текущего потока смещение в
области данных потока, где создаются новые переменные [[ERR]] [[USER-ALLOT]]
[[USER-HERE]] [[SET-HEAP]] [[CREATE-HEAP]] [[CREATE-PROCESS-HEAP]]
[[DESTROY-HEAP]] [[ALLOCATE]] [[FREE]] [[RESIZE]]
программные исключения если в
результате сбоев повредилось исходное значение HANDLER, установленное при входе
в поток/задачу или позднее, то выполнится этот обработчик FATAL-HANDLER
[[THROW]] [[CATCH]] [[ABORT]]
$Id: spf_win_except.f,v 1.11
2006/12/04 21:16:00 ygreks Exp $ хэндл файла - стандартного ввода хэндл файла -
стандартного вывода хэндл файла - стандартного вывода ошибок аппаратные
исключения (преобразуемые в программные) [[(EXC)]] [[DROP-EXC-HANDLER]]
[[SET-EXC-HANDLER]] [[AT-THREAD-FINISHING]] [[AT-PROCESS-FINISHING]]
[[HALT]]
$Id: spf_win_io.f,v 1.8 2006/12/04
21:16:00 ygreks Exp $ [[CLOSE-FILE]] [[CREATE-FILE]] [[CREATE-FILE-SHARED]]
[[OPEN-FILE-SHARED]] [[DELETE-FILE]] [[FILE-POSITION]] [[FILE-SIZE]]
[[OPEN-FILE]] [[READ-FILE]] [[REPOSITION-FILE]] [[DOS-LINES]] [[UNIX-LINES]]
[[READ-LINE]] [[WRITE-FILE]] [[RESIZE-FILE]] [[WRITE-LINE]] [[FLUSH-FILE]]
[[FILE-EXIST]]
$Id: spf_win_conv.f,v 1.3
2006/12/04 21:16:00 ygreks Exp $
$Id: spf_win_con_io.f,v 1.9
2006/12/04 21:16:00 ygreks Exp $ [[ENDLOG]] [[STARTLOG]] [[TO-LOG]] [[ACCEPT1]]
[[TYPE1]] [[EMIT]] [[CR]] [[EKEY?]] [[ControlKeysMask]] [[EKEY]]
[[EKEY>CHAR]] [[EKEY>SCAN]]
94 char - значение символа "пробел".
[[SPACE]] [[SPACES]] [[KEY?]] [[KEY1]]
переменная - позиция последней литеры,
перенесенной в PAD 94 a-addr - адрес ячейки, содержащей текущее основание
системы счисления (2..36). Область форматного преобразования - обязательно перед
PAD 94 CORE EXT c-addr - адрес области для промежуточной обработки данных.
[[HEX]] [[DECIMAL]] [[HOLD]] [[HOLDS]] [[<#]] [[#]] [[#S]] [[#>]] [[SIGN]]
[[(D.)]] [[D.]] [[.]] [[U.]] [[.0]] [[.TO-LOG]] [[>PRT]] [[PTYPE]] [[DUMP]]
[[(.")]] [[>NUMBER]] [[SCREEN-LENGTH]]
$Id: spf_win_module.f,v 1.9
2006/12/04 21:16:00 ygreks Exp $ [[is_path_delimiter]] [[CUT-PATH]]
[[ModuleName]] [[ModuleDirName]] [[+ModuleDirName]] [[+LibraryDirName]]
[[SOURCE-NAME]]
$Id: spf_parser.f,v 1.11
2006/12/04 21:15:59 ygreks Exp $ 94 CORE EXT a-addr - адрес ячейки, содержащей
число символов в буфере TIB. 94 a-addr - адрес ячейки, содержащей смещение
очередной литеры во входном текстовом буфере. максимальный размер строки,
которую можно ввести в TIB 94 CORE EXT Адрес терминального входного буфера.
исходное значение TIB [[SOURCE]] [[SOURCE!]] [[EndOfChunk]] [[CharAddr]]
[[PeekChar]] [[IsDelimiter]] [[GetChar]] [[OnDelimiter]] [[SkipDelimiters]]
[[OnNotDelimiter]] [[SkipWord]] [[SkipUpTo]] [[ParseWord]] [[NextWord]]
[[PARSE-NAME]] [[PARSE]] [[PSKIP]] [[SKIP]] [[SKIP1]]
$Id: spf_read_source.f,v
1.8 2006/12/04 21:15:59 ygreks Exp $ 94 CORE EXT Идентифицирует входной поток:
-1 - строка (через EVALUATE) 0 - пользовательское входное устройство если не
равен нулю, то содержит заполняющее слово для REFILL номер строки
[[CONSOLE-HANDLES]] [[TAKEN-TIB]] [[REFILL-STDIN]] [[FREFILL]] [[REFILL-FILE]]
[[REFILL-SOURCE]]
$Id: spf_nonopt.f,v 1.6
2006/12/04 21:15:59 ygreks Exp $ список словарей запишем адрес имени словаря 94
Исполнение: ( x -- ) ( R: -- x ) Перенести x на стек возвратов. Интерпретация:
семантика в режиме интерпретации не определена. 94 Исполнение: ( -- x ) ( R: x
-- ) Перенести x со стека возвратов на стек данных. Интерпретация: семантика в
режиме интерпретации не определена. 94 Продублировать x, если не ноль.
================================================================ Вызов
подпрограммы (для подпрограммного шитого кода) 94 Убрать xt со стека и выполнить
заданную им семантику. Другие изменения на стеке определяются словом, которое
выполняется.
$Id: spf_compile0.f,v 1.5
2006/12/04 21:15:59 ygreks Exp $ дает wid текущего словаря компиляции
переменная, содержащая HERE сегмента данных длина кода, компилируемого CREATE в
сегмент CS. временная переменная - адрес для DOES> [[SET-CURRENT]]
[[GET-CURRENT]] [[IS-TEMP-WL]] [[DP]] [[ALLOT]] [[,]] [[C,]] [[W,]]
ЋЇвЁ¬Ё§ЁагойЁ©
¬ Єа®Ї®¤бв ®ўиЁЄ Њ ЄбЁ¬®ў Њ.Ћ. : REL! ( ADDR' ADDR -- ) TUCK
- SWAP ! ; [[REL@]] [[SET-OPT]] [[DIS-OPT]] [[SetOP]] [[ToOP0]] [[ClearJpBuff]]
[[J@]] [[SJ@]] [[J_@]] [[SetJP]] [[?SET]] [[SHORT?]] [[EVEN-EAX]] [[EVEN-EBP]]
[[+>OFF-EBP]] [[ADD|XOR|OR|AND=]] [[DUP3B?[EBP]]] [[DUP3B?]] [[DUP2B?]]
[[DUP6B?]] [[DUP5B?]] [[DUP7B?]] [[?ChEAX]] [[^?EAX=]] [[OP_SIZE]] [[OPexcise]]
[[?OPlast]] [[XX_STEP]] [[?EDX_[EBP]]] [[MOV_EDX_[EBP]]] [[OPresize]]
[[OPinsert]] [[?~EAX{]] [[}?~EAX]] [[?EAX>EBX]] [[EAX>EBX0]]
[[EAX>EBX]] [[?EAX>ECX]] [[EAX>ECX0]] [[EAX>ECX]] [[-EBPLIT]]
[[-EBPCLR]] [[T?EAX>ECX]] [[F?EAX>ECX]] [[ECX:=EAX]] [[EBX:=EAX]]
[[?EAX:=ECX]] [[DO_EAX>ECX]] [[?EAX=RULES]] [[OPT-RULES]] [[-EVEN-EBP]]
[[OPT_]] [[DO_OPT]] [[INLINE?]] [[MACRO?]] [[+EBP]] [[1_,_STEP]] [[2_,_STEP]]
[[3_,_STEP]] [[4_,_STEP_]] [[4_,_STEP]] [[5_,_STEP]] [[6_,_STEP]] [[7_,_STEP]]
[[A_,_STEP]] [[0A_,_STEP]] [[1A_,_STEP]] [[2A_,_STEP]] [[_INLINE,]]
[[OPT_CLOSE]] [[OPT_INIT]] [[INLINE,]] [[MACRO,]] [[XC_J]] [[?BR-OPT-RULES]]
[[BR-EVEN-EAX]] [[?BR-OPT]] [[??BR-OPT]] [[???BR-OPT]] [[OPT]] [[FORLIT,]]
[[CON>LIT]] [[J?_STEP]] [[J_+!]] [[J_MOVE]] [[RESOLVE_OPT]]
$Id: spf_compile.f,v 1.18
2006/12/04 21:15:59 ygreks Exp $ [[HERE]] [[_COMPILE,]] [[COMPILE,]] [[BRANCH,]]
[[RET,]] [[LIT,]] [[DLIT,]] [[RLIT,]] [[?BRANCH,]] [[S,]] [[S",]] [[SLIT,]]
[[",]] [[>MARK]] [[<MARK]] [[>ORESOLVE1]] [[>ORESOLVE]]
[[>RESOLVE1]] [[>RESOLVE]] [[ALIGN-TO]] [[ALIGNED]] [[ALIGN]]
[[ALIGN-NOP]]
$Id: spf_wordlist.f,v 1.5
2006/12/04 21:15:59 ygreks Exp $ указывает на поле имени последней
скомпилированной словарной статьи в отличие от LATEST, которое дает адрес
последнего слова в CURRENT константа для высечения флажка IMMEDIATE 94 SEARCH
Возвратить wid - идентификатор списка слов, включающего все стандартные слова,
обеспечиваемые реализацией. Этот список слов изначально список компиляции и
часть начального порядка поиска. [[>BODY]] [[+SWORD]] [[+WORD]] [[WORDLIST]]
[[TEMP-WORDLIST]] [[FREE-WORDLIST]] [[CLASS!]] [[CLASS@]] [[PAR!]] [[PAR@]]
[[NAME>]] [[NAME>C]] [[NAME>F]] [[NAME>L]] [[CDR]] [[ID.]]
[[?IMMEDIATE]] [[?VOC]] [[IMMEDIATE]] [[VOC]] [[WL_NEAR_NFA]] [[NEAR_NFA]]
[[WordByAddr]]
$Id: spf_find.f,v 1.11
2006/12/04 21:15:59 ygreks Exp $ 94 SEARCH Найти определение, заданное строкой
c-addr u в списке слов, идентифицируемом wid. Если определение не найдено,
вернуть ноль. Если определение найдено, вернуть выполнимый токен xt и единицу
(1), если определение немедленного исполнения, иначе минус единицу (-1).
Оптимизировано by day (29.10.2000) Оптимизировано by mak July 26th, 2001 - 15:45
[[CDR-BY-NAME]] [[SEARCH-WORDLIST-NFA]] [[SEARCH-WORDLIST1]] [[SFIND]] [[FIND1]]
[[DEFINITIONS]] [[GET-ORDER]] [[FORTH]] [[ONLY]] [[SET-ORDER]] [[ALSO]]
[[PREVIOUS]] [[VOC-NAME.]] [[ORDER]] [[LATEST]]
$Id: spf_words.f,v 1.4
2006/12/04 21:15:59 ygreks Exp $ [[NLIST]] [[WORDS]]
$Id: spf_error.f,v 1.9
2006/12/04 21:15:59 ygreks Exp $ обработчик ошибок (ABORT) flag область,
содержащая местоположение строки и саму строку [[SEEN-ERR?]] [[SEEN-ERR]]
[[NOTSEEN-ERR]] [[ERR-NUMBER]] [[ERR-LINE#]] [[ERR-IN#]] [[ERR-LINE]]
[[ERR-FILE]] [[ERR-STRING]] [[LAST-WORD]] [[?ERROR]] [[(ABORT1")]]
[[SAVE-ERR]]
$Id: spf_translate.f,v
1.20 2006/12/04 21:15:59 ygreks Exp $ адрес дна стека данных адрес дна стека
возвратов 94 a-addr - адрес ячейки, содержащей флажок "состояние компиляции".
STATE "истина" в режиме компиляции, иначе "ложь". Изменяют STATE только
следующие стандартные слова: : ; [ ] ABORT QUIT :NONAME [[DEPTH]] [[?STACK]]
[[?COMP]] [[WORD]] [[']] [[CHAR]] [[BYE]] [[EVAL-WORD]] [[NOTFOUND]]
[[INTERPRET_]] [[INTERPRET]] [[.SN]] [[OK1]] [[[]] [[]]] [[MAIN1]] [[QUIT]]
[[SAVE-SOURCE]] [[RESTORE-SOURCE]] [[EVALUATE-WITH]] [[EVALUATE]]
[[PROCESS-ERR1]] [[RECEIVE-WITH-XT]] [[RECEIVE-WITH]] [[HEAP-COPY]]
[[FIND-FULLNAME1]] [[TranslateFlow]] [[INCLUDE-FILE]] [[INCLUDE-PROBE]]
[[(INCLUDED1)]] [[INCLUDED_STD]] [[INCLUDED]] [[REQUIRED]] [[REQUIRE]]
$Id: spf_defwords.f,v 1.12
2006/12/04 21:15:59 ygreks Exp $ [[SHEADER1]] [[HEADER]] [[CREATED]] [[CREATE]]
[[(DOES1)]] [[(DOES2)]] [[DOES>]] [[VOCABULARY]] [[VARIABLE]] [[CONSTANT]]
[[VALUE]] [[VECT]] [[->VARIABLE]] [[USER-ALIGNED]] [[USER-CREATE]] [[USER]]
[[USER-VALUE]] [[USER-VECT]] [[->VECT]] [[BEHAVIOR]] [[SMUDGE]] [[HIDE]]
[[:NONAME]] [[:]]
$Id:
spf_immed_transl.f,v 1.7 2006/12/04 21:15:59 ygreks Exp $ [[TO]] [[POSTPONE]]
[[/]] [[.(]] [[(]] [[[COMPILE]]] [[;]] [[EXIT]] [[/EOF]] [[FIELD]] [[--]]
$Id: spf_immed_lit.f,v 1.8
2006/12/04 21:15:59 ygreks Exp $ [[LITERAL]] [[2LITERAL]] [[SLITERAL]]
[[CLITERAL]] [[S"]] [[C"]] [[."]] [[[CHAR]]] [[ABORT"]] [[[']]]
$Id: spf_literal.f,v 1.9
2006/12/04 21:15:59 ygreks Exp $ [[?SLITERAL1]] [[?LITERAL1]] [[HEX-SLITERAL]]
[[?SLITERAL2]] [[?LITERAL2]]
$Id:
spf_immed_control.f,v 1.8 2006/12/04 21:15:59 ygreks Exp $ [[IF]] [[ELSE]]
[[THEN]] [[BEGIN]] [[UNTIL]] [[WHILE]] [[REPEAT]] [[AGAIN]] [[RECURSE]]
$Id: spf_immed_loop.f,v
1.9 2006/12/04 21:15:59 ygreks Exp $ [[DO]] [[?DO]] [[LOOP]] [[+LOOP]] [[I]]
[[LEAVE]] [[UNLOOP]]
$Id: spf_modules.f,v 1.7
2006/12/04 21:15:59 ygreks Exp $ [[MODULE:]] [[EXPORT]] [[;MODULE]] [[{{]]
[[}}]]
$Id: spf_inline.f,v 1.5
2006/12/04 21:15:59 ygreks Exp $ [[R>]] [[>R]] [[RDROP]] [[?DUP]]
[[EXECUTE]]
$Id: spf_win_envir.f,v 1.13
2006/12/04 21:16:00 ygreks Exp $ [[(ENVIR?)]] [[ENVIRONMENT?]]
[[(DECODE-ERROR)]] [[DECODE-ERROR]] [[ERROR2]] [[LIB-ERROR1]] [[LIB-PROC1]]
[[ANSI>OEM]] [[OEM>ANSI]]
$Id: spf_win_defwords.f,v
1.10 2006/12/04 21:16:00 ygreks Exp $ [[__WIN:]] [[WINAPI:]] [[EXTERN]]
[[CALLBACK:]] [[WNDPROC:]] [[TASK]] [[TASK:]] [[ERASE-IMPORTS]]
$Id: spf_win_mtask.f,v 1.3
2006/12/04 21:16:00 ygreks Exp $ [[START]] [[SUSPEND]] [[RESUME]] [[STOP]]
[[PAUSE]] [[TERMINATE]]
$Id: spf_win_cgi.f,v 1.3
2006/12/04 21:16:00 ygreks Exp $ [[CGI-OPTIONS]]
$Id: spf_pe_save.f,v 1.7
2006/12/04 21:16:00 ygreks Exp $ адрес компиляции кода адрес загрузки кода
сколько места резервировать при загрузке секции кода адрес загрузки первой
секции [[SAVE]] [[OPTIONS]]
[[AT-THREAD-STARTING]]
[[AT-PROCESS-STARTING]] [[POOL-INIT]] [[USER-INIT]] [[ERR-EXIT]]
[[PROCESS-INIT]] [[USER-EXIT]] [[STACK-ADDR.]] [[EXC-DUMP1]] [[(TITLE)]]
[[TITLE]] [[SPF-INI]] [[...]] [[..:]] [[;..]] [[(INIT)]]
\n
\n
\n
( offs -- addr )\n
\n
\n
\n
\n
\n
\n
\n
\n
( x -- x x )\n 94
Продублировать x.
( x1 x2 -- x1 x2 x1 x2 )\n
94 Продублировать пару ячеек x1 x2.
( x -- )\n 94 Убрать x со
стека.
( n1 n2 -- n3 )\n 94 n3 -
большее из n1 и n2.
( n1 n2 -- n3 )\n 94 n3 -
меньшее из n1 и n2.
( n1 n2 -- n3 )\n 94
( n1 n2 -- n3 )\n 94
( x1 x2 -- )\n 94 Убрать
со стека пару ячеек x1 x2.
( x1 x2 -- x2 x1 )\n 94
поменять местами два верхних элемента стека XCHG EAX, [EBP]
( x1 x2 x3 x4 -- x3 x4 x1
x2 )\n 94 Поменять местами две верхние пары ячеек.
( x1 x2 -- x1 x2 x1 )\n 94
Положить копию x1 на вершину стека.
( x1 x2 x3 x4 -- x1 x2 x3
x4 x1 x2 )\n 94 Копировать пару ячеек x1 x2 на вершину стека.
( x1 x2 -- x2 )\n 94 CORE
EXT Убрать первый элемент под вершиной стека.
( x1 x2 x3 -- x2 x3 x1 )\n
94 Прокрутить три верхних элемента стека.
( x1 x2 x3 -- x3 x1 x2 )\n
94 Прокрутить три верхних элемента стека.
( xu ... x1 x0 u -- xu ...
x1 x0 xu )\n 94 CORE EXT Убрать u. Копировать xu на вершину стека.
Неопределенная ситуация возникает, если перед выполнением PICK на стеке меньше,
чем u+2 элементов. MOV EAX, [EBP + EAX*4 ]
( xu xu-1 ... x0 u -- xu-1
... x0 xu )\n 94 CORE EXT Убрать u. Повернуть u+1 элемент на вершине стека.
Неопределенная ситуация возникает, если перед выполнением ROLL на стеке меньше
чем u+2 элементов.
( x1 x2 -- x2 x1 x2 )\n
Copy the first (top) stack item below the second stack item.
\n 94 CORE EXT
Интерпретация: семантика неопределена. Выполнение: ( x1 x2 -- ) ( R: -- x1 x2 )
Перенести пару ячеек x1 x2 на стек возвратов. Семантически эквивалентно SWAP
>R >R.
\n 94 CORE EXT
Интерпретация: семантика неопределена. Выполнение: ( -- x1 x2 ) ( R: x1 x2 -- )
Перенести пару ячеек x1 x2 со стека возвратов. Семантически эквивалентно R>
R> SWAP.
\n 94 Исполнение: ( -- x ) (
R: x -- x ) Интерпретация: семантика в режиме интерпретации неопределена.
\n 94 CORE EXT
Интерпретация: семантика неопределена. Выполнение: ( -- x1 x2 ) ( R: x1 x2 -- x1
x2 ) Копировать пару ячеек x1 x2 со стека возвратов. Семантически эквивалентно
R> R> 2DUP >R >R SWAP.
( a-addr -- x )\n 94 x -
значение по адресу a-addr.
( x a-addr -- )\n 94 Записать
x по адресу a-addr.
( c-addr -- char )\n 94
Получить символ по адресу c-addr. Незначащие старшие биты ячейки нулевые.
( char c-addr -- )\n 94
Записать char по адресу a-addr.
( c-addr -- word )\n
Получить word по адресу c-addr. Незначащие старшие биты ячейки нулевые.
( word c-addr -- )\n
Записать word по адресу a-addr.
( a-addr -- x1 x2 )\n 94
Получить пару ячеек x1 x2, записанную по адресу a-addr. x2 по адресу a-addr, x1
в следующей ячейке. Равносильно DUP CELL+ @ SWAP @
( x1 x2 a-addr -- )\n 94
Записать пару ячеек x1 x2 по адресу a-addr, x2 по адресу a-addr, x1 в следующую
ячейку. Равносильно SWAP OVER ! CELL+ !
( n1|u1 -- n2|u2 )\n 94
Прибавить 1 к n1|u1 и получить сумму u2|n2.
( n1|u1 -- n2|u2 )\n 94
Вычесть 1 из n1|u1 и получить разность n2|u2.
( W -> W+2 )\n
( W -> W-2 )\n
\n
( n1|u1 n2|u2 -- n3|u3 )\n 94
Сложить n1|u1 и n2|u2 и получить сумму n3|u3.
\n
\n
\n
( d1|ud1 d2|ud2 -- d3|ud3
)\n 94 DOUBLE Сложить d1|ud1 и d2|ud2 и дать сумму d3|ud3.
( d1|ud1 d2|ud2 -- d3|ud3
)\n 94 DOUBLE
( n1|u1 n2|u2 -- n3|u3 )\n 94
Вычесть n2|u2 из n1|u1 и получить разность n3|u3.
( A -> )\n
( A -> )\n
( c-addr1 -- c-addr2 u
)\n 94 Получить строку символов из строки со счетчиком c-addr1. c-addr2 - адрес
первого символа за c-addr1. u - содержимое байта c-addr1, являющееся длиной
строки символов, начинающейся с адреса c-addr2.
( n1|u1 n2|u2 -- n3|u3 )\n 94
Перемножить n1|u1 и n2|u2 и получить произведение n3|u3.
( x1 x2 -- x3 )\n 94 x3 -
побитовое "И" x1 и x2.
( x1 x2 -- x3 )\n 94 x3 -
побитовое "ИЛИ" x1 и x2.
( x1 x2 -- x3 )\n 94 x3 -
побитовое "исключающее ИЛИ" x1 и x2.
( x1 -- x2 )\n 94
Инвертировать все биты x1 и получить логическую инверсию x2.
( n1 -- n2 )\n 94 n2 -
арифметическая инверсия n1.
( d1 -- d2 )\n 94
DOUBLE d2 результат вычитания d1 из нуля.
( n -- u )\n 94 u -
абсолютная величина n.
( -> )\n
( n -- d )\n 94
Преобразовать число n в двойное число d с тем же числовым значением. 31
( d -- n )\n 94 DOUBLE n -
эквивалент d. Исключительная ситуация возникает, если d находится вне диапазона
знаковых одинарных чисел.
( U -> D )\n расширить
число до двойной точности нулем
( c -- n )\n расширить CHAR
( u1 u2 -- ud )\n 94 ud -
произведение u1 и u2. Все значения и арифметика беззнаковые.
( n1 n2 -- n3 )\n 94 Делить
n1 на n2, получить частное n3. Исключительная ситуация возникает, если n2 равен
нулю. Если n1 и n2 различаются по знаку - возвращаемый результат зависит от
реализации.
( W1, W2 -> W3 )\n
беззнаковое деление W1 на W2
( n|u a-addr -- )\n 94
Прибавить n|u к одинарному числу по адресу a-addr.
( n1 n2 -- n3 )\n 94 Делить
n1 на n2, получить остаток n3. Исключительная ситуация возникает, если n2 равен
нулю. Если n1 и n2 различаются по знаку - возвращаемый результат зависит от
реализации.
( n1 n2 -- n3 n4 )\n 94
Делить n1 на n2, дать остаток n3 и частное n4. Неоднозначная ситуация возникает,
если n2 нуль.
( W1, W2 -> W3 )\n
остаток от деления W1 на W2
( ud u1 -- u2 u3 )\n 94
Делить ud на u1, получить частное u3 и остаток u2. Все значения и арифметика
беззнаковые. Исключительная ситуация возникает, если u1 ноль или частное
находится вне диапазона одинарных беззнаковых чисел.
( x1 -- x2 )\n 94 x2 -
результат сдвига x1 на один бит вправо без изменения старшего бита. SAR EAX, # 1
( n1 n2 n3 -- n4 n5 )\n
94 Умножить n1 на n2, получить промежуточный двойной результат d. Разделить d на
n3, получить остаток n4 и частное n5.
( n1 n2 -- d )\n 94 d -
знаковый результат умножения n1 на n2.
( x1 u -- x2 )\n 94
Сдвинуть x1 на u бит влево. Поместить нули в наименее значимые биты,
освобождаемые при сдвиге. Неоднозначная ситуация возникает, если u больше или
равно числу бит в ячейке.
( x1 u -- x2 )\n 94
Сдвинуть x1 на u бит вправо. Поместить нули в наиболее значимые биты,
освобождаемые при сдвиге. Неоднозначная ситуация возникает, если u больше или
равно числу бит в ячейке.
( d1 n1 -- n2 n3 )\n 94
Разделить d1 на n1, получить симметричное частное n3 и остаток n2. Входные и
выходные аргументы знаковые. Неоднозначная ситуация возникает, если n1 ноль, или
частное вне диапазона одинарных знаковых чисел.
( d1 n1 -- n2 n3 )\n 94
Разделить d1 на n1, получить частное n3 и остаток n2. Входные и выходные
аргументы знаковые. Неоднозначная ситуация возникает, если n1 ноль, или частное
вне диапазона одинарных знаковых чисел. Остаток-то есть? А аргументы разного
знака?
\n [ C, N1 -> N2, TF /
FF ] \ N2 - значение литеры C как цифры в системе счисления по основанию N1 SUB
AL, # 30 CMP AL, # A MOV EAX, # -1 CMP AL, # 11 SUB AL, # 7
( x1 x2 -- flag )\n 94 flag
"истина" тогда и только тогда, когда x1 побитно равен x2.
( x1 x2 -- flag )\n 94 CORE
EXT flag "истина" тогда и только тогда, когда x1 не равен x2.
( n1 n2 -- flag )\n 94 flag
"истина" тогда и только тогда, когда n1 меньше n2.
( n1 n2 -- flag )\n 94 flag
"истина" тогда и только тогда, когда n1 больше n2.
( n1 low high -- f1 )\n
f1=true if ((n1 >= low) & (n1 < high))
( d1 d2 -- flag )\n DOUBLE
flag "истина" тогда и только тогда, когда d1 меньше d2.
( d1 d2 -- flag )\n DOUBLE
flag "истина" тогда и только тогда, когда d1 больше d2.
( u1 u2 -- flag )\n 94 flag
"истина" тогда и только тогда, когда u1 меньше u2.
( u1 u2 -- flag )\n 94 flag
"истина" тогда и только тогда, когда u1 больше u2.
( n -- flag )\n 94 flag
"истина" тогда и только тогда, когда n меньше нуля.
( x -- flag )\n 94 flag
"истина" тогда и только тогда, когда x равно нулю.
( x -- flag )\n 94 CORE EXT
flag "истина" тогда и только тогда, когда x не равно нулю.
( xd -- flag )\n 94 DOUBLE
flag "истина" тогда и только тогда, когда xd равен нулю.
( xd1 xd2 -- flag )\n 94
DOUBLE flag is true if and only if xd1 is bit-for-bit the same as xd2
( xd1 -- xd2 )\n 94 DOUBLE
xd2 is the result of shifting xd1 one bit toward the most-significant bit,
filling the vacated least-significant bit with zero SHL [EBP], # 1 RCL EAX, # 1
( xd1 -- xd2 )\n 94 DOUBLE
xd2 is the result of shifting xd1 one bit toward the least-significant bit,
leaving the most-significant bit unchanged SAR EAX, # 1 RCR [EBP], # 1
( c-addr u1 -- c-addr
u2 )\n 94 STRING Если u1 больше нуля, u2 равно u1, уменьшенному на количество
пробелов в конце символьной строки, заданной c-addr и u1. Если u1 ноль или вся
строка состоит из пробелов, u2 ноль. MOV AL, # 20
( c-addr1 u1 c-addr2 u2
-- n )\n 94 STRING Сравнить строку, заданную c-addr1 u1, со строкой, заданной
c-addr2 u2. Строки сравниваются, начиная с заданных адресов, символ за символом,
до длины наиболее короткой из строк или до нахождения различий. Если две строки
идентичны, n ноль. Если две строки идентичны до длины наиболее короткой из
строк, то n минус единица (-1), если u1 меньше u2, иначе единица (1). Если две
строки не идентичны до длины наиболее короткой из строк, то n минус единица
(-1), если первый несовпадающий символ строки, заданной c-addr1 u1 имеет меньшее
числовое значение, чем соответствующий символ в строке, заданной c-addr2 u2, и
единица в противном случае. ADD EBP, # 0C #### MOV EAX, # -1 MOV EAX, # -1
( c-addr1 u1 c-addr2 u2
-- c-addr3 u3 flag )\n 94 STRING Произвести поиск в строке, заданной c-addr1 u1,
строки, заданной c-addr2 u2. Если флаг "истина", совпадение найдено по адресу
c-addr3 с оставшимися u3 символами. Если флаг "ложь", совпадения не найдено, и
c-addr3 есть c-addr1, и u3 есть u1. во всей строке нет первого символа искомой
строки искомая строка имела длину 1 и найдена остаток строки короче искомой
строки нашли полное совпадение MOV EAX, # -1
( c-addr1 c-addr2 u --
)\n 94 STRING Если u больше нуля, копировать u последовательных символов из
пространства данных начиная с адреса c-addr1 в c-addr2, символ за символом,
начиная с младших адресов к старшим. перекрываются ли области данных? если нет,
то можно копировать DWORD если выровняем на 4, то копируется в 3 раза быстрее
нечего выравнивать вот здесь хорошо бы в MMX копировать
( c-addr1 c-addr2 u --
)\n 94 STRING Если u больше нуля, копировать u последовательных символов из
пространства данных начиная с адреса c-addr1 в c-addr2, символ за символом,
начиная со старших адресов к младшим.
( c-addr u char -- )\n 94
Если u больше нуля, заслать char в u байтов по адресу c-addr. можем ли заполнять
DWORD? низя сформируем DWORD
( c-addr -- c-addr u
)\n
( A -> )\n
( A -> )\n
( -> A )\n
( -- RP )\n
( x -- )\n указатель
локального пула потока
( -- x )\n
( addr -- x )\n
( x addr -- )\n
\n 94 Интерпретация:
семантика неопределена. Выполнение: ( -- n|u ) ( R: loop-sys -- loop-sys ) n|u -
копия параметра следующего объемлющего цикла. Неоднозначная ситуация возникает,
если параметр недоступен.
\n MOV EDX , # 80000000
FOR OPT PUSH EDX PUSH EBX
\n SIF 0= STHEN MOV EBX ,
# 80000000 80000000h-to 80000000H-to+from
\n
\n
\n 94
\n 94
\n
\n
( i*x xt -- j*x )\n
94 Убрать xt со стека и выполнить заданную им семантику. Другие изменения на
стеке определяются словом, которое выполняется.
( x1 ... xn n*4 -- )\n
перенести n чисел со стека данных на стек возвратов адрес возврата
( R: x1 ... xn n -- D: x1
... xn n )\n Перенести n чисел со стека возвратов на стек данных Если n=0
возвратить 0 адрес возврата
( D: x1 ... xn n -- R: x1
... xn n )\n перенести n чисел со стека данных на стек возвратов адрес возврата
( D: i*x i -- D: i*x i
R: i*x i )\n скопировать n чисел со стека данных на стек возвратов адрес
возврата
( offs -- x )\n взять
число со смещением offs байт от вершины стека возвратов (0 RP+@ == RP@) MOV EAX,
4 [EAX] [ESP]
( offs -- addr )\n взять
адрес со смещением offs байт от вершины стека возвратов LEA EAX, 4 [EAX] [ESP]
( x offs -- )\n записать
число x по смещению offs байт от вершины стека возвратов MOV 4 [ESP] [EAX], EBX
( n -- addr )\n
зарезервировать n ячеек на стеке возвратов, сделаем с инициализацией (а то если
больше 8К выделим, exception может)
( n -- )\n
зарезервировать n ячеек на стеке возвратов
( n -- )\n вернуть n
ячеек стека возвратов
( -- )\n вернуть
память в стек вовратов, число байт лежит на стеке
( -- tlo thi )\n Только
для Intel Pentium и выше!!! Возвратить значение таймера процессора как ud
( D: j*x u R: i*x i
-- i*x u )\n Вспомогательное слово для восстановления значений, сохраненных
перед CATCH на стеке возвратов
( {4*params ret_addr}
-- 4*params R: ret_addr ebp )\n 09.09.2002 отодвинуть стек возвратов и сохранить
EBP на стеке возвратов. необходимо при ручном кодировании входа в callback, т.к.
комбинация SP@ >R портит слово по адресу EBP, а оно может быть нужно
вызывающей процедуре :) адрес возврата из ENTER адрес возврата из
CALLBACK/WNDPROC
\n
\n
\n *
\n
\n
\n
\n
\n
\n
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n
\n
\n
\n
\n * DE C9
\n DE C1
\n DE E9
\n DE F9
\n
\n *
\n *
\n *
\n
\n *
\n *
\n *
\n *
\n *
\n
\n
\n
( F: f -- D: u )\n
( D: f -- F: f )\n
( F: f -- D: f )\n
( D: f -- F: f )\n
\n
\n
\n
\n *
\n *
( F: r1 -- r2 )\n *
\n normalize set rounding
mode to truncate get integer and fractional parts exponentiate fraction scale in
integral part clean up
\n
\n *
\n *
\n *
\n
\n *
\n
\n
\n
\n
( u -- )\n
( -- u )\n *
\n *
\n *
\n *
\n
( F: r1 -- r2 )\n
\n * \ исп 2 регистра
\n *
\n *
\n
\n
\n *
\n
\n *
\n *
( addr -- )\n
( addr -- )\n
( addr -- )\n
( addr -- )\n
\n *
\n
\n
\n
\n
\n
\n
\n
( n1 n2 n3 -- n4 )\n 94 Умножить n1 на n2, получить
промежуточный двойной результат d. Разделить d на n3, получить частное n4.
( c-addr1 -- c-addr2 )\n 94 Прибавить размер
символа к c-addr1 и получить c-addr2.
( c-addr1 -- c-addr2 )\n 94 Вычесть размер
символа из c-addr1 и получить c-addr2.
( n1 -- n2 )\n 94 n2 - размер n1 символов.
( n1 -- n2 )\n "to-chars" n2 - число символов в
n1
( n1 -- n2 )\n "to-cells"
[http://forth.sourceforge.net/word/to-cells/index.html] Convert n1, the number
of bytes, to n2, the corresponding number of cells. If n1 does not correspond to
a whole number of cells, the rounding direction is system-defined.
( addr1 addr2 u -- )\n 94 Если u больше нуля,
копировать содержимое u байт из addr1 в addr2. После MOVE в u байтах по адресу
addr2 содержится в точности то же, что было в u байтах по адресу addr1 до
копирования. назначение попадает в диапазон источника или левее И НЕ левее
( addr u -- )\n 94 CORE EXT Если u больше нуля,
очистить все биты каждого из u байт памяти, начиная с адреса addr.
( d -- ud )\n 94 DOUBLE ud абсолютная величина d.
( addr u u1 -- u2 )\n
\n в EAX структура
WINAPI: MOV EAX, AddrOfLoadLibrary MOV EAX, AddrOfGetProcAddress здесь нам уже
дела нет до EAX can't find a proc can't find a library
( ... extern-addr -- x
)\n вызов внешней функции (API или метода объекта через COM)
\n чего-то не
нашли call ret
\n сохраненный
EBP адрес возврата из CALLBACK
\n
( n -- )\n выровняем в USER-CREATE ~day
USER-OFFS @ + \ с начала прибавляем CELL 1- + [ CELL NEGATE ] LITERAL AND \
потом выравниваем USER-OFFS !
( -- n )\n
( heap-id -- )\n
( -- )\n Создать хип текущего потока.
( -- )\n Создать хип процесса MSDN
recommends using serialization for process heap Heap returned by GetProcessHeap
caused problems with forth GUI and we want to completely control our process
heap
( -- )\n Уничтожить хип текущего потока
или процесса
( u -- a-addr ior )\n 94 MEMORY Распределить u
байт непрерывного пространства данных. Указатель пространства данных не
изменяется этой операцией. Первоначальное содержимое выделенного участка памяти
неопределено. Если распределение успешно, a-addr - выровненный адрес начала
распределенной области и ior ноль. Если операция не прошла, a-addr не
представляет правильный адрес и ior - зависящий от реализации код ввода-вывода.
SPF: ALLOCATE выделяет одну лишнюю ячейку перед областью данных для "служебных
целей" (например, хранения класса созданного объекта) по умолчанию заполняется
адресом тела процедуры, вызвавшей ALLOCATE
( a-addr -- ior )\n 94 MEMORY Вернуть непрерывную
область пространства данных, индицируемую a-addr, системе для дальнейшего
распределения. a-addr должен индицировать область пространства данных, которая
ранее была получена по ALLOCATE или RESIZE. Указатель пространства данных не
изменяется данной операцией. Если операция успешна, ior ноль. Если операция не
прошла, ior - зависящий от реализации код ввода-вывода.
( a-addr1 u -- a-addr2 ior )\n 94 MEMORY
Изменить распределение непрерывного пространства данных, начинающегося с адреса
a-addr1, ранее распределенного по ALLOCATE или RESIZE, на u байт. u может быть
больше или меньше, чем текущий размер области. Указатель пространства данных не
изменяется данной операцией. Если операция успешна, a-addr2 - выровненный адрес
начала u байт распределенной памяти и ior ноль. a-addr2 может, но не должен,
быть тем же самым, что и a-addr1. Если они неодинаковы, значения, содержащиеся в
области a-addr1, копируются в a-addr2 в количестве минимального из размеров этих
двух областей. Если они одинаковы, значения, содержащиеся в области, сохраняются
до минимального из u или первоначального размера. Если a-addr2 не тот же, что и
a-addr1, область памяти по a-addr1 возвращается системе согласно операции FREE.
Если операция не прошла, a-addr2 равен a-addr1, область памяти a-addr1 не
изменяется, и ior - зависящий от реализации код ввода-вывода.
( k*x n -- k*x | i*x n )\n 94 EXCEPTION Если
любые биты n ненулевые, взять верхний кадр исключений со стека исключений,
включая все на стеке возвратов над этим кадром. Затем восстановить спецификации
входного потока, который использовался перед соответствующим CATCH, и установить
глубины всех стеков, определенных в этом Стандарте, в то состояние, которое было
сохранено в кадре исключений (i - это то же число, что и i во входных аргументах
соответствующего CATCH), положить n на вершину стека данных и передать
управление в точку сразу после CATCH, которое положило этот кадр исключений.
Если вершина стека не ноль, и на стеке исключений есть кадр исключений, то
поведение следующее: Если n=-1, выполнить функцию ABORT (версию ABORT из слов
CORE), не выводя сообщений. Если n=-2, выполнить функцию ABORT" (версию ABORT"
из слов CORE), выводя символы ccc, ассоциированные с ABORT", генерирующим THROW.
Иначе система может вывести на дисплей зависящее от реализации сообщение об
условии, соответствующем THROW с кодом n. Затем система выполнит функцию ABORT
(версию ABORT из CORE). broken pipe - обычно не ошибка, а конец входного потока
в CGI
( i*x xt -- j*x 0 | i*x n )\n 94 EXCEPTION
Положить на стек исключений кадр перехвата исключительных ситуаций и выполнить
токен xt (как по EXECUTE) таким образом, чтобы управление могло быть передано в
точку сразу после CATCH, если во время выполнения xt выполняется THROW. Если
выполнение xt заканчивается нормально (т.е. кадр исключений, положенный на стек
словом CATCH не был взят выполнением THROW), взять кадр исключений и вернуть
ноль на вершину стека данных, остальные элементы стека возвращаются xt EXECUTE.
Иначе остаток семантики выполнения дается THROW.
\n 94 EXCEPTION EXT Расширить сематику CORE ABORT
чтобы было: Выполнить функцию -1 THROW
( DispatcherContext ContextRecord
EstablisherFrame ExceptionRecord -- flag )\n фрейм для стека данных адрес нашего
фрейма обработки исключений под новым виндовым фреймом восстанавливаем его чтобы
продолжать ловить exceptions в будущем указатель на USER-данные сбойнувшего
потока 2DROP 2DROP 0 (LEAVE) \ это если нужно передать обработку выше исключение
в потоке, без CATCH, выдаем отчет и завершаем (~day) если float исключение,
восстанавливаем превращаем исключение в родное фортовое :) если все же
добрались, то грамотно выходим из callback
\n
\n самоубираемый фрейм ловли
аппаратн.исключения
( -- )\n
( -- )\n
( ERRNUM -> )\n выход с кодом ошибки
( fileid -- ior )\n 94 FILE Закрыть файл,
заданный fileid. ior - определенный реализацией код результата ввода/вывода.
( c-addr u fam -- fileid ior )\n 94 FILE
Создать файл с именем, заданным c-addr u, и открыть его в соответствии с методом
доступа fam. Смысл значения fam определен реализацией. Если файл с таким именем
уже существует, создать его заново как пустой файл. Если файл был успешно создан
и открыт, ior нуль, fileid его идентификатор, и указатель чтения/записи
установлен на начало файла. Иначе ior - определенный реализацией код результата
ввода/вывода, и fileid неопределен.
( c-addr u fam -- fileid ior )\n
( c-addr u fam -- fileid ior )\n
( c-addr u -- ior )\n 94 FILE Удалить файл
с именем, заданным строкой c-addr u. ior - определенный реализацией код
результата ввода/вывода.
( fileid -- ud ior )\n 94 FILE ud -
текущая позиция в файле, идентифицируемом fileid. ior - определенный реализацией
код результата ввода/вывода. ud неопределен, если ior не ноль.
( fileid -- ud ior )\n 94 FILE ud - размер в
символах файла, идентифицируемом fileid. ior - определенный реализацией код
результата ввода/вывода. Эта операция не влияет на значение, возвращаемое
FILE-POSITION. ud неопределен, если ior не ноль.
( c-addr u fam -- fileid ior )\n 94 FILE
Открыть файл с именем, заданным строкой c-addr u, с методом доступа fam. Смысл
значения fam определен реализацией. Если файл успешно открыт, ior ноль, fileid
его идентификатор, и файл позиционирован на начало. Иначе ior - определенный
реализацией код результата ввода/вывода, и fileid неопределен.
( c-addr u1 fileid -- u2 ior )\n 94 FILE
Прочесть u1 символов в c-addr из текущей позиции файла, идентифицируемого
fileid. Если u1 символов прочитано без исключений, ior ноль и u2 равен u1. Если
конец файла достигнут до прочтения u1 символов, ior ноль и u2 - количество
реально прочитанных символов. Если операция производится когда значение,
возвращаемое FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла
идентифицируемого fileid, ior и u2 нули. Если возникла исключительная ситуация,
то ior - определенный реализацией код результата ввода/вывода, и u2 - количество
нормально переданных в c-addr символов. Неопределенная ситуация возникает, если
операция выполняется, когда значение, возвращаемое FILE-POSITION больше чем
значение, возвращаемое FILE-SIZE для файла, идентифицируемого fileid, или
требуемая операция пытается прочесть незаписанную часть файла. После завершения
операции FILE-POSITION возвратит следующую позицию в файле после последнего
прочитанного символа.
( ud fileid -- ior )\n 94 FILE
Перепозиционировать файл, идентифицируемый fileid, на ud. ior - определенный
реализацией код результата ввода-вывода. Неопределенная ситуация возникает, если
позиционируется вне его границ. После завершения операции FILE-POSITION
возвращает значение ud.
( -- )\n
( -- )\n
( c-addr u1 fileid -- u2 flag ior )\n 94 FILE
Прочесть следующую строку из файла, заданного fileid, в память по адресу c-addr.
Читается не больше u1 символов. До двух определенных реализацией символов "конец
строки" могут быть прочитаны в память за концом строки, но не включены в счетчик
u2. Буфер строки c-addr должен иметь размер как минимум u1+2 символа. Если
операция успешна, flag "истина" и ior ноль. Если конец строки получен до того
как прочитаны u1 символов, то u2 - число реально прочитанных символов
(0<=u2<=u1), не считая символов "конец строки". Когда u1=u2 конец строки
уже получен. Если операция производится, когда значение, возвращаемое
FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла,
идентифицируемого fileid, flag "ложь", ior ноль, и u2 ноль. Если ior не ноль, то
произошла исключительная ситуация и ior - определенный реализацией код
результата ввода-вывода. Неопределенная ситуация возникает, если операция
выполняется, когда значение, возвращаемое FILE-POSITION больше чем значение,
возвращаемое FILE-SIZE для файла, идентифицируемого fileid, или требуемая
операция пытается прочесть незаписанную часть файла. После завершения операции
FILE-POSITION возвратит следующую позицию в файле после последнего прочитанного
символа. были в конце файла найден разделитель строк не найден разделитель строк
если строка прочитана не полностью - будет разрезана
( c-addr u fileid -- ior )\n 94 FILE
Записать u символов из c-addr в файл, идентифицируемый fileid, в текущую
позицию. ior - определенный реализацией код результата ввода-вывода. После
завершения операции FILE-POSITION возвращает следующую позицию в файле за
последним записанным в файл символом, и FILE-SIZE возвращает значение большее
или равное значению, возвращаемому FILE-POSITION.
( ud fileid -- ior )\n 94 FILE Установить
размер файла, идентифицируемого fileid, равным ud. ior - определенный
реализацией код результата ввода-вывода. Если результирующий файл становится
больше, чем до операции, часть файла, добавляемая в результате операции, может
быть не записана. После завершения операции FILE-SIZE возвращает значение ud и
FILE-POSITION возвращает неопределенное значение.
( c-addr u fileid -- ior )\n 94 FILE
Записать u символов от c-addr с последующим зависящим от реализации концом
строки в файл, идентифицируемый fileid, начиная с текущей позиции. ior -
определенный реализацией код результата ввода-вывода. После завершения операции
FILE-POSITION возвращает следующую позицию в файле за последним записанным в
файл символом, и FILE-SIZE возвращает значение большее или равное значению,
возвращаемому FILE-POSITION.
( fileid -- ior )\n 94 FILE EXT
( addr u -- f )\n
\n Закончить лог.
( -- )\n Создать файл spf.log. Начать лог
ввода/вывода. Если лог уже открыт, очистить и начать заново
( addr u -- )\n копирует входящую строку в лог
файл
( c-addr +n1 -- +n2 )\n 94 Ввести строку
максимальной длины до +n1 символов. Исключительная ситуация возникает, если +n1
0 или больше 32767. Отображать символы по мере ввода. Ввод прерывается, когда
получен символ "конец строки". Ничего не добавляется в строку. +n2 - длина
строки, записанной по адресу c-addr. Если ввод с user-device записать cr в лог,
то есть нажали Enter
( c-addr u -- )\n 94 Если u>0 - вывести строку
символов, заданную c-addr и u. Программы, использующие управляющие символы,
зависят от окружения.
( x -- )\n 94 Если x - изображаемый символ,
вывести его на дисплей. Программы, использующие управляющие символы, зависят от
окружения.
( -- )\n 94 Перевод строки.
( -- flag )\n 93 FACILITY EXT Если клавиатурное
событие доступно, вернуть "истина". Иначе "ложь". Событие должно быть возвращено
следующим выполнением EKEY. После того как EKEY? возвратило значение "истина",
следующие выполнения EKEY? до выполнения KEY, KEY? или EKEY также возвращают
"истину", относящуюся к тому же событию.
( -- u )\n вернуть маску управляющих
клавиш для последнего клавиатурного события.
( -- u )\n 93 FACILITY EXT Принять одно
клавиатурное событие u. Кодирование клавиатурных событий зависит от реализации.
В данной реализации byte value 0 AsciiChar 2 ScanCod 3 KeyDownFlag 1 заменен на
2 (30.12.2001 ~boa)
( u -- u false | char true )\n 93 FACILITY
EXT Если клавиатурное событие u соответствует символу - вернуть символ и
"истину". Иначе u и "ложь".
( u -- scan flag )\n вернуть скан-код
клавиши, соответствующей клавиатурному событию u flag=true - клавиша нажата.
flag=false - отпущена.
( -- )\n 94 Вывести на экран один пробел.
( n -- )\n 94 Если n>0 - вывести на дисплей n
пробелов.
( -- flag )\n 94 FACILITY Если символ доступен,
вернуть "истину". Иначе "ложь". Если несимвольное клавиатурное событие доступно,
оно отбрасывается и больше недоступно. Символ будет возвращен следующим
выполнением KEY. После того как KEY? возвратило значение "истина", следующие
выполнения KEY? до выполнения KEY или EKEY также возвращают "истину" без
отбрасывания клавиатурных событий.
( -- char )\n 94 Принять один символ char.
Клавиатурные события, не соответствующие символам, отбрасываются и более не
доступны. Могут быть приняты все стандартные символы. Символы, принимаемые по
KEY, не отображаются на дисплее. Программы, требующие возможность получения
управляющих символов, зависят от окружения.
( -- )\n 94 CORE EXT Установить содержимое BASE
равным шестнадцати.
( -- )\n 94 Установить основание системы
счисления равным десяти.
( char -- )\n 94 Добавить char к началу форматной
числовой строки. Исключительная ситуация возникает, если использовать HOLD вне
<# и #>, ограничивающивающих преобразование чисел.
( addr u -- )\n from eserv src
( -- )\n 94 Начать форматное преобразование чисел.
( ud1 -- ud2 )\n 94 Делением ud1 на значение BASE
выделить одну цифру с конца и добавить ее в буфер форматного преобразования
чисел, оставив частное ud2. Исключительная ситуация возникает, если использовать
# вне <# и #>, ограничивающивающих преобразование чисел.
( ud1 -- ud2 )\n 94 Выделять цифры D1 по слову # до
получения нуля. ud2 - ноль. Исключительная ситуация возникает, если использовать
#S вне <# и #>, ограничивающивающих преобразование чисел.
( xd -- c-addr u )\n 94 Убрать xd. Сделать буфер
форматного преобразования доступным в виде строки символов, заданной c-addr и u.
Программа может менять символы в этой строке.
( n -- )\n 94 Если n отрицательно, добавить в
строку форматного преобразования чисел минус. Исключительная ситуация возникает,
если использовать SIGN вне <# и #>, ограничивающивающих преобразование
чисел.
( d -- addr len )\n
( d -- )\n 94 DOUBLE Вывести d на дисплей в
свободном формате.
( n -- )\n 94 Напечатать n в свободном формате.
( u -- )\n 94 Напечатать u в свободном формате.
\n
( n -- )\n Напечатать n в свободном формате в
лог-файл
\n
\n
( addr u -- )\n 94 TOOLS
( T -> )\n
( ud1 c-addr1 u1 -- ud2 c-addr2 u2 )\n 94 ud2 -
результат преобразования символов строки, заданной c-addr1 u1, в цифры,
используя число в BASE, и добавлением каждой к ud1 после умножения ud1 на число
в BASE. Преобразование продолжается слева направо до первого непреобразуемого
символа, включая символы "+" и "-", или до полного преобразования строки.
c-addr2 - адрес первого непреобразумого символа или первого символа за концом
строки, если строка была полностью преобразована. u2 - число непреобразованных
символов в строке. Неоднозначная ситуация возникает, если ud2 переполняется во
время преобразования. ud n flag ud n ( ud = udh udl ) udl n udh*base (n
udh*base)+(udl*baseD)
( addr n -- n1 )\n экранная-длина дать
длину строки при выводе (при печати) - число знакомест, которое строка займет на
экране. addr n - строка. n1 число знакомест на экран.
( c -- flag )\n
( a u -- a u1 )\n из строки "path\name"
выделить строку "path\" DUP 0! \ ~ruv (to anfilat): не дОлжно тут затирать
поданный буфер!
( -- addr u )\n
( -- addr u )\n
( addr u -- addr2 u2 )\n
( addr u -- addr2 u2 )\n Добавить addr
u к полный_путь_приложения+devel\
( -- a u )\n
( -- c-addr u )\n 94 c-addr - адрес входного
буфера. u - количество символов в нем.
( c-addr u -- )\n установить c-addr u входным
буфером (точнее, областью разбора - PARSE-AREA)
( -- flag )\n >IN не меньше, чем длина
чанка
( -- c-addr )\n
( -- char )\n символ из текущего значения
>IN
( char -- flag )\n
( -- char flag )\n
( -- flag )\n
( -- )\n пропустить пробельные символы
( -- flag )\n
( -- )\n пропустить непробельные символы
( char -- )\n пропустить до символа char
( -- c-addr u )\n
( -- c-addr u )\n это слово теперь будем
использовать в INTERPRET - удобнее: не использует WORD и, соответственно, не
мусорит в HERE; и разделителями считает все что <=BL, в том числе TAB и CRLF
>IN 1+! \ пропустили разделитель за словом для совместимости с spf3.16
\n
( char "ccc<char>" -- c-addr u )\n 94 CORE
EXT Выделить ccc, ограниченное символом char. c-addr - адрес (внутри входного
буфера), и u - длина выделенной строки. Если разбираемая область была пуста,
результирующая строка имеет нулевую длину.
( char "ccc<char>" -- )\n Пропустить
разделители char.
\n это временно, конфликт с
http://www.forth.org.ru/~mlg/mirror/home.earthlink.net/~neilbawd/toolbelt.html#SKIP
( addr u -- addr+1 u-1 )\n
\n 0 TO SOURCE-ID ~day На случай печати
в GUI приложении запущеным из под Explorer Invalid handle
( u flag -- flag )\n
( -- flag )\n from user input -1002=конец
файла или pipe остальные ошибки - ошибки чтения
( h -- flag )\n
( -- flag )\n 94 FILE EXT
( -- flag )\n
( wid -- )\n 94 SEARCH Установить список
компиляции на список, идентифицируемый wid.
( -- wid )\n 94 SEARCH Возвращает wid -
идентификатор списка компиляции.
( -- flag )\n проверяет, является ли текущий
словарь компиляции временным (внешним)
( -- addr )\n переменная, содержащая HERE сегмента
данных
( n -- )\n 94 Если n больше нуля, зарезервировать
n байт пространства данных. Если n меньше нуля - освободить |n| байт
пространства данных. Если n ноль, оставить указатель пространства данных
неизменным. Если перед выполнением ALLOT указатель пространства данных выровнен
и n кратно размеру ячейки, он остается выровненным и после ALLOT. Если перед
выполнением ALLOT указатель пространства данных выровнен на границу символа и n
кратно размеру символа, он остается выровненным на границу символа и после
ALLOT.
( x -- )\n 94 Зарезервировать одну ячейку в области
данных и поместить x в эту ячейку.
( char -- )\n 94 Зарезервировать место для символа в
области данных и поместить туда char.
( word -- )\n Зарезервировать место для word в
области данных и поместить туда char.
( ADDR -- ADDR' )\n
\n
\n
( -- )\n
( OPn -- )\n
\n
\n
\n
\n
( -- )\n DP @ UMIN
\n
( n -- -129 < n < 128 )\n
\n 1000 DTST LEA EAX, OFF-EBP [EAX] 1001 DTST
\n LEA ebp, OFF-EBP [EBP]
( C -- )\n
( W -- FLAG )\n ADD EAX, X2 [EBP] OR
AND XOR
( W -- W FLAG )\n 010X.X101 00XX.X0XX
ADD|OR|ADC|SBB|AND|SUB|XOR|CMP _L | E_X | X [EBP] , _L | E_X | X [EBP] 010X.X101
1000.10X1 MOV X [EBP], E(ABCD)X | E(ABCD)X , X [EBP] DUP 5503 <> IF \ ADD
EDX , 0 [EBP] FLD | FSTP EXTENDED 0 [EBP] FILD DWORD FC [EBP] MUL X [EBP] IMUL X
[EBP] XCHG EAX , X [EBP]
( W -- W FLAG )\n 11XX.X000 1000.0011
ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X MOV EAX, X [EDI] MOV EBX, X [EAX] MOV
EDX, X [EAX] LEA EBX, X [EAX] LEA EDX, X [EAX] MOV X [EAX], EDX SAR EAX, # X SHL
EAX, # X SHR EAX, # X LEA EAX , X [EAX] MOV EAX , X [EAX]
( W -- W FLAG )\n ADD|OR|ADC|SBB|AND|SUB|XOR|CMP
E_X , E_X DUP 01801 <> IF \ ADD [EAX], EBX ADD [EAX], EDX ADD EAX, [EAX]
TEST E__ , E__ 110X.X0XX 1000.10X1 MOV E(ABCD)X , E(ABCD)X | (ABCD)L , (ABCD)L
00XX.X0XX 1000.100X MOV [E(ABCD)X] , E(ABCD)X | (ABCD)(HL) MOV EAX, [EAX] MOV
EAX, [EDX] MOV EAX, EDI MOV EDI, EAX MOV ECX , EAX MOV EDX , ECX 111X.X0XX
1101.00XX S(AH)(LR) (ABCD)L | E(ABCD)X, CL | 1 FFREE ST FLD ST(X) | FXCH ST(X)
1100.XXXX.1101.1001 FCHS|FABS|FTST|FXAM 1110.0X0X.1101.1001 FLD1 FLDL2T FLDL2E
FLDPI FLDLG2 FLDLN2 FLDZ ??? 1110.1XXX.1101.1001 F2XM1 FYL2X FPTAN FPATAN
1111.XXXX.1101.1001 \ FXTRACT FPREM1 FDECSTP FINCSTP FPREM FYL2XP1 FSQRT FSINCOS
FRNDINT FSCALE FSIN FCOS FLD EXTENDED [E_X] | FST EXTENDED [E_X]
001X.0XXX.1101.1011 FLD DOUBLE [E_X] | FST DOUBLE [E_X] 000X.0XXX.1101.1101
FADDP ST(X) | FMULP ST(X) FSUBRP ST(X) | FSUBP ST(X) 111X.XXXX.1101.1110 \
FDIVRP ST(X) | FDIVP ST(X) INC [EAX] DUP 0C0FF <> IF \ INC EAX DUP 0C3FF
<> IF \ INC EBX DUP 0C8FF <> IF \ DEC EAX NOT EAX NOT ECX NEG EAX
NEG ECX NEG EDX IMUL ECX DIV ECX IDIV ECX
( W -- W FLAG )\n X00X.X101 1000.10X1 MOV X
{[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]} ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
ADD X , EAX ADD EAX, X CMP EAX, X CMP EAX, X [EDI] XOR EDX , # 80000000 LEA EDX
, [EDX+80000000H] DUP 0589 <> IF \ MOV X , EAX DUP 058B <> IF \ MOV
EAX, X MOV EAX, X [EAX] LEA EAX, X [EAX] MOV EAX, X [EDI] MOV EAX, X [EDI] LEA
EAX, X [EDI] MOV [EAX], # X INC X DUP FCFF AND C0C7 <> IF \ MOV
EAX|EBX|ECX|EDX, # X
( C -- C FLAG )\n ADD|OR|ADC|SBB|AND|SUB|XOR|CMP
EAX, # X MOV EAX|EBX|ECX|EDX, # X MOV EAX, X | X , EAX
( N -- N FLAG )\n XX00.0101 0000.0100 1000.10X1
MOV X [EAX*_] , EAX | MOV EAX , X [EAX*_] XX00.0101 0000.0100 1000.1X01 MOV X
[EAX*_] , EAX | LEA EAX , X [EAX*_] MOVZX EAX, BYTE PTR [EAX]
( ADDR -- FALSE | TRUE )\n MOV EAX, # X MOV EAX,
X DUP ADD|XOR|OR|AND= 0= IF XOR EAX, EAX XOR EAX, EAX MOV EAX, EBX MOV EAX, ___
LEA EAX, ___
( ADDR -- FALSE | TRUE )\n FALSE LEA MOV MOV
EAX, MOV EAX, EDX MOV EAX, EBX MOV EAX, [ESP] MOV EAX, X [ESP] 8B0495F0065A00
MOV EAX , 5A06F0 [EDX*4]
( OP - n )\n
( OPX -- )\n
( OPX -- OPX flag )\n
( OPX -- OPX+CELL FALSE | { OPX | FALSE } TRUE
)\n Џа®ўҐаЄ Ґ Ё§¬ҐҐЁҐ EAX CMP EAX, # X CMP E_X
, X MOV X , EAX MOV ECX , # X MOV EDX , # X MOV EBX , # X PUSH EAX MOV 4444 , #
5555 MOV [EAX] , DL MOV 4 [EBP] , ECX MOV EDX , FC [EBP] MOV ECX , FC [E__]
[E__] LEA ESP , 8 [ESP] INC 0 [ESP] OR EAX, EAX OR EDX, EAX SUB EDX, EAX ADD
[E_X] CMP X [EBP], # Z \ CMP 44444, # 55555
( OPX - FLAG )\n 8B0424 MOV EAX , [ESP]
8B4500 MOV EAX , 0 [EBP] OPX N F MOV FC [EBP] , EAX C1E819 SHR EAX , 19 8D41FF
LEA EAX , FF [ECX] 8D40FF LEA EAX , FF [EAX] 8D873C100000 LEA EAX , 103C [EDI]
F7D0 NOT EAX F7D8 NEG EAX 23C1 AND EAX , ECX XOR EAX , EAX 8D8024475A00 LEA EAX
, 5A4724 [EAX] MOV ECX , [EAX] 0BC0 OR EAX , EAX 8D4820 LEA ECX , 20 [EAX] D3E0
SHL EAX , CL A1047A5800 MOV EAX , 587A04 58 POP EAX B907000000 MOV ECX , # 7
( OPX - OPX' FALSE | FLAG TRUE )\n MOV
EAX , 4 [EDX] [EAX*4] MOV 59C2E4 [EAX*4] , EDX MOV ECX , EDX OPX N F
( OPX n -- )\n
( OPX n -- )\n
( FLAG -- )\n
( -- )\n
( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE
TRUE )\n TTTT 0= IF DROP FALSE TRUE EXIT THEN ." $=" DUP @ @ U. TTTT IF HEX DUP
@ U. THEN DROP FALSE TRUE EXIT OPX N F MOV FC [EBP] , EAX OPX N F MOV EAX , FC
[EBP] ." $=" DUP @ U. CMP ECX , [EAX] CMP ECX , EAX CMP EAX , ECX MOV EDX , 4
[EAX] MOV ECX , [EAX] MOV ECX , [ECX] MOV ECX , EAX MOV [EAX] , ECX MOV [EAX] ,
EDX MOV 4 [EAX] , ECX LEA EAX , 1 [EAX] LEA EAX , 1 [EAX] MOV EAX , [EAX] TTTT
IF HEX ." M=" DUP U. THEN MOV EAX , ECX NEG EAX MOV ECX , [ESP] MOV X [ECX*4] ,
EAX MOV EAX , [ESP] SUB EAX , 4 [ESP] TTTT IF HEX ." N=" 2DUP U. U. THEN MOV ECX
, [EBP] MOV [EBP] , EDX
( OPX - OPX' FLAG )\n TTTT IF 1 EMIT DUP U.
DUP @ U. THEN MOV EDX , [EAX+4] MOV ECX , [EAX] MOV ECX , [ECX] MOV ECX , [EBP]
MOV 0 [EBP] , EDX MOV ECX , EAX MOV [EAX] , ECX MOV [EAX] , EDX MOV 4 [EAX] ,
ECX LEA EAX , 1 [EAX] LEA EAX , 1 [EAX] MOV EAX , [EAX] MOV EAX , ECX MOV EAX ,
[EBP+X] NEG EAX MOV X [ECX*4] , EAX MOV EAX , [ESP] MOV ECX , [ESP] BASE @ >R
HEX DUP U. R> BASE ! CMP
( OPX - OPX' FLAG )\n ." #=" DUP U. MOV EDX ,
[EAX+4] CMP ECX , [EAX] CMP ECX , EAX CMP EAX , ECX MOV ECX , [EAX] MOV EAX ,
[EBP+X] MOV ECX , [ECX] MOV ECX , [EBP] MOV 0 [EBP] , EDX MOV ECX , EAX MOV
[EAX] , ECX MOV [EAX] , EDX MOV 4 [EAX] , ECX OPX N F MOV FC [EBP] , EAX LEA EAX
, 1 [EAX] LEA EAX , X [EAX] MOV EAX , [EAX] MOV EAX , ECX NEG EAX MOV X [ECX*4]
, EAX MOV EAX , [ESP] MOV ECX , [ESP] SUB EAX , [ESP+4]
( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE
TRUE )\n ZZZZ 0= IF DROP FALSE TRUE EXIT THEN DROP FALSE TRUE EXIT TTTT IF HEX
DUP @ U. THEN OPX N F MOV FC [EBP] , EAX OPX N F MOV EAX , FC [EBP] OPX N F MOV
FC [EBP] , EDX 8B00 MOV EAX , [EAX] 3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 )
MOV EAX , [EDX] MOV EAX , [EAX] LEA EAX , 1 [EAX] MOV EAX , 1 [EAX] LEA EAX , 1
[EDX] DUP 808D <> \ LEA EAX , X [EAX] IF MOV EAX , EDX OR EAX , EAX SBB
EAX , EAX SAR EAX , 1 SHR EAX , 1 NEG EAX NOT EAX NOT EAX ADD EAX , 0 [EBP] AND
EAX , 587744 ( D+5 ) SHL EAX , 7 AND EAX , EDX MOV EDX , [EAX+4] CMP EAX ,
5474E3 ( :-SET+5 ) CMP EDX , [EAX] OPX N F MOV F8 [EBP] , EDX MOV EDX , 587A88
MOV EDX , EAX MOV ADD 555555 , EAX MOV C [EAX] , EDX MOV [EAX] , EDX MOV BYTE
[EAX] , # X MOV FC [EBP] , # 1 PUSH EAX MOV 1000 , EAX MOV EAX , # 1000 MOV EAX
, 1000 AND EAX , # X MOV EDX , # 1000 CMP EAX , # 1000 MOVZX EAX , BYTE PTR 2
[EDX] [EAX] LEA EAX , 0 [EAX*4] MOV EAX , X [EAX*4] MOVZX EAX , BYTE PTR X [EAX]
MOV EAX , 4 [EDX] [EAX*4] MOV EAX , [ESP] MOV EAX , [ESP+4] SUB EAX , [ESP+4]
CMP EAX , [ESP] CMP EAX , 20 [ESP] MOV EDX , C [ESP]
( OPX - OPX' FLAG )\n OPX N F ADD [444444H] ,
EAX MOV X [EBP] , EDX MOV EAX , ___ MOV EAX , EDX LEA EAX , 1 [EAX] LEA EAX , 1
[EAX] MOV EAX , 1 [EAX] MOV ~EAX , ___ LEA EAX , ___ LEA EAX , 1 [EDX] OR EAX ,
EAX MOV C [EAX] , EDX MOV [EAX] , EDX MOV BYTE [EAX] , # X MOV FC [EBP] , # 1
MOVZX EAX , BYTE PTR 2 [EDX] [EAX] MOVZX EAX , BYTE PTR X [EAX] DUP 24442B = \
SUB EAX , [ESP+4] IF DROP 4C OVER @ 1+ C! CELL- TRUE EXIT THEN PUSH EAX MOV EAX
, # 1000 MOV EDX , # 1000 CMP EAX , # 1000 CMP MOV 1000 , EAX MOV EAX , 1000
( OPX - OPX' F | T )\n 8B00 MOV EAX , [EAX]
3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 ) MOV X [EBP] , EDX MOV EAX , [EDX] MOV
EAX , [EBP+X] MOV EAX , [EAX] MOV EDX , EAX MOV EAX , EDX SHL EAX , 7 AND EAX ,
EDX ADD [444444H] , EAX MOV EDX , [EAX+4] CMP EAX , 5474E3 ( :-SET+5 ) CMP EDX ,
[EAX] CMP EAX , EDX OR EAX , EAX SBB EAX , EAX SAR EAX , 1 SAR EAX , 1 OPX N F
MOV FC [EBP] , EAX MOV C [EAX] , EDX MOV [EAX] , EDX MOV BYTE [EAX] , # X LEA
EAX , 1 [EAX] MOV EAX , 1 [EAX] LEA EAX , 1 [EDX] LEA EAX , 1 [EAX] MOV EAX ,
EDX NEG EAX NOT EAX NOT EAX ADD EAX , 0 [EBP] AND EAX , 587744 ( D+5 ) OPX N F
MOV F8 [EBP] , EDX MOV EDX , 587A88 MOV FC [EBP] , # 1 MOVZX EAX , BYTE PTR 2
[EDX] [EAX] LEA EAX , 0 [EAX*4] MOV EAX , X [EAX*4] MOVZX EAX , BYTE PTR X [EAX]
MOV EAX , 4 [EDX] [EAX*4] MOV EAX , [ESP] MOV EAX , [ESP+4] CMP EAX , [ESP] CMP
EAX , 20 [ESP] MOV EDX , C [ESP] SUB EAX , [ESP+4] PUSH EAX MOV EAX , # 1000 MOV
1000 , EAX MOV EAX , # 1000 AND EAX , # X MOV EDX , # 1000 CMP EAX , # 1000
( n OPX -- n OPX' )\n LEA EBP , X [EBP] CALL
JMP Jx
( FLAG OPX -- FLAG' )\n CALL JMP Jx MOV EAX ,
FC [EBP] [EAX*4] DUP @ 2+ C@ DUP U. OFF-EBP FF AND DUP U. = MOV X [EBP] ,
EAX|EDX|EBX|ECX MOV F8 [EBP] , # 2710 20A DTST ." ^" DUP @ U. :-SET U. \
OPexcise NIP TRUE SWAP CELL-
( FALSE | OPX' TRUE -- ... )\n
( FLAG -- ... )\n TRUE TRUE
( OPX -- OPX- )\n MOV ECX , EAX CELL-
( OPX -- OPX- )\n MOV EBX , EAX CELL-
( -- )\n MOV EAX , ECX
( -- FLAG )\n TTTT AND OPX N F MOV FC [EBP]
, ECX 410 DTST MOV EAX , ECX 40E DTST 40F DTST
( ADDR -- ADDR' FLAG )\n TTTT IF ." T=" 2DUP
HEX U. U. THEN OP1 @ W@ ADD|XOR|OR|AND= OR 0 DTST 1 DTST POP EAX MOV EAX , FC
[EBP] F0 DTST F1 DTST PPPP GOTO OP2> MOV EAX , # 44444 ADD [ESP] , EAX B0E
DTST ADD [ESP] , # B0F DTST PPPP MOV [EAX] , # X C0E DTST MOV 44444 , # X C0F
DTST PPPP 8955FC MOV FC [EBP] , EDX 011544444400 ADD 444444 , EDX 891544444400
MOV 444444 , EDX EAX= C2 DTST C3 DTST LAB: OP2> MOV EAX , X [EBP] ." $" 90E
DTST 90F DTST 80E DTST 80F DTST GOTO OP2 MOV EAX , X [EBP] MOV EAX , X [EBP] MOV
[EAX] , EDX MOV EAX , X [EBP] 8955FC MOV FC [EBP] , EDX 8908 MOV [EAX] , ECX MOV
EAX , X [EBP] X2=X0 11E DTST MOV EAX , EDX 11F DTST $ DUP >R MOV X2 [EBP] ,
EAX PUSH EAX OP0 @ W@ 458B XOR OR \ MOV EAX , X0 [EBP] X2=X0 1E DTST 1F DTST MOV
EDX , # 1000 MOV [EAX] , EDX MOV EAX , FC [EBP] 52 DTST MOV [EAX] , # 1000 53
DTST GOTO OP4 MOV EAX , X [EBP] CR ." XX" 567F5A 894DF8 MOV F8 [EBP] , ECX
567F5D 8910 MOV [EAX] , EDX 567F5F 8B55F8 MOV EDX , F8 [EBP] 567F62 895004 MOV 4
[EAX] , EDX OP0 @ W@ 458B XOR OR \ 567F65 8B45FC MOV EAX , FC [EBP] X0=X2 \
ГРУБО 232 DTST MOV [EAX+4] , ECX 233 DTST L: OP4 MOV EAX , X [EBP] L: OP2 MOV
EAX , X [EBP] MOV EAX , X MOV { EAX , X } | { X ,EAX } F0E DTST DROP TRUE EXIT
." #" F0F DTST PPPP POP EAX TTTT IF ." ?EAX>ECX" THEN 8B0424 MOV ___ , [ESP]
PUSH EAX , X 0= F?EAX>ECX CA DTST \ ." $" DROP TRUE EXIT ?EAX:=ECX CB DTST 50
PUSH EAX 8B0424 MOV EAX , [ESP] E2 DTST E3 DTST 8BD0 MOV EDX , EAX
8B0495F0065A00 MOV EAX , 5A06F0 [EDX*4] 13C DTST MOV EAX , 5982D8 [EAX*4] 13D
DTST 890577770700 MOV 77777 , EAX A177770700 MOV EAX , 77777 150 DTST 151 DTST
PPPP MOV ' VVVV >BODY , EAX MOV EAX, # X 20E DTST 20F DTST XOR EAX , EAX 30E
DTST 30F DTST PPPP MOV EAX , XX \ MOV XX , EAX \ EAX= AND EAX , # ZZ 530 DTST
531 DTST 0 AND \ LEA EAX , FF [EAX] 632 DTST 633 DTST $ 4444 TO VVVV MOV EAX ,
44444 CMP EAX , # 55555 218 DTST CMP 44444 , # 55555 219 DTST OP0 @ C@ 58 = \
POP EAX IF PUSH EAX 444 >R MOV EAX , # 5 1A DTST 1B DTST MOV X [EBP], EAX
EAX= 444 555 MOV EAX , 5 1C DTST 1D DTST THEN PPPP MOV EAX , # 789 MOV ECX , EAX
EAX= 830 DTST 831 DTST LEA EAX , 1448 [EDI] INC [EAX] EAX= 930 DTST 931 DTST LEA
EAX , X [ECX*4] MOV [EAX] , EDX EAX= 5E DTST MOV [44444H+ECX*4], EDX 5F DTST
PPPP MOV EDX , EAX MOV X [ECX*4] , EDX EAX= 60 DTST MOV [44444H+ECX*4], EAX 61
DTST MOV F8 [EBP] , EDX MOV F4 [EBP] , EAX MOV EAX , F8 [EBP] 64 DTST MOV EAX ,
EDX 65 DTST 57DD80 33C0 XOR EAX , EAX 57DD82 8945F8 MOV F8 [EBP] , EAX EAX= 6C
DTST MOV F8 [EBP] , # 0 6D DTST MOV EDX , EAX MOV F8 [EBP] , # X MOV EAX , EDX
6E DTST 6F DTST MOV EDX , # 0 MOV [EAX] , DL EAX= 70 DTST MOV BYTE PTR [EAX] ,
44H 71 DTST LEA EAX , X [EAX] MOV [EAX] , # 0 EAX= 72 DTST 73 DTST 596C15 8BD1
MOV EDX , ECX 596C17 8910 MOV [EAX] , EDX EAX= 72 DTST 73 DTST MOV EAX , 30
[ESP] FF4424 INC DEC 30 [ESP] EAX= 8A DTST 8B DTST MOV EAX , # 1 LEA EBX , [EDX]
[EAX] EAX= AA DTST AB DTST MOV EDX , # 7FFFFFEE LEA EBX , 1 [EDX] EAX= AC DTST
MOV EBX , # AD DTST 8BC2 MOV EAX , EDX 0BC0 OR EAX , EAX 8BC2 MOV EAX , EDX C4
DTST OR EDX , EDX MOV EAX , EDX C5 DTST 58270A 8BD1 MOV EDX , ECX 58270C 8945F8
MOV F8 [EBP] , EAX 58270F 8BC2 MOV EAX , EDX D4 DTST MOV EAX , ECX D5 DTST 8BD0
MOV EDX , EAX 010544440400 ADD 44444 , EAX 890544440400 MOV 44444 , EAX 8B4500
MOV EAX , 0 [EBP] D4 DTST D5 DTST 8BD0 MOV EDX , EAX 891555550500 MOV 55555 ,
EDX E8 DTST MOV 5800E0 , EAX E9 DTST 8D4020 LEA EAX , 20 [EAX] 8BC8 MOV ECX ,
EAX 8B45F8 MOV EAX , F8 [EBP] F2 DTST LEA ECX , 20 [EAX] F3 DTST 587AC6
B919000000 MOV ECX , # 19 EAX= FE DTST FF DTST 8955E8 MOV E8 [EBP] , EDX 8B45E8
MOV EAX , E8 [EBP] BC DTST MOV EAX , EDX BD DTST 8BD0 MOV EDX , EAX 88973C100000
MOV 103C [EDI] , DL EAX= 112 DTST MOV 103C [EDI] , AL 113 DTST 50 PUSH EAX
8945FC MOV FC [EBP] , EAX 8B0424 MOV EAX , [ESP] 164 DTST 165 DTST PPPP $ SWAP
4444 MOV EAX , EDX MOV X [EBP] , EAX 60E DTST MOV X [EBP] , EDX 60F DTST MOV EAX
, ESP LEA EAX , 8 [EAX] MOV ESP , EAX 8A DTST LEA ESP , 8 [ESP] 8B DTST 581B54
8BC8 MOV ECX , EAX OP3 @ W@ C88B XOR OR \ 587733 8BC8 MOV ECX , EAX 587735
8D4201 LEA EAX , 1 [EDX] 587738 894500 MOV 0 [EBP] , EAX 58773B 8BC1 MOV EAX ,
ECX 142 DTST LEA EDX , 1 [EDX] MOV 0 [EBP] , EDX 143 DTST GOTO 5SET 581B4C 8BC1
MOV EAX , ECX 581B4E 0F8400000000 JE 581B54 ( zz+14 ) B0 DTST B1 DTST 5SET: F7D8
NEG EAX 03C1 ADD EAX , ECX 894500 MOV 0 [EBP] , EAX 8BC2 MOV EAX , EDX CE DTST
SUB ECX , EAX MOV 0 [EBP] , ECX CF DTST 8BD0 MOV EDX , EAX 2BC8 SUB ECX , EAX
894D00 MOV 0 [EBP] , ECX 8BC2 MOV EAX , EDX D0 DTST D1 DTST 8BD0 MOV EDX , EAX
8D41FF LEA EAX , FF [ECX] 8945F8 MOV F8 [EBP] , EAX 8BC2 MOV EAX , EDX EA DTST
LEA ECX , FF [ECX] MOV F8 [EBP] , ECX EB DTST 8955E8 MOV E8 [EBP] , EDX 8B45E8
MOV EAX , E8 [EBP] BC DTST MOV EAX , EDX BD DTST BA2C000000 MOV EDX , # 2C 0110
ADD [EAX] , EDX 8B45FC MOV EAX , FC [EBP] 14C DTST ADD [EAX] , # 2C 14D DTST
57DDE3 B844440400 MOV EAX , # 44444 57DDE8 81002C000000 ADD [EAX] , # 2C 57DDEE
8B45FC MOV EAX , FC [EBP] 14E DTST ADD 44444 , # 2C 14F DTST MOV F8 [EBP] , # 3
MOV ECX , # 4 MOV EAX , F8 [EBP] 3E DTST MOV EAX , # 3 MOV F8 [EBP] , EAX 3F
DTST 57E2D7 A108E15700 MOV EAX , 57E108 57E2DC 8945EC MOV EC [EBP] , EAX 57E2DF
8BD0 MOV EDX , EAX EAX= 152 DTST MOV EDX , 57E108 MOV EC [EBP] , EDX 153 DTST
POP EAX LEA EAX , FF [EAX] PUSH EAX EAX= D30 DTST OP2 1 OPresize DEC DWORD PTR
[ESP] D31 DTST 8BD0 MOV EDX , EAX MOV EAX , 0 [EBP] 8945FC MOV FC [EBP] , EAX
8BC2 MOV EAX , EDX 166 DTST MOV EDX , 0 [EBP] MOV FC [EBP] , EAX 167 DTST 596994
B812000000 MOV EAX , # 12 596999 8945F4 MOV F4 [EBP] , EAX 59699C 8945F0 MOV F0
[EBP] , EAX 59699F BA00000080 MOV EDX , # 80000000 5969A4 2BD0 SUB EDX , EAX
EAX= A6 DTST A7 DTST
( ADDR -- ADDR' FLAG )\n -1 DTST LEA EAX, X
[EAX] 2 DTST 3 DTST DUP VPPP ! ADD EAX, # X 4 DTST 5 DTST PPPP LEA EAX, X [EAX]
6 DTST 7 DTST XOR EAX , EAX 4A DTST 4B DTST PPPP LEA EAX, X [EAX*_] $ 4444 CELLS
MOV EAX, # X1 X=0 8 DTST FIX 9 DTST $ CELLS 4444 + PPPP MOV EAX, # X MOV EAX, #
0 A DTST XOR EAX, EAX FALSE EXIT B DTST MOV F8 [EBP] , # 5 10A DTST FALSE EXIT
10B DTST PPPP 20B DTST MOV EAX , EDX MOV EAX , ECX D6 DTST LEA EAX, OFF-EBP
[EDX] D7 DTST 59A095 69C005000000 IMUL EAX , EAX , # 5 8E DTST MOV EAX ,
[EAX*4+EAX] 8F DTST MOV EDX, EDX \ C-DO 587890 83450001 ADD 0 [EBP] , # 1 146
DTST INC 0 [EBP] 147 DTST PPPP MOV 8 [ESP] , EAX MOV EAX , 8 [ESP] 1F0 DTST 1F1
DTST MOV C [EAX] , EDX MOV EAX , C [EAX] 2F0 DTST MOV EAX , EDX 2F1 DTST PPPP
MOV [EAX] , ECX MOV EAX , [EAX] F0 DTST F1 DTST POP EAX OP0 @ ^?EAX= 0= XOR EAX
, EAX ADD EAX , F8 [EBP] 10C DTST MOV EAX , F8 [EBP] 10D DTST PPPP XOR EAX , EAX
LEA EAX , 57B680 [EAX*4] 62 DTST MOV EAX , # 57B680 63 DTST OP0 @ C@ 58 = ( POP
EAX ) IF OP1 @ ^?EAX= 0 AND IF M\ A DTST FALSE OP1 OPexcise EXIT M\ B DTST THEN
THEN CALL X RET 0C DTST 0D DTST TRUE EXIT $ CELLS 444 + @ LEA EAX , ____ MOV EAX
, [EAX] 0E DTST 0F DTST MOVZX EAX , BYTE|WORD PTR [EAX] LEA EAX , ____ 10E DTST
10F DTST MOV X [EBP], EAX (FALG &( X1=X )) MOV EAX, 1X [EBP] \ $ DROP DUP 10
DTST 11 DTST MOV EAX, # X \ eax= NEG EAX 14 DTST MOV EAX, # -X 15 DTST MOV EAX,
# X NOT EAX 16 DTST MOV EAX, # ~X 17 DTST MOV EAX, # X MOV EAX, [EAX] 18 DTST
MOV EAX, X 19 DTST MOV EAX, # X MOV EAX , X1 [EBP] [EAX*4] 518 DTST MOV EAX , X
[EBP] 519 DTST MOV X1 [EBP] , EDX ADD EAX , X0 [EBP] X1=X0 418 DTST lea EAX,
[EAX+EDX] 419 DTST MOV 4 [EBP] , ECX MOV EDX , 4 [EBP] X1=X0 418 DTST MOV EDX ,
ECX 419 DTST PPPP LEA EAX , Y [EAX] LEA EAX , X [EAX*4] 30E DTST 30F DTST LEA
EAX , X [EAX*4] MOV EAX , [EDX] [EAX] 50E DTST 50F DTST MOV EDX , X [EBP] A0E
DTST A0F DTST 5695B0 8945FC MOV FC [EBP] , EAX 5695B3 F76DFC IMUL FC [EBP] 0 AND
32A DTST 32B DTST PPPP TTTT AND \ MOV X [EBP] , EAX|EDX|EBX|ECX 8BCA MOV ECX ,
EDX 8D0488 LEA EAX , [EAX] [ECX*4] 42A DTST 42B DTST 8BCA MOV ECX , EDX 8D0488
LEA EAX , [EAX] [EDX*4] 62A DTST 62B DTST 8D0C8D00000000 LEA ECX , 0 [ECX*4]
8D0401 LEA EAX , [ECX] [EAX] 52A DTST 52B DTST MOV EAX , # 58DDE8 LEA EAX ,
[EAX] [EDX*4] 4C DTST 4D DTST NEG ECX LEA EAX , [ECX] [EAX] 90 DTST 91 DTST MOV
ECX , 20 [ESP] 59A13C 2BC1 SUB EAX , ECX 92 DTST SUB EAX , 20 [ESP] 93 DTST MOV
ECX , 599825 SUB EAX , ECX 92 DTST SUB EAX , 599825 93 DTST 59A227 B841000000
MOV EAX , # 1000 59A22C A375995900 MOV 599975 ( Char1Glob+5 ) , EAX 98 DTST MOV
599975 , # 1000 99 DTST MOV EAX , # 2000 MOV 1C [ESP] , EAX A8 DTST MOV 1C [ESP]
, # 2000 A9 DTST B8E0005800 MOV EAX , # 5800E0 0110 ADD [EAX] , EDX E4 DTST ADD
5800E0 , EDX E5 DTST 580185 B855550500 MOV EAX , # 55555 58018A 8910 MOV [EAX] ,
EDX EE DTST MOV 5800E0 , EDX EF DTST 8BD0 MOV EDX , EAX 011560015800 ADD 580160
, EDX E6 DTST ADD 5800E0 , EAX E7 DTST MOVZX ECX , BYTE PTR 2 [EDX] [ECX] XOR
EAX , ECX A0 DTST XOR AL , BYTE PTR [EAX+EDX+44H] A1 DTST LEA ECX , 58E188 (
rson+5 ) [EAX*4] 596738 8911 MOV [ECX] , EDX A2 DTST A3 DTST 8955F8 MOV F8 [EBP]
, EDX 0B45F8 OR EAX , F8 [EBP] B2 DTST OR EAX , EDX B3 DTST 3B45F8 CMP EAX , F8
[EBP] !!! BE DTST CMP EAX , EDX BF DTST 8BC2 MOV EAX , EDX 8945FC MOV FC [EBP] ,
EAX C0 DTST 8955FC MOV FC [EBP] , EDX C1 DTST 8BD0 MOV EDX , EAX C7450001000000
MOV 0 [EBP] , # 1 C6 DTST C7 DTST 58251C 894500 MOV 0 [EBP] , EAX 58251F
C7450001000000 MOV 0 [EBP] , # 1 C6 DTST C7 DTST 8BD0 MOV EDX , EAX 011510025800
ADD 580210 , EAX E8 DTST E9 DTST B94C025800 MOV ECX , # 58024C C70189ABCDEF MOV
[ECX] , # EFCDAB89 EC DTST MOV 58024C , # EFCDAB89 ED DTST 587294 B801000000 MOV
EAX , # 1 587299 8BC8 MOV ECX , EAX F6 DTST MOV ECX , # 1 F7 DTST B901000000 MOV
ECX , # 1 F7D9 NEG ECX F8 DTST F9 DTST B919000000 MOV ECX , # 19 D3E8 SHR|SHL
EAX , CL 100 DTST 101 DTST B801000000 MOV EAX , # 1 8B04851CDE5700 MOV EAX ,
57DE1C [EAX*4] 148 DTST MOV EAX , 1 149 DTST 33C0 XOR EAX , EAX 8B04851CDE5700
MOV EAX , 57DE1C [EAX*4] 148 DTST MOV EAX , 57DE1C 149 DTST B803000000 MOV EAX ,
# 3 C1E804 SH[R|L] EAX , 4 48 DTST 49 DTST PPPP TTTT IF ." T=" 2DUP HEX U. U.
THEN $ - DUP 118 DTST 119 DTST $ - - NEG EAX ADD EAX, X [EBP] NEG EAX 20 DTST
SUB EAX, X [EBP] 21 DTST PPPP $ 4444 OR MOV X1 [EBP], EAX MOV EAX, X [EDI] 22
DTST 23 DTST MOV X1 [EBP], EAX MOV EAX , X [EBP] ADD|XOR|OR|AND= 122 DTST 123
DTST MOV X1 [EBP], EAX MOV EAX, # X ADD|XOR|OR|AND= 24 DTST 25 DTST MOV X1
[EBP], EAX MOV EAX, X ADD|XOR|OR|AND= 26 DTST 27 DTST MOV X1 [EBP], # 4444 \ $
4444 5555 OR MOV EAX , # 4 ADD|XOR|OR|AND= 124 DTST 125 DTST MOV F4 [EBP] , ECX
ADD|XOR|OR|AND= 12 DTST XOR EAX , ECX 13 DTST ADD|XOR|OR|AND= MOV F8 [EBP] , #
2710 ADD EAX , F8 [EBP] 46 DTST 47 DTST 599B95 C745F401000000 MOV F4 [EBP] , # 1
ADD|XOR|OR|AND= 8C DTST 8D DTST PPPP OP0 @ W@ 4D8B = MOV EDX , X [EBP] OP-1 MOV
EAX , FC [EBP] MOV F8 [EBP] , # 2710 50 DTST 51 DTST CMP X [EBP] , EAX MOV X
[EBP] , EDX 128 DTST 129 DTST MOV EAX, # X MOV X1 [EBP], EAX 28 DTST 29 DTST $
4444 @ U< MOV EAX, # X MOV X1 [EBP], EAX 2A DTST 2B DTST MOV EAX , FC [EBP]
MOV [EAX] , EDX MOV EDX , X [EBP] \ !? OP-1 MOV EAX , FC [EBP] LEA EAX , 4 [EAX]
\ $ CELL+ ! 430 DTST 431 DTST $ 44444 ! MOV X [EBP] , EAX MOV EAX, X 30 DTST 31
DTST LEA EAX, X [EDI] 230 DTST \ ??? MOV X [EDI] , EAX 231 DTST MOV X [EBP] , #
44444 TTTT AND \ MOV EAX, X 130 DTST 131 DTST LEA EAX, X [EDI] 330 DTST \ ???
331 DTST PPPP MOV F8 [EBP] , EDX LEA EAX , Y [EAX*X] ЈагЎ® X2=X0 318 DTST 319
DTST MOV X [EBP] , ECX MOV EAX , ____ MOV FC [EBP] , EDX MOV EDX , X [EBP] 630
DTST 631 DTST MOV EAX , EDX MOV EAX , [EAX] 730 DTST 731 DTST MOV EDX , ECX MOV
[EAX] , EDX 30E DTST 40F DTST PPPP MOV EAX , # 400 IMUL F8 [EBP] MOV F8 [EBP] ,
# C8 E30 DTST E31 DTST MOV F8 [EBP] , EAX D0E DTST IMUL EAX,EAX,44444H D0F DTST
MOV EAX , 569598 ( X+5 ) IMUL FC [EBP] OP0 @ 2+ C@ C>S OFF-EBP > OR \ 0
AND MOV FC [EBP] , EAX 12A DTST 12B DTST MOV F8 [EBP] , # 123 22A DTST 22B DTST
MOV FC [EBP] , EAX MOV EAX , [EAX] ADD EAX , FC [EBP] 830 DTST 831 DTST PPPP MOV
EDX , 0 [EBP] MOV ECX , EDX PUSH ECX A30 DTST A31 DTST MOV 0 [EBP] , EAX MOV EAX
, [ESP(+4)] ADD EAX , 0 [EBP] B30 DTST C31 DTST MOV F8 [EBP] , EDX MOV EAX ,
[EAX] MOV EDX , F8 [EBP] C30 DTST C31 DTST 579DE0 8945FC MOV FC [EBP] , EAX
579DE3 2555555555 AND EAX , # 55555555 579DE8 8B55FC MOV EDX , FC [EBP] C32 DTST
MOV EDX , EAX C33 DTST PPPP DUP IF ?~EAX @ IF 2DROP FALSE THEN THEN AE DTST TTTT
AND \ ADD EAX , X [EBP] LEA EAX, [EAX+ECX] OR EAX,ECX AF DTST PPPP TTTT IF ."
?EAX>EBX" THEN TTTT IF ." F=" DUP . THEN DUP IF ?~EAX @ IF 2DROP FALSE THEN
THEN AE DTST ." {#}" TTTT AND \ ADD EAX , X [EBP] LEA EAX, [EAX+EBX] CMP F8
[EBP] , EAX CMP EAX , EBX CMP EAX , F8 [EBP] CMP EBX , EAX OR EAX,EBX AF DTST
PPPP NEG EAX \ ADD EAX , 4 [EBP] MOV EAX , X [EBP] D0E DTST D0F DTST MOV EAX , X
D0E DTST D0F DTST PPPP MOV F8 [EBP] , EAX MOV EAX , F8 [EBP] E30 DTST E31 DTST
MOV EAX , EDX MOV EAX , 0 [EBP] 44 DTST 45 DTST MOV EDX , # 1000 MOV ECX , #
1000 MOV [ECX] , EDX 54 DTST MOV [ECX] , # 1000 MOV 1000 , [EDX] 55 DTST MOV ECX
, # 1000 MOV X [EBP] , ECX 58 DTST MOV FC [EBP] , # 1000 59 DTST LEA ECX ,
5898B8 ( rson+5 ) [ECX*4] MOV [ECX] , # 1000 56 DTST MOV X [ECX*4] , # 1000 57
DTST MOV EAX , ECX LEA EAX , X [EAX*4] 5A DTST LEA EAX , X [ECX*4] 5B DTST MOV
F8 [EBP] , EAX LEA EAX , X [ECX*4] B801000000 MOV EAX , # 1 MOV EDX , F8 [EBP]
5C DTST MOV EDX , EAX 5D DTST MOV F8 [EBP] , EAX MOV EAX , 18 [ESP] MOV EDX , F8
[EBP] 9C DTST MOV EDX , EAX 9D DTST MOV ECX , EDX NEG ECX LEA EAX , [ECX] [EAX]
66 DTST NEG EDX lea EAX, [EAX+EDX] 67 DTST MOV EDX , EAX MOV F8 [EBP] , # X MOV
EDX , # 0 6A DTST 6B DTST MOV EDX , # 4 ADD 0 [EBP] , EDX ADC EAX , FC [EBP] 82
DTST ADD 0 [EBP] , # 4 83 DTST MOV EAX , 30 [ESP] MOV 30 [ESP] , EAX 8D4001 LEA
EAX , 1 [EAX] 88 DTST 89 DTST 8D4001 LEA EAX , -1 [EAX] 94 DTST 95 DTST LEA EAX
, 1 [EAX] ADD EAX , 8 [ESP] MOVZX EAX , BYTE PTR [EAX] 9E DTST MOV EDX , 8 [ESP]
MOVZX EAX , BYTE PTR 2 [EDX] [EAX] 9F DTST 8955F8 MOV F8 [EBP] , EDX F7D8 NEG
EAX F7D0 NOT EAX 58 POP EAX 23C1 AND EAX , ECX OP0 @ W@ 4503 XOR OR \ 0345F8 ADD
EAX , F8 [EBP] B6 DTST ADD EAX , EDX B7 DTST 8B4D00 MOV ECX , 0 [EBP] 2BC8 SUB
ECX , EAX 894D00 MOV 0 [EBP] , ECX B6 DTST SUB 0 [EBP] , EAX B7 DTST 58266F
8B4500 MOV EAX , 0 [EBP] 582672 8B5504 MOV EDX , 4 [EBP] 582675 894500 MOV 0
[EBP] , EAX D2 DTST D3 DTST 8B4500 MOV EAX , 0 [EBP] 895500 MOV 0 [EBP] , EDX
8BC8 MOV ECX , EAX F4 DTST MOV ECX , 0 [EBP] MOV EAX , ECX F5 DTST B801000000
MOV EAX , # 1 8B5500 MOV EDX , 0 [EBP] 8D0402 LEA EAX , [EDX] [EAX] FC DTST LEA
EAX , 1 [EDX] FD DTST 5876BB 8B5500 MOV EDX , 0 [EBP] 5876BE 8D4201 LEA EAX , 1
[EDX] 5876C1 894500 MOV 0 [EBP] , EAX FC DTST ADD EAX , 1 [EDX] FD DTST 8945EC
MOV EC [EBP] , EAX 8B55EC MOV EDX , EC [EBP] 104 DTST MOV EDX , EAX 105 DTST
5A5408 8BD0 MOV EDX , EAX 8D0495D8825900 LEA EAX , 5982D8 [EDX*4] 8B0495D8825900
MOV EAX , 5982D8 [EDX*4] 5A5411 8B55F8 MOV EDX , F8 [EBP] 138 DTST LEA EAX ,
5982D8 [EAX*4] 139 DTST 8BCA MOV ECX , EDX C1E107 SHL ECX , 7 0BC1 OR EAX , ECX
108 DTST SHL EDX , 7 OR EAX , EDX 109 DTST 8BD0 MOV EDX , EAX 8D873C100000 LEA
EAX , 103C [EDI] 8810 MOV [EAX] , DL 110 DTST MOV 103C [EDI] , DL LEA EAX , 103C
[EDI] 111 DTST 58809A 8BD9 MOV EBX , ECX 58809C 8955EC MOV EC [EBP] , EDX 58809F
23C3 AND EAX , EBX 116 DTST AND EAX , ECX 117 DTST 8B4DF0 MOV ECX , F0 [EBP]
8955F0 MOV F0 [EBP] , EDX 23C1 AND EAX , ECX 11E DTST AND EAX , F0 [EBP] 11D
DTST 5881D2 8B55EC MOV EDX , EC [EBP] 5881D5 2345F0 AND EAX , F0 [EBP] 5881D8
0BC2 OR EAX , EDX 120 DTST OR EAX , EC [EBP] 11D DTST 8955F0 MOV F0 [EBP] , EDX
2345F0 AND EAX , F0 [EBP] 126 DTST AND EAX , EDX 127 DTST 894DFC MOV FC [EBP] ,
ECX 2345FC AND EAX , FC [EBP] 13E DTST AND EAX , ECX 13F DTST 58838C 8955F8 MOV
EDX , F4 [EBP] 58838F 23C1 AND EAX , ECX 588391 0BC2 OR EAX , EDX 12C DTST OR
EAX , F8 [EBP] 12D DTST 8BCA MOV ECX , EDX 23C1 AND EAX , ECX 0B45F4 OR EAX , F4
[EBP] 1F2 DTST AND EAX , EDX 1F3 DTST 5884C1 8B4DF8 MOV ECX , F8 [EBP] 5884C4
23CA AND ECX , EDX 5884C6 0BC1 OR EAX , ECX 1F4 DTST AND EDX , F8 [EBP] OR EAX ,
EDX 1F5 DTST 587860 8B5500 MOV EDX , 0 [EBP] 587863 8D5201 LEA EDX , 1 [EDX]
587866 895500 MOV 0 [EBP] , EDX 144 DTST ADD 0 [EBP] , # 1 145 DTST OP2 @ W@
5589 XOR OR \ 8B5500 EDX , MOV 0 [EBP] 8B5500 EDX , MOV 0 [EBP] D3E0 SHL EAX ,
CL OP1 ?EDX_[EBP] OR \ D3E0 SHL EAX , CL 0BC2 OR EAX , EDX 14A DTST OR EAX , 0
[EBP] 14B DTST 8945FC MOV FC [EBP] , EAX 8B4500 MOV EAX , 0 [EBP] 8B55FC MOV EDX
, FC [EBP] 162 DTST 163 DTST PPPP MOV EAX , EDX MOV EDX , EAX 42 DTST 43 DTST
CMP EAX , X [EBP] SETLE AL $ 4444 < MOV EAX, # X MOV X1 [EBP], EAX 2C DTST
SETGE AL 2D DTST $ 4444 @ < MOV EAX, # X MOV X1 [EBP], EAX 2E DTST SETGE AL
2F DTST 12E DTST 12F DTST MOV [EAX], EDX MOV EAX , X [EBP] LEA EBP, 8 [EBP] RET
MOV EDX , ECX 51E DTST MOV [EAX] , ECX 51F DTST PPPP 8945FC MOV FC [EBP] , EAX
B8189D5700 MOV EAX , # 579D18 8B55FC MOV EDX , FC [EBP] 8D0490 LEA EAX , [EAX]
[EDX*4] X0=X2 840 DTST 841 DTST MOV EDX , FC [EBP] MOV FC [EBP] , EAX MOV EAX ,
EDX MOV EDX , FC [EBP] F30 DTST MOV EDX , EAX MOV EAX , FC [EBP] MOV FC [EBP] ,
EDX F31 DTST 57BF16 8945FC MOV FC [EBP] , EAX 57BF19 33C0 XOR EAX , EAX 57BF1B
814500BA040000 ADD 0 [EBP] , # 4BA 57BF22 1345FC ADC EAX , FC [EBP] 84 DTST ADC
EAX , # 0 85 DTST 59690C 8945F0 MOV F0 [EBP] , EAX 59690F B801000000 MOV EAX , #
1 596914 BA00000080 MOV EDX , # 80000000 596919 2B55F0 SUB EDX , F0 [EBP] A4
DTST SUB EDX , EAX A5 DTST 8945F8 MOV F8 [EBP] , EAX 8B55F8 MOV EDX , F8 [EBP]
EC DTST MOV EDX , EAX ED DTST 8945FC MOV FC [EBP] , EAX B801000000 MOV EAX , # 1
B9FFFFFFFF MOV ECX , # FFFFFFFF 034DFC ADD ECX , FC [EBP] FA DTST ADD ECX , EAX
FB DTST 587C37 A1D8795800 MOV EAX , 5879D8 ( C+5 ) 587C3C 8BD0 MOV EDX , EAX
587C3E A1E4795800 MOV EAX , 5879E4 ( D+5 ) 587C43 8945EC MOV EC [EBP] , EAX 114
DTST 115 DTST 894500 MOV 0 [EBP] , EAX 8D4201 LEA EAX , 1 [EDX] 8B5500 MOV EDX ,
0 [EBP] 894500 MOV 0 [EBP] , EAX 140 DTST MOV ECX , EAX MOV EAX , ECX 141 DTST $
10 LSHIFT MOV X0 [EBP] , EAX MOV EAX, # 10 MOV ECX, EAX \ !? MOV EAX, X2 [EBP]
SHL|SHR EAX , CL X0=X2 32 DTST 33 DTST LEA EAX , 0 [EDX] [EAX*4] MOV [EAX] , ECX
132 DTST 133 DTST 8B5500 MOV EDX , 0 [EBP] 894500 MOV 0 [EBP] , EAX F7D8 NEG EAX
03C2 ADD EAX , EDX 8B5500 MOV EDX , 0 [EBP] C8 DTST MOV ECX , 0 [EBP] MOV 0
[EBP] , EAX MOV EDX , EAX NEG EAX ADD EAX , ECX C9 DTST 895500 MOV 0 [EBP] , EDX
8B55FC MOV EDX , FC [EBP] 8B4D00 MOV ECX , 0 [EBP] C8 DTST MOV ECX , EDX C9 DTST
PPPP
\n LEA ebp, OFF-EBP [EBP]
( -- )\n M\ -D DTST M\ -F DTST
( ADDR -- ADDR' )\n
( CFA -- CFA FLAG )\n CFA CFA+OFF N' RET
0100.X0XX INC|DEC E(ACDB)X CDQ 1110.11XX DUP FC AND EC = M_WL DROP 1+ REPEAT \
IN|OUT EAX AL, DX | DX, EAX EL CFA CFA+OFF N' LEA EBP, OFF-EBP [EBP] ADD EBP, #
OFF-EBP SUB EBP, # X XCHG EBP , ESP MOV EAX, EBP DUP 0E3FF = M_WL DROP 2+ REPEAT
\ JMP EBX MOV X [EBP] , # X MOV X , # Y ADD X , # Y 1 TO TTTT RP! SETGE AL SETLE
AL LEA EAX , [EAX] [EDX*4] LEA EAX, [EDX] [EAX] CMPXCHG [EAX] , AL| EAX LSS EAX
, [EAX] BTR [EAX] , EAX LFS EAX , [EAX] LGS EAX , [EAX] MOVZX EAX , BYTE|WORD
PTR [EAX] 0000.0000 1011.1XXX 0000.1111 MOVZX EAX, WORD PTR [EAX] MOV ECX ,
[EAX+20H] LEA ECX , [EAX+20H] MOV EAX, X [EBP] [EAX*4] LEA EAX , [EDX] [EAX]
XX00.0101 0000.0100 1000.1XX1
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
( CFA -- )\n ." ^" DUP H. CFA N' RP! MOV ESP,
EAX CFA N' RET ADD EAX, # X 010X.XXXX INC|DEC|PUSH|POP E_X FS: GS: D16: A16:
INSB INSD OUTSB OUTSD 0110.X1XX CDQ DUP FC AND EC = M_WL 1_,_STEP REPEAT \
IN|OUT EAX AL, DX | DX, EAX EL DUP 0BB = M_WL 5_,_STEP REPEAT \ MOV EBX, # X JO
JNO JB JAE JE JNE JBE JA JS JNS JP JNP JL JGE JLE JG 0111.XXXX CALL JMP MOV EAX
, ESP MOV EAX, EBP XCHG EBP , ESP LEA EBP, OFF-EBP [EBP] ADD EBP, # OFF-EBP SUB
EBP, # OFF-EBP ADD ESP, # X MOV EAX, # X JMP EBX DUP 0D3FF = M_WL EVEN-EBP
2_,_STEP REPEAT \ CALL EBX DUP 0E2FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ JMP EDX
CALL EDX JO [ESP] MOV X [EBP] , # X MOV X , # Y ADD X , # Y MOV EAX, 4 [ESP] MOV
EAX, [ESP] LEA EAX, 4 [ESP] MOV EAX, ESP ADD [ESP] , EAX SETGE AL SETLE AL
CMPXCHG [EAX] , AL| EAX LSS EAX , [EAX] BTR [EAX] , EAX LFS EAX , [EAX] LGS EAX
, [EAX] MOVZX EAX , BYTE|WORD PTR [EAX] 0000.0000 1011.1XXX 0000.1111 ADD EAX, X
[ESP] SUB EAX, X [ESP] MOV EAX, X [EBP] [EAX*4] MOV EAX, 0 [ESP] MOV ECX ,
[EAX+20H] LEA ECX , [EAX+20H] LEA EBX, [EDX] [EAX] LEA EAX, [EDX] [EAX] LEA EAX,
X [EAX*4] LEA EAX, X [EAX*2] LEA EAX , [EAX] [EDX*4] INC [ESP] MOVZX EBX, BYTE
PTR [EAX]
\n
\n
( CFA -- )\n F7_ED
\n
\n
( cfa -- cfa' flag )\n ZZZZ IF ." z=" OP1
@ @ U. THEN -3 DTST ADD EAX, # X 404 DTST 405 DTST MOV X [EBP] , EAX 436 DTST
437 DTST MOV EAX , 44444 434 DTST CMP 44444, # 0 435 DTST MOV EAX , [ESP] 534
DTST CMP DWORD PTR [ESP], 0 535 DTST MOV EAX , 0 [EBP] 334 DTST CMP X [EBP], # Z
335 DTST 0BC2 OR EAX , EDX B4 DTST OR EDX , EAX B5 DTST LEA EAX, X [EAX] 234
DTST ADD EAX, # X 235 DTST LEA EAX, X [EAX] 34 DTST ADD EAX, # X 35 DTST SAR EAX
, 1F 13A DTST 13B DTST XOR EAX, # X 134 DTST CMP EAX, # X 135 DTST XOR EAX ,
[ESP] 134 DTST CMP EAX , [ESP] 135 DTST CMP X [EBP] , EAX 76 DTST CMP EAX, X
[EBP] 77 DTST $ 0<> IF NEG EAX \ SBB EAX, EAX 36 DTST 084 TO J_COD 37 DTST
$ 0= IF SUB EAX , # 1 SBB EAX , EAX 38 DTST OP2 @ W@ U. 39 DTST $ U< IF OP1 @
W@ 053B <> AND OP1 @ W@ D03B <> AND \ CMP EDX , EAX CMP X [EBP] ,
EAX SBB EAX , EAX 3A DTST 3B DTST MOV ECX , [ESP] CMP EAX , ECX 33A DTST 33B
DTST MOV ECX , [ESP] XOR EAX , ECX 33A DTST XOR ECX , [ESP] 33B DTST MOV ECX ,
EDX CMP EAX , ECX 33A DTST CMP EAX , EDX 33B DTST MOV EDX , 0 [EBP] CMP EAX ,
EDX 43A DTST CMP EAX , 0 [EBP] 43B DTST MOV EAX , [EAX] CMP ECX , EAX 43A DTST
CMP ECX , [EAX] 43B DTST MOV EAX , [EAX] CMP EDX , EAX 43A DTST CMP EDX , [EAX]
43B DTST MOV EAX , [EAX] CMP EAX , ECX 80 DTST CMP ECX , [EAX] 81 DTST MOV ECX ,
# 3 XOR EAX , ECX 40 DTST CMP EAX , # 1 41 DTST ZZZZ IF ." Z=" OP1 @ @ U. OP1 @
W@ U. OP0 @ W@ U. THEN MOV EDX , 0 [EBP] CMP EAX , EDX 68 DTST CMP EAX , 0 [EBP]
69 DTST 57B523 B901000000 MOV ECX , # 1 57B528 3BC8 CMP ECX , EAX 74 DTST CMP
EAX , # 1 75 DTST MOV EAX , [EAX] CMP EAX , EDX 78 DTST CMP EDX , [EAX] 79 DTST
MOV EAX , 10 [ESP] 597707 3D02000000 CMP EAX , # 2 7A DTST CMP 10 [ESP] , # 2 7B
DTST MOV ECX , 20 [ESP] CMP ECX , EAX 7C DTST CMP EAX , 20 [ESP] 7D DTST MOV ECX
, 44444 CMP ECX , EAX 7C DTST CMP EAX , 44444 7D DTST MOV EAX , X [EAX*4] 5960F8
3500100000 CMP EAX , # 1000 86 DTST CMP X [EAX*4] , # 1000 87 DTST 5978EF
A135755900 MOV EAX , 597535 5978F4 3D41000000 CMP EAX , # 1000 96 DTST CMP
597535 , # 1000 97 DTST 581E16 F7D8 NEG EAX 581E18 03C2 ADD EAX , EDX B8 DTST
SUB EDX , EAX B9 DTST 8BCA MOV ECX , EDX 0BC9 OR ECX , ECX BA DTST OR EDX , EDX
BB DTST MOV F8 [EBP] , EAX XOR EAX , EAX CMP EAX , F8 [EBP] (FALG &( X1=X ))
4E DTST CMP EAX , # 0 4F DTST MOV F8 [EBP] , EDX MOV EAX , [EAX] CMP EAX , F8
[EBP] (FALG &( X1=X )) OP0 @ 2+ C@ C>S OFF-EBP > OR !!!! 23A DTST CMP
EAX , EDX 23B DTST MOV F8 [EBP] , ECX MOV EAX , [EAX] CMP EAX , F8 [EBP] (FALG
&( X1=X )) 7E DTST CMP EAX , ECX 7F DTST MOV EAX , [EAX] CMP F8 [EBP] , EAX
(FALG &( X1=X )) OP0 @ 2+ C@ C>S OFF-EBP > OR MOV F8 [EBP] , ECX 23A
DTST CMP ECX , EAX 23B DTST MOV F8 [EBP] , EDX MOV EAX , [EAX] CMP F8 [EBP] ,
EAX 33A DTST CMP EDX , EAX 33B DTST $ < IF 0F9DC0 SETGE AL 83E001 AND EAX , #
1 48 DEC EAX 3C DTST 3D DTST 5 OVER = IF XOR EAX , F8 [EBP] MOV FC [EBP] , EAX
MOV F8 [EBP] , # 5 MOV EAX , FC [EBP] 234 DTST 235 DTST
\n 1002 DTST 1003 DTST
\n -9 DTST -7 DTST -5 DTST ZZZZ IF ." B=" DUP
U. THEN OR EAX, EAX 00XX.X101 ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X OVER 3D
<> AND \ ~ CMP EAX, # X DEC EAX INC EAX CMP OR SBB EAX, EAX SUB EDX, EAX
CMP X [EBP], EAX OVER 103B <> AND \ CMP EDX , [EAX] OVER 453B <> AND
\ CMP EAX , X [EBP] OVER 053B <> AND \ CMP EAX , X ADD EAX , # X ADD EAX ,
EDX XOR EAX , ECX SAR EAX , X CMP X [EBP], # Z CMP 44444, # 55555 CMP X [EAX*4]
, # 55555 CMP X [ESP] , # X CMP 44444, # 0 CMP [ESP], # 0 OVER C20B <> AND
\ OR EAX , EDX XOR EAX , [ESP] OR EAX, EAX DP @ TO :-SET
\n -B DTST
\n OR EAX, EAX SetOP 0xC00B W, \ OR EAX, EAX
( -- )\n
( N -- )\n
( CFA -- CFA TRUE | FALSE )\n CFA
( ADR OPX -- ADR OPX+4 FALSE | OPX TRUE TRUE |
ADR FALSE TRUE )\n
\n
( OPX n -- )\n THEN
( ADR -- )\n ." J_S" \ BASE @ HEX J-SET U.
DP @ U. BASE ! 400 + OVER CELL- @ REST OPX
( -- addr )\n 94 addr - указатель пространства
данных.
\n 94 CORE EXT Интерпретация: семантика не
определена. Выполнение: ( xt -- ) Добавить семантику выполнения определения,
представленого xt, к семантике выполнения текущего определения. машинная команда
CALL
\n 94 CORE EXT Интерпретация: семантика не
определена. Выполнение: ( xt -- ) Добавить семантику выполнения определения,
представленого xt, к семантике выполнения текущего определения.
( ADDR -> )\n скомпилировать инструкцию ADDR
JMP
( -> )\n скомпилировать инструкцию RET
( W -> )\n MOV EAX, #
( D -> )\n
( u -- )\n Скомпилировать следующую семантику:
Положить на стек возвратов литерал u push dword #
( ADDR -> )\n скомпилировать инструкцию
ADDR ?BRANCH JX без 0x0F кусок от JX
( addr u -- )\n Зарезервировать u символов
пространства данных и поместить туда содержимое u символов из addr.
( addr u -- )\n Разместить в пространстве данных
строку, заданную addr u, в виде строки со счетчиком.
( a u -- )\n Скомпилировать строку, заданную addr
u.
( A -> )\n разместить в пространстве данных
строку, заданную адресом A, в виде строки со счетчиком
( -> A )\n
( -> A )\n
( A -> )\n
( A, N -- )\n ABORT" Conditionals not paired"
( A -> )\n
( A, N -- )\n ABORT" Conditionals not paired"
( addr u -- addr1 )\n Try to avoid slow
division, 16 is a default align value
( addr -- a-addr )\n 94 a-addr - первый
выровненный адрес, больший или равный addr.
( -- )\n 94 Если указатель пространства данных не
выровнен - выровнять его.
( n -- )\n выровнять HERE на n и заполнить
NOP
( xt -- a-addr )\n 94 a-addr - адрес поля данных,
соответствующий xt. Исключительная ситуация возникает, если xt не от слова,
определенного через CREATE.
( addr u wid -> )\n добавление заголовка
статьи с именем, заданным строкой addr u, к списку, заданному wid. Формирует
только поля имени и связи с отведением памяти по ALLOT.
( A1, A2 -> )\n добавление заголовка статьи с
именем, заданным строкой со счетчиком A1, к списку, заданному переменной A2.
Формирует только поля имени и связи с отведением памяти по ALLOT. В машинном
слове по адресу A2 расположен адрес поля имени статьи, с которой начинается
поиск в этом списке. пример: C" SP-FORTH" CONTEXT @ +WORD
( -- wid )\n 94 SEARCH Создает новый пустой
список слов, возвращая его идентификатор wid. Новый список слов может быть
возвращен из предварительно распределенных списков слов или может динамически
распределяться в пространстве данных. Система должна допускать создание как
минимум 8 новых списков слов в дополнение к имеющимся в системе. здесь будет
указатель на имя последнего слова списка здесь будет указатель на имя списка для
именованых wid словаря-предка класс словаря = wid словаря, определяющего
свойства данного
( -- wid )\n создаст временный словарь (в
виртуальной памяти) не присоединяем к VOC-LIST, заодно признак временности
словаря
( wid -- )\n
( cls wid -- )\n
( wid -- cls )\n
( Pwid wid -- )\n
( wid -- Pwid )\n
( NFA -> CFA )\n
( NFA -> 'CFA )\n
( NFA -> FFA )\n
( NFA -> LFA )\n
( NFA1 -> NFA2 )\n
( NFA[E] -> )\n
( NFA -> F )\n
( NFA -> F )\n
( -- )\n 94 Сделать последнее определение
словом немедленного исполнения. Исключительная ситуация возникает, если
последнее определение не имеет имени.
( -- )\n Пометить последнее определенное слово
признаком "словарь".
( addr wid - addr nfa | addr 0 )\n
( addr - nfa addr | 0 addr )\n
( addr -- c-addr u )\n найти слово, телу
которого принадлежит данный адрес
( c-addr u nfa1|0
-- c-addr u nfa1|nfa2|0 )\n тоже, что и CDR (см. в spf_wordlist.f), но кроме
конца списка стопором является и заданное имя. Код наследован от
SEARCH-WORDLIST, by ~ygrek Nov.2006 длина (счетчик) если длина ноль - сразу на
выход вход в список искомое слово в ES:DI MOV EBX, # FFFF MOV EBX, # FFFFFFFF
AND EAX, # FF AND EAX, # FF конец поиска длины не равны - идем дальше проверить
всю строку сохраняем адрес начала искомого слова значение esi не интересует в
случае неудачи выход с "не найдено" передвигаемся от начала строки к NFA
( c-addr u wid -- 0 | nfa -1 )\n
\n
( addr u -- addr u 0 | xt 1 | xt -1 )\n 94 SEARCH
Расширить семантику CORE FIND следующим: Искать определение с именем, заданным
строкой addr u. Если определение не найдено после просмотра всех списков в
порядке поиска, возвратить addr u и ноль. Если определение найдено, возвратить
xt. Если определение немедленного исполнения, вернуть также единицу (1); иначе
также вернуть минус единицу (-1). Для данной строки, значения, возвращаемые FIND
во время компиляции, могут отличаться от значений, возвращаемых не в режиме
компиляции.
( c-addr -- c-addr 0 | xt 1 | xt -1 )\n 94 SEARCH
Расширить семантику CORE FIND следующим: Искать определение с именем, заданным
строкой со счетчиком c-addr. Если определение не найдено после просмотра всех
списков в порядке поиска, возвратить c-addr и ноль. Если определение найдено,
возвратить xt. Если определение немедленного исполнения, вернуть также единицу
(1); иначе также вернуть минус единицу (-1). Для данной строки, значения,
возвращаемые FIND во время компиляции, могут отличаться от значений,
возвращаемых не в режиме компиляции.
( -- )\n 94 SEARCH Сделать списком
компиляции тот же список слов, что и первый список в порядке поиска. Имена
последующих определений будут помещаться в список компиляции. Последующие
изменения порядка поиска не влияют на список компиляции.
( -- widn ... wid1 n )\n 94 SEARCH Возвращает
количество списков слов в порядке поиска - n и идентификаторы widn ... wid1,
идентифицирующие эти списки слов. wid1 - идентифицирует список слов, который
просматривается первым, и widn - список слов, просматриваемый последним. Порядок
поиска не изменяется.
( -- )\n 94 SEARCH EXT Преобразовать порядок
поиска, состоящий из widn, ...wid2, wid1 (где wid1 просматривается первым) в
widn,... wid2, widFORTH-WORDLIST.
( -- )\n 94 SEARCH EXT Установить список поиска на
зависящий от реализации минимальный список поиска. Минимальный список поиска
должен включать слова FORTH-WORDLIST и SET-ORDER.
( widn ... wid1 n -- )\n 94 SEARCH Установить
порядок поиска на списки, идентифицируемые widn ... wid1. Далее список слов wid1
будет просматриваться первым, и список слов widn - последним. Если n ноль -
очистить порядок поиска. Если минус единица, установить порядок поиска на
зависящий от реализации минимальный список поиска. Минимальный список поиска
должен включать слова FORTH-WORDLIST и SET-ORDER. Система должна допускать
значения n как минимум 8.
( -- )\n 94 SEARCH EXT Преобразовать порядок
поиска, состоящий из widn, ...wid2, wid1 (где wid1 просматривается первым) в
widn,... wid2, wid1, wid1. Неопределенная ситуация возникает, если в порядке
поиска слишком много списков.
( -- )\n 94 SEARCH EXT Преобразовать порядок
поиска, состоящий из widn, ...wid2, wid1 (где wid1 просматривается первым) в
widn,... wid2. Неопределенная ситуация возникает, если порядок поиска был пуст
перед выполнением PREVIOUS.
( wid -- )\n напечатать имя списка слов, если
он именован
( -- )\n 94 SEARCH EXT Показать списки в порядке
поиска, от первого просматриваемого списка до последнего. Также показать список
слов, куда помещаются новые определения. Формат изображения зависит от
реализации. ORDER может быть реализован с использованием слов форматного
преобразования чисел. Следовательно он может разрушить перемещаемую область,
идентифицируемую #>.
( -> NFA )\n
( A -> )\n
( -- )\n 94 TOOLS Список имен определений в
первом списке слов порядка поиска. Формат зависит от реализации. WORDS может
быть реализован с использованием слов форматного преобразования чисел.
Соответственно, он может испортить перемещаемую область, идентифицируемую #>.
( -- flag )\n
( -- )\n установить флаг, что видели ошибку.
( -- )\n установить флаг, что не видели
ошибку.
( -- ior )\n номер ошибки
( -- num )\n номер траслируемой строки
( -- num )\n указатель разобранной части >IN
( -- a u )\n строка SOURCE в момент ошибки
( -- a u )\n имя траслируемого файла
( -- a u )\n формирует строку для LAST-WORD
по ERR-DATA
( -- )\n
( F, N -> )\n
( flag c-addr -- )\n
( err-num -- )\n сохранить текущую PARSE-AREA
(строка by SOURCE ) и параметры входного потока CURFILE, CURSTR в область
ERR-DATA Цель - дальнейшая индикация места, вызвавшего исключение.
( -- +n )\n 94 +n - число одинарных ячеек,
находящихся на стеке данных перед тем как туда было помещено +n.
( -> )\n выдать ошибку "исчерпание стека",
если он более чем пуст
( -> )\n
( char "<chars>ccc<char>" -- c-addr
)\n 94 Пропустить ведущие разделители. Выбрать символы, ограниченные
разделителем char. Исключительная ситуация возникает, если длина извлеченной
строки больше максимальной длины строки со счетчиком. c-addr - адрес переменной
области, содержащей извлеченное слово в виде строки со счетчиком. Если
разбираемая область пуста или содержит только разделители, результирующая строка
имеет нулевую длину. В конец строки помещается пробел, не включаемый в длину
строки. Программа может изменять символы в строке.
( "<spaces>name" -- xt )\n 94 Пропустить
ведущие пробелы. Выделить name, ограниченное пробелом. Найти name и вернуть xt,
выполнимый токен для name. Неопределенная ситуация возникает, если name не
найдено. Во время интерпретации ' name EXECUTE равносильно name.
( "<spaces>name" -- char )\n 94 Пропустить
ведущие разделители. Выделить имя, органиченное пробелами. Положить код его
первого символа на стек.
( -- )\n 94 TOOLS EXT Вернуть управление
операционной системе, если она есть.
( a u -- )\n интерпретировать (
транслировать) слово с именем a u
( a u -- )\n обращение к словам в словарях в
виде vocname1::wordname или vocname1::vocname2::wordname и т.п. или vocname1::
wordname Вообще есть :: ?
( -> )\n интерпретировать входной поток
\n
( n --)\n Распечатать n верхних элементов стека
\n
\n 94 CORE Интерпретация: семантика неопределена.
Компиляция: Выполнить семантику выполнения, данную ниже. Выполнение: ( -- )
Установить состояние интерпретации. [ слово немедленного выполнения.
( -- )\n 94 CORE Установить состояние компиляции.
( -- )\n
( -- )\n CORE 94 Сбросить стек возвратов, записать
ноль в SOURCE-ID. Установить стандартный входной поток и состояние
интерпретации. Не выводить сообщений. Повторять следующее: - Принять строку из
входного потока во входной буфер, обнулить >IN и интепретировать. - Вывести
зависящее от реализации системное приглашение, если система находится в
состоянии интерпретации, все процессы завершены, и нет неоднозначных ситуаций.
стек сбрасываем, т.к. OPTIONS может оставить значения :(
( -- i*x i )\n
( i*x i -- )\n
( ( i*x c-addr u xt -- j*x )\n Считая
c-addr u входным потоком, вычислить её интерпретатором xt.
( i*x c-addr u -- j*x )\n 94 Сохраняет текущие
спецификации входного потока. Записывает -1 в SOURCE-ID. Делает строку, заданную
c-addr u, входным потоком и входным буфером, устанавливает >IN в 0 и
интерпретирует. Когда строка разобрана до конца - восстанавливает спецификации
предыдущего входного потока. Другие изменения стека определяются выполняемыми по
EVALUATE словами.
( ior -- ior )\n тут проверка на ior=0
тоже нужна.
( i*x source source-xt xt -- j*x ior
)\n сохранить спецификации входного потока установить входной поток на source,
слово для чтения строки в source-xt выполнить xt восстановить спецификации
входного потока
( i*x source xt -- j*x ior )\n сохранить
спецификации входного потока установить входной поток на source, выполнить xt
восстановить спецификации входного потока
( addr u -- addr1 )\n скопировать строку в
хип и вернуть её адрес в хипе
( a1 u1 -- a u )\n
( -- )\n
( i*x fileid -- j*x )\n 94 FILE Убрать
fileid со стека. Сохранить текущие спецификации входного потока, включая текущее
значение SOURCE-ID. Записать fileid в SOURCE-ID. Сделать файл, заданный fileid,
входным потоком. Записать 0 в BLK. Другие изменения стека определяются словами
из включенного файла. Повторять до конца файла: прочесть строку из файла,
заполнить входной буфер содержимым этой строки, установить >IN в ноль и
интерпретировать. Интерпретация текста начинается с позиции, с которой должно
происходить дальнейшее чтение файла. Когда достигнут конец файла, закрыть файл и
восстановить спецификации входного потока к их сохраненным значениям.
Неопределенная ситуация возникает, если fileid неверен, если возникают
исключительные ситуации ввода-вывода по мере чтения fileid, или возникают
исключительная ситуация при закрытии файла. Когда имеет место неопределенная
ситуация, статус (открыт или закрыт) любых интерпретируемых файлов зависит от
реализации.
( addr u -- ... 0 | ior )\n
( i*x a u -- j*x )\n
( i*x c-addr u -- j*x )\n
( i*x c-addr u -- j*x )\n 94 FILE Убрать
c-addr u со стека. Сохранить текущие спецификации входного потока, включая
текущее значение SOURCE-ID. Открыть файл, заданный c-addr u, записать полученный
fileid в SOURCE-ID и сделать его входным потоком. Записать 0 в BLK. Другие
изменения стека определяются словами из включенного файла. Повторять до конца
файла: прочесть строку из файла, заполнить входной буфер содержимым этой строки,
установить >IN в ноль и интерпретировать. Интерпретация текста начинается с
позиции, с которой должно происходить дальнейшее чтение файла. Когда достигнут
конец файла, закрыть файл и восстановить спецификации входного потока к их
сохраненным значениям. Неопределенная ситуация возникает, если fileid неверен,
если возникают исключительные ситуации ввода-вывода по мере чтения fileid, или
возникают исключительная ситуация при закрытии файла. Когда имеет место
неопределенная ситуация, статус (открыт или закрыт) любых интерпретируемых
файлов зависит от реализации.
( waddr wu laddr lu -- )\n
( "word" "libpath" -- )\n
( addr u -- )\n
( "name" -- )\n
( addr u -- )\n Создать определение для c-addr
u с семантикой выполнения, описанной ниже. Если указатель пространства данных не
выровнен, зарезервировать место для выравнивания. Новый указатель пространства
данных определяет поле данных name. CREATE не резервирует место в поле данных
name. name Выполнение: ( -- a-addr ) a-addr - адрес поля данных name. Семантика
выполнения name может быть расширена с помощью DOES>.
( "<spaces>name" -- )\n 94
\n та часть, которая работает одновременно с
CREATE (обычно)
\n
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: clon-sys1 -- colon-sys2 ) Добавить семантику времени
выполнения, данную ниже, к текущему определению. Будет или нет текущее
определение сделано видимо для поиска в словаре при компиляции DOES>, зависит
от реализации. Поглощает colon-sys1 и производит colon-sys2. Добавляет семантику
инициализации, данную ниже, к текущему определению. Время выполнения: ( -- ) (
R: nest-sys1 -- ) Заменить семантику выполнения последнего определения name, на
семантику выполнения name, данную ниже. Возвратить управление в вызывающее
опреде- ление, заданное nest-sys1. Неопределенная ситуация возникает, если name
не было определено через CREATE или определенное пользователем слово, вызывающее
CREATE. Инициализация: ( i*x -- i*x a-addr ) ( R: -- nest-sys2 ) Сохранить
зависящую от реализации информацию nest-sys2 о вызывающем определении. Положить
адрес поля данных name на стек. Элементы стека i*x представляют аргументы name.
name Выполнение: ( i*x -- j*x ) Выполнить часть определения, которая начинается
с семантики инициализации, добавленной DOES>, которое модифицировало name.
Элементы стека i*x и j*x представляют аргументы и результаты слова name,
соответственно.
( "<spaces>name" -- )\n Создать список
слов с именем name. Выполнение name заменит первый список в порядке поиска на
список с именем name. FORTH-WORDLIST SWAP CLASS! ( класс ) так сделал бы
DOES>, определенный выше
( "<spaces>name" -- )\n 94 Пропустить
ведущие пробелы. Выделить name, ограниченное пробелом. Создать определение для
name с семантикой выполнения, данной ниже. Зарезервировать одну ячейку
пространства данных с выровненным адресом. name используется как "переменная".
name Выполнение: ( -- a-addr ) a-addr - адрес зарезервированной ячейки. За
инициализацию ячейки отвечает программа
( x "<spaces>name" -- )\n 94 Пропустить
ведущие пробелы. Выделить name, ограниченное пробелом. Создать определение для
name с семантикой выполнения, данной ниже. name используется как "константа".
name Выполнение: ( -- x ) Положить x на стек. LIT, RET,
( x "<spaces>name" -- )\n 94 CORE EXT
Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Создать
определение для name с семантикой выполнения, определенной ниже, с начальным
значением равным x. name используется как "значение". Выполнение: ( -- x )
Положить x на стек. Значение x - то, которое было дано, когда имя создавалось,
пока не исполнится фраза x TO name, задав новое значение x, ассоциированное с
name.
( -> )\n
( x "<spaces>name" -- )\n 94
( -- a-addr n )\n
( "<spaces>name" -- )\n
( "<spaces>name" -- )\n локальные переменные
потока
( "<spaces>name" -- )\n 94 CORE EXT
( "<spaces>name" -- )\n
( x -> )\n
( vect-xt -- assigned-xt )\n Возвращает xt
процедуры, присвоенной VECT-переменной.
( -- )\n
\n
( C: -- colon-sys )\n 94 CORE EXT Создать
выполнимый токен xt, установить состояние компиляции и начать текущее
определение, произведя colon-sys. Добавить семантику инициализации к текущему
определению. Семантика выполнения xt будет задана словами, скомпилированными в
тело определения. Это определение может быть позже выполнено по xt EXECUTE. Если
управляющий стек реализован с импользованием стека данных, colon-sys будет
верхним элементом на стеке данных. Инициализация: ( i*x -- i*x ) ( R: --
nest-sys ) Сохранить зависящую от реализации информацию nest-sys о вызове
определения. Элементы стека i*x представляют аргументы xt. xt Выполнение: ( i*x
-- j*x ) Выполнить определение, заданное xt. Элементы стека i*x и j*x
представляют аргументы и результаты xt соответственно.
( C: "<spaces>name" -- colon-sys )\n 94
Пропустить ведущие разделители. Выделить имя, ограниченное пробелом. Создать
определение для имени, называемое "определение через двоеточие". Установить
состояние компиляции и начать текущее определение, получив colon-sys. Добавить
семантику инициализации, описанную ниже, в текущее определение. Семантика
выполнения будет определена словами, скомпилиро- ванными в тело определения.
Текущее определение должно быть невидимо при поиске в словаре до тех пор, пока
не будет завершено. Инициализация: ( i*x -- i*x ) ( R: -- nest-sys ) Сохранить
информацию nest-sys о вызове определения. Состояние стека i*x представляет
аргументы имени. Имя Выполнение: ( i*x -- j*x ) Выполнить определение имени.
Состояния стека i*x и j*x представляют аргументы и результаты имени
соответственно.
\n 94 CORE EXT Интерпретация: ( x
"<spaces>name" -- ) Пропустить ведущие пробелы и выделить name,
ограниченное пробелом. Записать x в name. Неопределенная ситуация возникает,
если name не определено через VALUE. Компиляция: ( "<spaces>name" -- )
Пропустить ведущие пробелы и выделить name, ограниченное пробелом. Добавить
семантику времени выполнения, данную ниже, к текущему определению.
Неопределенная ситуация возникает, если name не определено через VALUE. Время
выполнения: ( x -- ) Записать x в name. Примечание: Неопределенная ситуация
возникает, если POSTPONE или [COMPILE] применяются к TO.
\n 94 Интерпретация: семантика не определена.
Компиляция: ( "<spaces>name" -- ) Пропустить ведущие разделители. Выделить
имя, ограниченное пробелами. Найти имя. Добавить семантику компиляции имени в
текущее определение.
\n 94 CORE EXT Компиляция: Выполнить семантику
выполнения, данную ниже. Выполнение: ( "ccc<eol>" -- ) Выделить и
отбросить остаток разбираемой области. \ - слово немедленного исполнения.
\n 94 CORE EXT Компиляция: Выполнить семантику
выполнения, данную ниже. Выполнение: ( "ccc<paren>" -- ) Выделить и
вывести на дисплей ccc, ограниченные правой скобкой ")". .( - слово немедленного
исполнения.
( "ccc<paren>" -- )\n 94 FILE Расширить
семантику CORE (, включив: Когда разбирается текстовый файл, если конец
разбираемой области достигнут раньше, чем найдена правая скобка, снова заполнить
входной буфер следующей строкой из файла, установить >IN в ноль и продолжать
разбор, повторяя этот процесс до тех пор, пока не будет найдена правая скобка
или не будет достигнут конец файла.
\n 94 CORE EXT Интерпретация: семантика
неопределена. Компиляция: ( "<spaces>name" -- ) Пропустить ведущие
пробелы. Выделить name, ограниченное пробелами. Найти name. Если имя имеет иную
семантику компиляции, чем "по-умолчанию", добавить ее в текущее определение;
иначе добавить семантику выполнения name. Неопределенная ситуация возникает,
если name не найдено.
( -- )\n
\n
( -- )\n Заканчивает трансляцию текущего потока
( offset size "new-name< >" -- offset+size
)\n
\n
\n 94 CORE Интерпретация: семантика
неопределена. Компиляция: ( x -- ) Добавить семантику времени выполнения, данную
ниже, к текущему определению. Время выполнения: ( -- x ) Положить x на стек.
\n 94 DOUBLE Интерпретация: семантика
неопределена. Компиляция: ( x1 x2 -- ) Добавить семантику времени выполнения,
данную ниже, к текущему определению. Время выполнения: ( -- x1 x2 ) Положить
пару ячеек x1 x2 на стек.
\n 94 STRING Интерпретация: семантика не
определена. Компиляция: ( c-addr1 u -- ) Добавить семантику времени выполнения,
данную ниже, к текущему определению. Время выполнения: ( -- c-addr2 u )
Возвратить c-addr2 u, описывающие строку, состоящую из символов, заданных
c-addr1 u во время компиляции. Программа не может менять возвращенную строку.
( addr -- )\n
\n 94+FILE Интерпретация: ( "ccc<quote>" --
c-addr u ) Выделить ccc, ограниченные " (двойными кавычками). Записать
полученную строку c-addr u во временный буфер. Максимальная длина временного
буфера зависит от реализации, но не может быть меньше 80 символов. Следующее
использование S" может переписать временный буфер. Обеспечивается как минимум
один такой буфер. Компиляция: ( "ccc<quote>" -- ) Выделить ccc,
ограниченные " (двойными кавычками). Добавить семантику времени выполнения,
описанную ниже, к текущему определению. Время выполнения: ( -- c-addr u )
Вернуть c-addr и u, которые описывают строку, состоящую из символов ccc.
\n 94 CORE EXT Интерпретация: семантика не
определена. Компиляция: ( "ccc<quote>" -- ) Выделить ccc, ограниченные "
(двойными кавычками) и добавить семантику времени выполнения, данную ниже, к
текущему определению. Время выполнения: ( -- c-addr ) Возвратить c-addr, строку
со счетчиком, состоящую из символов ccc. Программа не должна менять возвращенную
строку.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( "ccc<quote>" -- ) Выделить ccc, ограниченное " (двойными
кавычками). Добавить семантику времени выполнения, данную ниже, к текущему
определению. Время выполнения: ( -- ) Вывести ccc на экран.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( "<spaces>name" -- ) Пропустить ведущие пробелы. Выделить
name, ограниченное пробелами. Добавить семантику времени выполнения, данную
ниже, к текущему определению. Время выполнения: ( -- char ) Положить char,
значение первого символа name, на стек.
\n 94 Интерпретация: семантика не определена.
Компиляция: ( "ccc<quote>" -- ) Выделить ccc, ограниченные " (двойными
кавычками). Добавить описанную ниже семантику времени выполнения в текущее
определение. Выполнение: ( i*x x1 -- | i*x ) Убрать x1 со стека. Если любой бит
x1 ненулевой, вывести на экран ccc и выполнить зависящие от реализации действия,
включающие ABORT. : ABORT" \ 94 EXCEPTION EXT Расширить семантику CORE ABORT"
чтобы было: Интерпретация: семантика не определена. Компиляция: (
"ccc<quote>" -- ) Выделить ccc, ограниченные " (двойными кавычками).
Добавить семантику времени выполнения, данную ниже, к текущему определению.
Время выполнения: ( i*x x1 -- | i*x ) ( R: j*x -- | j*x ) Убрать x1 со стека.
Если любой бит x1 ненулевой, выполнить функцию -2 THROW, выводя ccc, если на
стеке исключений нет кадра исключений.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( "<spaces>name" -- ) Пропустить ведущие пробелы. Выделить
name, ограниченное пробелом. Найти name. Добавить семантику времени выполнения,
данную ниже, к текущему определению. Неопределенная ситуация возникает, если
name не найдено. Добавить семантику времени выполнения, данную ниже, к текущему
определению, Время выполнения: ( -- xt ) Положить выполнимый токен имени xt на
стек. Выполнимый токен, возвращаемый скомпилированной фразой "['] X" является
тем же значением, что и возвращаемое "' X" вне состояния компиляции.
( c-addr u -> ... )\n преобразовать
строку в число ABORT" -?" ABORT" -??"
( T -> ... )\n преобразовать строку в
число
( addr u -> flag )\n
( c-addr u -- ... )\n ABORT" -???"
( c-addr -- ... )\n
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: -- orig ) Положить на управляющий стек позицию новой
неразрешенной ссылки вперед orig. Добавить семантику времени выполнения, данную
ниже, к текущему определению. Семантика незавершена, пока orig не разрешится,
например, по THEN или ELSE. Время выполнения: ( x -- ) Если все биты x нулевые,
продолжать выполнение с позиции, заданной разрешением orig.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: orig1 -- orig2 ) Положить на управляющий стек позицию новой
неразрешенной ссылки вперед orig2. Добавить семантику времени выполнения, данную
ниже, к текущему определению. Семантика незавершена, пока orig2 не разрешится
(например, по THEN). Разрешить ссылку вперед orig1, используя позицию следующей
добавленной семантики выполнения. Время выполнения: ( -- ) Продолжить выполнение
с позиции, заданной разрешением orig2.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: orig -- ) Разрешить ссылку вперед orig, используя позицию
семантики выполнения. Добавить семантику времени выполнения, данную ниже, к
текущему определению. Время выполнения: ( -- ) Продолжить выполнение. HERE TO
:-SET
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: -- dest ) Положить следующую позицию передачи управления, dest,
на управляющий стек. Добавить семантику времени выполнения, данную ниже, к
текущему определению. Время выполнения: ( -- ) Продолжить выполнение. HERE TO
:-SET
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: dest -- ) Добавить семантику времени выполнения, данную ниже, к
текущему определению. Разрешить ссылку назад dest. Время выполнения: ( x -- )
Если все биты x нулевые, продолжать выполнение с позиции, заданной dest. ABORT"
UNTIL без BEGIN !"
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: dest -- orig dest ) Положить позицию новой неразрешенной ссылки
вперед orig на управляющий стек под имеющимся dest. Добавить семантику времени
выполнения, данную ниже, к текущему определению. Семантика незавершена, пока
orig и dest не разрешатся (например, по REPEAT). Время выполнения: ( x -- ) Если
все биты x нулевые, продолжать выполнение с позиции, заданной разрешением orig.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: orig dest -- ) Добавить семантику времени выполнения, данную
ниже, к текущему определению, разрешив ссылку назад dest. Разрешить ссылку
вперед orig, используя позицию добавленной семантики выполнения. Время
выполнения: ( -- ) Продолжить выполнение с позиции, заданной dest. ABORT" REPEAT
без BEGIN !"
\n 94 CORE EXT Интерпретация: семантика
неопределена. Компиляция: ( C: dest -- ) Добавить семантику времени выполнения,
данную ниже, к текущему определению, разрешив ссылку назад dest. Время
выполнения: ( -- ) Продолжить выполнение с позиции, заданной dest. Если другие
управляющие слова не используются, то любой программный код после AGAIN не будет
выполняться. ABORT" AGAIN без BEGIN !"
\n 94 Итерпретация: семантика не определена.
Компиляция: ( -- ) Добавить семантику выполнения текущего определения в текущее
определение. Неоднозначная ситуация возникает, если RECURSE используется после
DOES>.
\n 94 Интерпретация: семантика неопределена.
Компиляция: ( C: -- do-sys ) Положить do-sys на стек управления. Добавить
семантику времени выполнения, данную ниже, к текущему определению. Семантика
незавершена до разрешения потребителем do-sys, таким как LOOP. Время выполнения:
( n1|u1 n2|u2 -- ) ( R: -- loop-sys ) Установить параметры цикла на индекс n2|u2
и предел n1|u1. Неопределенная ситуация возникает, если n1|u1 и n2|u2 не одного
типа. Все, что уже находилось на стеке возвратов, становится недоступным до тех
пор, пока не будут убраны параметры цикла. PUSH EDX PUSH EBX to fit body of
cycle in one cache line we should align to 16 (default value for ALIGN-BYTES)
(~day)
\n 94 CORE EXT Интерпретация: семантика
неопределена. Компиляция: ( C: -- do-sys ) Положить do-sys на стек управления.
Добавить семантику времени выполнения, данную ниже, к текущему определению.
Семантика незавершена до разрешения потребителем do-sys, таким как LOOP. Время
выполнения: ( n1|u1 n2|u2 -- ) ( R: -- | loop-sys ) Если n1|u1 равно n2|u2,
продолжить выполнение с места, данного потребителем do-sys. Иначе установить
параметры цикла на индекс n2|u2 и предел n1|u1 и продолжить выполнение сразу за
?DO. Неопределенная ситуация возникает, если n1|u1 и n2|u2 не одного типа. Все,
что уже находилось на стеке возвратов, становится недоступным до тех пор, пока
не будут убраны параметры цикла.
\n 94 Интерпретация: ( C: do-sys -- ) Добавить
семантику времени выполнения, данную ниже, к текущему определению. Разрешить все
появления LEAVE между позицией, данной do-sys и следующей позицией передачи
управления для выполнения слов за LOOP. Время выполнения: ( -- ) ( R: loop-sys1
-- | loop-sys2 ) Неопределенная ситуация возникает, если параметры цикла
недоступны. Прибавить единицу к индексу цикла. Если индекс цикла стал равным
пределу, убрать параметры цикла и продолжить выполнение сразу за циклом. Иначе
продолжить выполнение с начала цикла. inc dword [esp] jno short jno near lea
esp, 0c [esp]
\n 94 Интерпретация: ( C: do-sys -- ) Добавить
семантику времени выполнения, данную ниже, к текущему определению. Разрешить все
появления LEAVE между позицией, данной do-sys и следующей позицией передачи
управления для выполнения слов за LOOP. Время выполнения: ( n -- ) ( R:
loop-sys1 -- | loop-sys2 ) Неопределенная ситуация возникает, если параметры
цикла недоступны. Прибавить n к индексу цикла. Если индекс цикла не пересек
границу между пределом цикла минус единица и пределом цикла, продолжить
выполнение с начала цикла. Иначе убрать параметры цикла и продолжить выполнение
сразу за циклом. jno short jno near lea esp, 0c [esp]
\n 94 Интерпретация: семантика неопределена.
Выполнение: ( -- n|u ) ( R: loop-sys -- loop-sys ) n|u - копия текущего
(внутреннего) индекса цикла. Неопределенная ситуация возникает, если парметры
цикла недоступны.
\n 94 Интерпретация: семантика неопределена.
Выполнение: ( -- ) ( R: loop-sys -- ) Убрать текущие параметры цикла.
Неопределенная ситуация возникает, если они недоступны. Продолжить выполнение
сразу за самыми внутренними DO ... LOOP или DO ... +LOOP. lea esp, 08 [esp] ret
\n 94 Интерпретация: семантика неопределена.
Выполнение: ( -- ) ( R: loop-sys -- ) Убрать параметры цикла текущего уровня.
UNLOOP требуется для каждого уровня вложения циклов перед выходом из определения
по EXIT. Неоднозначная ситуация возникает, если параметры цикла недоступны. lea
esp, 0c [esp]
( "name" -- old-current )\n start a forth
module Если такой модуль уже существует, продолжить компиляцию в него
( old-current -- old-current )\n export some
module definitions
( old-current -- )\n finish the module
( "name" -- )\n Кладет в ORDER wordlist, к-ый даст
"name" или vocabulary если "name" - vocabulary wid on the stack?
\n
\n
\n
\n
\n нужно как в THEN
\n
( addr u -- false | i*x true )\n
( c-addr u -- false | i*x true )\n 94
c-addr и u - адрес и длина строки, содержащей ключевое слово для запроса
атрибутов присутствующего окружения. Если системе запрашиваемые атрибуты
неизвестны, возвращается флаг "ложь", иначе "истина" и i*x - запрашиваемые
атрибуты определенного в таблице запросов типа. расширение spf370: если в
windows environment есть запрашиваемая строка, то возвращаем её - c-addr u true
( n -- c-addr u )\n Unknown error
( n u -- c-addr u )\n Возвратить строку,
содержащую расшифровку кода ошибки n при условии u. Scattered Colon.
( ERR-NUM -> )\n показать расшифровку ошибки
( addr_winapi_structure )\n
( addr_winapi_structure )\n
( addr u -- addr u )\n
( addr u -- addr u )\n
( params "ИмяПроцедуры" "ИмяБиблиотеки" -- )\n
address of winproc address of library name address of function name # of
parameters имя функции имя библиотеки ABORT" Library not found" ABORT" Procedure
not found"
( "ИмяПроцедуры" "ИмяБиблиотеки" -- )\n
( xt1 n -- xt2 )\n
( xt n "name" -- )\n Здесь n в байтах!
( xt "name" -- )\n
( xt1 -- xt2 )\n
( xt "name" -- )\n
\n обнуление адресов импортируемых
процедур
( x task -- tid )\n запустить поток task
(созданный с помощью TASK:) с параметром x возвращает tid - хэндл потока, или 0
в случае неудачи
( tid -- )\n усыпить поток
( tid -- )\n разбудить поток
( tid -- )\n остановить поток (удалить)
( ms -- )\n приостановить поток на ms миллисекунд
(1000=1сек) вызывается самим потоком
( -- )\n остановить текущий поток (удалить)
( -- )\n
( c-addr u -- )\n например S" My Forth
Program.exe" SAVE
( -> )\n интерпретировать командную строку
чтобы REFILL не делал ( как по EVALUATE ), т.к. буфер не ATIB. имя программы
( -- )\n
( -- )\n
( n -- )\n
( n )\n n - размер параметров, к-е Windows
передает callback процедуре (в байтах)
( xt -- )\n выходим с кодом ошибки 3, если
обычная ошибка при инициализации 4 - если вложенная
( n )\n
\n TlsIndex@ FREE DROP
( addr -- addr )\n
( exc-info -- )\n может быть указано смещение
структуры на 2 CELLS DUP 65000 > IF NIP ELSE DROP CELL+ CELL+ @ THEN
\n
\n
\n
\n
\n
\n
\n