Initial working commit.
call start(), then eval("command", result buffer, size of buffer), then end()
[+] Разделил код на две части - виртуальная машина отдельно, пример ее изпользования - отдельно.
[+] IO буфера тоже сделал приватными для виртуальной машины. Еще немного, и можно будет пользовать столько vm, сколько захочется в одном проекте.
[*] Заменил макрос allocate на функцию new
[+] Сделал память потоконезависимой (каждая виртуальная машина крутится в своем потоке)
Рефакторинг.
[*] Сгруппировал работу с памятью в структуру
[*] В ВМ теперь находится только самое необходимое
[*] start() ждет, пока ВМ инициализируется и вернет fi и fo для общения с ней (из-за этого запуск множества машин может немного затянуться)
[*] ВМ тянет с собой только то, что надо (хендл потока и дескрипторы ввода/вывода)
[*] runtime теперь не завязан ни на какие ВМ - является польностью автономным после запуска
[!] Ха, теперь у виртуальной машины есть имя: OL (игра между Owl Lisp, long 0)
Теперь можно будет писать OL *ol = 0L; :)
[*] Исправил баг в sys-prim (когда все вываливалось, вместо возврата значения)
[*] Причесал GC
[+] !!! Добавил механизм pinvoke в виртуальную машину. Как использовать - смотреть в tests/dlopen.scm

На будущее надо будет добавить в параметры функции уточнения, как делать маршалинг в нейтивную сторону. Что-то вроде (MessageBox 0 (as-string 12345) "header" MB_OK))
Маршалер должен сам такие моменты парсать во время вызова.
[+] Добавил pinvoke для количества аргументов функции <=5, для чисал и строк
[+] Добавил calling convention (пока только __cdecl и __stdcall as default)
[+] Добавил базовый opengl тест (пока много кода в С)
[*] pinvoke теперь портабельный (но я еще не проверял)
[+] пример opengl расширен, теперь выходит по {esc}
[+] Ввел новый тип type-handle (это байт-вектор с HANDLE в нагрузке) - не охота парсать длинные числа
[+] Научил pinvoke принимать длинные числа (это тоже список, как и пара, по 24 бита в little-endian формате)
[*] Теперь pinvoke может вызвать функции с до 12 параметрами (как CreateWindowEx - какой мудак придумал эту функцию?)
[-] Практически полностью избавился он нейтивного win32 кода для примера opengl - перенес на olw
[-] Ну вот, полностью избавился от нейтивного кода. Теперь весь opengl пример бегает под OL.
[+] Заработал пример с шейдерами
[*] pinvoke для type** пока в процессе разработки
[+] Эффект звездного неба. Он охуенен!
[+] Добавил шейдеров
[*] Вынес шейдеры в отдельный файл
[*] Теперь кортежи при отправке превращаются в массив (кстати, надо бы tuple переименовать в array - все равно размер фиксирован, а для переменных размеров у нас есть list) - и еще надо бы проверку (через DEBUG) организовать того, что в tuple ушло
[*] Small sanity commit
[+] Добавил аргументы с плавающей запятой - отправлять, как (cons 46 число)
Merge branch 'workspace/master'

Conflicts:
	.gitignore
	Makefile
	owl/assemble.scm
	owl/cgen.scm
	owl/defmac.scm
	owl/dump.scm
	owl/io.scm
	owl/ol.scm
	owl/primop.scm
	owl/regex.scm
	tests/hashbang.scm
	tests/theorem-rand.scm

--
Вмержил то, над чем работал. Что и как можно посмотреть по комментам к коммитам в истории.
Ну а если коротко: добавил Platform Invoke механизм (p/invoke) и запустил opengl окошко с шейдером в качестве примера.
[+] Added error checker for shaders.
[*] Выделил pinvoke в отдельный модуль и положил на его место
[+] Добавил каркас библиотеки opengl, распределенную по версиям (пока до 2.1 включительно), перенес пока одну функцию.
[+] Закомитил временные доки для работы с opengl.