WinForth32
[
Download
Документы
]
Наконец-то! Появился порт SMAL32 для Win32. Это даже не совсем порт, но тем не менее...
WinForth32 v1.00a (с) Горчаков Г.Ю. 1999
32-разрядный Форт для платформы Win32
Создан на базе SMAL32 http://ht.psy.msu.ru/smal32
и под влиянием SPF315 http://www.eserv.ru
Компилятор, интерпретатор.
Реализация:
- В FW32 используется прямой шитый код;
- интерпретатор работает в консольном варианте, если запустить FW32.EXE без параметров;
- при указании в командной строке имени файла, выполнится его компиляция и завершение работы (если нет ошибок в тексте);
- максимальная длина строки со счетчиком - 255;
- максимальная длина строки в тексте - 1023;
- в качестве разделителя слов используется BL и TAB;
- в именах определений могут использоваться любые символы;
- при поиске в словаре прописные и строчные символы не различаются;
- встроенный ассембер перенесен из Smal32 Ver 97.11.1.
Внешне, и во многом внутренне это SMAL32 переписанный под платформу WIN32.
Сохранена структура словарной статьи, адресный интерпретатор. Практически
без изменений перенесен встроенный ассемблер, слова для работы с локальными
переменными, процесс компиляции, сообщения об ошибках.
В отличие от SMAL32:
- Нет слов USE, MAKEUNIT ( адреса работы слов в библиотеках от SMAL32 не совместимы ).
- Нет встроенной мультизадачности.
- Вместо переменных MinMem, MaxMem введена одна переменная UpMem на основании которой заполняются поля о размере необходимой памяти в заголовке .EXE файла. Смысл такой-же как в MinMem.
- Введена переменная Warning. Если в эту переменную записано True, перед создании новой словарной статьи будет выполнена попытка найти это имя в словаре. При удачном поиске выдается предупреждающее сообщение.
- В создаваемую Defer переменную первоначально записывается адрес NOOP.
- Через Defer переменные определены слова: Restart, >Upper, >Lower, Key, ?Key, Bye, Error, Type.
- В переменной Tabbing записано количество пробелов заменяющих символ Tab в тексте.
- При работе слова Word и при форматном преобразовании чисел используется область памяти WordBuf размером 256 байт, а не свободная часть словаря.
- Переменная отвечающая за совместимость слова EndCase с ANS стандартом называется ANS и является Value переменной.
- Слово SEE теперь дизассемблирует и Code-слова
Для генерации исполняемого файла можно использовать слова Save и Build:
Save
"FileName" -->
Cохранение текущего состояния Forth системы со всеми определенными словами (генерация
новых версий). Пример:
Save newforth - будет записана новая версия "newforth.exe"
Build
C-Adr "FileName[.exe]" ["FileName[.map]]" -->
C-Adr - ASCIIz строка с именем значка который будет ассоциироваться с данной программой.
В исполняемый модуль будут включены только те слова которые используются в проекте.
Пример:
A" ico\\myprg" Build myprg myprg - построение файла myprg.exe с значком myprg.ico и
создание файла ссылок myprg.map
Созданный файл настороен на работу как GUI приложение. Если необходимо работать как
консольное приложение выполните слово InitConsole.
ASCIIz -->
Пример: A" Консоль" InitConsole
ASCIIz строка параметров - это имя окна консоли.
Процесс запуска определяется Defer переменной Restart. В интерпретаторе в этой
переменной записан адрес слова System. При генерации исполняемого модуля словом
Build в эту переменную записывается исполняемый адрес последнего определенного слова.
Импорт API функций выполняется создающим словом ImportDLL в контексте:
AdrNameLib "Word" "NameProc" -->
Со стека снимается адрес строки с именем библиотеки создается словарная статья с
именем "Word" в поле параметров которого записываются ссылка на имя библиотеки,
адрес вызова процедуры и имя прцедуры "NameProc". Адрес вызова будет заполнен после
первого выполнения созданного слова. Определить имя библиотеки можно примерно так:
Create USER32.DLL A" USER32.DLL" A, Create;
В WF32 уже определены следующие имена библиотек:
KERNEL32.DLL, USER32.DLL, GDI32.DLL, COMCTL32.DLL.
Используются API функции:
Библиотека Слово Имя функции
KERNEL32.DLL ImportDLL GetStdHandle GetStdHandle
KERNEL32.DLL ImportDLL SetConsoleTitle SetConsoleTitleA
KERNEL32.DLL ImportDLL AllocConsole AllocConsole
KERNEL32.DLL ImportDLL CloseHandle CloseHandle
KERNEL32.DLL ImportDLL CreateFile CreateFileA
KERNEL32.DLL ImportDLL DeleteFile DeleteFileA
KERNEL32.DLL ImportDLL SetFilePointer SetFilePointer
KERNEL32.DLL ImportDLL ReadFile ReadFile
KERNEL32.DLL ImportDLL WriteFile WriteFile
KERNEL32.DLL ImportDLL GetFileSize GetFileSize
KERNEL32.DLL ImportDLL ExitProcess ExitProcess
KERNEL32.DLL ImportDLL ?InConsole GetNumberOfConsoleInputEvents
KERNEL32.DLL ImportDLL InConsole ReadConsoleInputA
KERNEL32.DLL ImportDLL GetCommandLine GetCommandLineA
В заголовке EXE файла явным образом импортируются следующие функции:
LoadLibraryA, GetProcAddress - для загрузки функций API.
GetLastError, FormatMessageA, MessageBoxA - для сообщения об ошибках загрузки функций.
По умолчанию в WF32 значения переменных следующие:
RStackSize, StackSize - 16 Kbytes
LStackSize - 256 KBytes
UpMem - 1 MBytes
Tabbing - 8
Warning - False
ANS - False
Заранее благодарен за все замечания и пожелания.
Геннадий Горчаков. G.Gorchakov@rostuzes.elektra.ru
WinForth32 Version 1.00a (73Kb)
Полезная документация собрана здесь.
Beej's Guide to Network Programming
- очень хороший туториал о сокетах. Примеры программ можно найти на
www.forth.org.ru/~mda.
Windows Sockets An Open Interface for
Network Programming under Microsoft Windows
Возврат
|